Перечислите все команды определенного пакета Debian

Вы могли бы хотеть пройти Упаковочные страницы на Проекте Fedora Wiki. Я также просмотрел тему Wiki, Как Создать RPM-пакет и не видел упоминания о нем там также.

8
01.04.2014, 10:58
4 ответа

Используйте 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...
13
27.01.2020, 20:08

1. Используйте инструмент, предназначенный для работы.

Самый простой и, вероятно, самый надежный способ - установить dlocate :

sudo apt-get install dlocate

Затем вы можете запустить

dlocate -lsbin package-name

, как описано в man dlocate :

-lsbin List full path/filenames of executable files (if any) in package

2. Анализ базы данных пакетов

Этот подход аналогичен подходу @ 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 для сопоставления целых слов увеличивает ваши шансы на правильную идентификацию файлов, анализ пути не является хорошим подходом, и вместо этого вам следует использовать один из методов, описанных выше.

11
27.01.2020, 20:08

Если у вас установлен 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 , что затрудняет (и фактически делает технически невозможным, если сценарий установки пакета не следует соглашениям) ), чтобы запросить альтернативы, предоставляемые неустановленным пакетом.

2
27.01.2020, 20:08
  1. Обычно * bin / - это наиболее распространенное место для размещения всех программ. Даже по ссылке. Таким образом, очень мало шансов, что вам нужно касаться команд вне * bin /.
  2. Если вы не установили apache2, dpkg -L наверняка не даст вам результата. Пожалуйста, попробуйте инструмент apt-file (вам необходимо его установить).
  3. Имя apache2 - это метапакет, он не содержит никаких программ.
0
27.01.2020, 20:08

Теги

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