在Unix世界裡有兩個'link'(連接)概念,一般稱之為硬連接和軟連接。一個硬連 接僅僅是一個文件名。(一個文件可以有好幾個文件名,只有將最後一個文件名從 磁盤上刪除,才能把這個文件刪掉。文件名的個數是由ls(1)來確定的。所有的文件 名都處於同一個狀態,也就沒有什麼lq源名字rq 之說。通常文件系統裡的一個 文件的所有名字包含著一樣的數據信息,不過這樣也不是必需的。)一個軟連接 (或符號連接)是完全不同的:它是一個包含了路徑信息的小小的指定文件。因此, 軟連接可以指向不同文件系統裡的文件(比如由NFS裝載的不同機器文件系統上的文 件),甚至可以指向一個不一定確實存在的文件。在軟連接文件被訪問(系統調用 open(2) 或stat(2))的時候,操作系統用該文件所包含的路徑替換該文件的訪問介 入點,從而實現對所指文件的訪問。(用命令rm(1)和unlink(2)可以刪除連接,但 不是刪除該文件所指向的文件。系統指定調用lstat(2)和readlink(2) 來讀取連接 文件與其所指文件的狀態。到底是對軟連接文件操作,還是對被指向文件操作,由 於不同操作系統件存在不同的系統調用,而存在著差異。)
ln 在文件間產生連接。缺省時,產生硬連接,有-s選項,則產生符號(軟)連接。
如果僅僅只給出一個文件名,那麼ln將在當前目錄裡產生這個文件的連接, 也就是說,以該文件(的最後一個)名稱等同的名字在當前目錄裡產生一個連接 (GNU范圍內); 如果最後一個參數是一個已存在的目錄名, ln 將在那個目錄裡給每一個源文件用以與源文件相同的文件名產生連接, (不同情況見以下--no-dereference的描述); 如果只給出兩個文件名,ln將產生源文件的連接; 如果最後一個參數不是一個目錄名或多於兩個文件名,則報錯。
缺省時,ln不刪除已存在的文件或符號連接。 (因此,它可以被用來鎖定目標文件,即當dest已經不存在時) 但選項-f可以強制執行。
在已存在的實現中,只有超級用戶才能建立目錄的硬連接。 POSIX 禁止系統調用link(2)和ln建立目錄的硬連接 (但是允許在不同的文件系統間建立硬連接)。
使用方式 : ln [options] source dist,其中 option 的格式為 :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}][--help] [--version] [--]
說明 : Linux/Unix 檔案系統中,有所謂的連結(link),我們可以將其視為檔案的別名,而連結又可分為兩種 : 硬連結(hard link)與軟連結(symbolic link),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。
ln source dist 是產生一個連結(dist)到 source,至於使用硬連結或軟鏈結則由參數決定。
不論是硬連結或軟鏈結都不會將原本的檔案復制一份,只會占用非常少量的磁碟空間。
-f : 鏈結時先將與 dist 同檔名的檔案刪除
-d : 允許系統管理者硬鏈結自己的目錄
-i : 在刪除與 dist 同檔名的檔案時先進行詢問
-n : 在進行軟連結時,將 dist 視為一般的檔案
-s : 進行軟鏈結(symbolic link)
-v : 在連結之前顯示其檔名
-b : 將在鏈結時會被覆寫或刪除的檔案進行備份
-S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾
-V METHOD : 指定備份的方式
--help : 顯示輔助說明
--version : 顯示版本
注意:
如果不使用 -s 標志,就不能在文件系統之間鏈接文件。
如果 TargetDirectory 已經是鏈接到目錄上的一個符號鏈接,那麼 ln 命令將現有的目標視為文件。這意味著,類似於 ln -fs somepath/lname symdir 的命令不會遵循現有的 symdir 符號鏈接,作為代替,它會創建一個從 somepath/lname 到 symdir 的新的符號鏈接。
退出狀態
此命令返回以下的退出值:
0 所有指定的文件都成功鏈接上了。
>0 出現一次錯誤。
例:
復制代碼代碼如下:
[root@localhost test_ln]# ln -s /home/zhangy/heartbeat ./ #在當前目錄下,建立heartbeat的軟連接
[root@localhost test_ln]# ln -s /home/zhangy/test ./ #建立目錄的軟件接
[root@localhost test_ln]# ln /home/zhangy/tee.txt ./ #建立硬連接
[root@localhost test_ln]# ll
總計 4
lrwxrwxrwx 1 root root 22 05-11 11:04 heartbeat -> /home/zhangy/heartbeat #文件軟件接
-rw-r--r-- 2 root root 0 2010-11-24 tee.txt #文件硬連接
lrwxrwxrwx 1 root root 17 05-11 11:04 test -> /home/zhangy/test #目錄軟件接
1.為了創建到一個文件的另一個鏈接(別名),請輸入:
復制代碼代碼如下:
ln -f chap1 intro
這會將 chap1 鏈接到新的名稱, intro。如果 intro 不存在,那麼會創建該文件名。如果 intro 已經存在了,那麼這個文件會被替換為指向 chap1的一個鏈接。然後 chap1 和 intro 文件名會指向同一個文件。對其中任何一個的更改都會出現在另一個中。如果一個文件名被 rm 命令刪除,那麼該文件並沒有完全被刪除,因為它仍然以其它的名字存在。
2.為了將文件鏈接為另一個目錄中的相同名字,請輸入:
復制代碼代碼如下:
ln index manual
這會將 index 鏈接到新的名稱,manual/index。
注意:在示例 1 中的 intro 是一個文件的名稱;在示例 2 中的 manual 是一個已經存在的目錄。
3.為了將幾個文件鏈接為另一個目錄中的名稱,請輸入:
復制代碼代碼如下:
ln chap2 jim/chap3 /home/manual
這會將 chap2 鏈接到新的名稱 /home/manual/chap2;將 jim/chap3 鏈接到新的名稱 /home/manual/chap3。
4.如果想要在 ln 命令中使用模式匹配字符,請輸入:
復制代碼代碼如下:
ln manual/* .
這會將 manual 目錄中的所有文件鏈接到當前目錄中, . (點),給他們在 manual 目錄中同樣的名稱。
注意: 必須在星號和句點之間輸入一個空格。
5.為了創建一個符號鏈接,輸入:
復制代碼代碼如下:
ln -s /tmp/toc toc
這會在當前的目錄中創建符號鏈接 toc。 toc 文件指向 /tmp/toc 文件。如果 /tmp/toc 文件已經存在了,那麼 cat toc 命令可以列出其內容。
6.如果想要在不指明 TargetFile 參數的情況下得到相同的結果,請輸入:
復制代碼代碼如下:
ln -s /tmp/toc