「Linux標準教科書」の第5章は「基本的なコマンド2」です。
ここでは、主にテキストファイルを処理するのに便利なコマンドが記載されています。
その中で、touchコマンドとheadコマンド、tailコマンドの3つを勉強しましたので、私なりにまとめて紹介します。
「Linux標準教科書」を読んで分からなかったところは別で調べて、自分で分かるように付け足したりしてまとめましたので、「Linux標準教科書」の勉強の補助として私の記事を利用していただけると幸いです。
touchコマンド
touchコマンドは、ファイルのタイムスタンプを変更するコマンドで、存在しないファイル名で実行すると、その名前で0バイトの(空の)ファイルを作成します。
タイムスタンプとは、最終更新日時のことで、ls -lコマンドで見ることができます。
試しに、以前勉強用に作成したtestというファイルをls -lコマンドで見てみると、以下の通り表示されます。
■■■■■@●●●●●:~/LSTT$ ls -l test
-rw-rw-r-- 1 ■■■■■ ■■■■■ 0 11月 21 22:37 test
2行目の「11月 21 22:37」の部分がタイムスタンプです。
本来の用途はこのタイムスタンプの変更ですが、使用頻度としてはファイルの新規作成の方が高いようです。
touchコマンドの基本的な使い方は以下の通り。
■ファイルのタイムスタンプ(最終更新日時)を現在の日時に変更
$ touch ファイル名
■ファイルのタイムスタンプ(最終更新日時)を任意の日時に変更
$ touch -t ccyymmddhhmm.ss ファイル名
「ccyymmddhhmm.ss」は、年月日時分.秒のことで、
ccyyは年(touchコマンドでは、ccの部分もしくは、ccyyの部分が省略可)を、
mmは月を、
ddは日を、
hhは時を、
mmは分を、
.ssは秒(touchコマンドでは、.ssは省略可)
をあらわしています。
このため、2022年11月30日23時15分00秒でタイムスタンプで指定したい場合、以下のパターンで入力可能となります。
フル入力:202211302315.00
最小構成:11302315
年のcc部分なし:2211302315.00
年なし:11302315.00
秒なし:202211302315
■ファイルの作成(0バイトの空ファイルで)
$ touch ファイル名
タイムスタンプを変更する時のオプションなしの書式とまったく同じです。
間違えて存在しているファイル名を入力しないように注意しましょう。
試しに、上記で紹介したコマンドを全て使ってみます。
- touchコマンドでtouchtestというファイルを作成
- ls -lで更新日時を確認
- 少し時間を置いてからタイムスタンプを現在の日時に変更
- ls -lで更新日時を確認
- 2022年11月30日23時15分にタイムスタンプを変更
- ls -lで更新日時を確認
- 今度は、2022年12月25日13時19分にタイムスタンプを変更
- ls -lで更新日時を確認
という作業をしたのが、以下の画像です。
-tオプションを付けてタイムスタンプを過去と未来の2通りの変更を行いましたが、両方とも変更することができました。
headコマンド
headコマンドは、ファイルの先頭から指定した部分を表示(標準出力)します。
長い文章のファイルの先頭だけ見たいという時に使います。
■ファイルの先頭から10行分を表示(標準出力)する
$ head 内容を見たいファイル名
headコマンドは何もオプションを指定しないと、自動で先頭から10行分を表示(標準出力)してくれます。
■標準入力された内容を先頭から10行分表示する
また、以下の2つの書式をそれぞれ実行しても、headコマンドに標準入力された内容を先頭から10行分表示(標準出力)してくれます。
$ cat 内容を見たいファイル名 | head
$ cat 内容を見たいファイル名 | head -
いずれも、catコマンドの標準出力をパイプでheadコマンドに標準入力して、その内容の先頭から10行を表示することになります。
■ファイルの先頭から見たい行数分だけ表示(標準出力)する
$ head -n 見たい行数 内容を見たいファイル名
■ファイルの先頭から見たいバイト数分だけ表示(標準出力)する
$ head -c 見たいバイト数 内容を見たいファイル名
試しに、上記で紹介したコマンドを全て使ってみます。
まずは、以下の内容でFILEというファイルを作成しておきます。
行01
行02
行03
行04
行05
行06
行07
行08
行09
行10
行11
行12
行13
行14
行15
このファイルをheadコマンドで表示したのが、以下の画像です。
行数を指定していない上の3つはちゃんと10行づつ表示されています。
次で-nオプションを使って3行表示させています。
更に、-cオプションで12バイト分表示させています。
「バイト」とは、データのサイズを表す単位です。
Linuxで主流の文字コードであるUTF-8は、
半角英数字は1文字1バイト
半角カタカナは1文字3バイト
全角日本語は3~8バイト
となっています。
改行も1バイト分カウントされます。
「行」という文字で3バイト、数字と改行が1バイトづつで、1行につき6バイト。
-cオプションで指定したのが12バイトなので、2行分表示されたという訳です。
tailコマンド
tailコマンドは、ファイルの終わりから指定した部分を表示(標準出力)します。
長い文章のファイルの終わりの部分だけ見たいという時に使います。
■ファイルの終わりの部分から10行分を表示(標準出力)する
$ tail 内容を見たいファイル名
■標準入力された内容を終わりの部分から10行分表示する
$ cat 内容を見たいファイル名 | tail
$ cat 内容を見たいファイル名 | tail -
■ファイルの終わりの部分から見たい行数分だけ表示(標準出力)する
$ tail -n 見たい行数 内容を見たいファイル名
■ファイルの終わりの部分から見たいバイト数分だけ表示(標準出力)する
$ tail -c 見たいバイト数 内容を見たいファイル名
までは、先ほど紹介したheadコマンドのheadの部分がtailになっただけで、動作もheadコマンドが先頭からの表示だったのに対して終わりの部分からの表示に変わっただけです。
しかし、ログファイルなど、終わりの部分の内容がよく変わるファイルがあり、これらをリアルタイムで監視するのに便利なのが-fオプションです。
書式は以下の通り。
$ tail -f 内容を見たいファイル名
tailコマンドに-fオプションを付けて実行すると、Ctrl+Cキーを押さないかぎり、制御がシェルに戻りません。
headコマンドの時に作ったFILEファイルを使って、リアルタイム監視を試してみます。
- ターミナルを2つ起動して左右に並べて表示する
- 左側のターミナルでtailコマンドに-nオプションを付けて終わりの部分から5行分表示して、最終行が「行15」であることを確認
- 続けて、左側のターミナルでtailコマンドを-fオプションをつけて実行
(failコマンドが作動したままの状態になる) - 右のターミナルで以下のコマンドを実行して、FILEファイルの内容に「行16」を1行追加
$ echo 行16 >> FILE
という作業をしたのが、以下の画像です。
左側のターミナルでFILEファイルに1行、「行16」が追加されていることが確認できました。
Ctrl+Cキーで、tailコマンドを終了します。
まとめ
今回は、「Linux標準教科書」の第5章(基本的なコマンド2)の中から、touchコマンドとheadコマンド、tailコマンドの3つを勉強して、私なりにまとめて紹介しました。
この章では、主にテキストファイルを処理するのに便利なコマンドが紹介されています。
次回は、第5章の続きを紹介する予定です。
この記事は、「Linux標準教科書」を読んで分からなかったところは別で調べて、自分で分かるように付け足したりしてまとめています。
「Linux標準教科書」の勉強の補助として私の記事を利用していただけると幸いです。