
Il vous arrive parfois d'oublier et de vouloir chercher le nom ou le chemin exact vers un fichier exécutable de votre système de fichiers GNU/Linux ?

Plusieurs d'entre vous le savent, il est possible de chercher à coup de ls dans les chemins de la variable d'environnement $PATH, mais comme toujours, il serait intéressant d'avoir l'outil adéquat pour faire ce que vous souhaitez rapidement et facilement.
C'est ce que le script showexe.py, que vous pourrez télécharger à la fin de cet article, vous permettra de faire !
Vous connaissez le nom exact du fichier exécutable Linux ? Utilisez which !
Si vous connaissez le nom exact du fichier exécutable, une simple utilisation de which sera suffisante :
which firefoxLa commande ci-dessus vous donnera le chemin précis de Firefox. Chez moi par exemple, c'est /usr/bin/firefox.
Là où cela devient moins facile, c'est quand vous doutez un peu du nom du fichier l'exécutable (par exemple, est-ce t-firefox, remote-firefox ou autre chose ?).
C'est pour cette raison que j'ai développé le script showexe.py, un script Python qui vous permettra de trouver instantanément le nom et le chemin complet d'un fichier exécutable, grâce à des filtres simples ou à des expressions rationnelles.
À télécharger et installer : showexe.py, le script pour trouver facilement les fichiers exécutables Linux dont vous doutez du nom
L'installation du script showexe.py est assez facile, si vous avez au moins une fois touché à la ligne de commande. Il suffit de copier (en tant que root) le script showexe.py dans le répertoire /usr/local/bin/, sous le nom showexe. Ceci étant fait, il ne vous restera qu'à le rendre exécutable avec la commande :
chmod +x /usr/local/bin/showexe(Il est aussi possible de faire cela avec des gestionnaires de fichiers graphiques, comme Thunar, Nautilus, Dolphin ou Konqueror. Il faut juste le lancer en tant que root, avec su ou sudo)
L'utilisation de showexe est très simple. Par exemple, pour trouver tous les programmes ayant "gimp" dans leur nom :
showexe --match gimpIl est aussi possible d'utiliser les expressions rationnelles :
showexe --match 'fir.*x'Cela vous donnera (à titre d'exemple) :
/usr/bin/firefox/usr/bin/firefox-3.0
/usr/bin/firefox.debian
('fir.*x' veut dire tout ce qui commence par fir et finit par x. Si vous vous intéressez aux expressions rationnelles, lisez cet article)
Information supplémentaire : si vous utilisez showexe sans arguments, tous les fichiers exécutables de votre système de fichiers seront affichés. Cela pourrait vous être utile pour utiliser un tube avec grep et filtrer grâce à ce dernier.
Vous pouvez télécharger directement showexe.py (ce que je vous recommande) ou le lire / copier / coller directement depuis cet article :
#!/usr/bin/env python# -*- coding: utf-8 -*-
#
# Copyright (c) 2009,
# Achraf cherti <achraf at cherti dot name>
#
# Site : http://achraf.cherti.name/
#
# License : GPL
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with This program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
"""
Affiche tous les fichiers exécutables du système.
Les fichier exécutables sont supposés exister dans les chemins
définis dans la variable d'environnement PATH. Ils sont séparés
avec le caractère deux points (celui-là :).
Ce programme permet aussi de filtrer les fichiers à afficher. """
# Informations
__author__ = "Achraf cherti (achraf at cherti dot name)"
__copyright__ = "Copyright (c) Achraf cherti, 2009"
__license__ = "GPL"
__version__ = "0.1"
# Bibliothèques
import os
import sys
import re
from getopt import gnu_getopt, GetoptError
from stat import ST_MODE, S_ISREG
try:
import psyco
psyco.full()
except ImportError:
pass
def usage():
"Afficher l'aide"
print """Utilitaire pour afficher tous les fichiers exécutables du \
système.
Usage: %s [options]
Options:
-h, --help Cette aide!
-v, --vebose Affiche plus d'informations (les
erreurs par exemple)
-m, --match <expression> Appliquer un filtre sur la liste des
fichiers. Ce filtre correspond à une
expression rationnelle.
--version Afficher la version
""" % sys.argv[0]
def handle_options():
"Lecture de toutes les options passées dans les arguments"
# Lecture des arguments
try:
args = sys.argv[1:]
optlist = gnu_getopt(args,
'vh:m:',
['verbose', 'help', 'version', 'match='])
except GetoptError:
print "Erreur dans les arguments."
print "--help pour plus d'informations..."
sys.exit(1)
# Le dictionnaire qui contiendra les options activées
options = {}
options["verbose"] = False
options["match"] = ""
# Traitement des arguments
for option, value in optlist[0]:
if option == "-v" or option == "--verbose":
options["verbose"] = True
if option == "-m" or option == "--match":
options["match"] = value
elif option == "-h" or option == "--help":
usage()
sys.exit(0)
elif option == "--version":
print __version__
sys.exit(0)
return options
def show_executables(options):
"Afficher tous les fichier exécutables qui existent dans le système"
# On parcourt tous les chemins de la variable d'environnemnt PATH
for directory in os.environ['PATH'].split(":"):
# Il doit impérativement être un répertoire
if not os.path.isdir(directory):
continue
# Le filtre
filter_activated = options["match"] and True or False
if filter_activated:
file_filter = re.compile(options["match"])
# Afficher les fichiers exécutables
for filename in os.listdir(directory):
# Application du filtre
if filter_activated:
if not file_filter.search(filename):
continue
# Test si le fichier est bien exécutable
path = os.path.join(directory, filename)
try:
if not S_ISREG(os.stat(path)[ST_MODE]):
continue
except OSError:
continue
# Affichage du fichier
print path
if __name__ == '__main__':
try:
show_executables(handle_options())
except KeyboardInterrupt:
sys.exit(1)
# vim:ai:et:sw=4:ts=4:sts=4:tw=78:fenc=utf-8




38
Ajouter un commentaire