(由于以下内容纯经手打,有些过于白话,且省事尽量无配图,不明之处敬请留言!)
(和windows系统的快捷方式、文本页面中的超链接一样,linux上文件和目录也有类似的链接方式,使用中我们自然也有这样的需求,如服务脚本的链接,程序目录的链接,使得文件目录的结构更清晰,便于使用和维护。)
一、什么是硬链接
硬链接(hard link)又称为实际链接,是通过索引点来进行连接。
在linux文件系统中,系统内部读写文件过程分成三步:首先,系统找到这个文件名对应的inode编号;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读写数据。即所有的文件源数据都会有一个索引节点的编号inode,inode和数据是唯一的,但多个路径文件名指向这同一个索引节点是被允许的,也就是说,文件名只是inode的别名,其多个名字代表的都是这个数据本身,都可以作为源文件,事实上保存在数据块中的数据只有一份;
即硬链接允许一个文件拥有多个有效的路径名,这意味着可以用不同的文件名访问同样的内容,并修改其中一个则真实数据便修改了。删除一个链接并不影响索引节点本身的数据和其它的链接,只有最有一个链接被删除时,文件的真实数据块和文件名的链接才会被释放。也就是说,从使用的层面上,文件真正删除的前提是与之相关的所有硬链接都被删除。
硬链接有两个限制:
- 不允许给目录创建硬链接,这是因为目录文件没有inode索引节点,它其实就是一个目录的列表,包含文件名和与之对应的inode节点;
- 只有在同一文件系统中的路径才能创建链接文件,毕竟同源,当然要在一起,就好比同一分区内mv移动文件很快的,只是换了个关联的链接路径,但如果是mv到另一个分区,那是很慢的,因为真实数据也要复制过去;其inode就发生改变了;还怎么做到所有链接数据同步啊!
[root@Moni work]# touch 123.txt
[root@Moni work]# ls -li
1584242 -rw-r--r-- 1 root root 0 8月 24 17:20 123.txt
[root@Moni work]# ln 123.txt ln1-123.txt <--建立了硬链接-->
[root@Moni work]# ls -li
1584242 -rw-r--r-- 2 root root 0 8月 24 17:20 123.txt
1584242 -rw-r--r-- 2 root root 0 8月 24 17:20 ln1-123.txt
[root@Moni work]# ln 123.txt ln2-123.txt
[root@Moni work]# ls -li
1584242 -rw-r--r-- 3 root root 0 8月 24 17:20 123.txt
1584242 -rw-r--r-- 3 root root 0 8月 24 17:20 ln1-123.txt
1584242 -rw-r--r-- 3 root root 0 8月 24 17:20 ln2-123.txt
<--有没有发现“ls -li”输出第三列数字随着链接数量的增加而+,它表示这个文件有多少个硬链接存在-->
<--当我们删除文件时,可以注意一下这个数字,以免文件关联没有真的删除,注意这里说的是文件不是目录-->
<--而三个文件的第一列属性是一样的,这就是文件的索引节点inode编号,同源当然编号一样咯-->
[root@Moni work]# echo "123456" > 123.txt
[root@Moni work]# cat ln1-123.txt ln2-123.txt
123456
123456
<--如上修改其中文件所有都修改-->
[root@Moni work]# rm -rf ln1-123.txt ln2-123.txt
[root@Moni work]# cat 123.txt
123456
[root@Moni work]# ls -li
1584242 -rw-r--r-- 1 root root 7 8月 24 17:27 123.txt
二、什么是软链接
软连接(soft link)又称为符号连接,是一个包含了另一个文件路径的文件,可以指向任意文件和目录,也可以跨不同的文件系统。
也就类似于windows的“快捷方式”,删除软连接,并不会删除指向的源文件,如果删除了源文件,则软连接会出现断链,也就是windows上说的“快捷失效”,linux上是找不到源文件;
[root@Moni work]# ln -s 123.txt 123.txt-link
[root@Moni work]# ls -li
1584242 -rw-r--r-- 1 root root 7 8月 24 17:27 123.txt
1584243 lrwxrwxrwx 1 root root 7 8月 24 17:37 123.txt-link -> 123.txt
[root@Moni work]# rm -rf 123.txt
[root@Moni work]# cat 123.txt-link
cat: 123.txt-link: 没有那个文件或目录
如此,“-s”参数是创建软连接,可以发现两个文件的inode节点不同,且两个文件数据都是唯一的,也就是删除就是删除了;
但是123.txt-link文件,属性“lrwx”有个“l”,这个意思是链接文件,也可以认为是重定向吧,当源文件删除,则找不到源文件。如果是在字符界面,则“断链”的源文件文件呈跳动的红色效果。
(好的就分享到这里,如果您有高见或好的分享,记得留言哦!)
世间博客不少,风景这边独好!