find 道は凄腕システム管理者への近道
Posted by yoosee on Debian at 2007-03-31 22:00 JST1 404 Blog Not Found:勝手に添削 - find(1)
find の話題が盛り上がっているようだが、「last-modified が30日以上前のファイルを特定ディレクトリに退避」なんて処理にはよく find を使う。特に spam や virus 等、一時保存してその後は破棄するようなデータには cron で仕掛けておいても便利だ。find .spam/cur/ -daystart -mtime +30 -exec mv \{\} ~/tmp/oldspam/ \;ファイル名検索には -name だけでなく -regex や -iregex で正規表現を指定するのも便利なことがある。また -exec に関しては、代わりに -ok を使うと exec 前に実行の確認が出来るので覚えておくと良い (RETだけだと処理がスキップされる)。
ところで find に限らず CLI のコマンドは、同じ事をやる方法が複数存在する事が多い。実際問題として「より効率的な専用手段を覚える」のと「効率は多少落ちてもより汎用的な手段を覚える」のどちらがいいかというのは、限られた時間の中で常に付きまとう問題だろう。個人的には汎用的な方法を覚えた上で専用手段に手を伸ばすのが良い道だろうと思う。とはいえファイル検索に関しては find 自体が「汎用性の高い手段」だというのも否めないので、特にシステム管理者は精通して損はない。例えばアカウント管理をする人は -uid -nouser -perm あたりの存在を覚えておくと便利な事もあるだろう。
2 zsh の履歴機能と補完機能を有効に使おう
上記のように、往々にして find の構文は複雑になる事が多いし、また似たようなことをしばらく経ってから再度やることも多い。そうした際に非常に役に立つのは過去の履歴なのは言うまでもない。zsh の場合、横着プログラミング第3回: 履歴マニア にあるように HISTSIZE と SAVEHIST を 100000 程度残しておくのは将来の自分の手間を軽減するという意味で非常に役に立つ。また zsh の compinit を使えば find -<tab> のようにオプション名の補完リストを出すことも出来る。3 余談: ls -l の結果を更新時間順(の逆順)に表示
これとは直接関係ないが、タイムスタンプを元にしてファイルを見つけ出す話関連で、しばらく前にどこかの blog で見かけた ls -l を last-modified 逆順に並べる alias を紹介。alias ll='ls -lAFtr'これで ll と叩くと、最近編集されたファイルがリストの一番下の方に出てくる。特にこれは /var/log なんていう、ファイルが大量で、かつ最新の更新があるファイルの重要度が高い場合に重宝する。例えば普通に ls -lF /var/log/ だと
# ls -lF /var/log/ .... -rw-r--r-- 1 root root 0 2007-02-05 14:12 uucp.log -rw-rw-r-- 1 root utmp 202752 2007-03-31 18:00 wtmp -rw-rw-r-- 1 root utmp 366720 2007-03-07 20:14 wtmp.1 -rw-r--r-- 1 root root 12063 2006-07-01 06:52 wtmp.report drwxr-xr-x 2 root root 4096 2007-02-05 13:58 xfer/となり、肝心の部分はスクロールで流れてしまう。だが ls -lAFtr ならば
# ls -lAFtr .... -rw-r----- 1 root adm 1867000 2007-04-01 00:54 messages -rw-r--r-- 1 root root 9217099 2007-04-01 00:59 spamd.log -rw-r--r-- 1 root root 246828 2007-04-01 01:05 sensord.rrd -rw-r----- 1 root adm 150206935 2007-04-01 01:08 mail.log -rw-r----- 1 root adm 33062997 2007-04-01 01:09 auth.log -rw-r----- 1 root adm 15799201 2007-04-01 01:09 syslog -rw-r----- 1 root adm 3486279 2007-04-01 01:09 daemon.logきっちり最近変更があったファイルが最後の方に出てくれる。