はじめに
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 コマンドのリスト (日本語)
- List of POSIX commands (英語)
リストの読み方
ヘッダ
- コマンド: 太字: 必須、通常: オプション、取り消し線: 削除・廃止 (最新の 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 | * | * | * | * | * | * |
- o o | - | 廃止 | - | - | - | - | |
basename | - o o | * | * | * | * | * | * |
batch | - o o | * | * | * | UP | * | * |
bc | - - - | * | * | * | * | * | * |
bg | - - - | * | * | * | UP | UP | UP |
Cコンパイラ | |||||||
|
- o o | - | 非推奨 | 廃止 | - | - | - |
|
- - - | CD | * | * | - | - | - |
|
- - - | - | - | - | CD | CD | - |
c17 | - - - | - | - | - | - | - | CD |
cal | - o o | - | * | * | XSI | XSI | XSI |
- o o | - | 非推奨 | 廃止 | - | - | - | |
- 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 | * | * | * | * | * | * |
- o o | - | 廃止 | - | - | - | - | |
cksum | - - - | * | * | * | * | * | * |
cmp | - o o | * | * | * | * | * | * |
- o o | - | * | 廃止 | - | - | - | |
comm | - o o | * | * | * | * | * | * |
command | - - - | * | * | * | * | * | * |
compress | - - - | - | * | * | XSI | XSI | XSI |
cp | - o o | * | * | * | * | * | * |
- o o | - | 非推奨 | 廃止 | - | - | - | |
crontab | - o o | * | * | * | UP | * | * |
csplit | - o o | * | * | * | UP | * | * |
ctags | - - - | * | (D,F) | (D,F) | (D,F) UP | (D,F) SD | (D,F) SD |
- 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 | * | * | * | * | * | * |
- o o | - | 非推奨 | 廃止 | - | - | - | |
dirname | - o o | * | * | * | * | * | * |
- 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 | * | * | * | * | * | * |
- 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 |
- o o | * | * | 廃止 | - | - | - | |
file | - - - | * | * | * | UP | * | * |
find | - o o | * | * | * | * | * | * |
fold | - - - | * | * | * | * | * | * |
- - - | 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 |
- o o | - | 非推奨 | 廃止 | - | - | - | |
link | - - - | - | - | * | XSI | XSI | XSI |
- o o | - | 非推奨 (D) | 廃止 (D) | - | - | - | |
ln | - o o | * | * | * | * | * | * |
locale | - - - | * | * | * | * | * | * |
localedef | - - - | * | * | * | * | * | * |
logger | - - - | * | * | * | * | * | * |
logname | - o o | * | * | * | * | * | * |
lp | - o o | * | * | * | * | * | * |
- 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 | * | * |
- 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 | * | * | * | * | * | * |
- o o | - | 非推奨 | 廃止 | - | - | - | |
paste | - o o | * | * | * | * | * | * |
patch | - - - | * | * | * | UP | * | * |
pathchk | - - - | * | * | * | * | * | * |
pax | - - - | * | * | * | * | * | * |
- o o | - | 非推奨 | 廃止 | - | - | - | |
- 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 |
---|---|---|---|---|---|---|---|
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
- - - | BE | - | - | BE | OB BE | - | |
read | - o o | * | * | * | * | * | * |
- 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 |
- o o | - | (UN) 廃止 | - | - | - | - | |
sed | - o o | * | * | * | * | * | * |
sh | - o o | * | * | * | * | * | * |
sleep | - o o | * | * | * | * | * | * |
sort | - o o | * | * | * | * | * | * |
- o o | - | 非推奨 | 廃止 | - | - | - | |
split | - o o | * | * | * | UP | * | * |
strings | - - - | * | * | * | UP | * | * |
strip | - o o | (D) | (D) | (D) | (D) SD | (D) SD | (D) SD |
stty | - o o | * | * | * | * | * | * |
- o o | - | 非推奨 | 廃止 | - | - | - | |
tabs | - o o | * | * | * | UP XSI | * | * |
tail | - o o | * | * | * | * | * | * |
talk | - - - | * | * | * | UP | UP | UP |
- 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 |
- o o | - | 非推奨 | 廃止 | - | - | - | |
uucp | - o o | - | * | * | XSI | UU | UU |
uudecode | - - - | * | * | * | UP | * | * |
uuencode | - - - | * | * | * | UP | * | * |
- o o | - | (UN) | 廃止 | - | - | - | |
- o o | - | (UN) | 廃止 | - | - | - | |
- o o | - | (UN) | 廃止 | - | - | - | |
uustat | - o o | - | * | * | XSI | UU | UU |
- 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 | * | * | * | * | * | * |
- 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
- シェルビルトインコマンド(16 個)
-
オプションコマンド(全 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
- シェルビルトインコマンド (6 個)
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
- シェルビルトインコマンド(16 個)
-
オプションコマンド(全 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
- シェルビルトインコマンド (6 個)
コマンド追加・削除の変更履歴
注意 これはコマンド単位で変更になったものの情報です。各コマンドのコマンドラインオプションの変更等は含まれていません。バージョンによって標準規格の内容は異なるのでそれぞれのコマンドの詳細を確認してください。
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
- SCCS:
- 更新されたコマンド
-
c89
->c99
-
- 削除されたコマンド
-
egrep
、fgrep
、tar
-
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)
です(例 ctags の ctags - 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 を含めて殆ど存在しないわけで、上記の必須となっているコマンドでさえ「おそらく存在するだろう」という程度の意味でしかありません。
参考
-
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap01.html
- shall や may 等の定義
- https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap02.html
廃止コマンドについて
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 で削除された -
ipcrm
、ipcs
は SUS から輸入された -
link
,unlink
は SUSから輸入された - POSIX.1-2008 で
m4
が DEVELOPMENT オプションから base に移動された -
vi
は POSIX.2, SUS ともに最初から標準化されていたが、POSIX.1-2001 から必須ではなくなった - SUS で標準化されていた UUCP 関係のコマンドは POSIX.1-2001 で削除またはオプションとなった
-
uudecode
、uuencode
コマンドは UUCP 関係でもあるが POSIX.2 の時点で標準化されていた
一部のコマンドの削除された理由等
https://pubs.opengroup.org/onlinepubs/9799919799/xrat/V4_xcu_chap01.html#tag_23_03_03
さいごに
長らく最初に POSIX が標準化された時に、どういうコマンドが記載されたんだろうとずっと気になっていたのですが、ようやく見つかりました。まさか SUS の Version 2 Interface Tables に比較リストがあるとは思いもよらず。これでようやく最初に POSIX が標準化したときには中途半端なコマンドはなかったんだなとわかりました。SCCS とか ipcrm
や ipcs
は全部 SUS が悪いんですね。でも crontab
が最初からあったりと少し違和感を感じていたりしますが。
記事更新履歴
- 2021-10-17
- POSIX.2 のコマンド一覧を以下の情報を元に更新
- The Single UNIX Specification Interface Tables
-
egrep
、fgrep
、tar
が必須だった- 参照していた Issue 6 の マイグレーション情報に抜けていた
- 抜けていた
wall
コマンドの情報を追加
- POSIX.2 のコマンド一覧を以下の情報を元に更新
- 2024-07-05
- POSIX.1-2024 Issue 8 が公開されたため一覧表を調整
- その他の部分はまだ更新していない
- POSIX.1-2024 Issue 8 が公開されたため一覧表を調整
- 2024-07-06
- POSIX.1-2024 Issue 8 対応の修正