资讯专栏INFORMATION COLUMN

Linux中的硬链接与软链接

maybe_009 / 1201人阅读

摘要:硬链接和软链接硬链接如上所述,文件名对号来说只是一个绰号,一个号可以有多个绰号或者说是别名。硬链接不可对目录创建,软链接可以。创建硬链接会增加文件的连接数,软链接不会。参考文献王华东,理解的硬链接与软链接阮一峰,理解

inode

在unix系统中,文件的储存分为两个部分,一个是数据块(datablock),用来保存文件中储存的数据。另一部分称为索引节点(inode),用来储存文件的大小、创建日期、读写权限等信息,这一部分信息被称为文件的“元数据”(metadata)。

inode中包含了文件的如下信息:

文件数据block的位置

文件的字节数

文件拥有者的User ID

文件的Group ID

文件的读、写、执行权限

文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

链接数,即有多少文件名指向这个inode

在linux系统中,每个inode有自己的唯一inode号,可以通过ls -i命令显示文件的inode号

操作系统通过inode号码来标识唯一文件而不是文件名,文件名只是便于用户记忆的inode号的‘绰号’,一个文件可以有多个文件名,但是一个文件的inode号码是唯一的。
inode号和块数据是分开储存的,所以有的时候一个分区还有空间,但是操作系统却提示分区已满无法写入,这种情况下可能是当前分区的inode号已经用完了,造成这种情况发生的原因可能是当前分区有大量的占空间较小的文件。

硬链接和软链接

硬链接(hard link)

如上所述,文件名对inode号来说只是一个绰号,一个inode号可以有多个绰号或者说是别名。每一个别名就是该inode号对应的文件的一个硬链接,也就是说硬链接相当于一个文件的别名。
可以使用link或者ln命令来创建硬链接。

ln FileA FileB

以上命令会创建一个文件A的硬链接文件B,文件B相当于是文件A的别名,指向同一个文件。

硬链接有如下特点:

文件有相同的 inode 及 data block;

不能对目录进行创建,只可对文件创建;

不能交叉文件系统进行硬链接的创建;

删除一个硬链接文件并不影响其他有相同 inode 号的文件。

为什么不能对目录创建硬链接?我们知道在linux中目录也是一种文件,其中包含关联列表。实际在创建目录时会自动创建多个硬链接其中"."是自身的硬链接,".."是其父目录的硬链接。所以一个目录的硬链接最少为2(指向自身的一个和父目录指向它的一个)。也就是说每有一个子目录其父目录的硬链接就会+1(子目录的”..")。所以若对目录创建一个硬链接操作系统会认为创建了一个子目录,所以该硬链接指向的目标目录的".."会指向该目录。这样会导致遍历的时候逻辑混乱,甚至会出现死循环。

软链接(soft link)

软链接又称符号链接(symbolic link),软链接和硬链接不同,软链接是一个普通的文件,拥有自己独立的inode号以及数据块,只不过软链接的数据块中存储的是源文件的路径。使用如下命令创建软链接:

ln -s FileA FileB 

上面的命令会创建FileA的一个软链接FileB,创建软链接不会导致FileA的inode号的连接数增加,因为软链接指向源文件的文件名而不是源文件的inode号,软链接的存在形式类似于windows中的快捷方式。

软链接有如下几点特性:

软链接有自己的文件属性及权限等;

可对不存在的文件或目录创建软链接;

软链接可交叉文件系统;

软链接可对文件或目录创建;

创建软链接时,链接计数不会增加;

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接,若被指向路径文件被重新创建,死链接可恢复为正常的软链接。

最后硬链接和软链接的区别可总结为:

linux的硬链接与软链接的区别为硬链接只是指向inode号的一个别称,自身不具有inode号和数据块,而软链接有自身的inode号和数据块

硬链接只能对存在的文件创建,软链接可以对不存在的文件创建,可以之后再创建源文件。

硬链接不能交叉系统创建,而软链接可以。

硬链接不可对目录创建,软链接可以。

创建硬链接会增加文件的连接数,软链接不会。

删除软链接不会删除文件,删除硬链接时若剩余硬链接数大于0不会删除文件,若某文件的所有硬链接都被删除,该文件会被删除。

参考文献

王华东,理解 Linux 的硬链接与软链接[EBOL].
https://www.ibm.com/developer...

阮一峰,理解inode[EBOL].
http://www.ruanyifeng.com/blo...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10093.html

相关文章

  • Linux的硬连接与软连接的区别

    摘要:硬连接硬连接指通过索引节点来进行连接。在中,多个文件名指向同一索引节点是存在的。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。 1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 硬连接 硬连接指通过索...

    muzhuyu 评论0 收藏0
  • Linux的硬连接与软连接的区别

    摘要:硬连接硬连接指通过索引节点来进行连接。在中,多个文件名指向同一索引节点是存在的。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。 1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 硬连接 硬连接指通过索...

    lemon 评论0 收藏0
  • centos软连接创建

    摘要:软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。软链接软链接,以路径的形式存在。 前言 经常使用centos系统的同学都知道,在全局安装命令指令时,即使是执行了npm install -g 但是安装之后的命令仍然说找不到 那么我们改如何操作呢? 软...

    hot_pot_Leo 评论0 收藏0
  • Linux链接命令 - ln

    摘要:硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。硬链接与原文件具有相同的节点,可通过节点识别。软链接类似的快捷方式。删除软链接文件,不影响原文件。 什么是链接 Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接...

    Andrman 评论0 收藏0
  • web开发中,必须掌握的linux概念及常用命令

    摘要:本文已同步到前端开发中,需掌握的概念及常用命令欢迎收藏,欢迎前一段时间阅读了鸟哥的私房菜的部分章节,也做了一些笔记,就在我再次打开笔记时,发现很多命令这是啥东东,有的都忘了,不过从头看一遍自己的笔记,就很快想起来了,从我个人的角度,平时学习 本文已同步到github web前端开发中,需掌握的linux概念及常用命令,欢迎收藏,欢迎Star 前一段时间阅读了《鸟哥的linux私房菜》的...

    chanthuang 评论0 收藏0

发表评论

0条评论

maybe_009

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<