为学习pnpm了解一点基础:软链接和硬链接

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情

大家好,我是 那个曾经的少年回来了。10年前我也曾经年轻过,如今已步入被淘汰的年龄,但如下幡然醒悟,所以活在当下,每天努力一点点,来看看2024年的时候自己会是什么样子吧,2024年的前端又会是什么样子,而2024年的中国乃至全球又会变成什么样子,如果你也有想法,那还不赶紧行动起来。期待是美好的,但是更重要的是要为美好而为之奋斗付诸于行动。

1、硬链接与软连接的定义

硬链接(hard link)对一个文件进行修改,可能会影响到其他文件的内容,但是删除一个文件名,并不会影响其他文件名的访问。

软链接又可以说成是符号连接,它有点类似于Windows的快捷方式,实际上它是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

以下操作:我都是在linux系统上进行操作的。

2、创建一个文件,并写入字符串

touch aehyok
echo "hello world"> aehyok
cat aehyok
复制代码

image.png

通过截图可以发现,文件生成成功,内容字符串也写入了。

3、创建硬链接

创建一个指向aehyok文件的 硬链接hard-aehyok

ln aehyok aehyok-hard
cat aehyok-hard
ls -li
复制代码

image.png

两个文件除了名字不一样,其他都是一样的

4、修改文件内容

echo "hard hello world" >>aehyok-hard
cat aehyok-hard
cat aehyok
复制代码

image.png

修改硬链接文件中的内容之后,源文件中的内容也发生了变更

echo "aehyok hello world">> aehyok
cat aehyok
cat aehyok-hard
复制代码

image.png

修改源文件之后,硬链接中的文件内容也同时发生了变更

原文件与硬链接文件互为硬链接

可以通过 stat xxx 命令来查看文件的inode信息

image.png

可以发现Inode为2502924,他的硬连接数为2。你也可以发现Inode信息中不包含文件名。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

5、创建软链接

ln -s aehyok aehyok-soft  
cat aehyok-soft

ls -li

复制代码

image.png

可以发现软链接文件属性跟源文件和硬链接属性有区别的。而且有一个明显的指向,指向了原文件aehyok。

6、删除原文件

image.png

删除原文件之后,硬链接文件可以正常访问,但是访问软链接文件报错了。这里与我们开头总结的定义正好吻合了。

7、写入数据到软链接

echo "delete hello world" >> aehyok-soft
cat aehyok-soft
cat aehyok
ls -li
复制代码

image.png

可以发现,写入软链接数据之后,原文件竟然出现了,但是里面的数据块inode是新的了,因为软链接文件中保存的是有引用原文件路径的,但是原文件已经不存在了。现在相当于根据路径重新生成并写入原文件。

8、总结

Inode (1).jpg

  • 硬链接不会创建额外 inode,它和源文件共用同一个 inode

  • 软链接会创建新的文件和 inode,但是软链接文件inode指向源文件的 inode

  • 建立硬链接时,源必须存在且只能是文件

  • 建立软链接时,源可以不存在而且可以是目录

  • 删除源文件不会影响硬链接文件的访问(因为inode还在)

  • 删除源文件会影响软链接文件的访问(因为指向的inode已经不存在了)

猜你喜欢

转载自juejin.im/post/7132275461467406366