サーバー内から特定の文字が含まれるファイルを探すときに困ったことはないでしょうか?
実は、grepコマンドを使うと簡単に特定の文字が含まれるファイルを探すことができます。
こちらでは、サーバーから特定の文字を検索するときに使う「grep」コマンドをご紹介します。
ディレクトリやファイルから文字を検索するgrepコマンド
ディレクトリやファイルから特定の文字を検索したいときに使う「grep」コマンドをご紹介します。
grepコマンドは、文字を検索するときに使うコマンドです。
特定のファイル・ディレクトリや複数のファイルから特定の文字が含まれているか調べることができます。
grepコマンドのオプションもよく使うので覚えておくと良いでしょう。
■grepコマンドのオプション例
-c:マッチした行数を表示
-h:マッチしたファイル名を表示
-i:大文字小文字を区別しない
-L:検索した結果、該当しなったファイルを表示する
-n:マッチした文字列の行番号を表示
-o:検索結果に一致した文字を表示
-r:ディレクトリ内も検索対象とする
-s:エラーメッセージを表示しない
-v:マッチしない行を表示
ファイルから特定の文字を検索
ファイルから特定の文字を検索する場合は、こちらの「grep 検索文字列 ファイル名」コマンドを使います。
$ grep 検索文字列 ファイル名
www.test.org 60.24.7.21 - - [09/Jan/2021:18:59:35 +0900] "GET /chrome-web-vitals/ HTTP/1.1" 200 17773 "-" "Mozilla/5.0"
指定した複数のファイルから特定の文字を検索
複数のファイルから特定の文字を検索する場合、「find」と「grep」コマンドを組み合わせて使います。
例えば、こちらの「find 指定するディレクトリパス -name "対象ファイル" | xargs grep "検索文字"」コマンドのようにすると指定したディレクトリの複数ファイルから文字を検索することができます。
$ find /var/log/ -name "access_log_*" | xargs grep -i "Chrome"
www.test.org 6.29.9.17 - - [10/Jan/2021:03:37:33 +0900] "GET / HTTP/1.1" 200 18318 "-" "Mozilla/5.0 Chrome/87.0.4280.90 Mobile Safari/537.36"
ディレクトリから特定の文字を検索
ディレクトリから特定の文字を検索する場合は、こちらの「grep 検索文字列1 ディレクトリ」コマンドを使います。
「*(アスタリスク)」を使うことで「/var/log/」直下にあるファイルから文字検索を行うことができます。
$ grep 検索文字列 /var/log/*
www.test.org 60.24.7.21 - - [09/Jan/2021:18:59:35 +0900] "GET /chrome-web-vitals/ HTTP/1.1" 200 17773 "-" "Mozilla/5.0"
複数の文字を検索
grepで複数の文字を検索したい場合は、「|」(パイプ)でコマンドを繋げます。
複数の特定の文字を検索する場合は、こちらの「grep 検索文字列1 ファイル名 | grep 検索文字列2」コマンドを使います。
$ grep 検索文字列1 /var/log/access.log | grep 検索文字列2
www.test.org 60.24.7.21 - - [09/Jan/2021:18:59:35 +0900] "GET /chrome-web-vitals/ HTTP/1.1" 200 17773 "-" "Mozilla/5.0"
www.test.org 60.2.7.21 - - [09/Jan/2021:19:09:15 +0900] "GET /chrome-web-vitals/ HTTP/1.1" 200 17773 "-" "Mozilla/5.0 "
grepコマンドでよくある質問
WEBサービスを運用していると1度は調べることがある、よくある質問をご紹介します。
使い方を覚えていれば、違うサーバーでも同じように調べることが可能です。
できるだけ探す時間を短くすることを心掛けると良いでしょう。
php.iniが保存されている場所を知りたい
phpinfo.phpファイルをサーバーにアップしなくてもgrepコマンドでphp.iniを簡単に調べることができます。
php.iniが保存されている場所を確認する方法はこちらです。
例1 php -i | grep php.ini
$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
例2 php -r "echo phpinfo();" | grep "php.ini"
$ php -r "echo phpinfo();" | grep "php.ini"
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
post_max_sizeを調べたい
php.iniからpost_max_sizeを確認する方法はコチラです。
「php -r "echo phpinfo();" | grep "post_max_size"」コマンドでpost_max_sizeの値を調べることができます。
post_max_sizeは、POSTできる最大データサイズになります。
$ php -r "echo phpinfo();" | grep "post_max_size"
post_max_size => 2000M => 2000M
memory_limitを調べたい
php.iniからmemory_limitを確認する方法はコチラです。
「php -r "echo phpinfo();" | grep "memory_limit"」コマンドでmemory_limitの値を調べることができます。
memory_limitは、php処理中にphpが確保できるメモリサイズです。
post_max_sizeよりも大きい値にする必要があります。
$ php -r "echo phpinfo();" | grep "memory_limit"
memory_limit => 2000M => 2000M
timezoneを調べたい
php.iniのtimezoneを確認方法はこちらです。
「php -i | grep timezone」コマンドを使うとtimezoneの設定を調べることができます。
$ php -i | grep timezone
Default timezone => Asia/Tokyo
date.timezone => Asia/Tokyo => Asia/Tokyo
mysql.iniが保存されている場所を知りたい
mysql.iniが保存されている場所を知りたいときにもgrepコマンドを使います。
例1 php -i | grep mysql.ini
$ php -i | grep mysql.ini
/etc/php.d/mysql.ini,
/etc/php.d/pdo_mysql.ini,
例2 php -r "echo phpinfo();" | grep "mysql.ini"
php -r "echo phpinfo();" | grep "mysql.ini"
/etc/php.d/mysql.ini,
/etc/php.d/pdo_mysql.ini,