10分钟搞定硬链、软链

对于软链、硬链的内容整理,是为后续 pnpm 的内容做准备。

示例:

cd /Users/ligang/Documents/github/practice/links/sources
# 在测试目录下创建相应的测试文件
touch test.js && echo "console.log('links')" > test.js

inode

查看文件信息(inode)

ls -li test.js
8643193659 -rw-r--r--  1 ligang  staff  21  8 30 17:08 test.js
inode值文件类型权限链接计数文件拥有者文件群组大小修改日期名称
8643193659-rw-r–r--1ligangstaff218 30 17:08test.js

inode 为“索引节点”,存储文件的元信息。其是 UNIX 操作系统中的一种数据结构,包含了与文件系统中各个文件相关的一些重要信息。

hard links (硬链)

创建硬链

ln ./sources/test.js test-hard-links.js

查看文件信息(inode)

ls -li test-hard-links.js
8643193659 -rw-r--r--  2 ligang  staff  21  8 30 17:08 test-hard-links.js

其同原文件的 inode 值相同,指向了物理硬盘的一个区块。

向 test-hard-links.js 追加内容

echo "console.log('test hard links')" >> test-hard-links.js
cat sources/test.js

console.log('links')
console.log('test hard links')

原文件 test.js 同步更新了内容。

删除原文件 test.js

rm sources/test.js
cat test-hard-links.js

console.log('links')
console.log('test hard links')

通过硬链的文件不受影响。

再次向 test-hard-links.js 写内容(原文件已删除)

echo "console.log('test hard links again')" >> test-hard-links.js
ll sources/test.js

ls: sources/test.js: No such file or directory

只会向 test-hard-links.js 写入,原文件已删除不会做任何处理

soft/symbolic links (软链)

创建软链

ln -s sources/test.js test-soft-links.js

查看文件信息(inode)

ls -li test-soft-links.js
8643223807 lrwxr-xr-x  1 ligang  staff  15  8 31 13:27 test-soft-links.js -> sources/test.js

其同原文件的 inode 值不同。

向 test-soft-links.js 追加内容

echo "console.log('soft hard links')" >> test-soft-links.js
cat sources/test.js

console.log('links')
console.log('soft hard links')

原文件 test.js 同步更新了内容。

删除原文件 test.js

rm sources/test.js
cat test-soft-links.js

cat: test-soft-links.js: No such file or directory

报错!没有相应的文件或目录。

再次向 test-soft-links.js 写内容(原文件已删除)

echo "console.log('test soft links again')" >> test-soft-links.js
ll sources/test.js

-rw-r--r--  1 ligang  staff    37B  8 31 13:35 sources/test.js

cat sources/test.js
cat test-soft-links.js

console.log('test soft links again')

只会向 test-hard-links.js 写入,原文件重新被创建,且 test-soft-links.jssources/test.js 内容都变成了最新修改内容(同 sources/test.js 保持一致)。

区别

硬链为文件内容创建别名;软链为文件名创建别名。

hard links(硬链)symbolic links(软链)
执行命令lnln -s
inode同原文相同(是原始文件的附加名称同原文不同(是原始文件的别名
原始文件被删除仍然有效无效
文件系统仅限于原始文件文件系统(不能跨文件系统)可以跨不同的文件系统
链接目录不支持支持

创建硬链接实际上是为原文件在存储器中的资源再新建一个入口,所以硬链接和原文件指向的其实是储存器中的同一处资源(同一个 inode);而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。

补充-查看硬链的文件

ln sources/test.js test-hard-links.js
ll -li sources/test.js

8643224333 -rw-r--r--  2 ligang  staff    37B  8 31 13:36 sources/test.js

根据上述阐述,链接计数为2,如何查看呢?

方式一:寻找相同的 inode

find . -inum 8643224333

./test-hard-links.js
./sources/test.js

方式二:寻找相同的 filename

find . -samefile ./sources/test.js

./test-hard-links.js
./sources/test.js

上述 . 为当前目录,可以通过此扩大或缩小查找范围。如果需要全局查找,可以设置为 /

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋飛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值