Coreutils realpath: 하드(?) 링크와 함께 사용하면 혼동되는 출력

Coreutils realpath: 하드(?) 링크와 함께 사용하면 혼동되는 출력

나는 pip(Python 패키지 관리자) 설치를 "놀고" 장난치고 있었습니다. 어쨌든, 내 시스템에서는 /bin/pip그것이 하드 링크 /usr/bin/pip(또는 그 반대로, 하드 링크가 어떤 파일이 원본인지 모른다고 들었기 때문에) 였다는 것이 밝혀졌습니다 .

$ realpath /bin/pip /usr/bin/pip
/usr/bin/pip
/usr/bin/pip

결과는 realpath나를 혼란스럽게 만들었습니다. 어떤 파일이 원본인지 모르는 경우 for 대신 해당 파일이 realpath표시되는 이유는 무엇입니까 ?/usr/bin/pip/bin/pip/bin/pip

나는 그 중 하나가 다음과 같은 이유로 하드 링크일 수 있다는 것을 알고 있습니다.

$ stat -c "%n is a %F pointing to inode %i, which has %h hard link(s)" /bin/pip /usr/bin/pip
/bin/pip is a regular file pointing to inode 152837, which has 1 hard link(s)
/usr/bin/pip is a regular file pointing to inode 152837, which has 1 hard link(s)

혹시라도 내 컴퓨터가 CentOS 7을 실행하고 있고 realpath 명령은 GNU coreutils 8.22에서 온 것입니다.

- - - - 편집하다- - - -

실제로 /bin은 일반 디렉토리인 /usr/bin에 대한 심볼릭 링크입니다.

$ ls -ld /bin /usr/bin
lrwxrwxrwx. 1 root root     7 May 15 12:49 /bin -> usr/bin
dr-xr-xr-x. 2 root root 53248 Jul 13 18:44 /usr/bin

답변1

나는 이것을 테스트했지만 나에게는 그런 일이 발생하지 않습니다. 나는 (제안된 대로) realpath해당 문제가 해결되었기 때문에 이것이 어딘가의 심볼릭 링크 때문이라고 생각합니다 .

노력하다:

ls -li /bin/pip /usr/bin/pip  

두 디렉터리 항목이 동일한 inode/파일을 참조하는지(직접 또는 간접적으로) 다시 확인해야 합니다.

지금 시도해보세요:

ls -ld /bin /usr/bin  

그러면 두 디렉터리( d첫 번째 열)가 모두 표시됩니다. 그 중 하나(거의 확실히)가 해당 열에 /usr/bin나타나면 l이는 심볼릭 링크이며, 이는 현재 보고 있는 동작을 설명합니다( realpath앞서 언급한 심볼릭 링크 해결).

최종 설명: 둘 중 하나가 /bin다른/usr/bin 것에 대한 심볼릭 링크 인 경우 realpath심볼릭 링크는 대상으로 이동하고 해당 대상을 실제 경로로 사용합니다.

GNU realpath(다른 모든 항목은 아님)에는 이 --no-symlinks옵션이 있습니다. 이를 사용하면 원래 기대했던 결과를 얻을 수 있습니다.

관련 정보