조건을 만족하는 프로그램 가져오기

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. 텍스트 편집기를 열고 /home/labex/project 디렉토리에 get.sh라는 새 파일을 생성합니다.

  2. 다음 코드를 추가하여 포트 번호가 인수로 제공되었는지 확인합니다:

    ## Check if the port number is provided as an argument
    if [ -z "$1" ]; then
      echo "Please provide a port number."
      exit 1
    fi

    이 코드는 스크립트가 포트 번호를 인수로 호출되었는지 확인합니다. 그렇지 않은 경우, 오류 메시지를 출력하고 스크립트를 종료합니다.

  3. 다음 코드를 추가하여 포트 번호를 가져옵니다:

    ## Get the port number
    port=$1

    이 코드는 제공된 포트 번호를 port 변수에 저장합니다.

  4. get.sh 파일을 저장합니다.

✨ 솔루션 확인 및 연습

지정된 포트에서 프로그램 실행 여부 확인

이 단계에서는 지정된 포트에서 프로그램이 실행 중인지 확인하는 코드를 추가합니다.

  1. get.sh 스크립트에 다음 코드를 추가합니다:

    ## Check if the port is in use
    process=$(lsof -i :$port -sTCP:LISTEN -Fp | sed 's/^p//')

    이 코드는 lsof 명령어를 사용하여 지정된 포트에서 프로세스가 리스닝 (listening) 중인지 확인합니다. 출력은 process 변수에 저장됩니다.

  2. 다음 코드를 추가하여 프로그램이 실행 중인지 확인합니다:

    ## Check if a program is running
    if [ -z "$process" ]; then
      echo "OK"
    else
      ## Get the full path of the program
      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

    포트 43000 에서 실행 중인 프로그램이 없으므로 "OK"를 출력해야 합니다.

  4. 스크립트가 예상대로 작동하면 프로젝트가 완료된 것입니다.

축하합니다! 지정된 포트에서 프로그램이 실행 중인지 확인하고, 프로그램의 전체 경로를 출력하거나, 실행 중인 프로그램이 없으면 "OK"를 출력하는 스크립트를 만들었습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.