Eu quero conhecer os comandos que um pacote Debian específico me oferece.
Por exemplo, digamos que eu instalei um pacote chamado x.deb
. Este pacote certamente contém alguns comandos que eu posso usar.
Como listar esses comandos.
Eu sei que posso usar o compgen
comando bash para gerar uma lista de todos os comandos disponíveis no meu sistema, mas o que eu preciso é apenas para um pacote específico.
Eu tentei as soluções:
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
Eu tentei o comando 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
fonte
fonte
apache2
pode ser um mau exemplo, porque esse pacote é um metapacote que geralmente nem é instalado em sistemas executando o Apache. O comando funciona - tentecoreutils
:dpkg -L coreutils | egrep '(bin|games)/'
grep -Ew 'bin|sbin|games'
vez disso, egrep está obsoleto e você também pode procurar por sbin. Além disso, não há razão para usar umfor
loop aqui, usando umwhile
loop como fiz na minha resposta, significa que você não precisa se preocupar com o IFS e a divisão de palavras.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.
Além disso, você regex, corresponderá a qualquer diretório que contenha umgames
oubin
que incluirá/usr/share/games/
, e tambémfoosbinaff
e qualquer outra coisa.1. Use uma ferramenta projetada para o trabalho.
A maneira mais fácil e provavelmente a mais robusta é instalar
dlocate
:Você pode então executar
Como explicado em
man dlocate
:2. Analise o banco de dados do pacote
Essa é uma abordagem semelhante à @ Winny's, mas simplificada
Se você não tiver
apt-file
instalado, você pode instalar e configurar com estes comandos:O comando acima usa
apt-file
para listar o conteúdo de um pacote e, em seguida, os testes do bash-f
(este é um arquivo?) E-x
(é executável?) E imprime o nome do arquivo se os dois testes forem aprovados.Observe que, embora algo como o comando abaixo, você obtenha a maioria dos executáveis:
ele não encontrará tudo porque você também obtém executáveis em locais como
/opt
ou mesmo/lib
(váriasudev
ferramentas, por exemplo). Portanto, embora o uso de-w
para combinar palavras inteiras aumente suas chances de identificar os arquivos corretamente, analisar o caminho não é uma boa abordagem e você deve usar um dos métodos acima.fonte
/opt
ou/lib
não devem ser chamados pelos usuários, portanto, você não deve listá-los. `apt-file -F list $ pacote | grep -E '^ (/ usr) / (s? bin | jogos) /' fornece a lista, com uma exceção: alternativas ./lib/udev/findkeyboards
pode ser muito útil ao escrever regras do teclado udev ./lib/udev/rule_generator.functions
também pode ser útil. Se você começar a listar tudo o que é útil, não são apenas os executáveis que você precisa listar, mas qualquer tipo de biblioteca de códigos.Se você
dlocate
instalou, há uma maneira fácil de listar todos os comandos em um pacote instalado:Com apenas
dpkg
, você pode listar os arquivos nos diretórios PATH padrão (eles são quase todos os programas executáveis, com muito poucas exceções):As exceções são alguns diretórios - a partir do Debian wheezy, apenas dois:
/usr/bin/mh
e/usr/bin/nu-mh
.Se o pacote não estiver instalado, substitua
dpkg -L
porapt-file -F list
:Embora existam arquivos executáveis em outros diretórios, eles não devem ser executados diretamente, o que os torna irrelevantes aqui.
Todos esses métodos perdem um conjunto de programas: aqueles que são fornecidos por meio do mecanismo de alternativas . Por exemplo, apenas para o
ftp
pacotenetkit-ftp
epftp
são fornecidos, mas esse pacote realmente fornece oftp
comando, porque/usr/bin/ftp
é um link simbólico ao/etc/alternatives/ftp
qual é um link simbólico a uma dasftp
implementações no sistema, potencialmente/usr/bin/netkit-ftp
. O comando a seguir (que não é um exemplo de boa programação, apenas uma grande linha) lista os comandos fornecidos por um pacote por meio do mecanismo de alternativas, conforme configurado atualmente.Se você deseja listar os comandos que podem ser fornecidos por meio de uma alternativa atualmente configurada para apontar para um pacote diferente, é necessário analisar os arquivos
/var/lib/dpkg/alternatives
.Links simbólicos e arquivos de configuração que implementam os mecanismos alternativos não são registrados nos pacotes, mas registrados automaticamente
postinst
, o que dificulta (e de fato tecnicamente impossível se o script de instalação de um pacote não seguir as convenções) consultar as alternativas fornecidas por um pacote desinstalado. .fonte
dpkg -L
certamente não lhe dará resultado. Por favor, tente a ferramenta apt-file (você precisa instalá-lo).fonte
use abaixo de um comando e substitua systemd pelo nome do pacote direcionado. este comando listará todos os comandos disponíveis com sua introdução de uma linha, respectivamente
fonte