GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el comando de Unix para averiguar qué archivo ejecutable corresponde a un comando determinado?

El comando a usar varía de shell a shell.

Solo un shell integrado le dirá correctamente qué hará el shell para un nombre de comando dado, ya que solo los integrados pueden conocer completamente los alias, las funciones de shell, otros integrados, etc. Recuerde:no todos los comandos corresponden a archivos ejecutables en primer lugar.

  • Para el shell de Bourne Again, bash , el incorporado es el type comando:

    $ type '['
    [ is a shell builtin
    
  • Para la concha de pescado, fish , El type builtin funciona de manera similar a bash. Para obtener solo la ruta a un ejecutable, use command -v :

    $ type cat
    cat is /bin/cat
    $ command -v cat
    /bin/cat
    
  • Para Korn Shell, ksh , el incorporado es el whence comando — con type configurado inicialmente como un alias ordinario para whence -v y el command integrado con el -v opción equivalente a whence :

    $ whence -v ls
    ls is a tracked alias for /bin/ls
    
  • Para Z Shell, zsh , el incorporado es el whence comando, con el command integrado con el -v opción equivalente a whence y los type incorporados , which y where equivalente a whence con las opciones -v , -c y -ca respectivamente.

    $ whence ls
    /bin/ls
    
  • Para el T C Shell, tcsh , el incorporado es el which comando:no debe confundirse con ningún comando externo con ese nombre:

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

Lecturas adicionales

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

Puedes usar which por esto:

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

Funciona buscando en el PATH para archivos ejecutables que coincidan con los nombres de los argumentos. Tenga en cuenta que no funciona con alias de 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 , sin embargo, funciona:

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

which no (necesariamente) devolver el archivo ejecutable. Devuelve el primer archivo coincidente nombre encuentra en $PATH (o múltiples archivos con nombres similares cuando se usa which -a )... El real el ejecutable puede estar a varios enlaces de distancia.

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

El comando que encuentra el real ejecutable es readlink -e ,
(junto con which )

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

Para ver todos los enlaces intermedios :

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. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. ¿Es posible averiguar qué programa o secuencia de comandos creó un archivo determinado?

  3. ¿Cómo saber qué grupo tiene un usuario determinado?

  4. Abra un archivo dado por el resultado de un comando en vim

  5. ¿Cuál es la sintaxis correcta de find -exec?

Linux:averigüe en qué número de puerto está escuchando un proceso

¿Cuál es el comando más confiable para encontrar el tamaño real de un archivo de Linux?

¿Cuál es el equivalente al comando de archivo de Linux para Windows?

¿Cómo averiguar los principales directorios o archivos que consumen espacio?

Cómo averiguar qué archivo está en un sector en particular

Cómo encontrar el archivo .pid para un proceso dado