
教育的ではないと思われる説明を3 つほど見つけたのでtee
、Linux 初心者向けに、このコマンドについて、シンプルで一般的な、段階的な (できれば) 説明をお願いしたいと思います。
パイプ経由、コマンドの stdout、または特定のファイルに直接使用することは理解していますが、コマンドがこのコンテンツで実際に何を行うのか、いつ役立つのかがわからないと思います。
そこで私は、初心者にわかりやすく段階的に説明できる教訓的な説明を見つけたいと思い、次のように質問します。
コマンドは、コマンドの stdout またはファイル自体でどのように機能しますか?
なぜ標準入力を読み込むと言うのが一般的なのでしょうか
tee
? つまり、 とするとls -l
、tee
構文ls -l
自体を読み込むのではなく、セッションに出力された stdout を読み込むことになります。
tee
また、よろしければ、日々の仕事の中で、どのようなときにとても役立つのか、実例を教えていただけますか。
答え1
tee
私のシステムのマニュアルから:
tee ユーティリティは標準入力を標準出力にコピーし、0 個以上のファイルにコピーを作成します。出力はバッファリングされません。
したがって、標準入力から読み取って標準出力にコピーし、その際にストリームを 1 つまたは複数のファイルに複製します。
次のパイプラインでは、tee
パイプラインの最初のコマンドの出力を取得し、それを標準出力 (端末) にコピーするとともに、そのコピーをファイル 、 、 にも作成one
しtwo
ますthree
。
$ somecommand | tee one two three
tee
sudo
には多くの用途がありますが、その 1 つは、出力を root が所有するファイルにリダイレクトするためにと組み合わせることです。
$ somecommand | sudo tee /root/somefile >/dev/null
以下はないリダイレクトは権限のないユーザーとして行われるため、動作しています (somecommand
望ましくない可能性がある root としても実行されます)。
$ sudo somecommand >/root/somefile
固定の行セットを一度に多くのファイルに追加する人工的な例 (すべてのユーザー~/.profile
ファイルに対して、*
ユーザー名に展開され、展開されたコマンド ラインがシェルで処理できないほど長くならないことを前提としています)。
$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH
実際の使用例tee
:
time doas box-build.sh 2>&1 | tee build.out | grep '^=*>'
これは私がOpenBSDベースシステムを構築しているところですdoas
。OpenBSDの「同等物」sudo
はbox-build.sh
ビルドを実行する小さなシェル スクリプトです (基本的にはcd /usr/src && make obj && make build
)。エラーや警告を含むビルド プロセス全体の出力を保存したいのですが、すべてをターミナルに吐き出すのは望ましくありません。このため、すべてtee
を に保存しbuild.out
、grep
ターミナルでプロセスのどこにいるのかというヒントだけを取得するために を使用します。
こちらの他の質問もご覧ください。ティー鬼ごっこ。