सवाल मैं उस पैकेज को कैसे ढूंढूं जो फ़ाइल प्रदान करता है?


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

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


382
2017-07-30 08:10


मूल


मैंने हमेशा यह सोच लिया है - मैं यम के साथ जानता हूं कि आप yum whatprovides <filepath> / <filename> कर सकते हैं लेकिन मुझे पैकेजेज वेबसाइट के अलावा अन्य योग्यता में वास्तव में कोई विकल्प नहीं मिला है - Marco Ceppi♦
एसयू पर वही: superuser.com/questions/10997/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
यहां कोई जवाब वास्तव में कवर नहीं करता है Provides: तंत्र। कुछ और विवरण में, जैसे कमांड mailx या sendmail एक बाइनरी के रूप में शामिल नहीं है कोई पैकेज; इसके बजाए, विभिन्न पैकेज अपनी बाइनरी स्थापित करते हैं और फिर उनमें से कुछ को "कैनोलिक" नाम के माध्यम से उपलब्ध कराते हैं /etc/alternatives। यह भी देखें askubuntu.com/questions/366135/... - tripleee


जवाब:


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

से man dpkg:

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

उदाहरण:

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

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

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


360
2017-07-30 08:42



मैं अत्यधिक dlocate का उपयोग करने की सलाह देते हैं, जो तेजी से लुकअप के लिए दैनिक अद्यतन किया जाता है। - Daniel T Chen
संकेत: यदि आप पूर्ण पथ नहीं जानते हैं, लेकिन केवल कमांड नाम का उपयोग करें which वह कार्यक्रम खोजने के लिए: dpkg -S `which firefox` - Lekensteyn
यह पुस्तकालयों के लिए भी काम करता है, जो विशेष रूप से आसान है यदि आपके पास एक बाइनरी है जो नहीं चलेगी क्योंकि आप इसे लापरवाही से देख सकते हैं और आपके द्वारा खोए गए पैकेजों को ढूंढने के लिए पूर्ण लाइब्रेरी पथ का उपयोग कर सकते हैं। - Alain O'Dea
@DanielTChen, लेकिन dlocate यदि डॉकोकेट का डेटाबेस पुराना हो, तो नौकरी न करें। आपको फोन करना है sudo update-dlocatedb इसे अद्यतन करने के लिए। - jarno
अगर dpkg सटीक पथ कुछ भी वापस नहीं करता है (उदा। dpkg /usr/bin/java), केवल निष्पादन योग्य नाम का प्रयास करें (उदा। dpkg java)। - Dan Dascalescu


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

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


187
2017-08-11 02:43



मेरी राय में यह स्वीकार्य उत्तर होना चाहिए। लेकिन जवाब में उबंटू पैकेज खोज, मैं तर्क दे सकता हूं कि यह सरल कार्यक्रम एक बेहद दोस्ताना और याद रखना आसान है (एक बार जब आप इसे जानते हों)। यदि आप अपने मानक उपकरण के रूप में डीपीकेजी, एपीटी-गेट, या योग्यता का उपयोग करते हैं, तो इंटरनेट सर्फ करने के लिए क्रोम को फायर करने के बारे में कुछ भी अनुकूल नहीं है! - user2097818
@ user2097818 कारण यह स्वीकार्य उत्तर नहीं है कि मेरा प्राथमिक प्रश्न सिस्टम और संकुल पर स्थापित फ़ाइलों पर प्रतिबंधित है। apt-file अक्सर झूठी सकारात्मक पाता है, यानी पैकेज जो स्थापित नहीं हैं। बेशक यह जवाब "बोनस प्रश्न" के लिए बहुत अच्छा है। - David Z
दुनिया के रेडहाट पक्ष के लोगों के लिए - apt-file search <> के निकटतम एनालॉग है dnf/yum whatprovides <>। - ffledgling


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

apt-file list packagename

35
2017-07-30 08:49



