Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

manがあるコマンドは偉いし、manを付けるべき

社内で、crontabのtabは実はtableだからクーロンタブじゃなくてクーロンテーブルなんだよね、という話が盛り上がった。

ファクトチェックとして、crontab(5)が紹介されていた(cron tableという言葉が出現している)。

manで事実確認がすぐできてすごいと思う一方、それを可能たらしめているmanもありがたいと思った。

man(1) とかの数字って何?

ちなみに、manのマニュアルやコマンド自体をアドレスするときに使うman(1)といった記法のカッコ内の数字は、manのセクション番号である。 コマンドと設定ファイルが同名であることがしばしばあるため、カッコ内にセクション番号を書くことで識別できるようにしている(例えば、crontab(1)はそれを設定するためのコマンドである)。

セクション番号と内容との対応は、man manで確認できる(man(1))。

  • 1 実行プログラムまたはシェルのコマンド
  • 2 システムコール (カーネルが提供する関数)
  • 3 ライブラリコール (システムライブラリに含まれる関数)
  • 4 特殊なファイル (通常 /dev に置かれているもの)
  • 5 ファイルのフォーマットと約束事。例えば /etc/passwd など
  • 6 ゲーム
  • 7 マクロのパッケージとその約束事。例えば man(7), groff(7) など
  • 8 システム管理用のコマンド
  • 9 カーネルルーチン [非標準]
  • n 新しいもの [最近では使われない]
  • l システムローカルなもの [最近では使われない]
  • p パブリックなもの [最近では使われない]
  • o 古いもの [最近では使われない]

ちなみにセクション番号のさらに下位にpといったmodifierがつく場合があるが、pはPOSIX版の説明である。POSIX版とGNU版とがあるコマンド、例えばgrepsedには(1p)版のマニュアルも用意されている。

詳細は以下。

unix.stackexchange.com

したがって、crontab(5)は書式の解説であり、crontab(1)はそれを設定するためのプログラムの解説である。

たまに、ls(1+2)のようにセクション番号にプラスされているman pageがあるが、これが何なのかは調べてみたけど分からなかったので知っている人がいたら教えてほしい。

意外なものにmanがある

man pageが用意されているのは、Linuxのコマンド類だけではない。例えばPerlのcpanfile(5)が存在するし、HTML::TreeBuilder(3pm)が存在する(3pmはライブラリコールでPerl Moduleであるという枠に収まっているらしい)。前者は記法の解説がされているし、後者はpodの内容が載っていた。

なんでもman pageにしていいのだ。というか、Linuxでドキュメントを参照しなければならないようなシチュエーションでは、本来ならば積極的にmanを活用しなければならないのだ。PerlはUNIX精神に則って、きちんとman pageを提供するべきところに提供しているだけなのだ。わざわざ低速で容量が大きいHTMLドキュメントを読む必要も無いのだ。

最近はasdfといったツールでツールチェインをインストールすることが多いため、man pageまでは入らないということもあるかもしれない。だがこういったツールはちゃんとmanを活用するようになっていてほしいと思う。

最近のコマンドにman pageが無い件

最近増えているように感じるパターンが、ネットで面白いツールを見付けてインストールしてもman pageが付いていないというものだ。これは分野や言語によって傾向が分かれていそうで、C言語だと最近のツールでもちゃんと付いている事のほうが多いのだが、Web系のツールだとman pageが付いていない事のほうが多い気がする。--helpすれば大抵は丁寧な説明が登場するのだが、どうせならman pageを付けてほしいなと思う(書式が統一されていてページャがあるというのが理由)。man pageはroffという形式で書かれており、構文が難儀なことで有名なのだが、pandocかなにかで変換すれば良いはずだし、積極的にmanを付けていくことが望ましいと思う。

もしかすると、Web系ツールだとしばしばnpmが使われるのでman pageを配置する余地が無いのかもしれない(npmで入れられるツールにmanが同梱されていたことが全く無い)。自分は、manが最初から用意されているのだからman pageを用意すべきという立場。

ちなみに、pandocでman pageを書く方法は以下にまとまっている。

debimate.jp

ちなみにRust系のツールはちゃんとmanされていることが多くて、流石システムプログラミング言語と思っている。

山崎春のman祭りみたいなのを定期的に開催して、man pageが無いコマンドにman pageを付けていくといった活動が必要。

manまわりのコマンドの紹介

  • apropos
    • 引数に関連してそうなman pageを検索する。例えば、apropos rubyするとirbなどが得られる。
  • whatis
    • manのマニュアル自体の情報を得る。目次だけ引くといった動作になり、セクション番号を確認できる。

manがゲシュタルト崩壊した。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?