ls(1)の由来とか
TwitterのTLでもMulticsの話がぽちぽち出るようになったので、今日は関連する小ネタを。
UNIXで無意識で使っているls(1)コマンド。manページには"list directory contents"とか書かれているので、listの短縮形だとばかり思っていたら、Wikipediaによるとlist segmentsの略なんだそうな*1。どうもその名前の由来はMulticsにありそうだ。
セグメントとはMultics用語でファイルのこと。ただしファイルとセグメントは等価ではなく、ファイルが二次記憶を抽象化した概念であるのに対して、セグメントは二次記憶であることを隠蔽する概念である。UNIXのメモリマップドファイルに近いけど、歴史的にワンレベルストアとか呼ばれる。Multicsの世界では、UNIXのopen/closeに対する操作がなくて、セグメント名が動的リンカによって解決されるとセグメントがメモリにマッピングされ、アドレス演算による読み書きが可能になる。セグメント名は木構造の階層構造を持ち、セグメントの集合をディレクトリ(セグメント)と呼ぶところはUNIXと一緒だ。
セグメントはCPUがセグメンテーションをサポートしていることを前提としているので、セグメンテーションを持たないPDP-7やPDP-11でも実装可能なMultics風ファイルシステムを作ろうとしたのが、UNIXの始まりなんだろうな。
ちなみにmulticians.orgのUnix and Multicsによると、Multicsにもpwdコマンドがあった。また、cd(chdir)相当のcwdコマンドもあった。あとマウントポイント相当のマスタディレクトリという仕組みがあったことも分かる。もっと詳細はコマンドリストはここ。
(追記:2011-08-25)ちなみにMulticsのlsコマンドのソースコードはこれ。PL/Iわからないのもあるけど、ぱっと見、読んでみようかなという気になる感じではない。