天天看點

ln指令解析_學習筆記

時間: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

繼續閱讀