Linux
文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样可以让文件在文件系统中多处被看到。不过,在 Linux
中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本,linux有两种类型的链接:硬链接和符号链接(软链接)。
硬链接(hard link)只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为
inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。
另外一种链接称之为符号链接(Symbolic Link),也叫软链接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在软链接中,文件实际上是一个文本文件,其中包含有另一文件的位置信息,如果删了这个软链接文件,那就等于不需要这个链接,和原来存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接也不可用。
创建硬链接:ln filename 【linkname】
创建软链接:ln -s filename 【linkname】
[[email protected] opt]# touch aa #创建文件aa [[email protected] opt]# ln aa bb #创建aa的硬链接bb [[email protected] opt]# ln -s aa cc #创建aa的软链接cc [[email protected] opt]# ll -i #查看结果及inode值 总用量 0 2490370 -rw-r--r--. 2 root root 0 7月 30 04:36 aa 2490370 -rw-r--r--. 2 root root 0 7月 30 04:36 bb 2490371 lrwxrwxrwx. 1 root root 2 7月 30 04:36 cc -> aa [[email protected] opt]# ln ../opt/aa /boot/dd #跨文件系统创建aa的硬链接dd,有报错信息 ln: 创建硬链接"/boot/dd" => "../opt/aa": 无效的跨设备连接 [[email protected] opt]# ln -s ../opt/aa /boot/ee #跨文件系统创建aa的软链接ee,无报错信息 [[email protected] opt]# ll -i /boot/ #查看结果及inode值 39 lrwxrwxrwx. 1 root root 9 7月 30 04:37 ee -> ../opt/aa [[email protected] opt]# ln ff gg #为不存在的ff创建硬链接gg,有报错信息 ln: 正在访问"ff": 没有那个文件或目录 [[email protected] opt]# ln -s ff hh #为不存在的ff创建软链接hh,无报错信息 [[email protected] opt]# ll -i #查看结果及inode值 总用量 0 2490370 -rw-r--r--. 2 root root 0 7月 30 04:36 aa 2490370 -rw-r--r--. 2 root root 0 7月 30 04:36 bb 2490371 lrwxrwxrwx. 1 root root 2 7月 30 04:36 cc -> aa 2490373 lrwxrwxrwx. 1 root root 2 7月 30 04:37 hh -> ff [[email protected] opt]# echo aaaaaaaaaa > aa #在aa文件中写入内容 [[email protected] opt]# cat aa #查看源文件aa的内容 aaaaaaaaaa [[email protected] opt]# cat bb #查看硬链接bb的内容 aaaaaaaaaa [[email protected] opt]# cat cc #查看软链接cc的内容 aaaaaaaaaa [[email protected] opt]# rm -f aa #删除源文件aa [[email protected] opt]# cat bb #删除源文件aa后查看硬链接bb的内容 aaaaaaaaaa [[email protected] opt]# cat cc #删除源文件cc后查看软链接cc的内容 cat: cc: 没有那个文件或目录 [[email protected] opt]# ll -i #删除源文件后查看链接结果及inode值 总用量 4 2490370 -rw-r--r--. 1 root root 11 7月 30 04:45 bb 2490371 lrwxrwxrwx. 1 root root 2 7月 30 04:36 cc -> aa 2490373 lrwxrwxrwx. 1 root root 2 7月 30 04:37 gg -> ff
从以上操作过程中可以看到硬链接文件与源文件的inode值一样,即硬链接文件与源文件同属一个数据块,软链接文件与源文件的inode值不一样,即软链接文件是单独存在的一个文本文件。当源文件被删除时,硬链接文件不受影响,而软链接文件则无效。
硬链接特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件;
软链接特性:
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接);
如下图所示软链接、硬链接及源文件的关系: