「cat -nとnlコマンドの違いがよくわからない。どっちを使えばいいの?」
Linuxでファイルを表示するとき、行番号がないと「何行目の話をしているのか」が伝わりません。設定ファイルのレビュー、ログの調査、スクリプトのデバッグなど、行番号が必要になる場面は現場で頻繁に発生します。
この記事では、Linuxでファイルに行番号を付けて表示する方法を解説します。
cat -nとnlコマンドの違い、less -Nでの閲覧、grep -nとの連携まで、実務で必要になる操作を網羅します。でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜ行番号付き表示が必要なのか?
行番号が必要になる典型的な場面は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
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 -n や nl は標準出力に全行を出力するため、数百行~数千行のファイルでは画面が流れてしまいます。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
vi +42 /etc/httpd/conf/httpd.conf のようにエディタで直接開くことができます。grep -n と cat -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
cat -n が動かない場合は、スクリプト冒頭に PATH=/usr/local/bin:/usr/bin:/bin を明記してください。nl コマンドが見つからない場合は、coreutils パッケージがインストールされているか確認します。# nlコマンドのパッケージを確認する(RHEL系) $ rpm -qf $(which nl) coreutils-8.32-34.el9.x86_64
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' ファイル名 |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
※登録30秒/合わなければ解除3秒
