カーネル6.4.0を使用してLinuxシステムをカスタマイズしていますが、奇妙な問題が見つかりました。実行top > a.txt
後に実行ウィンドウを開いてみると何度も試した結果であることcat a.txt
がわかりますが、他のLinuxシステムではこのような問題は発生しません。他のLinuxシステムでは、このコマンドはコマンドの結果を一度だけ表示します。なぜか分からないの?cat a.txt
top
cat
top
# top > a.txt
# cat a.txt
# ls /usr/bin/top -ltr
lrwxrwxrwx 1 1000 1000 17 Aug 23 02:34 /usr/bin/top -> ../../bin/busybox
次に追加top type
:
# type top
top is /usr/bin/top
答え1
一部top
の実装(OpenBSDや一部のLinuxシステムでも可能)は、出力が端末に送信されるのか、端末以外(パイプやファイル)に送信されるのかを検出し、それに応じて動作を変更します。出力が端末に到達すると、ユーティリティは対話モードになり、ユーザーの入力を受け入れてディスプレイを定期的に更新します。他の場所に出力する場合はtop
非対話型モードで実行され、デフォルトでは1つの結果「画面」のみ出力してから終了します。
Busyboxに含まれる実装はtop
これを実行せず、出力がファイルまたはパイプに移動しても画面の更新を出力し続けます。各更新の前に画面を消去する一連の制御文字があるため、cat
最終画面の更新を表示する必要があります(端末が制御文字を解釈しない限り)。一方、エディタでファイルを開くか、less
複数のコマンドを使用してその内容を表示する場合は、連続画面を更新します。これは、Linuxシステムで時々発見されるprocps-ng
バリアントの場合にも当てはまるようです。top
top
Busyboxに単一画面の出力のみをファイルとして出力させるには、次のようにします。
top -n 1 >file
についてはなぜtop
これは本当です。これは、さまざまな方法でツールを実装するさまざまな実装開発者によって異なります。 Busyboxでこのユーティリティを実装するときに行った決定に関する詳細については、top
Busyboxに関するフォーラムまたはメーリングリストにお問い合わせください。