मुझे वह पैकेज कैसे मिलेगा जो फ़ाइल प्रदान करता है?


466

सरल पर्याप्त प्रश्न: क्या कुछ शेल कमांड (या जीयूआई विधि) है जिसका उपयोग मैं अपने सिस्टम पर एक फ़ाइल के लिए किया जा सकता है, मुझे बताता है कि इसे किस पैकेज में रखा गया है? मान लिया गया कि फ़ाइल वास्तव में एक पैकेज से आई है, जो है।

बोनस प्रश्न: क्या होगा यदि यह एक फाइल है जो मेरे सिस्टम पर स्थापित नहीं है? क्या ऐसा है, कहते हैं, एक वेबसाइट जो मुझे एक फ़ाइल देखने और देखने देगी कि क्या पैकेज, यदि कोई है, तो इसे प्रदान करें?


6
मैं हमेशा इस अपने आप को आश्चर्य किया है - मैं YUM साथ पता है कि तुम यम whatprovides <filepath> / <फ़ाइल नाम> क्या कर सकते हैं, लेकिन मैं वास्तव में कभी नहीं संकुल वेबसाइट के अलावा अन्य योग्यता में है कि के लिए एक विकल्प मिल गया है
मार्को Ceppi


यहां कोई भी उत्तर वास्तव में Provides:तंत्र को कवर नहीं करता है। कुछ और विवरणों में, किसी भी पैकेज में बाइनरी के रूप में एक कमांड जैसी mailxया sendmailशामिल नहीं है ; इसके बजाय, विभिन्न पैकेज अपने स्वयं के बायनेरी स्थापित करते हैं और फिर उनमें से कुछ को "कैनोनिकल" नाम से उपलब्ध कराते हैं । यह भी देखें askubuntu.com/questions/366135/.../etc/alternatives
tripleee

जवाबों:


438

आप यह dpkgपता लगाने के लिए कमांड का उपयोग कर सकते हैं कि कौन सा पैकेज एक फ़ाइल का मालिक है:

से man dpkg:

-S, - खोज फ़ाइल नाम-खोज-प्रतिमान ...
                  स्थापित पैकेज से फ़ाइल नाम के लिए खोजें।

उदाहरण:

$ dpkg -S /bin/ls
coreutils: /bin/ls

आप या तो पूर्ण पथ के साथ या केवल फ़ाइल नाम के साथ खोज कर सकते हैं।

यदि आप अपने कंप्यूटर पर अभी तक स्थापित नहीं की गई फ़ाइलों को खोजना चाहते हैं, तो आप उबंटू संकुल खोज का उपयोग कर सकते हैं


5
मैं अत्यधिक डायलोकेट का उपयोग करने की सलाह देता हूं, जो कि तेजी से देखने के लिए दैनिक रूप से अपडेट किया जाता है।
डैनियल टी चेन

20
संकेत: यदि आपको पूरा रास्ता नहीं पता है, लेकिन सिर्फ कमांड का नाम है, तो whichउसे खोजने के लिए प्रोग्राम का उपयोग करें:dpkg -S `which firefox`
Lekensteyn

1
@DanielTChen, लेकिन dlocateहो सकता है कि काम न करें, अगर dlocate का डेटाबेस पुराना हो गया हो। आपको sudo update-dlocatedbइसे अपडेट करने के लिए कॉल करना होगा।
जारो

2
यदि dpkgसटीक रास्ता कुछ भी नहीं लौटाता है (उदाहरण के लिए dpkg /usr/bin/java), तो बस निष्पादन योग्य का नाम (जैसे dpkg java) आज़माएँ ।
डैन डेस्केल्सस्कु

2
आप realpathसिमिलिंक को हल करने के लिए भी उपयोग कर सकते हैं , जैसे dpkg -S $(realpath $(which <command>)):।
लार्स Nyström

236

apt-fileआदेश कमांड लाइन से आपके लिए यह कार्य कर सकते हैं। स्रोत से पैकेज बनाते समय मैं इसका अक्सर उपयोग करता हूं। पैकेजों द्वारा प्रदान की गई फ़ाइलों के लिए जो आपके सिस्टम पर पहले से इंस्टॉल हैं, apt-cacheएक और विकल्प है।

स्थापित करने के लिए apt-file, करें:

sudo apt-get install apt-file

