MENU

設定ファイルからコメントと空行を除いて有効な設定だけを見る方法

目次

コメントと空行が多い設定ファイルの実情

Linuxの設定ファイルには、説明用のコメント行(# で始まる行)と空行が大量に含まれています。たとえば /etc/ssh/sshd_config は全体で100行以上ありますが、デフォルト状態で実際に有効な設定行はごくわずかです。トラブル対応や変更点の確認で「今どんな設定になっているか」を把握したいとき、コメントと空行が視認の妨げになります。

ここでは、コメントと空行を除外して有効な設定行だけを表示する方法に絞って説明します。

grep で一発でフィルタする

最も手軽な方法は grep の -v(マッチしない行を出力)と -E(拡張正規表現)を組み合わせることです。

grep -Ev '^\s*#|^\s*$' /etc/ssh/sshd_config

正規表現の意味は次のとおりです。

  • ^\s*# :行頭にスペース・タブがあってもよく、その後に # が来る行(コメント行)
  • ^\s*$ :スペース・タブだけか、何もない行(空行)

| でこの2つの条件をORでつなぎ、どちらにも一致しない行だけを出力します。

行頭の \s* を入れておくと、インデントされたコメント(例: # コメント)も除外できます。設定ファイルによってはインデント付きのコメントが使われているため、つけておくと安全です。

セミコロンなど複数のコメント記号に対応する

Sambaの設定ファイル(/etc/samba/smb.conf)など、# だけでなく ;(セミコロン)もコメント記号として使うファイルがあります。この場合はパターンに ; を追加します。

grep -Ev '^\s*(#|;)|^\s*$' /etc/samba/smb.conf

どのコメント記号が使われているかは、ファイルの先頭部分を head コマンドで確認するか、該当ソフトウェアのマニュアル(man smb.conf など)で調べてください。

sed や awk を使う書き方

grep ではなく sed や awk で同じことをしたい場合の書き方も示します。シェルスクリプト内で処理する場合や、後続のコマンドと組み合わせる際に使い分けてください。

sed を使う場合

sed '/^\s*#/d; /^\s*$/d' /etc/ssh/sshd_config

d コマンドで該当行を削除(出力しない)します。; でコマンドをつないで一行にまとめています。

awk を使う場合

awk '!/^\s*#/ && !/^\s*$/' /etc/ssh/sshd_config

! で条件を否定し、コメントでも空行でもない行だけを出力します。awk はアクションを省略すると自動でその行を出力するため、{ print } の記述は不要です。

結果を確かめる

コマンドが意図どおりに動いているか確認するには、出力行数を数える方法が手軽です。

grep -Ev '^\s*#|^\s*$' /etc/ssh/sshd_config | wc -l

元のファイルの総行数と比べることで、どれだけのコメント・空行が除外されたかを確認できます。

wc -l /etc/ssh/sshd_config

出力が多い場合は末尾に | less を追加してスクロール表示にするか、| grep キーワード でさらに絞り込むと見やすくなります。

よくあるつまずき

設定値の後ろにインラインコメントがある場合

一部の設定ファイルでは、設定値の後ろに # でインラインコメントが書かれることがあります(例:Port 22 # デフォルトのSSHポート)。今回紹介したパターンは行頭のコメントだけを除外するため、インラインコメント付きの設定行は有効な行として正しく出力されます。意図せず除外されることはありません。

空行に見えて空行でない行がある

エディタで作成した設定ファイルに、見た目には空に見えてもスペースやタブだけが入っている行が混在していることがあります。^\s*$ パターンはスペース・タブのみの行も空行として扱うため、こうした行も除外されます。

ファイルに読み取り権限がない

/etc/sudoers など、root 権限でしか読めないファイルはコマンドの先頭に sudo をつけて実行してください。

sudo grep -Ev '^\s*#|^\s*$' /etc/sudoers

grep -E の \s が動かない環境がある

今回の手順は Linux 上の GNU grep を前提にしています。macOS や一部の BSD 系システムでは \s が使えないケースがあります。Linux サーバーで使う分には問題ありません。どうしても \s が使えない環境では、[[:space:]] に置き換えることで同じ意味になります。

grep -Ev '^[[:space:]]*(#|;)|^[[:space:]]*$' /etc/samba/smb.conf

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次