Câu hỏi Cách liệt kê các tệp của gói Debian mà không cần cài đặt


Lệnh này chỉ có thể liệt kê các nội dung của các gói đã cài đặt,

dpkg -L PACKAGENAME

nhưng làm thế nào để liệt kê nội dung của một gói không được cài đặt, để xem trước / kiểm tra gói?


255
2017-12-14 06:49


gốc


Tương tự trên Ubuntu: askubuntu.com/questions/32507/… - Ciro Santilli 新疆改造中心 六四事件 法轮功


Các câu trả lời:


dpkg -c (hoặc là --contents) liệt kê nội dung của tệp gói .deb (Đây là giao diện người dùng dpkg-deb.)

dpkg -c package_file.deb

Để làm việc trực tiếp với tên gói thay vì tệp gói, bạn có thể sử dụng apt-file. (Bạn có thể cần phải cài đặt apt-file gói đầu tiên.)

sudo apt-file update        
apt-file list package_name

Như đã nêu trong chú thích đầu tiên, tệp apt liệt kê các nội dung cho các gói trong kho lưu trữ Apt đã được cấu hình của bạn. Nó không liên quan cho dù bất kỳ gói cụ thể là hoặc không được cài đặt.


306
2017-12-14 15:42



apt-file cũng cần được cập nhật (sudo apt-file update) và chỉ liệt kê các nội dung cho các gói trong kho lưu trữ Apt đã được cấu hình của bạn. - quack quixote
@quackquixote: Trong Ubuntu 12.04 nó tự động - confiq
dpkg -c tốt đẹp! - d-_-b
Câu trả lời của tệp apt giả định rằng gói của bạn đến từ một kho lưu trữ được cấu hình thay vì một .deb tệp bạn đã tải xuống riêng. Câu hỏi ban đầu là mơ hồ mặc dù. - Zoredache
@confiq, không phải bởi thử nghiệm của tôi. Tôi đang chạy 12.04.4 và nó vẫn nói "E: Bộ nhớ cache trống. Bạn cần chạy 'apt-file update' trước." - Matthew Flaschen


Sử dụng --contents thay vì -L:

dpkg --contents PACKAGENAME

Khi được sử dụng theo cách này, dpkg hoạt động như giao diện người dùng dpkg-deb, vì vậy hãy sử dụng man dpkg-deb để xem tất cả các tùy chọn.

Bạn cũng có thể sử dụng trình duyệt lưu trữ để xem nội dung gói.


53
2017-12-14 08:14



Điều này không hoạt động trừ khi tôi cài đặt nó trước và sau đó gỡ cài đặt nó. - Xiè Jìléi
nó sẽ hoạt động tốt nếu bạn cung cấp cho nó một tệp .deb làm đối số (thay vì PACKAGENAME, cung cấp cho nó PACKAGE-DEB-FILE). - quack quixote
Câu trả lời này là sai. Bạn phải cài đặt gói trước. Nếu bạn chưa cài đặt, thì bạn không có tệp .deb. - Neil
Lệnh này làm việc cho tôi. Ví dụ: tôi đã tải xuống google-chrome-stable_current_amd64.deb từ Google. Sau đó, ban hành lệnh: dpkg --contents google-chrome-stable_current_amd64.deb và nó liệt kê ra tất cả các tập tin nó sẽ cài đặt (chủ yếu là để /opt/google/chrome), hiện chưa có cài đặt nào trong hệ thống của tôi khi tôi nhập. (Tôi đang chạy Xubuntu 11.10 nếu có vấn đề.) - quux00
@Neil, câu trả lời là không sai. Chỉ vì bạn có tệp deb, không có nghĩa là nó đã được cài đặt. apt-file cần toàn bộ gói xây dựng cần thiết. O.O - d-_-b


dpkg --contents sẽ cho phép bạn xem gói đã gỡ cài đặt. Nếu .deb chưa có trên hệ thống của bạn, hãy làm

apt-get --download-only install pkgname

Gói sẽ được tải xuống /var/cache/apt/archives nhưng chưa được cài đặt.


17
2017-12-14 14:34



Tôi có thể liệt kê các nội dung mà không cần tải xuống không? Nếu tôi đang kết nối rất chậm và nếu gói quá lớn để tải xuống. Nếu tệp .deb có tiêu đề tệp nơi danh sách nội dung đi, tôi đoán tải xuống toàn bộ gói có thể không cần thiết. Điều này có thể không? - Xiè Jìléi


