linux下硬连接与软连接

来源:互联网 发布:便宜的鼠标 知乎 编辑:程序博客网 时间:2024/06/15 02:42

linux下的文件管理是通过inode和block来保存的,一个文件内的实际内容是保存在block中的,而文件的属性,权限之类以及该文件的block都在在inode当中,一个文件会占用一个inode,而当一个文件过大时,它是会占用多个block的,而这些block都在inode当中记录着。

有了上面这个认识之后,就具体来看看两种连接究竟是什么样子。

ln [-参数] 源文件 目标文件-s :符号连接(symbolic link)即所谓的软连接,就是windows下的快捷方式-f :如果目标文件存在,则直接删除后再创建

默认不加参数情况下,是创建硬连接。
硬连接的实现机理呢,其实就是让多个文件指向同一个inode号码而已。简单来理解,就是你创建的连接只是在该目录下创建了一个连接到某inode号的关联记录而已。

下面直接用实例来说明:

ln /etc/crontab .ll -i /etc/crontab /root/crontab

这里写图片描述
这里看到,在/root目录下创建了一个crontab文件的连接。查看这两个文件的inode号竟然是一样的,并且它的第三个字段都为2,这里说一下第三个字段为连接数,即有多个连接指向该文件,这里就更好说明这两个文件其实是指向同一个文件。

竟然知道了硬连接其实是增加一个连接数,那么它的作用就显而易见了,就是防止误删,当你在删除一个文件时,其实是在减少该文件的连接数,这里等介绍完软连接后再具体说这个问题。

局限性:

不能跨文件系统
不能连接到目录


软连接是创建一个新的文件,而该文件的内容就是它所指向文件的文件名,当源文件被删除后,该连接文件会打开失败,因为已经找不到源文件的“文件名”了。

同样是刚才的例子

ln -s /etc/crontab crontab2ll -i /etc/crontab /root/crontab2

这里写图片描述

看到两个文件的inode是不一样的,这里的crontab文件的连接数为2,因为我们刚才创建了一个硬连接还在呢,所以是2,但是新创建的软连接这个文件的连接数却是1,这里足可见,软连接是重新创建了一个文件,而且细心的话,你可以发现这个新文件的大小为12个bytes,因为/etc/crontab是12个bytes,就是上面提到的,该文件的内容是它所指向的文件名。


<实例测试>

最后来通过一系列的实例来具体感受下两种连接的不同。
由于是测试,我们就在/tmp目录下进行

cp -a /etc/passwd .du -sb ; df -i . //这里的du是评估文件系统的磁盘使用量(一般用来查看目录的使用情况,df是列出文件系统整体磁盘使用量)

这里还是给出两个命令的参数吧

du:-a:列出所有文件及目录的容量-h:以常见的容量单位呈现(G/M-s:列出总量,不细给出每个目录的用量-S:不包括子目录下的-k:以KB为单位-m:以MB为单位
df:-a:列出所有的文件系统,包括特殊的/proc-k:以KB为单位m:以MB为单位h:以较为容易阅读的GB,MB,KB来显示H:1M=1000K来代替1M=1024K的进位T:连同文件系统名也显示i:不用硬盘容量,而使用inode的数量来显示

下来就具体创建软硬连接来查看:

ln passwd passwd-hddu -sb ; df -i .

这里写图片描述
看到,在创建硬连接前后,/tmp目录下的总磁盘用量和inode量没有发生变化,尽管多了一个passwd-hd文件。

ls -li passwd*//查看以passwd开头的文件

这里写图片描述
passwd和passwd-hd两个文件一模一样,且inode号一样。

ln -s passwd passwd-sols -il passwd*

这里写图片描述
passwd-so和passwd文件的inode号明显不同,连接数为1,大小为6个bytes,即passwd的大小。

这里写图片描述
创建软连接文件后,整个磁盘的使用总量增加了,inode号的使用多了一个1,即新创建了一个文件。

当删除passwd文件后,我们看下硬连接和软连接是否还有效。
这里写图片描述
硬连接扔能正确查看

这里写图片描述
软连接显示没有该目录

这里写图片描述
再来看一下,passwd-hd的文件连接数由2变为1了。

综上,就是关于硬连接和软连接问题。