はじめに
ユーザーが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