Scribble at 2023-02-24 12:04:07 Last modified: 2023-02-24 12:22:22

添付画像

freebsd-src/bin/ls/

多くの方が普段から使っているコマンドというものは、意外に詳しく調べられたりしていないものである。たとえば、ls は初心者でも最初の頃に教わるコマンドだが、詳しいオプションを学んで自分なりに alias をシェルの設定ファイルに定義してる人は予想外に少ない。したがって、Linux などの初心者向けサイトで「コマンド解説」などとして紹介される典型の話題であるにもかかわらず、その挙動を詳しく正確に理解している人に出会う機会は滅多にない。

それもそのはずで、プログラマは言うまでもなく(コーダ? なにそれおいしいの?)、サーバ技術者であっても、プログラムとしての ls のソース・コードを眺めた人は少ないからであろう。しかし、これも昔から言われていることだが、プログラミングやサーバや OS を学ぶための最も優れた教材は、いま動いているメジャーな OS で使われているスタンダードなコマンドやツールのソース・コードを読むことであり、得てして実際には多くの人がやっていないことでもある。僕も、csh / tcsh について調べ始めるまでは、そういう機会は少なかった。20年くらい前に Windows 用の互換シェル(LiteStep, geoShell など)を使い始めた頃は、そうしたプログラムのソース・コードを眺めて挙動を少しは学んだものだが、意外に FreeBSD や RedHat で使っていたツールのソース・コードには関心を持っていなかったのである。

もちろん、それはいまでも大して変わらない。iftop だ AIDE だと FreeBSD に入ってる小さなツールを色々といじくってはいるが、それらのソースは丁寧に眺めていないので、それらに本当のところどういう capability があるのかも正確には理解していないであろう。更に ls のようなスタンダードなツールについても理解が不足していると感じている。

ということで、csh のソース・コードを学ぶ機会を作る予定があるけれど、もちろん UNIX シェルのソース・コードを理解するには UNIX のシステム・コールを始めとする低レベルのプログラミングについて学ぶ必要もある。そして、こういう素養が ls のようなツールのソース・コードから何かを学ぶにあたって、それがいかに多くの人たちによって手掛けられて堅実な挙動をするようになっているかという事実を正確に理解するための知識になるわけである。或る物体がテニス・ボールであるということを知らない人に手渡しても、彼はそれを見たり触って知覚できるはずだが、それがテニス・ボールであると理解することはできない。それと同じことだろう。

なお、幾つかのディストリビューションで使われている ls の解説を読むと、ディストリビューションによって使えるオプションが微妙に違うことが分かる。たとえば、FreeBSD では "-T" というオプションは表示項目どうしの間隔をタブで何文字分に設定するのではなく、日時の表示を IEEE Std 1003.1-2008 で定められたフォーマットにするという意味である。よって、"--tabsize" などという long version のオプションも存在しない。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook