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


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

dpkg -L PACKAGENAME

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


259
2017-12-14 06:49


الأصل


شبيه على أوبونتو: askubuntu.com/questions/32507/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


الأجوبة:


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


310
2017-12-14 15:42



apt-file يحتاج أيضا إلى تحديث (sudo apt-file update) ، ويسرد فقط محتويات الحزم في مستودعات Apt التي تم تكوينها بالفعل. - quack quixote
quackquixote: في برنامج Ubuntu 12.04 ، يتم تشغيله تلقائيًا - confiq
dpkg -c لطيف! - d-_-b
يفترض إجابة apt-file أن الحزمة الخاصة بك تأتي من مستودع تخزين تمت تهيئته بدلاً من .deb الملف الذي قمت بتنزيله بشكل منفصل. السؤال الأصلي غامض رغم ذلك. - Zoredache
confiq ، وليس عن طريق الاختبار الخاص بي. أنا أقوم بتشغيل 12.04.4 ولا يزال يقول "E: ذاكرة التخزين المؤقت فارغة. تحتاج إلى تشغيل" apt-file update "أولاً." - Matthew Flaschen


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

dpkg --contents PACKAGENAME

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

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


54
2017-12-14 08:14



هذا لا يعمل إلا إذا قمت بتثبيته أولاً ومن ثم إلغاء تثبيته. - Xiè Jìléi
يجب أن تعمل بشكل جيد إذا قمت بمنحها ملف .deb كوسيطة (بدلاً من PACKAGENAME ، أعطها PACKAGE-DEB-FILE). - quack quixote
هذه الإجابة خاطئة. يجب عليك تثبيت الحزمة أولاً. إذا لم يتم تثبيته ، فلن يكون لديك ملف .deb. - Neil
يعمل هذا الأمر بالنسبة لي. على سبيل المثال ، قمت بتنزيل google-chrome-stable_current_amd64.deb من Google. ثم أصدر الأمر: dpkg --contents google-chrome-stable_current_amd64.deb وسجلت جميع الملفات التي سيتم تثبيتها (في الغالب إلى /opt/google/chrome) ، لا يتم تثبيت أي منها حاليًا على نظامي أثناء كتابة هذا. (أنا أركض Xubuntu 11.10 إذا كان هذا يهم.) - quux00
@ نيل ، الجواب ليس خطأ. فقط لأنك لديك ملف deb ، لا يعني أنه مثبت. يحتاج apt-file إلى حزمة البنية الأساسية الكاملة. O.O - d-_-b


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

apt-get --download-only install pkgname

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


18
2017-12-14 14:34



هل يمكنني فقط سرد المحتويات دون تنزيلها؟ إذا كنت على اتصال بطيء جدًا ، وإذا كانت الحزمة كبيرة جدًا بحيث لا يمكن تنزيلها. إذا كان ملف .deb يحتوي على رأس ملف حيث تنتقل قائمة المحتويات ، أعتقد أن تنزيل الحزمة بأكملها ربما ليس ضروريًا. هل هذا ممكن؟ - Xiè Jìléi


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

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

مثال:

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


11
2018-06-01 13:57



ولتجنب مغادرة المحطة ، يمكنك استخدام lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (شريطة أن يكون لديك lynx المثبتة). - Ruslan


أخذت @ فكرة المتصل baldoz ل وتعميمه على Ubuntu و Debian ، أضاف القليل من الحروف الإغريقية ولفه في دالة bash function-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. الثالث يزيل أي خطوط فارغة.

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


7
2018-04-21 21:44



هل أحتاج إلى روبي لتشغيله؟ - Anwar
Anwar ، كنت في البداية استخدم روبي لأنني كنت كسول و regexes متعددة تمتص في sed / awk / grep. ولكني أعيد كتابتها لاستخدام اثنين من أوامر sed ، لا روبي المطلوبة. - notpeter
لطيف! هذا هو الجواب الذي كنت أبحث عنه - Anwar


محاولة:

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

2
2018-06-27 15:28





يبدو أنه غير ممكن قبل تثبيته أولاً أو استخراج القائمة منه .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
2017-12-27 13:33





بالنسبة إلى جميع هؤلاء الأشخاص الذين قد لا يزالون يذهبون لهذه المسألة في كانون الثاني 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: - print-uris switch يطبع رابط حزمة 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 ......................

ملاحظة: نفس النتيجة يمكن تحقيقها مع

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

استخراج ملف من حزمة deb المذكورة أعلاه ، دون تحميل.
على سبيل المثال ، نود قراءة صفحة man of package yade بدون تثبيت هذه الحزمة وبدون تنزيل حزمة deb.

اسم الملف من صفحة رجل داخل الحزمة كما نصحت من قبل dpkg -c هو ./usr/share/man/man1/yade.1.gz

لقراءة صفحة الرجل على الطاير:

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

يتم عرض صفحة الرجل بشكل صحيح باستخدام تطبيق الرجل.

ملاحظة: لا يعمل فوق الأنابيب مع الأمر 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