前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10分钟搞定硬链、软链

10分钟搞定硬链、软链

作者头像
奋飛
发布2021-12-30 21:01:12
2890
发布2021-12-30 21:01:12
举报
文章被收录于专栏:Super 前端Super 前端

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

示例:

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

inode

查看文件信息(inode)

代码语言:javascript
复制
ls -li test.js
8643193659 -rw-r--r--  1 ligang  staff  21  8 30 17:08 test.js

inode值

文件类型权限

链接计数

文件拥有者

文件群组

大小

修改日期

名称

8643193659

-rw-r–r--

1

ligang

staff

21

8 30 17:08

test.js

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

hard links (硬链)

创建硬链

代码语言:javascript
复制
ln ./sources/test.js test-hard-links.js

查看文件信息(inode)

代码语言:javascript
复制
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 追加内容

代码语言:javascript
复制
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

代码语言:javascript
复制
rm sources/test.js
cat test-hard-links.js

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

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

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

代码语言:javascript
复制
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 (软链)

创建软链

代码语言:javascript
复制
ln -s sources/test.js test-soft-links.js

查看文件信息(inode)

代码语言:javascript
复制
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 追加内容

代码语言:javascript
复制
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

代码语言:javascript
复制
rm sources/test.js
cat test-soft-links.js

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

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

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

代码语言:javascript
复制
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(软链)

执行命令

ln

ln -s

inode

同原文相同(是原始文件的附加名称)

同原文不同(是原始文件的别名)

原始文件被删除

仍然有效

无效

文件系统

仅限于原始文件文件系统(不能跨文件系统)

可以跨不同的文件系统

链接目录

不支持

支持

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

补充-查看硬链的文件

代码语言:javascript
复制
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

代码语言:javascript
复制
find . -inum 8643224333

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

方式二:寻找相同的 filename

代码语言:javascript
复制
find . -samefile ./sources/test.js

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • inode
  • hard links (硬链)
  • soft/symbolic links (软链)
  • 区别
  • 补充-查看硬链的文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档