설치하지 않고 데비안 패키지의 파일을 나열하는 방법


답변:


315

dpkg -c (또는 --contents ) .deb 패키지 파일의 내용을 나열합니다 (프런트 엔드에서 dpkg-deb.)

dpkg -c package_file.deb

패키지 파일이 아닌 패키지 이름으로 직접 작업하려면 다음을 사용할 수 있습니다. apt-file. (설치해야 할 수도 있습니다 apt-file 먼저 패키지.)

sudo apt-file update        
apt-file list package_name

첫 번째 주석에서 언급했듯이, apt-file은 이미 구성된 Apt 저장소의 패키지 내용을 나열합니다. 특정 패키지가 설치되어 있는지 여부는 상관 없습니다.


14
apt-file 또한 업데이트해야합니다 ( sudo apt-file update ), 이미 구성된 Apt 저장소의 패키지 내용 만 나열합니다.
quack quixote

1
@quackquixote : Ubuntu 12.04에서는 자동으로 실행됩니다.
confiq

1
dpkg -c 좋은!
d-_-b

2
Apt-file 대답은 패키지가 구성된 저장소에서 나왔다고 가정합니다. .deb 파일을 별도로 다운로드해야합니다. 원래의 질문은 모호합니다.
Zoredache

4
@confiq, 내 테스트가 아닙니다. 나는 12.04.4를 실행 중이며 여전히 "E : 캐시가 비어 있습니다. 먼저 'apt-file update'를 실행해야합니다."
Matthew Flaschen

54

용도 --contents 대신에 -L:

dpkg --contents PACKAGENAME

이러한 방식으로 사용될 때, dpkg 프론트 엔드로서의 역할을한다. dpkg-deb, 그래서 man dpkg-deb 모든 옵션을 볼 수 있습니다.

보관 브라우저를 사용하여 패키지 내용을 볼 수도 있습니다.


2
먼저 설치 한 다음 제거하지 않으면 작동하지 않습니다.
Xiè Jìléi

3
.deb 파일에 인수 (PACKAGENAME 대신 PACKAGE-DEB-FILE)를 주면 제대로 작동합니다.
quack quixote

3
이 대답은 잘못되었습니다. 패키지를 먼저 설치해야합니다. 설치되어 있지 않으면 .deb 파일이 없습니다.
Neil

이 명령은 나를 위해 작동합니다. 예를 들어, Google에서 google-chrome-stable_current_amd64.deb를 다운로드했습니다. 그런 다음 명령을 내렸다. dpkg --contents google-chrome-stable_current_amd64.deb 설치 할 모든 파일을 나열했습니다 (주로 /opt/google/chrome ),이 중 아무 것도 현재 내 시스템에 설치되어 있습니다. (문제가되는 경우 Xubuntu 11.10을 실행 중입니다.)
quux00

10
@ 네일, 대답은 잘못이 아닙니다. deb 파일을 가지고 있기 때문에 그것이 설치되었다는 것을 의미하지는 않습니다. apt-file은 빌드에 꼭 필요한 모든 패키지가 필요합니다. O.O
d-_-b

20

dpkg --contents 제거 된 패키지를 볼 수 있습니다. .deb가 아직 시스템에 없다면,

apt-get --download-only install pkgname

패키지가 다운로드됩니다. /var/cache/apt/archives 설치되지 않았습니다.


3
내용을 다운로드하지 않고 나열 할 수 있습니까? 매우 느린 연결 상태이고 패키지가 너무 커서 다운로드 할 수없는 경우 .deb 파일에 내용 목록이있는 파일 헤더가 있으면 전체 패키지를 다운로드 할 필요가 없을 수도 있습니다. 이것이 가능한가?
Xiè Jìléi

11

가장 좋은 방법은 직접 패키지 저장소를 탐색하는 것입니다.

http://packages.debian.org/[distro name]/all/[package name]/filelist

예:

http://packages.debian.org/wheezy/all/transmission-common/filelist


터미널을 떠나지 않으려면 예를 들어 lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (당신이 가지고 있다면 lynx 설치됨).
Ruslan

7

내가 데려 갔어. @ baldoz의 http 아이디어 우분투와 데비안을 일반화하고 약간의 sed를 추가하고 bash 함수 one-liner로 감쌌다.

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu http://packages.ubuntu.com/ ' -e 's Debian https://packages.debian.org/ ')/$(lsb_release -sc)/all/$1/filelist | sed -n -e '/<pre>/,/<\/pre>/p' | sed -e 's/<[^>]\+>//g' -e '/^$/d'; }

용법:

