سؤال كيف يمكنني العثور على الحزمة التي توفر ملفًا؟


سؤال بسيط بما فيه الكفاية: هل هناك بعض أوامر shell (أو طريقة GUI) يمكنني استخدام ذلك ، بالنظر إلى المسار إلى ملف على نظامي ، أخبرني ما هي الحزمة التي وضعتها هناك؟ بافتراض أن الملف قد جاء بالفعل من حزمة ، وهذا هو.

سؤال إضافي: ماذا لو كان ملفًا غير مثبت على نظامي؟ هل هناك ، على سبيل المثال ، موقع ويب يسمح لي بالبحث عن ملف والاطلاع على الحزم ، إن وجدت ، التي يوفرها؟


382
2017-07-30 08:10


الأصل


لطالما تساءلت عن هذا الأمر بنفسي - أعرف مع YUM أنه يمكنك فعل yum whatprovides <filepath> / <filename> لكنني لم أجد أبداً بديلاً عن ذلك في Aptitude بخلاف موقع Packages - Marco Ceppi♦
نفس الشيء على SU: superuser.com/questions/10997/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
أي من الإجابات هنا تغطي في الواقع Provides: آلية. في بعض التفاصيل أكثر ، مثل أمر mailx أو sendmail لم يتم تضمينه كبرنامج ثنائي في أي صفقة؛ بدلاً من ذلك ، تعمل الحزم المتنوعة على تثبيت الثنائيات الخاصة بها ثم جعل بعضها متاحًا تحت اسم "قانوني" عبر /etc/alternatives. أنظر أيضا askubuntu.com/questions/366135/... - tripleee


الأجوبة:


يمكنك استخدام dpkg الأمر لمعرفة الحزمة المثبتة التي تملك ملفًا:

من عند man dpkg:

-S ، - البحث عن اسم ملف-نمط البحث ...
                  ابحث عن اسم ملف من الحزم المثبتة.

مثال:

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

يمكنك إما البحث مع مسار كامل أو فقط مع اسم الملف.

إذا كنت ترغب في البحث عن ملفات لم يتم تثبيتها بعد على جهاز الكمبيوتر الخاص بك ، يمكنك استخدام البحث عن حزم Ubuntu


360
2017-07-30 08:42



أنا أوصي باستخدام dlocate ، والتي يتم تحديثها يوميا لعمليات البحث أسرع. - Daniel T Chen
تلميح: إذا كنت لا تعرف المسار الكامل ، ولكن فقط اسم الأمر ، استخدم which للعثور على البرنامج: dpkg -S `which firefox` - Lekensteyn
هذا يعمل للمكتبات أيضًا ، وهو مفيد بشكل خاص إذا كان لديك برنامج ثنائي لا يعمل لأنك تستطيع فحصه باستخدام ldd واستخدام مسارات المكتبة الكاملة للعثور على الطرود المفقودة. - Alain O'Dea
DanielTChen ، ولكن dlocate قد لا تقوم بهذه المهمة ، إذا كانت قاعدة بيانات 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

ومع ذلك فإن الطريقة الأكثر ودا هو استخدام البحث عن حزم Ubuntu موقع الكتروني. لديهم خيار "البحث في محتويات الحزم" لاسم ملف معين.


187
2017-08-11 02:43



في رأيي يجب أن يكون هذا الجواب المقبول. ولكن ردا على البحث عن حزم Ubuntu، قد أزعم أن برنامج shell بسيط للغاية وسهل التذكر (بمجرد معرفته). إذا كنت تستخدم dpkg ، أو apt-get ، أو aptitude كأدوات قياسية ، فلا يوجد أي شيء ودود حول تشغيل Chrome لتصفح الإنترنت! - user2097818
@ user2097818 السبب في أن هذه ليست الإجابة المقبولة هي أن سؤالي الأساسي يقتصر على الملفات الموجودة على النظام والحزم التي تم تثبيتها. apt-file غالبًا ما تظهر إيجابيات خاطئة ، أي الحزم غير المثبتة. بالطبع هذه الإجابة رائعة على "سؤال المكافأة". - David Z
لأولئك من الجانب Redhat العالم - apt-file search <> هو أقرب نظير له dnf/yum whatprovides <>. - ffledgling


هناك أيضًا ملف apt للبحث عن الملفات في الحزم غير المثبتة. فمثلا:

apt-file list packagename

35
2017-07-30 08:49



بالضبط ما كنت أبحث عنه. شكر - NES


يمكنك البحث في محتويات الحزم المتضمنة في إصدارات Ubuntu المختلفة على حزم أوبونتو موقع الكتروني. انظر تحت العنوان "ابحث في محتويات الحزم".

على سبيل المثال ، فيما يلي نتائج البحث عن libnss3.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
شكرا لكم على كل المساعدة! ساعدني أي من هذه الاقتراحات في العثور على الحزمة التي تثبيت هذه التطبيقات / هذه رغم ذلك. جميع عمليات البحث تؤدي فقط إلى "تعقب". كنت أظن أنه كان Enighthts "الستارة رغم ذلك. ذكرتني تلك الميال الطويلة من EULA بذهني القديم في نظام مايكروسوفت ويندوز ، وأنا مسرور جدا لأنني لم أعد مشترك. رأيت أن Tracker قد تم تركيبه بالأمس لذا ، كجذر ، لقد تخلصت منه ، جنبا إلى جنب مع Enopyts '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



Alexx ، أنا أحب هذه الإجابة. أتمنى ألا تمانع في تعديلي. أنا جعلها تعمل أيضا للملفات التي لم يتم تثبيتها على النظام. لقد صنعت نسخة احتياطية gist.github.com/RichardBronosky/... وسيقوم بإنشاء إجابتي الخاصة إذا عدت / رفضتها. - Bruno Bronosky
تحديث: إنه يشعر غبي لنسخ المعكرونة هذه الإجابة وإجراء تغييرات طفيفة في ذلك ، ولكن تم رفض تعديلي. أرجو أن تشعر أنني حافظت على سلامة إجابتك في المنجم. - Bruno Bronosky
لا تتردد في التعديل أو الاختراق ؛ أي شيء يجعلها أفضل بالنسبة لك ، (لهذا السبب أضفت ترخيص معهد ماساتشوستس للتكنولوجيا! أنا لا أحتاج حتى إلى الائتمان). - Alexx Roche


هذا امتداد ل الجواب ممتاز Alexx روش. لقد حاولت إجراء تعديل على هذا الجواب ، ولكن حصلت على رفض (على الرغم من عدم Alexx)


كنت أحاول تعقب ما تم تثبيته 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