Linux　POSIX オプション、GNU オプションとは

# コマンドラインインターフェースの種類

コマンドラインインターフェースは、主に`POSIX`と`GNU`の仕様に従って設計されています。

この記事はかなりの部分を以下の参考ページの記述を引用しています。詳しくご覧になりたい方はぜひ、直接参考サイトを御覧ください。

参考: [Linux Command Optionの慣習(一般的なOption一覧)](https://debimate.jp/2019/02/23/linux-command-option%E3%81%AE%E6%85%A3%E7%BF%92%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AAoption%E4%B8%80%E8%A6%A7/#Command_Option%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8BPOSIX%E8%A6%8F%E6%A0%BC)

## POSIX (ポジックス)

> **POSIX  【 Portable Operating System Interface 】** 
> POSIXとは、主にUNIX系OSに共通する機能などについて、プログラムからの呼び出し方法などの標準を定めた規格。

> カーネルの機能を呼び出すシステムコールをC言語から利用するためのAPI仕様や標準ライブラリ関数などを定めており、POSIX仕様のみを用いて開発されたプログラムはPOSIX準拠のOSならばどれでも同じように動作させることができる。

> API以外にも、シェルのコマンド体系や、プロセスやスレッドの仕様、ファイルやディレクトリの構成、パスワードファイルなどのシステムデータベースの形式、アーカイブファイルの形式などについても標準を定めている。


参考: [POSIX（Portable Operating System Interface）とは - IT用語辞典 e-Words](http://e-words.jp/w/POSIX.html)

### POSIXのオプション規格

- オプションは”-“で始め、オプション文字列は英数字１文字
- 複数のオプションを使用する場合、”-“を省略して繋げられる (例：”-a -b -c”を”-abc”と表記可)
- オプションとオプション引数の間は、空白を入れる事
- オプションは、コマンドライン引数の前に存在する事
- オプションは、コマンドライン実行時に省略できる事

## GNU (グヌー)

> **GNU  【 GNU is Not Unix 】 **
> GNUとは、フリーソフトウェア（特に、オープンソースソフトウェア）のみでUNIX風のOSと関連するソフトウェア群を開発・公開するプロジェクト。リチャード・ストールマン（Richard M. Stallman）氏が創始し、同氏が代表を務めるフリーソフトウェア財団（FSF：Free Software Foundation）が推進している。

> GNUの一環として提供されるソフトウェアの名称には、その一部に「GNU」が含まれたり（GNU Emacsなど）、あるいは先頭が「g」から始まる（gcc、glibcなど）ことが多い。

参考: [GNUとは - IT用語辞典 e-Words](http://e-words.jp/w/GNU.html)

### GNUのオプション規格

POSIXの規格に従うことを推奨していることに加えて、以下の仕様を加えている。

- “–“およびオプションのロング名のサポート（例：”-v”に対応する”–version”）
- オプションとオプション引数が連結した形式のサポート（例：–test=path）
- “–version”(バージョン表示)および”–help”(ヘルプもしくはUsageの表示)を最低限サポートする事

## 一般的なオプションの一覧

| 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） |
| e | exclude | 除外対象（例：ファイル）を設定(rync) |
| f | file | 使用するfileを設定（awk、make、sed、tar） |
| g | group | グループを設定（install） |
| h | help | Commandを使用する上でのhelpを表示（多くのCommand） |
| i | inodes | ブロック使用量の代わりに iノード情報を表示(ls、df)<br>inodes以外に、interactiveも存在（rm、mv）  |
| 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） |
| w | width | 幅の設定（ls、ptx） |
| x | extract | アーカイブなどから抽出するファイル一覧を表示（tar、zip） |
| y | yes | ユーザ確認する処理において、全確認項目に対してユーザがyesと回答したとみなす（apt、yum） |
| z | zip(compress) | 圧縮を有効化（tar） |

## 参考

[Linux Command Optionの慣習(一般的なOption一覧)](https://debimate.jp/2019/02/23/linux-command-option%E3%81%AE%E6%85%A3%E7%BF%92%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AAoption%E4%B8%80%E8%A6%A7/#Command_Option%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8BPOSIX%E8%A6%8F%E6%A0%BC)

[Command-Line Options](http://www.catb.org/esr/writings/taoup/html/ch10s05.html)

[Option Table (GNU Coding Standards)](https://www.gnu.org/prep/standards/html_node/Option-Table.html#Option-Table)