Linux 文件硬链接和软链接

本文介绍了Linux文件系统的元数据和用户数据概念,重点讲解了硬链接和软链接的区别。硬链接通过索引节点号连接,删除源文件不影响硬链接。软链接则类似快捷方式,包含源文件的索引节点信息。正确删除链接文件可使用`rm`或`unlink`命令,注意使用时的选项和权限。
摘要由CSDN通过智能技术生成

一、Linux文件 

在 Linux 文件系统中,一个文件被分成两个部分:元数据(metadata)与用户数据(user data)。元数据为文件的附加属性,如索引节点(Inode)、文件大小、文件创建时间、文件所有者等。「元数据中并不包含文件名,文件名仅仅是为了方便用户使用。Linux 文件系统为每一个保存在磁盘分区中的文件(无论什么类型)都分配一个索引节点号(Inode Number),索引节点号是文件在一个文件系统中的唯一标识,不同文件所对应的索引节点号是不相同的;」 用户数据,即文件数据块(data block),文件数据块中以二进制的形式记录着文件的真实内容。

二、硬链接 

在 Linux 中允许多个文件名指向同一个索引节点号,而硬链接(hard link, 也称链接)指的是通过索引节点号进行的链接。可以通过ln指令为文件创建硬链接:

「如果删除硬链接对应的源文件,硬链接文件仍然存在,这是因为硬链接是有着相同索引节点号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同索引节点号的文件。我们可以为重要的文件创建硬链接,这样即使错误操作误删了文件,也不会重要文件造成影响。」 当文件没有任何文件名指向的时候,文件也会被删除,也就是此时的硬链接数为 0。硬链接相当于为文件创建了一个新的文件名,当删除其中一个链接的时候并不影响索引节点本身以及其它链接到该索引节点的文件名,所以这些链接是相对独立的,这也是为什么 Linux 中仅仅标识文件硬链接的数目,并没有显示的标识文件是否为硬链接文件的原因。

 三、软链接

软链接(也称符号链接)可以看成是一个普通的文件, 「只不过这个文件中的数据块存放的是源文件的索引节点号。」 可以通过为ln指令添加-s(s: soft 的意思)选项创建软链接:

源文件的索引节点号为 1837900,而软链接文件的索引节点号为 6705,显然源文件和软链接文件并不是同一个文件,其实从两个文件的大小也可以看出来,其中源文件大小为 36 个字节,而软链接文件大小仅仅为 9 个字节。

四、如何正确删除链接文件

使用 rm 和 unlink 命令就能完成移除(删除)符号链接的操作。

什么是符号链接?

符号链接(symlink)又称软链接,它是一种特殊的文件类型,在 Linux 中该文件指向另一个文件或者目录。它类似于 Windows 中的快捷方式。它能在相同或者不同的文件系统或分区中指向一个文件或着目录。

符号链接通常用来链接库文件。它也可用于链接日志文件和挂载的 NFS(网络文件系统)上的文件夹。

什么是 rm 命令?

rm 命令 被用来移除文件和目录。它非常危险,你每次使用 rm 命令的时候要非常小心。

什么是 unlink 命令?

unlink 命令被用来移除特殊的文件。它被作为 GNU Gorutils 的一部分安装了。

1) 使用 rm 命令怎样移除符号链接文件

rm 命令是在 Linux 中使用最频繁的命令,它允许我们像下列描述那样去移除符号链接。

# rm symlinkfile

始终将 rm 命令与 -i 一起使用以了解正在执行的操作。

# rm -i symlinkfile1 rm: remove symbolic link ‘symlinkfile1’? y

它允许我们一次移除多个符号链接:

# rm -i symlinkfile2 symlinkfile3 rm: remove symbolic link ‘symlinkfile2’? y rm: remove symbolic link ‘symlinkfile3’? y 1a) 使用 rm 命令怎样移除符号链接目录

这像移除符号链接文件那样。使用下列命令移除符号链接目录。

# rm -i symlinkdir rm: remove symbolic link ‘symlinkdir’? y

使用下列命令移除多个符号链接目录。

# rm -i symlinkdir1 symlinkdir2 rm: remove symbolic link ‘symlinkdir1’? y rm: remove symbolic link ‘symlinkdir2’? y

如果你在结尾增加 /,这个符号链接目录将不会被删除。如果你加了,你将得到一个错误。

# rm -i symlinkdir/ rm: cannot remove ‘symlinkdir/’: Is a directory

你可以增加 -r 去处理上述问题。但如果你增加这个参数,它将会删除目标目录下的内容,并且它不会删除这个符号链接文件。(LCTT 译注:这可能不是你的原意。)

# rm -ri symlinkdir/ rm: descend into directory ‘symlinkdir/’? y rm: remove regular file ‘symlinkdir/file4.txt’? y rm: remove directory ‘symlinkdir/’? y rm: cannot remove ‘symlinkdir/’: Not a directory

2) 使用 unlink 命令怎样移除符号链接

unlink 命令删除指定文件。它一次仅接受一个文件。

删除符号链接文件:

# unlink symlinkfile

删除符号链接目录:

# unlink symlinkdir2

如果你在结尾增加 /,你不能使用 unlink 命令删除符号链接目录。

# unlink symlinkdir3/ unlink: cannot unlink ‘symlinkdir3/’: Not a directory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

denglin12315

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值