Найти, к какому пакету принадлежит файл в Ubuntu / Debian?

162698
Jay Conrod

Я часто скучаю по программе, man-странице или другому файлу при работе в моей системе Ubuntu 8.04. Есть ли простой способ узнать, какой пакет содержит данный файл (установлен ли он уже или нет)? Может быть, какой-то непонятный вариант для apt или dpkg?

264
То же самое в Ubuntu: http://askubuntu.com/questions/481/how-do-i-find-the-package-that-provides-a-file Ciro Santilli 新疆改造中心 六四事件 法轮功 9 лет назад 0
** `dpkg -S / path / to / file` **, если у вас установлен пакет. Zaz 8 лет назад 19

8 ответов на вопрос

356
splattne

(Debian / Ubuntu) Узнайте, к какому пакету принадлежит файл :

dpkg -S /usr/bin/ls 

'dpkg -S' просто совпадает со строкой, которую вы предоставляете, поэтому просто использование 'ls' в качестве аргумента соответствует любому файлу из любого пакета, который имеет 'ls' в любом месте имени файла. Поэтому обычно хорошей идеей является использование абсолютного пути. Во втором примере вы можете видеть, что 12 тысяч файлов, о которых известно, что dpkg соответствует пустой строке 'ls'.

Это только если файлы уже установлены John T 15 лет назад 30
В отличие от `apt-file`, он также находит пакет в файл, если он был установлен вручную через` dpkg -i`! tanius 9 лет назад 17
Если вы получаете _dpkg-запрос: не найдено ни одного пути, соответствующего pattern_ [попробуйте это] (https://unix.stackexchange.com/questions/159001/how-to-find-the-package-that-installed-a-comand-if -dpkg-s-find-no-path-beca / 159002 # 159002): `dpkg -S" $ (readlink -fn "$ (that rename)") "`. Pablo Bianchi 7 лет назад 3
Странно, это не сработало для меня: `dpkg-query: не найден путь, соответствующий шаблону / usr / bin / java`, хотя в` / usr / bin / java` есть файл nnyby 6 лет назад 0
218
John T
apt-file search filename 

или же

apt-file search /path/to/file 


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

sudo apt-get install apt-file 

Вам нужно будет обновить его базу данных, прежде чем вы сможете его использовать:

sudo apt-file update 
К вашему сведению: файл apt зависит от Contents-amd64.gz, предоставленного репозиториями. И не все сторонние репозитории предоставляют этот файл. Jokester 9 лет назад 6
Это не сработало для меня. Я обновил базу данных, но она ничего не возвращает. `dpkg -S` работает как описано ниже. Northys 7 лет назад 2
17
jamuraa

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

Для скорости я пометил URL:

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

в Firefox и добавил «debfind» в качестве ключевого слова (нажмите «еще» в менеджере закладок, когда он выделен), так что я могу просто набрать «debfind», и он будет работать. Вы можете изменить 'suite' его с нестабильного на стабильный или тестировать, если хотите, для других версий дистрибутива.

Это не работает с пользовательскими репозиториями, хотя. Ctrl-C 6 лет назад 0
Плохой выбор в отношении автоматизации. Alexander Shcheblikin 6 лет назад 0
11
jeremiah

Вы также можете использовать dlocate. Со страницы руководства;

$ dlocate [ PATTERN ] List all records where either the package name or the filename matches PATTERN. 
`dlocate` также мой любимый метод, очень надежный. Avio 11 лет назад 1
@Avio `dlocate` не найдет недавно установленный пакет, если вы сначала не запустите` sudo update-dlocatedb`. Команда автоматически запускается ежедневно в /etc/cron.daily/dlocate jarno 8 лет назад 2
4
pete_m

Я нашел Ваджиг ...

wajig whichpackage /path/to/file 

например.

wajig whichpackage /etc/apt/sources.list 

Wajig - это удобный инструмент для командной строки или консоли, который включает в себя все достоинства apt-get, dpkg, которые вы никогда не хотели изучать. ,

Для установки Wajig используйте:

apt-get install wajig 

Эта команда 'whichpackage' сама зависит от apt-файла

вам все еще нужно обновить базу данных, прежде чем вы сможете ее использовать: - Я пока не знаю, обновляет ли wajig обновление, которое apt-get также обновляет файловый кеш, но я ожидаю, что это возможно.

sudo wajig update  sudo apt-file update 

(и Супер Корова, Пасха egss?!)

2
kiri

Simmilar to jamuraa's answer for Debian, you can also go to http://packages.ubuntu.com/ for Ubuntu. You'll have to scroll down a bit to find the "Search the contents of packages" searchbox where you can enter the path of a file.

Теперь, если бы только Raspbian также был один :) XTL 9 лет назад 0
0
Ravi Agarwal

Try searching for files using http://www.kodkast.com/applications/find-which-package-file-belongs-to

This is an application to search for files which are contained in different rpms/linux packages, and is very useful when you dont even have the rpm installed on your machine.

Downvote: ссылка не работает, и ссылка, по-видимому, предназначена для RPM-пакетов. tripleee 6 лет назад 0
0
erwing

Пакет command-not-found дает подсказки о потенциальных командах и имени пакета 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 
Это не работает для произвольных файлов, как, например, запрошенный OP. a CVn 9 лет назад 0
Это проблемный совет, если программа делает вредные вещи и установлена. Добавление `-h` или` --help` в конце поможет немного. Если бы добавление `-h` в конце сделало бы это достаточно безопасным, я бы порекомендовал, но даже в этом случае это не хороший способ достичь того, что просит OP. Dr Beco 8 лет назад 0

Похожие вопросы