ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 第 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 路径 更改根目录,重新定义会话的运行环境。(通常用在多系统环境下使用)