Получить программу, которая удовлетворяет условию

LinuxBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь создавать скрипт, который может проверить, запущена ли программа на указанном порту, и вывести полный путь к программе или "OK", если программа не запущена.

👀 Предварительный просмотр

## Пример
$ cd /home/labex/project
$ sh get.sh 3000
/usr/lib/code-server/lib/node
$ sh get.sh 43000
OK

🎯 Задачи

В этом проекте вы научитесь:

  • Создавать скрипт на Zsh
  • Использовать команду lsof для проверки, занят ли порт
  • Использовать команду ps для получения полного пути к запущенной программе

🏆 Достижения

После завершения этого проекта вы сможете:

  • Написать скрипт, который может определить программу, запущенную на указанном порту
  • Решать проблемы, связанные с конфликтом портов в вашей среде разработки
  • Автоматизировать процесс проверки запущенных программ на конкретных портах

Создайте скрипт get.sh

В этом шаге вы создадите скрипт get.sh, который будет проверять, запущена ли программа на указанном порту.

  1. Откройте текстовый редактор и создайте новый файл с именем get.sh в директории /home/labex/project.

  2. Добавьте следующий код, чтобы проверить, был ли передан номер порта в качестве аргумента:

    ## Проверьте, был ли передан номер порта в качестве аргумента
    if [ -z "$1" ]; then
      echo "Please provide a port number."
      exit 1
    fi
    

    Этот код проверяет, был ли скрипт вызван с номером порта в качестве аргумента. Если нет, он выводит сообщение об ошибке и завершает работу скрипта.

  3. Добавьте следующий код, чтобы получить номер порта:

    ## Получите номер порта
    port=$1
    

    Этот код сохраняет переданный номер порта в переменную port.

  4. Сохраните файл get.sh.

Проверьте, запущена ли программа на указанном порту

В этом шаге вы добавите код для проверки, запущена ли программа на указанном порту.

  1. Добавьте следующий код в скрипт get.sh:

    ## Проверьте, занят ли порт
    process=$(lsof -i :$port -sTCP:LISTEN -Fp | sed 's/^p//')
    

    Этот код использует команду lsof для проверки, слушает ли какой-то процесс указанный порт. Результат сохраняется в переменную process.

  2. Добавьте следующий код для проверки, запущена ли программа:

    ## Проверьте, запущена ли программа
    if [ -z "$process" ]; then
      echo "OK"
    else
      ## Получите полный путь к программе
      path=$(ps -p $process -o args=)
      echo "$path" | awk '{print $1}'
    fi
    

    Этот код проверяет, пуста ли переменная process (то есть на указанном порту не запущена программа). Если она пуста, скрипт выводит "OK". Если программа запущена, скрипт использует команду ps для получения полного пути к программе и выводит его.

  3. Сохраните файл get.sh.

Тестируйте скрипт get.sh

В этом шаге вы будете тестировать скрипт get.sh, чтобы убедиться, что он работает как ожидается.

  1. Откройте терминал и перейдите в директорию /home/labex/project.

  2. Запустите скрипт get.sh с номером порта в качестве аргумента:

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

    Это должно вывести полный путь к программе, запущенной на порту 3000.

  3. Запустите скрипт get.sh с номером порта, который не используется:

    $ sh get.sh 43000
    OK
    

    Это должно вывести "OK", так как на порту 43000 не запущена программа.

  4. Если скрипт работает как ожидается, вы завершили проект.

Поздравляем! Вы создали скрипт, который может проверить, запущена ли программа на указанном порту, и вывести полный путь к программе или "OK", если программа не запущена.

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться