答案1
POSIX 规定了许多可用命令(请参阅 Shell 和实用程序卷)并且它们以特定方式工作。这些命令如下:
admin
alias
ar
asa
at
awk
basename
batch
bc
bg
break
c99
cal
cat
cd
cflow
chgrp
chmod
chown
cksum
cmp
colon
comm
command
compress
continue
cp
crontab
csplit
ctags
cut
cxref
date
dd
delta
df
diff
dirname
dot
du
echo
ed
env
eval
ex
exec
exit
expand
export
expr
false
fc
fg
file
find
fold
fort77
fuser
gencat
get
getconf
getopts
grep
hash
head
iconv
id
ipcrm
ipcs
jobs
join
kill
lex
link
ln
locale
localedef
logger
logname
lp
ls
m4
mailx
make
man
mesg
mkdir
mkfifo
more
mv
newgrp
nice
nl
nm
nohup
od
paste
patch
pathchk
pax
pr
printf
prs
ps
pwd
qalter
qdel
qhold
qmove
qmsg
qrerun
qrls
qselect
qsig
qstat
qsub
read
readonly
renice
return
rm
rmdel
rmdir
sact
sccs
sed
set
sh
shift
sleep
sort
split
strings
strip
stty
tabs
tail
talk
tee
test
time
times
touch
tput
tr
trap
true
tsort
tty
type
ulimit
umask
unalias
uname
uncompress
unexpand
unget
uniq
unlink
unset
uucp
uudecode
uuencode
uustat
uux
val
vi
wait
wc
what
who
write
xargs
yacc
zcat
GNU coreutils(GNU/Linux 发行版附带的命令)包含所有这些命令,但它们随着时间的推移已经脱离了标准 POSIX 基础。有些提供了更好的功能。有些工作方式略有不同。这些 coretils 版本是标准man
页面所针对的。
但编写适用于多种平台的脚本仍然是可取的。例如,如果您尝试grep
在 OSX 上使用扩展的 coreutil 功能,则会遇到语法错误。这就是为什么了解 POSIX 版本的工作原理是可取的。安装manpages-posix
后您就会知道一切。
如果您打算改进 GNU coreutils,了解这些内容也很重要。
Plan9 又一次与众不同。它从未被设计为兼容 POSIX。它努力通过模拟层实现一定程度的 POSIX 兼容性,并且它的手册页再次作为文档存在,让您知道可以使用什么。
答案2
POSIX 手册页的更多用途
除了 Oli 提到的编写可移植脚本(以及黑客在核心工具),还有另外两种情况下 POSIX 手册页可能会派上用场:
1. 您已经配置了(更多)符合 POSIX 的行为。
如果您设置POSIXLY_CORRECT
环境变量(任何内容,甚至可以为空),许多 GNU 实用程序和其他一些程序将按照 POSIX 指定的方式运行,即使开发人员认为用户没有理由想要这种行为。
这不会让您的系统表现得像一个真正符合 POSIX 标准的操作系统。Linux 内核、GNU libc 和许多用户空间工具都是刻意设计为符合 POSIX 标准的只有当这样做利大于弊时这也是 Ubuntu 等 GNU/Linux 系统被广泛认为不是 Unix 系统的原因之一。
的行为ls
受到很多事情, 但是不是是否POSIXLY_CORRECT
设置会影响结果。(您可以通过检查源代码(例如,13.04)来验证这一点:ls-ls.c
,ls.h
, 和ls.c
不引用该环境变量。)
但其他一些实用程序会受到影响。例如,该df
实用程序会打印所有已安装设备的磁盘使用情况信息。通常,Ubuntu df
(由 GNU coreutils 提供)会以 1 千字节块显示这些信息。使用POSIXLY_CORRECT
set 后,它会以 512 B(即半千字节)块显示这些信息。该行为是 POSIX 标准所要求的,但对于大多数用户来说可能没用,所以它不是默认值。
ek@Kip:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda8 15481840 11816640 2878768 81% /
udev 1020748 12 1020736 1% /dev
tmpfs 412840 5156 407684 2% /run
none 5120 0 5120 0% /run/lock
none 1032100 240 1031860 1% /run/shm
none 102400 32 102368 1% /run/user
/dev/sda6 245679 159043 73529 69% /boot
/dev/sda9 31458256 10024972 19835284 34% /home
/dev/sdd1 1922859824 1687175656 138008496 93% /media/ek/Noether
/dev/sdc1 1922859824 1700447368 124736784 94% /media/ek/Baker
/dev/sdb1 1922859824 1782944724 42239428 98% /media/ek/Spinoza
ek@Kip:~$ POSIXLY_CORRECT= df
Filesystem 512B-blocks Used Available Use% Mounted on
/dev/sda8 30963680 23573440 5817376 81% /
udev 2041496 24 2041472 1% /dev
tmpfs 825680 10312 815368 2% /run
none 10240 0 10240 0% /run/lock
none 2064200 480 2063720 1% /run/shm
none 204800 64 204736 1% /run/user
/dev/sda6 491358 318086 147058 69% /boot
/dev/sda9 62916512 20049944 39670568 34% /home
/dev/sdd1 3845719648 3374351312 276016992 93% /media/ek/Noether
/dev/sdc1 3845719648 3400894736 249473568 94% /media/ek/Baker
/dev/sdb1 3845719648 3565889448 84478856 98% /media/ek/Spinoza
2. 您感兴趣的命令/主题没有“常规”手册页。
有时 POSIX 手册页是唯一可用的。例如,该cd
命令是shell 内置命令仅。它由不同的 shell 提供,并且在不同 shell 中的行为略有不同(因为不同的 shell 有时会cd
接受不同的命令行选项)。
Ubuntu 中的默认交互式 shellbash
是能获取有关的cd
信息man bash
。但是如果您只想要一个手册页cd
,那么,没有cd
可执行文件(没有单个全局可用、独立于 shell 的cd
命令)。
但cd
命令是 POSIX 标准的必需部分——shell 必须实现它,而 POSIX 标准“知道”它需要什么。所以的 POSIX 手册页cd
是可能的,并且存在。
cd
正在搜索手册页 显示 POSIX 手册页和另外两个。顺便说一下,这是多个手册页同名的另一种示例。其他的是什么?一是cd
命令在语言中Tcl。另一个是 FreeBSD 操作系统中的 CD-ROM 驱动程序。FreeBSD 的手册页有时对 Ubuntu 用户很有帮助,因此可以安装一整套手册页,包括man 4 cd
(FreeBSD 手册页中没有一个可能对不使用 FreeBSD 的 Ubuntu 用户有帮助)。
为什么选择 Plan 9?
你可能想知道为什么计划 9Ubuntu 中根本没有手册页。毕竟,与 Ubuntu(以及许多其他操作系统,如 FreeBSD)不同,Plan 9 甚至不是Unix-风格操作系统,尽管正如奥利所说,它们之间存在一些相似之处。
原因是Plan 9 用户空间工具(与 coreutils 大致对应的基本工具集)已移植到类 Unix 系统,因此它们可以在 Ubuntu 等操作系统上运行。它们及其手册页由9base
包裹。
一些(并非全部)适用于 Ubuntu 的 Plan 9 工具与 Ubuntu 工具具有相同的名称,并执行相同或相似的功能。
在 Ubuntu 上安装 Plan 9 工具的原因之一是其中一些工具不直接对应于任何 Ubuntu 工具(但为了实现互操作性,可能仍然需要对应的工具)。
另一个原因是支持依赖于 Plan 9 工具的软件。例如,窗口管理器西米曾经是为 Ubuntu 打包的(可在官方 Ubuntu 软件源中找到);这个wmii2
所依赖的包9base
。