1. 程式人生 > 實用技巧 >Linux命令:ln

Linux命令:ln

摘要: 轉自 戀貓大鯉魚
https://dablelv.blog.csdn.net/article/details/103065438

1. 命令簡介

  ln 命令用來為檔案建立連結, 分為軟連結(symbolic link)和硬連結 (hard link), 預設建立硬連結。如果要建立軟連線,使用 -s 選項。本文介紹 GNU 版本實現。

  注意:

    1) 硬連結不是一個獨立的檔案,只是一個檔名。一個檔案可以有多個檔名,只有將最後一個檔名從磁碟上刪除,才能把這個檔案刪掉。

    2)軟連線可以跨檔案系統,但是硬連結不能跨檔案系統,因為硬連結只是檔案的別名,而非獨立的檔案。

    3)不能給目錄建立硬連結,因為硬連結連線到目錄可能會導致目錄的 inode 和 實體的 block 形成環狀。此時,如果刪除目錄,會導致目錄實體 block 無法被系統訪問,產生孤立的目錄 (從根目錄無法再訪問)。

    4) 建立硬連結時,每個目標必須存在,建立軟連結時, 目標檔案可以不存在。

    5)軟連結是一個包含了路徑資訊的獨立檔案, 類似於windows的快捷方式,他的許多屬性依賴於原始檔,所以給軟連結檔案設定許可權是無意義的。

2. 命令格式

ln [OPTIONS] ... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION] ... TARGET                             (2st form)
ln [OPTION] ... TARGET ... DIRECTORY       (3st form)
ln [OPTION] ... -t DIRECTORY TARGET        (4st form)

第一種格式,為指定的目標檔案建立指定名稱的連結,-T 選項可以省略, LINK_NAME 為目錄時可以省略連結名稱,此時連結與目錄檔案同名,該格式最為常用。

第二種格式,為指定的目標檔案在當前目錄下建立同名連結

第三種第四種, 分別為每一個目標檔案在指定的目錄下建立同名連結。

3. 引數解析

--backup[=CONTROL]
    備份每一個存在的目標檔案
-b
    類似於 --backup, 但不接受引數
-d, -F, --directory
    允許超級使用者嘗試為目錄建立硬連結
-f, --force
    強行建立檔案或者目錄的連結,與連結同名的檔案或目錄將被覆蓋
-i, --interactive 覆蓋既有檔案之前先詢問使用者 -L, --logical 建立硬連結時,當目標檔案是軟連結時,進行解引用,指向軟連結的目標檔案 -n, --no-dereference 把軟連結視為一般檔案,不進行解引用 -P, physical 建立硬連結時,直接指向軟連結本身,而不是指向軟連結的目標檔案(預設)。 -r, --relative 建立相對於連結位置的符號連結
-s, --symbolic
  建立軟連結
-S, --suffix=SUFFIX
  修改備份檔案字尾。用 -b 引數備份目標檔案後,備份檔案字尾預設為 ~
-t, --target-directory=DIRECTORY
  指定存放連結檔案的目錄
-T, --no-target-directory
  將 LINK_NAME 視為連結檔案而非存放連結檔案的目錄
-V, --verbose
  顯示指令執行過程
--help
  顯示幫助並退出
--version
  顯示版本並退出

選項 --backup 的引數 CONTROL 控制檔案備份後的版本生成方式,可取值如下:

none, nil
    不進行備份
number, t
    使用數字字尾進行滾動。備份檔名字尾一次遞增 ~1~、
existing, nil
    如果有使用數字字尾則使用數字,否則使用簡單的備份方式
simple, never
    只是用簡單的備份方式。

使用選項 -s 生產軟連結時,將忽略選項 -L, -P,建立硬連結, 預設使用 -P 選項,將硬連結指向軟連結本身,相當於給軟連結起了個別名。

4. 常用示例

  1)給 /etc/passwd 建立軟連結

pi@raspberrypi:~ $ ln -s /etc/passwd passwdsoftlink
pi@raspberrypi:~ $ ls -l passwdsoftlink 
lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink -> /etc/passwd

  2)給 /etc/passwd 多次建立軟連結, 軟連結的名稱相同,採用數字表示備份檔案的版本號,多次備份,版本號依次遞增

pi@raspberrypi:~ $ ls -l passwdsoftlink 
lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink -> /etc/passwd
pi@raspberrypi:~ $ ln -s --backup=number /etc/passwd passwdsoftlink
pi@raspberrypi:~ $ ls -l passwdsoftlink*
lrwxrwxrwx 1 pi pi 11 Jan 19 14:17 passwdsoftlink -> /etc/passwd
lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink.~1~ -> /etc/passwd
pi@raspberrypi:~ $ ln -s --backup=number /etc/passwd passwdsoftlink
pi@raspberrypi:~ $ ls -l passwdsoftlink*
lrwxrwxrwx 1 pi pi 11 Jan 19 14:18 passwdsoftlink -> /etc/passwd
lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink.~1~ -> /etc/passwd
lrwxrwxrwx 1 pi pi 11 Jan 19 14:17 passwdsoftlink.~2~ -> /etc/passwd