takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

はじめてUNIXで仕事をする人が読む本 の備忘録 05

はじめてUNIX で仕事をする人が読む本 の備忘録 05

お世話になった本

この連載ブログを書くにあたり、お世話になった本がこちら。LPICと被っているところもありますが、実務での使い方なんかも扱っており、良書だと思います。

第5章 オンラインマニュアル

manですね。もしくは、info
オンラインマニュアルと言っているが、ネットワーク接続なんて無くてよい。ただ、オンラインマニュアルとmanコマンドに書かれているからそうしているだけ。

$ man man
MAN(1)                 マニュアルページユーティリティー                 MAN(1)

名前
       man - オンラインマニュアルのインターフェース

どこで使う?

あなたが必要と感じたところで。
詳細なマニュアルを見たいときにはやっぱりこれ。他にも、お客様先でコマンドの引数がわからない時にググるわけには行かなかったり、セキュリティ的にネットワークから隔離されていることがある。そんな時に頼るべきはこのマニュアルだと思う。本によると、熟練者ほどケアレスミスを防ぐためにマニュアルを頻繁に参照するようだ。

  • コマンドの引数
  • 設定ファイルの値
  • 関数雨の引数や返り値の意味
  • デーモンプログラムの起動オプションなど

氾濫する情報の危険性

ネットや書籍で得られる情報の危険性を知っておくほうが良いらしい。

大前提として、環境は皆違う。となると、コマンド名は同じでも挙動が変わることがある。
で、念頭に入れるべきは、ネットや書籍で手に入る情報は特定の環境でのみ正しい情報である場合がほとんどだという点らしい。
最悪、悪意を持って情報を流している場合もある。

この書籍で参考としてあげられている実例がある。
killallコマンドだ。

開発中の全てのプロセスを強制終了する実用例

$ killall -KILL target_command

これ、Linux では正しいらしい。が、Solaris などのUNIX System V 系では以下の説明になる。

killall は全てのアクティブなプロセスにシグナルを送る。シグナルの指定がなければSIGTERMを送る。

UNIX System V 系でのkillallはシャットダウン処理で使用されるコマンドであり、シャットダウン処理に関係のない残存プロセスを残らず停止する為に使われる。
これは、場合によっては、システムに意図しない被害を与えかねない。

バージョンアップしたら、以前と同じコマンドでも意味が違っていたとかあるかもしれない。そういう時ほど、オンラインマニュアルを使うべき。

man コマンド

manコマンドは、オンラインマニュアルを表示するCUIアプリケーションの名称
ただ、場合によっては
manコマンドで表示されうオンラインマニュアルをさして使われるケースもある。

man のman

manコマンド自身のオンラインマニュアル

$ man man
MAN(1)                 マニュアルページユーティリティー                 MAN(1)

名前
       man - オンラインマニュアルのインターフェース

書式
...

操作方法

less と同じ。また、vi ライクな操作も出来る。

実行オプション

ページャ

ページ送りのこと。現在はデフォルトで組み込まれていることが多い。もし、1ページずつスクロールが出来ず、その機能を実装したいときは下記の通り。

Bourne Shell

$ export PAGER=less
$ man man

環境によっては、下記のように指定できる時もある。

$ man -P less man

こっちのほうが楽そう。何度も参照するなら、環境変数に入れるべきだと思うが。

言語

manは基本英語。しかし、日本語表示も可能。

Bourne Shell

$ export LANG=ja_JP.UTF-8
$ man man

英語にしたいときは、LANG=Cにする。

$ export LANG=C
$ man man
MAN(1)                        Manual pager utils                        MAN(1)

NAME
       man - an interface to the on-line reference manuals

SYNOPSIS
...

$ export LANG=ja_JP.UTF-8
$ man man
MAN(1)                 マニュアルページユーティリティー                 MAN(1)

名前
       man - オンラインマニュアルのインターフェース

書式
...
検索パス

manのコンテンツは付属するアプリケーションと共にインストールされる。

何らかのアプリケーションを標準パスでないパスにインストールした場合、付属するmanも標準の検索パストは異なる場所にインストールされる場合がある。そして、そのとき該当マニュアルが存在しない旨のエラーが発生する。こんな時は、manの検索パスを設定する。

環境変数 MANPATH を設定する。

Bourne Shell

$ export MANPATH=/usr/local/share/man:MANPATH
$ man my_application

もしくは、manコマンドの-Mオプションでも指定できる。

$ man -M /usr/local/share/man my_command
セクション

manのコンテンツはセクション分けで管理されている。

表:manのセクション

セクション番号 内容
1 一般コマンド
2 システムコール
3 ライブラリ関数
4 バイスファイルなどの特殊ファイルとデバイスドライバ(通常/dev)
5 ファイル形式とその使用法(/etc/passwdなど)
6 ゲームとスクリーンセーバー
7 その他
8 システム管理コマンドとデーモンなど(通常はroot専用)

セクション指定でマニュアルを見れる。
セクション1printfのマニュアルを見る場合

$ man 1 printf
$ man -s 1 printf

PRINTF(1)                        User Commands                       PRINTF(1)

NAME
       printf - format and print data

SYNOPSIS

同名のマニュアルが別のセクションにも存在する場合、SEE ALSOセクションにリストされるので、参照したいマニュアルがわからない時に参考になる。

$ man 1 printf
SEE ALSO
       printf(3)

       The  full  documentation  for printf is maintained as a Texinfo manual.
       If the info and printf programs are properly installed  at  your  site,
       the command

              info coreutils 'printf invocation'

       should give you access to the complete manual.