वास्तव में मैं क्या खोज रहा था। धन्यवाद - NES


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

उदाहरण के लिए, libidss3.so के लिए लुकिड (10.04) में खोज परिणाम यहां दिए गए हैं:

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


16
2017-08-11 02:42





आपका मतलब है, कौन सा पैकेज और कौन सा आवेदन नहीं। एप्लिकेशन आपका पैकेज मैनेजर है, उदा। 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

enter image description here

उदाहरण

enter image description here


10
2017-11-29 15:57



आपका मतलब है, कौन सा पैकेज और कौन सा आवेदन नहीं। एप्लिकेशन आपका पैकेज मैनेजर है, उदा। सॉफ्टवेयर केंद्र ठीक है। धन्यवाद! :) - ReyKev
सारी मदद के लिए धन्यवाद! इन सुझावों में से कोई भी मुझे यह जानने में मदद नहीं करता कि यह पैकेज किस / इन अनुप्रयोगों को स्थापित करता है। सभी खोजें सिर्फ "ट्रैकर" पर वापस आती हैं। मुझे संदेह था कि यह Enthoughts 'Canopy हालांकि था। उस मील लंबे ईयूएलए ने मुझे अपने पुराने माइक्रोसॉफ्ट विंडोज़ धुंध की याद दिला दी, जिसके साथ, मुझे बहुत खुशी है कि मैं अब शामिल नहीं हूं। मैंने देखा कि ट्रैकर कल कल स्थापित किया गया था, इसलिए रूट के रूप में, मैंने इसे छेड़छाड़ की, साथ ही एनवाईट्स के चंदवा के साथ, और सभी समस्याओं का हल हो गया। मैं आपकी सभी मदद के लिए वास्तव में धन्यवाद देता हूं। इस तरह के समर्थन के लिए यह एक बड़ी बात है। एक बार फिर धन्यवाद! केविन - ReyKev


मैं क्या स्थापित करने के लिए ट्रैक करने की कोशिश कर रहा था 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$'

2
2018-03-17 15:25



एलेक्स, मुझे यह जवाब पसंद है। मुझे उम्मीद है कि आप मेरे संपादन को ध्यान में रखेंगे। मैंने इसे उन फ़ाइलों के लिए भी काम किया जो सिस्टम पर स्थापित नहीं हैं। मैंने बैकअप बनाया gist.github.com/RichardBronosky/... और यदि आप इसे वापस / अस्वीकार करते हैं तो मेरा अपना उत्तर बना देगा। - Bruno Bronosky
अद्यतन: इस जवाब को पास्ता की प्रतिलिपि बनाने और इसमें सूक्ष्म परिवर्तन करने के लिए यह पतला लगता है, लेकिन मेरा संपादन अस्वीकार कर दिया गया। मुझे आशा है कि आपको लगता है कि मैंने आपके उत्तर की अखंडता को बनाए रखा है मुझमे। - Bruno Bronosky
संपादित या हैक करने के लिए स्वतंत्र महसूस करें; कुछ भी जो आपके लिए बेहतर बनाता है, (यही कारण है कि मैंने एमआईटी लाइसेंस जोड़ा! मुझे क्रेडिट की भी आवश्यकता नहीं है।) - Alexx Roche


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


मैं क्या स्थापित करने के लिए ट्रैक करने की कोशिश कर रहा था 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}"

हालांकि अधिकांश चीजों को स्थापित करने के लिए आप बस उपयोग कर सकते हैं:

apt-file search $(realpath $(which THING)) | grep '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 स्थापित नहीं है। इससे मुझे पता चला कि मुझे स्थापित करने की आवश्यकता है dnsutilsखोज करने की आवश्यकता के बिना https://packages.ubuntu.com/#search_contents


2
2017-07-18 05:45



यह इतना अच्छा जवाब है कि मुझे अपना हटाना चाहिए! - Alexx Roche


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


1
2017-08-11 19:31