it-swarm.asia

كيفية سرد ملفات حزمة دبيان دون تثبيت

يمكن لهذا الأمر سرد محتويات الحزم المثبتة فقط ،

dpkg -L PACKAGENAME

ولكن كيفية سرد محتويات حزمة غير مثبتة ، لمعاينة/فحص الحزمة؟

272
Xiè Jìléi

يسرد 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 التي تم تكوينها بالفعل. لا يهم ما إذا كانت هناك حزمة معينة مثبتة أم لا.

326
alfplayer

استخدم --contents بدلاً من -L:

dpkg --contents PACKAGENAME

عند استخدامه بهذه الطريقة ، يعمل dpkg كواجهة أمامية لـ dpkg-deb ، لذلك استخدم man dpkg-deb لرؤية جميع الخيارات.

يمكنك أيضًا استخدام مستعرض الأرشيف لعرض محتويات الحزمة.

56
quack quixote

ستتيح لك dpkg --contents إلقاء نظرة على الحزمة التي تم إلغاء تثبيتها. إذا لم يكن .deb موجودًا على نظامك ، فقم بذلك

apt-get --download-only install pkgname

سيتم تنزيل الحزمة إلى /var/cache/apt/archives لكن غير مثبت.

20
Rudedog

أفضل طريقة هي استعراض مستودع الحزمة مباشرة:

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

مثال:

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

12
baldoz

أخذت @ فكرة 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';
}

شرح:

  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 هذا باستخدام حليقة وأنبوب html من خلال ثلاثة أوامر sed. يلتقط أولاً قائمة الملفات فقط (ما بين علامات <pre> و </pre>) ؛ الشرائط الثانية من أي علامات HTML. الثالث يزيل أي خطوط فارغة.

ملاحظة: إنه لا يبحث في PPAs ، repos sources apt البديل ويستعلم فقط عن الحزم الرسمية المتاحة لإصدار debian/ubuntu الذي تقوم بتشغيله.

8
notpeter

محاولة:

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

بالنسبة لأولئك الأشخاص الذين قد يستمرون في التغلب على هذه المشكلة في يناير 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
2
George Vasiliou

يبدو أنه غير ممكن قبل تثبيته أولاً أو استخراج القائمة من ملف .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
1
kenorb