फिर, आपको इसे डेटाबेस में अपडेट करना होगा:

apt-file update

और, आखिरकार, फ़ाइल खोजें:

$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h

हालाँकि उबटन संकुल खोज वेबसाइट का उपयोग करने के लिए एक बहुत ही मैत्रीपूर्ण तरीका है । उनके पास एक विशिष्ट फ़ाइल नाम के लिए "पैकेज की सामग्री को खोजने" का विकल्प है।


21
मेरी राय में यह स्वीकृत उत्तर होना चाहिए। लेकिन उबंटू संकुल खोज के जवाब में , मैं तर्क दे सकता हूं कि यह शेल प्रोग्राम सरल है और यह याद रखने में आसान है (एक बार जब आप इसे जान लेते हैं)। यदि आप अपने मानक उपकरण के रूप में dpkg, apt-get, या aptitude का उपयोग करते हैं, तो इंटरनेट पर सर्फ करने के लिए Chrome को फायर करने के बारे में कुछ भी अनुकूल नहीं है!
user2097818

3
@ user2097818 इसका कारण यह है कि स्वीकृत उत्तर यह नहीं है कि मेरा प्राथमिक प्रश्न सिस्टम और संकुल पर फाइलों के लिए प्रतिबंधित है जो संस्थापित हैं। apt-fileअक्सर झूठे पॉज़िटिव पाए जाते हैं, अर्थात ऐसे पैकेज जो स्थापित नहीं हैं। बेशक यह जवाब "बोनस प्रश्न" के लिए बहुत अच्छा है।
डेविड जेड

3
दुनिया के Redhat पक्ष से उन लोगों के लिए - apt-file search <>के लिए निकटतम एनालॉग है dnf/yum whatprovides <>
ffledgling

मैं एलियास apt-file findके रूप में apt-findलंबे समय पहले और यह वास्तव में आसान है! Btw, नवीनतम संस्करणों के लिए रूट की आवश्यकता होती है apt-file update
वैल

43

वहाँ भी स्थापित नहीं है कि संकुल में फ़ाइलों को देखने के लिए उपयुक्त फ़ाइल है। उदाहरण के लिए:

apt-file list packagename

17

आप उबंटू संकुल वेबसाइट पर विभिन्न उबंटू रिलीज में शामिल पैकेजों की सामग्री खोज सकते हैं । " पैकेज की सामग्री खोजें " शीर्षक के नीचे देखें।

उदाहरण के लिए, यहां libnss3.so के लिए खोज परिणाम स्पष्ट हैं (10.04):

http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&arch=any


यह हाल ही में एक त्रुटि देता है।
पावेल वेसेलोव

13

आपका मतलब है, कौन सा पैकेज और कौन सा एप्लिकेशन नहीं। आवेदन अपने पैकेज प्रबंधक है, उदाहरण के लिए Software Center

का उपयोग कर dpkg:

dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs

उदाहरण

% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

का उपयोग कर apt-file:

apt-file search /usr/lib/tracker/tracker-store

या यह भी संभव है:

apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$

उदाहरण

% apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

या यहां ऑनलाइन , अनुभाग में Search the contents of packages

यहां छवि विवरण दर्ज करें

उदाहरण

यहां छवि विवरण दर्ज करें


आपका मतलब है, कौन सा पैकेज और कौन सा एप्लिकेशन नहीं। एप्लिकेशन आपके पैकेज मैनेजर है, जैसे सॉफ्टवेयर सेंटर। ठीक है। धन्यवाद! :)
रेयेकेव

सारी मदद के लिए धन्यवाद! इन सुझावों में से किसी ने भी मुझे यह पता लगाने में मदद नहीं की कि किस पैकेज ने इसे इन अनुप्रयोगों को स्थापित किया सभी खोजें बस "ट्रैकर" पर वापस जाती हैं। मुझे संदेह था कि यह हालांकि चंदवा था। उस मील लंबी EULA ने मुझे मेरे पुराने Microsoft Windows डेज़ की याद दिला दी, जिसके साथ, मुझे खुशी है कि मैं अब शामिल नहीं हूं। मैंने देखा कि ट्रैकर को कल स्थापित किया गया था, जड़ के रूप में, मुझे इससे छुटकारा मिल गया, साथ ही एन्थोट्स के कैनोपी और, सभी समस्याओं का समाधान किया जाता है। मैं वास्तव में आपकी सभी मदद के लिए धन्यवाद देता हूं। इस तरह का समर्थन करना बहुत बड़ी बात है। एक बार फिर धन्यवाद! केविन
रेयेव

