man 文档的一些示例¶
作为手册而非教程,man 文档面面俱到,非常详细。当然,详细的后果,就是我们在阅读的时候很容易变得一头雾水。
必须承认的是,尽管 man 文档有一些有中文翻译(部分软件包的手册自带翻译,另一些上游不提供手册页翻译的则在 manpages-zh 项目中翻译。对于后者,安装 manpages-zh
软件包即可),但是阅读它们,仍然是一件非常痛苦的事情。况且中文翻译有一些也已经十分老旧(例如,execve()
文档的最新翻译仍然在 2003 年 5 月),且可能有一些错误。所以建议有能力的同学尽可能阅读英文版本的 man 文档。
我希望改进开源软件与文档的中文翻译!
2020 年初编写此文时,举的翻译错误的例子是:
(例如,
man(1)
的文档中介绍-a|-b
的含义的时候,将 "cannot be used together" 翻译为了「可以一起使用」)
在 2022 年初修订时这个错误仍然存在,在向上游反馈后这个翻译问题很快被修复,并且相关修复已进入到 Ubuntu 22.04 LTS 中。因此,向上游反馈翻译问题是解决这类翻译错误最有效的途径。
对于大部分项目来说,你都能找到对应翻译项目的位置。例如,manpages-zh
的每篇翻译手册最后就有:
有时候翻译的来源不太容易找到,此时可以去上游项目确认其翻译的流程,或者去一些流行的托管开源项目翻译的平台寻找,例如:
- Translation Project,托管了一些常见软件的翻译。上文提到的
man(1)
的翻译就在这里(man-db
); - Transifex,例如 Xfce 桌面环境的翻译即托管在其上;
- Hosted Weblate
- Launchpad
- Crowdin
此外,一些大型项目会选择自己托管翻译平台:
如果对翻译(本地化)有进一步兴趣,可以阅读 AOSC 版大陆简中自由软件本地化工作指南了解更多技术信息。
下面会给出一些 man 文档以及其内容结构的解释,以帮助你更好地理解,man 文档到底在做什么长篇大论。
数字的含义¶
在查阅资料时,你常常会见到如 chmod(1)
或 mount(8)
这样的表达方式。正如上面所述,数字表示这个条目所属的章节。
但是为什么要加数字呢?这是因为不同的章节可能有相同的条目,例如 chmod
既是一条命令,又是一个系统调用。当你要查看 chmod
命令的 man 文档时,你会去看 chmod(1)
;而当你要查看 chmod
系统调用的 man 文档时,你会去看 chmod(2)
。这时候条目后面数字的作用就体现出来了,你可以放心的说 chmod(1) 内部使用了 chmod(2) 这样的话而不必担心造成困惑。
命令行工具:以 su
为例¶
Text Only | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
|
程序库函数:以 strcmp()
为例¶
文档第三卷是程序库函数的信息,包括了 C 语言的标准库函数。
系统调用:以 kill()
为例¶
文档第二卷是关于系统调用的信息。当然,很多系统调用都由 C 运行时库包装了一层,否则用起来很麻烦。一个目前还没有被包装的系统调用的例子是 copy_file_range()
,你需要在你的代码里面使用 syscall()
去手动包装它,才能方便地使用。
Text Only | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
|