Obtener el Programa que Cumpla con la Condición

LinuxBeginner
Practicar Ahora

Introducción

En este proyecto, aprenderás a crear un script que pueda comprobar si un programa está en ejecución en un puerto específico y mostrar la ruta completa del programa o "OK" si no hay ningún programa en ejecución.

👀 Vista previa

## Ejemplo
$ cd /home/labex/project
$ sh get.sh 3000
/usr/lib/code-server/lib/node
$ sh get.sh 43000
OK

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo crear un script de Zsh
  • Cómo utilizar el comando lsof para comprobar si un puerto está en uso
  • Cómo utilizar el comando ps para obtener la ruta completa de un programa en ejecución

🏆 Logros

Después de completar este proyecto, podrás:

  • Escribir un script que pueda identificar el programa en ejecución en un puerto específico
  • Solucionar problemas relacionados con conflictos de puerto en tu entorno de desarrollo
  • Automatizar el proceso de comprobación de programas en ejecución en puertos específicos

Crear el script get.sh

En este paso, crearás el script get.sh que comprobará si un programa está en ejecución en un puerto específico.

  1. Abre un editor de texto y crea un nuevo archivo llamado get.sh en el directorio /home/labex/project.

  2. Agrega el siguiente código para comprobar si se proporciona un número de puerto como argumento:

    ## Comprueba si se proporciona un número de puerto como argumento
    if [ -z "$1" ]; then
      echo "Por favor, proporciona un número de puerto."
      exit 1
    fi

    Este código comprueba si el script se llamó con un número de puerto como argumento. Si no es así, imprime un mensaje de error y sale del script.

  3. Agrega el siguiente código para obtener el número de puerto:

    ## Obtiene el número de puerto
    port=$1

    Este código almacena el número de puerto proporcionado en la variable port.

  4. Guarda el archivo get.sh.

✨ Revisar Solución y Practicar

Verificar si un programa está en ejecución en el puerto especificado

En este paso, agregará el código para comprobar si un programa está en ejecución en el puerto especificado.

  1. Agrega el siguiente código al script get.sh:

    ## Comprueba si el puerto está en uso
    process=$(lsof -i :$port -sTCP:LISTEN -Fp | sed 's/^p//')

    Este código utiliza el comando lsof para comprobar si un proceso está escuchando en el puerto especificado. La salida se almacena en la variable process.

  2. Agrega el siguiente código para comprobar si un programa está en ejecución:

    ## Comprueba si un programa está en ejecución
    if [ -z "$process" ]; then
      echo "OK"
    else
      ## Obtiene la ruta completa del programa
      path=$(ps -p $process -o args=)
      echo "$path" | awk '{print $1}'
    fi

    Este código comprueba si la variable process está vacía (es decir, no hay ningún programa en ejecución en el puerto especificado). Si está vacía, el script imprime "OK". Si un programa está en ejecución, el script utiliza el comando ps para obtener la ruta completa del programa e imprime la misma.

  3. Guarda el archivo get.sh.

✨ Revisar Solución y Practicar

Probar el script get.sh

En este paso, probarás el script get.sh para asegurarte de que funcione como se espera.

  1. Abre una terminal y navega hasta el directorio /home/labex/project.

  2. Ejecuta el script get.sh con un número de puerto como argumento:

    $ sh get.sh 3000
    /usr/lib/code-server/lib/node

    Esto debería mostrar la ruta completa del programa que está en ejecución en el puerto 3000.

  3. Ejecuta el script get.sh con un número de puerto que no está en uso:

    $ sh get.sh 43000
    OK

    Esto debería mostrar "OK" ya que no hay ningún programa en ejecución en el puerto 43000.

  4. Si el script funciona como se espera, has completado el proyecto.

¡Felicitaciones! Has creado un script que puede comprobar si un programa está en ejecución en un puerto especificado y mostrar la ruta completa del programa o "OK" si no hay ningún programa en ejecución.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.