apacheのログのリファラを日本語で表示

apache.logがあるとして、以下のコマンドを実行

$ perl -e 'while(<>){/^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;print $8,"\n" unless $8 eq "-";}' < apache.log |xargs -l1 php -r 'print(urldecode($argv[1])."\n");' -- | nkf

perlにログを渡しrefererを取り出し、xargsでphpに一行づつ渡す。phpでurldecodeをして出力し、nkfで文字コードを推定させてutf8で出力。ただしすごく遅い。

コピペ用
[sourcecode language=”c”]
perl -e ‘while(<>){/^(.*) (.*) (.*) \[(.*)\] “(.*)” (.*) (.*) “(.*)” “(.*)”/;print $8,”\n” unless $8 eq “-“;}’ < apache.log |xargs -l1 php -r 'print(urldecode($argv[1])."\n");' -- | nkf [/sourcecode]

udevメモ MACアドレス変更時の操作

最近のLinuxを起動すると、最初のほうで起動されているudevについてのメモ。

udevはデバイスノード(/devディレクトリ)を作成したり操作する。sysfs(/sys)にカーネルが作成したデバイス情報があり、これとユーザが定義したルールを見ながら/dev以下を作成する。

udevの設定ファイルは/etc/udev/udev.confにある。この設定では以下の情報を設定する。

・デバイスノードを作る場所。デフォルトは/dev
・ルールファイル(*.rules)の置いてあるディレクトリ。デフォルトは/etc/udev/rules.d/
・ログをどれくらいとるか。

例:ネットワークカードを入れ替えた場合のルールの変更方法

ネットワークカード入れ替えると当然マックアドレスが変わるが、自動でシステムの設定は変わってくれないみたいで、前のカードのマックアドレスがeth0のままになっていて、新しいカードはeth1になっている。

これはudevのルールで設定されているので、これを修正すればよい。 ルールディレクトリでマックアドレスを検索すると以下のようなエントリが見つかる。

SUBSYSTEM==”net”, DRIVERS==”?*”, ATTRS{address}==”xx:xx:xx:xx:xx:xx”, NAME=”eth0″

このエントリはコンマで区切られた最初の3つが条件でそれが真ならNAME=”eth0″が設定される。ネットワークカードを入れ替えた場合このエントリーが2つあるはずなので古い方を消し、新しい方のNAMEをeth0にすればいい。