linux ln命令舉例
連結有兩種,一種被稱為永久連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。建立永久連結時,連結檔案和被連結檔案必須位於同一個檔案系統中,並且不能建立指向目錄的永久連結。而對符號連結,則不存在這個問題。預設情況下,ln產生永久連結。
ln 命令
用途
連結檔案。
文法
將某個檔案連結到一個檔案上
ln [ -f | -n] [ -s ] SourceFile [ TargetFile ]
將一個或多個檔案連結到一個目錄上
ln [ -f | -n] [ -s ] SourceFile ... TargetDirectory
描述
ln 命令將在 SourceFile 參數中指定的檔案連結到在 TargetFile 參數中指定的檔案,或將其連結到在 TargetDirectory 參數中指定的另一個目錄中的檔案。在預設情況下,ln 命令會建立永久連結。如果需要使用 ln 命令來建立符號連結,請指明 -s 標誌。
符號連結是指向檔案的一個間接指標;它的目錄項中包含了它所連結的檔案名稱。符號連結可能會跨越檔案系統,可能指向目錄。
如果正在將某個檔案連結到新的名字,那麼只能列出一個檔案。如果連結到一個目錄,那麼可以列出多個檔案。
TargetFile 參數是可選的。如果不指定目標檔案,ln 命令會在當前的目錄中建立一個新的檔案。新的檔案繼承了指定在 SourceFile 參數中的檔案名稱。請參閱樣本 5。
注意:
如果不使用 -s 標誌,就不能在檔案系統之間連結檔案。
如果 TargetDirectory 已經是連結到目錄上的一個符號連結,那麼 ln 命令將現有的目標視為檔案。這意味著,類似於 ln -fs somepath/lname symdir 的命令不會遵循現有的 symdir 符號連結,作為代替,它會建立一個從 somepath/lname 到 symdir 的新的符號連結。
標誌
-f 促使 ln 命令替換掉任何已經存在的目的路徑。如果目的路徑已經存在,而沒有指定 -f 標誌,ln 命令不會建立新的連結,而是向標準錯誤寫一條診斷訊息並繼續連結剩下的 SourceFiles。
-n 指定,如果連結是一個現有的檔案,那麼不要覆蓋檔案的內容。 -f 標誌重設了這個標誌。這是預設的行為。
-s 促使 ln 命令建立符號連結。符號連結中包含了它所連結的檔案的名字。當對連結執行開啟操作的時候,會使用到引用檔案。對符號連結的 stat 調用會返回連結的目標檔案;必須完成lstat 調用來擷取連結的資訊。可以使用 readlink 調用來讀取符號連結的內容。符號連結可能跨越檔案系統,指向目錄。
注意:當為 -s 標誌指定 SourceFile 參數的時候,必須使用絕對路徑。如果沒有指明絕對路徑,那麼當 SourceFile 和 TargetFile 參數位於不同的目錄中的時候,可能會發生意外的結果。在建立符號連結之前,不需要存在源檔案。
退出狀態
此命令返回以下的退出值:
0 所有指定的檔案都成功連結上了。
>0 出現一次錯誤。
樣本
零、為了建立到一個檔案的另一個連結(別名),請輸入:
ln -f chap1 intro
這會將 chap1 連結到新的名稱, intro。如果 intro 不存在,那麼會建立該檔案名稱。如果 intro 已經存在了,那麼這個檔案會被替換為指向 chap1的一個連結。然後 chap1 和 intro 檔案名稱會指向同一個檔案。對其中任何一個的更改都會出現在另一個中。如果一個檔案名稱被 rm 命令刪除,那麼該檔案並沒有完全被刪除,因為它仍然以其它的名字存在。
一、為了將檔案連結為另一個目錄中的相同名字,請輸入:
ln index manual
這會將 index 連結到新的名稱,manual/index。
注意:在樣本 1 中的 intro 是一個檔案的名稱;在樣本 2 中的 manual 是一個已經存在的目錄。
二、為了將幾個檔案連結為另一個目錄中的名稱,請輸入:
ln chap2 jim/chap3 /home/manual
這會將 chap2 連結到新的名稱 /home/manual/chap2;將 jim/chap3 連結到新的名稱 /home/manual/chap3。
三、如果想要在 ln 命令中使用模式比對字元,請輸入:
n manual/* .
這會將 manual 目錄中的所有檔案連結到目前的目錄中, . (點),給他們在 manual 目錄中同樣的名稱。
注意: 必須在星號和句點之間輸入一個空格。
四、為了建立一個符號連結,輸入:
ln -s /tmp/toc toc
這會在當前的目錄中建立符號連結 toc。 toc 檔案指向 /tmp/toc 檔案。如果 /tmp/toc 檔案已經存在了,那麼 cat toc 命令可以列出其內容。
五、如果想要在不指明 TargetFile 參數的情況下得到相同的結果,請輸入:
、ln -s /tmp/toc