美文网首页
硬链接 vs 软连接

硬链接 vs 软连接

作者: mysimplebook | 来源:发表于2019-11-04 10:16 被阅读0次

链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。为解决文件的共享使用,Linux系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。

硬链接

一个文件可能有多个文件名,这些文件名可能属于同一个目录,也可能位于不同的目录。

它们指向同一个inode,即若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。

由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接也可以认为是一个指向文件索引节点的指针,系统并不为它重新分配inode

每添加一个一个硬链接,文件的链接数就加1,删除一个则链接数减1。删除一个硬链接文件并不影响其他有相同 inode 号的文件。

硬链接创建的格式为

ln 源文件名   新链接名

Inode结构中有记录文件链接个数的变量,这个变量的个数对应文件有多少个链接。若一个文件的链接数大于1,则删除文件时,系统仅仅删除了相应的目录项,链接变量值减一,并不真正删除文件,除非这个文件的链接全被删除,即链接变量个数减为0,文件才被彻底删除,因为这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

[root@localhosttestdir]# stat 12.txt

  File:2.txt

  Size: 0             Blocks: 0          IO Block: 4096   regular empty file

Device:802h/2050d      Inode: 1575536     Links: 1

Access:(0644/-rw-r--r--)  Uid: (    0/   root)   Gid: (    0/   root)

Access:2019-01-30 15:53:56.737472559 +0800

Modify:2019-01-30 15:53:56.737472559 +0800

Change:2019-01-30 15:53:56.737472559 +0800

 Birth: -

[root@localhosttestdir]#

[root@localhosttestdir]# ln 12.txt 12

[root@localhosttestdir]# stat 12

  File:2

  Size: 0                 Blocks: 0          IO Block: 4096   regular empty file

Device:802h/2050d      Inode: 1575536     Links: 2

Access:(0644/-rw-r--r--)  Uid: (    0/   root)   Gid: (    0/   root)

Access:2019-01-30 15:53:56.737472559 +0800

Modify:2019-01-30 15:53:56.737472559 +0800

Change:2019-01-30 16:39:38.783479972 +0800

 Birth: -

[root@localhosttestdir]# stat 12.txt

  File:2.txt

  Size: 0             Blocks: 0          IO Block: 4096   regular empty file

Device:802h/2050d      Inode: 1575536     Links: 2

Access:(0644/-rw-r--r--)  Uid: (    0/   root)   Gid: (    0/   root)

Access:2019-01-30 15:53:56.737472559 +0800

Modify:2019-01-30 15:53:56.737472559 +0800

Change:2019-01-30 16:39:38.783479972 +0800

 Birth: -

[root@localhosttestdir]#

[root@localhosttestdir]# rm 12

rm:

remove regular empty file 2y

[root@localhosttestdir]# stat 12.txt

  File:2.txt

  Size: 0             Blocks: 0          IO Block: 4096   regular empty file

Device:802h/2050d      Inode: 1575536     Links: 1

Access:(0644/-rw-r--r--)  Uid: (    0/   root)   Gid: (    0/   root)

Access:2019-01-30 15:53:56.737472559 +0800

Modify:2019-01-30 15:53:56.737472559 +0800

Change:2019-01-30 16:41:13.992845965 +0800

 Birth: -

[root@localhosttestdir]#

大多数系统不允许创建一个目录的硬链接。

关于目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。删除文件时,该文件的链接数减1,如果删除目录项后该文件的链接数为零,这时系统才把真正的文件从磁盘上删除。

软连接

软连接是linux 下与硬链接对应的一种连接方式,类似于window下的快捷方式,软连接可以在其他分区中,软连接文件与原文件具有不同的inode码。读取连接文件,系统会自动将访问者导向原文件,无论读取那个文件,最终读取的是原文件。

软连接又称符号链接(symbolic link),它只不过是指向源文件的指针。软链接没有任何文件系统的限制,任何用户可以创建指向  文件/目录的符号链接。甚至可以跨越不同机器、不同网络对文件进行链接。

创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同(表明他们是两个不同的文件)。软链接的数据块里存放着指向源文件的路径,删除源文件,软链接也无法使用了则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接),因为文件的路径不存在了;删除软链接对原文件没有任何影响。当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移。

软链接的创建格式为

ln -s   源文件名          新链接名

[root@localhosttestdir]# ln -s 11.txt      11

[root@localhosttestdir]# ll

total8

-rw-r--r--1 root root    0 Jan 30 15:54 10

lrwxrwxrwx1 root root    6 Jan 30 16:57 11 ->11.txt

-rw-r--r--1 root root    0 Jan 30 15:54 11.txt

[root@localhosttestdir]# rm 11.txt

rm:

remove regular empty file 1.txty

[root@localhosttestdir]# ll

total8

-rw-r--r--1 root root    0 Jan 30 15:54 10

lrwxrwxrwx1 root root    6 Jan 30 16:5711 -> 11.txt             #文件失效(显示红色,并闪烁显示),

[root@localhosttestdir]#

[root@localhosttestdir]# cat 11

cat:11: No such file or directory

[root@localhosttestdir]# cat 11.txt

cat:11.txt: No such file or directory

[root@localhosttestdir]# touch 11.txt                        #重新创建源文件

[root@localhosttestdir]# ll

total8

-rw-r--r--1 root root    0 Jan 30 15:54 10

lrwxrwxrwx1 root root    6 Jan 30 16:57 11 ->11.txt          #指向正常

-rw-r--r--1 root root    0 Jan 30 17:00 11.txt

[root@localhosttestdir]#

相关文章

  • 硬链接 vs 软连接

    链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。为解决文件的共享使用,Linux系统引入了两...

  • ln -s 软链接

    linux 创建连接命令 ln -s 软链接linux-ln -s(链接)、mount(挂载 软连接和硬连接 硬链...

  • linux链接命令

    硬连接 软连接 命令格式 如果不写-s则为硬链接

  • 软链接vs硬链接

    记录对软链接硬链接的探索。 linux文件系统基础 linux中每个分区包含一个文件系统。一个完整的文件系统包含自...

  • 软连接 硬链接

    Reference: 淘宝前端团队:纠结的链接:ln、ln -s、fs.symlink、require inode...

  • linux创建一个软连接和硬链接的区别

    软连接和硬链接的区别 软连接相当于windows的快捷方式,硬链接相当于重新拷贝了一份文件,并且对硬连接内容的修改...

  • linux基础知识点

    硬链接和软连接 硬链接Inode相同的文件互为硬链接文件不能跨文件系统不能对目录创建hardlink.png 软连...

  • Linux链接文件与查看或者合并文件内容

    04-建立链接文件:ln Linux链接文件类似于Windows下的快捷方式。链接文件分为软连接和硬链接。软连接:...

  • 关于ln创建硬链和软链的简单实践

    1 创建硬链接 硬链接会在目标目录生成一个大小相同的文件 使用 ls -l 命令可以查看 2 创建软连接 软连接只...

  • Linux文件查看相关命令

    -文件创建命令 -文件查看命令 -软连接和硬链接

网友评论

      本文标题:硬链接 vs 软连接

      本文链接:https://www.haomeiwen.com/subject/ndmrbctx.html