提出问题:
在openEuler系统中能否像windows一样,创建快捷方式?
答案是肯定的,但是在openEuler系统中,"快捷方式"不太一样。
在Windows系统中,快捷方式是一个指向源文件的链接文件,可以让用户通过这个链接来访问原始的文件;原文件被删除或移动到其他地方后,链接文件就会失效。
在openEuler中存在硬链接和软链接两种文件。
ln命令用于创建链接文件。
软链接(symbolic link) | 硬链接(hard link) |
---|---|
以路径形式存在,类似于Windows的快捷方式 | 以文件副本形式存在,但不占用实际空间 |
删除源文件后链接失效 | 删除源文件后链接不失效 |
可以对目录进行链接 | 不可以对目录进行链接 |
可以跨文件系统 | 不可以跨文件系统 |
ln的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,不需要在每一个目录下都放一个相同的文件,只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)该文件就可以,不必重复占用磁盘空间。
一、链接ln命令
ln命令在不带参数的情况下,默认创建的是硬链接。
语法:ln [-f|-n][-s] SourceFile [TargetFile]
-b 删除,覆盖以前建立的链接。
-d 允许超级用户制作目录的硬链接。
-f 强制执行。
-i 交互模式,文件存在则提示用户是否覆盖。
-n 把符号链接视为一般目录。
-s 软链接(符号链接)。
示例:在当前目录下,为文件a.txt创建硬链接。
[root@localhost ~]# vi a.txt
在a.txt中按字母i,输入字符串:hello world。然后按esc键,输入 :wq,保存并退出。
[root@localhost ~]# ls
a.txt
使用ln命令创建a.txt文件的链接文件mylink1。
[root@localhost ~]#ln a.txt mylink1
用vi打开mylink1文件,可以看到内容和a.txt完全一样。
[root@localhost ~]# vi mylink1
二、硬链接
可以将它理解为一个”指向原始文件的指针”,系统不为它分配独立的文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的连接数就会增加1;而且只有当该文件的连接数为 0 时,才算彻底被将它删除。因此即便删除原始文件,依然可以通过硬链接文件来访问。
示例1:在当前目录下,为文件a.txt创建硬链接。
[root@localhost ~]# vi a.txt
在a.txt中按字母i,输入字符串:hello world。然后按esc键,输入 :wq,保存并退出。
[root@localhost ~]# ls
a.txt
使用ln命令创建a.txt文件的链接文件mylink1。
[root@localhost ~]#ln a.txt mylink1
用vi打开mylink1文件,可以看到内容和a.txt完全一样。
[root@localhost ~]# vi mylink1
删除文件a.txt,然后用vi打开mylink1文件,还是可以看到a.txt的内容。
[root@localhost ~]# rm –rf a.txt
[root@localhost ~]# vi mylink1
需要注意的是,不能跨分区对文件进行硬链接。
示例2:在/tmp目录下,为当前目录(/root)下的a.txt文件创建硬链接。
[root@localhost ~]# vi a.txt
在a.txt中按字母i,输入字符串:hello world。然后按esc键,输入 :wq,保存并退出。
[root@localhost ~]# ls
a.txt
使用ln命令创建a.txt文件的硬链接文件mylink2,硬链接文件mylink2在/tmp目录下。
[root@localhost ~]#ln /root/a.txt /tmp/mylink2
ln: 无法创建硬链接 '/tmp/mylink2' => '/root/a.txt': 无效的跨设备链接
也不能对目录进行硬链接。
示例3:在当前目录(/root)下创建目录mydir,并为它创建硬链接dirlink1。
[root@localhost ~]# mkdir mydir
[root@localhost ~]#ln mydir dirlink1
ln: mydir: 不允许将硬链接指向目录
三、软链接
等同于Windows系统下的快捷方式,仅仅包括所含链接文件的路径名字。因此能链接目录,也能跨文件系统链接。但是,当删除源文件后,软链接文件也将失效。
示例1:在当前目录下,为文件a.txt创建硬链接。
[root@localhost ~]# vi a.txt
在a.txt中按字母i,输入字符串:hello world。然后按esc键,输入 :wq,保存并退出。
[root@localhost ~]# ls
a.txt
使用ln命令创建a.txt文件的软链接文件mylink3。
[root@localhost ~]#ln -s a.txt mylink3
用vi打开mylink1文件,可以看到内容和a.txt完全一样。
[root@localhost ~]# vi mylink3
删除文件a.txt,然后用vi打开mylink3文件,不能看到a.txt的内容。
[root@localhost ~]# rm –rf a.txt
[root@localhost ~]# vi mylink3
示例2:在/tmp目录下,为当前目录(/root)下的a.txt文件创建软链接。
[root@localhost ~]# vi a.txt
在a.txt中按字母i,输入字符串:hello world。然后按esc键,输入 :wq,保存并退出。
[root@localhost ~]# ls
a.txt
使用ln命令创建a.txt文件的软链接文件mylink4,硬链接文件mylink4在/tmp目录下。
[root@localhost ~]#ln /root/a.txt /tmp/mylink4
[root@localhost ~]# vi mylink4
示例3:在当前目录(/root)下创建目录mydir,并为它创建软链接dirlink2。
[root@localhost ~]# mkdir mydir
[root@localhost ~]#ln -s mydir dirlink2
[root@localhost ~]#cd dirlink2
四、ln命令训练
下面,通过一个完整流程,训练ln命令用法。
1.在/tmp目录下,创建文件夹(姓名),并进入该文件夹。
[root@localhost ~]# mkdir /tmp/zhangsan
[root@localhost ~]# cd /tmp/zhangsan
[root@localhost zhangsan]#
2.在文件夹(姓名)中,创建文件(姓名.txt),并在文件中输入自己的姓名。
[root@localhost zhangsan]# vi zhangsan.txt
3.在文件夹(姓名)中,创建文件(班级.txt),并在文件中输入班级信息。
[root@localhost zhangsan]# vi class.txt
4.在文件夹(姓名)中,创建文件(学号.txt),并在文件中输入自己的学号。
[root@localhost zhangsan]# vi stuid.txt
5.在/root目录下,为/tmp/zhangsan/姓名.txt文件新建软链接mylink_name。
[root@localhost zhangsan]# cd
[root@localhost ~]# ln -s /tmp/zhangsan/zhangsan.txt mylink_name
[root@localhost ~]# vi mylink_name
[root@localhost ~]#
6.在/root目录下,为/tmp/zhangsan/班级.txt文件新建硬链接mylink_class,看是否可以成功,说明为什么,并改正。
[root@localhost zhangsan]# cd
[root@localhost ~]# ln /tmp/zhangsan/class.txt mylink_class
ln: 无法创建硬链接 'mylink_class' => '/tmp/zhangsan/class.txt': 无效的跨设备链接
无法创建成功,因为硬链接不能跨区。
[root@localhost ~]# cp /tmp/zhangsan/class.txt /root/class.txt
[root@localhost ~]# ln class.txt mylink_class
[root@localhost ~]# vi mylink_class
[root@localhost ~]#