アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

使えるとちょっと便利なLinuxコマンド

こんにちは、牧野です。
最近、とても暖かくなりましたね。天気がいいことも多く、そんな日は外を散歩するととても気持ちいいです。

さて、今日は軽いネタで、ちょっと便利な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サーバだったら便利かもしれないコマンドでした。