ティーコマンドはどのように機能しますか?

ティーコマンドはどのように機能しますか?

教育的ではないと思われる説明を3 つほど見つけたのでtee、Linux 初心者向けに、このコマンドについて、シンプルで一般的な、段階的な (できれば) 説明をお願いしたいと思います。

パイプ経由、コマンドの stdout、または特定のファイルに直接使用することは理解していますが、コマンドがこのコンテンツで実際に何を行うのか、いつ役立つのかがわからないと思います。

そこで私は、初心者にわかりやすく段階的に説明できる教訓的な説明を見つけたいと思い、次のように質問します。

  1. コマンドは、コマンドの stdout またはファイル自体でどのように機能しますか?

  2. なぜ標準入力を読み込むと言うのが一般的なのでしょうかtee? つまり、 とするとls -ltee構文ls -l自体を読み込むのではなく、セッションに出力された stdout を読み込むことになります。

teeまた、よろしければ、日々の仕事の中で、どのようなときにとても役立つのか、実例を教えていただけますか。

答え1

tee私のシステムのマニュアルから:

tee ユーティリティは標準入力を標準出力にコピーし、0 個以上のファイルにコピーを作成します。出力はバッファリングされません。

したがって、標準入力から読み取って標準出力にコピーし、その際にストリームを 1 つまたは複数のファイルに複製します。

次のパイプラインでは、teeパイプラインの最初のコマンドの出力を取得し、それを標準出力 (端末) にコピーするとともに、そのコピーをファイル 、 、 にも作成onetwoますthree

$ somecommand | tee one two three

teesudoには多くの用途がありますが、その 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ベースシステムを構築しているところですdoasOpenBSDの「同等物」sudobox-build.shビルドを実行する小さなシェル スクリプトです (基本的にはcd /usr/src && make obj && make build)。エラーや警告を含むビルド プロセス全体の出力を保存したいのですが、すべてをターミナルに吐き出すのは望ましくありません。このため、すべてteeを に保存しbuild.outgrepターミナルでプロセスのどこにいるのかというヒントだけを取得するために を使用します。

こちらの他の質問もご覧ください。鬼ごっこ。

関連情報