Ubuntu
符號連結的不確定性
我進行了快速搜尋,但找不到有關此場景的任何具體資訊:
假設我有一個目錄(讓我們忽略路徑)並將其命名為 A。現在,我創建一個指向名為 S 的目錄 A 的符號連結。我們現在應該有:
S -> A
如果我有另一個目錄,讓我們說 B 並按照以下方式做一些事情:
cp -r B/ A/
符號連結會持續存在,還是會破壞它?假設我沒有使用 bash 命令,而是使用 python distutils.dir_utils.copytree(B, A),符號連結 S 是否仍指向 A?A還是A還是變成了B?
您可以很容易地從命令行對此進行測試:
# set up test mkdir A mkdir B echo "this is A" > A/test.txt echo "this is B" > B/test.txt echo "this is A" > A/old.txt echo "this is B" > B/new.txt # contents of A change on copy ln -s A S cat S/test.txt cp -r B/ A/ cat S/test.txt cat A/test.txt # S still points to A ls -l S/ ls -l A/ ls -l B/
因為您將能夠看到來自 B 的文件,覆蓋來自 A 的文件將對 A 和 S 產生影響。但是,當您從 A 複製文件時,名稱在 A 和 B 之間唯一的文件將保留,因為S 仍然指向 A但是A變了。
符號連結指向一條路徑。例如,如果您刪除 A 並離開 S,S 仍然指代不再存在的 A:
rm -rf A/ ls -l S/
如果你現在用被呼叫的 A 創建一個文本文件,S 將指向這個文本文件,因為它仍然指向路徑 A。正如 Kusalananda 和 G-Man 所說,你對 A 所做的任何事情都不會影響 S。或者更明確地說您對 A 所做的任何事情都不會影響 S 指向 A 的事實。
echo "new text file" > A cat S