GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la commande unix pour savoir à quel fichier exécutable correspond une commande donnée ?

La commande à utiliser varie d'un shell à l'autre.

Seul un shell intégré vous dira correctement ce que le shell fera pour un nom de commande donné, car seuls les intégrés peuvent connaître pleinement les alias, les fonctions du shell, les autres intégrés, etc. N'oubliez pas :toutes les commandes ne correspondent pas à des fichiers exécutables.

  • Pour le shell Bourne Again, bash , l'intégré est le type commande :

    $ type '['
    [ is a shell builtin
    
  • Pour la coquille de poisson, fish , Le type builtin fonctionne de la même manière que bash. Pour obtenir uniquement le chemin d'accès à un exécutable, utilisez command -v :

    $ type cat
    cat is /bin/cat
    $ command -v cat
    /bin/cat
    
  • Pour le Korn Shell, ksh , l'intégré est le whence commande — avec type initialement configuré comme un alias ordinaire pour whence -v et le command intégré avec le -v option équivalente à whence :

    $ whence -v ls
    ls is a tracked alias for /bin/ls
    
  • Pour la coque Z, zsh , l'intégré est le whence commande, avec le command intégré avec le -v option équivalente à whence et les éléments intégrés type , which , et where équivalent à whence avec les options -v , -c , et -ca respectivement.

    $ whence ls
    /bin/ls
    
  • Pour le T C Shell, tcsh , l'intégré est le which command — à ne pas confondre avec une commande externe portant ce nom :

    > which ls
    ls: aliased to ls-F
    > which \ls
    /bin/ls
    

Autres lectures

  • https://unix.stackexchange.com/questions/85249/

Vous pouvez utiliser which pour cela :

[email protected]:~$ which ls
/bin/ls

Cela fonctionne en recherchant le PATH pour les fichiers exécutables correspondant aux noms des arguments. Notez que cela ne fonctionne pas avec les alias du shell :

[email protected]:~$ alias listdir=/bin/ls
[email protected]:~$ listdir /
bin    dev   initrd.img      lib32   media  proc  selinux  tmp  vmlinuz
...
[email protected]:~$ which listdir
[email protected]:~$

type , cependant, fonctionne :

[email protected]:~$ type listdir
listdir is aliased to `/bin/ls'

which n'est pas (nécessairement) renvoie le fichier exécutable. Il renvoie le premier fichier correspondant nom il trouve dans le $PATH (ou plusieurs fichiers nommés similaires lors de l'utilisation de which -a )... Le réel exécutable peut être plusieurs liens.

  • which locate
    /usr/bin/locate
    `
  • file $(which locate)
    /usr/bin/locate: symbolic link to /etc/alternatives/locate'

La commande qui trouve le réel l'exécutable est readlink -e ,
(en conjonction avec which )

  • readlink -e $(which locate)
    /usr/bin/mlocate

Pour voir tous les liens intermédiaires :

f="$(which locate)"             # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do  # follow links to executable
    printf "# %s\n" "$f"
done

# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate

Linux
  1. Comment savoir ce que fait une commande Linux

  2. Est-il possible de savoir quel programme ou script a créé un fichier donné ?

  3. Quelles sont les utilisations légitimes de la commande "touch" ?

  4. Est-il possible de trouver quel Vim/tmux a ouvert le fichier ?

  5. Quelle est la différence entre la commande locate et find sous Linux

Linux :Découvrez sur quel numéro de port un processus écoute

quelle est la commande la plus fiable pour trouver la taille réelle d'un fichier linux

Comment combiner la commande 'tar' avec 'find'

Comment trouver les répertoires ou fichiers les plus gourmands en espace ?

Comment savoir quel fichier se trouve sur un secteur particulier

Quelle est la bonne syntaxe find -exec