Linux の time コマンド:コマンドの計測

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux の time コマンドを調べます。これは、コマンドやプログラムの実行時間を測定する強力なユーティリティです。TechInnovate の初級ソフトウェア開発者として、あなたは一連のデータ処理スクリプトを最適化する任務を与えられました。あなたのチームリードは、パフォーマンスのボトルネックを特定するために time コマンドを使用することを提案しました。この実践的な経験を通じて、コードの効率を評価して改善するために time をどのように使用するか学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/SystemInformationandMonitoringGroup -.-> linux/time("Command Timing") subgraph Lab Skills linux/time -.-> lab-219197{{"Linux の time コマンド:コマンドの計測"}} end

ファイル操作の計測

time コマンドは、コマンド実行中に消費されるリソースに関する洞察を提供する多用途のツールです。まずは、いくつかの簡単なファイル操作の計測から始めましょう。

まず、いくつかの内容を含むファイルを作成しましょう。

echo "This is a test file for TechInnovate's performance analysis." > test_file.txt

このコマンドは、現在のディレクトリに新しいファイル test_file.txt を作成し、指定されたテキストをその中に書き込みます。> 記号は、echo の出力をファイルにリダイレクトするために使用されます。

次に、このファイルを読み取る操作の計測を行いましょう。

time cat test_file.txt

ファイルの内容が表示された後、計測情報が表示されるはずです。出力は次のようになるかもしれません。

This is a test file for TechInnovate's performance analysis.
cat test_file.txt  0.00s user 0.00s system 85% cpu 0.003 total

これらの測定値の意味は次の通りです。

  • 0.00s user:プロセス内のユーザーモードコード(カーネル外)で費やされた CPU 時間。
  • 0.00s system:プロセス内のカーネルで費やされた CPU 時間。
  • 85% cpu:CPU 使用率の割合。
  • 0.003 total:コマンドが完了するまでの合計経過時間。

このような簡単な操作では、これらの時間は非常に短いです。システム負荷やその他の要因により、コマンドを実行するたびにわずかな変動が見られるかもしれません。

複雑なコマンドの計測

あなたのチームリードは、ログファイルを処理するスクリプトを提供しました。最適化のためのベースラインを取得するために、その実行時間を計測しましょう。

まず、簡単な処理スクリプトを作成しましょう。

cat << EOF > process_logs.sh
#!/bin/zsh
for i in {1..1000}; do
    echo "Processing log entry $i" >> output.log
done
sort output.log > sorted_output.log
uniq -c sorted_output.log > final_output.log
rm output.log sorted_output.log
EOF

chmod +x process_logs.sh

このスクリプトは次のことを行います。

  1. 1000 個のログエントリを生成するループを作成します。
  2. これらのエントリをソートします。
  3. 一意のエントリをカウントします。
  4. 中間ファイルを削除します。

chmod +x コマンドにより、スクリプトが実行可能になります。

次に、このスクリプトの実行時間を計測しましょう。

time./process_logs.sh

出力には、スクリプト全体の実行にかかった時間が表示されます。出力は次のようになるかもしれません。

./process_logs.sh  0.03s user 0.01s system 92% cpu 0.045 total

これらの数値は、システムのパフォーマンスによって異なりますが、最適化作業のためのベースラインを提供します。全体の時間がユーザーとシステムの時間の合計よりも高いことに注目してください。この差は、この場合ファイルの読み取りと書き込み操作である I/O 操作を示していることが多いです。

さまざまなコマンドでの time の使用

time コマンドがさまざまな種類の操作でどのように振る舞うかを調べましょう。これにより、さまざまなタスクの結果をどのように解釈するかをより良く理解できるようになります。

まず、CPU 集約的な操作の計測を行いましょう。

time echo {1..10000} | wc -w

このコマンドは数字のシーケンスを生成してそれを数えます。主に CPU に依存しています。

次に、I/O 集約的な操作の計測を行いましょう。

time find / -name "*.txt" 2> /dev/null

このコマンドは、ルートディレクトリからすべての.txtファイルを検索します。主に I/O に依存しています。

最後に、CPU と I/O の両方を含むコマンドの計測を行いましょう。

time sort -R /etc/passwd | head -n 5

このコマンドは、/etc/passwdファイルの内容をランダムにソートし、最初の 5 行を表示します。

これらのコマンドの出力を比較してください。CPU 集約的なタスクはユーザー時間が高い傾向があり、一方、I/O 集約的なタスクは、ユーザーとシステムの時間に比べて全体の時間が高い傾向があることに気付きます。

まとめ

この実験では、Linux の time コマンドを調べました。これは、コマンド実行の計測と最適化に不可欠なツールです。以下のことを学びました。

  1. ファイル操作のパフォーマンスを評価するための計測方法。
  2. 複雑なスクリプトの実行時間を測定する方法。
  3. さまざまなタイプの操作(CPU 集約的、I/O 集約的、混合的)に対する time の動作を比較する方法。

これらのスキルは、TechInnovate でのあなたの役割において、スクリプトの最適化とパフォーマンス分析を続ける際に非常に役立ちます。

コードを最適化する際には、以下のことを忘れないでください。

  • 予想外に長い実行時間を持つ操作を探します。
  • CPU 時間(ユーザー + システム)と全体の時間の両方を考慮します。
  • I/O に依存する操作の場合、全体の時間と CPU 時間の差を縮小することに焦点を当てます。
  • CPU に依存する操作の場合、ユーザー時間を削減することに焦点を当てます。

これらの技術を仕事で適用するにつれて、コードのパフォーマンスボトルネックを特定して解決する能力が向上します。