Linuxでファイルに行番号を付けて表示する方法|cat -nとnlコマンドの使い分け


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > Linuxでファイルに行番号を付けて表示する方法|cat -nとnlコマンドの使い分け
「設定ファイルの○○行目にエラーがあると言われたけど、行番号が表示されなくて探しにくい...」
「cat -nとnlコマンドの違いがよくわからない。どっちを使えばいいの?」

Linuxでファイルを表示するとき、行番号がないと「何行目の話をしているのか」が伝わりません。設定ファイルのレビュー、ログの調査、スクリプトのデバッグなど、行番号が必要になる場面は現場で頻繁に発生します。

この記事では、Linuxでファイルに行番号を付けて表示する方法を解説します。cat -nnlコマンドの違い、less -Nでの閲覧、grep -nとの連携まで、実務で必要になる操作を網羅します。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を無料で手に入れる 図解60P/登録10秒/解除も3秒

なぜ行番号付き表示が必要なのか?

行番号が必要になる典型的な場面は3つあります。

エラーメッセージの行特定:Apache、Nginx、PHPなどのエラーログには「line 42」のように行番号が表示される。設定ファイルの該当行をすぐに確認する必要がある
チームでの情報共有:「○○行目を修正してください」という指示を出す際、行番号がなければ意思疎通ができない
diff・パッチ作業:変更差分を確認するとき、行番号があることで修正箇所を正確に把握できる

Linuxには行番号を付けて表示するコマンドが複数用意されています。用途に応じて使い分けましょう。

cat -n で行番号を付けて表示する(基本)

最もよく使われるのが cat -n です。ファイルの内容に行番号を付けて標準出力に表示します。

1. 全行に行番号を付ける(-n)

-n オプションを付けると、空行を含む全ての行に行番号が付きます。

# 全行に行番号を付けて表示する $ cat -n /etc/httpd/conf/httpd.conf 1 ServerRoot "/etc/httpd" 2 3 Listen 80 4 5 Include conf.modules.d/*.conf 6 7 User apache 8 Group apache

エラーメッセージで「line 7」と表示された場合、すぐに該当行(User apache)を確認できます。

2. 空行を除いて行番号を付ける(-b)

設定ファイルには空行が多く含まれています。空行にまで番号を振ると、かえって見にくくなる場合があります。-b オプションを使うと、空行以外の行だけに番号が付きます。

# 空行以外に行番号を付けて表示する $ cat -b /etc/httpd/conf/httpd.conf 1 ServerRoot "/etc/httpd" 2 Listen 80 3 Include conf.modules.d/*.conf 4 User apache 5 Group apache

空行には番号が振られず、実際の内容がある行だけに連番が付きます。設定ファイルの有効行数を把握したいときに便利です。

nlコマンドで行番号を付ける(柔軟な制御)

nl(number lines)コマンドは、行番号の付け方を細かく制御できる専用コマンドです。cat -n より柔軟な設定が可能で、フォーマットを統一したい場面やスクリプトでの加工に向いています。

1. 基本的な使い方

引数にファイル名を指定するだけで、本文行に番号が付きます。

# nlコマンドで行番号を付ける $ nl /etc/passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin

デフォルトでは空行に番号を付けません(cat -b と同じ動作)。

2. 空行にも行番号を付ける(-ba)

空行を含む全行に番号を付けたい場合は -ba(body numbering: all)を指定します。

# 空行を含む全行に番号を付ける $ nl -ba /etc/httpd/conf/httpd.conf 1 ServerRoot "/etc/httpd" 2 3 Listen 80 4 5 Include conf.modules.d/*.conf

cat -n と同じ出力になりますが、nl のほうが番号の書式を細かく調整できます。

3. 番号の書式を指定する(-nln / -nrn / -nrz)

nl では行番号の表示形式を3種類から選べます。

# 左詰め(-nln) $ nl -nln /etc/passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin # 右詰め・スペース埋め(-nrn)※デフォルト $ nl -nrn /etc/passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin # 右詰め・ゼロ埋め(-nrz) $ nl -nrz /etc/passwd 000001 root:x:0:0:root:/root:/bin/bash 000002 bin:x:1:1:bin:/bin:/sbin/nologin

ゼロ埋め(-nrz)はログの加工やCSV出力など、他のツールと連携する際にフォーマットを統一できます。

4. 開始番号を指定する(-v)

行番号の開始値をデフォルトの1から変更できます。

# 行番号を100から開始する $ nl -v 100 /etc/passwd 100 root:x:0:0:root:/root:/bin/bash 101 bin:x:1:1:bin:/bin:/sbin/nologin 102 daemon:x:2:2:daemon:/sbin:/sbin/nologin

複数ファイルの内容を連結して通し番号を付けたい場合に使います。

less -N でページャーで閲覧しながら行番号を表示する

