सवाल इंस्टॉल किए बिना डेबियन पैकेज की फ़ाइलों को कैसे सूचीबद्ध करें


यह आदेश केवल स्थापित संकुल की सामग्री सूचीबद्ध कर सकता है,

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

जैसा कि पहली टिप्पणी में बताया गया है, एपीटी-फाइल आपके पहले से कॉन्फ़िगर किए गए एप रिपॉजिटरीज़ में संकुल के लिए सामग्री सूचीबद्ध करती है। यह अप्रासंगिक है कि कोई विशेष पैकेज स्थापित है या नहीं।


310
2017-12-14 15:42



एपीटी-फाइल को अद्यतन करने की भी आवश्यकता है (sudo apt-file update), और केवल आपके पहले से कॉन्फ़िगर किए गए Apt रिपॉजिटरीज़ में संकुल के लिए सामग्री सूचीबद्ध करता है। - quack quixote
@quackquixote: उबंटू 12.04 में यह स्वचालित है - confiq
dpkg -c अच्छा! - d-_-b
Apt-file उत्तर मानता है कि आपका पैकेज एक के बजाय एक कॉन्फ़िगर किए गए भंडार से आ रहा है .deb फ़ाइल जिसे आपने अलग से डाउनलोड किया है। हालांकि मूल सवाल संदिग्ध है। - Zoredache
@confiq, मेरे परीक्षण से नहीं। मैं 12.04.4 चला रहा हूं और यह अभी भी कहता है "ई: कैश खाली है। आपको पहले 'एपीटी-फाइल अपडेट' चलाने की जरूरत है।" - 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 के ​​बजाय, इसे पैकेज-डेब-फ़ाइल दें)। - quack quixote
यह जवाब गलत है। आपको पहले पैकेज स्थापित करना होगा। यदि आपने इसे इंस्टॉल नहीं किया है, तो आपके पास .deb फ़ाइल नहीं है। - Neil
यह आदेश मेरे लिए काम करता है। उदाहरण के लिए, मैंने Google से google-chrome-stable_current_amd64.deb डाउनलोड किया। फिर आदेश जारी किया: dpkg --contents google-chrome-stable_current_amd64.deb और यह उन सभी फ़ाइलों को सूचीबद्ध करता है जो इसे इंस्टॉल करेंगे (ज्यादातर /opt/google/chrome), जिनमें से कोई भी वर्तमान में मेरे सिस्टम पर स्थापित नहीं है जैसा कि मैं इसे टाइप करता हूं। (यदि यह मायने रखता है तो मैं जुबंटू 11.10 चला रहा हूं।) - quux00
@Neil, जवाब गलत नहीं है। सिर्फ इसलिए कि आपके पास एक डेब फ़ाइल है, इसका मतलब यह नहीं है कि यह इंस्टॉल है। एपीटी-फाइल को पूरे बिल्ड-आवश्यक पैकेज की आवश्यकता है। 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


मैंने लिया @ बाल्डोज़ का http विचार और उबंटू और डेबियन के लिए इसे सामान्यीकृत किया, थोड़ा सा जोड़ा और इसे एक बैश फ़ंक्शन में एक-लाइनर में लपेट लिया:

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 लौटाता है "उबंटू" या "डेबियन" आधार यूआरएल के साथ प्रतिस्थापित करता है http://packages.ubuntu.com या https://packages.debian.org
  2. lsb_Release -sc कोडनाम को लौटाता है (उदा। "भरोसेमंद", "sid", आदि) पूर्ण यूआरएल बनाने के लिए उपयोग करें: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. उस यूआरएल को कर्ल के साथ लाएं और एचटीएमएल को तीन sed कमांड के माध्यम से पाइप करें। पहले केवल फ़ाइल सूची को कैप्चर करता है (बीच क्या है <pre> तथा </pre> टैग); दूसरा एचटीएमएल टैग बाहर स्ट्रिप्स; तीसरा कोई रिक्त रेखा हटा देता है।

नोट: यह पीपीए, वैकल्पिक एपीटी स्रोत रिपोज़ की खोज नहीं करता है और केवल डेबियन / उबंटू के रिलीज के लिए उपलब्ध आधिकारिक पैकेज पूछताछ करता है।


7
2018-04-21 21:44



क्या मुझे इसे चलाने के लिए रूबी की ज़रूरत है? - Anwar
@ अनवर, मैंने शुरुआत में रुबी का इस्तेमाल किया क्योंकि मैं आलसी और मल्टीलाइन रेगेक्स को 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 इस पर।


आप पैकेज फ़ाइल को डाउनलोड किए बिना सामग्री भी देख सकते हैं।

तो अगर आप का यूआरएल पता है .deb फ़ाइल, निम्न खोल कमांड सभी पैकेज फ़ाइलों को सूचीबद्ध करेगा:

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

कर्ल पैराम्स: -s - चुप, -L - चालित लिंक का पालन करें।

यदि आप यूआरएल नहीं जानते हैं, तो इन्हें प्राप्त करें: apt --print-uris, उदा।

apt --print-uris install avis | grep avis

1
2017-12-27 13:33





उन सभी लोगों के लिए जो जनवरी 2017 में इस मुद्दे को अभी भी गुगल कर सकते हैं, आप कुछ भी डाउनलोड किए बिना डेबियन 8.5 में एपीटी और डीपीकेजी के हाल के संस्करणों के साथ कुछ अच्छी चीजें प्राप्त कर सकते हैं।

डाउनलोड किए बिना डेब फ़ाइल की सूची सामग्री: 

सबसे पहले डेब फ़ाइल के पूर्ण यूआरएल का पता लगाएं:

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

पीएस: --प्रिंट-यूरिस स्विच डेब पैकेज के यूआरएल को प्रिंट करता है लेकिन डेब डाउनलोड नहीं होता है।

फिर इसे डाउनलोड किए बिना डेब पैकेज की सामग्री प्रदर्शित करें:

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")

उपरोक्त डीब पैकेज से डाउनलोड किए बिना फ़ाइल निकालें।
उदाहरण के लिए हम इस पैकेज को स्थापित किए बिना और डेब पैकेज को डाउनलोड किए बिना पैकेज यडे के मैन पेज को पढ़ना चाहते हैं।

डेब पैकेज के अंदर मैन पेज का फ़ाइल नाम जैसा कि सलाह दी गई है 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

मैन पेज का उपयोग कर मैन पेज सही ढंग से प्रदर्शित होता है।

पीएस: ऊपर पाइप आर कमांड के साथ काम नहीं करता है।

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