4

यह अलेक्सा रोशे के उत्कृष्ट उत्तर के लिए एक विस्तार है । मैंने उस उत्तर को संपादित करने की कोशिश की, लेकिन यह अस्वीकार हो गया (हालांकि एलेक्सेक्स द्वारा नहीं)


मैं नीचे ट्रैक करने की कोशिश कर रहा था जो whichमेरे सिस्टम पर स्थापित है। थोड़ा काम करने के बाद मैंने बनाया/usr/local/bin/apt-whatprovides

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY="$(realpath $(which $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

यद्यपि आपके द्वारा स्थापित अधिकांश THINGs के लिए आप इसका उपयोग कर सकते हैं:

apt-file search $(realpath $(which THING)) | grep 'THING$'

स्थापित न होने वाले THING के लिए, आप उपयोग कर सकते हैं:

apt-file search THING | grep '/THING$'

apt-whatprovidesस्क्रिप्ट फ़ाइलें कि कर रहे हैं और अपने सिस्टम पर नहीं कर रहे हैं के लिए काम करता है। उदाहरण के लिए, मेरे सिस्टम में कमी थी, digलेकिन pingइसका परिणाम यह था :

pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

pi@raspberrypi:~ $ apt-whatprovides dig
Searching for dig
dnsutils: /usr/bin/dig
epic4: /usr/share/epic4/script/dig
epic4-help: /usr/share/epic4/help/8_Scripts/dig
knot-dnsutils: /usr/bin/dig

ध्यान दें कि (स्थापित) के Searching forलिए एक पूर्ण पथ है pingऔर digस्थापित नहीं करने के लिए सिर्फ बाइनरी नाम है। इससे मुझे यह पता लगाने में मदद मिली कि मुझे https://packages.ubuntu.com/#search_contentsdnsutils पर जाने की आवश्यकता के बिना इंस्टॉल करने की आवश्यकता है


यह इतना अच्छा जवाब है कि मुझे मेरा डिलीट कर देना चाहिए!
एलेक्स रोश

3

मैं नीचे ट्रैक करने की कोशिश कर रहा था जो whichमेरे सिस्टम पर स्थापित है। थोड़े से काम के बाद मैंने apt-whatprovides बनाया

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY=$(realpath $(which $@))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}

हालांकि ज्यादातर चीजों के लिए आप सिर्फ इस्तेमाल कर सकते हैं

apt-file search $(realpath $(which THING))|grep 'THING$'

1
एलेक्स, मुझे यह जवाब पसंद है। मुझे आशा है कि आप मेरे संपादन को बुरा नहीं मानेंगे। मैंने इसे उन फाइलों के लिए भी काम किया है जो सिस्टम पर स्थापित नहीं हैं। मैंने gist.github.com/RichardBronosky/… पर एक बैकअप बनाया है और यदि आप इसे वापस करते हैं / अस्वीकार करते हैं तो मैं अपना उत्तर दूंगा।
ब्रूनो ब्रोंस्की

अपडेट: पास्ता को इस जवाब की नकल करना और उसके लिए सूक्ष्म बदलाव करना पतला लगता है, लेकिन मेरा संपादन अस्वीकृत हो गया। मुझे आशा है कि जैसे मैं अपने जवाब की अखंडता को बनाए रखा यदि आपको लगता है खान में
ब्रूनो ब्रोंस्की

बेझिझक संपादित करें या हैक करने के लिए; कुछ भी जो आपके लिए बेहतर बनाता है, (इसीलिए मैंने MIT लाइसेंस जोड़ा है! मुझे क्रेडिट की भी आवश्यकता नहीं है।)
एलेक्सएक्स रोच

2

ऐसा करने का एक कारण यह हो सकता है कि यदि आप ऐसे सॉफ़्टवेयर का संकलन कर रहे हैं जो पहले से ही एक ubuntu पैकेज है, तो आप चला सकते हैं apt-get build-dep $PACKAGENAME। वह सभी संकुल स्थापित करेगा जिन्हें आपको संकलित करने की आवश्यकता है $PACKAGENAME

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