2007-03-28

大文字と小文字

Mac OS X の標準のファイルシステムでは、ファイル名の大文字と小文字を区別しないことはよく知られている。多くの Unix like なシステムでは両者は区別され、それが前提になっていることもあるので、時々不都合が起こることもある。

たまたま、Capital lock された状態で /usr/bin/uptime を実行してしまったら、なんかだちょっと違和感があった。前述のように大文字・小文字を区別しないので uptime コマンドが実行されるはずなのだけれど、どうも w コマンドと同じ出力をしているようだ。種明かしは簡単。多くのシステムで uptime コマンドが w コマンドと同じものであるのはこれもよく良くあることで、これはコマンドが自分がどの名前で実行されているかで動作を変えるというよくある仕様による。で、この名前での判定に「uptime」でないということを使っているのだろう。


[alg4b:~] rok% UPTIME
13:42 up 6 days, 19:26, 3 users, load averages: 2.10 1.72 1.49
USER TTY FROM LOGIN@ IDLE WHAT
rok console - Wed18 6days -
rok p1 - Wed18 - UPTIME
rok p2 - Sun10 2days -
[alg4b:~] rok% uptime
13:42 up 6 days, 19:26, 3 users, load averages: 2.10 1.72 1.49
[alg4b:~] rok% which uptime UPTIME
/usr/bin/uptime
/usr/bin/UPTIME
[alg4b:~] rok% ls -li /usr/bin/{uptime,UPTIME,w}
6107944 -r-xr-xr-x 2 root wheel 23284 Mar 21 2005 /usr/bin/UPTIME
6107944 -r-xr-xr-x 2 root wheel 23284 Mar 21 2005 /usr/bin/uptime
6107944 -r-xr-xr-x 2 root wheel 23284 Mar 21 2005 /usr/bin/w

試しに /tmp/fuga という名前で /usr/bin/uptime へのシンボリックリンクを作ってみると、やっぱり予想通りの動作をした。
[alg4b:~] rok% ln -s /usr/bin/uptime /tmp/hoge
[alg4b:~] rok% /tmp/hoge
13:57 up 6 days, 19:42, 3 users, load averages: 1.17 1.46 1.47
USER TTY FROM LOGIN@ IDLE WHAT
rok console - Wed18 6days -
rok p1 - Wed18 - /tmp/hoge
rok p2 - Sun10 2days -

だからなんなのってこともないけど、ちょっと面白い。

No comments: