今回はLinuxのコマンド「tee」について解説します。
teeの基本的な動作
teeコマンドは「標準入力を画面(コンソール)に表示しながら」「ファイルも保存する」コマンドです。
- $ ls | tee sample.txt
これで現在のディレクトリの内容をsample.txtというテキストファイルに保存しつつ、その内容(lsの出力)を画面に表示できます。
echoで以下のようにやることも考えられます。
- echo "$(ls)" > sample.txt
あるいは
- ls > sample.txt
echoでやる場合は中身を「" "」で囲む必要があります。
これはダブルクォーテーションがない場合、シェルはそのリストに含まれる改行やタブを「ただの区切り文字」とみなし、すべて半角スペースに置き換えて echo に渡してしまうからです。
改行の情報が消えてしまいます。
ただこれも問題があってファイル名に特殊な文字(スペースなど)がある場合、echo だと表示が崩れたり、意図しない挙動をしたりすることがあります。
またファイル数が多い場合、コマンドラインの長さ制限に引っかかってエラーになることもあります。
そこで「tee」コマンドを使えばこれらのデメリットがなくなるので、簡単じゃない文字列とかファイルの中身を、コマンドで直接リダイレクト(>)するか、「tee」コマンドを使うようにしたほうが良いでしょう。
teeの使いどころ1:長い処理のログを表示しながら見守る
プログラムのインストールや重い計算をする際、画面でエラーが出ていないか見守りつつ、後で読み返せるようにログを残したい場合にteeコマンドを使います。
teeの使いどころ2:管理者権限でファイルを書き換える
- sudo echo "中身" > sample2.txt
このコマンドは"中身"をsample2.txtというファイルに管理者権限で書き込みたいときに書きがちですが、エラーになります。
echoには管理者権限が付与されますが、リダイレクトには付与されないので、書き込みできないわけです。
- echo "中身" | sudo tee sample2.txt
これを上のようにteeで書けば、ちゃんと管理者権限の必要なファイルの作成や書き換えができます。
teeで追記したいときはteeのあとに「-a」オプションをつけてください。
まとめ
teeコマンドは「ファイルをパイプで受け取って」「画面に表示しつつ」「内容を保存する」コマンドです。
管理者権限でファイルを書き換える、しかもそれがあまり細かい情報じゃないときに便利です。
まあ細かい修正は「sudo nano ファイル名」でnanoエディタ使って修正してください。
[PR]Linuxは中古パソコンに入れて色々試すとよく覚えます。
中古パソコンのネット通販大手の「Qualit」と「PC next」がおすすめです。
[PR終わり]