About Blog Contact

Linux Kernel或者GNU/Linux有官方或者权威文档可查吗?

知乎问题:Linux kernel 或者 GNU/Linux 有官方或者权威文档可查吗?

http://kernel.org和tldp别的答案都有人说了,我主要说一下更一般的方法。

Linux和Windows最大的区别就是,其组成部分分属多个项目,每个项目的组织、目的、开发者各不相同,因此要想找到官方文档第一件事就是明确想了解的组件属于哪个项目。

比如Linux的socket接口,一般的系统上用的是glibc的实现,因此官网是https://www.gnu.org/software/libc/manual/html_node/Sockets.html。这个和发行版没关系,就算发行版对glibc作了改动,一般使用上不会有区别。还比如我想写systemd启动文件,这是free desktop组织支持的项目,因此要来这里看官方文档:https://www.freedesktop.org/wiki/Software/systemd/。

大部分Linux上的软件都有man page,包括各种接口和API。这些大部分都是官方写的,少部分被发行版或Linux内核的人改过。想看socket的话,直接man socket即可。

如果想明确寻找的范围,比如说我想要看glibc里面的kill函数而不是kill程序 ,可以输入

    man 2 kill

数字的意思见下表

    1   Executable programs or shell commands
    2   System calls (functions provided by the kernel)
    3   Library calls (functions within program libraries)
    4   Special files (usually found in /dev)
    5   File formats and conventions eg /etc/passwd
    6   Games
    7   Miscellaneous  (including  macro  packages  and  conventions), e.g.
               man(7), groff(7)
    8   System administration commands (usually only for root)
    9   Kernel routines [Non standard]

另一个要明确的是想了解的是标准还是实现。比如我要用libcurl写网络有关的应用,作爬虫。HTTP是个通用的标准,由IETF,W3C等机构管理,想要了解HTTP协议本身的标准可以去https://ietf.org/standards/rfcs/里面看看,那里有其官方文档。libcurl是这个标准的一个实现,如何使用libcurl,就要看libcurl的官方文档了。不过那里面对HTTP协议本身写的就不是很细致了,如果不了解的话光看libcurl还是不够的。 还有些时候,标准比较稳定,而且形成的过程可能不是很正式,因此反而没有所谓的官方文档,比如ELF格式——当然,man elf的文档很详细,但这只是实现者Linux内核的非官方文档——不过对使用看这个肯定够了。

不过要注意的是标准和实现的关系。有些标准过于复杂,没人能完整而一字不差的实现,比如web技术,C++,这时候只看官方文档就不行了。还有时候标准只有一个常用实现,比如X Windows协议和Xorg:现在基本上只有人用Xorg了, 别的实现都不多见了,这时候Xorg官方文档的意义就更为重要。

再者就是要区分上下游的区别。比如Linux kernel,kernel.org是其权威网站,Linus老爷爷定期会推出新的版本,是这个项目的上游。Ubuntu是kernel的使用者,是下游,定期会根据上游的更新升级自己的版本,同时会对其进行一定的个性化修改。如果你是想了解kernel本身的功能,kernel.org以及kernel代码里面的文档最权威;如果是想了解Ubuntu对kernel的改进,那么Ubuntu的文档库最权威。而且,kernel有许多版本,许多patch,Ubuntu选择的版本一般不是最新的版本,因此解决Ubuntu上的实际问题两个文档都要看。

还有些软件是别的软件的wrapper,这时候这个软件的官方文档涉及的东西可能就十分简略了,一般要查他包装的软件的文档。比如Python的socket库就是glibc socket的一个Python接口,里面许多高级flag Python的官方文档就没有,还有gcc的 -ldflags,就是向linker传指令,这个和gcc也没关系,得查用的linker(一般是ld)的文档。

最后总结以下,官方文档的来源一般是man,man没有或在太老了,就只能网上搜了。Google的前几个结果里一般就有。如果一个网页里面列了这个软件的mailing list,irc channel什么的,那一般就是官方界面。 也可以看看维基百科,一般会有官方文档。有的项目可能只整了一个GitHub项目,没整网页,这时候可以看看README。

以上过程中,请不要使用百度,并且忽略CSDN……