คำสั่งนี้สามารถแสดงรายการเนื้อหาของแพ็คเกจที่ติดตั้งเท่านั้น
dpkg -L PACKAGENAME
แต่จะแสดงรายการเนื้อหาของแพ็คเกจที่ไม่ได้ติดตั้งเพื่อดูตัวอย่าง / ตรวจสอบแพ็คเกจได้อย่างไร
คำสั่งนี้สามารถแสดงรายการเนื้อหาของแพ็คเกจที่ติดตั้งเท่านั้น
dpkg -L PACKAGENAME
แต่จะแสดงรายการเนื้อหาของแพ็คเกจที่ไม่ได้ติดตั้งเพื่อดูตัวอย่าง / ตรวจสอบแพ็คเกจได้อย่างไร
คำตอบ:
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-list เนื้อหาสำหรับแพคเกจในคลังเก็บ Apt ของคุณกำหนดค่าแล้ว ไม่เกี่ยวข้องว่ามีแพ็คเกจใดเป็นพิเศษหรือไม่ได้ติดตั้ง
sudo apt-file update
) และแสดงเฉพาะเนื้อหาสำหรับแพ็คเกจในคลังข้อมูล Apt ที่กำหนดค่าไว้แล้วของคุณ
dpkg -c
ดี!
.deb
ไฟล์ที่คุณดาวน์โหลดแยกต่างหาก คำถามเดิมไม่ชัดเจนแม้ว่า
ใช้--contents
แทน-L
:
dpkg --contents PACKAGENAME
เมื่อใช้ในลักษณะนี้dpkg
ทำหน้าที่เป็นส่วนหน้าของdpkg-deb
ดังนั้นใช้man dpkg-deb
เพื่อดูตัวเลือกทั้งหมด
คุณยังสามารถใช้เบราว์เซอร์เก็บถาวรเพื่อดูเนื้อหาแพ็คเกจ
dpkg --contents google-chrome-stable_current_amd64.deb
และจะแสดงรายการไฟล์ทั้งหมดที่จะติดตั้ง (ส่วนใหญ่เป็น/opt/google/chrome
) ซึ่งไม่มีไฟล์ใดติดตั้งอยู่ในระบบของฉันขณะที่ฉันพิมพ์สิ่งนี้ (ฉันใช้ Xubuntu 11.10 ถ้าเป็นเช่นนั้น)
dpkg --contents
จะให้คุณดูแพ็คเกจที่ถอนการติดตั้ง หาก. deb ไม่ได้อยู่ในระบบของคุณให้ทำ
apt-get --download-only install pkgname
แพ็คเกจจะถูกดาวน์โหลดไปยัง/var/cache/apt/archives
แต่ไม่ได้ติดตั้ง
วิธีที่ดีที่สุดคือเรียกดูที่เก็บของแพ็คเกจโดยตรง:
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
ติดตั้งแล้ว)
ฉันใช้ความคิด http ของ @ baldozและทำให้เป็นมาตรฐานสำหรับ Ubuntu และ Debian เพิ่มเล็กน้อยsed
และห่อไว้ในฟังก์ชันทุบตีหนึ่งซับ:
function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu https://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 https://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';
}
อธิบาย:
https://packages.ubuntu.com
หรือhttps://packages.debian.org
https://packages.ubuntu.com/trusty/all/curl/filelist
<pre>
และ</pre>
แท็ก); แถบที่สองจะแยกแท็ก html ออก ที่สามลบบรรทัดว่างใด ๆหมายเหตุ: มันไม่ได้ค้นหา PPA, repos apt แหล่งที่มาอื่นและสืบค้นเฉพาะแพ็คเกจอย่างเป็นทางการที่มีให้สำหรับการเปิดตัวเดเบียน / อูบุนตูที่คุณใช้งานอยู่
สำหรับทุกคนที่ยังคง Google ปัญหานี้ในเดือนมกราคม 2017 คุณสามารถมีสิ่งที่ยอดเยี่ยมกับ apt และ dpkg รุ่นล่าสุดใน Debian 8.5 โดยไม่ต้องดาวน์โหลดอะไร
รายการเนื้อหาของไฟล์ Deb โดยไม่ต้องดาวน์โหลด:
ก่อนอื่นให้ค้นหา URL แบบเต็มของไฟล์ 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: - สวิตช์พิมพ์ uris พิมพ์ URL ของแพคเกจ deb แต่ไม่ได้ดาวน์โหลด 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 ......................
PS: ผลลัพธ์เดียวกันสามารถทำได้ด้วย
root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")
แตกไฟล์จากแพ็คเกจ deb ข้างต้นโดยไม่ต้องดาวน์โหลด
ตัวอย่างเช่นเราต้องการอ่าน man page ของแพ็คเกจ yade โดยไม่ต้องติดตั้งแพ็คเกจนี้และไม่ต้องดาวน์โหลดแพ็คเกจ deb
ชื่อไฟล์ของ man page ภายในแพ็กเกจ deb ตามคำแนะนำdpkg -c
คือ./usr/share/man/man1/yade.1.gz
หากต้องการอ่าน man page แบบทันที:
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 page แสดงขึ้นอย่างถูกต้องโดยใช้ man application
PS: ท่อด้านบนไม่ทำงานกับคำสั่ง 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
ลอง:
apt-get download packages-name
dpkg --contents *.deb
ดูเหมือนว่าเป็นไปไม่ได้ก่อนที่จะติดตั้งก่อนหรือแยกรายชื่อจาก.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")
Curl params: -s
- silent, -L
- ติดตามลิงก์ที่ถูกย้าย
หากคุณไม่ทราบ URL ให้ดึงข้อมูลโดย: apt --print-uris
, เช่น
apt --print-uris install avis | grep avis