it-gundan.com

"realpath"와 "readlink -f"의 차이점은 무엇입니까

realpath 명령과 readlink -f이 (가) 권장됩니다. 또한 realpath가 도입 된 이유는 readlink에 그러한 기능이 없기 때문이며, 일단 도입되면 realpath가 더 이상 필요하지 않고 대부분의 OS 공급 업체가 지원을 중단 한 것으로 나타났습니다.

내 질문의 이유는 많은 사람들이 readlink -frealpath와 "꽤 비슷한"명령으로, 그 "아주 비슷한"부분을 정교하게 다루는 사람이 없기 때문에 저를 괴롭히는 것입니다. 실제 차이점은 무엇입니까?

77
Felipe Leão

tl; drreadlink -f는 기존 디렉토리에 존재하지 않는 파일에 대해 0를 반환하지만 realpath1를 반환합니다. 그러나 readlink -erealpath처럼 작동하며 존재하지 않는 파일에 대해서는 1를 반환합니다 (끝의 편집기 참고 사항 참조).

readlink -f

$ readlink -f non-existent-file
/home/user/non-existent-file
$ echo $?
0

readlink -e

$ readlink -e non-existent-file
$ echo $?
1

realpath

$ realpath non-existent-file
non-existent-file: No such file or directory
$ echo $?
1

존재하지 않는 디렉토리가있는 readlink -f

readlink -f 동작은 경로의 존재하지 않는 부분에 따라 다릅니다.

$ readlink -f /tmp/non-existent-dir/foo
$ echo $?
1

존재하지 않는 디렉토리가있는 realpath

$ realpath /tmp/non-existent-dir/foo
$ echo $?
1

가용성

readlink는 대부분의 Linux 배포 내에 설치됩니다. 반면 realpath은 종종 명시 적으로 설치해야합니다.

요약하자면

realpath ...에 대한 호출을 바꾸려면 readlink -e ...를 사용하십시오.


우분투에서 readlink (GNU coreutils) 8.21 실제 버전 1.19 로 테스트 16.

(Ed.: @AnthonyGeoghegan은 "를 썼습니다. 이것은 realpath의 데비안 버전을 나타냅니다. GNU 버전 realpathreadlink -f ")와 동일하게 동작합니다.

21