条件を満たすプログラムを取得する

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. 引数としてポート番号が提供されているかどうかを確認するために、次のコードを追加します。

    ## 引数としてポート番号が提供されているかどうかを確認する
    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
    

    43000 番ポートではプログラムが実行されていないため、これにより "OK" が出力されるはずです。

  4. スクリプトが期待通りに機能する場合、プロジェクトは完了です。

おめでとうございます!指定されたポートでプログラムが実行されているかどうかを確認し、実行されている場合はそのプログラムの完全パスを、実行されていない場合は "OK" を表示するスクリプトを作成しました。

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっと練習することができ、あなたの技術を向上させることができます。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習