はじめに
ユーザーがLinux対話型シェルでコマンドを実行すると、出力がテキスト端末に表示されます。ただし、パイプラインに接続された追加のシェルコマンドを使用して、この動作を変更する方法があります。
このチュートリアルでは、Linuxでteeコマンドを使用してコマンドの出力を管理する方法を学習します。

前提条件
- Linuxを実行しているシステム
- コマンドラインまたはターミナルへのアクセス
- sudo特権
Linuxでteeコマンドは何をしますか?
ティー
コマンドは、標準入力(stdin)を読み取り、それを標準出力(stdout)と1つ以上のファイルの両方に書き込みます。 ティーコード>
通常はパイプラインの一部であり、任意の数のコマンドをその前後に配置できます。

Linuxでのteeコマンドと例
ティー
コマンドは、単独で、または追加のオプションとともに使用されます。次のセクションでは、使用可能なオプションをリストし、コマンドの使用例を示します。
基本的な使用法
tee
の基本的な構文 コマンドは次のとおりです:
[command] | tee [options] [filename]
以下の例は、 tee
の使用法を示しています ターミナルで同じ出力を提供しながら、ネットワークインターフェイスに関する情報を格納するファイルを作成するには:

catコマンドは、 tee
であることを確認します ifconfig
の出力を正常に書き込みました ファイルexample.txt
:

コマンドに使用するファイルがすでに存在する場合は、 tee
ファイルの以前の内容を上書きします。
指定されたファイルに追加
ファイルのコンテンツの上書きは、 tee
のデフォルトの動作です。 指図。引数-a
を使用します (または-追加
)コマンド出力をファイルの最後に追加します。
[command] | tee -a [filename]
たとえば、 echo
を使用します ファイルに1行のテキストを追加するコマンド:

cat
で追加が成功したことを確認します コマンド:

複数のファイルに書き込む
tee
を使用する その後に、同じ出力をそれぞれに書き込むための任意の数のファイルが続きます:
[command] | tee [options] [filename1] [filename2]...
次の例は、 echo
の出力の書き込みを示しています。 2つのファイルへのコマンド:

ls
コマンドは、 tee
であることを示しています 正常に作成されたファイルexample1.txt
およびexample2.txt
。
出力を非表示にする
tee
に伝えるには コマンド出力をファイルに保存し、ターミナル出力をスキップするには、次の構文を使用します。
[command] | tee [options] [filename] >/dev/null
次の例では、 tee
標準出力をスキップして、ネットワークインターフェイスデータを含むファイルを作成します:

あるコマンドの出力を別のコマンドにリダイレクトする
ティーコード>
パイプラインの最後のコマンドである必要はありません。これを使用して、出力を別のコマンドに転送します:
[command] | tee [options] [filename] | [command]
次の例では、 tee
ls
の出力を保存します example.txt
へのコマンド そして、そのファイルの内容をgrepコマンドに渡します。このコマンドは、「example」という単語のすべてのインスタンスを検索して表示します。

割り込みを無視する
tee
を有効にするには 前のコマンドが中断された後でも正しく終了するには、引数 -i
を追加します (または -ignore-interrupts
):
[command] | tee -i [filename]
次の例は、 tee
を示しています pingコマンドからの出力を書き込み、 ping
の後でもアクションを正常に完了します Ctrl + C
で中断されます :

Sudoでティーを使用する
tee
を有効にするには ルート所有のファイルまたは別のユーザーに属するファイルに書き込むには、 tee
の直前にsudoコマンドを配置します。 。
[command] | sudo tee [options] [filename]
以下の例は、ルート所有の sudoex.txt
への書き込みが失敗したことを示しています。 。 sudo
コマンドが追加されると、操作が完了します:

Vimエディターでのteeの使用
sudo
を使用せずにVimでルート所有のファイルを開いて編集した場合 コマンド、変更を保存しようとするとエラーが発生します:

このエラーを無効にするには、Vimに次のように入力します:
:w !sudo tee %

sudo
を入力した後 パスワード、Vimは警告を表示しますが、変更をファイルに書き込みます。
非パイプへの書き込みエラーの診断
tee
に指示するには プロセスが失敗したときにエラーメッセージを出力するには、 -p
を使用します 引数:
[command] | tee -p [filename]
tee -p
のデフォルトのアクション パイプへの書き込みエラーを検出するとすぐに終了してエラーメッセージを出力します。書き込みエラー時のコマンドの動作を変更するには、 -output-error
を使用します 引数の後に、動作を指定するモードが続きます:
[command] | tee --output-error=[mode] [filename]
4つの可能なモードがあります:
警告
–出力への書き込みエラーを診断します。-
warn-nopipe
–パイプ以外の出力への書き込みエラーを診断します。 終了
–出力への書き込みエラーで終了します。-
exit-nopipe
–パイプ以外の出力への書き込みエラーで終了します。
Bashスクリプトでteeコマンドを使用する
ティー
コマンドはbashスクリプトによく見られます。次の例を考えてみましょう:

上記のスクリプトは、「Hello World」メッセージを出力し、出力をログファイルに保存します。スクリプトを実行すると、 tmp
にログファイルが作成されます フォルダ。ログには、スクリプトの出力が含まれています:

ログファイルを見る
ログファイルへのスクリプト出力の書き込みは、通常、 >
を使用して実行されます。 演算子:
./testbash.sh > testbash.log
上記のコマンドはログファイルを作成しますが、標準出力には何も書き込みません。
tee
を使用する ログファイルを作成し、ターミナルで出力を確認するには:
./testbash.sh | tee testbash.log
ヘルプとバージョン情報を参照
tee
の現在のバージョンを確認する 次のように入力してコマンドを実行します:
tee --version
tee
に関する手順について コマンド構文と使用可能な引数については、コマンドのヘルプ引数を使用してください:
tee --help