Вы могли бы хотеть пройти Упаковочные страницы на Проекте Fedora Wiki. Я также просмотрел тему Wiki, Как Создать RPM-пакет и не видел упоминания о нем там также.
Используйте dpkg -L pkgname
и перенаправьте его команде grep, ищущей bin /
и games /
:
$ dpkg -L bash | grep -E '(bin|games)/'
/bin/bash
/usr/bin/bashbug
/usr/bin/clear_console
/bin/rbash
Если вы хотите проверить все двоичные файлы, независимо от того, находятся ли они в вашем $ PATH
, попробуйте эту функцию bash:
find_binaries (){
dpkg -L "$@" | while read; do
[ -f "$REPLY" -a -x "$REPLY" ] && echo "$REPLY"
done
}
Invoke вот так:
$ find_binaries postfix
...SNIP...
/usr/lib/postfix/postfix-files
/usr/lib/postfix/pipe
/usr/lib/postfix/proxymap
/usr/lib/postfix/local
/usr/lib/postfix/discard
...SNIP...
Самый простой и, вероятно, самый надежный способ - установить dlocate
:
sudo apt-get install dlocate
Затем вы можете запустить
dlocate -lsbin package-name
, как описано в man dlocate
:
-lsbin List full path/filenames of executable files (if any) in package
Этот подход аналогичен подходу @ Winny, но упрощен
apt-file -F list package | cut -d ' ' -f 2 |
while read file; do [[ -x $file && -f $file ]] && echo "$file"; done
Если у вас не установлен apt-файл
, вы можете установить и настроить его с помощью следующих команд:
sudo apt-get install apt-file
sudo apt-file update
В приведенной выше команде используется apt-file
для перечисления содержимого пакета, а затем тесты bash -f
(это файл?) И -x
(это исполняемый файл?) и печатает имя файла, если оба теста пройдены.
Обратите внимание, что хотя что-то вроде команды ниже даст вам большинство исполняемых файлов:
apt-file -L list package | grep -Ew 'bin|sbin'
он не найдет все, потому что вы также получаете исполняемые файлы в таких местах, как / opt
или даже / lib
(например, различные udev
инструменты). Таким образом, хотя использование -w
для сопоставления целых слов увеличивает ваши шансы на правильную идентификацию файлов, анализ пути не является хорошим подходом, и вместо этого вам следует использовать один из методов, описанных выше.
Если у вас установлен dlocate
, есть простой способ перечислить все команды в установленном пакете:
dlocate -lsbin PACKAGE-NAME
С помощью всего dpkg
вы можете перечислите файлы в стандартных каталогах PATH (это почти все исполняемые программы, за очень немногими исключениями):
dpkg -L PACKAGE-NAME… | sed -n 's!^\(/s\?bin\|/usr/s\?bin\|/usr/games\)/!!p' | sort -u
Исключения составляют несколько каталогов - в Debian wheezy только два: / usr / bin / mh
и / usr / bin / nu-mh
.
Если пакет не установлен, замените dpkg -L
на apt-file -F list
:
apt-file -F list PACKAGE-NAME… | sed -n 's!^\(/s\?bin\|/usr/s\?bin\|/usr/games\)/!!p' | sort -u
Хотя в других каталогах есть исполняемые файлы, их нет предназначены для непосредственного выполнения, что делает их здесь неуместными.
Во всех этих методах отсутствует набор программ: те, которые предоставляются через механизм альтернатив . Например, для пакета ftp
предоставляются только netkit-ftp
и pftp
, но этот пакет фактически предоставляет команду ftp
, потому что / usr / bin / ftp
- это символическая ссылка на / etc / alternatives / ftp
, которая является символической ссылкой на одну из реализаций ftp
в системе , потенциально / usr / bin / netkit-ftp
. Следующая команда (которая не является примером хорошего программирования, а просто большой однострочник) перечисляет команды, предоставляемые пакетом через механизм альтернатив, как в настоящее время настроено.
perl -lwe 'foreach (`dpkg -L @ARGV`) {chomp; ++$p{$_}} foreach (</bin/* /sbin/* /usr/bin/* /usr/sbin/*>) {$e = readlink; next unless defined $e and $e =~ m!^/etc/alternatives/!; $t = readlink $e; print if $p{$t}}' PACKAGE_NAME…
Если вы хотите перечислить команды, которые могут быть предоставлены через альтернативу, которая в настоящее время настроена так, чтобы указывать на другой пакет, вам необходимо проанализировать файлы в / var / lib / dpkg / alternatives
.
Символические ссылки и файлы конфигурации, реализующие альтернативные механизмы, не регистрируются в пакетах, а регистрируются автоматически в postinst
, что затрудняет (и фактически делает технически невозможным, если сценарий установки пакета не следует соглашениям) ), чтобы запросить альтернативы, предоставляемые неустановленным пакетом.
dpkg -L
наверняка не даст вам результата. Пожалуйста, попробуйте инструмент apt-file (вам необходимо его установить).