Linux / コマンド / cat - ファイル内容の表示と結合

catはファイルの内容を標準出力(通常は端末画面)へ送り、複数のファイルを順番に連結するコマンドです。短いテキストを素早く確認したり、ファイルを結合したりするときに便利ですが、長いファイルを読むときはlessコマンドによる閲覧が便利です。

この記事ではcatの基本的な文法と主なオプション、実際の使用例、関連コマンドとの違い、使用時の注意点について説明します。

名前はconcatenate(連結する)に由来します。引数なしで実行すると標準入力を読み込み、複数のファイルを指定すると指定した順序で内容を出力します。元のファイルは変更しませんが、シェルリダイレクションの対象を間違えるとファイルが空になることがあります。

基本的な文法

cat [オプション] [ファイル ...]

オプションや詳細な動作は実装やバージョンによって異なる場合があります。現在のシステムではcat --helpとman catでインストールされたコマンドの説明を確認してください。

catの基本的な使い方

ファイル内容を出力する

短い設定ファイルやログの断片を画面で確認します。

cat /etc/os-release

複数のファイルを続けて出力する

ファイルの間に区切り文字を自動で挿入しないので、必要な場合は別途追加します。

cat part-01.txt part-02.txt

新しいファイルに結合する

出力のリダイレクトで結果を保存します。入力ファイルと出力ファイルを同じパスに指定すると、シェルが先に出力ファイルを空にするため、使用しないでください。

cat chapter-1.txt chapter-2.txt > book.txt

標準出力の結果を確認する

catは入力ファイルの内容を順番通りにそのまま出力します。次は、サンプルとして2行作成して確認する例です。

printf 'one\ntwo\n' > sample.txt
cat sample.txt

例の出力:

one
two

catは長いファイルをページごとに止めないので、結果が画面を素早く通過することがあります。内容を確認するには、lessを使用してください。

主なオプション

オプション 説明
-n すべての出力行に行番号を付けます。
-b 空でない行にのみ番号を付け、-nより優先します。
-s 連続する空行を1行にまとめます。
-E 各行の末尾に$を表示します。
-T タブ文字を^Iで表示します。
-A -vET相当で、タブ・行末・制御文字などを可視化します。

実践的活用例

行番号と一緒に確認する

エラーメッセージの行番号と設定ファイルを照合する際に便利です。

cat -n app.conf

目に見えない文字を確認する

行末の空白やタブ、CRLF(復帰と改行の組み合わせ)の問題を調べるときは表示オプションを使用します。-A は日本語などの多バイト文字も別の表記にする場合があり、表示が変わっても元ファイルが壊れたとは限りません。-b や -s が扱う空行は、文字のない行です。空白やタブだけの行は空行として省かれません。

cat -A script.sh

標準入力をファイルに保存する

通常の端末では入力を終え、空の行で Ctrl+D を押すとEOF(入力の終端)として読み取りが終了します。> は実行前に既存の memo.txt を空にするため、まだない練習用の名前を使ってください。編集には専用のエディタが適しています。

cat > memo.txt

catと関連コマンドの比較

コマンド 主な役割 適した状況
cat 出力・結合 短いファイルとパイプ入力
less 対話型ページビュー 長いファイルの探索
tac 行の順序を逆にする 最新の行を先に確認
paste 行単位で結合 列形式でファイルを結合

使用する際の注意点

大きなファイルはlessで確認する

大容量ファイルをターミナルにすべて出力すると、画面とターミナルバッファを不必要に消費します。

入力ファイル自身へリダイレクトしない

cat file > fileはcatが読む前にシェルがファイルを空にすることがあります。

バイナリファイルの出力は避けてください

制御バイトが端末表示を乱す可能性があるため、fileで種類を確認する方法や、hexdump、またはxxdを使用してください。

FAQ

catはファイルの内容を変更しますか?

いいえ。基本的な動作は読み込んで標準出力に送ることです。ただし、リダイレクト先はシェルが作成するか、上書きすることがあります。

複数のファイル間に空行が自動で入りますか?

いいえ。各ファイルのバイトをそのまま連続して出力します。

行番号はどう表示しますか?

すべての行には-nを、内容のある行には-bを使用します。

長いログも cat で見てもいいですか?

可能ですが、探索や検索が必要であれば less が適しています。

参考資料