Linux Command Optionの慣習(一般的なOption一覧)
前書き
本記事は、Linux環境で実行するCommand Optionの慣習について、調査結果を記載します。調査動機は、「Option規格」や「一般的に用いられるOption」を知る事によって、よりよいInterfaceを持つCommandが作成できると考えたからです。特に、Option文字列(例:–version)は、他のCommandに可能な限り一致させた方が、ユーザが混乱しないと考えています。
なお、記事中に”–“という表示がありますが、この表記はハイフンが2個ある記載を意図しています。WordPressの機能によって、”–“が正しく表記されていません。
Command Line Interface仕様の種類
Command Line Interfaceには、複数の仕様があります。
現実的には、POSIX/GNUの仕様を併せ持つCommand Option Parser Library(Option解析ライブラリ)が、各言語向けに存在します。つまり、Commad Optionを解析するコードを自力で書かない限り、GNU/POSIXの仕様に(ある程度)従います。例えば、C言語であれば、getopt()がPOSIX規格の Short Option(“-“)を解析し、getopt_long()がPOSIX規格/GNUのOption(“-“と”–“)を解釈します。これらの関数は、どちらもGlibcが提供する関数で、標準的なLinuxであれば導入されています。
Command Optionに関するPOSIX規格
POSIX規格の中から、重要な内容のみを抜粋して記載します。
1 2 |
書式 utility_name [-a] [-b] [-c option_argument] [-d|-e] [-f[option_argument]] [operand...] |
- Optionは”-“で始め、Option文字列は英数字1文字
- 複数のOptionを使用する場合、”-“を省略して繋げられる (例:”-a -b -c”を”-abc”と表記可)
- OptionとOption引数の間は、空白を入れる事
- Optionは、Command引数の前に存在する事
- Optionは、Command実行時に省略できる事
最後の”Optionは、Command実行時に省略できる事”に関しては、私は失敗した事があります。過去に私は、各スクリプト言語ファイルのいずれかを生成し、生成したファイルに実行権・Shebangを付与するCommandを作成しました。当然、スクリプト種類によって、Shebangが変わります。そのため、「Optionが”-r”の場合はruby、”-b”の場合はbash、”-p”の場合はpythonを作成しよう」と考えました。
しかし、Optionを用いない仕様(例:”command 生成ファイル名”)とし、スクリプト種類は生成ファイル名の拡張子から判定した方が利便性が高かったです。
Command Optionに関するGNU Coding Style
GNU Coding Styleでは、POSIX規格に従う事を推奨しています。さらに、GNUではPOSIX規格に以下の仕様を加えています。
- “–“およびOptionのロング名のサポート(例:”-v”に対応する”–version”)
- OptionとOption引数が連結した形式のサポート(例:–test=path)
- “–version”(バージョン表示)および”–help”(ヘルプもしくはUsageの表示)を最低限サポートする事
一般的なOption一覧
Linuxで頻繁に使用されるCommandは、ある程度同じ意味合いのOptionを持ちます。アルファベットaからzまでのOptionで、期待される動作を下表に示します。この表は参考であり、全く違うOptionを作成しても問題はありません。
Short Option | Long Option | 機能(オプションを実装しているCommand) |
a | all |
全ファイルや全ユーザなどを対象にした処理(du、nm、uname) |
b | bytes、blocks | バイトやブロックのサイズを設定(du、df) |
c | cmd | サブプロセスに渡すCommandおよびOptionを設定(bash、python) |
d | debug | debugメッセージを出力(多くのCommand) |
d | dry-run |
ファイルやシステムに変更を加えずに、処理の検証
|
d | delete |
引数で指定した対象を削除
|
e | exclude | 除外対象(例:ファイル)を設定(rync) |
f | file | 使用するfileを設定(awk、make、sed、tar) |
g | group | グループを設定(install) |
h | help | Commandを使用する上でのhelpを表示(多くのCommand) |
i | inodes |
ブロック使用量の代わりに iノード情報を表示(ls、df) |
j | jobs | ジョブの数を設定(make) |
k | keep | ファイル・メッセージ・リソースなどの削除を抑制(passwd、bzip) |
l | list | ファイル・ディレクトリなどのリストを表示(unzip、ls) |
m | mode | 権限の設定(install、mkdir) |
n | number | 番号(例:行番号)を表示(head、tail、grep) |
o | output | 出力ファイル名や出力ファイルパスの設定(多くのCommand) |
p | 多種多様 | 参考文献を参照 |
q | quiet | メッセージの出力を抑制(多くのCommand) |
r | recursive | 再帰的に処理を実行(grep、chgrp、choen、cp、ls、diff、rm) |
s | silent | メッセージの出力を抑制(多くのCommand) |
t | 多種多様 | 参考文献を参照 |
u | update | アップデートを実行(apt、yum、cp、mv、tar) |
v | version | プログラムのVersion情報を表示(多くのCommand) |
v | verbose |
詳細にメッセージを表示
|
w | width | 幅の設定(ls、ptx) |
x | extract | アーカイブなどから抽出するファイル一覧を表示(tar、zip) |
y | yes | ユーザ確認する処理において、全確認項目に対してユーザがyesと回答したとみなす(apt、yum) |
z | zip(compress) | 圧縮を有効化(tar) |
参考
The Art of Unix Programming: Command-Line Options
GNU Coding Standards: Table of Long Options
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。