サイトアイコン スグブログ

【Linux】teeコマンドの使い方!オプションや標準エラーもまとめます

テーブル

Linuxサーバーのteeコマンドの具体的な使い方やオプションについて記述します。

コマンドの結果をファイルに書き込みする事は、リダイレクトでできますが、標準出力にも表示して確認したいといった事はないでしょうか?

teeコマンドを使用すると、コマンドの結果を標準出力表示とファイルに書き込みしてくれます。

またteeコマンドでエラーのメッセージが、ファイルに出力されないといって困ってはいないでしょうか?

teeコマンドでエラーのメッセージも、ファイルに出力できるようにする方法もあります。

Linuxのteeコマンドについて困っている人は、この記事を読めば解決できます。

筆者はWindowsサーバーやLinuxサーバーの運用構築を11年間以上おこなってきました。その経験を元に知識を公開していきます!

Linuxサーバーのteeコマンドの使い方

teeコマンドの使い方

Linuxサーバーのteeコマンドの仕組みとしては、標準入力から受けとった文字列を標準出力(ディスプレイ)とファイルに記述する仕組みです。

Linuxサーバーのteeコマンドの使い方の基礎を以下に示しておきます。

コマンド | tee オプション ファイル名

コマンドの結果とエラー内容(エラーがあれば)を標準出力に表示します。それと結果のみ(エラーメッセージは含まない)ファイルに記述します。

結果とエラー内容のどちらも、標準出力とファイルに記述したい場合はリダイレクトを使用します。

コマンド 2>&1 | tee オプション ファイル名

リダイレクトの「2>&1」は、結果とエラーどちらもファイルに記述するという意味です。

実践:teeコマンドの使用例

では実際にteeコマンドを使用して、ディスプレイとファイルにコマンド結果とエラーメッセージが表示されるか確認します。

まずは「exist-file」ファイルを作成します。

Linuxのコマンドでファイルを作成する方法は以下の記事を参照下さい

touch exist-file

作成できたかlsコマンドで確認します。

[root@localhost ~]# ls | grep exist-file
exist-file

ファイルが作成されたことを確認できました。

ではlsコマンドでファイル名を表示した内容を、teeコマンドで確認します。

ls exist-file | tee tee.txt

teeコマンドで「tee.txt」ファイルに書き込みしてみます。

[root@localhost ~]# ls exist-file | tee tee.txt
exist-file

標準出力に結果が表示されています。ファイルに書き込みされているか確認します。

[root@localhost ~]# cat tee.txt
exist-file

コマンド結果が標準出力ファイルで確認できました!

では存在しないファイルを指定して、エラーを出してみます。

[root@localhost ~]# ls no-exist-file | tee tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

エラーメッセージが標準出力に表示されました。ファイルを確認してみます。

[root@localhost ~]# cat tee.txt
[root@localhost ~]#

エラーメッセージはファイルには記述されていません。

先程説明したようにエラーメッセージもファイルに記述したい場合リダイレクトを使用します。

[root@localhost ~]# ls no-exist-file 2>&1 | tee tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

先程と同様にエラーメッセージが標準出力に表示されました。ファイルを確認してみます。

[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

コマンド結果がエラーでも、標準出力とファイルで確認できました!

teeコマンドのオプションについて

teeコマンドにもオプションがあるのでまとめておきます。

teeコマンドオプション効果
-a上書きではなく追記する
-i割り込みシグナルを無視する
teeコマンドオプション一覧

teeコマンドで上書きではなく追記する

デフォルトのteeコマンドではファイルは上書きしてしまいます。

今までのログを残したく追記したい場合はaオプションをつけましょう!

先程から「tee.txt」ファイルは上書きされていましたが、aオプションをつけてどうなるか確認します。

まずは現状の「tee.txt」ファイルの内容を確認しておきます。

[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

先程のメッセージが残っています。ではteeコマンドで表示とファイル追記してみます。

[root@localhost ~]# ls exist-file 2>&1 | tee -a tee.txt
exist-file

[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file

ファイルに上書きではなく追記されている事がわかります。

エラーメッセージの方も試してみます。

[root@localhost ~]# ls no-exist-file 2>&1 | tee -a tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

エラーメッセージ上書きではなく、追記されています。

teeコマンドで複数のファイルに追記する方法

teeコマンド複数のファイルに追記する事も可能です。

コマンド | tee ファイル名1 ファイル名2・・・

複数のファイルに追記したい場合は、ファイルをスペース区切りで指定していく事です。

では複数のファイルに追記していきます。

[root@localhost ~]# ls exist-file 2>&1 | tee -a tee.txt tee2.txt tee3.txt
exist-file

ファイルの内容を確認します。

[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file

[root@localhost ~]# cat tee2.txt
exist-file

[root@localhost ~]# cat tee3.txt
exist-file

「tee.txt」ファイルにはコマンドの結果が末行に追記されています。その他複数のファイルにも追記されています。

エラーメッセージでも試してみます。

[root@localhost ~]# ls no-exist-file 2>&1 | tee -a tee.txt tee2.txt tee3.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

ファイルをそれぞれ確認します。

[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

[root@localhost ~]# cat tee2.txt
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

[root@localhost ~]# cat tee3.txt
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません

全てのファイルの末行に、エラーメッセージ追記されています。

まとめ:Linuxのteeコマンドの使い方

Linuxサーバーのteeは、コマンドの結果を標準出力とファイルに記述できる。

teeコマンドの使い方の基礎を以下に示しておきます。

コマンド | tee オプション ファイル名

コマンドの結果がエラーの場合は、ファイルには書き込まれないので注意する。

エラーの場合も標準出力とファイルに記述したい場合は、「2>&1」とリダイレクトをつけます。

コマンド 2>&1 | tee オプション ファイル名

teeコマンドにもオプションがありました。

teeコマンドオプション効果
-a上書きではなく追記する
-i割り込みシグナルを無視する
teeコマンドオプション一覧

teeコマンドは複数のファイルに追記する事も可能でした。

コマンド | tee ファイル名1 ファイル名2・・・

Linuxのteeコマンドでエラーもファイルに追記したい。履歴を残したいので上書きではなく追記にしたい事から以下のコマンドを推奨します。

コマンド 2>&1 | tee -a ファイル名
モバイルバージョンを終了