realpath
나는 이 명령과 그것이 더 이상 사용되지 않고 readlink -f
이제 권장 되는 방법에 대해 많이 읽었습니다 . 또한 readlink에 이러한 기능이 부족하여 realpath가 도입된 곳도 있으며, 일단 도입되면 realpath는 더 이상 필요하지 않으며 대부분의 운영 체제 공급업체에서는 이를 지원하지 않습니다.
readlink -f
제가 질문을 한 이유는 저도 "매우 유사한" 명령으로 추천하는 사람들을 많이 보았는데 realpath
, "매우 유사한" 부분에 대해 자세히 설명하는 사람이 없어서 그게 마음에 걸렸기 때문입니다. 실제 차이점은 무엇입니까?
답변1
주변에는 몇 가지 명령이 있습니다 realpath
.
이 realpath
유틸리티는 래퍼입니다.realpath
라이브러리 기능은 여러 번 재창조되었습니다.이류.
데비안은 한때realpath
팩(분리된~에서dwww
~부터멍청한)는 2001년부터 패키징 및 문서화를 제외하고는 변경되지 않았으며 현재 단계적으로 폐지되고 있습니다. 현재 더 많은 표준 대안(GNU readlink
및 곧 GNU ) 이 있으므로 이 유틸리티는 더 이상 사용되지 않지만 realpath
당시에는 GNU 유틸리티가 readlink
전혀 존재하지도 않았습니다. 이 구현은 realpath
일부를 지원합니다.options
기호 링크가 널 종료 출력을 확인하거나 생성하는 것을 방지합니다.
바쁜 상자자신의 것을 포함하여realpath
명령(옵션 없음)
GNU 핵심 도구소개했다realpath
명령 입력버전 8.152012년 1월. 이것은 BusyBox 및 Debian과 호환되는 대안이며 realpath
GNU와 동일한 옵션이 많이 있습니다.readlink
.
realpath
readlink -f
GNU 와 동일한 효과가 있습니다 readlink
. 이 두 명령(또는 realpath
의 다양한 명령 readlink -f
)의 차이점은 지원하는 추가 옵션입니다.
GNU는 realpath
더 이상 사용되지 않습니다. 반대의 문제가 있습니다. GNU는 너무 새롭고 모든 곳에서 사용할 수 없습니다. 데비안은GNU 생략realpath
그로부터coreutils
짐을 싸서 스스로 붙잡으세요 realpath
. 왜인지는 모르겠습니다. GNU는 realpath
즉시 대체할 수 있어야 하기 때문입니다. 그러나 Debian jessie 및 Ubuntu 16.04부터는 realpath
GNU가 사용됩니다.
현재 Linux 시스템에서 기호 링크가 포함될 수 있는 경로를 정규화하는 가장 좋은 옵션은 입니다 readlink -f
.
BSD 시스템에는readlink
GNU와는 기능이 다른 명령입니다 readlink
. 특히 BSD에는 readlink
경로를 정규화하는 옵션이 없으며 전달된 심볼릭 링크만 통과합니다.
readlink
그런데, 같은 문제 - 그것도 마찬가지야여러 번 발명됨(유닉스에 심볼릭 링크를 추가할 때 이 유틸리티가 추가되지 않은 것은 불행한 일입니다.) 이제 많은 호환되지 않는 플래그가 있는 여러 구현(특히 BSD 대 GNU)에서 안정화되었습니다.
답변2
너무 길어요. readlink -f
0
기존 디렉토리에 존재하지 않는 realpath
파일을 반환합니다 1
. 그러나 존재하지 않는 파일 readlink -e
처럼 동작 realpath
하고 반환합니다 (참조).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
참여했습니다GNU Coreutils(이전에는 별도의 패키지였습니다).
요컨대
통화를 교체하고 싶다면 realpath ...
를 사용하세요 readlink -e ...
.
그러나 그 배포가 점점 더 널리 퍼지고 있으므로 realpath
설치를 기대하는 것도 무리가 아닙니다.realpath
MMV readlink
구현은 매우 다양합니다.
MMV realpath
기본 Linux 설치의 가용성 비율 readlink
.
시험용readlink(GNU coreutils) 8.21그리고실제 경로 버전 1.19우분투 16에서.
편집자 주
편집하다:@AnthonyGeoghegan은 다음과 같이 썼습니다.이는 다음을 가리킨다.데비안 버전
realpath
. 이것GNU 버전realpath
똑같이 행동하다readlink -f
")편집하다:@FilBot3 님이 “이건 작동하지 않아맥OS 알파인"
답변3
readlink -f
readlink -e
다른 응답에서 언급했듯이 또는 (배포판에 따라) 의 기능은 의 기능과 동일할 수 있습니다 realpath
. 그러나 realpath
이 유틸리티는 동일하지 않습니다 readlink
. 예를 들어, readlink
심볼릭 링크 파일의 내용(그 안에 있는 리터럴 텍스트)을 읽거나 검색하는 것이 가능합니다.
> ln -s "I am cold" slfile
> readlink slfile
I am cold
이것은 realpath
할 수 없습니다.
결국 심볼릭 링크 파일은 디렉터리/파일 계층 내에서 이동하기 위한 "레시피"로 해석되는 텍스트 파일입니다. 하지만 여전히 텍스트 파일입니다. 예를 들어, 그 내용( readlink
반환되는 것)은 조작될 수 있어야 합니다 sed -i '...' slfile
. 실제로 옵션은 심볼릭 링크를 --follow-symlinks
강제로 sed -i
따르도록 하는 것입니다. 현재 설정(OpenSuSe 15.3 기본값, GNU sed 4.4, GNU bash 버전 4.4.23(1))에서 이 기능이 작동하지 않기 때문에 "should"라고 씁니다. sed -i
해당 옵션이 없으면 --follow-symlinks
여전히 파일을 심볼릭 링크하고 싶습니다 . 길.