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