その① 異なるサーバの設定ファイルをdiffりたい
必要な知識は2つ。
diff <(echo hoge) <(echo huga)
のように書けば、( )の中で実行したコマンド出力同士を比較できます。
ssh remote cat hoge.txt
sshコマンドの後にコマンドを書くと、
remote先のサーバでコマンド実行した結果を出力できます。
上記例だと、remoteサーバにあるhoge.txtの中身を出力できます。
1と2を組み合わせて、
diff <(ssh remote1 cat /etc/php.ini) <(ssh remote2 cat /etc/php.ini)
と書けば、remote1サーバとremote2サーバのphp.iniファイルを比較できます。
言わずもがなですが、
localとremoteを比較したいのならば、
diff <(cat /etc/php.ini) <(ssh remote cat /etc/php.ini)
でOK。
うまいことエスケープすれば、
例えばphp -r "phpinfo();"
なんてのもdiffれます。
diff <(ssh remote1 "php -r \"phpinfo();\"") <(ssh remote2 "php -r \"phpinfo();\"")
その② 設定ファイルを見やすくする
さて、サーバ間diffで設定に差があることが判明したとして、
php.iniや、他にもhttpd.confなど、各種設定ファイルは大抵1000行近くあるため、
初心者にとってはとっつきづらく、恐る恐る読み下すうちに嫌になってしまったりします。
そんなときは思い切ってコメントアウト行、空行を省いてしまいましょう。
例えばphp.iniなら";"で始まる行はコメントアウト行なので、
grep -v "^$\|^;" /etc/php.ini
とすれば有効な行だけ抽出できます。
試しに、どのくらい省けたのかカウントしてみます。
% cat /etc/php.ini | wc -l
1801
% grep -v "^$\|^;" /etc/php.ini | wc -l
179
当方の環境で試したら実に約1/10になりました。
実際目を通す部分は1/10で良い、とわかるだけで心理的抵抗感も幾分減るはずです。