🐶

Linuxの識者がよく使うstrace(1)やopen(2)の数字の意味は?

2023/02/19に公開

いちいち説明されないので知らない人もいるかもいるかもしれません。

https://twitter.com/tetsu_koba/status/1626920452282261507?conversation=none
https://twitter.com/tetsu_koba/status/1626920917975826433?conversation=none

Linuxの話をしていると識者が strace(1) とかopen(2)とか後ろに(数字)をつけることがあります。この数字はマニュアルの章の番号です。1がコマンド、2がシステムコール、3がライブラリです。コマンドとライブラリで名前が被っているものがあるために区別します。
例えば、printf(1)はコマンドでprintf(3)はライブラリです。それぞれのman を見るためには章番号を明示して、
man 1 printfman 3 printf とします。

man man としてmanコマンドのマニュアルを見ると、全ての章の説明があります。

The table below shows the section numbers of the manual followed by the types of pages they contain.

       1   Executable programs or shell commands
       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
       4   Special files (usually found in /dev)
       5   File formats and conventions, e.g. /etc/passwd
       6   Games
       7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7), man-pages(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]

$ man ssh
SSH(1)                                        BSD General Commands Manual                                       SSH(1)

NAME
     ssh — OpenSSH remote login client

一番最初の行にSSH(1)とありますが、これはマニュアルの第1章にあることを示しています。

SEE ALSO
     scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-argv0(1), ssh-keygen(1), ssh-keyscan(1), tun(4), ssh_config(5),
     ssh-keysign(8), sshd(8)

SEE ALSO のところにずらっと関連するものが並んでいます。括弧の中の数字がマニュアルの第何章にあるものかを示しています。

これらの作法はLinuxのオリジナルではなくてUNIXの文化を継承しています。

(心の中での)読み方

ssh(1) -> ssh(というコマンド)
open(2) -> open(というシステムコール)
fopen(3) -> fopen(というライブラリ)
tun(4) -> tun(というデバイスファイル)
ssh_config(5) -> ssh_config(という設定ファイル)
sshd(8) -> sshd(という管理用コマンド)

識者はこれを冗長にならないようにコンパクトに書いているわけですね。

例2 (2023/02/20追記)

man open とすると xdg-open(1) のページが表示されてしまいます。(見たかったのはこれじゃない!)
システムコールのopenを見たい場合にはman 2 open とします。
また、man open.2 man 'open(2)'でもいけますが、私はman 2 openを使っています。

Discussion