..

man 5 fooを見てみたい。

/etc/passwd のマニュアル
$ man 5 passwd
PASSWD(5)                     File Formats Manual                    PASSWD(5)

名前
       passwd - パスワードファイル

説明
       passwd  ファイルには各ユーザアカウントの様々な情報が記録されている。 書
       かれているのは次の通り。

            ログイン名

            暗号化されたパスワード (無いこともある)
...
関連項目
       login(1),  passwd(1),   su(1),   shadow(5),   pwconv(8),   pwunconv(8),
       sulogin(8)

著者
       Julianne Frances Haugh (jockgrrl@ix.netcom.com)

                                                                     PASSWD(5)
キーワード検索

マニュアルを参照したいけれど対象の名称がわからない時。
man -k foo を使う。

$ man -k printf
asprintf (3)         - print to allocated string
dprintf (3)          - print to a file descriptor
fprintf (3)          - formatted output conversion
fwprintf (3)         - formatted wide-character output conversion
printf (1)           - format and print data
printf (3)           - formatted output conversion
snprintf (3)         - formatted output conversion
sprintf (3)          - formatted output conversion
swprintf (3)         - formatted wide-character output conversion
vasprintf (3)        - print to allocated string
vdprintf (3)         - print to a file descriptor
vfprintf (3)         - formatted output conversion
vfwprintf (3)        - formatted wide-character output conversion
vprintf (3)          - formatted output conversion
vsnprintf (3)        - formatted output conversion
vsprintf (3)         - formatted output conversion
vswprintf (3)        - formatted wide-character output conversion
vwprintf (3)         - formatted wide-character output conversion
wprintf (3)          - formatted wide-character output conversion
takashi@takashi-desktop:~/projects/jumpbox/chef-repo/cookbooks$ 
takashi@takashi-desktop:~/projects/jumpbox/chef-repo/cookbooks$ man -k passwd
chpasswd (8)         - パスワードファイルをバッチ処理で更新...
gpasswd (1)          - /etc/groupファイルを管理する
passwd (1)           - ユーザパスワードを変更する
passwd (5)           - パスワードファイル
update-passwd (8)    - /etc/passwd, /etc/shadow, /etc/group の安全な更新
chgpasswd (8)        - update group passwords in batch mode
Crypt::PasswdMD5 (3pm) - Provides interoperable MD5-based crypt() functions
fgetpwent_r (3)      - get passwd file entry reentrantly
getpwent_r (3)       - get passwd file entry reentrantly
grub-mkpasswd-pbkdf2 (1) - generate hashed password for GRUB
lppasswd (1)         - add, change, or delete digest passwords.
pam_localuser (8)    - require users to be listed in /etc/passwd
passwd (1ssl)        - compute password hashes
passwd2des (3)       - RFS password encryption
smbpasswd (5)        - The Samba encrypted password file
smbpasswd (8)        - change a user's SMB password
SSL_CTX_set_default_passwd_cb (3ssl) - set passwd callback for encrypted PEM ...
SSL_CTX_set_default_passwd_cb_userdata (3ssl) - set passwd callback for encry...

ちなみに、man man-k オプションのところを見てみると。

$ man man
...
       man -k printf
           キーワード printf  をマニュアルページ名と要約文の中から正規表現とし
           て検索します。一致するすべてのマニュアルページが表示されます。
           apropos -r printf と同様です。
...

info コマンド

これもオンラインマニュアルを表示するコマンド。

特色

  • 多層構造
    • コンテンツが章立てされた多層構造となっているケースが多い
  • 比較的充実したコンテンツ
    • 一概には言えないが、man<infoな感じらしい。
  • Emacs風の操作
    • ページ間移動があるので、このようなことが必要。Emacsに慣れていればよいが。。。
  • GUIでの操作
    • GUI表示出来るツールもある。基本操作はEmacsだが、マウスも使えるようだ。

正直Emacsに慣れていないので使わないだろう。。。

ヘルプメッセージ

簡単なオプションを調べたいときは、--helpオプションをコマンドにつけるといい。

$ command --help
# 例
$ cat --help
使用法: cat [オプション]... [ファイル]...
ファイル、または標準入力を連結し、標準出力に出力します。

  -A, --show-all           -vETと同じ
  -b, --number-nonblank    空行を除いて行番号を付け加える。-n より優先される
  -e                       -vEと同じ
  -E, --show-ends          行の最後に $ を付け加える
  -n, --number             全ての行に行番号を付け加える
  -s, --squeeze-blank      連続した空行の出力を抑止する
  -t                       -vTと同じ
  -T, --show-tabs          TAB文字を`^I'で表示
  -u                       (無視)
  -v, --show-nonprinting   非表示文字と`^'や`^'を付けて表示 (LFDとTABは除く)
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

ファイルの指定がなかったり, - であった場合, 標準入力から読み込みます.

例:
  cat f - g  最初に f の中身を出力し、次に標準入力を出力します。
            そして g の中身を出力します。
  cat        標準入力を標準出力に複製します。

cat のバグを発見した場合は bug-coreutils@gnu.org に報告してください。
GNU coreutils のホームページ: <http://www.gnu.org/software/coreutils/>
GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>
cat の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。
完全な文書を参照する場合は info coreutils 'cat invocation' を実行してください。

ちなみに、--helpが不正なオプションの場合。

$ awk --help
awk: not an option: --help



以上で、第5章 オンラインマニュアルは終わりです。 次回、第6章 セキュリティです。