tee を使った出力の追記
デフォルトでは、tee コマンドは使用するたびに対象のファイルを上書きします。しかし、多くのシナリオでは、既存のファイルの内容を置き換えるのではなく、新しい情報を追加したいことがあります。このような場合に -a(追加)オプションが便利です。
追加オプションの理解
まだプロジェクトディレクトリにいない場合は、移動しましょう。
cd /home/labex/project
まず、システム情報を含むファイルを作成しましょう。
uname -a | tee system_info.log
このコマンドは、システム情報をターミナルに表示し、system_info.log に保存します。出力は次のようになります(出力は環境によって異なります)。
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
では、ファイルの内容を確認しましょう。
cat system_info.log
同じシステム情報が表示されるはずです。
ファイルに情報を追加する
では、-a オプションを使用して、このファイルにさらに情報を追加しましょう。
echo "Date and time: $(date)" | tee -a system_info.log
これにより、次のような内容が表示されます。
Date and time: Wed May 3 14:22:34 UTC 2023
-a フラグは、tee に対して、出力をファイルに上書きするのではなく追加するよう指示します。
再度、ファイルの内容を確認しましょう。
cat system_info.log
これで、システム情報と日付の両方が表示されるはずです。
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
さらに情報を追加する
ログファイルにさらに情報を追加しましょう。
echo "Disk usage:" | tee -a system_info.log
df -h | tee -a system_info.log
これにより、ディスク使用状況の情報が表示され、ログファイルに追加されます。出力はシステムによって異なりますが、次のようになるかもしれません。
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
再度、ログファイルの内容を確認しましょう。
cat system_info.log
これで、追加したすべての情報が表示されるはずです。
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
コマンド構造の理解
tee を使用して追加するための構文は次の通りです。
command | tee -a filename
ここで、
command は出力を生成する任意のコマンドです。
|(パイプ)はコマンドの出力を tee に送ります。
tee はコマンド自体です。
-a は、ファイルを上書きするのではなく追加するためのオプションです。
filename は出力が追加されるファイルの名前です。
このアプローチは、以下の場合に特に有用です。
- 時間の経過とともにログファイルを構築する
- 複数のコマンドの出力を単一のファイルにキャプチャする
- システムの状態や操作の記録を維持する