Je veux connaître les commandes qu'un paquet Debian spécifique m'offre.
Par exemple, disons que j'ai installé un package appelé x.deb
. Ce paquet contient sûrement quelques commandes que je peux utiliser.
Comment lister ces commandes.
Je sais que je peux utiliser la compgen
commande bash pour générer la liste de toutes les commandes disponibles dans mon système, mais ce dont j'ai besoin est juste pour un package spécifique.
J'ai essayé les solutions:
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
J'ai essayé la commande 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
la source
la source
apache2
peut être un mauvais exemple car ce package est un métapaquet qui n'est généralement pas même installé sur les systèmes exécutant Apache. La commande fonctionne - essayezcoreutils
:dpkg -L coreutils | egrep '(bin|games)/'
grep -Ew 'bin|sbin|games'
place, egrep est obsolète et vous pouvez également rechercher sbin. De plus, il n'y a aucune raison d'utiliser unefor
boucle ici, en utilisant unewhile
boucle comme je l'ai fait dans ma réponse, cela signifie que vous n'avez pas à vous soucier de l'IFS et du fractionnement de mots.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.
Aussi, vous regex, correspondra à tout répertoire qui contientgames
oubin
qui inclura/usr/share/games/
, et aussifoosbinaff
et quoi que ce soit d'autre.1. Utilisez un outil conçu pour le travail.
Le moyen le plus simple et probablement le plus robuste est d'installer
dlocate
:Vous pouvez ensuite exécuter
Comme expliqué dans
man dlocate
:2. Analyser la base de données des packages
Il s'agit d'une approche similaire à celle de @ Winny mais simplifiée
Si vous ne l'avez pas
apt-file
installé, vous pouvez l'installer et le configurer avec ces commandes:La commande ci-dessus utilise
apt-file
pour lister le contenu d'un paquet puis les tests de bash-f
(est-ce un fichier?) Et-x
(est-il exécutable?) Et affiche le nom du fichier si les deux tests sont réussis.Notez que bien que quelque chose comme la commande ci-dessous vous obtienne la plupart des exécutables:
il ne trouvera pas tout car vous obtenez également des exécutables dans des endroits comme
/opt
ou même/lib
(diversudev
outils par exemple). Ainsi, tout en utilisant le-w
pour faire correspondre des mots entiers augmente vos chances d'identifier correctement les fichiers, l'analyse du chemin n'est pas une bonne approche et vous devez plutôt utiliser l'une des méthodes ci-dessus.la source
/opt
ou/lib
ne sont pas destinés à être invoqués par les utilisateurs, vous ne devez donc pas les répertorier. `apt-file -F list $ package | grep -E '^ (/ usr) / (s? bin | games) /' vous donne la liste, à une exception près: les alternatives ./lib/udev/findkeyboards
peut être très utile lors de l' écriture de règles udev de clavier ./lib/udev/rule_generator.functions
peut aussi être utile. Si vous commencez à répertorier tout ce qui est utile, ce n'est pas seulement les exécutables que vous devez répertorier, mais tout type de bibliothèque de code.Si tu as
dlocate
installé, il existe un moyen simple de répertorier toutes les commandes d'un package installé:Avec juste
dpkg
, vous pouvez lister les fichiers dans les répertoires PATH standard (ce sont presque tous des programmes exécutables, à quelques exceptions près):Les exceptions sont quelques répertoires - à partir de Debian Wheezy, seulement deux:
/usr/bin/mh
et/usr/bin/nu-mh
.Si le package n'est pas installé, remplacez
dpkg -L
parapt-file -F list
:Bien qu'il existe des fichiers exécutables dans d'autres répertoires, ils ne sont pas destinés à être exécutés directement, ce qui les rend non pertinents ici.
Ces méthodes manquent toutes un ensemble de programmes: ceux qui sont fournis via le mécanisme alternatif . Par exemple, pour le
ftp
package, seulsnetkit-ftp
etpftp
sont fournis, mais ce package fournit en fait laftp
commande, car il/usr/bin/ftp
s'agit d'un lien symbolique vers/etc/alternatives/ftp
lequel estftp
potentiellement un lien symbolique vers l'une des implémentations du système/usr/bin/netkit-ftp
. La commande suivante (qui n'est pas un exemple de bonne programmation, juste un gros one-liner) répertorie les commandes fournies par un package via le mécanisme alternatif, tel qu'il est actuellement configuré.Si vous souhaitez répertorier les commandes qui pourraient être fournies via une alternative actuellement configurée pour pointer vers un autre package, vous devez analyser les fichiers dans
/var/lib/dpkg/alternatives
.Les liens symboliques et les fichiers de configuration qui implémentent les mécanismes alternatifs ne sont pas enregistrés dans les packages mais enregistrés automatiquement dans
postinst
, ce qui rend difficile (et en fait techniquement impossible si le script d'installation d'un package ne respecte pas les conventions) d'interroger les alternatives fournies par un package désinstallé .la source
dpkg -L
cela ne vous donnera sûrement pas de résultat. Veuillez essayer l'outil apt-file (vous devez l'installer).la source
utilisez ci-dessous une commande et remplacez systemd par le nom de votre package ciblé. cette commande répertorie toutes les commandes disponibles avec leur intro à une ligne respectivement
la source