Я хочу знать команды, которые мне предлагает конкретный пакет Debian.
Например, допустим, я установил пакет с именем x.deb
. Этот пакет, безусловно, содержит некоторые команды, которые я могу использовать.
Как перечислить эти команды.
Я знаю, что могу использовать compgen
команду bash для генерации списка всех доступных команд в моей системе, но мне нужно только для конкретного пакета.
Я попробовал решения:
dpkg -L postgresql-9.3 | egrep '(bin|games)/'
/usr/lib/postgresql/9.3/bin/pg_upgrade
/usr/lib/postgresql/9.3/bin/pg_ctl
/usr/lib/postgresql/9.3/bin/pg_resetxlog
/usr/lib/postgresql/9.3/bin/postgres
/usr/lib/postgresql/9.3/bin/pg_xlogdump
/usr/lib/postgresql/9.3/bin/initdb
/usr/lib/postgresql/9.3/bin/pg_controldata
/usr/lib/postgresql/9.3/bin/postmaster
Я попробовал команду postgres
user@userPc:~$ postgres
No command 'postgres' found, did you mean:
Command 'postgrey' from package 'postgrey' (universe)
postgres: command not found
debian
ubuntu
command-line
Maythux
источник
источник
apache2
может быть плохим примером, потому что этот пакет является метапакетом, который обычно даже не устанавливается в системах, работающих под Apache. Команда работает - попробуйтеcoreutils
:dpkg -L coreutils | egrep '(bin|games)/'
grep -Ew 'bin|sbin|games'
вместо этого, egrep устарела, и вы также можете искать sbin. Кроме того, здесь нет причин использоватьfor
цикл, используяwhile
цикл, как я сделал в своем ответе, а это означает, что вам не нужно беспокоиться о IFS и разбиении слов.man grep
:Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified.
Кроме того, вы regex, будет соответствовать любой каталог, который содержитgames
илиbin
будет включать/usr/share/games/
, а такжеfoosbinaff
и все остальное.1. Используйте инструмент, предназначенный для работы.
Самый простой и, вероятно, самый надежный способ - это установить
dlocate
:Вы можете запустить
Как объяснено в
man dlocate
:2. Разобрать базу данных пакетов
Это аналогичный подход к @ Winny's, но упрощенный
Если вы не
apt-file
установили, вы можете установить и настроить его с помощью этих команд:Вышеприведенная команда использует
apt-file
для вывода списка содержимого пакета, а затем тесты bash-f
(это файл?) И-x
(исполняемый ли он?) И выводит имя файла, если оба теста пройдены.Обратите внимание, что хотя что-то вроде команды ниже, вы получите большинство исполняемых файлов:
он не найдет все, потому что вы также получаете исполняемые файлы в таких местах, как
/opt
или даже/lib
(например, различныеudev
инструменты). Таким образом, хотя использование-w
для сопоставления целых слов увеличивает ваши шансы на правильное определение файлов, синтаксический анализ пути не является хорошим подходом, и вам следует использовать один из методов, описанных выше.источник
/opt
или/lib
не предназначены для вызова пользователями, поэтому вы не должны перечислять их. `apt-file -F list $ package | grep -E '^ (/ usr) / (s? bin | games) /' дает вам список, с одним исключением: альтернативы ./lib/udev/findkeyboards
могут быть очень полезны при написании правил udev для клавиатуры ./lib/udev/rule_generator.functions
тоже может быть полезным. Если вы начнете перечислять все полезное, вам нужно будет перечислить не только исполняемые файлы, но и любую библиотеку кода.Если вы
dlocate
установили, есть простой способ перечислить все команды в установленном пакете:С помощью just
dpkg
вы можете перечислить файлы в стандартных каталогах PATH (это почти все исполняемые программы, за очень немногими исключениями):Исключение составляют пара каталогов - по состоянию на Debian wheezy только два:
/usr/bin/mh
и/usr/bin/nu-mh
.Если пакет не установлен, замените
dpkg -L
наapt-file -F list
:Хотя в других каталогах есть исполняемые файлы, они не предназначены для непосредственного выполнения, что делает их здесь неактуальными.
Все эти методы пропускают набор программ: те, которые предоставляются через механизм альтернатив . Например, для
ftp
пакета толькоnetkit-ftp
иpftp
предоставляются, но этот пакет фактически предоставляетftp
команду, поскольку/usr/bin/ftp
является символической ссылкой,/etc/alternatives/ftp
котораяftp
потенциально является символической ссылкой на одну из реализаций в системе/usr/bin/netkit-ftp
. Следующая команда (которая не является примером хорошего программирования, просто большой однострочный) перечисляет команды, предоставляемые пакетом через механизм альтернатив, в соответствии с текущей настройкой.Если вы хотите перечислить команды, которые могут быть предоставлены с помощью альтернативы, которая в настоящее время настроена для указания на другой пакет, вам необходимо проанализировать файлы в
/var/lib/dpkg/alternatives
.Символьные ссылки и файлы конфигурации, которые реализуют альтернативные механизмы, не регистрируются в пакетах, а регистрируются в них автоматически
postinst
, что затрудняет (и фактически технически невозможно, если скрипт установки пакета не следует соглашениям) запрашивать альтернативы, предоставленные удаленным пакетом ,источник
dpkg -L
наверняка не получите результат. Пожалуйста, попробуйте инструмент apt-file (вам нужно установить его).источник
используйте ниже одну команду и замените systemd на имя целевого пакета. эта команда выведет список всех доступных команд с их однострочным введением соответственно
источник