Cómo usar el comando which en Linux


Linux which comando identifica el ejecutable binario que se inicia cuando emite un comando al shell. Si tiene diferentes versiones del mismo programa en su computadora, puede usar which para saber qué shell utilizará.

Binarios y rutas

Cuando intenta ejecutar un programa o comando desde la ventana del terminal, el shell (generalmente, Golpear en distribuciones modernas) debe encontrar este comando y ejecutarlo. Algunos comandos, como discos compactos, la historiay pwd, están integrados en el shell, por lo que Bash no tiene que esforzarse demasiado para encontrarlos.

Pero, ¿cómo localiza Bash otros comandos, programas y binarios externos independientes? Bueno, Bash usa la ruta, que en realidad es una colección de rutas, cada una apuntando a un directorio. Luego busca en cada uno de esos directorios un ejecutable que coincida con el comando o programa que está intentando ejecutar. Cuando encuentra uno, Bash lo lanza y abandona la búsqueda.

Puedes usar echo para comprobar el $PATH variable de entorno y vea los directorios en su ruta. Para hacer esto, escriba lo siguiente y luego presione Entrar:

echo $PATH


La lista de salida separa cada ruta con dos puntos (:). En la computadora que estamos usando, Bash buscará los siguientes directorios en este orden:

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /user/games
  • /usr/local/games
  • /snap/bin

Hay muchas carpetas llamadas /sbin y /bin en el sistema de archivos que puede resultar confuso.

Mira estos caminos

Digamos que tenemos una versión actualizada de un programa llamado htg. Está ubicado en nuestro directorio actual y podemos ejecutarlo escribiendo el siguiente comando:

./htg 

No es realmente un programa, solo imprime el número de versión y luego sale. La nueva versión es 1.2.138.

Para ejecutar un programa en el directorio de trabajo actual, debe escribir “./” delante del nombre del programa, para que Bash sepa dónde encontrarlo.

Debido a que queremos ejecutar este programa en particular desde cualquier directorio, vamos a mover el ejecutable al /usr/bin directorio telefónico. Bash encontrará este programa en la ruta y lo ejecutará por nosotros.

No necesitamos el ejecutable en nuestro directorio actual, ni necesitamos escribir “./” delante del nombre del programa, como se muestra a continuación:

sudo mv htg /usr/bin

Ahora intentemos ejecutar el programa escribiendo:

htg


Algo está funcionando, pero no es nuestro nuevo programa actualizado. Más bien, es la versión anterior, 1.2.105.

Cual comando

El problema que demostramos anteriormente es por qué which comandante ha sido concebido.

En este ejemplo usaremos which y pasamos el nombre del programa que estamos estudiando como parámetro de línea de comando:

En relación :  Cómo agregar sus paneles de preferencias favoritos al Mac Dock

which htg

which informa que encontró una versión de htg en el /usr/local/bin directorio telefónico. Debido a que esta ubicación aparece en la ruta antes del directorio al que movimos la actualización htg, Bash usa esta versión anterior del programa.

Sin embargo, si usamos el -a (todo) opción como se muestra a continuación, which continúe la búsqueda incluso si encuentra una coincidencia:

which -a htg

Luego enumera todas las coincidencias en uno de los directorios de la ruta.

Entonces ese es el problema: hay una versión anterior del programa en un directorio que también está en el parche. Y este directorio se busca antes que el directorio en el que hemos depositado la nueva versión del programa.

Para comprobarlo, podemos escribir lo siguiente y ejecutar explícitamente cada versión del programa:

/usr/local/bin/htg
/usr/bin/htg

Esto explica el problema y la solución es simple.

De hecho, tenemos opciones. Podemos eliminar la versión anterior en el /use/local/bin directorio o moverlo de /usr/bin a /usr/local/bin.

Mira estos resultados

Dos resultados no significan necesariamente dos archivos binarios.

Veamos un ejemplo en el que usaremos el which ordenar con -a (todos) y encontrar las versiones de less programa:

which -a less

which informa dos ubicaciones que albergan una versión del less programa, pero ¿es cierto? Sería extraño tener dos versiones diferentes (o la misma versión en varios lugares) de less instalado en una computadora Linux. Entonces no aceptaremos la liberación de which. En cambio, profundicemos un poco más.

Podemos usar el ls, -l (lista larga), y -h (legible por humanos) para ver qué está pasando:

ls -lh /usr/bin/less

¡El tamaño del archivo es de nueve bytes! Ciertamente no es una copia completa de less.

El primer carácter de la lista es una “l”. Un archivo normal tendría un guión (-) como primer carácter. La “l” es un símbolo que significa enlace simbólico. Si te perdiste este detalle, el --> el símbolo también indica que es un enlace simbólico, que puede considerar como una especie de atajo. Esto apunta a la copia de less dentro /bin.

Intentemos de nuevo con la versión de less dentro /bin:

ls -lh /bin/less

Esta entrada es obviamente un ejecutable binario “real”. El primer carácter de la lista es un guión (-), lo que significa que se trata de un archivo normal y el tamaño del archivo es de 167 KB. Así que una sola copia less está instalado, pero hay un enlace simbólico a él desde otro directorio, que Bash también encuentra al buscar la ruta.

En relación :  ¿Qué es Markdown y cómo se usa?

Pronto: Cómo usar el comando ls para listar archivos y directorios en Linux

Comprobación de varios pedidos a la vez

Puede enviar varios programas y comandos a which, y los revisará en orden.

Por ejemplo, si escribe:

which ping cat uptime date head

which recorre la lista de programas y comandos que le ha proporcionado y enumera el resultado de cada uno de ellos.

Cual es cual

Si lo desea, también puede usar which sobre sí mismo escribiendo lo siguiente:

which which

Además de profundizar en el sistema de archivos de Linux por curiosidad, which es más útil cuando espera un conjunto de comportamientos de un comando o programa, pero obtiene otro.

Puedes usar which en estos casos, verifique que el comando que está ejecutando Bash sea el que desea usar.

Moyens Staff
El personal de Moyens I/O lo ha motivado, brindándole consejos sobre tecnología, desarrollo personal, estilo de vida y estrategias que lo ayudarán.