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 compgencomando 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

apache2puede 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 unforbucle aquí, usar unwhilebucle 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 contengagamesobinque incluirá/usr/share/games/, y tambiénfoosbinaffy 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-fileinstalado, puede instalarlo y configurarlo con estos comandos:El comando anterior usa
apt-filepara 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
/opto incluso/lib(variasudevherramientas, por ejemplo). Por lo tanto, si bien usar las-wpalabras 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
/opto/libno 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/findkeyboardspuede ser muy útil al escribir reglas de udev en el teclado ./lib/udev/rule_generator.functionsPuede 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
dlocateinstalado, 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/mhy/usr/bin/nu-mh.Si el paquete no está instalado, reemplácelo
dpkg -Lporapt-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
ftppaquete, solonetkit-ftpypftpse proporcionan, pero este paquete en realidad proporciona elftpcomando, porque/usr/bin/ftpes un enlace simbólico al/etc/alternatives/ftpcual es un enlace simbólico a una de lasftpimplementaciones 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 -Lseguramente 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