linux中的硬链接和软链接

来源:互联网 发布:java drawimage 编辑:程序博客网 时间:2024/05/16 18:40

建立硬链接和软链接

在linux中我们通过ln命令来建立硬链接和软链接,默认是建立硬链接,加上-s参数那么建立的就是软链接。

原文:小宇的博客

$ echo "Hello world" > a$ ln a a_hard_link$ ln -s a a_soft_link

建立好之后,用ls命令看一下,记得加上-i这样我们就可以看到inode号了

$ls -ali19796575 -rw-rw-r--  2 yshen yshen   12 1010 11:33 a19796575 -rw-rw-r--  2 yshen yshen   12 1010 11:33 a_hard_link19796574 lrwxrwxrwx  1 yshen yshen    1 1010 11:34 a_soft_link -> a

inode
科普一下:inode全称是index node即索引节点。可见inode中并没有存放文件的实际内容,而是存放了索引。这个索引指向的是磁盘中存放文件内容的物理位置。
目录
在linux中目录也有一个inode,inode指向记录目录实际内容的磁盘物理位置。

什么是硬链接和软链接

再回到我们的例子里,ls的结果第一列是该文件的inode号,可以看到硬链接的inode号和文件原来的inode号是一样的。说明指向的物理位置是一样的。
我们看软链接的inode号不同,说明是一个新的文件,该文件指向的是另外的一个物理位置。该物理位置里面存放着链接目标的路径。

区别

让我们删除连接目标文件a

$ rm a$ ls -ali总用量 1219796573 drwxrwxr-x  2 yshen yshen 4096 1010 11:35 .58720267 drwxrwxr-x 43 yshen yshen 4096 1010 11:33 ..19796575 -rw-rw-r--  1 yshen yshen   12 1010 11:33 a_hard_link19796574 lrwxrwxrwx  1 yshen yshen    1 1010 11:34 a_soft_link -> a

硬链接和软链接现在还能访问么?

$ cat a_hard_link Hello world$ cat a_soft_link cat: a_soft_link: 没有那个文件或目录

硬链接还能访问,软链接现在已经失效了!根据定义我们不难找出原因:
(1)硬链接指向的是物理位置和连接对象指向的物理位置一样,该物理位置有一个引用计数(ls的第三列),删除链接对象后,引用计数从原来的2变为1,所以物理上文件并没有删除,如果为0的话采用unlink删除。所以硬链接依然可以访问。
(2)软链接其实是一个文件,文件指向的路径已经失效了,所以会显示没有那个文件或目录。

我们总结一下区别:
(1) 链接目标失效之后,硬链接依然可以访问。软链接不能访问。
(2) 硬链接只能指向和链接目标同一个分区,软链接没有限制,甚至可以指向网络地址。

0 0
原创粉丝点击