長いファイルを行番号付きでスクロールしながら確認したい場合は、less -N を使います。

# 行番号付きでページャー表示する $ less -N /etc/httpd/conf/httpd.conf 1 ServerRoot "/etc/httpd" 2 3 Listen 80 4 5 Include conf.modules.d/*.conf

cat -nnl は標準出力に全行を出力するため、数百行~数千行のファイルでは画面が流れてしまいます。less -N なら1画面ずつ表示されるため、長い設定ファイルの確認には最も実用的です。

less で表示中に行番号のON/OFFを切り替えることもできます。

表示中に -N と入力してEnter:行番号の表示/非表示を切り替える
/ で検索:行番号が表示されたまま検索結果にジャンプできる
数字g で指定行にジャンプ:例えば 42g で42行目に移動する

grep -n で特定の文字列がある行番号を表示する

ファイル全体ではなく、特定の文字列を含む行だけを行番号付きで表示したい場合は grep -n を使います。

# "Listen" を含む行を行番号付きで検索する $ grep -n "Listen" /etc/httpd/conf/httpd.conf 42:Listen 80 136:# Listen 443 https

出力の先頭に「42:」のように行番号が付くため、該当箇所を vi +42 /etc/httpd/conf/httpd.conf のようにエディタで直接開くことができます。

grep -ncat -n を組み合わせることも可能ですが、grep -n 単体のほうが効率的です。

# 非推奨: cat -n とパイプで検索(行番号は付くが冗長) $ cat -n /etc/httpd/conf/httpd.conf | grep "Listen" 42 Listen 80 136 # Listen 443 https # 推奨: grep -n で直接検索する $ grep -n "Listen" /etc/httpd/conf/httpd.conf 42:Listen 80 136:# Listen 443 https

実務で使える行番号テクニック

viエディタで特定行を直接開く

grep -n でエラー箇所の行番号がわかったら、vi で直接その行にジャンプして編集できます。

# 42行目を直接開いて編集する $ vi +42 /etc/httpd/conf/httpd.conf

vi +行番号 ファイル名 の書式を覚えておくと、エラー対応のスピードが格段に上がります。

行数をカウントする(wc -l)

行番号付き表示ではありませんが、ファイルの総行数を確認したい場合は wc -l が最も手軽です。

# ファイルの総行数を確認する $ wc -l /etc/passwd 42 /etc/passwd

sedで特定の行範囲を表示する

行番号がわかっている状態で、その範囲だけを表示したいときは sed -n が便利です。

# 40行目から45行目だけを表示する $ sed -n '40,45p' /etc/httpd/conf/httpd.conf

cat -n で全体を表示してから目で探すより、sed -n で範囲を絞ったほうが確実です。

「cat -n: command not found」が出た時の対処法

cat コマンド自体が見つからないエラーは通常発生しません。もし cat: command not found が出た場合は、PATH 環境変数が正しく設定されていない可能性があります。

# catの実体を確認する $ which cat /usr/bin/cat # PATHに/usr/binが含まれているか確認する $ echo $PATH

cronジョブやスクリプトの中で cat -n が動かない場合は、スクリプト冒頭に PATH=/usr/local/bin:/usr/bin:/bin を明記してください。

nl コマンドが見つからない場合は、coreutils パッケージがインストールされているか確認します。

# nlコマンドのパッケージを確認する(RHEL系) $ rpm -qf $(which nl) coreutils-8.32-34.el9.x86_64

通常のLinux環境であれば coreutils は標準でインストールされています。

cat -n と nl コマンドの使い分け

どちらのコマンドを使うべきかは、用途によって明確に分かれます。

サッと確認したいだけ:cat -n を使う。オプション1つで済むので最も手軽
空行を除外して番号を付けたい:cat -b または nl(デフォルト)。どちらでも同じ結果になる
番号のフォーマットを指定したい:nl を使う。-nrz(ゼロ埋め)や -v(開始番号指定)は cat にはない機能
長いファイルをスクロールしながら確認したい:less -N を使う
特定の文字列がある行番号を知りたい:grep -n を使う

本記事のまとめ

やりたいこと コマンド
全行に行番号を付けて表示する cat -n ファイル名
空行以外に行番号を付けて表示する cat -b ファイル名
行番号を付けて表示する(空行除外がデフォルト) nl ファイル名
空行を含む全行に行番号を付ける nl -ba ファイル名
行番号をゼロ埋めで表示する nl -nrz ファイル名
ページャーで行番号付き閲覧する less -N ファイル名
特定の文字列がある行番号を表示する grep -n "文字列" ファイル名
特定の行にジャンプしてviで開く vi +行番号 ファイル名
ファイルの総行数を確認する wc -l ファイル名
特定の行範囲だけを表示する sed -n '開始行,終了行p' ファイル名


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

※登録30秒/合わなければ解除3秒


宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが最近の悩み。ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る