Symlink

為什麼擷取符號連結文件並將輸出重定向到原始文件會使後一個文件為空?

  • February 20, 2021

以下是如何重現它:

echo 'the original file' > orig
ln -s orig symb # now symb is symlinked to orig
cat symb > orig # this makes orig an EMPTY FILE, but why?

orig在第三個命令之後變成一個空文件,但是為什麼呢?

在您嘗試打開文件時評估符號連結。在“正常”情況下,打開符號連結的結果是打開它引用的文件。所以:

ln -s original_file my_symlink
cat my_symlink > original_file

非常類似於:

cat original_file > original_file

為什麼會破壞內容?

在任何 shellcommand > some_file中都會首先打開並截斷(零)some_file然後執行,command結果寫入some_file.

因此,如果您cat x > x隨後 shell 將打開並 truncate x然後 cat x將打開並讀取截斷的文件並寫入所有零字節。

引用自:https://unix.stackexchange.com/questions/635365