라벨 정보를 작성할 때이름을 바꿔라, 내가 찾으려고 하는 패키지rename
명령이 설치되었습니다. 나는 평소 dpkg -S
대로 달렸다.이 문제):
$ which rename
/usr/bin/rename
$ dpkg -S $(!!)
dpkg-query: no path found matching pattern /usr/bin/rename
나는 일반적으로 명령을 수동으로 설치하지 않고 /usr/bin
액세스 권한이 있는 다른 컴퓨터에 rename
설치합니다 . 첫 번째 의심은 이 명령이 일부 패키지의 설치 후 단계에서 복사되었다는 것입니다.
그런 다음 하나를 만들고 명령이 실제로 링크라는 ls -l /usr/bin/rename
것을 알았습니다 . link target( ) 을 rename
시도했지만 패키지 이름도 제공되지 않았습니다.dpkg -S
/etc/alternatives/rename
dpkg -S /etc/alternatives/rename
추가 검색 결과, 이 링크 체인의 실제 실행 가능 대상은 /usr/bin/prename
다음과 같습니다.dpkg -S
따르지 않는 심볼릭 링크 동작에 대한 버그 보고서. 보고서는 2003년에 작성된 것으로, 심볼릭 링크를 추적하는 옵션을 찾을 수 없으며 dpkg
문제가 해결될 것 같지 않습니다.
명령이 심볼릭 링크인 경우 "실제" 실행 파일이 포함된 패키지를 어떻게 쉽게 찾을 수 있습니까?
답변1
readlink
인쇄 링크를 사용하여 위치를 가리킬 수 있습니다 . 옵션이 없는 인수는 readlink
링크여야 하며, 파일에 전달하면 아무 것도 인쇄되지 않습니다. -f
링크를 재귀적으로 따라가는 coreutils 패키지의 옵션readlink
그리고인수가 이미 파일인 경우에도 파일 이름이 인쇄됩니다.
이렇게 하면( -n
출력 끝에 개행 문자가 표시되지 않음 readlink
):
dpkg -S "$(readlink -fn "$(which rename)")"
당신은 대답을 얻을 것입니다 :
perl: /usr/bin/prename
이 경우, 따라가는 링크가 명확하게 표시되지만 prename
이것이 사실이라는 보장은 없습니다(예: 링크가 rename
$PATH에 없는 디렉터리의 실행 파일을 가리키는 경우).
realpath
@011c에서 알 수 있듯이 이미 설치되어 있는 경우 대안으로 사용할 수 있습니다.readlink -f