Если вы dlocate
установили, есть простой способ перечислить все команды в установленном пакете:
dlocate -lsbin PACKAGE-NAME
С помощью just 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
, что затрудняет (и фактически технически невозможно, если скрипт установки пакета не следует соглашениям) запрашивать альтернативы, предоставленные удаленным пакетом ,