cat コマンドは、ファイルの内容を標準出力(画面)に表示するLinux/Unixの基本コマンドです。名前は concatenate(連結する)の略で、1つのファイルを表示するだけでなく、複数ファイルを結合して表示したり、新しいファイルを作成したりする用途にも使われます。
この記事では、cat コマンドの構文・主要オプション・実行例に加えて、less や head との使い分け、Windows環境での代替コマンドまでまとめて解説します。
catコマンド逆引き早見表(やりたいこと別)
日常の実務でよく使う cat コマンドの構文を、目的別に素早く逆引きできるように整理しました。
| やりたいこと(目的) | 実行コマンド | 解説 |
|---|---|---|
| ファイルの内容を表示する | cat file.txt | ファイルの中身を画面(標準出力)に一括出力 |
| 行番号を付けて表示する | cat -n file.txt | 空行も含めたすべての行に行番号を表示 |
| 空白行を除いて行番号を付ける | cat -b file.txt | 本文がある行のみに行番号をカウント表示 |
| 複数ファイルを結合して画面表示 | cat file1.txt file2.txt | 複数のファイルを順に連結して一括出力 |
| 複数ファイルを結合して別名保存 | cat file1.txt file2.txt > merged.txt | リダイレクト(>)で結合結果を新規保存 |
| 既存ファイルに別の内容を追記 | cat append.txt >> target.txt | 追記リダイレクト(>>)で末尾に追加 |
| 対話形式で新規ファイルを作成 | cat > newfile.txt | 入力を直接保存(Ctrl+D で終了) |
| ヒアドキュメントで設定ファイルを生成 | cat << 'EOF' > config.txt | スクリプト内で複数行ファイルを自動作成 |
| 連続する空行を1行にまとめる | cat -s file.txt | 冗長な空行を圧縮してスッキリ表示 |
| タブや改行などの不可視文字を確認 | cat -A file.txt | タブ(^I)や行末($)を可視化 |
catコマンドとは
cat は GNU coreutils に含まれる標準コマンドで、次のような場面でよく使われます。
- ログファイルや設定ファイルの中身を素早く確認する
- 複数のファイルを1つに結合する
- リダイレクトと組み合わせて新しいファイルを作成する
- パイプと組み合わせて他のコマンドへ入力を渡す
構文(Syntax)
cat [オプション] [FILE...]
FILEを省略、または - を指定すると標準入力から読み込みます。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-n | 行番号を付けて表示 | cat -n test.txt |
-b | 空行を除いて行番号を付ける | cat -b test.txt |
-s | 連続する空行を1行にまとめる | cat -s test.txt |
-E | 行末に $ を表示 | cat -E test.txt |
-T | タブ文字を ^I として表示 | cat -T test.txt |
-A | 非表示文字もすべて可視化(-vET と同じ) | cat -A test.txt |
実行例
ファイル内容を表示
cat test.txt
出力例:
Hello
World
行番号を付けて表示
cat -n test.txt
出力例:
1 Hello
2 World
空行を除いて行番号を付ける
cat -b blank.txt
出力例(blank.txt の中身が a / 空行 / b の場合、空行には番号が付かない):
1 a
2 b
複数ファイルを結合して表示
cat file1.txt file2.txt
出力例:
Line A
Line B
Line C
Line D
複数ファイルを結合して新しいファイルに保存
結合結果を画面に表示するだけでなく、リダイレクト(>)で新しいファイルに保存できます。
cat file1.txt file2.txt > combined.txt
既存のファイルにさらに追記したい場合は >>(追記リダイレクト)を使います。> は上書き、>> は追記という違いに注意してください。
cat file1.txt >> combined.txt
新しいファイルを作成(リダイレクトを使用)
cat > newfile.txt
これは新しいファイルです
Ctrl+D
(入力終了後、newfile.txt に保存されます)
ヒアドキュメントで複数行ファイルを作成
シェルスクリプト内などで、複数行のテキストを含む設定ファイルを自動生成したい場合にはヒアドキュメント(Here Document)がよく使われます。
cat << 'EOF' > config.txt
user=admin
password=secret
port=8080
EOF
上記を実行すると、EOF から EOF までの内容が config.txt に書き込まれます。ヒアドキュメントの詳細な構文(変数展開の無効化、行頭タブの削除、sudo tee 連携など)については、以下の解説記事をご覧ください。
パイプで他のコマンドと組み合わせる
cat は標準入力をそのまま出力するため、パイプの動作確認や他コマンドの出力の受け皿としてもよく使われます。
echo "Hello World" | cat
head -n 10 access.log | cat -n
また、複数ファイルを結合してパイプ(|)で grep に渡し、特定行を一括抽出する用途でも活用されます。
# 複数ファイルを連結して一括検索する例
cat server1.log server2.log | grep "ERROR"
ただし、単一ファイルを検索する場合は cat file.log | grep "ERROR" と書くよりも、直接 grep "ERROR" file.log と引数指定した方が不要なプロセス起動(UUOC: Useless Use of cat)を防いで高速かつ安全に動作します。grep の主要オプションや逆引きテクニックについては、【Linux】grepコマンドの使い方と主要オプション一覧!逆引き実例と正規表現まとめ をご覧ください。
権限不足でエラーになる例
cat /etc/shadow
出力例:
cat: /etc/shadow: Permission denied
catとless・head・tailの違い
cat はファイル全体を一度に出力するため、大きなファイルを開くと大量の行が流れてしまい、内容を追いづらくなります。用途に応じて次のコマンドと使い分けます。
| コマンド | 用途 | 特徴 |
|---|---|---|
cat | ファイル全体を一括表示・結合 | スクロール不可。小さいファイル向け |
less | ページ単位で閲覧 | スクロール・検索が可能。大きいファイル向け |
| more | ページ単位で閲覧(旧式) | 前方スクロールのみ |
head | ファイルの先頭を表示 | 既定は先頭10行 |
tail | ファイルの末尾を表示 | -f でログのリアルタイム監視も可能 |
tac | cat の逆で行を逆順に表示 | 名前の通り cat の綴りを逆にしたコマンド |
目安として、ターミナルの画面に収まらない・スクロールして読みたいファイルは less、先頭や末尾だけ確認したい場合は head / tail を使うとよいでしょう。
よくある質問(FAQ)
catの語源は?
concatenate(連結する)の略です。もともと複数ファイルを1つに連結する用途で作られたコマンドで、単一ファイルの表示はその副次的な使い方にあたります。
catとlessの違いは?
cat はファイル内容を一括で出力するのに対し、less はページ単位でスクロール・検索しながら閲覧できます。行数が多いファイルは less の方が扱いやすいです。
大きなファイルをcatすると画面が乱れる・固まるのはなぜ?
行数が多いファイルを cat すると全行が一気に出力され、スクロールが追いつかなくなります。また、バイナリファイルを誤って cat すると制御文字により端末表示が乱れることがあります。その場合は端末を閉じて開き直すか、reset コマンドで表示を復元してください。大きいファイルは less や head の利用をおすすめします。
WindowsでLinuxのcatコマンドは使えますか?
Git Bash や WSL(Windows Subsystem for Linux)では cat コマンドがそのまま使えます。コマンドプロンプト(cmd.exe)には cat は存在せず、同等の操作は type コマンドで行います。PowerShellでは Get-Content(エイリアス cat/gc)が同様の役割を果たします。
# コマンドプロンプト(cmd.exe)
type test.txt
# PowerShell
Get-Content test.txt
ファイルを結合する以外の使い道はありますか?
はい。標準入力の内容をそのまま出力する性質を利用して、パイプラインの動作確認(echo "test" | cat)や、他コマンドの出力を整形せずそのまま次の処理に渡す用途にも使われます。
注意点
catは GNU coreutils に含まれます。BSD系(macOSなど)でも同様に利用できますが、細かいオプションの違いがあります。- 権限のないファイルは
sudoが必要です。 - リダイレクト(
>)は既存ファイルを無条件に上書きします。誤って重要なファイルを上書きしないよう、書き込み先のファイル名は慎重に確認してください。 catで内容を表示する代わりに、/etc/groupや/etc/passwdのようなシステム設定ファイルは専用コマンド(例:getent)で参照することも推奨されます。- 単一ファイルのテキスト処理を行う際に不要な
catパイプ(UUOC: Useless Use of cat)を挟むと、余計なプロセスが起動してパフォーマンスが低下します。ファイル引数を直接渡せるコマンド(grepなど)には直接ファイル名を指定するのがベストプラクティスです。
関連コマンド
grep: ファイル内から特定文字列や正規表現パターンを検索・抽出するless: ファイル内容をスクロールしながら閲覧できるmore: ページ単位でファイルを表示できるhead: ファイルの先頭を表示するtail: ファイルの末尾を表示するtac:catの逆で、ファイルを逆順に表示する
参考
- manページ: https://man7.org/linux/man-pages/man1/cat.1.html
- GNU coreutils: https://www.gnu.org/software/coreutils/

コメント