命令介绍:
ln是linux中又一个非常重要命令,ln是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
命令格式:
ln 【参数】【源文件】【目标文件】
命令功能:
Linux文件系统中,有所谓的链接(link),而链接又可分为两种:
硬链接(hardlink): 硬链接指通过索引节点(Inode)来进行连接。在Linux中,多个文件名指向同一索引节点是存在的;一般这种连接就是硬链接。
小结:硬链接文件是具有相同inode节点号的不同文件;
删除硬链接文件或者删除源文件之一,文件实体并未被删除;
只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除;
当所有的硬链接文件及源文件被删除后,文件的数据块及目录的链接才会被释放,或磁盘fsck检查的时候;也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除;
硬链接文件是文件的又一个入口;
可以通过给文件设置硬链接文件,来防止重要文件被误删;
通过执行命令“ln 【源文件】【硬链接文件】”,即可完成创建硬链接;
硬链接的删除“rm -f 硬链接文件”。
软链接(symboliclink): 软链接也称之为符号链接(Symbolic Link)。在Linux中软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。
小结:软链接以路径的形式存在,类似于Windows操作系统中的快捷方式;
删除源文件,软链接文件依然存在,但是无法访问指向的路径内容;
执行命令“ln -s 源文件软链接文件”,即可完成创建软链接;
软链接可以对目录进行链接;
软链接和源文件是不同类型的文件也是不同的文件,inode号不同;
软链接的删除“rm -f 软链接文件”。
默认情况下,ln命令产生硬链接;如果要创建软链接(符号链接)必须使用"-s"选项。
注意:软链接(符号链接)文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
命令参数:
必要参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
选择参数:
-S “-S ”或 “--suffix=”
-V “-V”或“--version-control=”
--help 显示帮助信息
--version 显示版本信息
命令实例:
实例1:给文件创建软链接。[root@ilinux test]# ll
total 8
-rw-r--r-- 2 root root 0 Nov 22 06:33 lnlinux
drwxr-xr-x 2 root root 4096 Nov 21 17:27test3
drwxr-xr-x 2 root root 4096 Nov 21 17:25test5
[root@ilinux test]# ln -s lnlinux lnlin_soft_link
[root@ilinux test]# ls -li
total 8
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786447 -rw-r--r-- 2 root root 0 Nov 22 06:33 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
说明:为 lnlinux 源文件创建软链接 lnlin_soft_link 。
实例2:给文件创建硬链接。[root@ilinux test]# ln lnlinux lnlin_hard_link
[root@ilinux test]# ls -li
total 8
786447 -rw-r--r-- 3 root root 0 Nov 22 06:33 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786447 -rw-r--r-- 3 root root 0 Nov 22 06:33 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
说明:为 lnlinux 源文件创建硬链接 lnlin_hard_link 。
小结:
从上面的实例结果中可以看出,硬链接文件 lnlin_hard_link 和源文件 lnlinux 的inode节点号相同,均为786447;而软链接文件 lnlin_soft_link 的inode节点号与源文件 lnlinux 不同,为786443。
硬链接文件的链接数也增加了。
实例3:接上面两个实例,链接完成后,删除和重建链接源文件。[root@ilinux test]# ls -li
total 16
786447 -rw-r--r-- 3 root root 12 Nov 22 06:54 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786447 -rw-r--r-- 3 root root 12 Nov 22 06:54 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
[root@ilinux test]# rm -f lnlinux
[root@ilinux test]# ls -li
total 12
786447 -rw-r--r-- 2 root root 12 Nov 22 06:54 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
[root@ilinux test]# touch lnlinux
[root@ilinux test]# ls -li
total 12
786447 -rw-r--r-- 2 root root 12 Nov 22 06:54 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786445 -rw-r--r-- 1 root root 0 Nov 22 07:08 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
[root@ilinux test]# echo "123">lnlinux
[root@ilinux test]# cat lnlinux
123
[root@ilinux test]# cat lnlin_hard_link
hello linux
说明:
1.源文件被删除后,并没有影响硬链接文件;而软链接文件在以红底白字不断的闪烁,提示源文件已经不存在;
2.重建源文件后,软链接文件不再闪烁提示,说明已经链接成功,找到了链接文件系统;
3.重建源文件后,硬链接文件并没有受到源文件影响,硬链接文件的内容还是保留了删除前源文件的内容,说明硬链接已经失效。
实例4:往源文件写入内容,软、硬链接文件的变化。[root@ilinux test]# ls -li
total 8
786447 -rw-r--r-- 3 root root 0 Nov 22 06:33 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786447 -rw-r--r-- 3 root root 0 Nov 22 06:33 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
[root@ilinux test]# echo "hellolinux" >lnlinux
[root@ilinux test]# cat lnlinux
hello linux
[root@ilinux test]# cat lnlin_soft_link
hello linux
[root@ilinux test]# cat lnlin_hard_link
hello linux
说明:往源文件lnlinux里写入内容后,它的软、硬链接文件同样都有相同的内容。
实例5:给目录创建软链接。[root@ilinux test]# ls -li
total 16
786447 -rw-r--r-- 2 root root 12 Nov 22 06:54 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786445 -rw-r--r-- 1 root root 4 Nov 22 07:09 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
[root@ilinux test]# ln -s test3 test3_soft_link
[root@ilinux test]# ls -li
total 16
786447 -rw-r--r-- 2 root root 12 Nov 22 06:54 lnlin_hard_link
786443 lrwxrwxrwx 1 root root 7 Nov 22 06:35 lnlin_soft_link ->lnlinux
786445 -rw-r--r-- 1 root root 4 Nov 22 07:09 lnlinux
786444 drwxr-xr-x 2 root root 4096 Nov 2117:27 test3
786451 lrwxrwxrwx 1 root root 5 Nov 22 07:18 test3_soft_link -> test3
786446 drwxr-xr-x 2 root root 4096 Nov 2117:25 test5
说明:
1. 目录只能创建软链接文件,对于目录的软链接文件也是生产场景运维中常用的功能;
2. 目录不能创建硬链接文件,是因为目录本身就有硬链接文件。
创建一个空目录里面就会有“.(当前目录)和 ..(上一级目录)”
.(当前目录)和oldboydir 的 inode节点号是相同的,均为786453。
..(上一级目录)和 ../oldboy 的 inode节点号是相同的,均为 786450。
链接总结:
【文件链接】删除软链接文件,源文件和硬链接文件没有任何变化;
删除硬链接文件,源文件和软链接文件没有任何变化;
删除源文件,硬链接文件没有任何变化但软链接文件会以红底白字闪烁表示软链接文件已失效;
同时删除源文件和硬链接文件,整个文件才会真正的被删除;
很多硬件设备中的快照功能,其实就是利用了硬链接的原理。
【目录链接】目录只能创建软链接文件,不能创建硬链接文件;
目录的软链接文件是生产场景运维中常用的技巧;
每个目录下面都有硬链接文件“.(当前目录)和 ..(上一级目录)”。