Знайдіть, до якого пакета належить файл в Ubuntu / Debian?


299

Під час роботи в моїй системі Ubuntu 8.04 мені часто не вистачає програми, чоловічої сторінки чи іншого файлу. Чи є простий спосіб пошукати, який пакет містить даний файл (чи встановлений він вже чи ні)? Можливо, якийсь незрозумілий варіант для apt або dpkg?



25
dpkg -S /path/to/fileякщо у вас встановлений пакет
Заз

Відповіді:


247
apt-file search filename

або

apt-file search /path/to/file


Для встановлення apt-fileвикористовуйте:

sudo apt-get install apt-file

Вам потрібно буде оновити його базу даних, перш ніж використовувати її:

sudo apt-file update

7
FYI: apt-файл, схоже, залежить від Contents-amd64.gz, що надається сховищами. І не всі репортажі третьої сторони надають цей файл.
Джокер

3
Мені це не вийшло. Я оновив базу даних, але вона нічого не повертає. dpkg -Sпрацює, як описано нижче.
Нортіс

404

(Debian / Ubuntu) Дізнайтеся, до якого пакету належить файл :

dpkg -S /usr/bin/ls

'dpkg -S' просто відповідає рядку, який ви його постачаєте, тому просто використання 'ls' в якості аргументу відповідає будь-якому файлу з будь-якого пакету, який має 'ls' в будь-якому місці імені файлу. Тому зазвичай корисно використовувати абсолютний шлях. У другому прикладі ви бачите, що 12 тис. Файлів, які, як відомо, dpkg, відповідають голому рядку 'ls'.


33
Це лише в тому випадку, якщо файли вже встановлені
John T

19
На відміну від apt-fileцього, він також знаходить пакет у файл, якщо він був встановлений вручну через dpkg -i!
таніус

4
Якщо ви отримуєте DPKG-запит: шлях не знайдений відповідний шаблон спробувати це : dpkg -S "$(readlink -fn "$(which rename)")".
Пабло А

1
Дивно, це не працює для мене: dpkg-query: no path found matching pattern /usr/bin/javaхоча є файл на/usr/bin/java
nnyby

@nnyby Дивіться коментар Pablo A
vog

19

пакети.debian.org - це те, що я завжди використовую для виконання цього завдання. Він кращий за apt-файл, оскільки він також може знайти частини імен файлів. Він також пов'язаний з основним списком пакунків, де будуть перераховані описи, помилки тощо. Загалом, хороший веб-сайт. Не настільки корисний з командного рядка, але все-таки досить корисний.

Для швидкості я зробив закладки на URL:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

в Firefox, і додав "debfind" як ключове слово (натисніть "більше" в менеджері закладок, якщо воно ввімкнено), тож я можу просто набрати "debfind", і воно буде працювати. Ви можете змінити "набір" його з нестабільного на стабільний або тестування, якщо хочете, для інших версій дистрибуції.


Однак це не працює з користувацькими репостами.
Ctrl-C

Поганий вибір щодо автоматизації.
Олександр Щеблікін

11

Ви також можете використовувати dlocate. З чоловічої сторінки;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.

1
dlocateтакож мій улюблений метод, дуже надійний.
Авіо

2
@Avio dlocateне знайде нещодавно встановлений пакет, якщо ви не запустите sudo update-dlocatedbперший. Команда автоматично виконується щодня в /etc/cron.daily/dlocate
jarno

4

Я знайшов Ваджіга ...

wajig whichpackage /path/to/file 

напр.

wajig whichpackage /etc/apt/sources.list

Wajig - це зручний командний рядок або консольний інструмент, який обгортає всі сприятливі та добрі якості dpkg, яких ви ніколи не хотіли вивчати. .

Щоб встановити wajig, використовуйте:

apt-get install wajig

Сама команда 'whopackage' залежить від apt-файла

Вам доведеться оновити його базу даних, перш ніж ви зможете використовувати її: - Я ще не знаю, чи оновлення wajig whichh робить оновлення apt-get також оновлює кеш файлів, але, я думаю, це може.

sudo wajig update

sudo apt-file update

(і Супер корова, великодні егсс ?!)


2

Як і відповідь Jamuraa для Debian, ви також можете перейти на http://packages.ubuntu.com/ для Ubuntu. Вам доведеться трохи прокрутити вниз, щоб знайти поле пошуку "Пошук вмісту пакетів", де ви можете ввести шлях до файлу.


Тепер якби у Raspbian також був один :)
XTL

0

Спробуйте пошукати файли за допомогою http://www.kodkast.com/applications/find-which-package-file-belongs-to

Це програма для пошуку файлів, які містяться в різних пакетах rpms / linux, і це дуже корисно, коли на вашій машині навіть не встановлено rpm.


Downvote: посилання розірвано, і посилання, здається, стосується пакетів RPM в першу чергу.
трійчатка

0

Пакет не знайдених команд дає вам підказки про потенційні команди та назву пакета debian. Він працює, ввівши команду в оболонці bash і переглянувши її вихід.

Наприклад, якщо ім'я команди відомо:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

і якщо команда не відома, застосовуються деякі здогадки:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found

Однак це не працює для довільних файлів, як це вимагає ОП.
CVn

Це проблематична порада, якщо програма робить шкідливі речі та встановлюється ІС. Додавання -hабо --helpв кінці допоможе трохи. Якщо додавання -hв кінці зробить це досить безпечним, я б рекомендував, але навіть це не гарний спосіб досягти того, що просить ОП.
Д-р Беко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.