什麼時候符號連結被視為它連結到的東西以及符號連結?
符號連結可以連結到不同類型的檔案。例如,讓mylk
成為連結到目錄的符號連結。以下兩個將做不同的事情:
mv mylk ~
mv mylk/ ~
符號是否被視為其連結內容或本身取決於命令所期望的內容,或者取決於它的指定方式(無論使用該連結的命令是什麼)?謝謝。
答案1
作用於文件內容的程式始終作用於目標,而不是作用於符號鏈接,因為符號鏈接沒有自己的內容。
作用於檔案元資料(時間戳記、擁有者、權限等)的程式通常作用於目標,但某些程式可以選擇作用於符號連結(例如,chown -h
、touch -h
、 ...)。
作用於目錄項的程式通常作用於符號連結。重新命名和刪除等操作作用於目錄條目,無論它是什麼。有單獨的系統呼叫來存取檔案的元資料(包括檔案類型),這取決於程式是否希望遵循符號連結(stat
) 或不 (lstat
)。一些可以作用於任何類型的目錄條目的程式有選項告訴它們在找到連結時作用於目標而不是連結。例如,許多遞歸遍歷目錄的實用程式(find
、chown -R
、cp -R
、 …)預設作用於符號鏈接,但如果傳遞選項,則遵循所有符號鏈接-L
,並遵循命令列上的符號鏈接,但不遵循在執行過程中找到的目錄的符號連結-H
。
如果檔案名稱尾部有斜杠,則這會強製檔案名稱被解釋為目錄。如果該名稱是符號鏈接,則將遵循該名稱。因此,mv mylk ~
移動任何mylk
內容(符號鏈接或其他),如果它是目錄,則移動,或者如果目標是目錄的符號鏈接,則mv mylk/ ~
移動,如果既不是目錄也不是目錄的符號鏈接,則抱怨。這種一般行為mylk
mylk
mylk