Comando 'which' en Linux: Localización de comandos

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, emprenderás un viaje como desarrollador junior en TechCorp, con la tarea de configurar un nuevo entorno de desarrollo. Tu misión es dominar el comando which, una herramienta crucial para localizar archivos ejecutables en la variable PATH del sistema. Esta habilidad resultará invaluable mientras te adentres en el complejo mundo del desarrollo de software y la administración de sistemas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") subgraph Lab Skills linux/echo -.-> lab-215210{{"Comando 'which' en Linux: Localización de comandos"}} linux/which -.-> lab-215210{{"Comando 'which' en Linux: Localización de comandos"}} end

Comprender los conceptos básicos de 'which'

A medida que te adaptas a tu nuevo papel en TechCorp, tu líder de equipo te pide que verifiques la instalación de algunas herramientas de desarrollo clave. El comando which será tu utilidad principal para esta tarea.

El comando which se utiliza para localizar el archivo ejecutable asociado a un comando dado buscando en los directorios enumerados en la variable de entorno PATH.

Comencemos localizando el compilador gcc:

which gcc

Deberías ver una salida similar a esta:

/usr/bin/gcc

Esta salida te indica que el ejecutable gcc se encuentra en el directorio /usr/bin. Esto significa que cuando escribes gcc en la terminal, el sistema ejecutará el archivo ubicado en /usr/bin/gcc.

Ahora, intentemos localizar otra herramienta esencial, python:

which python

Podrías ver algo como esto:

/usr/local/bin/python

El comando which busca en los directorios enumerados en tu variable de entorno PATH y devuelve la primera coincidencia que encuentra. Si ves una ruta diferente, no te preocupes; simplemente significa que Python está instalado en una ubicación diferente en tu sistema.

Manejo de comandos inexistentes

Tu líder de equipo menciona que TechCorp solía utilizar una herramienta de compilación personalizada llamada techbuild. Vamos a verificar si todavía está instalada:

which techbuild

Puede que no veas ninguna salida (Bash Shell), o puede que veas un mensaje de error como techbuild not found (Zsh Shell).

Esto se debe a que which no devuelve nada si no puede encontrar el comando en tu PATH. No te alarmes por la falta de salida; es la forma en que el comando te dice que techbuild no se encuentra en ninguno de los directorios de tu PATH.

Para hacer este comportamiento más explícito, podemos utilizar un sencillo script de shell. Aquí introduciremos dos nuevos conceptos:

  1. El comando echo: Se utiliza para mostrar una línea de texto/cadena en la terminal.
  2. El operador >: Se utiliza para redirigir la salida a un archivo.

Vamos a crear un script para verificar techbuild:

echo '#!/bin/bash
if which techbuild >/dev/null 2>&1; then
  echo "techbuild is installed"
else
  echo "techbuild is not installed"
fi' > ~/check_techbuild.sh

Este comando hace algunas cosas:

  • Utiliza echo para escribir un script de shell.
  • El contenido del script está encerrado entre comillas simples.
  • El operador > redirige la salida de echo a un nuevo archivo llamado check_techbuild.sh en tu directorio personal.

Ahora, hagamos este script ejecutable y ejecutémoslo:

chmod +x ~/check_techbuild.sh
~/check_techbuild.sh

Este script imprimirá "techbuild is not installed" si el comando no se encuentra.

Descubriendo múltiples instalaciones

Mientras continúas configurando tu entorno, te das cuenta de que TechCorp utiliza múltiples versiones de Python para diferentes proyectos. La opción -a de which puede ayudarte a descubrir todas las instalaciones de un comando:

which -a python

Puedes ver una salida como esta:

/usr/local/bin/python
/usr/bin/python
/bin/python

Esta salida indica que hay múltiples instalaciones de Python en el sistema. La opción -a le dice a which que imprima todos los ejecutables coincidentes en el PATH, no solo el primero.

Comprender esto es crucial porque te muestra todos los posibles ejecutables de Python que se podrían ejecutar, dependiendo de la configuración de tu PATH. El primero en la lista es el que se ejecutará cuando escribas python en la terminal.

Comprender la prioridad del PATH

Tu líder de equipo explica que el orden de los directorios en la variable PATH determina qué versión de un comando se utiliza por defecto. Examinemos tu PATH:

echo $PATH

Verás una lista de directorios separados por dos puntos. Por ejemplo:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

El orden es importante: los directorios listados primero tienen mayor prioridad. Esto significa que si hay dos ejecutables con el mismo nombre en diferentes directorios, se utilizará el que se encuentre en el directorio que aparezca primero en el PATH.

Ahora, encontremos todas las instancias del comando ls:

which -a ls

Puedes ver:

/usr/bin/ls
/bin/ls

Aunque /bin/ls esté listado último, podría ser el que se ejecute cuando escribas ls, dependiendo de la configuración de tu PATH. Esto demuestra por qué es crucial entender la prioridad del PATH en un entorno de desarrollo.

Crear un comando personalizado

Tu líder de equipo sugiere crear un simple comando personalizado para demostrar cómo which interactúa con el PATH. Vamos a crear un script llamado hello en tu directorio personal:

echo '#!/bin/bash
echo "Hello from TechCorp!"' > ~/hello
chmod +x ~/hello

Este comando crea un nuevo archivo llamado hello en tu directorio personal (~ es un atajo para el directorio personal) y lo hace ejecutable. El script simplemente imprime "Hello from TechCorp!" cuando se ejecuta.

Ahora, intenta ejecutarlo:

hello

Obtendrás un error de "comando no encontrado" porque tu directorio personal no está en el PATH. El PATH es una lista de directorios donde la shell busca archivos ejecutables.

Vamos a agregar tu directorio personal al PATH temporalmente:

export PATH=$PATH:$HOME

Este comando agrega tu directorio personal al final del PATH. El comando export hace que el PATH modificado esté disponible para cualquier subproceso.

Ahora puedes ejecutar hello, y which lo encontrará:

hello
which hello

Deberías ver "Hello from TechCorp!" y la ruta a tu script. Esto demuestra cómo which encuentra ejecutables en cualquier directorio listado en tu PATH.

Resumen

En este laboratorio, has aprendido cómo utilizar el comando which para localizar archivos ejecutables en el PATH de tu sistema. Has descubierto cómo:

  1. Encontrar la ubicación de programas instalados
  2. Manejar comandos inexistentes
  3. Descubrir múltiples instalaciones del mismo comando
  4. Comprender la prioridad del PATH
  5. Crear y localizar comandos personalizados

También se te han presentado nuevos conceptos como el comando echo y la redirección de salida con >.

Otras opciones del comando which no cubiertas en este laboratorio incluyen:

  • -i: Ignorar las diferencias entre mayúsculas y minúsculas tanto en el nombre del comando como en la búsqueda del PATH
  • -p: Utilizar el PATH predeterminado en lugar del actual
  • -v: Modo detallado, imprime un mensaje de error si el comando no se encuentra

Estas habilidades serán invaluable a medida que continúes tu camino como desarrollador en TechCorp y más allá.