介紹
ln
是linux
的一個重要命令,它的功能是為某一個文件在另外一個位置建立一個同步的鏈接。當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然后在其它的目錄下用ln命令鏈接(link)它就可以,不必重復的占用磁盤空間。平時使用感覺就像桌面應用上的快捷圖標一樣,比如你安裝的nginx
文件在usr/local/nginx/sbin/nignx
,可以在usr/local/bin
中建立一個nginx
的軟連接,這樣每次就可以全局訪問了。
// 給nginx建立一個可以全局訪問的軟連接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
命令
命令格式
ln [參數][源文件或目錄][目標文件或目錄]
"ln -b" 如果目標目錄中已經有同名的文件,那么在覆蓋之前先進行備份
"ln -f" 如果目標目錄中已經有同名的文件,無需提示,直接覆蓋
"ln -i" 人機交互,如果目標目錄中已經有同名的文件,則提示是否進行覆蓋
"ln -n" 把軟鏈接視為一般目錄(說明:范例中我會詳細解釋)
"ln -s" 創建軟鏈接
"ln -v" 詳細顯示操作進行的步驟。(v為verbose的意思)
選擇參數:
-S “-S<字尾備份字符串> ”或 “--suffix=<字尾備份字符串>”
-V “-V<備份方式>”或“--version-control=<備份方式>”
--help 顯示幫助信息
--version 顯示版本信息
命令功能
Linux文件系統中,有所謂的鏈接(link),我們可以將其視為檔案的別名,而鏈接又可分為兩種 : 硬鏈接(hard link)與軟鏈接(symbolic link),硬鏈接的意思是一個檔案可以有多個名稱,而軟鏈接的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬鏈接是存在同一個文件系統中,而軟鏈接卻可以跨越不同的文件系統。
軟鏈接:
- 軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式
- 軟鏈接可以 跨文件系統 ,硬鏈接不可以
- 軟鏈接可以對一個不存在的文件名進行鏈接
- 軟鏈接可以對目錄進行鏈接
硬鏈接:
- 硬鏈接,以文件副本的形式存在。但不占用實際空間。
- 不允許給目錄創建硬鏈接
- 硬鏈接只有在同一個文件系統中才能創建
這里有兩點要注意:
第一,ln命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;
第二,ln的鏈接又分軟鏈接和硬鏈接兩種,軟鏈接就是ln –s 源文件 目標文件,它只會在你選定的位置上生成一個文件的鏡像,不會占用磁盤空間,硬鏈接 ln 源文件 目標文件,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。
ln指令用在鏈接文件或目錄,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則會把前面指定的所有文件或目錄復制到該目錄中。若同時指定多個文件或目錄,且最后的目的地並非是一個已存在的目錄,則會出現錯誤信息。
事例
創建一個硬鏈接文件
創建一個軟鏈接文件
創建一個硬鏈接文件,如果目標目錄中已經有同名文件,覆蓋前先進行備份
給目錄創建一個軟鏈接
"ln -n" 命令實例說明
創建軟鏈接失敗實例說明
特別說明
- 創建軟鏈接時,如果軟鏈接文件跟源文件不在同一個目錄,那么源文件地址必須為絕對路徑,否則創建出來的軟鏈接
無法使用。 - 不能針對文件創建硬鏈接。"linux系統中的硬連接有兩個限制:不能跨越文件系統和不允許普通用戶對目錄作硬連接。
至於第一個限制,很好理解,而第二個就不那么好理解了。 我們對任何一個目錄用ls -l
命令都可以看到其連接數至少
是2,這也說明了系統中是存在硬連接的,而且命令ln -d
也可以讓超級用戶對目錄作硬連接,這些都說明了系統限制對
目錄進行硬連接只是一個硬性規定,並不是邏輯上不允許或技術上的不可行。那么操作系統為什么要進行限制呢?如果引
入了對目錄的硬連接就有可能在目錄中引入循環,那么在目錄遍歷的時候系統就會陷入無限循環當中。也許你會說,符號
連接不也可以引入循環嗎,那么為什么不限制目錄的符號連接呢?原因就在於在linux系統中,每個文件(目錄也是文件)
都對應着一個inode
結構,其中inode
數據結構中包含了文件類型(目錄,普通文件,符號連接文件等等)的信息,也就是
說操作系統在遍歷目錄時可以判斷出符號連接,既然可以判斷出符號連接當然就可以采取一些措施來防范進入過大的循環
了,系統在連續遇到8個符號連接后就停止遍歷,這就是為什么對目錄符號連接不會進入死循環的原因了。但是對於硬連接
,由於操作系統中采用的數據結構和算法限制,目前是不能防這種死循環的。"