設定ファイルの管理はLinuxを扱う上で必須ですが、読まないコメント行とか、作成者側が視認性の為に良かれと思って入れてくれているスペースやTABがあると、設定ファイルを更新する際の比較が面倒だったりします。大きな設定ファイルの大多数はコメント行ですしね。
一昔前は設定ファイルの「ここのコメントは外して・・・」とか「ここはコメントにして・・・」等をしていましたが(今も多いと思いますが)、最近はAnsibleやDockerfileで自動化することも多く、大抵は部分的な書き換えではなく設定ファイルを上書きするほうが多いと思います。
以下のファイルを例とします。コメント行、空白行、TAB、連続したスペース等が混在していますね。
[root@centos ~]# vim testfile
aaa bbb ccc ddd
#aaa bbb ccc ddd
##aaa bbb ccc ddd
## aaa bbb ccc ddd
## aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc ddd
以下のようにコマンドを組み合わせるときれいに整形されます。
[root@centos ~]# grep -v -e '^\s*#' -e '^\s*$' testfile | expand | tr -s [:space:] | sed 's/^ / /g'
aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc ddd
コマンドの説明です。
- コメント行(#)を削除する。⇒grep(例えばシェルスクリプトのシバンも消えることに注意!)
- 空行を削除する。⇒grep(スペースだけ/TABだけの行も対象)
- TABをスペースに置換する。⇒expand
- 連続したスペースを1つにする。⇒tr
- 行頭のスペースはインデントと見做してスペース4個にする。⇒sed(1段階のインデントしか対応できないことに注意!)
- 上記以外は必要に応じて手動で整形する。
/etc/ssh/sshd_configを指定するとこんな感じになります。
[root@centos ~]# grep -v -e '^\s*#' -e '^\s*$' /etc/ssh/sshd_config | expand | tr -s [:space:] | sed 's/^ / /g'
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server
これをベースにして設定値の変更や追加を行うと良いと思います。設定ファイルによっては順序性があるので、追加の場合は元の設定ファイルを参考にすると良いでしょう。
CentOS 8 設定ファイルのコメント行や不要なスペースと TAB を削除して最小化