## 第 17 章 核心工具集
**目录**
[](ch17.html#id3069325)
[细节](ch17s02.html)
[格式约定](ch17s02.html#id3070483)
[系统信息](ch17s03.html)
[uptime](ch17s03.html#id3070564)
[w](ch17s03.html#id3070621)
[who](ch17s03.html#id3070718)
[whoami](ch17s03.html#id3070749)
[last](ch17s03.html#id3070760)
[uname](ch17s03.html#id3070792)
[date](ch17s03.html#id3070856)
[cal](ch17s03.html#id3071187)
[文件管理](ch17s04.html)
[细节](ch17s04.html#id3071207)
[ls [路径]](ch17s04.html#id3071275)
[cd [目录路径] | [特殊路径]](ch17s04.html#id3071398)
[pwd](ch17s04.html#id3071473)
[file 文件名](ch17s04.html#id3071484)
[du [路径]](ch17s04.html#id3071510)
[less 文件名](ch17s04.html#id3071575)
[touch 目标文件](ch17s04.html#id3071598)
[mkdir 文件夹](ch17s04.html#id3071612)
[cp 源文件 目标目录|文件](ch17s04.html#id3071650)
[cp 源目录 目标目录](ch17s04.html#id3071665)
[rm 目标目录|文件](ch17s04.html#id3071748)
[rmdir 目标目录](ch17s04.html#id3071793)
[mv 源文件 目标目录|文件](ch17s04.html#id3071810)
[ln 源文件 链接](ch17s04.html#id3071855)
[文件操作](ch17s05.html)
[split 源文件 [目标文件名前缀]](ch17s05.html#id3071907)
[cat 文件名](ch17s05.html#id3071966)
[sort [-o 输出文件] [-t 分隔字符] [+起始字段 -结束字段] [文件]](ch17s05.html#id3072025)
[more](ch17s05.html#id3072110)
[diff 文件1 文件2](ch17s05.html#id3072126)
[patch](ch17s05.html#id3072205)
[cksum [文件名]](ch17s05.html#id3072257)
[md5sum [文件名]](ch17s05.html#id3072270)
[压缩解压](ch17s06.html)
[tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件]](ch17s06.html#id3072327)
[7z|7za 子命令 [选项] 压缩包 [文件]](ch17s06.html#id3072511)
[搜索](ch17s07.html)
[whereis 程序名称](ch17s07.html#id3072688)
[locate 文件名称](ch17s07.html#id3072764)
[find [路径] 表达式](ch17s07.html#id3072808)
[grep 字符串|正则表达式 文件名|标准输入](ch17s07.html#id3072957)
[权限管理](ch17s08.html)
[细节](ch17s08.html#id3072982)
[chmod 权限表达式 文件|目录](ch17s08.html#id3073219)
[chown 归属用户[:归属群组] 文件|目录](ch17s08.html#id3073285)
[chgrp 归属群组 文件|目录](ch17s08.html#id3073349)
[SUID、SGID、Sticky bit](ch17s08.html#id3073363)
[lsattr [路径]](ch17s08.html#id3073535)
[chattr +|-|=属性 路径](ch17s08.html#id3073646)
[用户管理](ch17s09.html)
[细节](ch17s09.html#id3073693)
[su [用户名]](ch17s09.html#id3073804)
[sudo 命令](ch17s09.html#id3073857)
[passwd [用户名]](ch17s09.html#id3073909)
[gpasswd 群组名](ch17s09.html#id3074001)
[chsh -s Shell [用户名]](ch17s09.html#id3074058)
[usermod 用户名](ch17s09.html#id3074070)
[useradd 用户名](ch17s09.html#id3074175)
[userdel 用户名](ch17s09.html#id3074314)
[id [用户名]](ch17s09.html#id3074344)
[进程管理](ch17s10.html)
[细节](ch17s10.html#id3074366)
[ps](ch17s10.html#id3074406)
[pstree [ 进程编号 | 用户 ]](ch17s10.html#id3074720)
[pgrep 进程名](ch17s10.html#id3074793)
[kill [信号代码] 进程编号](ch17s10.html#id3074836)
[pkill [信号代码] 进程名称](ch17s10.html#id3074953)
[xkill](ch17s10.html#id3074966)
[top](ch17s10.html#id3074982)
[renice 优先级 进程](ch17s10.html#id3075218)
[nohup 命令 [选项]](ch17s10.html#id3075284)
[命令 &](ch17s10.html#id3075304)
[命令1 ; 命令2 ; ......](ch17s10.html#id3075317)
[命令1 && 命令2 && ......](ch17s10.html#id3075334)
[Ctrl+z](ch17s10.html#id3075355)
[jobs](ch17s10.html#id3075365)
[bg [任务编号]](ch17s10.html#id3075394)
[fg [任务编号]](ch17s10.html#id3075406)
[磁盘和内存管理](ch17s11.html)
[细节](ch17s11.html#id3075427)
[mount 设备文件 [挂载路径]](ch17s11.html#id3075463)
[umount 设备文件 | 挂载路径](ch17s11.html#id3075752)
[df](ch17s11.html#id3075765)
[free](ch17s11.html#id3075845)
[sync](ch17s11.html#id3075923)
[fdisk 磁盘设备文件](ch17s11.html#id3075935)
[cfdisk](ch17s11.html#id3076043)
[mkfs.文件系统类型 分区设备文件](ch17s11.html#id3076054)
[hdparm 磁盘设备文件](ch17s11.html#id3076074)
[硬件管理](ch17s12.html)
[lspci](ch17s12.html#id3076154)
[lsusb](ch17s12.html#id3076242)
[lsmod](ch17s12.html#id3076253)
[modprobe 模块名称](ch17s12.html#id3076275)
[网络管理](ch17s13.html)
[其它](ch17s14.html)
[echo 字符串](ch17s14.html#id3076402)
[clear](ch17s14.html#id3076496)
[alias 输入内容=实际内容](ch17s14.html#id3076507)
[export 变量名](ch17s14.html#id3076540)
[shutdown](ch17s14.html#id3076556)
[halt](ch17s14.html#id3076642)
[reboot](ch17s14.html#id3076708)
[init 数字](ch17s14.html#id3076720)
[chroot 路径](ch17s14.html#id3076761)
## 细节
Linux 是大小写敏感的系统,所有的命令、路径、选项、参数、变量……都区分大小写
使用 `TAB` 键补全命令,无论任何时候,多按几次 TAB 总会有所帮助
Shell 的功能键能够协助您更高效的编辑命令,请熟悉其[键绑定](ch14s05.html#keybind "表 14.1. Emacs风格 键绑定"),尽量使用它
命令由 `命令名` 、 `分隔符` 、 `选项` 、 `操作对象` 构成
命令名
标识命令的功能,例如**cp**(copy)、**mv**(move)、**rm**(remove)……
有些命令包含一些子命令,您可以认为它的命令名由两个单词构成,例如“apt”软件包管理系统:
```
apt-get install 安装一个软件
apt-get remove 删除一个软件
```
分隔符
通常为空格,多个连续的空格视为一个空格,下面两个命令相同:
```
cp a b
cp a b
```
有一些特殊符号也属于分隔符,例如管道 `|` 、重定向 `>` 、 `>>` 、 `<` 、后台运行 `&` 、序列执行 `&&` 、 `;` 。使用这些符号时,您不需要再使用空格作为分隔符
```
ls -al|less #两个命令效果相同
ls -al | less #更容易阅读
```
选项
精细调节命令的行为,以 `-` 引导,通常为选项的首字母。许多软件都可以使用 **-h** 选项来阅读使用说明,例如:
```
apt-get -h
apt-get --help
apt-get -help
apt-get -h -e -l -p
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch17s02.html#manage01) 也可以使用选项的全名,一般以 `--` 引导
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch17s02.html#manage02) 多数命令中,使用 `-` 引导多个字符,将会被视为多个选项
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch17s02.html#manage03) 与上面的命令效果一样
少数命令的选项,不需要以 `-` 引导,或者使用 `-` 引导选项全名,例如:
```
ps aux
/etc/init.d/gdm start
mplayer -loop xxx
```
**递归. ** 表示在子层次中重复相同操作。例如递归复制某目录,不但复制当前目录及其下的所有文件;而且对当前目录的子目录,也进行递归复制的操作。
### 格式约定[[23](ch17s02.html#ftn.id3070487)]
使用 `[]` 表示可选项,实际输入为方括号中的内容,例如
```
ls [-l]
```
* 实际输入为,`ls -l`
使用 `|` 表示 “或” ,以 | 分隔的项目不能同时使用,例如
```
tar [-z|j c|x vf] 归档文件 [源文件]
```
* 选项通常紧跟命令名,除非必要,在命令格式中,我们通常省略它们
* * *
> [[23](ch17s02.html#id3070487)] 与man中的约定相同
## 系统信息
### uptime
联机信息-时间,显示如下
```
11:27pm up 9 days, 7:12, 3 user, load average: 0.07, 0.12, 0.14
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch17s03.html#man-info11) 当前系统时间
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch17s03.html#man-info12) 系统运行时间
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch17s03.html#man-info13) 当前在线用户数
> [![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)](ch17s03.html#man-info14) 系统负荷:1分钟前、5分钟前、15分钟前
### w
联机信息-已登录用户,显示如下
```
01:04:10 up 1:34, 2 users, load average: 0.25, 0.16, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user tty1 192.168.0.1 23:30 1:33 0.14s 0.12s -bash
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch17s03.html#man-info21) uptime 信息
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch17s03.html#man-info22) 用户名
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch17s03.html#man-info23) 登录方式
> [![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)](ch17s03.html#man-info24) 来源地址
> [![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png)](ch17s03.html#man-info25) 登录时间
> [![6](https://box.kancloud.cn/2016-01-06_568cdb4f32753.png)](ch17s03.html#man-info26) 发呆时间
> [![7](https://box.kancloud.cn/2016-01-06_568cdb4f41fcc.png)](ch17s03.html#man-info28) 资源占用
> [![8](https://box.kancloud.cn/2016-01-06_568cdb4f5948a.png)](ch17s03.html#man-info29) 当前任务
### who
联机信息
| | |
| --- | --- |
| -r | 运行级别 |
### whoami
显示当前用户名
### last
最近用户登录信息
| | |
| --- | --- |
| -数字 | 使用数字作为选项,控制显示条目 |
### uname
系统信息
| | |
| --- | --- |
| -s | 内核名称(默认选项) |
| -a | 全部 |
| -p | CPU 信息 |
| -n | 主机名 |
| -r | 内核发行信息(版本号) |
| -v | 内核版本信息 |
### date
显示、设定系统时间
| | |
| --- | --- |
| -u | 显示格林尼洛时间(UTC) |
| MMDDhhmm[[CC]YY][.ss] | 设定时间,需要管理员权限。 | date 12292359 |
| MM | 月份 |
| DD | 天数 |
| hh | 小时 |
| mm | 分钟 |
| CC | 年份前两位 |
| YY | 年份后两位 |
| ss | 秒钟 |
| 秒钟、年份为可选 | date 122923592006.59 |
| +[%X] | 设定显示格式,默认输出格式: | date +%Y年%m月%d日%A%H:%M:%S%Z |
| 格式控制 | %n | 换行 |
| %t | 制表符 |
| 小时 | %H | 00~23 |
| %I | 01~12 |
| %k | 0~23 |
| %l | 1~12 |
| %p | AM|PM |
| 分、秒 | %M | 分钟(00~59) |
| %S | 秒(00..61) |
| %T | hh:mm:ss |
| %r | hh:mm:ss AM|PM |
| %s | 从 1970年1月1日00:00:00 UTC 到目前为止的秒数 |
| %X | %H:%M:%S |
| %Z | 时区 |
| 星期 | %a | Sun~Sat |
| %A | Sunday~Saturday |
| %w | 一周中的第几天 (0~6) |
| 年份 | %Y | 0000~9999 |
| %y | 00~99 |
| 月份 | %m | 01~12 |
| %b | Jan~Dec |
| %h |
| %B | January~December |
| 日期 | %c | 完整日期时间 |
| %d | 01~31 |
| %j | 001~366 |
| %x | 本地格式日期 |
| %D | mm/dd/yy |
| 一年中的第几周 | %U | 以 Sunday 为一周的第一天 |
| %W | 以 Monday 为一周的第一天 |
### cal
显示日历
## 文件管理
### 细节
`/` 目录为文件系统根目录,所有目录都是它的子目录
绝对路径以 `/` 起始,相对路径以当前所在目录起始
目录是一种特殊类型的文件,如果没有特别指明, _文件_ 包括文件和目录
`..` 表示上一级目录, `.` 表示当前目录,它们是两个特殊目录
**链接. **为当前文件建立在其它路径中的访问方法。例如将系统中其它位置的可执行文件,链接到 `/usr/local/bin` 目录下,使用命令调用。
### ls [路径]
显示当前目录文件列表
| | |
| --- | --- |
| --color | 不同属性以不同颜色显示(默认选项) |
| -a | 全部显示 |
| -i | 显示 inode值 |
| -l | 详细信息 |
| -F | 显示文件类型后缀 目录`/` 链接`@` 可执行文件`*` 端口文件`=` 管道文件`|` |
| -A | 显示隐藏文件 |
| -R | 递归显示子目录文件列表 |
| -S | 按文件大小排序 |
| -t | 按修改时间排序 |
| -u | 按访问时间排序 |
| -d | 只显示目录,不递归显示目录下的文件 |
### cd [目录路径] | [特殊路径]
切换目录,目录可以使用绝对路径或者相对路径
| | |
| --- | --- |
| ~ | $HOME 目录(默认值) |
| - | 上一次目录 |
| .. | 上一级目录 |
| . | 当前目录 |
* 您可以通过修改 `/etc/environment` 文件,来定义 `$CDPATH` 变量,设定“**cd**”命令的搜索路径。
### pwd
显示当前路径
### file 文件名
显示文件类型
| | |
| --- | --- |
| -i | 显示 mime类型 |
### du [路径]
计算文件或目录空间占用
| | |
| --- | --- |
| -h | 人性化显示。自动以 G、M、K 为单位显示占用空间大小 |
| --max-depth=数字 | 显示目录深度 |
| -l | 重复计算硬链接文件大小 |
| -L | 计算符号链接文件大小 |
| -a | 显示当前目录子目录中的文件 |
| -c | 显示文件数 |
### less 文件名
浏览文件,使用 [VI](ch14s04.html#keybind-vi) 和 [Emacs](ch14s05.html#keybind "表 14.1. Emacs风格 键绑定") 两种风格的键绑定。
### touch 目标文件
触碰,在不修改文件的前提下,更改其时间属性。通常用来创建一个空文件
### mkdir 文件夹
创建文件夹
| | |
| --- | --- |
| -p 多级目录 | 按路径创建多级目录 |
| -m 数字权限值 | 设定权限 |
### cp 源文件 目标目录|文件
将源文件复制为目录文件,或者将源文件复制到目标目录。多个源文件使用空格分隔
### cp 源目录 目标目录
将源目录复制到目标目录中,如果复制多个源目录,需要使用 **-R** 选项
| | |
| --- | --- |
| -a | 相当于 -dpr 选项 |
| -d | 保留链接 |
| -f | 强制复制,覆盖目标文件 |
| -i | 覆盖时询问用户 |
| -p | 保留修改时间和访问权限 |
| -r -R | 递归复制(目录=>目录) |
| -l | 创建链接 |
| -v | 显示过程 |
### rm 目标目录|文件
删除
| | |
| --- | --- |
| -r -R | 递归删除(用于删除目录) |
| -f | 强制删除(无需确认,直接删除。慎用!) |
| -i | 交互式删除(询问用户) |
### rmdir 目标目录
删除目录时,建议您使用“**rm -r**”命令
### mv 源文件 目标目录|文件
相当于 cp 后删除源文件,也可以作为“重命名”使用。
| | |
| --- | --- |
| -f | 强制,覆盖目标文件 |
| -i | 覆盖时询问用户 |
| -v | 显示过程 |
### ln 源文件 链接
链接
| | |
| --- | --- |
| -s | 符号链接 |
| -f | 强制链接,覆盖目标文件 |
| -i | 覆盖时询问用户 |
## 文件操作
### split 源文件 [目标文件名前缀]
将源文件按一定规则分割成若干个目标文件。默认文件名前缀为 `x`
| | |
| --- | --- |
| -行数 | 按行数分割文件 |
| -l 行数 | 同上 |
| -b 字节 | 按大小分割文件。可以使用 b、k、m 作单位,不指定单位的情况下,默认单位为 b |
| -C 字节 | 按大小分割文件,并尽量保持每行的完整 |
### cat 文件名
输出文件内容。用空格分隔多个文件名
| | |
| --- | --- |
| -n | 在输出中添加行号 |
| -b | 在输出中添加行号,空行不编号 |
| -s | 将两行或以上的空行,合并为一个空行 |
* 可以将多个文件内容连接到一起输出。使用重定向合并为一个文件 **cat xaa xab xac > file.split**
### sort [-o 输出文件] [-t 分隔字符] [+起始字段 -结束字段] [文件]
对文本内容排序
| | |
| --- | --- |
| -m | 合并文件 |
| -c | 检查文件是否已按规则排序 |
| -b | 忽略行首空格字符 |
| -u | 忽略内容重复行 |
| -f | 忽略大小写 |
| -l | 忽略非打印字符 |
| -M | 作为月份比较 |
| -d | 按字典顺序排序,按照字母、数字、空格、制表符排序 |
| -r | 逆序输出 |
### more
查看文件内容,建议使用 less
### diff 文件1 文件2
比较文件
| | |
| --- | --- |
| 无选项 | 混合 ed 命令格式 |
| -u [数字] | 统一格式,数字为显示上下文行数 |
| --unified[=数字] |
| -c [数字] | 上下文格式,数字为显示上下文行数 |
| --context[=数字] |
| -e | ed 命令格式 |
| --ed |
| -f | RCS 命令格式 |
### patch
使用 **diff -uN[r] 旧文件 新文件 > 补丁文件** 命令创建补丁文件。
在待补丁文件的目录下使用 **patch -p[数字] <补丁文件** 命令打补丁
**-p [数字]** 表示忽略补丁文件中记录的目录,数字为忽略的层数。
**patch -R 已打补丁文件 补丁文件** 将已打补丁文件恢复到原来的状态
### cksum [文件名]
计算文件的 CRC值。不指定文件名则从标准输入设备读入数据
### md5sum [文件名]
计算文件的 md5值。不指定文件名则从标准输入设备读入数据
| | |
| --- | --- |
| -t | 以文本模式读取 |
| -b | 以二进制模式读取 |
| -c md5纪录 | 校验 md5纪录 中的文件(使用 md5sum 配合重定向生成纪录文件) |
## 压缩解压
### tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件]
将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时)
| | |
| --- | --- |
| 操作选项 | -c | 创建 |
| -x | 解包 |
| -u | 更新 |
| -r | 添加 |
| -t | 查看 |
| -d | 比较压缩包内文件和文件 |
| -A | 将 tar 文件添加到归档文件中 |
| 格式选项 | -z | 使用 gz 压缩格式 |
| -j | 使用 bz2 压缩格式 |
| 其它 | -v | 显示过程 |
| -f 文件名 | 归档文件的文件名,使用 `-` 代表标准输入/输出 |
| -C 解压路径 | 将压缩包中的文件解压到指定目录 |
| --exclude=文件 | 排除文件 |
| -P | 使用绝对路径压缩时,保留根目录“/” |
| -W | 校验 |
| -p | 还原文件权限 |
| -w | 询问用户 |
| --totals | 统计 |
| -T 文件列表 | 处理文件列表中的文件 |
| -X 文件列表 | 排除文件列表中的文件 |
### 7z|7za 子命令 [选项] 压缩包 [文件]
| | |
| --- | --- |
| 子命令 | a | 添加 |
| d | 删除 |
| e | 解压 |
| x | 带路径解压 |
| l | 列表查看 |
| t | 测试 |
| u | 更新 |
| 选项 | -m 压缩方式 |
| -m0=压缩算法 | 默认使用 lzma |
| -mx=数字 | 1~9 压缩级别 |
| -mfb=64 | number of fast bytes for LZMA = 64 |
| -md=字典大小 | 设置字典大小,例如 -md=32m |
| -ms=on|off | 是否固实压缩 |
| -o输出目录 | 设置输出目录 |
| -p密码 | 使用密码 |
| -r数字 | 递归,使用数字定义递归子目录的深度 |
| -sfx[模块名称] | 使用自解压模块 |
| -si | 从标准输入设备读入数据 |
| -so | 将数据写入标准输出设备 |
| -y | 所有询问均回答 Yes |
| -w路径 | 设置工作目录 |
## 搜索
### whereis 程序名称
查找软件的安装路径
| | |
| --- | --- |
| -b | 只查找二进制文件 |
| -m | 只查找帮助文件 |
| -s | 只查找源代码 |
| -u | 排除指定类型文件 |
| -f | 只显示文件名 |
| -B 目录 | 在指定目录下查找二进制文件 |
| -M 目录 | 在指定目录下查找帮助文件 |
| -S 目录 | 在指定目录下查找源代码 |
### locate 文件名称
在文件索引数据库中搜索文件
| | |
| --- | --- |
| -d 数据库路径 | 搜索指定数据库 |
* `updatedb` 更新文件索引数据库
### find [路径] 表达式
查找文件
| | |
| --- | --- |
| -name 表达式 | 根据文件名查找文件 |
| -iname 表达式 | 根据文件名查找文件,忽略大小写 |
| -path 表达式 | 根据路径查找文件 |
| -ipath 表达式 | 根据路径查找文件,忽略大小写 |
| -amin 分钟 | 过去N分钟内访问过的文件 |
| -atime 天数 | 过去N天内访问过的文件 |
| -cmin 分钟 | 过去N分钟内修改过的文件 |
| -ctime 天数 | 过去N天内修改过的文件 |
| -anewer 参照文件 | 比参照文件更晚被读取过的文件 |
| -cnewer 参照文件 | 比参照文件更晚被修改过的文件 |
| -size 大小 | 根据文件大小查找文件,单位 b c w k M G |
| -type 文件类型 | 根据文件类型查找文件。b 块设备 c 字符设备 d 目录 p 管道文件 f 普通文件 l 链接 s 端口文件 |
| -user 用户名 | 按归属用户查找文件 |
| -uid 用户编号 | 按用户编号查找文件 |
| -group 群组名 | 按归属群组查找文件 |
| -gid 群组编号 | 按群组编号查找文件 |
| -empty | 查找空文件 |
### grep 字符串|正则表达式 文件名|标准输入
在文件中搜索内容
## 权限管理
### 细节
一个文件主要包含下列属性,`ls -l`
```
- rwxrwxrwx user group date filename
111 101 101
```
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch17s08.html#man-right11) 归属用户的权限
> [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch17s08.html#man-right12) 归属群组的权限
> [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch17s08.html#man-right13) 其它用户的权限
> [![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)](ch17s08.html#man-right14) 归属用户
> [![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png)](ch17s08.html#man-right15) 归属群组
> [![6](https://box.kancloud.cn/2016-01-06_568cdb4f32753.png)](ch17s08.html#man-right16) 日期信息
> [![7](https://box.kancloud.cn/2016-01-06_568cdb4f41fcc.png)](ch17s08.html#man-right17) 文件名称
* 对于文件夹,必须拥有它的可执行权限,才能够使用 **cd** 命令进入该文件夹;拥有可读权限,才能够使用 **ls** 命令查看该文件夹的文件列表。
* root用户 拥有最高权限
可以使用 3位的二进制数字 来描述一组权限,某一权限对应的数字为 1,则表示具有该种权限,为 0,则不具有该种权限。
使用二进制数字来描述一组权限,虽然非常直观,但是 3组 权限需要用 9位 数来表示,不够方便。因此我们将三组权限使用 3位8进制数字 来表示。
每种权限对应的数字:
| | |
| --- | --- |
| 权限 | r | w | x |
| 二进制 | 100 | 010 | 001 |
| 八进制 | 4 | 2 | 1 |
将这 3位8进制数字 相加的结果,就可以表示该组权限的具体内容,例如:
```
7=4+2+1=rwx
5=4+1=rx
755=4+2+1,4+1,4+1=rwx,r-x,r-x
```
还可以使用 a 、 u 、 g 、 o 表示归属关系,使用 = 、 + 、 - 表示权限变化,使用 r 、 w 、 x 表示权限内容
```
a 所有用户 u 归属用户 g 归属群组 o 其它用户
= 具有权限 + 增加权限 - 去除权限
r 可读权限 w 可写权限 x 可执行权限
```
例如:
```
a+x 给所有用户增加可执行权限
go-wx 将归属群组和其它用户的可写、可执行权限去掉
u=rwx 归属用户具有可读、可写、可执行权限
```
### chmod 权限表达式 文件|目录
更改文件的权限。权限的表达式可以使用 3位8进制数字 表示,或者使用 augo +-= rxw-s 来表示
| | |
| --- | --- |
| -R | 递归 |
| -v | 显示过程 |
| -c | 类似“-v”,仅显示更改部分 |
| --reference=参照文件或目录 | 以指定文件为参照更改权限 |
示例:
```
chmod -R a+x path
chmod -Rv 755 path
```
### chown 归属用户[:归属群组] 文件|目录
更改文件的归属用户。可以使用用户名或者用户编号
| | |
| --- | --- |
| -R | 递归 |
| -v | 显示过程 |
| -c | 类似“-v”,仅显示更改部分 |
| --reference=参照文件或目录 | 以指定文件为参照更改权限 |
示例:
```
chown user:admin path
chown -R user.admin path
chown user path
```
### chgrp 归属群组 文件|目录
更改文件的归属群组。可以使用群组名或者群组编号,选项同上
### SUID、SGID、Sticky bit
某些情况下,需要以可执行文件归属用户的身份执行该文件,可以为该文件设置 SUID。同样,设置 SGID 能够以该文件归属群组的身份执行它。
例如:用户自行设定密码。出于安全方面的考虑, `/etc/shadow` 只能由 root用户 直接修改。
```
-rw------- root root /etc/shadow
```
这个时候,可以为程序 /usr/bin/passwd 设置 SUID,当普通用户执行“**passwd**”命令时,便能够以该程序归属用户 root 的身份修改 /etc/shadow 文件。而“passwd”程序自身带有身份验证机制,不能通过验证时拒绝执行,从而保证了安全。
```
ls -l /usr/bin/passwd
-r-s--x--x root root /usr/bin/passwd
```
我们发现,归属用户的可执行权限位使用 _s_ ,表示 SUID。同样,归属群组的可执行权限位使用 _s_ ,表示 SGID。任何用户或群组都拥有 “其它用户” 的权限,所以不需要以 其它用户 身份执行文件,其它用户的可执行权限位便不会出现 _s_ 。该权限位可能出现的属性为 _t_ ,也就是粘着位 Sticky bit。
```
ls -ld /tmp
drwxrwxrwt root root /tmp
```
粘着位表示任何用户都可能具有写权限,但只有该归属用户或 root用户 才能够删除
SUID、SGID、Sticky bit 也可以像权限一样,使用一个八进制数表示,如下:
| | |
| --- | --- |
| 4 | SUID |
| 2 | SGID |
| 1 | Sticky bit |
通过在“**chmod**”命令中使用 4个八进制数 的表达式,如 4755 ,用第一位表示 SUID、SGID 或 Sticky bit,便能够为文件设置这些特殊权限。示例:
```
chmod -R 4755 path
```
### lsattr [路径]
查看文件的特殊属性
| | |
| --- | --- |
| -a | 全部显示 |
| -d | 只显示目录 |
| -R | 递归 |
特殊属性包括:
| | |
| --- | --- |
| a | 仅供附加用途 |
| b | 不更新最后存取时间 |
| c | 压缩后存放 |
| d | 排除在转储操作之外 |
| i | 不得任意更动文件或目录 |
| s | 保密性删除文件或目录 |
| S | 即时更新文件或目录 |
| u | 预防意外删除 |
### chattr +|-|=属性 路径
更改文件特殊属性
| | |
| --- | --- |
| -R | 递归 |
| -V | 显示过程 |
## 用户管理
### 细节
root 用户为根用户,也就是系统管理员,拥有全部权限
一个用户只能拥有一个 群组编号 ,但是还可以归属于其它附加群组
用户管理的重要配置文件:
| | |
| --- | --- |
| /etc/passwd | 用户名 密码位 用户编号 归属群组编号 姓名 $HOME目录 登录Shell |
| /etc/shadow | 用户名 已加密密码 密码改动信息 密码策略 |
| /etc/group | 群组名 密码位 群组编号 组内用户 |
| /etc/gshadow | 群组密码相关文件 |
| /etc/sudoers | 用户名 权限定义 权限 |
* 请使用“**visudo**”命令修改`/etc/sudoers`,而不要直接编辑
* 可以使用 **pwconv** 命令创建影子密码,将 `/etc/passwd` 文件中的密码转换到 `/etc/shadow` 文件
### su [用户名]
切换到其它用户,默认切换到 root用户。提示密码为目标用户密码
| | |
| --- | --- |
| -f | 快速切换,忽略配置文件 |
| - | -l | 重新登录 |
| -m |-p | 不更改环境变量 |
| -c 命令 | 切换后执行命令,并退出切换 |
### sudo 命令
以其它用户的身份执行命令,默认以 root 的身份执行。提示密码为当前用户密码
| | |
| --- | --- |
| -s | 切换为 root shell |
| -i | 切换为 root shell,并初始化 |
| -u 用户名|用户编号 | 执行命令的身份 |
| -l | 显示自己的权限 |
### passwd [用户名]
设定用户密码
| | |
| --- | --- |
| -d | 清除密码 |
| -l | 锁定账户 |
| -e | 使密码过期,在下次登录时更改密码 |
| -S | 显示密码认证信息 |
| -x 天数 | 密码过期,最大使用时间 |
| -n 天数 | 冻结密码,最小使用时间 |
| -s | 更改 登录Shell |
| -f | 更改用户信息 |
示例:
```
$passwd
Changing password for user
(current) UNIX password: #原密码
Enter new UNIX password: #新密码
Retype new UNIX password: #确认新密码
```
### gpasswd 群组名
更改群组
| | |
| --- | --- |
| -a 用户名 | 将用户加入群组 |
| -d 用户名 | 将用户从群组中删除 |
| -r | 删除密码 |
| -A 用户名 | 将用户设置为群组管理员(群组管理员或 root 才可以使用 gpasswd 命令) |
| -M 用户1,用户2…… | 设置群组成员 |
### chsh -s Shell [用户名]
更改登录 Shell
### usermod 用户名
修改用户账号
| | |
| --- | --- |
| -d 目录 | 设定 $HOME 目录 |
| -m | 设定 $HOME 目录时自动建立该目录 |
| -s Shell | 修改用户 登录Shell |
| -l 新登录名 | 修改为新登录名 |
| -u 用户编号 | 修改用户编号 |
| g 群组名 | 修改用户归属群组 |
| -G 群组名 | 修改用户归属辅组 |
| -L | 锁定帐户 |
| -U | 解除锁定 |
| -e 过期时间 | 设定用户账号过期时间 |
| -f 缓冲天数 | 设定密码过期后多长时间关闭账号 |
| -c 字符串 | 修改用户备注 |
### useradd 用户名
新建用户
| | |
| --- | --- |
| -d 目录 | 设定 $HOME 目录 |
| -m | 自动建立 $HOME 目录 |
| -M | 不自动建立 $HOME 目录 |
| -s Shell | 设定用户 登录Shell |
| -u 用户编号 | 设定用户编号 |
| -g 群组名 | 设定用户归属群组 |
| -G 群组名 | 设定用户归属附加群组 |
| -n | 不建立以用户名为名称的群组 |
| -e 过期时间 | 设定用户账号过期时间 |
| -f 缓冲天数 | 设定密码过期后多长时间关闭账号 |
| -c 字符串 | 设定用户备注 |
| -D [表达式] | 更改预设值 (预设值保存于 /etc/default/useradd 文件中) |
* 新建用户规则保存于 `/etc/login.defs` 文件中
* 新建用户默认文件保存于 `/etc/skel/` 目录中。新建用户时,系统自动拷贝此目录下的文件至新建用户的 `$HOME` 目录
### userdel 用户名
删除用户
| | |
| --- | --- |
| -r | 删除用户相关文件和目录 |
### id [用户名]
显示用户 用户编号 群组编号 归属附加群组
## 进程管理
### 细节
进程一般分为批处理进程、交互进程和守护进程三类。
守护进程总是活跃,在系统启动时通过脚本自动启动,或由 root 启动,通常在后台运行。
一个进程可以拥有子进程。当父进程终止时,它的子进程也随之终止;而子进程终止时,父进程通常可以继续运行。
init 进程为根进程,所有进程都是它的子进程
### ps
显示进程信息,选项可省略 “`-`”
| | |
| --- | --- |
| aux | 以 BSD风格 显示进程 _常用_ |
| -efH | 以 SystemV风格 显示进程 |
| -e | -A | 显示所有进程 |
| a | 显示终端上所有用户的进程 |
| x | 显示无终端进程 |
| u | 显示详细信息 |
| f | 树状显示 |
| w | 完整显示信息 |
| l | 显示长列表 |
输出字段
| | |
| --- | --- |
| USER | 进程所有者 |
| PID | 进程编号 |
| PPID | 父进程编号 |
| %CPU | CPU 占用率 |
| %MEM | 内存占用率 |
| NI | 进程优先级。数值越大,占用 CPU 时间越少 |
| VSZ | 进程虚拟大小 |
| RSS | 页面文件占用 |
| TTY | 终端编号 |
| STAT | 进程状态 |
| D | 不可中断 |
| R | 正在运行,或在队列中的进程 |
| S | 处于休眠状态 |
| T | 停止或被追踪 |
| Z | 僵尸进程 |
| X | 死掉的进程 |
| < | 高优先级 |
| N | 低优先级 |
| L | 有些页被锁进内存 |
| s | 包含子进程 |
| + | 位于后台的进程组 |
| l | 多线程,克隆线程 |
### pstree [ 进程编号 | 用户 ]
树状显示进程信息。可选择显示某用户的进程或从某进程编号开始的进程
| | |
| --- | --- |
| -a | 显示完整命令及选项 |
| -c | 完全显示重复进程 |
| -p | 显示进程编号,隐含-c |
| -n | 按进程编号排列进程 |
| -u | 显示进程所有者 |
| -h |
| -H 进程编号 | 高亮显示进程编号指定的进程及其祖先 |
### pgrep 进程名
显示进程编号
| | |
| --- | --- |
| -l | 显示进程名和进程编号 |
| -o | 进程起始编号 |
| -n | 进程终止编号 |
### kill [信号代码] 进程编号
根据进程编号向进程发送信号,常用来结束进程,默认信号为 -9
| | |
| --- | --- |
| -l [信号代码] | 显示、翻译信号代码 |
| -9 | -KILL | 发送 kill 信号,退出 |
| -6 | -ABRT | 发送 abort 信号,退出 |
| -15 | -TERM | 发送 Termination 信号 |
| -1 | -HUP | 挂起 |
| -2 | -INT | 从键盘中断,相当于 Ctrl+c |
| -3 | -QUIT | 从键盘退出,相当于 Ctrl+d |
| -4 | -ILL | 非法指令 |
| -11 | -SEGV | 内存错误 |
| -13 | -PIPE | 破坏管道 |
| -14 | -ALRM |
| -STOP | 停止进程,但不结束 |
| -CONT | 继续运行已停止的进程 |
| -9 | -1 | 结束当前用户的所有进程 |
### pkill [信号代码] 进程名称
结束进程族。如果结束单个进程,请用 kill
### xkill
在图形界面中点杀进程。执行此命令后,鼠标指针变为骷髅图案(一定看过《加勒比海盗》吧)。在窗口中点击左键杀死进程,右键取消
### top
动态、交互式进程管理器
| | |
| --- | --- |
| 启动选项 | -b |
| -c | 显示进程启动状态,包括选项、参数、操作对象等;而不只是进程名 |
| -d 秒 | 刷新频率。 -d 5,表示5秒刷新一次 |
| -n 次 | 刷新次数,然后退出。 -n 5,表示刷新5次后退出 |
| -i | 禁止显示空闲进程或僵尸进程 |
| -p 进程编号 | 仅监视指定进程的编号 |
| -s | 安全模式运行,禁用一些交互指令 |
| -S | 累积模式,输出每个进程的总的 CPU 时间,包括已死的子进程 |
| 交互命令 | space | 立即刷新 |
| k | 交互式杀死进程,提示输入进程编号 (默认发送信号15) |
| r | 设定 renice,提示输入进程编号和 renice值 |
| s | 改变两次刷新时间间隔,以秒为单位 |
| n | 设定显示进程数, 0 为不作限制 |
| i | 隐藏空闲进程和僵尸进程 |
| S | 切换到累积时间模式 |
| l | 开关,在顶部显示 uptime 信息 |
| t | 开关,在顶部显示 进程和 CPU 状态 |
| m | 开关,在顶部显示 free 信息 |
| c | 显示方式切换: 进程名/进程启动状态 |
| A | 按进程启动顺序进行排序。由新到旧 |
| M | 按内存占用排序。由大到小 |
| N | 以进程编号排序。由大到小 |
| P | 按 CPU 占用排序。由大到小 |
| T | 按时间/累积时间排序 |
| f|F | 设定显示字段。设定完成后空格退出 |
| o|O | 设定显示字段的排序。大写向前移动,小写向后移动,空格退出 |
| h|? | 显示有关安全模式和累积模式的帮助信息 |
| W | 把当前的配置写到 ~/.toprc 中 |
### renice 优先级 进程
重新设定进程优先级(通常无此必要)
| | |
| --- | --- |
| 优先级表达式 | +|-|= nice值 |
| nice 取值范围 | -20~19 |
| 进程表达式 | -p 进程编号 | 通过进程编号进行设定 |
| -g 进程群组编号 | 通过进程群组编号 |
| -u 用户编号 |
### nohup 命令 [选项]
将任务提交到后台,输出附加到 `~/nohup.out` 文件。即便用户退出登录,提交的命令仍继续执行。
### 命令 &
背景执行此命令,如果用户退出登录,则命令停止执行
### 命令1 ; 命令2 ; ......
命令队列,从左向右,依次执行以 `;` 分隔的命令
### 命令1 && 命令2 && ......
命令队列,从左向右,依次执行以 `&&` 分隔的命令。前一个命令执行成功,后一个命令才能执行
### Ctrl+z
挂起当前任务
### jobs
显示背景任务
| | |
| --- | --- |
| -l | 显示完整信息 |
### bg [任务编号]
将挂起的任务背景执行
### fg [任务编号]
将背景任务调到前台执行
## 磁盘和内存管理
### 细节
Linux 中,设备用`/dev/`目录下的文件表示。例如
```
/dev/hda1 第一块硬盘的第一主分区
/dev/hdb5 第二块硬盘的第一逻辑分区
/dev/sda4 第一块 SATA 硬盘的第四主分区,或者扩展分区
/dev/null 黑洞设备
```
关于磁盘设备,详见[“分区概念”一节](ch08.html#partition "分区概念")
### mount 设备文件 [挂载路径]
挂载文件系统
| | |
| --- | --- |
| -t | 指定文件系统的类型 | 通常不必指定,mount 自动检测 |
| 常见类型 | reiserfs | ReiserFS 3.6版 |
| xfs | SGI 技术 |
| jfs | IBM 技术 |
| ext3 | Linux 传统文件系统 |
| vfat | fat fat32 |
| ext2 | Linux 传统文件系统,不带日志 |
| ntfs | WINNT |
| iso9660 | 光盘 |
| smbfs | Windows 文件共享 |
| -o [选项1] [选项2] ..... |
| 选项 | loop | 环设备。光盘、ISO 映像文件等,通常用于挂载映像文件(而不是设备文件) |
| bind | 绑定。将一个目录(而不是设备文件)挂载到另一个目录 |
| ro | rw | 只读 readonly;可读写 read-write |
| sync | async | 同步模式|异步模式。决定修改是否立即写入文件系统 |
| atime | noattime | 读取时是否修改访问时间。对于写入敏感设备,例如闪存、软盘,建议使用 noatime |
| auto | noauto | 自动挂载模式 |
| exec | noexec | 是否允许执行 |
| defaults | 使用预设的选项 rw, suid, dev, exec, auto, nouser, async |
| iocharset=UTF-8 | 指定字符集,可简写为 utf8 |
| codepage=936 | 指定代码页,可简写为 cp936 西文系统代码页为 437 |
| umask=权限掩码![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png) | 设定权限掩码 |
| uid=用户编号 | 设定归属用户 |
| gid=群组编号 | 设定归属群组 |
| remount | 以不同选项重新挂载 |
| -L 卷标 | 挂载带有特殊卷标的分区 |
> [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch17s11.html#man-disk11) 权限掩码=777-目标权限(三位) | 7777-目标权限(四位)假如权限掩码为 022 ,则目标权限为 755 rwxr-xr-x可以使用 **umask** 命令设置权限掩码
> 提示:挂载 NTFS 分区时请使用 **utf8** 选项;挂载 FAT 分区时请使用 **iocharset=utf8,codepage=936** 选项,以避免乱码
**mount -a**
挂载 `/etc/fstab` 文件中定义的所有设备。示例:
```
sudo mount -t iso9660 -o loop /dev/cdrom0 /media/cdrom
sudo mount -t vfat -o remount iocharset=utf8,codepage=936 /dev/hda5 /media/hda5
```
### umount 设备文件 | 挂载路径
卸载已挂载文件系统
### df
查看已挂载文件系统的磁盘空间占用
| | |
| --- | --- |
| -a | 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如`/proc 文件系统` |
| -T | 显示文件系统类型 |
| -k | 以 k 字节为单位显示 |
| -i | 显示 i节点 信息,而不是磁盘块 |
| -t 文件系统类型 | 显示指定类型的文件系统的磁盘空间使用情况 |
| -x 文件系统类型 | 列出排除指定类型文件系统的磁盘空间使用情况(与 t 选项相反) |
| -l | 只显示本地文件系统 |
### free
查看内存、缓冲区、交换空间的占用
| | |
| --- | --- |
| -b | 以字节为单位显示数值 |
| -k | 以千字节为单位显示数值 |
| -m | 以兆字节为单位显示数值 |
| -g | 以吉字节为单位显示数值 |
| -l | 显示内存占用峰值 |
| -o | 不显示缓冲区占用 |
| -t | 统计结果 |
| -s 秒 | 刷新频率 |
### sync
同步文件系统。将缓冲区中的数据写入文件系统
### fdisk 磁盘设备文件
分区表修改工具(磁盘设备文件应为整块磁盘,而不是磁盘中的分区。例如 `/dev/sda` ,而不是 `/dev/sda1`)
| | |
| --- | --- |
| m | 使用帮助 |
| l | 查看已知文件系统类型 |
| p | 显示分区信息 |
| n | 新建分区 (p:主分区 l:扩展分区 参见 [“分区概念”一节](ch08.html#partition "分区概念") ) |
| d | 删除分区 |
| t | 改变分区类型 |
| w | 将改动写入分区表 |
| q | 放弃改动并退出 |
**fdisk -l** 查看所有磁盘分区信息
### cfdisk
更加友善的分区表修改工具
### mkfs.文件系统类型 分区设备文件
将分区格式化为文件系统。示例:
```
sudo mkfs.reiserfs /dev/hda1
sudo mkfs.xfs /dev/sda1
```
### hdparm 磁盘设备文件
设置硬盘参数
| | |
| --- | --- |
| -d 0|1 | DMA 模式开关 |
| -a 0|1 | 预读模式开关 |
| -t | 性能测试 |
| -T | 缓存性能测试 |
| -c 0|1|3 | 32位传输模式开关 |
| -g | 显示柱面,扇区等信息 |
| -i|-I | 显示磁盘信息 |
## 硬件管理
### lspci
查看 PCI 总线连接的设备(实际上也可以查看 ISA、AGP、USB 等总线信息)
| | |
| --- | --- |
| -v | 显示详细信息 |
| -vv |
| -vvv |
| -k | 同时显示使用的驱动和加载的模块 |
| -n | 显示设备 ID号 |
| -b | 显示 PCI、ISA 扩展槽地址和中断 |
| -t | 显示总线树结构 |
| -F 文件 | 从指定文件读信息 |
| -m | 以便于机器处理的格式输出所有硬件信息 |
| -mm |
### lsusb
查看 USB 接口连接的设备
### lsmod
查看已加载模块。`/lib/modules/`**uname -r** 目录下为所有可用模块
### modprobe 模块名称
启用模块
| | |
| --- | --- |
| -a | 加载所有匹配模块 |
| -c | 显示当前使用的配置 |
| -d | 显示调试信息 |
| -k | 将指定模块设置为"自动清除"模式 |
| -l | 显示所有匹配模块 |
| -n | 模拟执行 |
| -q | 不显示错误信息 |
| -r | 删除使用命令加载的模块;对非命令加载的模块设置"自动清除"模式 |
| -s | 将结果记录到系统记录中 |
| -t | 指定模块类型 |
| -v | 显示详细信息 |
| -C | 指定配置文件.默认使用`/etc/modules.conf`文件为配置文件 |
## 网络管理
## 其它
### echo 字符串
回显。较复杂的字符串,可以使用 `"` 括起来。
| | |
| --- | --- |
| 选项 | -n | 输出内容不换行 |
| -E | 不解析脱字符 |
| -e | 解析脱字符 |
| 控制字符 | \\ | 反斜线 |
| \a | 警告 |
| \b | 退格 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表符 |
### clear
清空屏幕
### alias 输入内容=实际内容
别名,为命令指定一个别名,以简化输入。例如:
```
alias ls='ls -AF --color=auto'
```
* 可以将您的定义保存在 `~/.bashrc` 文件中
### export 变量名
将变量导出为环境变量,常写变量赋值一同使用,例如:
```
export PATH="$PATH:xxx"
```
### shutdown
关闭计算机,向根进程 init 发送信号,更改 runlevel 为 0 (halt)
| | |
| --- | --- |
| -h | 关闭电源 |
| -r | 重启 |
| -n | 强行关机,不向 init进程 发送信号 |
| -k | 模拟关机,向登录者发送关机警告 |
| -t 秒 | N秒后关机 |
| time 时间 | 定时关机 |
| -c [说明信息] | 取消关机 |
| -f | 重启时忽略检测文件系统 |
| -F | 重启时强制检测文件系统 |
### halt
关闭计算机。 调用 **shutdown -h** ,结束系统进程,同步文件系统,停止内核。
| | |
| --- | --- |
| -n | 不同步文件系统 |
| -w | 模拟关机,写 `/var/log/wtmp` 纪录 | -f | 不调用 shutdown ,强行关机 |
| -p | 默认选项,关机时调用 poweroff |
| -i | 关机前断开网络 |
### reboot
重新启动计算机。选项与 halt 相似
### init 数字
更改运行级别
| | |
| --- | --- |
| 0 | 关机 |
| 1 | 单用户模式 |
| 6 | 重启 |
### chroot 路径
更改根目录,重新定义会话的运行环境。(通常用在多系统环境下使用)
- 开源世界旅行手册
- 授权
- 致谢
- 序言
- 更新纪录
- 导读
- 如何写作科技文档
- 部分 I. 气候
- 第 1 章 GUI? CLI?
- 第 2 章 UNIX 缩写风格
- 第 3 章 版本号的迷雾
- 第 4 章 Vim 还是 Emacs
- 第 5 章 DocBook 还是 TeX
- 第 6 章 完全用 Gnu/Linux 工作
- 第 7 章 病毒
- 第 8 章 磁盘 分区
- 第 9 章 文件系统
- 第 10 章 发行版介绍
- 第 11 章 编程语言
- 第 12 章 无根的根:无名师的 Unix 心传
- 部分 II. 地理
- 第 13 章 基础知识
- 第 14 章 命令系统
- 第 15 章 基本系统
- 第 16 章 软件管理
- 第 17 章 核心工具集
- 第 18 章 编译工具链
- 第 19 章 图形界面
- 第 20 章 国际化
- 第 21 章 内核
- 第 22 章 Grub
- 第 23 章 服务器
- 第 24 章 Vim 编辑器
- 第 25 章 Emacs 入门
- 第 26 章 正则表达式
- 第 27 章 docbook 指南
- 第 28 章 Git 版本控制系统
- 第 29 章 ConTeXt 入门指南
- 部分 III. 景观
- 第 30 章 终极 Shell -- ZSH
- 第 31 章 完美工作站 Archlinux
- 第 32 章 组织你的意念:Emacs org mode
- 第 33 章 Zsh+screen
- 第 34 章 gentoo stage3
- 第 35 章 硬件问题
- 第 36 章 网络设置
- 第 37 章 自制 LiveCD
- 第 38 章 awesome
- 第 39 章 openbox 工作环境
- 第 40 章 Emacs muse
- 第 41 章 写作工具链
- 第 42 章 使用 lftp
- 第 43 章 Firefox 使用技巧
- 第 44 章 FVWM
- 部分 IV. 地质
- 第 45 章 Unix
- 第 46 章 Gnu
- 第 47 章 软件业自由之神——Richard Stallman
- 第 48 章 Linux
- 第 49 章 GNOME与KDE的战争
- 第 50 章 Vim Emacs
- 第 51 章 年代纪
- 第 52 章 我的选择
- 第 53 章 补遗