Cách tốt nhất là duyệt trực tiếp kho lưu trữ gói:

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

Thí dụ:

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


11
2018-06-01 13:57



Và để tránh rời khỏi thiết bị đầu cuối, bạn có thể sử dụng ví dụ: lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (miễn là bạn có lynx Cài đặt). - Ruslan


tôi lấy Ý tưởng http của @ baldoz và tổng quát nó cho Ubuntu và Debian, thêm một chút sed và bọc nó trong một hàm bash một-lót:

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'; }

Sử dụng:

$ 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

Cùng chức năng trên nhiều dòng:

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';
}

Giải thích:

  1. lsb_release -si trả về "Ubuntu" hoặc "Debian" thay thế bằng url cơ sở http://packages.ubuntu.com hoặc là https://packages.debian.org
  2. lsb_Release -sc trả về tên mã (ví dụ: "đáng tin cậy", "sid", v.v.) sử dụng tên đó để tạo URL đầy đủ: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Lấy URL đó với curl và đường ống html thông qua ba lệnh sed. Đầu tiên chỉ ghi lại danh sách tệp (những gì nằm giữa <pre> và </pre> thẻ); thứ hai loại bỏ bất kỳ thẻ html nào; thứ ba loại bỏ bất kỳ dòng trống nào.

Lưu ý: Nó không tìm kiếm các PPA, các nguồn thay thế của các nguồn apt và chỉ truy vấn các gói chính thức có sẵn cho việc phát hành debian / ubuntu mà bạn đang chạy.


7
2018-04-21 21:44



Tôi có cần ruby ​​để chạy nó không? - Anwar
@Anwar, ban đầu tôi đã sử dụng Ruby vì tôi đã lười biếng và đa cấp regexes hút trong sed / awk / grep. Nhưng tôi đã viết lại nó để sử dụng hai lệnh sed, không cần Ruby. - notpeter
Tốt đẹp! Đây là câu trả lời tôi đang tìm kiếm - Anwar


Thử:

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

2
2018-06-27 15:28





Có vẻ như không thể thực hiện trước khi cài đặt trước hoặc trích xuất danh sách từ .deb tập tin.

Hãy thử lệnh sau:

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

Thay đổi language-pack-en với tên gói của bạn.

Về cơ bản nó đọc .deb tệp được trích xuất qua curl và chạy dpkg --contents FILE trên đó.


Bạn cũng có thể kiểm tra nội dung mà không cần tải xuống tệp gói.

Vì vậy, nếu bạn biết URL của .deb tệp, lệnh shell sau sẽ liệt kê tất cả các tệp gói:

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

Thông số curl: -s - im lặng, -L - theo liên kết đã di chuyển.

Nếu bạn không biết URL, hãy tìm nạp theo: apt --print-uris, ví dụ.

apt --print-uris install avis | grep avis

1
2017-12-27 13:33





Đối với tất cả những người vẫn có thể googling vấn đề này vào tháng Giêng năm 2017, bạn có thể có một số công cụ mát mẻ với các phiên bản gần đây của apt và dpkg trong Debian 8.5 mà không cần tải về bất cứ điều gì.

Liệt kê nội dung của tệp tin Deb không cần tải xuống: 

Đầu tiên xác định vị trí url đầy đủ của tệp deb:

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

PS: --print-uris chuyển đổi in url của gói deb nhưng deb không được tải xuống.

Sau đó hiển thị nội dung của gói deb mà không cần tải xuống:

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 ......................

PS: Cùng một kết quả có thể đạt được với

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

Trích xuất một tập tin từ gói deb trên, mà không cần tải xuống.
Ví dụ chúng ta muốn đọc trang man của gói yade mà không cần cài đặt gói này và thậm chí không cần tải xuống gói deb.

Tên tệp của trang con người bên trong gói deb theo lời khuyên của dpkg -c Là ./usr/share/man/man1/yade.1.gz

Để đọc trang người đàn ông khi đang bay:

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

trang người đàn ông được hiển thị chính xác bằng cách sử dụng ứng dụng của con người.

PS: Trên ống không hoạt động với lệnh 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
2018-01-06 03:14