LoginSignup
9
4

POSIX コマンド一覧 + SUS コマンド一覧 完全版

Last updated at Posted at 2021-10-14

はじめに

POSIX コマンド 一覧 と SUS コマンド 一覧の完全版(比較一覧)です。今まで発行された全ての POSIX (IEEE 1003) と SUS (Single UNIX Specification) の標準規格で規定されているコマンドをウェブで公開されている情報を元にまとめました。各コマンドの詳細は各標準規格のドキュメントを参照してください。調べた方法については「POSIX C言語API一覧とコマンド一覧の調べ方」を参照してください。

標準規格の基礎知識

標準規格の詳細は「POSIXとUnix関連の標準規格と歴史年表 (IEEE, SVID, XPG, SUS)」を参照してください。

POSIX (IEEE 1003)

POSIX の規格の大きな流れは以下の通りです。間に細かい追加機能や間違いの修正版があります。

  • 1988: POSIX.1-1988 - C 言語インターフェース (この記事の対象外)
  • 1992: POSIX.2-1992 - シェルとユーティリティ
  • 2001: POSIX.1-2001 - POSIX.1 と POSIX.2 の統合(最終改訂版は POSIX.1-2004
  • 2008: POSIX.1-2008 (最新の改訂版は POSIX.1-2017
  • 2024: POSIX.1-2024

SUS (Single UNIX Specification)

POSIX とは別に SUS の標準規格の流れがあり Issue 6 から POSIX と内容が同期されました。

  • 1984 - 1990: Issue 1 - Issue 3 (POSIX.1 ベース)
  • 1995: SUSv1 (UNIX 95) = Issue 4, Version 2
  • 1997: SUSv2 (UNIX 98) = Issue 5
  • 2001: SUSv3 (UNIX 03) = Issue 6 = POSIX.1-2001 と同期
  • 2008: SUSv4 (UNIX V7) = Issue 7 = POSIX.1-2008 と同期
    • (最新の改訂版は Issue 7, 2018 edition = POSIX.1-2017)

POSIX コマンド一覧 + SUS コマンド一覧

各コマンドの説明は以下の Wikipedia のページを参照してください。

リストの読み方

ヘッダ

  • コマンド: 太字: 必須、通常: オプション、取り消し線: 削除・廃止 (最新の POSIX 時点)
  • Issue 1,2,3: 各コマンドの CHANGE HISTORY 、あり/なしのみを記載
  • P92: POSIX.2-1992 (Version 2 Interface Tables より作成)
  • Issue4: Issue 4 (1992) | Issue 4, Version 2 (1994)
  • Issue5: Issue 5 (1997)
  • P2001: POSIX.1-2001 (改訂版 POSIX.1-2004 = Issue 6, 2004 Edition を参照)
  • P2008: POSIX.1-2008 (改訂版 POSIX.1-2017 = Issue 7, 2018 Edition を参照)
  • P2024: POSIX.1-2024 (Issue 8)

オプション

  • (D): DEVELOPMENT
  • (F): FORTRAN
  • (O): OPTIONAL
  • XSI: X/Open Systems Interfaces
  • CD: C-Language Development Utilities
  • BE: Batch Environment Utilities
  • SD: Software Development Utilities
  • UP: User Portability Utilities
  • UU: UUCP Utilities

補足

  • Issue 4: 「To Be Withdrawn」を非推奨、「Withdrawn」を廃止 と書いて、Possibly Unsupportable Utilities に (UN) とマークを付けています。
  • Issue 5: 「LEGACY」を廃止と書いています。(参考
  • Issue 6: : (colon), . (dot), continue, eval, exec, exit, export, set, shift, times, trap, unset は本来シェルで実装すべきものであるためリストからは省いています。

a, b, c, d

コマンド Issue
1,2,3
P92 Issue4 Issue5 P2001
Issue6
P2008
Issue7
P2024
Issue8
admin (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
alias - - - * * * UP * *
ar - o o SD * * * * *
asa - - - FR * * FR FR FR
at - o o * * * UP * *
awk - o o * * * * * *
banner - o o - 廃止 - - - -
basename - o o * * * * * *
batch - o o * * * UP * *
bc - - - * * * * * *
bg - - - * * * UP UP UP
Cコンパイラ
 cc - o o - 非推奨 廃止 - - -
 c89 - - - CD * * - - -
 c99 - - - - - - CD CD -
 c17 - - - - - - - - CD
cal - o o - * * XSI XSI XSI
calendar - o o - 非推奨 廃止 - - -
cancel - o o - (UN) 廃止 - - -
cat - o o * * * * * *
cd - o o * * * * * *
cflow - o o - (D) (D) (D) XSI (D) XSI (D) XSI
chgrp - o o * * * * * *
chmod - o o * * * * * *
chown - o o * * * * * *
chroot - o o - 廃止 - - - -
cksum - - - * * * * * *
cmp - o o * * * * * *
col - o o - * 廃止 - - -
comm - o o * * * * * *
command - - - * * * * * *
compress - - - - * * XSI XSI XSI
cp - o o * * * * * *
cpio - o o - 非推奨 廃止 - - -
crontab - o o * * * UP * *
csplit - o o * * * UP * *
ctags - - - * (D,F) (D,F) (D,F) UP (D,F) SD (D,F) SD
cu - o o - (UN) 廃止 - - -
cut - o o * * * * * *
cxref - o o - (D) (D) (D) XSI (D) XSI (D) XSI
date - o o * * * * * *
dd - o o * * * * * *
delta (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
df - o o * * * UP XSI * *
diff - o o * * * * * *
dircmp - o o - 非推奨 廃止 - - -
dirname - o o * * * * * *
dis - o o - 非推奨
(D,O)
廃止 (D) - - -
du - o o * * * UP * *

e, f, g, h

コマンド Issue
1,2,3
P92 Issue4 Issue5 P2001
Issue6
P2008
Issue7
P2024
Issue8
echo - o o * * * * * *
ed - o o * * * * * *
egrep - o o * * 廃止 - - -
env - o o * * * * * *
ex - o o * * * UP UP UP
expand - - - * * * UP * *
expr - o o * * * * * *
false - o o * * * * * *
fc - - - * * * UP UP UP
fg - - - * * * UP UP UP
fgrep - o o * * 廃止 - - -
file - - - * * * UP * *
find - o o * * * * * *
fold - - - * * * * * *
fort77 - - - FD (F) (F) (F) FD (F) OB FD -
fuser - - - - - * XSI XSI XSI
gencat - - o - * * XSI * *
get (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
getconf - - - - * * * * *
getopts - - - - * * * * *
gettext - - - - - - - - *
grep - o o * * * * * *
hash - o o - * * XSI * *
head - - - * * * * * *

i, j, k, l

コマンド Issue
1,2,3
P92 Issue4 Issue5 P2001
Issue6
P2008
Issue7
P2024
Issue8
iconv - . o - * * * * *
id - o o * * * * * *
ipcrm - - - - - * XSI XSI XSI
ipcs - - - - - * XSI XSI XSI
jobs - - - * * * UP UP UP
join - o o * * * * * *
kill - o o * * * * * *
lex - o o CD (D) (D) (D) CD (D) CD (D) CD
line - o o - 非推奨 廃止 - - -
link - - - - - * XSI XSI XSI
lint - o o - 非推奨 (D) 廃止 (D) - - -
ln - o o * * * * * *
locale - - - * * * * * *
localedef - - - * * * * * *
logger - - - * * * * * *
logname - o o * * * * * *
lp - o o * * * * * *
lpstat - o o - (UN) 廃止 - - -
ls - o o * * * * * *

m, n, o, p

コマンド Issue
1,2,3
P92 Issue4 Issue5 P2001
Issue6
P2008
Issue7
P2024
Issue8
m4 - o o - (D) (D) (D) XSI * *
mail - o o - * 廃止 - - -
mailx - o o * * * * * *
make - o o * (D) (D) (D) SD (D) SD (D) SD
man - - - * * * * * UP
mesg - o o * * * UP * *
mkdir - o o * * * * * *
mkfifo - - o * * * * * *
more - - - * * * UP UP UP
msgfmt - - - - - - - - *
mv - o o * * * * * *
newgrp - o o * * * UP * *
ngettext - - - - - - - - *
nice - - - * * * UP * *
nl - o o - * * XSI XSI XSI
nm - o o * (D) (D) (D)
UP SD XSI
(D)
SD XSI
(D)
SD XSI
nohup - o o * * * * * *
od - o o * * * * * *
pack - o o - 非推奨 廃止 - - -
paste - o o * * * * * *
patch - - - * * * UP * *
pathchk - - - * * * * * *
pax - - - * * * * * *
pcat - o o - 非推奨 廃止 - - -
pg - o o - 非推奨 廃止 - - -
pr - o o * * * * * *
printf - - - * * * * * *
prs (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
ps - o o * * * UP * *
pwd - o o * * * * * *

q, r, s, t

コマンド Issue
1,2,3
P92 Issue4 Issue5 P2001
Issue6
P2008
Issue7
P2024
Issue8
qalter - - - BE - - BE OB BE -
qdel - - - BE - - BE OB BE -
qhold - - - BE - - BE OB BE -
qmove - - - BE - - BE OB BE -
qmsg - - - BE - - BE OB BE -
qrerun - - - BE - - BE OB BE -
qrls - - - BE - - BE OB BE -
qselect - - - BE - - BE OB BE -
qsig - - - BE - - BE OB BE -
qstat - - - BE - - BE OB BE -
qsub - - - BE - - BE OB BE -
read - o o * * * * * *
red - o o - 廃止 - - - -
readlink - - - - - - - - *
realpath - - - - - - - - *
renice - - - * * * UP * *
rm - o o * * * * * *
rmdel (SCSS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
rmdir - o o * * * * * *
sact (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
sccs (SCCS) - - - - (D) (D) (D) XSI (D) XSI (D) XSI
sdb - o o - (UN) 廃止 - - - -
sed - o o * * * * * *
sh - o o * * * * * *
sleep - o o * * * * * *
sort - o o * * * * * *
spell - o o - 非推奨 廃止 - - -
split - o o * * * UP * *
strings - - - * * * UP * *
strip - o o (D) (D) (D) (D) SD (D) SD (D) SD
stty - o o * * * * * *
sum - o o - 非推奨 廃止 - - -
tabs - o o * * * UP XSI * *
tail - o o * * * * * *
talk - - - * * * UP UP UP
tar - o o * 非推奨 廃止 - - -
tee - o o - * * * * *
test - o o * * * * * *
time - o o * * * UP * *
timeout - - - - - - - - *
touch - o o * * * * * *
tput - - - * * * UP * *
tr - o o * * * * * *
true - o o * * * * * *
tsort - o o - * * XSI * *
tty - o o * * * * * *
type - o o - * * XSI XSI XSI

u, v, w, x, y, z

コマンド Issue
1,2,3
P92 Issue4 Issue5 P2001
Issue6
P2008
Issue7
P2024
Issue8
ulimit - o o - * * XSI XSI XSI
umask - o o * * * * * *
unalias - - - * * * UP * *
uname - o o * * * * * *
uncompress - - - - * * XSI XSI XSI
unexpand - - - * * * UP * *
unget (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
uniq - o o * * * * * *
unlink - - - - - * XSI XSI XSI
unpack - o o - 非推奨 廃止 - - -
uucp - o o - * * XSI UU UU
uudecode - - - * * * UP * *
uuencode - - - * * * UP * *
uulog - o o - (UN) 廃止 - - -
uuname - o o - (UN) 廃止 - - -
uupick - o o - (UN) 廃止 - - -
uustat - o o - * * XSI UU UU
uuto - o o - (UN) 廃止 - - -
uux - o o - * * XSI UU UU
val (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
vi - o o * * * UP UP UP
wait - o o * * * * * *
wall - o o - 廃止 - - - -
wc - o o * * * * * *
what (SCCS) - o o - (D) (D) (D) XSI (D) XSI (D) XSI
who - o o * * * UP XSI * *
write - o o * * * UP * *
xargs - o o * * * * * *
xgettext - - - - - - - - CD
yacc - o o CD (D) (D) (D) CD (D) CD (D) CD
zcat - - - - * * XSI XS XSI

必須コマンドとオプションコマンド

POSIX で標準化されているコマンドは必ずしも実装が必須となっているわけではありません。ここでは何が必須で何がそうでないかを「必須コマンド」と「オプションコマンド」に分けてまとめました。また「必須コマンド」となっていたとしても、環境によっては標準でインストールされていない場合があります。そこで参考として「どの環境でも使える可能性が高いコマンド」(Debian 最小構成と Busybox の両方で実装されているもの)とそうでないコマンドを分けて書いています。

POSIX.1-2008 (Issue 7)

Issue 7 のコマンド(全 160 個)についてまとめました。

  • 必須コマンド (全 105 個)
    • シェルビルトインコマンド(16 個)
      alias, cd, command, echo, false, getopts, hash, kill, printf, pwd, read, test, time, true, umask, wait
    • どの環境でも使える可能性が高いコマンド (57 個)
      awk, basename, cat, chgrp, chmod, chown, cksum, cmp, comm, cp, cut, date, dd, df, diff, dirname, du, env, expand, expr, find, fold, grep, head, id, ln, logger, logname, ls, mesg, mkdir, mkfifo, mv, nice, nohup, od, paste, renice, rm, rmdir, sed, sh, sleep, sort, split, stty, tail, tee, touch, tr, tty, uname, unexpand, uniq, wc, who, xargs
    • 環境によっては使えない場合があるコマンド(32 個)
      ar, at, batch, bc, crontab, csplit, ed, file, gencat, getconf, iconv, join, locale, localedef, lp, m4, mailx, man, newgrp, patch, pathchk, pax, pr, ps, strings, tabs, time, tput, tsort, uudecode, uuencode, write
  • オプションコマンド(全 55 個)
    • シェルビルトインコマンド (6 個)
      bg, fc, fg, jobs, type, ulimit
    • 上記以外 (28 個)
      asa, c99, cal, cflow, compress, ctags, cxref, ex, fort77, fuser, ipcrm, ipcs, lex, link, make, more, nl, nm, strip, talk, uncompress, unlink, uucp, uustat, uux, vi, yacc, zcat
    • SCCS(10 個)
      admin, delta, get, prs, rmdel, sact, sccs,unget,val, what
    • Batch Environment Utilities(11 個)
      qalter, qdel, qhold, qmove, qmsg, qrerun, qrls, qselect, qsig, qstat, qsub

POSIX.1-2024 (Issue 8)

Issue 8 のコマンド(全 155 個)をまとめました。Issue 7 よりも5個減っていますが、Batch Environment Utilities と fort77 の 12 個が削除されたことによるものなので、実質的には 7 個増えています。

  • 必須コマンド (全 111 個)
    • シェルビルトインコマンド(16 個)
      alias, cd, command, echo, false, getopts, hash, kill, printf, pwd, read, test, time, true, umask, wait
    • どの環境でも使える可能性が高いコマンド (60 個)
      awk, basename, cat, chgrp, chmod, chown, cksum, cmp, comm, cp, cut, date, dd, df, diff, dirname, du, env, expand, expr, find, fold, grep, head, id, ln, logger, logname, ls, mesg, mkdir, mkfifo, mv, nice, nohup, od, paste, readlink, realpath, renice, rm, rmdir, sed, sh, sleep, sort, split, stty, tail, tee, timeout, touch, tr, tty, uname, unexpand, uniq, wc, who, xargs
    • 環境によっては使えない場合があるコマンド(35 個)
      ar, at, batch, bc, crontab, csplit, ed, file, gencat, getconf, gettext, iconv, join, locale, localedef, lp, m4, mailx, man, msgfmt, ngettext, newgrp, patch, pathchk, pax, pr, ps, strings, tabs, time, tput, tsort, uudecode, uuencode, write
  • オプションコマンド(全 44 個)
    • シェルビルトインコマンド (6 個)
      bg, fc, fg, jobs, type, ulimit
    • 上記以外 (28 個)
      asa, c17, cal, cflow, compress, ctags, cxref, ex, fuser, ipcrm, ipcs, lex, link, make, more, nl, nm, strip, talk, uncompress, unlink, uucp, uustat, uux, xgettext, vi, yacc, zcat
    • SCCS(10 個)
      admin, delta, get, prs, rmdel, sact, sccs,unget,val, what

コマンド追加・削除の変更履歴

注意 これはコマンド単位で変更になったものの情報です。各コマンドのコマンドラインオプションの変更等は含まれていません。バージョンによって標準規格の内容は異なるのでそれぞれのコマンドの詳細を確認してください。

POSIX.2-1992 から POSIX.1-2001

  • 追加されたコマンド(SUS からの輸入)
    • SCCS: admin, delta, get, prs, rmdel, sact, sccs,unget,val, what
    • 圧縮・展開: compress, uncompress, zcat
    • UUCP(UNIX 間コピー・プログラム): uucp, uustat, uux
    • プロセス間通信: ipcm, ipcs
    • シェル関連: getopts, hash, type, ulimit
    • リンクやファイルの作成と削除: link, unlink
    • 開発ツール: cflow, cxref, gencat, m4
    • 便利コマンド: cal, fuser, genconf
    • 便利フィルタ: iconv, nl, tee, tsort
  • 更新されたコマンド
    • c89 -> c99
  • 削除されたコマンド
    • egrepfgreptar

POSIX.1-2001 から POSIX.1-2008

  • 追加・削除されたコマンド
    • なし
  • 必須になったコマンド
    • シェル関連: alias, hash, newgrp, unalias
    • at, batch, crontab, csplit, df, du, expand, file, gencat, m4, mesg, nice, patch, ps, renice, split, strings, tabs, time, tput, tsort, unexpand, uudecode uuencode, white, who
  • 変更されたコマンド
    • ctags([UP] から [SD] に変更)
    • uucp, uustat, uux ([XSI] から [UU] に変更)
    • nm ([UP] ではなくなった)
  • 非推奨になったコマンド
    • fort77
    • Batch Environment Utilities(qalter, qdel, qhold, qmove, qmsg, qrerun, qrls, qselect, qsig, qstat, qsub

POSIX.1-2008 から POSIX.1-2024

  • 追加されたコマンド
    • 国際化関連: gettext, msgfmt, ngettext, xgettext
    • readlink, realpath, timeout
  • 変更されたコマンド
    • c99 から c17
    • man([UP] に変更)
  • 削除されたコマンド
    • fort77
    • Batch Environment Utilities(qalter, qdel, qhold, qmove, qmsg, qrerun, qrls, qselect, qsig, qstat, qsub
  • 非推奨になったコマンド
    • なし

補足説明

必須コマンドについて

POSIX で規定されている上記のコマンドのすべてが実装されているわけではありません。上記で必須となっていないコマンドは POSIX に準拠しているシステムでも存在しない可能性があります。例えば compress / uncompress は XSI オプションであるため存在しない可能性があります。必須でないコマンドの多くは POSIX.1-2001 で SUS が統合されるときに(おそらく互換性のために)SUS から輸入されたのコマンドが大半です。これらのコマンドは入っていなくても POSIX に準拠してないことにはなりません。

ただし UNIX を名乗る場合には XSI オプションの実装が必要です。上記で書いたように XSI オプションは元々 SUS で規定されていたコマンドです。また UP (User Portability Utilities option) と CD (C-language Development の c99 も必要です。ややこしいことに XSI オプション の中にも実装が UNIX として必須ではないオプションがあって、上記のリストで (D)(F) と書いているのがそれです。それぞれの意味は各コマンドの NAME に書かれている (DEVELOPMENT)(FORTRAN) です(例 ctagsctags - create a tags file (DEVELOPMENT, FORTRAN))。特に SCCS(バージョン管理)等は UNIX の認証を取得していたとしても実装されていない可能性があり、事実 macOS は UNIX の認証を取得していますが SCCS コマンドは存在しません。(参考 Commands and Utilities Issue 4, Version 2 の P81)

まとめると、上記のリストで POSIX で必須なのは [?] がついていないコマンドで、UNIX で必須なコマンドは (?) がついていないコマンドです。ただしコマンドラインオプションごとに必須かどうかが規定されている(特定の機能だけ XSI オプションとなっていたりする)ので、コマンドがあるからと言って POSIX に書かれたすべてのコマンドラインオプションや機能が使えるわけではありません。

また POSIX で必須となっているコマンドであっても、そもそも POSIX に完全に準拠していると主張するシステムが Linux や BSD を含めて殆ど存在しないわけで、上記の必須となっているコマンドでさえ「おそらく存在するだろう」という程度の意味でしかありません。

参考

廃止コマンドについて

SUS では Issue 5 (SUSv2) で多くのコマンドが廃止となっており、POSIX と内容を共有した Issue 6 (SUSv3) で削除されています。SUSv3 は 2021 年時点で多くの UNIX が準拠しているバージョンです。(参考 UNIX® Certified Products

ただしこれを 「使えなくなったコマンド」と解釈するのは間違いです。例えば tar コマンドは POSIX と同期するときに削除されたコマンドですが、実際の環境で使えないということはまずありません。

各ベンダーはなによりも互換性を重視しています。たとえ POSIX で削除されたり廃止されたコマンドオプションがあったとしても、各ベンダーはそれに素直に従って削除したりはしません。POSIX は各ベンダーによる拡張を認めているので、POSIX から削除された機能は各ベンダーの拡張機能として残ります。OS をバージョンアップしたときに互換性があるのは各ベンダーの努力であり POSIX とは無関係です。

そもそも POSIX は移植性・可搬性のための標準規格であり、他の OS に移動した時にそのまま動く可能性が高いものを標準規格にしています。つまり POSIX から削除されるということの意味は、他の OS との移植性が十分ではないことが明らかになったという意味でしかありません。同一の OS のバージョンアップ時における互換性の話とは別の話です。

  • 他の環境への移植の互換性について・・・POSIX が調査し標準化している
  • 同一環境の更新時の互換性について・・・各ベンダーの努力により実現している

このような違いがあります。そのため POSIX で廃止されたとしてもそれは他の環境との移植するときに注意が必要ということであって、OS のバージョンアップで削除されるかもしれないと気にする必要はありません。もちろん各 OS のバージョンアップ情報は気にする必要があります。

その他の気づいた点

  • SCCS 関連は元々 POSIX.2 で標準化されていなかったが SUS から輸入された
  • POSIX.2 で tar は標準化されていたが cpioでは標準化されていなかった
    • SUS では両方標準化されていた
  • POSIX.2 では圧縮展開コマンドはまったく標準化されていなかった(SUS で標準化されていた)
    • 標準化されてない: compress, umcompress, zcat, pack, unpack, pcat
  • POSIX.1-2001 で 標準化された圧縮展開コマンドは SUS から輸入した一部のみ
    • 標準化された: compress, umcompress, zcat
  • getconf, iconv, nl, tee, tsort は SUS から輸入された
  • egrep, fgrep は POSIX.2 と SUS にあったが POSIX.1-2001 で削除された
  • ipcrmipcs は SUS から輸入された
  • link, unlink は SUSから輸入された
  • POSIX.1-2008 で m4 が DEVELOPMENT オプションから base に移動された
  • vi は POSIX.2, SUS ともに最初から標準化されていたが、POSIX.1-2001 から必須ではなくなった
  • SUS で標準化されていた UUCP 関係のコマンドは POSIX.1-2001 で削除またはオプションとなった
  • uudecodeuuencode コマンドは UUCP 関係でもあるが POSIX.2 の時点で標準化されていた

一部のコマンドの削除された理由等
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap04.html

さいごに

長らく最初に POSIX が標準化された時に、どういうコマンドが記載されたんだろうとずっと気になっていたのですが、ようやく見つかりました。まさか SUS の Version 2 Interface Tables に比較リストがあるとは思いもよらず。これでようやく最初に POSIX が標準化したときには中途半端なコマンドはなかったんだなとわかりました。SCCS とか ipcrmipcs は全部 SUS が悪いんですね。でも crontab が最初からあったりと少し違和感を感じていたりしますが。

記事更新履歴

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4