こんにちは、牧野です。
最近、とても暖かくなりましたね。天気がいいことも多く、そんな日は外を散歩するととても気持ちいいです。
さて、今日は軽いネタで、ちょっと便利なLinuxコマンドを紹介します。
1.アクセスログを見る
リアルタイムでログを見る時、tailをよく使うと思います。
tail -f /var/log/httpd/access_log
phpを含み、jpgとpngを含まないログを表示
tail -f /var/log/httpd/access_log | fgrep php | fgrep -v jpg | fgrep -v png
さらに、phpのプログラムと組み合わせてみます。
watch_log.php
<?php
$log_file_path = $_SERVER['argv'][1];
$check_line_number = 30000;
while (true) {
$time = time() - 60;
$date_str = date('d/M/Y:H:i', $time);
if (file_exists("$log_file_path")) {
$cmd = "tail -n {$check_line_number} {$log_file_path} | fgrep '{$date_str}' | fgrep php | fgrep -v png | fgrep -v jpg | wc -l";
}
echo date('Y/m/d H:i', $time) ." ";
system($cmd);
sleep(60);
}
これを次のように実行すると、
php watch_log.php /var/log/httpd/access_log
2.ファイルの検索
findが便利に使える場合が多いです。
hogehoge.txtより最終更新日が新しい/path/to/dir以下のファイル名を表示
find /path/to/dir -type f -newer hogehoge.txt
hogehoge.txtより最終更新日が古い/path/to/dir以下のファイル名を表示
find /path/to/dir -type f ! -newer hogehoge.txt
最終更新日が2008年3月1日0時より新しい、/path/to/dir以下のファイル名を表示
※3/21 「-d」が抜けていたのを修正しました。
touch -m -d '2008/03/01 00:00:00' hogehoge
find /path/to/dir -type f -newer hogehoge
最終更新日が2008年3月1日0時より古い、/path/to/dir以下のファイルを削除
touch -m -d '2008/03/01 00:00:00' hogehoge
find /path/to/dir -type f ! -newer hogehoge -exec rm {} \;
-execの{}には、findでマッチした各ファイル名が入って、指定したコマンドが実行されます。最後の\;を忘れずに。
findの結果を受けてコマンドを実行するのは、xargsでもできます。
/path/to/dir以下の.svnディレクトリを一括削除
find /path/to/dir -type d -name '.svn' | xargs rm -rvf
subversionを使っていると、使う機会があるかもしれません。
diffも便利です。
指定した二つのディレクトリ内で、異なっているファイルがないか調べる。
diff -brtBEq /path/to/dir1 /path/to/dir2
b、t、B、Eで、タブ、スペース、空行の違いが無視されます。
rは再帰的に、qはファイル名だけ表示するオプションです。
以上、Linuxサーバだったら便利かもしれないコマンドでした。