재현하는 방법은 다음과 같습니다.
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
콘텐츠가 왜 깨졌나요?
모든 셸에서 command > some_file
먼저 열리고 잘립니다(0) some_file
.그 다음에실행 command
하고 결과를 작성합니다 some_file
.
따라서 cat x > x
쉘이 열리고 잘 x
리면그 다음에 cat x
열어서 읽을 것이다잘린파일 쓰기는 모두 0바이트입니다.