$ deb_list curl
/usr/bin/curl
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/copyright
/usr/share/doc/curl/NEWS.Debian.gz
/usr/share/man/man1/curl.1.gz

여러 줄에서 같은 기능 :

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu http://packages.ubuntu.com/ ' \
                      -e 's Debian https://packages.debian.org/ '
              )/$(lsb_release -sc)/all/$1/filelist \
      | sed -n -e '/<pre>/,/<\/pre>/p' \
      | sed -e 's/<[^>]\+>//g' -e '/^$/d';
}

설명 :

  1. lsb_release -si가 "Ubuntu"또는 "Debian"을 반환하면이를 기본 URL로 바꿉니다. http://packages.ubuntu.com 또는 https://packages.debian.org
  2. lsb_Release -sc는 코드 이름 (예 : "trusty", "sid"등)을 사용하여 전체 URL을 작성합니다. http://packages.ubuntu.com/trusty/all/curl/filelist
  3. 해당 URL을 curl로 가져오고 html을 세 개의 sed 명령으로 파이프하십시오. 먼저 파일 목록 만 캡처합니다 (사이에 무엇이 있는지 <pre></pre> 태그); 두 번째 모든 HTML 태그를 제거합니다. 세 번째는 빈 줄을 제거합니다.

참고 : PPA는 검색하지 않으며, 대체 소스는 repos이며, 실행중인 debian / 우분투의 릴리즈에 사용할 수있는 공식 패키지 만 조회합니다.


루비가 필요해?
Anwar

1
@Anwar, 나는 처음에는 루비를 사용했다. 왜냐하면 나는 게으르며 여러 줄의 정규 표현식이 sed / awk / grep을 빨기 때문이다. 하지만 루비가 필요없는 두 개의 sed 명령을 사용하도록 다시 작성했습니다.
notpeter

좋은! 이것은 내가 찾고 있던 대답이다.
Anwar

2

시험:

apt-get download packages-name
dpkg --contents *.deb

2

2017 년 1 월에이 이슈를 계속해서 찾아야 할 사람들을 위해, 데비안 8.5에 최신 버전의 apt와 dpkg를 다운로드하지 않고도 멋진 것들을 얻을 수 있습니다.

다운로드없이 deb 파일의 내용 나열 :

먼저 deb 파일의 전체 URL을 찾습니다.

root@debian:apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4

추신 : --print-uris 스위치는 deb 패키지의 URL을 출력하지만 deb는 다운로드되지 않습니다.

그런 다음 deb 패키지의 내용을 다운로드하지 않고 표시합니다.

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb -c /dev/stdin
drwxr-xr-x root/root         0 2016-12-10 22:18 ./
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/bin/
-rwxr-xr-x root/root     13184 2016-12-10 22:18 ./usr/bin/yade
.........................more files listed bellow ......................

추신 : 같은 결과를 얻을 수 있습니다

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")

위의 deb 패키지에서 다운로드없이 파일을 추출하십시오.
예를 들어이 패키지를 설치하지 않고 deb 꾸러미를 다운로드하지 않고 yade 꾸러미의 맨 페이지를 읽고 싶습니다.

다음과 같이 조언 한 deb 패키지의 맨 페이지 파일 이름 dpkg -c ~이다. ./usr/share/man/man1/yade.1.gz

즉석에서 man 페이지를 읽으려면 다음을 수행하십시오.

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb --fsys-tarfile /dev/stdin |tar -xO ./usr/share/man/man1/yade.1.gz |man /dev/stdin

man 페이지는 man 응용 프로그램을 사용하여 올바르게 표시됩니다.

추신 : 위의 파이프 ar 명령과 작동하지 않습니다.

root@debian:apt --version --> apt 1.4~beta2 (amd64)
root@debian:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
root@debian:man --version --> man 2.7.6.1
root@debian:tar --version --> tar (GNU tar) 1.29

1

먼저 설치하거나 목록을 추출하기 전에 불가능하다고 봅니다. .deb 파일.

다음 명령을 시도하십시오.

dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']\+"))

변화 language-pack-en 귀하의 패키지 이름.

그것은 기본적으로 읽습니다. .deb 를 통해 추출 된 파일 curl 실행하다 dpkg --contents FILE 그 위에.


패키지 파일을 다운로드하지 않고도 내용을 확인할 수 있습니다.

그래서 당신이 URL을 알고 있다면 .deb 다음 셸 명령은 모든 패키지 파일을 나열합니다.

dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")

컬 매개 변수 : -s - 침묵하는, -L - 이동 된 링크를 따라 가십시오.

URL을 모르는 경우 가져 오기 : apt --print-uris예를 들어

apt --print-uris install avis | grep avis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.