topコマンドはシステム情報やプロセスを対話的に表示できます。この記事は以下のtopコマンドについての補足的な記事になります。
この記事では、topコマンドのコマンドラインオプションについてと、特にその中のバッチモードについてを簡単に紹介します。また、さらにインタラクティブコマンドで少し特殊なYコマンドについても紹介します。この記事で利用しているtopコマンドはprocps-ng v3.3.16のものとなります。
コマンドラインオプション
topコマンドには様々なコマンドラインオプションがあります。多くのオプションは対話的な操作を行うコマンドと機能的に同じものがあります。例えば、コマンドラインオプションには以下のようなものがあります。
-h : ヘルプ
-b : バッチモード
-c : コマンドライン/プログラム名の切り替え
-d : 更新間隔の設定 引数は少数可(単位は秒) 例)10.1
-E : メモリのスケールを変更 例) k m g t p e
-H : タスク表示/スレッド表示の切り替え
-i : アイドル状態の行を表示
-n : 表示の更新回数の制限
-o : ソートフィールドの変更 (+,-を利用して、ソート方向を決定 +は昇順,-は降順)
-O : -oオプションで利用できるフィールドの表示
-p : PID監視モード (-pN1 -pN2 ... または -pN1,N2,N3)
-s : セキュアモード(一部の機能が制限されるモード)
-c : 時間を累積モード(終了した子プロセスの時間を親プロセスに加算)に変更
-u | -U : ユーザフィルタモード(-U number or name)
-w : 出力幅を変更 (-bバッチモードと併用)(COLUMNSとLINESの環境変数を使用)(-w numberで行の数を指定)
-1 : マルチCPUの情報を1行でまとめた表示/個々のCPU情報での表示の切り替え
セキュアモード
-sオプションを用いると、topはセキュアモードになります。これは、一部の機能が制限される機能になります。例えば、セキュアモードで起動したtopは、例えば、インタラクティブコマンド'k'(タスクキル)やインタラクティブコマンド'r'(nice値の変更)が利用できなくなります。
バッチモード
topコマンドの動作を非対話的に操作するオプションとして、バッチモードがあります。このバッチモードはtopコマンドの出力の加工、ファイル出力を行うのに便利です。
バッチモードは-bオプションで利用できます。-bオプション単体で利用するとtopの更新が行われるたびにtopの画面の表示が出力されます。1回や3回表示したいなどの場合は-nオプションで表示の回数を指定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ top -b -n1 | head -n15 top - 21:30:47 up 49 min, 1 user, load average: 0.02, 0.14, 0.16 Tasks: 219 total, 1 running, 218 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.6 us, 2.8 sy, 0.0 ni, 90.3 id, 0.0 wa, 0.0 hi, 1.4 si, 0.0 st MiB Mem : 1986.6 total, 241.9 free, 677.2 used, 1067.6 buff/cache MiB Swap: 448.5 total, 447.7 free, 0.8 used. 1118.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 958 ubuntu 20 0 1129568 68152 45936 S 5.6 3.4 0:13.06 Xorg 1664 ubuntu 20 0 5269748 346428 128816 S 5.6 17.0 0:32.03 gnome-shell 2081 ubuntu 20 0 967164 52856 39212 S 5.6 2.6 0:09.89 gnome-terminal- 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.20 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd |
バッチモードではtopの設定が適用した状態で利用できます。デフォルトのtopコマンドの設定を変更したくないため、ここでは、topのシンボリックリンクファイルを作成し、topの設定ファイルを作成し、そのシンボリックリンクファイルからtopを実行してみます。
topの設定ファイルはtopのプログラム名を用いて作成され、また、プログラム名で適用される設定ファイルが決まります。
設定ファイルを用いてバッチモードを利用する場合、topのヘッダ情報を削除したり、フィルタを適用した状態の出力等ができます。
設定ファイルの作成はtopの画面でのインタラクティブコマンドの'W'でできます。例えば、通常のモードでtopを起動して、インタラクティブコマンドの'l','t','m'で情報を切り替えていくとヘッダ部分を削除した状態にでき、その状態を設定ファイルに保存するとバッチモードで利用した場合でもヘッダ部分を削除された状態で表示できます。
topのシンボリックリンクファイルの作成と実行
1 2 3 4 |
$ which top /usr/bin/top $ ln -s /usr/bin/top batchtop && sudo chmod 755 batchtop $ ./batchtop |
設定ファイル作成後(1秒更新でpid=1は基本的にinitプロセス)
1 2 3 4 5 6 7 8 9 10 11 12 |
$ ./batchtop -b -n3 -d1 -p 1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.31 systemd PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.31 systemd PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.31 systemd |
表のヘッダ部分や空行の削除を行いたい場合はsedコマンド等が便利です。
表のヘッダ部分と空行の削除
1 2 3 4 5 6 |
$ ./batchtop -b -n5 -d1 -p 1 | sed '/PID/d;/^$/d' 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.35 systemd 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.35 systemd 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.35 systemd 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.35 systemd 1 root 20 0 167672 11572 8352 S 0.0 0.6 0:03.35 systemd |
Yコマンドについて
Yコマンドを利用する簡単な例
topコマンドの対話的なコマンドに、Yコマンドがあります。これは事前に設定の準備が必要ですが、topの画面でコマンド出力の表示やファイルの表示を行うことができます。
設定ファイルは対話的なコマンドでWコマンドが利用して作成できます(例えば、私の環境では~/.config/procps/toprcに保存されます)。そのファイルを利用し、例えば、以下のように末尾に追記することで、
~/.config/procps/toprc
1 2 3 |
...<topで保存された何行かの設定> file memo file /home/ubuntu/memo.txt |
/home/ubuntu/memo.txt
1 2 3 |
Test MEMO top Command Test |
Yコマンドで以下のような表示を行うことができます。Yコマンドを利用すると、始めにpidについて尋ねられ、次に何の表示を行うかのオプションの選択が尋ねられます。例えば、上の例のように追加した場合は'memo file'という名前が表示されます。この'memo file'を選択すると指定したファイルの内容が表示されます。
pidの選択(デフォルトは先頭行、この例ではpidは利用しません)
オプションの選択
ファイルの内容の表示
設定ファイルの記入方法の構文
記入方法の構文
1 |
<type> <name> <fmts> |
区切り文字がタブ文字であることに注意しつつ、それぞれの意味は
<type>: 'file' か 'pipe' の文字列
<name>: 選択画面で表示するときのオプションの名前
<fmts>: <type>が'file'の場合はファイルパスで、<type>が'pipe'の場合はコマンド
になります。
プロセスIDを利用した例
Yコマンドを利用するとき、プロセスIDがパラメータとして利用できます。プロセスIDを利用したいは'%d'の指定子を用います。'%d'の指定子に指定されたプロセスIDが入ります。この指定子は、例えば、プロセスのステータスを表示したい場合に/proc/<プロセスID>/statusを表示したい場合に利用できます。
例として、~/.config/procps/toprcに以下のように追記します。
~/.config/procps/toprc
1 2 3 4 |
...<topで保存された何行かの設定> file memo file /home/ubuntu/memo.txt pipe pid state cat /proc/%d/status | awk '/^Name/;/^Umask/;/^State/;/id:/' | expand - |
その後、オプションで選択を行うと以下のように表示できます。
表示結果
ここで、awkコマンドは表示したい部分のフィルタを行っています。expandコマンドはタブ文字をスペースに変換しています。
補足として、expandコマンドがない場合は、以下のように表示結果としてタブ文字が'^I'のような文字として表示され、少々見づらい感じになります。
expandコマンドがない場合