lookコマンドの使い道(その3)

apt-get source bsdmainutilsで取得したファイル群から
lookディレクトリの中を確認してみます。

~$ find usr.bin/look -type f
usr.bin/look/look.1
usr.bin/look/pathnames.h
usr.bin/look/look.c
usr.bin/look/Makefile

どうやらlook.cがlookコマンドのソースファイルのようです。
中身を見る前に、ビルドして動作するか確認してみます。

cd usr.bin/look
make
~/bsdmainutils-9.0.6/usr.bin/look$ make 
cc -include ../../freebsd.h  -O2 -g -c -o look.o look.c
look.c:49:10: error: expected declaration specifiers or ‘...’ before string coo
nstant
 __FBSDID("$FreeBSD$");
          ^    
look.c: In function ‘main’:ai
look.c:141:20: error: ‘SIZE_T_MAX’ undeclared (first use in this function)ti
   if (sb.st_size > SIZE_T_MAX)
                    ^
look.c:141:20: note: each undeclared identifier is reported only once for each function it appears in
../../config.mk:42: recipe for target 'look.o' failed
make: *** [look.o] Error 1
~/bsdmainutils-9.0.6/usr.bin/look$

ビルドできませんでした。
私が使っているのはDebianなので、パッチが必要なようです。
パッチを当てます。

        
~/bsdmainutils-9.0.6/usr.bin/look$ patch < ../../debian/patches/look.diff
patching file look.c

これでビルドできるようになりましたので、makeします。

~/bsdmainutils-9.0.6/usr.bin/look$ make
cc -include ../../freebsd.h  -O2 -g -c -o look.o look.c
cc  -o look look.o

実行してみます。同時に時間も計測。

~/bsdmainutils-9.0.6/usr.bin/look$ time ./look

real    0m0.001s
user    0m0.000s
sys     0m0.000s

あれ?何か変です。今回実行したlookは処理時間が短くなっています。

さらに/usr/bin/lookと、grepも計測してみます。

~$ time look asdf

real    0m0.018s
user    0m0.016s
sys     0m0.000s
~$ time grep asdf /usr/share/dict/words

real    0m0.003s
user    0m0.000s
sys     0m0.000s

まとめると、asdfという存在しない文字列を探すのにかかる各コマンドの時間は、
/usr/bin/look 0.018s
ソースからビルドしたlook 0.001s
grep 0.003s
でした。

grepよりも処理時間が短いということは、lookコマンドの使い道が見い出せそうです。
(もともと入ってた/usr/bin/lookの処理時間が遅いのは謎のままです)

One response to “lookコマンドの使い道(その3)

  1. Peecfrt shot! Thanks for your post!

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA