يمكن لهذا الأمر سرد محتويات الحزم المثبتة فقط ،
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 محتويات الحزم في مستودعات Apt التي تم تكوينها بالفعل. لا يهم ما إذا كانت هناك حزمة معينة مثبتة أم لا.
استخدم --contents
بدلاً من -L
:
dpkg --contents PACKAGENAME
عند استخدامه بهذه الطريقة ، يعمل dpkg
كواجهة أمامية لـ dpkg-deb
، لذلك استخدم man dpkg-deb
لرؤية جميع الخيارات.
يمكنك أيضًا استخدام مستعرض الأرشيف لعرض محتويات الحزمة.
ستتيح لك 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
أخذت @ فكرة baldoz http وقمت بتعميمها على Ubuntu و Debian ، أضفت sed
قليلاً ولفتها في دالة bash ذات خط واحد:
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';
}
شرح:
http://packages.ubuntu.com
أو https://packages.debian.org
http://packages.ubuntu.com/trusty/all/curl/filelist
<pre>
و </pre>
) ؛ الشرائط الثانية من أي علامات HTML. الثالث يزيل أي خطوط فارغة.ملاحظة: إنه لا يبحث في PPAs ، repos sources apt البديل ويستعلم فقط عن الحزم الرسمية المتاحة لإصدار debian/ubuntu الذي تقوم بتشغيله.
محاولة:
apt-get download packages-name
dpkg --contents *.deb
بالنسبة لأولئك الأشخاص الذين قد يستمرون في التغلب على هذه المشكلة في يناير 2017 ، يمكنك الحصول على بعض الأشياء الرائعة مع الإصدارات الحديثة من apt و dpkg في Debian 8.5 دون تنزيل أي شيء.
قائمة محتويات ملف Deb بدون تنزيل:
أولاً ، حدد موقع url الكامل لملف deb:
[email protected]: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 switch يطبع عنوان url الخاص بحزمة deb لكن لم يتم تنزيل deb.
ثم قم بعرض محتويات حزمة deb دون تنزيلها:
[email protected]: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 ......................
ملاحظة: يمكن تحقيق نفس النتيجة مع
[email protected]:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_AMD64.deb")
استخراج ملف من حزمة deb أعلاه ، دون تنزيل.
على سبيل المثال ، نريد قراءة صفحة man من حزمة yade دون تثبيت هذه الحزمة ودون تنزيل حزمة deb.
اسم ملف صفحة man داخل حزمة deb كما نصحت dpkg -c
هو ./usr/share/man/man1/yade.1.gz
لقراءة صفحة الرجل على الطاير:
[email protected]: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.
PS: أعلاه أنابيب لا يعمل مع الأمر ع.
[email protected]:apt --version --> apt 1.4~beta2 (AMD64)
[email protected]:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (AMD64).
[email protected]:man --version --> man 2.7.6.1
[email protected]:tar --version --> tar (GNU tar) 1.29
يبدو أنه غير ممكن قبل تثبيته أولاً أو استخراج القائمة من ملف .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
، فسيقوم الأمر Shell التالي بسرد جميع ملفات الحزمة:
dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")
Curl params: -s
- صامت ، -L
- اتبع الروابط المنقولة.
إذا كنت لا تعرف عنوان URL ، فاحضره بواسطة: apt --print-uris
، على سبيل المثال.
apt --print-uris install avis | grep avis