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


283

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

dpkg -L PACKAGENAME

लेकिन पैकेज की पूर्वावलोकन / जांच करने के लिए गैर-स्थापित पैकेज की सामग्री को कैसे सूचीबद्ध किया जाए?


जवाबों:


339

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-file सूची सामग्री है। यह अप्रासंगिक है कि कोई विशेष पैकेज है या स्थापित नहीं है।


17
apt-file को भी अद्यतन किया जाना चाहिए ( sudo apt-file update), और आपके पहले से कॉन्फ़िगर किए गए Apt रिपॉजिटरी में संकुल के लिए सामग्री को सूचीबद्ध करता है।
क्वैक 22

1
@quackquixote: Ubuntu 12.04 में यह स्वचालित है
confiq

1
dpkg -cअच्छा!
d -_- b

2
Apt-file उत्तर मानता है कि आपका पैकेज .debआपके द्वारा अलग से डाउनलोड की गई फ़ाइल के बजाय कॉन्फ़िगर किए गए रिपॉजिटरी से आ रहा है । हालांकि मूल प्रश्न अस्पष्ट है।
Zoredache

5
@confiq, मेरे परीक्षण से नहीं। मैं 12.04.4 रन कर रहा हूं और यह अभी भी कहता है "ई: कैश खाली है। आपको पहले एप-फाइल अपडेट 'चलाने की जरूरत है।"
मैथ्यू फ्लैशेन

58

--contentsइसके बजाय का उपयोग करें -L:

dpkg --contents PACKAGENAME

जब इस तरीके का उपयोग किया जाता dpkgहै dpkg-deb, तो फ्रंट-एंड के रूप में कार्य करता है , इसलिए man dpkg-debसभी विकल्पों को देखने के लिए उपयोग करें।

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


2
यह तब तक काम नहीं करता जब तक मैंने इसे पहले स्थापित नहीं किया और फिर इसे अनइंस्टॉल कर दिया।
ग्यारहवें

3
यदि आप इसे एक .deb फ़ाइल को तर्क के रूप में देते हैं (PACKAGENAME के ​​बजाय, इसे PACKAGE-DEB-FILE दें) तो ठीक काम करना चाहिए।
क्वैक कोटेक्सोट

3
यह उत्तर गलत है। आपको पैकेज पहले स्थापित करना होगा। यदि आपके पास यह स्थापित नहीं है, तो आपके पास .deb फ़ाइल नहीं है।
नील

यह कमांड मेरे लिए काम करता है। उदाहरण के लिए, मैंने Google से google-chrome-static_current_amd64.deb डाउनलोड किया। फिर कमांड जारी की: dpkg --contents google-chrome-stable_current_amd64.debऔर यह उन सभी फाइलों को सूचीबद्ध करेगा जो इसे स्थापित करेगी (ज्यादातर /opt/google/chrome), इनमें से कोई भी वर्तमान में मेरे सिस्टम पर इस प्रकार स्थापित नहीं है। (मैं Xubuntu 11.10 चला रहा हूँ अगर यह मायने रखता है।)
quux00

10
@ नील, जवाब गलत नहीं है। सिर्फ इसलिए कि आपके पास एक डिबेट फ़ाइल है, इसका मतलब यह नहीं है कि यह स्थापित है। apt-file को संपूर्ण बिल्ड-आवश्यक पैकेज की आवश्यकता होती है। OO
d -_- b 10

21

dpkg --contentsआपको अनइंस्टॉल किए गए पैकेज को देखने देगा। यदि .deb अभी तक आपके सिस्टम पर नहीं है, तो करें

apt-get --download-only install pkgname

पैकेज डाउनलोड हो जाएगा, /var/cache/apt/archivesलेकिन इंस्टॉल नहीं किया जाएगा।


3
क्या मैं इसे डाउनलोड किए बिना सामग्री को सूचीबद्ध कर सकता हूं? अगर मैं बहुत धीमे कनेक्शन पर हूं, और अगर पैकेज डाउनलोड करने के लिए बहुत बड़ा है। अगर .deb फ़ाइल में फ़ाइल हेडर है जहाँ सामग्री सूची जाती है, तो मुझे लगता है कि पूरा पैकेज डाउनलोड करना आवश्यक नहीं है। क्या यह संभव है?
ग्यारहवें

13

सबसे अच्छा तरीका सीधे पैकेज रिपॉजिटरी ब्राउज़ करना होगा:

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स्थापित किया हो)।
रुस्लान

8

मैंने @ baldoz के http आइडिया को लिया और उबंटू और डेबियन के लिए इसे सामान्यीकृत किया, थोड़ा जोड़ा 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';
}

व्याख्या की:

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

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


क्या मुझे इसे चलाने के लिए माणिक की आवश्यकता है?
अनवर

1
@ अनवर, मैं शुरू में रूबी का इस्तेमाल करता था क्योंकि मैं आलसी था और मल्टीलाइन रेग्जेस सेड / सोक / गपशप में चूसता था। लेकिन मैंने इसे दो सेड कमांड का उपयोग करने के लिए फिर से लिखा है, कोई रूबी की आवश्यकता नहीं है।
नोटरी जूल

अच्छा! यह वह उत्तर है जिसकी मुझे तलाश थी
अनवर

4

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

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

सबसे पहले डिबेट फ़ाइल का पूर्ण यूआरएल खोजें:

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 स्विच डिब पैकेज के url को प्रिंट करता है लेकिन डिबेट डाउनलोड नहीं होता है।

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

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

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

पुनश्च: उपरोक्त पाइप 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" का उपयोग करता है और पुराने "apt-x" कमांड उपलब्ध नहीं है!
जॉन वाट

2

प्रयत्न, कोशिश:

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

1

लगता है कि इसे पहले स्थापित करना या .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फ़ाइल का URL जानते हैं , तो निम्नलिखित शेल कमांड सभी पैकेज फाइलों को सूचीबद्ध करेगा:

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

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

यदि आप URL नहीं जानते हैं, तो इसके द्वारा प्राप्त करें: apt --print-urisउदा

apt --print-uris install avis | grep avis
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.