Linux入門:catコマンドとtacコマンドの実用的な使い方を徹底解説
本記事は「Linux Tips & Tricks」シリーズの一篇です。今回は、Linuxで最も使用頻度が高いcatコマンドと、その名のとおり「cat」を逆から綴ったtacコマンド(ファイルの内容を末尾行から先頭行へ逆順に出力する)について、実際のコマンド例を交えながら基本的な使い方をわかりやすく解説します。
Linuxにおけるcatコマンドの基本的な使い方
catは「Concatenate(連結する)」の略称で、*nix系システムにおいて最もよく利用されるコマンドの一つです。もっとも基本的な用途は、ファイルを読み込んで標準出力(stdout)に表示すること、すなわちターミナル上にファイルの中身を出力することです。
# cat file.txt
catのもう一つの使い方は、複数のファイルを読み込んで連結し、結果をまとめて画面に表示することです。以下の例のように記述します。
# cat file1.txt file2.txt file3.txt
さらに、Linuxのリダイレクト演算子">"を使えば、複数のファイルを1つのファイルに結合(連結)することもできます。
# cat file1.txt file2.txt file3.txt > file-all.txt
追記用リダイレクト(>>)を使用すれば、新しいファイルの内容を既存のfile-all.txtの末尾に追加できます。
# cat file4.txt >> file-all.txt
catコマンドは、ファイルの内容を新しいファイルへコピーする用途にも使えます。コピー先のファイルには任意の名前を付けることが可能です。たとえば、現在のディレクトリにあるファイルを/tmp/ディレクトリへコピーする場合は次のようにします。
# cat file1.txt > /tmp/file1.txt
コピー時に名前を変更することもできます。以下は、現在の場所から/tmp/ディレクトリへコピーしつつ、ファイル名を変更する例です。
# cat file1.txt > /tmp/newfile.cfg
やや知られていませんが、catコマンドは次のような構文で新しいファイルを作成することもできます。入力が終わったらCTRL+Dキーを押せば、内容が保存されてエディットモードが終了します。
# cat > new_file.txt
空行を含むすべての出力行に行番号を付けたい場合は、-nオプションを使用します。
# cat -n file-all.txt
一方、空行以外の行にのみ行番号を表示したい場合は、-bオプションを使います。
# cat -b file-all.txt
catコマンドについてさらに詳しく知りたい方は、「13 Useful 'cat' Command Examples in Linux(便利なcatコマンド13選)」の記事もぜひ参考にしてください。
tacコマンドの使い方を学ぼう
一方、*nix系システムではあまり知られておらず、使用頻度も低めなのがtacコマンドです。tacは、その名前自体が「cat」を逆から綴ったものであるとおり、catコマンドの逆バージョンともいえるコマンドです。ファイルの各行を、最終行から先頭行に向かって標準出力へ表示します。
# tac file-all.txt
このコマンドの重要なオプションの一つが-s(--separator)スイッチです。ファイル内の特定の文字列やキーワードを目印として、内容を区切って出力することができます。
# tac file-all.txt --separator "two"
tacコマンドのもう一つの重要な活用法が、ログファイルのデバッグです。ログの時系列を逆転させて表示できるため、新しいログエントリから順に確認したい場合に非常に役立ちます。
$ tac /var/log/auth.log または末尾の数行だけを逆順に表示する場合 $ tail /var/log/auth.log | tac
実行結果サンプル
tecmint@tecmint ~ $ tac /var/log/auth.log pr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session closed for user root Apr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:00:01 tecmint CRON[17434]: pam_unix(cron:session): session closed for user root ....
tecmint@tecmint ~ $ tail /var/log/auth.log | tac Apr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session closed for user root Apr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:00:01 tecmint CRON[17434]: pam_unix(cron:session): session closed for user root Apr 6 16:00:01 tecmint CRON[17434]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 15:55:02 tecmint CRON[17194]: pam_unix(cron:session): session closed for user root Apr 6 15:55:01 tecmint CRON[17195]: pam_unix(cron:session): session closed for user root ...
catコマンドと同様に、tacもテキストファイルの操作において優れた働きをします。ただし、それ以外の種類のファイル、特にバイナリファイルや、1行目に実行プログラムが記述されているスクリプトファイルなどに対しては使用を避けるべき点に注意しましょう。
-
実用的な5つの例で学ぶBashスクリプト入門チュートリアル
Unix SedやUnix Awkシリーズと同様に、本シリーズではBashスクリプティングに関する記事を複数回にわたって公開します。実用的なサンプルを交えながら、Bashスクリプティングのテクニックを幅広く解説していきます。 シェルとは、ユーザーが入力したコマンドを解釈して実行するプログラムです。コマンドはユーザーが直接入力するか、「シェルスクリプト」と呼ばれるファイルから読み込まれます。 ユーザーからの入力を直接読み取る場合、そのシェルは対話型(インタラクティブ)シェルと呼ばれます。 一方、ファイルからコマンドを読み込んで実行する場合は非対話型(ノンインタラクティブ)シェルと呼ばれます。この
-
Unixの「ls」コマンド徹底活用ガイド:効率的なファイル管理に役立つ15の実践例
Unixユーザーやシステム管理者にとって、「ls」は欠かせない基本コマンドです。1日に10回でも100回でも使う、たった2文字のコマンドですが、そのオプションを使いこなせるようになると、コマンドラインでの作業が格段に快適になります。 本記事では、強力なlsコマンドの実践的な使い方を15個の例に分けて解説します。 1. 最後に編集したファイルを開く(ls -t) 現在のディレクトリで最後に編集したファイルを素早く開くには、ls・head・viを組み合わせます。 ls -tはファイルを更新日時順に並べ替え、最も新しく編集されたファイルを先頭に表示します。head -1がその先頭行(=最新ファイル