심볼릭 링크가 설치된 패키지를 찾는 방법

심볼릭 링크가 설치된 패키지를 찾는 방법

존재하다이 문제설치 명령의 최종 대상에 대한 패키지를 찾는 동안 발생한 문제를 설명했습니다 /usr/bin/rename. dpkg -S /usr/bin/rename결과는 나오지 않았지만 처음에 그것이 링크라는 것을 발견한 후 일반적인 해결책을 찾았습니다.

/usr/bin/rename그것이 /etc/alternatives/rename나에게 방법을 알려 주기 때문에이것특정 링크는 admin 에 의해 관리됩니다 update-alternatives.

이 지식이 없으면 어떤 패키지가 실제로 심볼릭 링크를 설치하는지 어떻게 알 수 있나요? 이를 수행하는 간단한 명령이 없는 경우 어떤 명령이 심볼릭 링크를 설정하는지 알아내는 일반적인 전략은 무엇입니까?

답변1

dpkg -S심볼릭 링크는 패키지에서 추출된 파일만 보기 때문에 어떤 패키지가 설치되었는지 알 수 있는 방법이 없습니다. 이 정보는 의 설명서 *.list에서 /var/lib/dpkg/info/*.list.

Debian 시스템의 각 파일은 하나의 패키지에서만 소유할 수 있습니다. 설치하려는 패키지에 다른 패키지에서 이미 제공한 파일이 포함되어 있는 경우 다음 중 하나가 발생합니다.

  • dpkg두 번째 패키지 설치가 거부됩니다.
  • dpkg두 번째 패키지가 설치되기 전에 첫 번째 패키지가 제거됩니다(두 번째 패키지가 Breaks첫 번째 패키지와 OR 관계를 지정하는 경우).Conflicts
  • dpkg두 번째 패키지를 설치하기 전에 더 이상 파일을 제공하지 않는 최신 버전으로 첫 번째 패키지를 업그레이드하십시오(두 번째 패키지가 / Conflicts및 첫 번째 패키지 Breaks와의 관계를 지정하는 경우).Replaces
  • dpkg두 번째 패키지는 첫 번째 패키지와 함께 설치되며, 두 번째 패키지에서 제공하는 파일로 이를 덮어씁니다(두 번째 패키지가 Replaces첫 번째 패키지에 대한 관계를 지정하는 경우).

분명히 이것은 실제로 여러 패키지에 동일한 명령이 주어지고 동시에 설치되는 것을 허용하지 않습니다.alternatives데비안 시스템이러한 패키지는 파일에 대해 다른 이름을 제공합니다. 예를 들면 다음과 같습니다.

host ~ # dpkg -S /usr/bin/prename 
perl: /usr/bin/prename

패키지 postinst스크립트( /var/lib/dpkg/info/perl.postinst)는 이를 대안으로 등록합니다.

# util-linux has an alternate rename
update-alternatives --install /usr/bin/rename rename /usr/bin/prename 60 \
--slave /usr/share/man/man1/rename.1.gz rename.1.gz \
    /usr/share/man/man1/prename.1.gz

dpkg -S그렇기 때문에 알려지지 않았습니다 /usr/bin/rename.


이 지식이 없으면 어떤 패키지가 실제로 심볼릭 링크를 설치하는지 어떻게 알 수 있습니까?

데비안 패키지할 수 있는심볼릭 링크를 제공하므로 심볼릭 링크(또는 다른 이유로 생성된 심볼릭 링크)가 아닌 한 alternatives정상적으로 작동합니다.postinstdpkg -S

시스템의 경우 alternatives심볼릭 링크 경로를 따르십시오.

host ~ # dpkg -S $(readlink -f /usr/bin/rename)
perl: /usr/bin/prename

물론 이는 잘못된 결론으로 ​​이어질 수 있습니다. 예를 들어 패키지가 postinst다른 파일에서 제공하는 파일에 대한 심볼릭 링크를 생성하는 경우입니다. 이 경우 책임이 있는 패키지를 알아낼 수 있는 일반적인 방법은 없습니다. 파일에 grep핑을 보내는 등 몇 가지 검색 작업을 수행해야 합니다.*.postinst

관련 정보