はじめに
このプロジェクトでは、Linux サーバー上のシステム情報を取得して表示する方法を学びます。作成するgetinfo.shスクリプトを使って、サーバーのハードウェア、ソフトウェア、ネットワーク構成に関する重要な詳細を迅速に収集できます。
👀 プレビュー
$ sh getinfo.sh
## 例
cpu num: 8
memory total: 30 G
memory free: 10867 M
disk size: 20G
system bit: 64
process: 40
software num: 1389
ip: 1.32.X.X
🎯 タスク
このプロジェクトでは、以下を学びます。
- CPU の数、総メモリ、利用可能なメモリ、ディスクサイズ、システムビット数、実行中のプロセス数、インストールされているソフトウェアパッケージ数、およびサーバーの IP アドレスを取得する方法。
grep、free、df、getconf、ps、dpkg-query、ipなどの様々な Linux コマンドとツールを使ってシステム情報を収集する方法。- これらのコマンドを組み合わせて、サーバーの状態の包括的な概要を提供する zsh スクリプトを書く方法。
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- シェルスクリプトを使ってシステム情報の自動収集方法を理解する。
- 一般的な Linux コマンドとその応用に慣れる。
- 重要なサーバーの詳細を迅速に取得して表示するために実行できる再利用可能なスクリプトを作成する。
- 新しく習得した知識を使って、Linux システムの監視とトラブルシューティングをより効果的に行う。
getinfo.sh スクリプトを作成する
このステップでは、/home/labex/project ディレクトリに getinfo.sh スクリプトを作成します。
テキストエディタを開き、
/home/labex/projectディレクトリに新しいファイルを作成して、getinfo.shと名付けます。ファイルの先頭に以下のシェバン行を追加します。
#!/bin/zshこの行は、スクリプトを zsh シェルを使って実行することを指定します。
スクリプトに以下のコメントを追加します。
## getinfo.sh - Linux System Information Script ## This script retrieves CPU, memory, disk, and other information of a Linux server.これらのコメントは、スクリプトの目的を簡単に説明しています。
ファイルを保存します。
CPU 情報を取得する
このステップでは、getinfo.sh スクリプトに CPU の数を取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:CPU 情報を取得する cpu_num=$(grep -c '^processor' /proc/cpuinfo)この関数は、
grepコマンドを使って/proc/cpuinfoファイル内のプロセッサエントリの数を数え、それが CPU の数を表します。スクリプトの変更を保存します。
メモリ情報を取得する
このステップでは、getinfo.sh スクリプトに総メモリサイズと利用可能なメモリサイズを取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:総メモリサイズ (GB 単位) を取得する memory_total=$(free -g | awk '/^Mem:/ {print $2}') ## 関数:利用可能なメモリサイズ (MB 単位) を取得する memory_free=$(free -m | awk '/^Mem:/ {print $4}')最初の関数は、
freeコマンドに-gオプションを付けてギガバイト単位の総メモリサイズを取得します。2 番目の関数は、freeコマンドに-mオプションを付けてメガバイト単位の利用可能なメモリサイズを取得します。スクリプトの変更を保存します。
ディスク情報を取得する
このステップでは、getinfo.sh スクリプトにルートディレクトリにマウントされたファイルシステムの総サイズを取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:ルートファイルシステムの総ディスクサイズ (GB 単位) を取得する disk_size=$(df -h / | awk '/\// {print $2}')この関数は、
dfコマンドに-hオプションを付けてルートディレクトリ (/) にマウントされたファイルシステムの総サイズを取得し、その後awkを使ってサイズ値を抽出します。スクリプトの変更を保存します。
システムのビット情報を取得する
このステップでは、getinfo.sh スクリプトにシステムビット情報を取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:システムビットを取得する system_bit=$(getconf LONG_BIT)この関数は、
getconfコマンドを使ってシステムが使用するビット数を取得します。スクリプトの変更を保存します。
プロセス情報を取得する
このステップでは、getinfo.sh スクリプトに現在実行中のプロセスの数を取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:現在実行中のプロセスの数を取得する process=$(ps -ef | wc -l)この関数は、
psコマンドを使ってすべての実行中のプロセスを一覧表示し、その後wcコマンドを使って行数を数えます。スクリプトの変更を保存します。
ソフトウェア情報を取得する
このステップでは、getinfo.sh スクリプトにインストールされているソフトウェアパッケージの数を取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:インストールされているソフトウェアパッケージの数を取得する software_num=$(dpkg-query -f '${binary:Package}\n' -W | wc -l)この関数は、
dpkg-queryコマンドを使ってインストールされているすべてのソフトウェアパッケージを一覧表示し、その後wcコマンドを使って行数を数えます。スクリプトの変更を保存します。
IP アドレス情報を取得する
このステップでは、getinfo.sh スクリプトに eth0 ネットワークインターフェイスの IP アドレスを取得する関数を追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の関数を追加します。
## 関数:eth0 の IP アドレスを取得する ip=$(ip addr show eth0 | awk '/inet / {print $2}' | sed 's|/.*||')この関数は、
ipコマンドを使って eth0 ネットワークインターフェイスの IP アドレスを取得し、その後awkとsedを使って IP アドレスを抽出します。スクリプトの変更を保存します。
システム情報を出力する
この最後のステップでは、getinfo.sh スクリプトにシステム情報を表示する出力セクションを追加します。
テキストエディタで
getinfo.shスクリプトを開きます。スクリプトに以下の出力セクションを追加します。
## 情報を出力する echo "cpu num: $cpu_num" echo "memory total: $memory_total G" echo "memory free: $memory_free M" echo "disk size: $disk_size" echo "system bit: $system_bit" echo "process: $((process - 1))" echo "software num: $software_num" echo "ip: $ip"このセクションは、
echoコマンドを使って必要な形式でシステム情報を表示します。スクリプトの変更を保存します。
おめでとうございます!これで getinfo.sh スクリプトの作成が完了しました。ターミナルで以下のコマンドを実行することでスクリプトを実行できます。
sh getinfo.sh
スクリプトはプロジェクト要件で指定されたシステム情報を出力します。
## 例
cpu num: 8
memory total: 30 G
memory free: 10867 M
disk size: 20G
system bit: 64
process: 40
software num: 1389
ip: 1.32.X.X
まとめ
おめでとうございます!このプロジェクトを完了しました。スキルを向上させるために、LabEx でさらに多くの実験を行って練習できます。



