CentOS 7 常用命令速查手册
CentOS 7 常用命令速查手册
零基础 Linux 命令行入门 · 目录结构 · 文件操作 · VI 编辑器 · 权限 · 系统运维
| 适用系统 | CentOS 7.9(命令同样适用于 RHEL 7 / Rocky 8 等) |
|---|---|
| 适用读者 | 零基础学生、云计算比赛参赛选手 |
| 内容范围 | 9 章 + 附录,覆盖 120+ 常用命令 |
| 配套材料 | 《VMware 虚拟机安装 CentOS 7 完全图解教程》《OpenStack 运维操作手册》 |
| 约定 | 命令提示符中 # 表示 root 用户,$ 表示普通用户;命令本身不写前缀 |
目 录
- 认识 Linux 命令行
- Linux 目录结构(每个目录是干什么的)
- 切换目录与查看文件:pwd / cd / ls
- 新建、复制、剪切、删除:mkdir / cp / mv / rm
- 查看文件内容与查找:cat / less / grep / find
- 重定向与管道:> / >> / |
- VI / VIM 编辑器完全指南
- 权限、用户与提权:chmod / chown / sudo
- 系统、网络、软件、打包命令
- 附录:分类命令总表 + 学习路线
第 1 章 认识 Linux 命令行
1.1 命令行长什么样
登录 CentOS 后看到的这一行,叫做命令提示符:
[root@localhost ~]#
| 组成部分 | 含义 | 说明 |
|---|---|---|
root | 当前登录的用户名 | root 是超级管理员,权限最大,操作要谨慎 |
@ | 分隔符 | 固定写法 |
localhost | 主机名 | 我们安装时改成了 controller / compute |
~ | 当前所在目录 | ~ 代表用户的家目录(root 是 /root) |
# | 身份标记 | #=root,$=普通用户 |
1.2 命令的通用格式
命令名 [选项] [参数]
ls -l /etc
| 要素 | 作用 | 例子 |
|---|---|---|
| 命令名 | 要执行的动作 | ls(列表)、cp(复制) |
| 选项 | 控制命令的“行为方式”,以 - 开头 | -l 长格式、-a 显示隐藏文件;可合并: -la 等于 -l -a |
| 参数 | 命令“作用在谁身上”,通常是路径 | /etc、file.txt |
记住三个“分隔”规则命令名、选项、参数之间必须有空格;选项和参数大小写敏感(-l 和 -L 完全不同);文件名里有空格要加引号:ls "my file"。
1.3 必须懂的符号
| 符号 | 名称 | 含义 | 示例 |
|---|---|---|---|
~ | 波浪号 | 当前用户的家目录 | cd ~ |
/ | 斜杠 | ① 根目录;② 路径分隔符 | cd /、/etc/ssh |
. | 点 | 当前目录 | ./run.sh 运行当前目录脚本 |
.. | 两个点 | 上一级(父)目录 | cd .. |
- | 横杠 | 上一个所在的目录(用于来回切换) | cd - |
* | 星号 | 通配符,匹配任意多个字符 | rm *.log 删除所有日志 |
? | 问号 | 通配符,匹配任意一个字符 | ls file?.txt |
| | 管道 | 把前一个命令的输出交给后一个命令处理 | ps -ef | grep nginx |
> >> | 重定向 | 输出写入文件(覆盖 / 追加) | ls > a.txt |
# | 井号 | 注释;或 root 提示符 | # 这是注释 |
1.4 忘了命令怎么用?两招救命
man ls # 查看 ls 的完整说明书,按 q 退出
ls --help # 快速看参数列表(绝大多数命令都支持)
# 只想记住常用参数,看这一行就够:
man -k 关键词 # 按关键词搜索手册,如 man -k network
| 快捷键 | 作用 |
|---|---|
| Tab | 最有用:自动补全命令名或路径,连按两次列出所有候选 |
| ↑ / ↓ | 翻历史命令,回车直接再执行 |
| Ctrl+C | 中断当前正在跑的命令 |
| Ctrl+L | 清屏(等价于 clear) |
| Ctrl+U | 删掉光标前整行 |
| Ctrl+D | 退出当前 Shell(相当于 exit) |
| Ctrl+A / E | 光标跳到行首 / 行尾 |
检查点:能看懂 [root@controller ~]# 这行的每一部分;会用 Tab 补全和 ↑ 翻历史;知道 man 怎么退出(q)。
第 2 章 Linux 目录结构(每个目录是干什么的)
Windows 有 C 盘、D 盘;Linux 只有一个根目录 /,所有东西都挂在它下面,形成一棵倒过来的树。这叫 FHS 标准(文件系统层次结构标准)。
/ ├── bin/ 最基础的命令(ls、cp、mv…) → 现在链接到 /usr/bin ├── boot/ 内核和启动文件(vmlinuz、initramfs)——别乱动! ├── dev/ 设备文件(sda 硬盘、tty 终端、null 黑洞) ├── etc/ 所有配置文件(装完服务九成时间都在改这里) ├── home/ 普通用户的家目录(/home/zhangsan) ├── lib/ 库文件(相当于 Windows 的 dll) ├── media/ 自动挂载的移动设备(U 盘、光驱) ├── mnt/ 临时挂载点(手动挂载硬盘常用,如 /mnt/cdrom) ├── opt/ 第三方大型软件(比赛常把软件装这儿) ├── proc/ 内核和进程的虚拟信息(内存里的,不占硬盘) ├── root/ root 用户自己的家目录(不是 /home/root) ├── sbin/ 管理员专用命令(fdisk、shutdown…) ├── srv/ 服务数据目录(如 FTP 共享 /srv/ftp) ├── sys/ 硬件设备的虚拟信息(同 proc,不占硬盘) ├── tmp/ 临时文件,重启会清空 ├── usr/ 用户程序与文件(最大的目录之一) │ ├── bin/ 绝大多数命令真正的存放处 │ ├── sbin/ 管理员命令 │ ├── lib/ 32 位库;lib64/ 64 位库 │ ├── local/ 手动安装的软件默认装这里(/usr/local/bin) │ └── share/ 共享数据、文档、手册 └── var/ 经常变化的数据(variable) ├── log/ 日志都在这里(排错第一站) ├── lib/ 服务运行时的状态数据(MySQL 数据库文件默认在这) ├── www/ 网站根目录 ├── spool/ 邮件、打印队列 └── tmp/ 持久化的临时文件(重启不清)
2.1 最常用的 8 个目录速记
| 目录 | 一句话记忆 | 典型用途 |
|---|---|---|
/etc | 配置文件的家 | /etc/sysconfig/network-scripts/ 网卡配置/etc/hosts 主机名解析/etc/ssh/sshd_config SSH 配置 |
/root | 管理员的家 | root 登录后默认就在这/root/openrc.sh OpenStack 认证脚本常放这 |
/var/log | 出问题先来这 | /var/log/messages 系统日志/var/log/secure 登录认证日志/var/log/nova/ OpenStack 服务日志 |
/usr/local/bin | 手动装的东西在这 | OpenStack 的 iaas-*.sh 脚本、自己编译的软件 |
/opt | 第三方大软件 | 比赛环境里常放定制软件包 |
/mnt /media | 挂东西的地方 | mount /dev/cdrom /mnt 挂载光盘 |
/tmp | 临时中转站 | 下载、解压临时文件,重启自动清 |
/boot | 启动文件(别碰) | 内核文件、GRUB 引导程序 |
2.2 绝对路径 vs 相对路径
| 类型 | 写法 | 含义 | 示例 |
|---|---|---|---|
| 绝对路径 | 从 / 开头 | 不管你现在在哪,都指向同一个位置 | /etc/hosts |
| 相对路径 | 不以 / 开头 | 相对于“当前所在目录” | 身在 /etc 时,hosts 就等于 /etc/hosts |
小白建议:前期一律用绝对路径,最不容易出错。等熟了再用相对路径偷懒。
检查点:能说出 /etc、/var/log、/root、/usr/local/bin 各自放什么;能解释 /root 和 / 的区别。
第 3 章 切换目录与查看:pwd / cd / ls
3.1 pwd —— 我在哪儿
pwd
# 输出:/etc/sysconfig/network-scripts
pwd = print working directory,打印当前完整路径。迷路时第一个敲它。
3.2 cd —— 切换目录(change directory)
| 命令 | 去哪儿 | 说明 |
|---|---|---|
cd /etc | 进入 /etc | 绝对路径写法 |
cd .. | 上一级目录 | 可以连写:cd ../.. 上两级 |
cd ~ 或 cd | 回自己的家目录 | root 回 /root,普通用户回 /home/用户名 |
cd / | 回根目录 | 最顶层 |
cd - | 回上一个目录 | 两个目录之间来回跳,超级好用 |
cd /root/openstack-lab | 多级目录一次性进入 | 路径要写全 |
常见错误:cd etc 少了开头的 /,系统会去当前目录下找 etc 子目录,找不到就报 No such file or directory。记住:进系统目录永远从 / 开始写。
3.3 ls —— 列出目录内容(最常用,没有之一)
| 命令 | 作用 | 什么时候用 |
|---|---|---|
ls | 列出当前目录的文件名 | 随便看看 |
ls -l | 长格式:权限、属主、大小、时间、名字 | 看文件详情(记住 ll 就是它的别名) |
ls -a | 显示隐藏文件(以 . 开头的) | 找 .bashrc、.treeinfo 这类文件 |
ls -la | 上面两个合体 | 最常用组合 |
ls -lh | 大小显示成 K/M/G,人眼友好 | 看文件有多大 |
ls -ltr | 按修改时间倒序(最新的在最下面) | 找刚生成的文件,排错神器 |
ls -ld /etc | 只显示 /etc 目录本身的属性 | 看目录权限 |
ls /etc/ssh | 列出指定目录内容 | 不切目录也能看 |
读懂 ls -l 的每一列
-rw-r--r-- 1 root root 1866 Mar 22 2023 /etc/hosts
│└┬┘└┬┘└┬┘ │ │ │ │ │
│ │ │ │ │ │ │ │ └─ 文件名
│ │ │ │ │ │ │ └────────── 修改时间
│ │ │ │ │ │ └───────────────── 大小(字节)
│ │ │ │ │ └────────────────────── 所属组
│ │ │ │ └───────────────────────── 属主(文件归谁)
│ │ │ └───────────────────────────── 硬链接数
│ │ └──────────────────────────────── 其他人权限 r-- = 只读
│ └─────────────────────────────────── 所属组权限 r-- = 只读
└───────────────────────────────────── 文件类型 + 属主权限 rw- = 读写
d=目录 l=链接 -=普通文件
检查点:会用 cd - 在两个目录来回跳;能用 ls -la 找出隐藏文件;能读懂 -rw-r--r-- 的含义。
第 4 章 新建、复制、剪切、删除
4.1 mkdir —— 建目录
mkdir test # 建一个名叫 test 的目录
mkdir -p /a/b/c/d # -p:一次性建出多层目录(父目录不存在也自动建)
mkdir dir1 dir2 dir3 # 一次建多个
-p 是刚需:不加 -p 时,如果 /a 不存在,mkdir /a/b 直接报错。-p 还会在目录已存在时不报错,脚本里必带。
4.2 touch —— 建空文件
touch a.txt # 新建一个空文件
touch f1 f2 f3 # 一次建多个
touch a.txt # 文件已存在时:只更新修改时间,不报错
4.3 cp —— 复制(copy)★重点
| 命令 | 作用 | 说明 |
|---|---|---|
cp a.txt b.txt | 复制文件并改名 | 目录里多出一个 b.txt,a.txt 还在 |
cp a.txt /tmp/ | 复制到指定目录 | 名字不变 |
cp -r /etc/ssh /tmp/ | 复制目录必须加 -r | r = recursive 递归,把里面全部内容一起复制 |
cp -p a.txt /tmp/ | 保留原文件的权限、属主、时间 | 备份配置时建议加 |
cp -a /etc/ /backup/ | 归档复制(= -dpr 全保留) | 完整备份的最佳选择 |
cp -i a.txt /tmp/ | 覆盖前先问一句 y/n | 防手抖 |
cp -v *.conf /tmp/ | 显示复制过程 | 批量复制时看得清楚 |
cp -f a.txt b.txt | 强制覆盖,不询问 | 脚本里常用 |
最常见的坑对目录用 cp 忘了 -r,会报 omitting directory;
另外 Linux 里 cp默认会直接覆盖同名文件且不提示(root 用户尤甚),重要操作请养成先 ls 确认目标目录的习惯。
4.4 mv —— 剪切 / 移动 / 重命名(move)★重点
mv 一个命令干三件事,是 Linux 里最“一专多能”的命令:
| 场景 | 命令 | 结果 |
|---|---|---|
| 剪切文件到别的目录 | mv a.txt /tmp/ | a.txt 从原处消失,出现在 /tmp 下 |
| 重命名文件 | mv old.txt new.txt | 同目录内改名,内容不变 |
| 重命名目录 | mv olddir newdir | 目录改名,不需要 -r |
| 移动整个目录 | mv /data/mysql /opt/ | 整个目录连内容一起搬走 |
| 批量移动 | mv *.log /var/log/ | 配合通配符 |
| 覆盖前提示 | mv -i a.txt /tmp/ | 目标已存在时问一下 |
为什么 mv 这么快?如果源和目标在同一个分区,mv 只改目录项指针,不搬数据,所以瞬间完成;跨分区才会真正复制+删除。这也是“剪切”和“复制后删除”的本质区别。
4.5 rm —— 删除 ★最危险
| 命令 | 删除什么 | 风险 |
|---|---|---|
rm a.txt | 删文件 | 删前会问(如果设了别名) |
rm -i a.txt | 删前询问确认 | 低 |
rm -r mydir/ | 递归删目录及里面所有内容 | 中 |
rm -rf mydir/ | 强制递归删除,不问不提示 | 极高 |
rm -rf /* | — | 删库跑路级别,绝对不能碰 |
Linux 没有回收站!删掉就是真删了,rm -rf 不会进任何垃圾桶。三条铁律:
- 敲
-rf之前,先把命令里的路径原封不动ls一遍,确认要删的东西是对的; - 通配符要谨慎:
rm -rf /tmp/test/*没问题,rm -rf /tmp/test/*手滑多敲一个空格变成rm -rf /tmp/test/ *就删根目录了; - 变量一定要加引号:
rm -rf "$DIR/",否则 DIR 为空时会变成rm -rf /。
安全的删除习惯(推荐照做)
# ① 先看清楚要删的是什么
ls -la /tmp/test/
# ② 用 -i 一个个确认(少量文件)
rm -ri /tmp/test/
# ③ 大量文件先改名“隔离”,观察几天再删
mv /tmp/test /tmp/test.delete.20261006
# ④ 真要删,明确写全路径,不用通配符
rm -rf /tmp/test.delete.20261006
4.6 ln —— 创建链接(快捷方式)
ln -s /usr/local/bin/python3 /usr/bin/python3 # 软链接(类似 Windows 快捷方式,用 -s)
ln a.txt b.txt # 硬链接(同一份数据多个名字,少用)
软链接 vs 硬链接:软链接存的是“路径”,原文件删了链接就失效(红色闪烁);硬链接和原文件是平等的两个名字,删掉一个另一个照常能用。99% 的场景用软链接(-s)。
检查点:能说出 cp 和 mv 的本质区别;能默写“复制目录”的正确命令;能背出删库跑路命令长什么样并知道永远不要敲。
第 5 章 查看文件内容与查找
5.1 查看内容:按文件大小选工具
| 命令 | 用途 | 常见参数 |
|---|---|---|
cat 文件 | 一次全打出来,适合小文件 | cat -n 显示行号 |
less 文件 | 大文件首选,可分页浏览 | 空格翻页、q 退出、/关键词 搜索 |
head -n 20 文件 | 看前 20 行(默认 10 行) | 快速看文件头 |
tail -n 20 文件 | 看最后 20 行 | 看日志尾部 |
tail -f 文件 | 实时滚动跟踪新内容 | 盯日志用这个,Ctrl+C 退出 |
wc -l 文件 | 统计行数 | wc -c 字节数、-w 单词数 |
nl 文件 | 带行号输出 | |
tac 文件 | 倒着显示(最后一行先出) | |
diff a b | 比较两个文件的差异 | 改配置前后对比 |
# 实战:盯着 OpenStack 服务的日志看报错
tail -f /var/log/nova/nova-compute.log
5.2 grep —— 在内容里搜关键词
| 命令 | 作用 |
|---|---|
grep root /etc/passwd | 找出包含 root 的行 |
grep -i error log.txt | -i 忽略大小写(ERROR/error 都命中) |
grep -n error log.txt | -n 显示行号 |
grep -v "^#" file.conf | -v 反向:不包含的行(去掉注释行看有效配置) |
grep -r "keyword" /etc/ | -r 递归搜索整个目录 |
grep -c error log.txt | -c 只输出匹配的行数 |
grep -E "err|warn" log.txt | -E 用扩展正则(或关系) |
比赛高频组合:看配置文件的“有效内容”(去掉空行和注释)grep -vE "^\s*#|^\s*$" /etc/neutron/neutron.conf
5.3 find —— 按条件找文件
find / -name "*.conf" # 全盘找 .conf 文件
find /etc -name "hosts" # 在 /etc 下找 hosts
find /var/log -name "*.log" -size +10M # 找大于 10MB 的日志
find /tmp -mtime +7 # 找 7 天前修改过的文件
find /data -type d -name "test" # 只找目录(-type f 只找文件)
find /etc -name "*.conf" -ls # 找到并列出详情
# 找到后直接批量操作(删除 7 天前的日志,注意先 ls 验证)
find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
| 对照 | find | grep |
|---|---|---|
| 找什么 | 按文件名/属性找文件 | 按文件内容找关键词 |
| 例子 | find / -name "a.txt" | grep "a" /etc/passwd |
5.4 which / whereis —— 命令装在哪
which python3 # 命令的可执行文件路径
whereis python3 # 可执行文件 + 手册 + 源码位置
rpm -qf $(which ls) # 反查这个命令属于哪个软件包
检查点:会用 tail -f 实时盯日志;能用 grep -v 过滤掉注释行;知道找“文件名”用 find、找“内容”用 grep。
第 6 章 重定向与管道
6.1 输出重定向
| 符号 | 含义 | 示例 |
|---|---|---|
> | 标准输出覆盖写入文件 | ls -l > list.txt |
>> | 标准输出追加到文件末尾 | echo "done" >> log.txt |
2> | 错误输出写入文件 | ls /nofile 2> err.txt |
&> | 正确+错误都写入 | sh run.sh &> out.log |
2>&1 | 把错误合并到标准输出 | sh run.sh > out.log 2>&1 |
< | 从文件读取作为输入 | mysql -u root -p < init.sql |
>/dev/null | 丢弃输出(黑洞) | command >/dev/null 2>&1 静默执行 |
最经典的误会:script.sh > log.txt 2>&1 & 是“后台运行并把所有输出记到日志”,比赛跑安装脚本时经常这样用。
6.2 管道 |
把前面命令的输出,当作后面命令的输入。可以串联多个,形成一条“流水线”。
ps -ef | grep nginx # 在所有进程里筛出 nginx
cat access.log | grep "404" | wc -l # 统计 404 出现了多少行
ls -l | sort -k5 -n | tail -5 # 按文件大小排序,看最大的 5 个
systemctl list-units --type=service | grep openstack # 查 OpenStack 服务
history | grep yum | tail -20 # 找以前执行过的 yum 命令
6.3 tee —— 既显示在屏幕又存文件
sh deploy.sh 2>&1 | tee deploy.log # 边看边存(覆盖)
sh deploy.sh 2>&1 | tee -a deploy.log # 边看边存(追加)
检查点:能说清 > 和 >> 的区别;能写出“命令跑完把日志存下来还能看屏幕”的一行命令。
第 7 章 VI / VIM 编辑器完全指南
为什么必须学 vi?Linux 服务器上不一定装了 nano,但一定装了 vi。比赛中改配置文件(网卡、openrc.sh、hadoop 配置……)基本全靠它。刚上手会觉得别扭,练熟 20 分钟就能受益整个比赛周期。
7.1 三种模式(理解这个,vi 就通了一半)
┌──────────────────────────┐ │ ① 命令模式(默认) │ ← 打开文件就在这 │ 按键=执行操作,不能打字 │ └───────┬──────────┬───────┘ i / a / o : 或 / Esc ↓ ↓ ↑ ┌───────────────┐ ┌──────────────┴─────────┐ │ ② 编辑模式 │ │ ③ 末行模式 │ │ 正常打字输入内容 │ │ 底部出现 : 可输命令 │ └───────────────┘ │ w 保存 q 退出 wq 存退 │ └────────────────────────┘ 铁律:不管在哪个模式,狂按 Esc 都能回到①命令模式。
| 模式 | 怎么进 | 能干什么 | 怎么出 |
|---|---|---|---|
| ① 命令模式 | 打开文件默认就在 | 移动光标、删除、复制、粘贴 | — |
| ② 编辑模式 | 按 i / a / o | 打字输入内容(左下角显示 — INSERT –) | 按 Esc |
| ③ 末行模式 | 命令模式下按 : 或 / | 保存、退出、查找替换、显示行号 | 按 Esc 或回车执行后自动返回 |
7.2 打开与关闭
| 命令 | 作用 |
|---|---|
vi /etc/hosts | 打开文件(不存在则新建) |
vi +12 file | 打开并定位到第 12 行(排错时按日志行号直接跳过去) |
vim file | vim 是 vi 的增强版,支持语法高亮(推荐) |
:w | 保存(write) |
:q | 退出 |
:wq 或 ZZ | 保存并退出(最常用) |
:q! | 不保存强制退出(改乱了想重来) |
:w newfile | 另存为新文件 |
:x | 保存退出(只有改动过才写盘) |
7.3 命令模式常用操作(打开就能用)
移动光标
| 按键 | 作用 | 按键 | 作用 |
|---|---|---|---|
h j k l | 左 下 上 右 | w / b | 跳到下/上一个单词 |
0 / ^ | 行首 | $ | 行尾 |
gg | 文件第一行 | G | 文件最后一行 |
10G 或 :10 | 跳到第 10 行 | Ctrl+f/b | 下/上翻页 |
删除、复制、粘贴、撤销
| 按键 | 作用 | 记忆 |
|---|---|---|
x | 删除光标处一个字符 | — |
dd | 删除(剪切)整行 | d = delete |
5dd | 删除从当前行起 5 行 | 数字 + dd |
yy | 复制整行 | y = yank |
3yy | 复制 3 行 | 数字 + yy |
p / P | 粘贴到光标后 / 前 | paste |
dw | 删除一个单词 | d + w |
d$ 或 D | 删除光标到行尾 | — |
u | 撤销(后悔药,可连按) | undo |
Ctrl+r | 重做(撤销撤销) | redo |
r | 替换当前一个字符(不进入编辑模式) | replace |
进入编辑模式的几种姿势
| 按键 | 插入位置 | 使用时机 |
|---|---|---|
i | 光标前插入 | 默认选择,改配置常用 |
a | 光标后插入 | 在行尾补内容方便 |
o | 在下一行新开一行插入 | 加新配置行最方便 |
O | 在上一行新开一行插入 | 在文件开头加内容 |
I / A | 行首 / 行尾插入 | — |
7.4 末行模式(: 开头)常用
| 命令 | 作用 |
|---|---|
:set nu | 显示行号(强烈建议打开) |
:set nonu | 取消行号 |
:%s/old/new/g | 全文替换 old → new(g = 每行所有匹配) |
:s/old/new/g | 只替换当前行 |
:10,20s/old/new/g | 只替换 10~20 行 |
:%s/old/new/gc | 替换前逐个确认(c = confirm,保险) |
/关键词 | 向下查找;n 下一个,N 上一个 |
?关键词 | 向上查找 |
:noh | 取消搜索高亮 |
:g/^#/d | 删除所有以 # 开头的行(清理配置注释,实战超好用) |
:g/^$/d | 删除所有空行 |
:r file2 | 把另一个文件的内容读进来插到当前行后 |
:e! | 放弃修改,重新加载文件 |
7.5 实战:用 vi 改网卡配置(跟着做一遍就会了)
# 目标:把 /etc/hosts 里加一行 192.168.100.20 compute
vi /etc/hosts
# ① 打开后进入命令模式,按 G 跳到文件最后一行
# ② 按 o 在下面新开一行,自动进入编辑模式
# ③ 输入:192.168.100.20 compute
# ④ 按 Esc 回到命令模式(多余动作:连按几下 Esc 也没关系)
# ⑤ 输入 :wq 回车 → 保存并退出
# ⑥ 验证
cat /etc/hosts
7.6 卡住了怎么办(新手三大救助)
| 症状 | 原因 | 解法 |
|---|---|---|
| 打字乱七八糟,字母不对 | 还在命令模式,按键被当命令了 | 先按 Esc,再按 i 进编辑模式 |
底部一直显示 -- INSERT -- 退不出 | 在编辑模式,:wq 被当文字打进去了 | 先按 Esc,再输 :wq |
| 想放弃所有修改 | — | Esc 然后 :q! |
提示 E212: Can't open file for writing | 权限不足(普通用户改 /etc) | :w !sudo tee %,或退出后用 sudo 重新打开 |
提示 Swap file ... already exists | 上次没正常退出(或另一人在编辑) | 确认无人再用后按 E 直接编辑,或删掉 .swp 文件 |
速记口诀(背下来)“i 进 Esc 出,冒号 wq 是保存;错了按 u,不改 :q! 跑。”
检查点:能独立完成“打开文件 → 跳到末尾 → 新增一行 → 保存退出”全流程;会用 :%s///g 做全文替换;知道 :q! 是不保存退出。
第 8 章 权限、用户与提权
8.1 权限的含义
-rw-r--r-- root root
││││││││ │ └─ 所属组
│││││││└── 其他人(others) 权限
│││└───── 所属组(group) 权限
│└─────── 属主(user/owner) 权限
└──────── 类型:- 文件 d 目录 l 链接
| 权限 | 字母 | 数字 | 对文件的意义 | 对目录的意义 |
|---|---|---|---|---|
| 读 | r | 4 | 能看内容 | 能列出目录里的文件(ls) |
| 写 | w | 2 | 能修改内容 | 能在目录内新建/删除文件 |
| 执行 | x | 1 | 能作为程序运行 | 能进入目录(cd) |
| 无 | – | 0 | — | — |
| 数字 | 组合 | 常见用途 |
|---|---|---|
| 777 | rwxrwxrwx | 所有人可读写执行(危险,尽量别用) |
| 755 | rwxr-xr-x | 脚本、可执行文件、Web 目录 |
| 644 | rw-r–r– | 普通配置文件的标准权限 |
| 600 | rw——- | 私钥、密码文件(如 .ssh/id_rsa) |
| 700 | rwx—— | 只有自己能进的私有目录 |
8.2 chmod —— 改权限
# 数字法(推荐,简洁)
chmod 755 run.sh # 属主可读写执行,其他只读+执行
chmod 644 app.conf # 标准配置文件
chmod 600 id_rsa # 私钥必须 600,否则 SSH 拒绝使用
chmod -R 755 /var/www # -R 递归改整个目录
# 字母法
chmod +x run.sh # 给所有人加执行权限
chmod u+x run.sh # 只给属主加执行权限(u=user g=group o=others a=all)
chmod o-w file # 去掉其他人的写权限
SSH 私钥高频坑:把 id_rsa 权限设成 644 会导致 UNPROTECTED PRIVATE KEY FILE 报错,SSH 直接拒绝登录。必须 chmod 600 ~/.ssh/id_rsa。做免密互信时经常遇到。
8.3 chown —— 改属主与属组
chown zhangsan file.txt # 改属主
chown zhangsan:dev file.txt # 同时改属主和属组
chown -R apache:apache /var/www/ # 递归改整个网站目录
chgrp dev file.txt # 只改属组
8.4 用户与用户组
useradd zhangsan # 建用户(家目录 /home/zhangsan)
useradd -m -s /bin/bash lisi # -m 建家目录,-s 指定登录 shell
passwd zhangsan # 给用户设密码(输入两次,不回显)
usermod -aG wheel zhangsan # 把用户加入 wheel 组(获得 sudo 权限)
userdel -r zhangsan # 删用户并删除其家目录(-r)
id zhangsan # 查看用户的 uid/gid/所属组
whoami # 我现在是谁
groups # 当前用户属于哪些组
who / w # 谁在线
| 文件 | 内容 |
|---|---|
/etc/passwd | 用户基本信息(用户名:密码占位:UID:GID:描述:家目录:shell) |
/etc/shadow | 加密后的密码(只有 root 能读) |
/etc/group | 组信息 |
/etc/sudoers | sudo 授权配置(必须用 visudo 编辑,别直接 vi) |
8.5 su 与 sudo —— 提权
su - # 切换到 root(- 表示同时加载 root 的环境变量,建议带上)
su - zhangsan # 切换到普通用户
exit # 退回原用户
sudo vi /etc/hosts # 以 root 权限执行单条命令
sudo -i # 直接进入 root 环境
sudo -l # 查看我能 sudo 哪些命令
| 对比 | su | sudo |
|---|---|---|
| 要谁的密码 | root 的密码 | 自己的密码 |
| 切换方式 | 切换成另一个用户(持续) | 单条命令临时提权 |
| 审计 | 不记录 | 有日志(/var/log/secure) |
| 推荐 | 服务器日常运维 | 生产环境更推荐 |
检查点:知道 755/644/600 分别用在什么地方;会用 chmod +x 让脚本可执行;知道 su - 和 su 的差别。
第 9 章 系统、网络、软件、打包命令
9.1 systemctl —— 服务管理(CentOS 7 的核心)
systemctl start httpd # 启动
systemctl stop httpd # 停止
systemctl restart httpd # 重启
systemctl reload httpd # 重载配置(不中断连接,配置支持时优先用)
systemctl status httpd # 查看状态(重点看 active(running) 和最后几行日志)
systemctl enable httpd # 设为开机自启
systemctl disable httpd # 取消开机自启
systemctl is-enabled httpd # 查询是否自启
systemctl list-units --type=service --state=running # 列出正在运行的服务
systemctl list-unit-files | grep openstack # 找 OpenStack 相关服务
systemctl daemon-reload # 改了 unit 文件后刷新
排错顺序:systemctl status xxx → 看 Active 是 active 还是 failed → 看下面日志尾巴 → 不够就去 journalctl -u xxx -n 50 或 /var/log/xxx。
9.2 关机、重启、查看系统信息
shutdown -h now # 立刻关机
shutdown -r now # 立刻重启
shutdown -r +10 # 10 分钟后重启
shutdown -c # 取消已计划的关机
reboot # 重启(等价)
poweroff # 关机(等价)
init 0 / init 6 # 老的写法:0=关机 6=重启
hostnamectl # 查看主机名和系统信息
hostnamectl set-hostname controller # 永久修改主机名(改完要 exec bash 或重登录)
uptime # 开机多久了 + 负载
uname -r # 内核版本
cat /etc/centos-release # 系统版本
date # 当前时间
date -s "2026-10-06 22:00:00" # 改时间(比赛环境时区/时间要一致)
timedatectl # 时区与时间状态
timedatectl set-timezone Asia/Shanghai # 设时区
9.3 磁盘与容量
df -h # 各分区使用率(人眼友好,-h)
df -h / # 只看根分区
du -sh /var/log # 统计目录总大小
du -sh /* 2>/dev/null | sort -h # 找出谁最占地方
fdisk -l # 列出所有磁盘和分区
lsblk # 树形显示磁盘和分区(更直观)
mount /dev/sdb1 /mnt # 挂载
umount /mnt # 卸载
blkid # 查看分区 UUID(改 fstab 要用)
free -h # 内存使用(-h 人眼友好)
free -m # 以 MB 显示
9.4 进程与资源
top # 实时资源监控(q 退出,P 按 CPU 排序,M 按内存排序)
ps -ef # 列出所有进程(经典写法)
ps aux # 同上,显示更全(含 CPU/内存占比)
ps -ef | grep nginx # 过滤出 nginx 进程
pgrep -l nginx # 更简洁的进程查找
kill 12345 # 结束 PID 为 12345 的进程(温和)
kill -9 12345 # 强制杀死(进程不响应时用,慎用)
pkill -f nginx # 按名字/命令行匹配批量杀
killall nginx # 按进程名杀
nohup ./run.sh & # 后台运行且不随终端关闭而退出
jobs # 看当前终端的后台任务
Ctrl+Z 然后 bg # 把前台任务挂起到后台
9.5 网络排查
ip addr # 查看所有网卡和 IP(CentOS 7 首选,替代 ifconfig)
ip a # 同上(简写)
ip route # 查看路由表(看默认网关)
ip link set ens33 up # 启用网卡
ss -tlnp # 查看正在监听的 TCP 端口 + 对应进程(替代 netstat)
ss -tlnp | grep 8080 # 某端口被谁占用
ping -c 4 192.168.100.20 # 测试连通性,-c 指定次数
ping -c 2 www.baidu.com # 测试外网 + DNS
traceroute 8.8.8.8 # 路由追踪
nslookup baidu.com # DNS 解析测试
cat /etc/resolv.conf # 看 DNS 服务器
systemctl restart network # 重启网络服务(CentOS 7)
nmcli connection show # 查看网络连接
nmtui # 图形化网络配置界面(新手友好)
curl -I http://192.168.100.10 # 测试 HTTP 服务
curl -O http://x/y.rpm # 下载文件
wget http://x/y.rpm # 下载文件(更常用)
网络排错四步:① ip a 有没有 IP → ② ping 网关 通不通 → ③ ping 8.8.8.8 出不出得去 → ④ ping 域名 解析正不正常。四步定位到具体环节。
9.6 软件包管理(yum / rpm)
| 操作 | yum(推荐) | rpm(底层) |
|---|---|---|
| 安装 | yum install -y httpd | rpm -ivh x.rpm |
| 卸载 | yum remove httpd | rpm -e httpd |
| 查是否安装 | yum list installed | grep httpd | rpm -qa | grep httpd |
| 查包内容 | — | rpm -ql httpd |
| 查命令属于谁 | yum provides */ls | rpm -qf $(which ls) |
| 更新全部 | yum update -y | — |
| 清缓存 | yum clean all && yum makecache | — |
本地 yum 源(比赛离线环境必会)
mkdir -p /opt/repo
mount -o loop /dev/cdrom /mnt # 挂载 ISO
cp -r /mnt/* /opt/repo/ # 复制到本地
vi /etc/yum.repos.d/local.repo # 新建源文件
# 内容:
# [local]
# name=Local
# baseurl=file:///opt/repo
# enabled=1
# gpgcheck=0
yum clean all && yum makecache # 刷新
9.7 压缩与打包(tar)
| 命令 | 作用 | 解释 |
|---|---|---|
tar -czvf bak.tar.gz /etc/ | 打包+压缩 | c=创建 z=gzip压缩 v=显示过程 f=文件名 |
tar -xzvf bak.tar.gz | 解压 | x=解压(默认解到当前目录) |
tar -xzvf bak.tar.gz -C /opt/ | 解压到指定目录 | -C 指定目标 |
tar -tzvf bak.tar.gz | 只查看内容不解压 | t=list |
tar -czvf bak.tar.gz --exclude=*.log /app/ | 排除某些文件 | 备份时很实用 |
zip -r a.zip dir/ | 打成 zip(要传 Windows 用) | 需装 zip |
unzip a.zip | 解压 zip | 需装 unzip |
口诀:打包压缩是czvf(“创—压—看—名”),解压是xzvf(“解—压—看—名”)。记住这两条能覆盖 95% 的场景。
9.8 scp / rsync —— 跨机器传文件
# 本机 → 远程
scp file.txt root@192.168.100.20:/root/
scp -r /data/ root@192.168.100.20:/opt/ # -r 传目录
# 远程 → 本机
scp root@192.168.100.20:/root/a.txt /tmp/
# 两台远程机器之间(在本地执行,数据在远端直传)
scp -3 root@a:/x.txt root@b:/y.txt
# rsync:增量同步,传大量文件更快
rsync -avz --progress /data/ root@192.168.100.20:/data/
9.9 SSH 免密互信(比赛/集群必备)
# ① 生成密钥对(一路回车,不要设密码短语)
ssh-keygen -t rsa
# ② 把公钥拷到对端(会要求输一次对方密码)
ssh-copy-id root@192.168.100.20
ssh-copy-id root@192.168.100.10
# ③ 验证:应该直接登录,不再要密码
ssh root@192.168.100.20 "hostname"
# 私钥权限必须是 600,否则报错
chmod 600 ~/.ssh/id_rsa
9.10 其他高频小工具
history # 查看历史命令
history | grep yum # 找以前敲过的 yum 命令
!123 # 重新执行历史里第 123 条命令
!! # 重复执行上一条命令
!yum # 重复执行最近一条以 yum 开头的命令
clear # 清屏(或 Ctrl+L)
echo "hello" # 输出
echo $PATH # 打印环境变量
env # 列出所有环境变量
export VAR=value # 设置环境变量(当前会话有效)
alias ll='ls -l' # 设别名
source /root/openrc.sh # 加载脚本(在当前 shell 生效,不新开进程)
seq 1 5 # 输出 1 到 5
basename /a/b/c.txt # 取文件名 → c.txt
dirname /a/b/c.txt # 取目录 → /a/b
检查点:会用 systemctl status 查服务;会用 ip a + ping 排网络;能默写 tar 打包和解压命令;会做两台机器的免密互信。
附录 分类命令总表 + 学习路线
A.1 命令速查总表
| 类别 | 命令 | 一句话说明 |
|---|---|---|
| 目录操作 | pwd | 显示当前路径 |
cd 路径 | 切换目录(cd .. 上一级、cd - 回去、cd ~ 回家) | |
ls -la | 列出全部文件含隐藏,长格式 | |
mkdir -p a/b/c | 递归创建目录 | |
rmdir 空目录 | 删除空目录(非空要用 rm -r) | |
tree | 树形展示目录(需安装) | |
| 文件操作 | touch f | 新建空文件 / 更新时间戳 |
cp -r a b | 复制(目录必须加 -r) | |
mv a /tmp/ | 剪切/移动;同目录内写两个名字就是重命名 | |
rm -rf 目录 | 删除(不可恢复,慎用) | |
ln -s 源 链接名 | 创建软链接(快捷方式) | |
| 查看内容 | cat -n f | 全量输出+行号(小文件) |
less f | 分页浏览(大文件),/ 搜索,q 退出 | |
head -20 f | 看前 20 行 | |
tail -f f | 实时跟踪日志新增内容 | |
grep -in 词 f | 按内容搜索(-n 行号 -i 忽略大小写) | |
find / -name "*.conf" | 按文件名/属性查找 | |
| 权限用户 | chmod 755 f | 数字法改权限 |
chmod +x f | 加可执行权限 | |
chown u:g f | 改属主与属组 | |
su - / sudo cmd | 切换 root / 单条命令提权 | |
| 系统服务 | systemctl start/stop/restart/status 服务 | 服务启停与状态 |
systemctl enable 服务 | 设为开机自启 | |
ps -ef | grep x | 查进程 | |
kill -9 PID | 强制结束进程 | |
top | 实时资源监控 | |
reboot / shutdown -h now | 重启 / 关机 | |
| 磁盘网络 | df -h | 分区使用率 |
du -sh 目录 | 目录总大小 | |
lsblk / fdisk -l | 查看磁盘分区 | |
ip a / ip route | 查看 IP / 路由 | |
ss -tlnp | 查看监听端口 | |
ping -c 4 IP | 连通性测试 | |
| 软件打包 | yum install -y 包 | 安装软件 |
rpm -qa | grep 包 | 查已安装的包 | |
tar -czvf a.tar.gz dir/ | 打包压缩 | |
tar -xzvf a.tar.gz -C /opt/ | 解压到指定目录 |
A.2 三条“必背”组合拳
# ① 服务起不来怎么查
systemctl status xxx # 先看状态
journalctl -u xxx -n 50 # 再看这个服务的日志
tail -f /var/log/xxx/xxx.log # 再看应用日志
# ② 网络不通怎么查
ip a # 有没有 IP
ping 网关 # 通不通
ping 8.8.8.8 # 出不出得去
cat /etc/resolv.conf # DNS 对不对
# ③ 磁盘满了怎么查
df -h # 哪个分区满
du -sh /* | sort -h # 谁最占地方
find /var/log -size +100M # 找大日志文件
A.3 学习路线(建议按顺序练)
| 阶段 | 练什么 | 验收标准 |
|---|---|---|
| 第 1 天 | cd / ls / pwd / mkdir / touch | 能在目录树里自由走动,能建目录建文件 |
| 第 2 天 | cp / mv / rm / cat / less | 能完成“复制配置→改名→改内容→查看”闭环 |
| 第 3 天 | vi 编辑器(重点练) | 能不看笔记改完一个配置文件并保存 |
| 第 4 天 | chmod / chown / su / sudo | 能解释 755/644/600 的区别并正确使用 |
| 第 5 天 | systemctl / ip / df / ps / kill | 能独立排查“服务没起来”“网络不通”“磁盘满” |
| 第 6 天 | yum / tar / scp / ssh 免密 | 能搭好两台机器的免密互信 |
| 进阶 | 《OpenStack 运维操作手册》 | 能用命令行创建并管理云主机 |
配套材料
- 《VMware 虚拟机安装 CentOS 7 完全图解教程》——装系统、配网络、分区
- 《OpenStack 私有云安装教程(chinaskills v2.0.3)》——搭 OpenStack 集群
- 《OpenStack 运维操作手册》——服务启停、命令行建云主机、原理与优化
CentOS 7 常用命令速查手册 · 共 9 章 + 附录,覆盖 120+ 命令
命令均基于 CentOS 7.9 验证;# 开头命令需 root 权限或用 sudo 执行。

