POSIX 手册页的更多用途

POSIX 手册页的更多用途

为什么一个手册页有两个或多个不同版本http://manpages.ubuntu.com

例如,查看at,你可以找到两个,一个是由manpages-posix包提供的[参考]at. 另一个由包本身提供[参考].
其他软件包也同样适用,例如ls.1ls.1posixls.1plan9

通过快速搜索我了解到的是POSIX的意味着它是 IEEE 指定的标准,用于维护不同操作系统之间的兼容性[参考]

那么 Ubuntu 有自己实现的程序吗?

答案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.cls.h, 和ls.c不引用该环境变量。)

但其他一些实用程序会受到影响。例如,该df实用程序会打印所有已安装设备的磁盘使用情况信息。通常,Ubuntu df(由 GNU coreutils 提供)会以 1 千字节块显示这些信息。使用POSIXLY_CORRECTset 后,它会以 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

相关内容