時間:2017.11.16
作者:李強
參考:man,info,magedu講義
聲明:以下英文純屬個人翻譯,英文B級,歡迎糾正,盜版不糾,才能有限,希望不誤人子弟為好。
1、使用目的與場景
2、官方說明
make links between files
3、寫在前面
不管是說cp,mv.rm,還有檔案的權限管理來說,都離不開對資料的中繼資料和資料基本的inode的操作,我們要先了解檔案存放在磁盤空間的形式是inode表與資料存放塊的表,目錄也是檔案,隻不過它的date裡存放的是檔案名與子目錄對應的inode号而已。關于link和symlink,硬連結和軟連結的概念可以自行 man 2 link 和man 2 symlink 檢視。
4、修改檔案及涉及的環境變量
5、用法
<code>提要:</code>
<code> </code><code>ln</code> <code>[OPTION]... [-T] TARGET LINK_NAME (1st form)</code>
<code> </code><code>ln</code> <code>[OPTION]... TARGET (2nd form)</code>
<code> </code><code>ln</code> <code>[OPTION]... TARGET... DIRECTORY (3rd form)</code>
<code> </code><code>ln</code> <code>[OPTION]... -t DIRECTORY TARGET... (4th form)</code>
<code>參數描述:</code>
<code> </code>
<code> </code><code>--backup[=CONTROL] 為每一個存在的目标檔案生成一個備份</code>
<code> </code>
<code> </code><code>-b 類似--backup 但是不接收參數</code>
<code> </code>
<code> </code><code>-d, -F, --directory 允許超級使用者嘗試硬連結目錄 </code>
<code> </code><code>(注意: 由于系統制約, 可能會失敗即使是超級使用者) </code>
<code> </code><code>-f, --force 移除存在的目标檔案?</code>
<code> </code>
<code> </code><code>-i, --interactive 提示是否移除目标</code>
<code> </code>
<code> </code><code>-L, --logical 對符号連結的源檔案生成一個硬連結</code>
<code> </code><code>-n, --no-dereference </code>
<code> </code>
<code> </code><code>-P, --physical 生成一個符号連結的硬連結,相當于備份一下符号連結</code>
<code> </code><code>-s, --symbolic 生成一個symbolic link(符号連結/軟連結),而不是硬連結 </code>
<code> </code>
<code> </code><code>-S, --suffix=SUFFIX 重寫通常的備份字尾名</code>
<code> </code><code>-t, --target-directory=DIRECTORY 指定要在其中建立硬連結的目錄</code>
<code> </code><code>-T, --no-target-directory 将 LINK_NAME 作為普通檔案處理</code>
<code> </code><code>-</code><code>v</code><code>, 顯示建立的連結的過程</code>
<code> </code>
<code> </code><code>注意:</code>
<code> </code><code>備份預設字尾是</code><code>"^"</code><code>,除非指定-S --suffix=SUFFIX或者--backup[=control]</code>
<code> </code><code>使用-s建立軟連結時-LP是無效的,沒有-s時,看LP誰在後誰生效。</code>
6、指令背後的哪些事(原了解析)
此處應該插入圖檔的更直覺,我還沒想好用什麼工具怎麼畫,以後再搞。
ln 是針對inode表的一個操作,是以無法跨分區的磁盤的,因為inode是針對分區而言唯一的,
ln 建立一個硬連結的過程就是在這個link_name檔案的父目錄的inode表中添加一項内容link_name↘TARGET檔案的inode号。
ln -s 建立一個符号連結的過程呢就是在symbolic_link_name的父目錄下建立一項内容symbolic_link_name↘symbolic_link_name_inode,而symbolic_link_name_inode的内容寫的是TARGET pathname,這裡的pathname可以相對路徑(target file相對symbolic_link_name的相對路徑)也可以是絕對路徑。
總而言之,link改變的是磁盤空間,symbolic link 改變的是磁盤空間和inode數量。
7、cp,rm,mv和軟硬連接配接的哪些事
<code> </code><code>cp</code><code>: </code>
<code> </code><code>cp</code> <code>[OPTION]... [-T] SOURCE DEST</code>
<code> </code><code>cp</code> <code>[OPTION]... SOURCE... DIRECTORY</code>
<code> </code><code>cp</code> <code>[OPTION]... -t DIRECTORY SOURCE...</code>
<code> </code>
<code> </code><code>-l --link 生成一個硬連結而不是目錄的副本,</code>
<code> </code><code>-s --sysmbolic-link 生成一個軟連結而不是目錄的副本, </code><code>source</code><code>從/開始,寫絕對路徑</code>
<code> </code><code># -l -s 後面都不能加目錄,跟上目錄都是複制的效果,相當于sl的功能是失效的。</code>
<code> </code><code>-d 複制符号連結而不是連結的源檔案</code>
<code> </code><code>-P 後面接的是</code><code>source</code><code>是符号連結,複制連結符号本身而不是連結檔案</code>
<code> </code><code>-H 當</code><code>cp</code><code>指定的參數是一個symbolic-link的時候,複制的是symbolic-link的源檔案而不是</code>
<code> </code><code>symbolic-link 目錄裡面的sl不會做操作,隻對第一層進行操作 </code>
<code> </code><code>-L 和-H有啥差別?-L在源裡面的sl檔案複制到目标檔案裡是真實的檔案内容,但是名字不變</code>
<code> </code><code>還是sl的名字,-L操作的檔案裡沒有符号連結檔案了。dest也是一個檔案而不是sl檔案。</code>
<code> </code><code>遞歸進行操作。</code>
<code> </code>
<code> </code><code>#ps. 此處應該插入測試圖檔更直覺。</code>
本文轉自 lajifeiwomoshu 51CTO部落格,原文連結:http://blog.51cto.com/lajifeiwomoshu/1982281