【linux系统命令】文件目录的硬链接软链接

(由于以下内容纯经手打,有些过于白话,且省事尽量无配图,不明之处敬请留言!)


(和windows系统的快捷方式、文本页面中的超链接一样,linux上文件和目录也有类似的链接方式,使用中我们自然也有这样的需求,如服务脚本的链接,程序目录的链接,使得文件目录的结构更清晰,便于使用和维护。)

一、什么是硬链接

硬链接(hard link)又称为实际链接,是通过索引点来进行连接。

在linux文件系统中,系统内部读写文件过程分成三步:首先,系统找到这个文件名对应的inode编号;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读写数据。即所有的文件源数据都会有一个索引节点的编号inode,inode和数据是唯一的,但多个路径文件名指向这同一个索引节点是被允许的,也就是说,文件名只是inode的别名,其多个名字代表的都是这个数据本身,都可以作为源文件,事实上保存在数据块中的数据只有一份;

即硬链接允许一个文件拥有多个有效的路径名,这意味着可以用不同的文件名访问同样的内容,并修改其中一个则真实数据便修改了。删除一个链接并不影响索引节点本身的数据和其它的链接,只有最有一个链接被删除时,文件的真实数据块和文件名的链接才会被释放。也就是说,从使用的层面上,文件真正删除的前提是与之相关的所有硬链接都被删除。

注意

上面我们说删除最后一个链接,数据块上的数据和文件的链接才会被释放,而不是说真实的数据块被删除,为什么?事实上,我们的数据是存储在文件系统的一个个数据块上,也就是我们说的block超级快,通过索引链接indoeinode关联,被我们关联识别并读写操作,但系统本身只通过inode来识别文件,如果这种关联释放了,我们自然也就找不到数据了,所以我们在系统上操作“rm -rf”删除的只是文件链接,其真实数据还在,这也是在数据不覆盖重写的情况下,很容易恢复的原因。

文件的索引节点inode信息可以使用命令查看:start inode.txt

硬链接有两个限制:

  • 不允许给目录创建硬链接,这是因为目录文件没有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”,这个意思是链接文件,也可以认为是重定向吧,当源文件删除,则找不到源文件。如果是在字符界面,则“断链”的源文件文件呈跳动的红色效果。

(好的就分享到这里,如果您有高见或好的分享,记得留言哦!)


原创文章,转载请注明:转自于公牛博客

本文链接地址:【linux系统命令】文件目录的硬链接软链接

7
祝福我们的祖国繁荣昌盛
  • 请尽情挥洒您的笔墨!

    欢迎来到公牛博客更多分享更多精彩记录美丽点亮生活

    公牛博客·统计碑运行:3095 D
    博文:239 P
    评论:458 S