こういう「他のコマンドを組み合わせても可能な便利系コマンド」を覚えるのは、よしあしだと思う。

技術メモ帳 - pgrep, pkill を使用してプロセスを殺す
最近、会社でシェルの操作方法について教えているのだが、
pgrep / pkill / skill / pidof といった
便利なプロセス操作系コマンドを知らない人が実に多い。

例えば、pgrepはOS Xにはない。killallならあるけど。ちなみにFreeBSDには全部あるのだけど、使っている人はあまり見ないなあ。

現在のshellはaliasも充実しているので、例えば

alias pgrep 'ps awwux | grep \!:1 | grep -v grep | awk '\''{print $2}'\'' '

と出来る。

もちろんPerlのOne Linerでもいける。

perl -le 'for (qx(ps awwux)){@F = split; print $F[1] if /$ARGV[0]/ and $F[1] != $$}'

私のcommand historyはこの手のone-linerでいっぱいだ。

事実FreeBSDではかつてはkillallもperlで書かれていた。/usr/binをperl-freeにするためにこの手のcommandはCで書き直されたのだが、X11をはじめportsの多くがperlに依存するので、結局今でも/usr/local/binにperlがあることを考えればあの苦労はなんだったのだという気もするが、perl自体もportsでupgradeできるようになったので、私としては結果オーライといったところ。

結局足りないコマンドをどう間に合わせるのかというのは趣味の問題でもあるのだけど、cross-platformを追求すればするほど、「そこにあるコマンド」は期待しづらくなる。perlが普及した理由の一つがそこなのだけど、やはりUnix使いたるもの両方使えるようになっておきたい。

あと、この手のコマンドを自分で実装するというのは、Unixを理解するのに最高のトレーニングにもなる。そんなわけで私も/usr/binを肥大化するのには抵抗があるBSD派だ。もっとも最近はpromptを見なきゃどのOSにいるのか忘れてしまうのだけど。

Dan the BSD Advocate