重现方法如下:
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
第三个命令后变成空文件,但为什么呢?
答案1
当您尝试打开文件时,将评估符号链接。在“正常”情况下,打开符号链接的结果是打开它引用的文件。所以:
ln -s original_file my_symlink
cat my_symlink > original_file
非常类似于:
cat original_file > original_file
为什么会破坏内容?
在任何 shell 中command > some_file
都会首先打开并截断(零)some_file
和然后执行command
,将结果写入some_file
.
因此,如果您cat x > x
随后 shell 将打开并截断x
,然后 cat x
将打开并阅读被截断的文件写入全部为零字节。