符號連結

Claire_ljy發表於2020-04-04

關於關於NTFS符號連結(Windows平臺),詳見“NTFS符號連結”。

符號連結軟連結)是一類特殊的檔案, 其包含有一條以絕對路徑或者相對路徑的形式指向其它檔案或者目錄的引用。[1] 符號連結最早在4.2BSD版本中出現(1983年)。今天POSIX作業系統標準、大多數類Unix系統Windows VistaWindows 7都支援符號連結。Windows 2000Windows XP在某種程度上也支援符號連結。

符號連結的操作是透明的:對符號連結檔案進行讀寫的程式會表現得直接對目標檔案進行操作。某些需要特別處理符號連結的程式(如備份程式)可能會識別並直接對其進行操作。

一個符號連結檔案僅包含有一個文字字串,其被作業系統解釋為一條指向另一個檔案或者目錄的路徑。它是一個獨立檔案,其存在並不依賴於目標檔案。如果刪除一個符號連結,它指向的目標檔案不受影響。如果目標檔案被移動、重新命名或者刪除,任何指向它的符號連結仍然存在,但是它們將會指向一個不復存在的檔案。這種情況被有時被稱為被遺棄

 

目錄

  • 1 Unix作業系統
    • 1.1 符號連結的儲存
  • 2 Mac OS作業系統
    • 2.1 別名(Aliases)
  • 3 Windows作業系統
    • 3.1 Windows Vista的符號連結
    • 3.2 快捷方式
    • 3.3 資料夾快捷方式
    • 3.4 Cygwin下的符號連結
  • 4 其它作業系統
  • 5 參見
  • 6 參考文獻

 

Unix作業系統

在Unix下建立一個符號連結,可以在命令列提示符下輸入以下命令:

ln -s 目標 連結名稱

將上述命令中的“目標”用符號連結將要指向的相對路徑或者絕對路徑進行替換。在通常的情況下,目標檔案應該存在。但是也可以建立一個指向不存在目標的符號連結。將“連結名稱”用希望的符號連結名替換。這條ln命令將會建立一條符號連結。當建立完符號連結之後,可以將“連結名稱”當作“目標”的別名看待。普通的檔案操作命令(如cp、rm等)都能直接作用於符號連結。用於讀寫檔案內容的命令將會直接訪問目標檔案。

user@userbox:~/one$ cd two
user@userbox:~/one/two$ ls
a  b
user@userbox:~/one/two$ cd
user@userbox:~$ ln -s ~/one/two three
user@userbox:~$ cd three
user@userbox:~/three$ ls
a  b
user@userbox:~/three$ cd
user@userbox:~$ cat ./one/two/a
a user@userbox:~$ echo "c" > ./one/two/a
user@userbox:~$ cat ./three/a
c

在Unix中,符號連結的建立使用與建立硬連結同樣的命令,但是它們之間的實際行為差別很大。硬連結僅僅是一個與檔案關聯的名字,它不能離開關聯檔案而獨立存在。當一個硬連結被移動、重新命名或者刪除時,其餘關聯到同一檔案的硬連結不受影響。只有當最後一條指向該檔案的硬連結被刪除時,該檔案內容將會消失。與硬連結不同,符號連結能夠指向目錄。

符號連結的儲存

早期符號連結的實現,採用直接分配磁碟空間來儲存符號連結的資訊,這種機制與普通檔案一致。這種符號連結檔案裡包含有一個指向目標檔案的文字形式的引用,以及一個指示自己為符號連結的標誌。

這樣的儲存方式被證明有些緩慢,並且早一些小型系統上會浪費磁碟空間。一種名為快速符號連結的新型儲存方式能夠將文字形式的連結儲存在用於存放檔案資訊的磁碟上的標準資料結構之中(inode)。為了表示區別,原先的符號連結儲存方式也被稱作慢速符號連結

Mac OS作業系統

別名(Aliases)

除開Unix系統下的普通符號連結之外,Mac OS還能使用別名(aliases)。當目標檔案移動到同一磁碟上的其它地方時,別名仍然夠繼續有效。某些版本的Linux系統也有與別名類似的功能。

Windows作業系統

Windows Vista的符號連結

Windows Vista 的符號連線基於 NTFS 檔案系統重解析點功能,具體請參考 NTFS 的相關介紹。

Windows Vista 使用 mklink 命令(注意這是內部命令,而非可執行程式)建立符號連線,命令列如下:

mklink [/D | /H | /J] LinkName Target
/D          建立目錄符號連結(預設為檔案符號連結)
/H          建立硬連結
/J          建立目錄連線
LinkName    連結名稱
Target      連結的目標(根據命令列引數不同,可能為檔案、目錄或者載入點

快捷方式

快捷方式(shortcut)是一種功能上類似符號連結的檔案物件,但與符號連結有本質的不同。快捷方式是普通的檔案(擁有副檔名 .lnk),而非符號,因此,快捷方式可以被複制、移動、更改(某些特殊的快捷方式無法更改所有資訊)或刪除。快捷方式可以指向檔案、資料夾或其他任何系統中合法的位置(包括控制皮膚桌面等)。

如果快捷方式指向可執行程式,則可以同時指定啟動的命令列引數以及啟動位置(對於非可執行程式的快捷方式也能指定這些資訊,但無意義)。同時,可以為快捷方式單獨選擇圖示(如果沒有選擇圖示,則使用目標的圖示),以方便使用者個性化。

刪除快捷方式完全不會影響被連結到的目標。如果刪除了目標,則會使快捷方式失效。由於快捷方式可以使用相對路徑或絕對路徑,因此移動快捷方式或目標可能導致快捷方式失效,也可能不會有影響。在某些Windows作業系統(包括但不限於Windows XP、Windows Vista)中,作業系統會對檔案路徑的改變作一定程度的自動處理,使得快捷方式將在大多數情況下能保持有效:當快捷方式指向的目標失效而目標被移動過時,系統將自動修改快捷方式的目標到新的位置。

資料夾快捷方式

類似普通快捷方式,但只能指向資料夾並且對使用者更為透明。資料夾快捷方式(Folder Shortcut)的實質為一個帶有隻讀屬性的普通資料夾,裡面含有desktop.ini和target.lnk兩個隱藏檔案:target.lnk為指向目標資料夾的普通快捷方式;由desktop.ini定義該資料夾為“資料夾快捷方式”,其內容為:

[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}

資料夾快捷方式可以在 Windows 外殼中被建立和使用。 同樣,刪除資料夾快捷方式不會影響被連結到的目標;刪除目標則會使資料夾快捷方式失效。

參見

參考文獻

轉載於:https://www.cnblogs.com/soaringEveryday/p/3520453.html

相關文章