對于軟鏈、硬鏈的內容整理,是為后續 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-- | 1 | ligang | staff | 21 | 8 30 17:08 | test.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.js 和 sources/test.js 內容都變成了最新修改內容(同 sources/test.js 保持一致),
區別
硬鏈為檔案內容創建別名;軟鏈為檔案名創建別名,
| hard links(硬鏈) | symbolic links(軟鏈) | |
|---|---|---|
| 執行命令 | ln | ln -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
上述 . 為當前目錄,可以通過此擴大或縮小查找范圍,如果需要全域查找,可以設定為 /,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/298129.html
標籤:其他
上一篇:2021-09-06
