为什么Ubuntu Manpage Repository中有一个手册页的不同版本?

为什么在http://manpages.ubuntu.com中有两个或更多不同版本的联机帮助页

例如,查看at的联机帮助页,您可以找到两个,一个由manpages-posix[ref]提供 。 而另一个由at包本身[ref]提供
这对于其他包也是有效的,例如ls.1和ls.1posix和ls.1plan9 。

我从快速搜索中理解的是, posix意味着它是IEEE规定的标准,用于维护不同OS [ref]之间的兼容性。

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

POSIX规定了许多命令 (参见Shell&Utilities卷)并且它们以某种方式工作。 以下是这些命令:

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 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 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 qdel qhold qmove ps pwd qdel qhold qmove qmsg qdel qhold qmove qmsg qrerun qdel qhold qmove qmsg qrerun qdel qhold qmove qmsg qrerun qrls tr qdel qhold qmove qmsg qrerun qrls qdel qhold qmove qmsg qrerun qdel qhold qmove qmsg qrerun qrls qdel qhold qmove qmsg qrerun qrls qdel qhold qmove qmsg qrerun qrls qdel qhold qmove qmsg qrerun qrls 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基础。 有些提供更好的function。 有些工作方式略有不同。 这些coretils版本是标准man页面的标准。

但仍然需要编写可在许多平台上运行的脚本。 例如,如果您尝试在OSX上使用grep扩展coreutilfunction,则会遇到语法错误。 这就是了解POSIX版本如何工作的原因。 安装manpages-posix ,你知道一切。

如果您计划改进GNU coreutils,那么了解这些内容也很重要。

Plan9再次与众不同。 它从未被设计为与POSIX兼容。 它通过仿真层努力实现一定程度的POSIX兼容性,并且再次使用它的手册页,作为文档告诉您可以使用的内容。

更多POSIX手册页的使用

除了Oli关于编写可移植脚本(以及对coreutils进行 黑客攻击 )的说法外,还有另外两种情况,POSIX手册页可能会派上用场:

1.您已配置(更多)符合POSIX的行为。

如果你设置POSIXLY_CORRECT环境变量(任何东西,甚至可以是空白),许多GNU实用程序和一些其他程序将以POSIX指定的方式运行,即使开发人员认为没有理由用户可能会想要这种行为。

这不会使您的系统行为像真正符合POSIX的操作系统。 Linux内核,GNU libc和许多用户区工具都是故意设计为符合POSIX标准, 只有这样做比有害更有帮助 。 这是像Ubuntu这样的GNU / Linux系统被广泛认为不是Unix系统的原因之一。

ls的行为受很多事情的影响,但不受POSIXLY_CORRECT是否设置的影响。 (您可以通过检查13.04: ls-ls.cls.hls.c的源代码来validation这一点。不要引用该环境变量。)

但其他一些公用事业受到影响。 例如, df实用程序打印所有已安装设备的磁盘使用情况信息。 通常,Ubuntu的df (由GNU coreutils提供支持)以1千字节块显示。 设置POSIXLY_CORRECT ,它会显示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的行为略有不同(因为不同的shell有时会使cd接受不同的命令行选项 )。

Ubuntu中的默认交互式shell是bash ,您可以man bash获取有关cd信息。 但是如果你想要一个仅用于cd的手册页,那么就没有cd可执行文件(没有一个全局可用的,独立于shell的cd命令)。

但是cd命令是POSIX标准的必需部分 – shell必须实现它,而POSIX标准“知道”它需要什么。 所以cd的POSIX手册是可能的,并且存在。

在manpages.ubuntu.com上搜索cd 显示POSIX手册页和另外两个 。 顺便提一下,这是具有相同名称的多个手册页的另一种示例。 其他的是什么? 一个是Tcl语言中cd命令。 另一个是FreeBSD操作系统中的CD-ROM驱动程序。 FreeBSD的手册页有时对Ubuntu用户很有帮助,因此可以安装它们的整个集合,包括man 4 cd (不是FreeBSD手册页面中最有可能对Ubuntu用户没有使用FreeBSD的一个)。

为何选择Plan 9?

您可能想知道为什么Ubuntu中有Plan 9手册页。 毕竟,与Ubuntu(以及许多其他操作系统,如FreeBSD)不同,Plan 9甚至不是Unix 风格的操作系统,尽管Oli说它有一些相似之处。

原因是Plan 9用户工具 (基本上与coreutils大致相对应的工具集)已被移植到类Unix系统,因此它们可以在诸如Ubuntu之类的操作系统上运行。 它们及其手册页由9base软件包提供。

可用于Ubuntu的一些(不是全部)Plan 9工具与Ubuntu工具具有相同的名称,并执行相同或类似的function。

在Ubuntu上使用Plan 9工具的原因之一是它们中的一些不直接与任何Ubuntu工具相对应(但可能仍然需要用于互操作性的工具)。

另一个原因是支持依赖Plan 9工具的软件。 例如,窗口管理器wmii曾经为Ubuntu打包(并且可以在官方Ubuntu软件源中获得); 这个wmii2包取决于9base