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


كيف أعرف ما هي حزمة دبيان التي جاء منها ملف؟


83
2017-08-23 10:23


الأصل




الأجوبة:


هناك العديد من الاستخدامات في دبيان والتي تؤدي هذه المهمة ؛ التحقق من هذه الصفحة للحصول على وصف. سأذكر اثنين منهم ، apt-file و dlocate.

apt-file البحث في ذاكرة التخزين المؤقت الداخلية ، مما يسمح لك بعدم تثبيت جميع الحزم التي تريد البحث عنها. أدناه ستجد دليل أكثر تفصيلا.

dlocate هو بديل سريع ل dpkg -L (الأمر الذي يسرد محتويات الحزمة) ، وعلى هذا النحو ، فإنه يبحث فقط الحزم المثبتة. يتم تنفيذ البحث من قبل dlocate -S file.name.

كما يمكنك البحث عن الحزم عبر الإنترنت باستخدام packages.debian.org الخادم ( ابحث في محتويات الحزم الجزء).


تركيب واستخدام apt-file

إنها فكرة جيدة للتحديث أولاً:

sudo apt-get update

انظر ماذا apt-file هو ل:

apt-cache show apt-file

تثبيته:

sudo apt-get install apt-file

قراءة البيانات من المستودعات (وهذا يعمل أيضا دون sudo ولكن يخلق ذاكرة التخزين المؤقت للمستخدم ثم ؛ مع sudo ذاكرة التخزين المؤقت على مستوى النظام):

sudo apt-file update

أداء البحث. في هذا المثال ، نريد معرفة الحزمة xrandr قابل للتنفيذ هو:

apt-file search xrandr

يسرد العديد من الحزم مع unxrandr، lxrandr.mo أو source_lxrandr.py. غير مفيد جدا في حالتنا. بحث أكثر ذكاءً:

apt-file search -x /xrandr$

($ يدل على نهاية السطر). مثال على الناتج:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

النتيجة الأولى لا تبدو قابلة للتنفيذ ، والنتيجة الثانية لا. يمكننا التحقيق أكثر من ذلك. يركض:

apt-cache show x11-xserver-utils

البنغو! هذه هي الحزمة.


39



الرابط الأول في هذه الإجابة (debianhelp.co.uk/findfile.htm) يبدو أن البائد الآن. - rogpeppe


user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

حيث Bash هو اسم الحزمة.


90



هذه الإجابة أفضل بكثير من تلك المقبولة! - Bex


بديل آخر:

$ dpkg -S /bin/bash
bash: /bin/bash

على Ubuntu على الأقل ، يبدو أن كلاهما موجود في dpkg الحزمة ، لذلك لا توجد ميزة حقيقية لأي واحد محدد ...


35





تركيب الملفات التي تم إنشاؤها لن يتم العثور عليها من قبل dpkg -S، كما هو مذكور في: https://askubuntu.com/a/667227/52975

فمثلا، /bin/nc يظهر عند تثبيت الحزمة netcat-openbsd.

لكن على:

dpkg -S /bin/nc

نحن نحصل dpkg-query: no path found matching pattern /bin/nc.

هذا يحدث بسبب /bin/nc يتم إنشاؤه من قبل update-alternatives استدعاء في نص postinst التي يتم تشغيلها بعد التثبيت.

يعمل مثل هذا لأن نسخة أخرى من /bin/nc يتم توفيرها من قبل netcat-traditional صفقة.

لا أعتقد أن هناك طريقة عامة للعثور على هذه الملفات التي تم إنشاؤها. في الحالة المحددة للروابط الصوتية البديلة ، يمكننا فقط اتباع الرابط باستخدام readlink -f:

dpkg -S "$(readlink -f /bin/nc)"

9





لم أكن على دراية بديبيان ، لقد شعرت بالحيرة عندما حاولت ذلك:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

قليل من التحقيق ووجدت الحزمة:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 

2