最近、LinuC の勉強を始めていて、Linuxコマンドを触る中で気になったことがあります。
それは「同じことをするコマンドなのに、オプションの書き方がバラバラ」という点です。
今まで意識していなかったけど、覚えることが多すぎて、ふと疑問に思ってしまいました。
例えば、
-
ps auxのようにハイフンなし -
ps -efのようにハイフン付き -
ls --allのように長いオプション
と、複数のスタイルが混在しています。
「なぜ統一されていないのか?」「どれを使えばいいのか?」
疑問に思ったので、歴史的背景を調べて整理してみました。
この記事ではその結果をまとめます。
用語の補足:AT&T、BSD、GNU、POSIX
まず、この記事で出てくる主要な用語を整理します。
| 略称 | 正式名称 | 概要 |
|---|---|---|
| AT&T | American Telephone and Telegraph | 商用Unixの開発元。1970年代のSystem V UNIXを作成。短いハイフン付きオプション文化の源流。 |
| BSD | Berkeley Software Distribution | カリフォルニア大学バークレー校で開発されたUnix派生。便利さ重視でハイフンなしオプションを多用。 |
| GNU | GNU’s Not UNIX! | 1983年開始のフリーソフトウェアプロジェクト。Unix互換のコマンド群を開発し、長いオプション --long-option を追加。 |
| POSIX | Portable Operating System Interface | IEEEが策定したUnix互換OS標準仕様。ハイフン付き短いオプション形式を標準化。 |
1. Unix黎明期:ハイフンのないオプション
1970年代、UNIXの最初期には オプションにハイフンを付ける文化はまだなかった。
例:
-
ls l(リストをロング形式で表示) -
ps aux(BSDで広まった形式)
この頃はコマンド数も少なく、ユーザー数も限られていたため、曖昧さのリスクよりも 打鍵数の短さ が重視されていました。
2. AT&T系 System V と「-」の定着
1970年代後半〜1980年代に商用化された AT&T Unix (System V系) では、
オプションと引数を明確に区別するために - が付けられるようになった。
例:
ps -efls -l -a
これは後に POSIX標準 に組み込まれ、現在の「ハイフン付き短いオプション」の基本形になりました。
3. BSD系の流れ:ps aux 文化
一方、BSD (Berkeley Software Distribution) は、
従来の ハイフンなし文化 を強く引き継ぎました。
例:
ps auxtar cvf
この結果、AT&T系(System V)とBSD系でオプション表記にズレが生じます。
4. GNUとロングオプションの登場
1983年に始まった GNU (GNU’s Not UNIX!) プロジェクトは、フリーソフトウェアとしてUnix互換環境を作ろうとしました。
GNUコマンドの特徴のひとつが --long-option 形式。
例:
ls --allls --human-readable
特徴:
- 可読性が高い
- スクリプトに書いたときの意味が明確
- オプション数が増えても衝突しにくい
Linuxで一般的に普及しました。
5. POSIX標準化と互換性の混乱
POSIX (Portable Operating System Interface) は、Unix系OSの互換性を保つための標準仕様です。
- 短いハイフン付きオプションを標準化
- ただし、既存の BSD / System V / GNU の文化が広まっていたため、完全統一は不可能
- 結果として現代Linuxでは 複数のスタイルが共存 しています
6. 代表的なコマンドでの違い
ps
- BSDスタイル:
ps aux - System V / POSIXスタイル:
ps -ef - Linuxの
psは 両方サポート(互換性維持のため)
tar
- BSDスタイル:
tar cvf archive.tar files... - POSIXスタイル:
tar -cvf archive.tar files... - GNU tar: 両方サポート +
--gzipなど長いオプションも追加
7. まとめ表
| 系統 | オプション表記の特徴 |
|---|---|
| 初期Unix | ハイフンなし (ps aux) |
| AT&T System V | ハイフン付き短いオプション |
| BSD Unix | ハイフンなしを継承 |
| POSIX | ハイフン付き短いオプション |
| GNU/Linux | -- 長いオプション追加 |
8. LinuxがOSSだからこそ複数文化が共存している
商用UNIXではベンダーごとに仕様が決められていましたが、Linuxは OSS として開発され、多様な開発者や文化が参加しました。
その結果、
- BSD流(ハイフンなし)の便利さ
- System V / POSIX流(短いオプション)の標準性
- GNU流(長いオプション)の可読性
が すべて残って共存 しています。
OSS開発では「既存ユーザーを壊さないこと」が重視されるため、
- 古い表記法も残す
- 新しい表記法も追加する
という形になり、Linuxでは 3スタイルが同時に使える状態 が続いています。
9. 実務的Tips
- スクリプトでは長いオプション推奨 → 意味が明確で環境差異に強い
- 対話的操作では短いオプションが便利 →
ls -l,ps auxなど - 混在に注意 →
ps auxとps -efは出力形式が違うため、解析スクリプトでは統一
10. まとめ
- オプション指定の揺れは、Unixの系統ごとの歴史的背景 に由来する
- BSDはハイフンなし、System Vはハイフン付き、GNUは長いオプションを追加
- LinuxがOSSであるため、これら異なる流儀をすべて受け入れて共存している
- 実務では
- スクリプト: 長いオプション
- 手作業: 短いオプション
が現実的な使い分け
11. 最後に
Linuxコマンドのオプションって、歴史や文化を知ると面白いけど、正直「どれ使えばいいの?」って迷いますよね。
BSD式、System V式、GNU式…みなさんはどれが好きですか?
これ、全部使いこなせてる人っているのかな...