ファイルの先頭や末尾を取り出すコマンド(headとtail)について(tailコマンドとファイル末尾追跡)
「ファイルの先頭や末尾を取り出すコマンド(headとtail)について(テスト用データの準備とheadコマンド)」の続き。
以下は同記事の見出し「テスト用データの準備」でテスト用のデータファイルを作成した状態での作業例となる。
tail
tailコマンドはファイルの末尾から処理を行う以外はheadと同様の使い方と動作で、オプションを付けないと末尾10行が出力される。(行数指定) $ tail -n 2 num.txt 9 10 (バイト数指定・下の例では3つの文字と2つの改行で5バイト) $ tail -c 5 num.txt 9 10 (複数のファイル・ファイル名表示あり) $ tail -n 2 num.txt num2.txt ==> num.txt <== 9 10 ==> num2.txt <== 19 20 (複数のファイル・ファイル名表示なし) $ tail -q -n 2 num.txt num2.txt 9 10 19 20
先頭からみた指定行/バイト数目から末尾までを出力する
-nオプションで行数指定を行う際に「+」付きで行数を指定すると、先頭からみた[指定した数]行目から末尾までを出力する。$ tail -n +7 num.txt 7 8 9 10
この指定形式はバイト数指定(-cオプション)でも使用できる(先頭からみた指定バイト目から末尾までが得られる)。
ファイルを監視して常に末尾を表示する
tailにはheadとは違った使い方があり、--follow(-f)オプションを付けて実行すると、Ctrl+Cを押すなどして終了するまでの間そのファイルを監視し続けて、データが末尾に追記されると、自動的に新しい末尾の部分に表示が切り替わる。tailがファイルを監視しているときに対象ファイルが別名へ変更されたとき、-fもしくは--follow=descriptorの指定ではそのまま監視状態が続くが、--follow=nameの場合は元のパス名でアクセスできなくなるとメッセージが出て、その後で再び対象ファイルが現れたときにこれが開かれて終端の追跡が再開される。
--follow=nameオプションに--retryオプションを追加するか、代わりに-Fオプション(--follow=name --retryと等価)を付けると、対象のファイルが無い状態でも監視が開始できる(ファイルが現れたタイミングで終端の追跡が開始され、表示が切り替わる)。
使用したバージョン:
- coreutils 8.21