Quiero saber los comandos que me ofrece un paquete específico de Debian.
Por ejemplo, digamos que instalé un paquete llamado x.deb
. Este paquete seguramente contiene algunos comandos que puedo usar.
Cómo enumerar estos comandos.
Sé que puedo usar el compgen
comando bash para generar una lista de todos los comandos disponibles en mi sistema, pero lo que necesito es solo un paquete específico.
Probé las soluciones:
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
Probé el 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
fuente
fuente
apache2
puede ser un mal ejemplo porque ese paquete es un metapaquete que generalmente ni siquiera está instalado en sistemas que ejecutan Apache. El comando funciona - intentecoreutils
:dpkg -L coreutils | egrep '(bin|games)/'
grep -Ew 'bin|sbin|games'
, egrep está en desuso y también puede buscar sbin. Además, no hay ninguna razón para usar unfor
bucle aquí, usar unwhile
bucle como lo hice en mi respuesta en su lugar, significa que no necesita preocuparse por IFS y la división de palabras.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.
Además, regex, coincidirá con cualquier directorio que contengagames
obin
que incluirá/usr/share/games/
, y tambiénfoosbinaff
y cualquier otra cosa.1. Use una herramienta diseñada para el trabajo.
La forma más fácil y probablemente la más robusta es instalar
dlocate
:Entonces puedes correr
Como se explica en
man dlocate
:2. Analice la base de datos del paquete
Este es un enfoque similar al de @ Winny pero simplificado
Si no lo ha
apt-file
instalado, puede instalarlo y configurarlo con estos comandos:El comando anterior usa
apt-file
para enumerar el contenido de un paquete y luego las pruebas de bash-f
(¿es esto un archivo?) Y-x
(¿es ejecutable?) E imprime el nombre del archivo si se pasan ambas pruebas.Tenga en cuenta que, si bien algo como el siguiente comando obtendrá la mayoría de los ejecutables:
no encontrará todo porque también obtienes ejecutables en lugares como
/opt
o incluso/lib
(variasudev
herramientas, por ejemplo). Por lo tanto, si bien usar las-w
palabras completas para unirlas aumenta sus posibilidades de identificar los archivos correctamente, analizar la ruta no es un buen enfoque y, en su lugar, debe usar uno de los métodos anteriores.fuente
/opt
o/lib
no están destinados a ser invocados por los usuarios, por lo que no debe enumerarlos. `apt-file -F list $ package | grep -E '^ (/ usr) / (s? bin | games) /' le da la lista, con una excepción: alternativas ./lib/udev/findkeyboards
puede ser muy útil al escribir reglas de udev en el teclado ./lib/udev/rule_generator.functions
Puede ser útil también. Si comienzas a enumerar todo lo que es útil, no solo debes ejecutar los ejecutables, sino cualquier tipo de biblioteca de códigos.Si lo ha
dlocate
instalado, hay una manera fácil de enumerar todos los comandos en un paquete instalado:Con solo
dpkg
, puede enumerar los archivos en los directorios PATH estándar (son casi todos programas ejecutables, con muy pocas excepciones):Las excepciones son un par de directorios, a partir de Debian wheezy, solo dos:
/usr/bin/mh
y/usr/bin/nu-mh
.Si el paquete no está instalado, reemplácelo
dpkg -L
porapt-file -F list
:Si bien hay archivos ejecutables en otros directorios, no están destinados a ejecutarse directamente, lo que los hace irrelevantes aquí.
Todos estos métodos pierden un conjunto de programas: los que se proporcionan a través del mecanismo de alternativas . Por ejemplo, para el
ftp
paquete, solonetkit-ftp
ypftp
se proporcionan, pero este paquete en realidad proporciona elftp
comando, porque/usr/bin/ftp
es un enlace simbólico al/etc/alternatives/ftp
cual es un enlace simbólico a una de lasftp
implementaciones en el sistema, potencialmente/usr/bin/netkit-ftp
. El siguiente comando (que no es un ejemplo de buena programación, solo una gran línea) enumera los comandos proporcionados por un paquete a través del mecanismo de alternativas, como está configurado actualmente.Si desea enumerar los comandos que podrían proporcionarse a través de una alternativa que actualmente está configurada para apuntar a un paquete diferente, debe analizar los archivos
/var/lib/dpkg/alternatives
.Los enlaces simbólicos y los archivos de configuración que implementan los mecanismos alternativos no se registran en paquetes sino que se registran automáticamente
postinst
, lo que dificulta (y de hecho técnicamente imposible si el script de instalación de un paquete no sigue las convenciones) consultar las alternativas proporcionadas por un paquete desinstalado .fuente
dpkg -L
seguramente no le dará resultado. Intente con la herramienta apt-file (necesita instalarla).fuente
use debajo de un comando y reemplace systemd con su nombre de paquete específico. este comando enumerará todos los comandos disponibles con su introducción de una línea respectivamente
fuente