![심볼릭 링크 파일을 캡처하고 출력을 원본 파일로 리디렉션하면 후자의 파일이 비어 있는 이유는 무엇입니까?](https://linux55.com/image/188326/%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%BA%A1%EC%B2%98%ED%95%98%EA%B3%A0%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%9B%90%EB%B3%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%98%EB%A9%B4%20%ED%9B%84%EC%9E%90%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EB%B9%84%EC%96%B4%20%EC%9E%88%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
재현하는 방법은 다음과 같습니다.
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바이트입니다.