본문 바로가기
Programming/C++

linux diff 명령어 no such file or directory 해결 방법

by AUTORI 2022. 3. 5.

파일 비교를 위해 diff 명령어 사용 시, no such file or directory 메시지가 나오는 경우가 있다. 특정 파일을 symbolic 링크로 참조하고 있으나, 참조된 파일이 없는 경우 발생한다. 이때  --no-dereference 옵션을 사용하면 해당 에러 메시지를 출력하지 않는다. linked로 연결된 파일을 비교하지 않고 링크 path 정보 자체로만 비교를 한다. 아래 예시를 통해 차이점을 비교해보았다.

 

 


test1 폴더 test2 폴더
A.so -> /usr/lib/tc/mx_xt.so
B.so -> /usr/lib/test123
C.so -> /usr/lib/ssl
A.so -> /usr/lib/tc/mx_xt.so
B.so -> /usr/lib/test123
C.so -> /usr/lib/ssl_test
A.so : 같은 path를 참조. mx_xt.so 존재(O)
B.so : 같은 path를 참조. 실제 test123 없음(X)

C.so : 
다른 path 참조. ssl 존재(O), ssl_test 없음(X)

 

--no-dereference  옵션 사용 유무에  따른 diff 결과를 비교해보았다.

 

diff   -r   test1   test2

결과 :
diff: test1/B.so: No such file or directory
diff: test2/B.so: No such file or directory
diff: test2/C.so: No such file or directory

 

B.so의 link로 연결된 test123 파일은 실제 없는 파일이다. 결국 No such file or directory 메시지를 출력한다. 또한  test2의 C.so 파일에 연결된 ssl_test 파일 또한 없는 파일이다. 파일 또는 폴더 자체가 없어 비교를 거부한다.

 

 

diff   -r   --no-dereference   test1   test2

결과 :
Symbolic links test1/C.so and test2/C.so differ

 

--no-dereference 옵션 사용시, link path 정보로 diff 작업을 수행한다. test1의 B.so과 test2의 B.so 파일 모두 link된 파일이 존재하지 않으나, 같은 path를 가리키고 있어 동일한 파일로 인식했다. test2의 C.so 링크된 path 파일도 실제 없는 파일이지만 path 자체로만 비교를하였으며 결과 값과 같이 다르다고 알려준다.

 

 

댓글