Contexte: j'essaie de faire démarrer une application automatiquement lorsque je me connecte. Pour cela, je dois sélectionner le path
pour l'application.
Voici les chemins que j'ai déjà explorés:
/sbin
/usr/sbin
/usr/local/bin
/usr/share/
Si cela peut vous aider, l'application que j'essaie de trouver s'appelle " ScreenCloud " et je l'ai téléchargée depuis Ubuntu Software Center.
Mais je ne le trouve pas, est-il possible de savoir où est installé un logiciel particulier? Parce que même si j'ai trouvé pour celui-ci, je voudrais éviter d'avoir le même problème à l'avenir.
Trouvez le chemin d'un exécutable
Meilleur moyen
type executable
Consultez cette question pour en savoir plus sur la façon dont type
est meilleur. (Merci, commentaires!)
Autres moyens
whereis executable
which executable
Ces commandes recherchent uniquement dans la variable PATH (echo $PATH
), ils ne sont donc pas valides dans certains cas (fonctions intégrées, alias ou fonctions bash, etc.).
Utilisez la commande suivante pour répertorier tous vos $PATH
répertoires:
echo $PATH | sed 's/:/\n/g'
Utilisez la commande suivante pour rechercher le chemin complet de screencloud
:
for i in $(echo $PATH | sed 's/:/\n/g'); do find $i/screencloud* 2>@1; done
Si vous avez utilisé apt
, apt-get
, ou Ubuntu Software Center pour installer le package, vous pouvez utiliser la commande suivante pour trouver le chemin complet:
dpkg -L screencloud | grep bin
En supposant que vous avez utilisé ce référentiel , vous devriez pouvoir trouver screencloud
dans /usr/bin/
.
Le chemin complet est:
/usr/bin/screencloud
ou
/usr/bin/screencloud-*
Cependant, si vous avez utilisé le magasin de snapcraft selon le lien que vous avez fourni dans votre question, alors le chemin serait sous le répertoire suivant:
/snap/bin
N'oubliez pas non plus qu'Ubuntu est sensible à la casse, vous devez donc utiliser tous les minuscules sans majuscules.
Supposons que vous vouliez trouver l'emplacement de uname
, un programme qui répertorie les informations système. Si vous voulez savoir dans quel répertoire la commande de niveau supérieur est stockée, vous avez un certain nombre d'options:
$ which uname
/bin/uname
$ type -a uname
uname is /bin/uname
$ command -v uname
/bin/uname
$ locate uname
/bin/uname
(... SNIP dozens of Windows files on C & D ...)
/usr/lib/klibc/bin/uname
/usr/lib/plainbox-provider-resource-generic/bin/uname_resource
/usr/share/man/man1/uname.1.gz
/usr/share/man/man2/oldolduname.2.gz
/usr/share/man/man2/olduname.2.gz
/usr/share/man/man2/uname.2.gz
La dernière option locate
renvoie tous les fichiers contenant uname
et pas seulement le programme exécuté à partir de l'invite de commande.
L'avantage de locate
est qu'il trouvera des commandes pas dans votre chemin de recherche. type -a
(préféré au simple type
) et which
ne trouvera que les commandes dans votre chemin de recherche. Pour voir votre chemin de recherche, utilisez echo $PATH
.
Prenez par exemple cette réponse dans Comment démarrer screencloud? :
Essayer...
/opt/screencloud/screencloud.sh
Le locate screencloud
la commande le trouvera mais which screencloud
et type -a screencloud
ne le fera pas car:
screencloud.sh
et uniquement la commande locate
recherche une correspondance partielle./opt/screencloud
n'est probablement pas dans le chemin de recherche. which
et type
ne recherchent que les fichiers exécutables dans le chemin de recherche. Remarque: Ceci est une réponse plus ancienne. ScreenCloud moderne est appelé avec screencloud
.
L'avantage de Locate par rapport à la commande find
est qu'elle peut être des centaines voire des milliers de fois plus rapide. Exécute également find
à partir de /
donnera de nombreuses erreurs d'autorisation que vous ne rencontrerez pas avec locate
.
Si vous venez d'installer le programme aujourd'hui, vous devrez utiliser Sudo updatedb
pour mettre à jour la base de données de Locate.