Categorías: Linux

Cómo usar el comando which en Linux

Fatmawati Achmad Zaenuri / Shutterstock

El whichcomando de Linux identifica el binario ejecutable que se inicia cuando emite un comando al shell. Si tiene diferentes versiones del mismo programa en su computadora, puede usarlo whichpara averiguar cuál usará el shell.

Binarios y rutas

Cuando intenta ejecutar un programa o comando desde la ventana de la terminal, el shell (generalmente, Bash  en las distribuciones modernas) tiene que encontrar ese comando y ejecutarlo  . Algunos comandos, como cd , history y 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 de las cuales apunta 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.

Puede usar echopara verificar la $PATHvariable de entorno y ver los directorios en su ruta. Para hacerlo, escriba lo siguiente y luego presione Enter:

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 /sbiny /bin en el sistema de archivos, lo que puede generar cierta confusión.

Mira esos caminos

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

./htg 

No es un gran programa, solo imprime el número de versión y luego se cierra. 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/bindirectorio. Bash encontrará ese 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 se ejecuta, pero no es nuestro programa nuevo y actualizado. Más bien, es la versión anterior, 1.2.105.

El que comando

El problema que demostramos anteriormente es por qué se diseñó el whichcomando .

En este ejemplo, usaremos whichy pasaremos el nombre del programa que estamos investigando como parámetro de línea de comandos:

cual htg

whichinforma que ha encontrado una versión de htgen el /usr/local/bindirectorio. Debido a que esa ubicación aparece en la ruta antes del directorio al que movimos la actualización htg, Bash usa esa versión anterior del programa.

Sin embargo, si usamos la -aopción (todos) como se muestra a continuación, whichcontinúa la búsqueda incluso si encuentra una coincidencia:

que -a htg

Luego enumera todas las coincidencias en cualquiera 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 ese directorio se busca antes que el directorio en el que soltamos la nueva versión del programa.

Para verificar, 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/bindirectorio o moverla de /usr/bina /usr/local/bin.

Mira esos resultados

Dos resultados no necesariamente significan dos archivos binarios.

Veamos un ejemplo en el que usaremos el whichcomando con la -aopción (todos) y buscaremos versiones del lessprograma:

que -un menos

whichinforma dos ubicaciones que albergan una versión del lessprograma, pero ¿es eso cierto? Sería extraño tener dos versiones diferentes (o la misma versión en varias ubicaciones) lessinstaladas en una computadora con Linux. Entonces, no vamos a aceptar la salida de which. En cambio, profundicemos un poco más.

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

ls -lh / usr / bin / less

¡El tamaño del archivo se informa como nueve bytes! Definitivamente 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 vínculo simbólico . Si se perdió ese detalle, el  -->símbolo también indica que se trata de un enlace simbólico , que puede considerar como una especie de atajo. Éste apunta a la copia de lessen /bin.

Intentemos de nuevo con la versión de lessen /bin:

ls -lh / bin / menos

Esta entrada es obviamente un ejecutable binario «real». El primer carácter de la lista es un guión (-), lo que significa que es un archivo normal y el tamaño del archivo es de 167 KB. Por lo tanto, solo less se instala una copia de , pero hay un enlace simbólico desde otro directorio, que Bash también encuentra cuando busca la ruta.

Comprobación de varios comandos a la vez

Puede pasar varios programas y comandos a which, y los comprobará en orden.

Por ejemplo, si escribe:

que ping cat fecha de tiempo de actividad cabeza

which recorre la lista de programas y comandos que le proporcionó y enumera el resultado de cada uno.

Cual es cual

Si lo desea, también puede usarlo whichsobre sí mismo escribiendo lo siguiente:

cual cual

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

Puede usar which en estos casos para verificar que el comando que está lanzando Bash es el que desea usar.

responroot

Compartir
Publicado por
responroot
Etiquetas: linux

Entradas recientes

Steamlytics: La nueva herramienta imprescindible para los gamers de Steam

  El mundo del gaming ha experimentado un crecimiento exponencial en los últimos años. La…

1 año hace

Cuándo reemplazar su antigua unidad flash USB

Stokkete/Shutterstock.com ¿Sigue utilizando una unidad flash USB obsoleta para almacenar sus archivos? ¿Por qué no…

2 años hace

¿Qué es una pantalla Nano IPS?

LG Los fabricantes siempre intentan mejorar el rendimiento de imagen de los monitores. Como resultado,…

2 años hace

10 formas de jugar con un presupuesto bajo (o nulo)

Patty Chan/Shutterstock.com Si cree en lo que ve en las redes sociales, puede pensar en…

2 años hace

¿Demasiadas suscripciones? Aquí está cómo empezar a cortarlos

Seksan.TH/Shutterstock.com Los servicios de suscripción como Netflix, Game Pass y Spotify nos permiten consumir tantas…

2 años hace

Cómo configurar la puerta de enlace predeterminada en Linux

fatmawati achmad zaenuri/Shutterstock El acceso a Internet, oa cualquier otra red, se rige por la…

2 años hace