1.cd_切换目录
cd /root
cd ./root
cd ../data
2.ls_查看文件目录
| 参数 | 说明 |
|---|
| -l | 列出长数据穿,包换文件属性权限 |
| -a | 列出全部文件,(包含隐藏文件) |
| -d | 仅列出目录本身(没屌用) |
| -h | 将文件容量以可读方式显示 |
| -R | 递归方式显示 |
相关命令: tree
以树形结构显示目录结构
tree -N
tree -N -L 2
tree /home --charset=gbk -L 2
tree -aC -L 2
3.grep_匹配
grep [选项] "模式" 文件名
| 类别 | 选项 / 语法 | 说明 | 示例 |
|---|
| 基本语法 | grep [选项] '模式' 文件... | 在文件中搜索匹配“模式”的行 | grep 'error' log.txt |
| `command | grep ‘pattern’` | 结合管道过滤输出 |
| 核心选项 | -i | 忽略大小写(ignore case) | grep -i 'ERROR' log.txt |
| -v | 反向匹配(invert match),输出不匹配的行 | `grep -v '# |
| -r 或 -R | 递归搜索目录中所有文件 | grep -r 'function' /src/ |
| -l | 只输出包含匹配项的文件名 | grep -rl 'TODO' /code/ |
| -L | 只输出不包含匹配项的文件名 | grep -L 'completed' *.log |
| -n | 显示匹配行的行号 | grep -n 'fail' log.txt |
| -c | 统计匹配行的数量 | grep -c 'success' log.txt |
| -o | 只输出匹配到的部分(而非整行) | grep -o '[0-9]\+' file(提取数字) |
| -w | 完整单词匹配(word-regexp) | grep -w 'root' file(不匹配 rooted) |
| -E | 使用扩展正则表达式(ERE),等价于 egrep | `grep -E 'error |
| -F | 将模式视为固定字符串(不解析正则),等价于 fgrep | grep -F '.*' file(搜索字面量 .*) |
| -A N | 输出匹配行及后 N 行(After) | grep -A 2 'error' log.txt |
| -B N | 输出匹配行及前 N 行(Before) | grep -B 1 'crash' log.txt |
| -C N | 输出匹配行及前后 N 行(Context)✅ 调试常用 | grep -C 3 'exception' log.txt |
| --color=auto | 高亮显示匹配文本(现代系统默认) | grep --color=auto 'port' config |
| -q | 静默模式(quiet),不输出,仅通过退出码判断是否匹配 | grep -q 'running' status && echo "OK" |
| 正则表达式 | . | 匹配任意单个字符 | grep 'a.c' file(匹配 abc, a2c) |
| ^ | 匹配行首 | grep '^#' file(注释行) |
| $ | 匹配行尾 | grep ';$' file(以分号结尾) |
| * | 前一个字符 0 次或多次 | grep 'go*d' file(匹配 gd, god, good) |
| [abc] | 匹配字符集合中的任意一个 | grep '[aeiou]' file(元音字母) |
| [^abc] | 匹配不在集合中的字符 | grep '[^0-9]' file(非数字) |
| \{m,n\} | 重复 m 到 n 次 | grep 'a\{2,4\}' file(匹配 aa, aaa, aaaa) |
| $ $ | 分组 | grep '$$user$$' file |
| \1, \2 | 引用分组 | `echo “hello” |
| \<\> | 单词边界 | grep '\<root\>' file(精确匹配单词 root) |
| 高频使用场景 | 搜索关键字 | grep 'error' *.log | 查找错误日志 |
| 忽略大小写搜索 | grep -i 'warning' log.txt | |
| 排除注释和空行 | `grep -v '^# | ^$’ config.conf` |
| 递归查找代码 | grep -rn 'function_name' /path/to/src | 定位函数定义 |
| 提取特定信息 | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' log.txt | 提取 IP 地址 |
| 统计出现次数 | grep -c 'success' log.txt | 日志分析 |
| 查看上下文 | grep -C 5 'exception' app.log | 调试程序异常 |
| 脚本中条件判断 | grep -q 'active' status.txt && do_something | 自动化脚本 |
| 搜索固定字符串 | grep -F 'error[1]' file | 搜索含特殊字符的字面量 |
大小忽略用-i 方向筛选-v 行号-n 统计 -c 正则-E 或者egrep
4.cat_查看文件内容
| 参数 | 说明 | 示例 |
|---|
| 无参数 | 显示文件内容 | cat file.txt |
-n | 显示行号(包括空行) | cat -n file.txt |
-b | 显示非空行的行号 | cat -b file.txt |
-E 或 --show-ends | 在每行结尾显示 $ 符号 | cat -E file.txt |
-T 或 --show-tabs | 将制表符 Tab 显示为 ^I | cat -T script.sh |
-v 或 --show-nonprinting | 显示不可见字符(除 Tab 和换行) | cat -v binary_file |
-A 或 --show-all | 等价于 -vET,显示所有隐藏字符 | cat -A file.txt |
-s | 压缩连续空行为单个空行 | cat -s log.txt |
相关命令
tail / head 从头看,从尾看
默认查看5行 -n 可指定查看行数
5.find_查找文件
| 分类 | 参数/表达式 | 说明 | 示例 |
|---|
| 路径范围 | . 或 /path/to/dir | 指定搜索起始目录(可多个) | find /home -name "abc" |
| 按名称查找 | -name "filename" | 精确匹配文件名(区分大小写) | find . -name "*.log" |
| -iname "filename" | 不区分大小写的文件名匹配 | find . -iname "readme*" |
| 按类型查找 | -type f | 普通文件 | find . -type f -name "*.txt" |
| -type d | 目录 | find / -type d -name "bin" |
| -type l | 符号链接(软链接) | find . -type l |
| 按大小查找 | -size +10M | 大于 10MB | find . -size +100M |
| -size -1k | 小于 1KB | find /var -size -50k |
| -size 1G | 正好 1GB(极少用) | find . -size 1G |
| 按时间查找 (天) | -mtime -7 | 7 天内修改内容 | find . -mtime +30 → 超过 30 天未改 |
| -atime -1 | 1 天内访问过 | find . -atime 0 → 今天访问 |
| -ctime +5 | 5 天前变更属性(权限/所有者) | find . -ctime -1 → 最近变更 |
| 按分钟查找 | -mmin -60 | 60 分钟内修改内容 | find /tmp -amin -5 → 5 分钟内访问 |
| 按权限查找 | -perm 644 | 精确权限匹配 | find . -perm 755 |
| -perm -u=rw | 用户有读写权限(符号模式) | find . -perm -go=w |
| 按所有者查找 | -user alice | 属于用户 alice 的文件 | find /home -user bob |
| -group devs | 属于组 devs 的文件 | find . -group staff |
| 逻辑操作符 | -not 或 ! | 取反 | find . -name "*.tmp" -not -user root |
| -and(默认) | 且(可省略) | find . -type f -name "*.conf" |
| -or | 或 | find . -name "*.log" -o -name "*.out" |
| $ $ | 分组(需转义) | find . $ -name "*.c" -o -name "*.h" $ |
| 常用动作 | -print | 输出路径(默认) | find . -name "a*" -print |
| -ls | 以 ls -l 格式显示 | find . -size +10M -ls |
| -delete | 删除匹配文件(⚠️ 危险!) | find /tmp -name "*.tmp" -mtime +7 -delete |
| -exec cmd {} \; | 对每个文件执行命令 | find . -name "*.bak" -exec rm {} \; |
| -exec cmd {} + | 批量执行(高效) | find . -type f -exec chmod 644 {} + |
| -ok cmd {} \; | 执行前提示确认 | find . -name "*.old" -ok rm {} \; |
| 其他实用选项 | -empty | 查找空文件或空目录 | find . -type f -empty |
| -maxdepth 2 | 限制最大目录深度 | find . -maxdepth 1 -name "*.sh" |
| -prune | 排除某个目录(常配合 -path 使用) | find . -path "./node_modules" -prune -o -name "*.js" -print |
高频组合速查
| 需求 | 命令 |
|---|
| 查找并删除 7 天前的临时文件 | find /tmp -name "*.tmp" -mtime +7 -delete |
| 找出大于 100MB 的文件 | find / -size +100M -ls 2>/dev/null |
查找 .sh 文件并添加执行权限 | find . -name "*.sh" -type f -exec chmod +x {} + |
| 查找某用户最近修改的文件(3天内) | find /home -user alice -mtime -3 -ls |
| 排除特定目录搜索 | find . -path "*/node_modules" -prune -o -name "*.py" -print |
6.cp_复制
cp [选项] 源文件/目录 目标文件/目录
| 参数 | 含义 | 使用场景示例 |
|---|
| 无参数 | 复制文件(不能复制目录) | cp file.txt /backup/ |
-r 或 -R (--recursive) | 递归复制目录及其所有内容 | cp -r myfolder/ backup/ |
-i (--interactive) | 覆盖前提示确认 | cp -i file.txt dest/ → 防止误覆盖 |
-f (--force) | 强制覆盖目标文件(忽略只读权限等) | cp -f config.new config |
-u (--update) | 仅当源文件比目标新时才复制(增量备份) | cp -u *.txt /backup/ |
-v (--verbose) | 显示详细操作过程 | cp -v file.log /var/log/ |
-l | 创建硬链接(而非复制数据) | cp -l largefile.dat link.dat |
-s | 创建符号链接(软链接) | cp -s /path/to/original link |
-a (--archive) | 归档模式:保留权限、时间戳、符号链接等 等价于 -dR --preserve=all | cp -a /etc /backup_etc/ |
-d | 保留符号链接(不复制链接指向的文件) | cp -d symlink.txt dest/ |
--preserve=[属性] | 指定保留的属性: mode,ownership,timestamps,links,all | cp --preserve=mode,timestamps file.txt new.txt |
--no-preserve=[属性] | 明确不保留某些属性 | cp --no-preserve=ownership file.txt /tmp/ |
--remove-destination | 覆盖前先删除目标(避免权限问题) | cp --remove-destination old.conf new.conf |
常用组合与实用场景
| 需求 | 命令示例 |
|---|
| 复制文件并重命名 | cp file.txt file_backup.txt |
| 复制多个文件到目录 | cp file1.txt file2.txt /backup/ |
| 复制整个目录(推荐归档模式) | cp -a /home/user /backup/ |
| 复制目录(保留结构) | cp -r /src/project /dst/ |
| 交互式复制(防误覆盖) | cp -ri /data/* /backup/ |
| 只复制更新的文件(同步) | cp -ru /source/ /destination/ |
| 显示复制过程 | cp -v *.log /var/log/ |
| 创建软链接(快捷方式) | cp -s /original/path linkname |
| 创建硬链接(节省空间) | cp -l hugefile.db backup.db |
| 强制复制并覆盖 | cp -f config.new /etc/app.conf |
7.mv_移动
mv [选项] 源文件/目录 目标文件/目录
| 参数 | 含义 | 使用场景示例 |
|---|
| 无参数 | 移动或重命名文件/目录(默认行为) | mv file.txt /backup/mv oldname.txt newname.txt |
-i (--interactive) | 覆盖前提示确认 | mv -i file.txt dir/ → 防止误覆盖 |
-f (--force) | 强制移动,不提示(覆盖已有文件) | mv -f temp.log /var/log/ |
-u (--update) | 仅当源文件比目标新时才移动(增量更新) | mv -u *.log /archive/ |
-v (--verbose) | 显示详细操作过程 | mv -v *.tmp /tmp/ |
-n (--no-clobber) | 不覆盖已存在的文件(比 -i 更严格) | mv -n backup.conf config.conf |
常用操作场景与示例
| 需求 | 命令示例 |
|---|
| 重命名单个文件 | mv old.txt new.txt |
| 重命名目录 | mv myproject/ project_v2/ |
| 移动文件到目录 | mv file.log /var/log/ |
| 批量移动文件 | mv *.txt /docs/ |
| 交互式移动(安全) | mv -i *.conf /backup/ → 覆盖前会问 overwrite? |
| 强制移动(脚本中常用) | mv -f temp/* /tmp/ |
| 只移动更新的文件 | mv -u source/*.log dest/ |
| 显示移动过程 | mv -v data_*.csv /archive/ |
| 避免覆盖任何文件 | mv -n important.txt existing.txt → 若目标存在则跳过 |
8.rm_删除
| 参数 | 含义 | 使用示例 |
|---|
| 无参数 | 删除一个或多个普通文件 | rm file.txt |
-f (--force) | 强制删除,不提示;忽略不存在的文件 | rm -f temp.log |
-i | 删除前逐一确认(交互式) | rm -i *.tmp → 安全操作 |
-I | 删除超过 3 个文件或递归删除时,仅提示一次 | rm -I *.log → 平衡安全与效率 |
-r 或 -R (--recursive) | 递归删除目录及其内容(删除目录必备) | rm -r old_project/ |
-v (--verbose) | 显示详细删除过程 | rm -v *.bak |
--preserve-root | 不递归删除 /(根目录),默认启用 | rm -r / → 被阻止(安全机制) |
--no-preserve-root | 禁用根目录保护(极度危险!) | rm -r --no-preserve-root / → ❌ 切勿执行! |
9.ln_文件链接
ln [选项] 源文件 连接名
ln -s [选项] 源文件/目录 连接名 .
| 参数 | 含义 | 使用示例 |
|---|
| 无参数 | 创建硬链接(hard link) | ln file.txt hard_link |
-s (--symbolic) | 创建符号链接(symlink / 软链接) | ln -s /var/log/app.log link.log |
-f (--force) | 强制删除已存在的目标链接 | ln -sf new_target link |
-i (--interactive) | 覆盖前提示确认 | ln -si old_file link → 问是否替换 |
-v (--verbose) | 显示详细操作过程 | ln -sv source.txt link.txt |
-n (--no-dereference) | 如果目标是软链接,不跟随它(直接操作链接本身) | ln -sn existing_symlink new_link |
10.chmod_赋权
chmod [选项] 模式 文件或目录
✅ chmod 用于改变文件或目录的读(r)、写(w)、执行(x)权限。
| 类别 | 内容 | 说明/示例 |
|---|
| 基本语法 | chmod [选项] 模式 文件/目录 | 修改文件或目录的访问权限 |
| 三类用户 | u | 所有者(user) |
| g | 所属组(group) |
| o | 其他用户(others) |
| a | 所有人(all = ugo) |
| 三种权限 | r (Read) | 读:查看文件 / 列目录(数值:4) |
| w (Write) | 写:修改文件 / 增删目录文件(数值:2) |
| x (Execute) | 执行:运行文件 / 进入目录(数值:1) |
| - | 无权限(数值:0) |
| 符号模式 (字母表示) | + | 增加权限 → chmod u+x file.sh |
| - | 移除权限 → chmod go-w config.txt |
| = | 精确设置 → chmod a=r file.txt |
| 数字模式 (八进制) | 权限组合 | 数值对应: r=4, w=2, x=1, -=0 |
| 示例 | 755 = rwxr-xr-x644 = rw-r--r--700 = rwx------600 = rw------- |
| 常用权限 | 普通文件 | 644(所有者可读写,其他只读) |
| 可执行脚本 | 755(所有者可读写执行,其他可读执行) |
| 私有文件 | 600 或 700(仅所有者访问) |
| 目录 | 通常设为 755(可进入和浏览) |
| 常用选项 | -R | 递归修改子目录和文件 → chmod -R 755 dir/ |
| -v | 显示详细过程 → chmod -v 644 *.log |
| --reference=文件 | 参考另一文件权限 → chmod --reference=a.txt b.txt |
| 典型示例 | 使脚本可执行 | chmod +x script.sh 或 chmod 755 script.sh |
| 禁止他人访问 | chmod 600 secret.txt |
| 递归设权限 | chmod -R 755 /var/www/html/ |
| 增加执行权 | chmod u+x,g+x file.sh |
| 移除写权限 | chmod o-w file.conf |
| 安全建议 | ❌ 避免 777 | chmod 777 file 存在严重安全风险! |
| ⚠️ 目录权限 | 无 x 权限则无法 cd 进入 |
| 敏感文件 | .ssh, 密钥等应设为 600 |
11.chown_修改属主属组
| 类别 | 内容 | 说明 / 示例 |
|---|
| 基本语法 | chown [选项] 所有者[:组] 文件/目录 | 修改文件的拥有者和/或所属组 |
| 主要功能 | 更改所有者 | chown alice file.txt |
| 更改所属组 | chown :developers file.txt 或 chown .developers file.txt |
| 同时更改所有者和组 | chown alice:developers file.txt |
| 常用选项 | -R | 递归修改目录及子内容 → chown -R bob:data /data/ |
| -v | 显示详细操作过程 → chown -v alice file.txt |
| -c | 仅当更改时显示信息 |
| --reference=文件 | 参考另一文件的所有者和组 → chown --reference=a.txt b.txt |
| 用户表示 | 用户名 | alice, bob, www-data 等 |
| UID | 数字用户 ID(如 1001)→ chown 1001 file |
| 组表示 | 组名 | staff, developers, sudo 等 |
| GID | 数字组 ID(如 1002)→ chown :1002 file |
| 典型示例 | 仅改所有者 | chown tom document.pdf |
| 仅改所属组 | chown :admins config.conf |
| 同时改所有者和组 | chown nginx:www-data index.html |
| 递归修改整个目录 | chown -R www-data:www-data /var/www/html/ |
| 显示操作详情 | chown -vR user:group /backup/ |
| 使用参考文件 | chown --reference=good.log error.log |
| 注意事项 | ⚠️ 需要权限 | 普通用户不能随意更改文件所有者;只有 root 或文件所有者可更改所有者。 |
| 组变更 | 普通用户只能将文件组改为自己所属的组。 |
| 目录与文件 | chown 对目录本身有效,加 -R 才影响其内容。 |
| . vs : | 旧系统用 . 分隔(user.group),现代系统推荐 :(user:group),两者通常都支持。 |
12.rz/sz_文件上传下载
13.crul
| 类别 | 参数/选项 | 说明 | 示例 |
|---|
| 基本语法 | curl [选项] URL | 从 URL 获取数据或向其传输数据 | curl https://example.com |
| 输出控制 | -O | 保存文件,使用远程文件名 | curl -O https://site.com/file.zip |
| -o <文件名> | 保存为指定名称 | curl -o data.json https://api/data |
| -s | 静默模式(不显示进度条和错误) | curl -s https://health |
| -S | 与 -s 配合,出错时仍显示错误信息 | curl -sS https://api |
| -v | 显示详细请求/响应信息(调试用) | curl -v https://api.com |
| -I | 仅获取响应头(HEAD 请求) | curl -I https://example.com |
| -X <METHOD> | 指定请求方法(GET, POST, PUT, DELETE 等) | curl -X POST https://api/login |
| 数据提交 | -d "key=value" | 发送表单数据(POST,Content-Type: application/x-www-form-urlencoded) | curl -d "name=Bob&age=30" https://api/user |
| --data-binary @file.json | 发送原始数据(如 JSON 文件) | curl -d @payload.json https://api/webhook |
| -H "Header: Value" | 添加自定义请求头 | curl -H "Content-Type: application/json" -H "Authorization: Bearer token" https://api/data |
| -F "key=value" | 发送表单数据(multipart/form-data,用于上传文件) | curl -F "file=@report.pdf" https://upload.com |
| 认证方式 | -u user:pass | HTTP Basic 认证 | curl -u admin:12345 https://private.com |
| --digest -u user:pass | Digest 认证 | curl --digest -u user:pass https://digest.com |
| -H "Authorization: Bearer token" | Token 认证(常用) | curl -H "Authorization: Bearer xyz" https://api/user |
| SSL/TLS | --insecure 或 -k | 忽略 SSL 证书错误(测试用,⚠️ 不安全) | curl -k https://self-signed.com |
| --cert cert.pem | 指定客户端证书(双向 TLS) | curl --cert client.crt https://secure.com |
| 代理设置 | -x http://proxy:port | 使用 HTTP 代理 | curl -x http://10.0.0.1:8080 https://example.com |
| --socks5 127.0.0.1:1080 | 使用 SOCKS5 代理 | curl --socks5 127.0.0.1:1080 https://google.com |
| 重定向 | -L | 跟随重定向(Location 头) | curl -L http://example.com → 跳转到 HTTPS |
| -f | 静默失败(服务器错误时不输出) | curl -f https://api |
| 其他常用 | -A "User-Agent" | 自定义 User-Agent | curl -A "Mozilla/5.0" https://site.com |
| -c cookie.txt | 保存 Cookie 到文件 | curl -c cookies.txt https://login.com |
| -b cookie.txt | 发送 Cookie(从文件) | curl -b cookies.txt https://private.com |
| --compressed | 支持压缩响应(gzip, deflate) | curl --compressed https://large.com |
14.wget
| 类别 | 参数/选项 | 说明 | 示例 |
|---|
| 基本语法 | wget [选项] URL | 从网络下载文件 | wget https://example.com/file.zip |
| 输出控制 | -O <文件名> | 下载并保存为指定名称(覆盖) | wget -O data.txt https://api/data |
| -o logfile.txt | 将日志输出到文件(非下载内容) | wget -o download.log https://file.com |
| -q | 静默模式(不输出信息) | wget -q https://img.jpg |
| -v | 显示详细信息(默认) | wget -v http://site.com/file |
| 文件保存 | -O | 覆盖保存为指定文件(⚠️ 仅用于单文件) | wget -O index.html https://example.com |
| -O - | 输出到标准输出(可用于管道) | `wget -O - https://data.json |
| 断点续传 | -c | 断点续传(恢复未完成的下载) | wget -c https://large.iso |
| 递归下载 | -r | 递归下载(有限深度) | wget -r http://site.com/docs/ |
| -l depth | 设置递归最大深度 | wget -r -l 2 http://site.com/ |
| -p | 下载页面所需资源(如图片、CSS) | wget -r -p http://site.com/page.html |
| -k | 将下载的链接转换为本地可访问格式 | wget -r -k http://site.com/(配合 -p) |
| -np | 不向上递归(不下载父目录) | wget -r -np http://site.com/sub/ |
| -nd | 不创建目录结构,所有文件保存在当前目录 | wget -r -nd http://site.com/files/ |
| 后台与重试 | -b | 后台运行下载 | wget -b https://bigfile.zip |
| -t N | 设置重试次数(0 表示无限) | wget -t 3 https://unstable.com/file |
| --timeout=秒 | 设置超时时间 | wget --timeout=30 https://slow.com |
| 身份认证 | --user=用户名 --password=密码 | FTP/HTTP Basic 认证 | wget --user=dev --password=123 ftp://files.com/data.tar |
| --http-user= --http-password= | 专门用于 HTTP 认证 | wget --http-user=admin --http-password=pass https://secure.com |
| 代理设置 | --proxy=on/off | 启用/禁用代理 | wget --proxy=off https://direct.com |
| --proxy-user= --proxy-password= | 代理认证 | wget --proxy-user=puser --proxy-password=ppass http://site.com |
| 其他常用 | -U "User-Agent" | 自定义 User-Agent | wget -U "Mozilla/5.0" https://site.com |
| --spider | 检查链接是否存在(不下载) | wget --spider http://site.com/file.zip → 返回状态码 |
| --no-check-certificate | 忽略 SSL 证书错误(⚠️ 不安全) | wget --no-check-certificate https://self-signed.com |
| -c | 断点续传(继续未完成的下载) | wget -c https://ubuntu.iso |
15.ps
| 类别 | 参数/选项 | 说明 | 示例 |
|---|
| 基本语法 | ps [选项] | 显示当前终端或系统进程 | ps |
| 常用风格 | ps aux | BSD 风格:显示所有进程(最常用) | ps aux |
| ps -ef | System V 风格:显示完整信息 | ps -ef |
| ps -efH | 以树形结构显示进程层次 | ps -efH |
| ps auxf | BSD 风格 + 树形显示 | ps auxf |
| 核心选项 | a | 显示所有用户的进程(关联终端) | ps a |
| u | 显示详细信息(用户、CPU、内存等) | ps u |
| x | 显示无控制终端的进程(如守护进程) | ps x |
| -e | 显示所有进程(相当于 A) | ps -e |
| -f | 显示完整格式(UID, PID, PPID, CMD 等) | ps -f |
| -l | 显示长格式(含优先级、状态等) | ps -l |
| -C <命令名> | 按命令名过滤进程 | ps -C nginx |
| --ppid <PID> | 显示指定父进程 ID 的子进程 | ps --ppid 1234 |
| -p <PID> | 显示指定 PID 的进程 | ps -p 1234 |
| -q <PID> | 快速查询多个 PID(不排序) | ps -q 1234,5678 |
16.top
| 类别 | 操作 / 选项 | 说明 | 示例 |
|---|
| 基本启动 | top | 启动 top,实时显示进程 | top |
| top -d N | 设置刷新间隔(秒) | top -d 2(每 2 秒刷新) |
| top -p PID | 监控指定 PID 的进程 | top -p 1234 |
| top -u 用户名 | 只显示某用户的进程 | top -u alice |
| top -b -n 3 | 批处理模式,运行 3 次后退出(适合脚本) | top -b -n 3 > top.log |
top 内部交互式命令(运行时按键)
| 按键 | 功能 | 说明 |
|---|
q | 退出 top | |
h | 显示帮助 | 查看所有快捷键 |
k | 终止进程(kill) | 输入 PID 和信号(默认 15) |
r | 重新设置进程的 nice 值 | 输入 PID 和 nice 值(-20 ~ 19) |
u | 只显示某用户的进程 | 输入用户名,再次按 u 取消 |
P | 按 CPU 使用率排序(默认) | |
M | 按内存使用率排序 | |
T | 按累计 CPU 时间排序 | |
N | 按 PID 排序 | |
c | 切换显示完整的命令行 | 查看进程启动参数 |
l | 切换显示系统负载行 | |
m | 切换显示内存信息行 | |
1 | 切换显示各 CPU 核心使用率 | 多核系统非常有用 |
d 或 s | 修改刷新间隔 | 输入秒数(如 0.5) |
Z | 设置显示颜色 | |
R | 反向排序 | |
17.kill
| 类别 | 参数/用法 | 说明 | 示例 |
|---|
| 基本语法 | kill [信号] PID | 向指定进程发送信号 | kill 1234 |
| kill [信号] 进程名 | 需配合 pkill 或 killall | pkill nginx |
| 常用信号 | -9 或 -KILL | 强制终止(进程无法捕获或忽略)⚠️ | kill -9 1234 |
| -15 或 -TERM | 正常终止(默认信号,进程可捕获并清理)✅ | kill -15 1234 或 kill 1234 |
| -1 或 -HUP | 挂起/重启(常用于服务配置重载) | kill -1 5678(如 nginx -s reload) |
| -18 或 -CONT | 继续被暂停的进程 | kill -18 1234 |
| -19 或 -STOP | 暂停进程(不可被忽略) | kill -19 1234 |
| 信号表示法 | -9 | 数字形式(推荐) | kill -9 PID |
| -KILL | 信号名称(大写) | kill -KILL PID |
| -SIGKILL | 完整信号名 | kill -SIGKILL PID |
| 批量操作命令 | pkill <进程名> | 按进程名发送信号(支持通配) | pkill chrome |
| killall <进程名> | 同 pkill,更严格匹配 | killall nginx |
| pgrep <进程名> | 查找进程 PID(不终止) | pgrep sshd |
| 常用选项 | -l | 列出所有信号名称 | kill -l |
| -s <信号> | 指定信号(较少用) | kill -s TERM 1234 |
18.pkill
| 类别 | 参数/选项 | 说明 | 示例 |
|---|
| 基本语法 | pkill [选项] 模式 | 向匹配名称的进程发送信号 | pkill firefox |
| 核心功能 | 按进程名终止 | 支持模糊匹配、正则 | pkill chrome |
| 按用户终止 | -u 用户名 | pkill -u alice |
| 按终端终止 | -t 终端名 | pkill -t pts/0 |
| 按父进程终止 | -P PPID | pkill -P 1234 |
| 常用信号 | -9 或 -KILL | 强制终止(最后手段)⚠️ | pkill -9 java |
| -15 或 -TERM | 正常终止(默认)✅ | pkill -15 nginx |
| -1 或 -HUP | 重启/重载配置 | pkill -1 nginx(重载配置) |
| -STOP / -CONT | 暂停 / 恢复进程 | pkill -STOP firefox |
| 匹配选项 | -x | 精确匹配进程名(全名) | pkill -x bash(只杀 bash,不杀 sshd 中的 bash) |
| -f | 匹配完整命令行(含参数) | pkill -f "python server.py" |
| -i | 忽略大小写 | pkill -i notepad → 匹配 Notepad |
| -n | 只匹配最新(最新启动)的进程 | pkill -n sshd |
| -o | 只匹配最旧(最早启动)的进程 | pkill -o python |
| 输出控制 | -l | 列出所有支持的信号 | pkill -l |
| -v | 反向匹配(杀不匹配的进程) | pkill -v -u root(杀非 root 用户的进程) |
| -c | 显示匹配并发送信号的进程数量 | pkill -c sshd |
19.file
| 类别 | 参数/选项 | 说明 | 示例 |
|---|
| 基本语法 | file [选项] 文件... | 判断文件类型 | file document.txt |
| 核心功能 | 识别文件真实类型 | 不依赖扩展名,通过“魔数”(magic number)判断 | file image.jpg |
| 批量检测多个文件 | 支持多个文件或通配符 | file *.pdf |
| 检测目录内容 | -r 递归检测 | file -r /data/ |
| 常用选项 | -b | 简略模式:不显示文件名,只输出类型(适合脚本) | file -b script.sh → Bourne-Again shell script |
| -z | 检测压缩文件内部类型 | file -z archive.tar.gz |
| -L | 跟随符号链接(检测目标文件) | file -L symlink |
| -r | 递归处理目录中的文件 | file -r ./docs/ |
| -f <文件> | 从文件中读取文件名列表进行检测 | file -f filelist.txt |
| --mime | 输出 MIME 类型(如 text/plain) | file --mime document.pdf |
| --mime-type | 仅输出 MIME 类型主干 | file --mime-type *.jpg → image/jpeg |
| -k | 继续测试,显示所有可能的类型(调试用) | file -k unknown.bin |
20.tar
| 类别 | 参数 | 说明 | 示例 |
|---|
| 基本语法 | tar [选项] 归档文件 [文件/目录]... | 打包或解包文件 | tar -cf archive.tar file1 file2 |
| 核心操作模式 (只能选一个) | -c | 创建新的归档文件 | tar -c -f data.tar *.txt |
| -x | 解包(提取)归档文件 | tar -x -f data.tar |
| -t | 列出归档内容(不提取) | tar -t -f backup.tar |
| -r | 追加文件到归档末尾 | tar -r -f data.tar newfile.txt |
| -u | 更新:仅追加比归档中更新的文件 | tar -u -f data.tar updated.txt |
| 压缩选项 | -z | 使用 gzip 压缩/解压(.tar.gz 或 .tgz) | tar -czf data.tar.gz dir/ |
| -j | 使用 bzip2 压缩/解压(.tar.bz2)⚠️ 已不推荐 | tar -cjf data.tar.bz2 dir/ |
| -J | 使用 xz 压缩/解压(.tar.xz,压缩率高) | tar -cJf data.tar.xz dir/ |
| --zstd | 使用 Zstandard(.tar.zst,现代高效) | tar --zstd -cf data.tar.zst dir/ |
| 常用选项 | -f <文件名> | 指定归档文件名(必须) | tar -cf backup.tar /data |
| -v | 显示详细过程(verbose) | tar -cvf backup.tar dir/ |
| -C <目录> | 解压到指定目录 | tar -xvf data.tar -C /target/ |
| --exclude=<模式> | 打包时排除文件 | tar --exclude='*.log' -cf app.tar app/ |
| --wildcards | 支持通配符排除 | tar --exclude='*.tmp' --wildcards -cf data.tar *.txt |
21.zip/unzip
| 类别 | 命令 | 说明 | 示例 |
|---|
| 基本语法 | zip [选项] 压缩包.zip 文件... | 创建 ZIP 压缩包 | zip archive.zip file1.txt |
| unzip [选项] 压缩包.zip | 解压 ZIP 文件 | unzip archive.zip |
| zip 核心选项 | -r | 递归压缩目录(必须) | zip -r site.zip /var/www/ |
| -x "模式" | 排除文件(支持通配符) | zip -r app.zip app/ -x "*.log" "*.tmp" |
| -9 | 最大压缩比 | zip -r9 data.zip data/ |
| -0 | 仅打包,不压缩 | zip -r0 archive.zip dir/ |
| -u | 更新:仅添加新或修改的文件 | zip -u archive.zip updated.txt |
| -m | 压缩后删除原文件(慎用) | zip -m logs.zip *.log |
| -e | 启用密码加密(弱加密)⚠️ | zip -er secure.zip conf/ |
| -q | 静默模式 | zip -rq backup.zip data/ |
| unzip 核心选项 | -l | 列出压缩包内容(不解压) | unzip -l archive.zip |
| -v | 显示详细信息(含压缩率) | unzip -v archive.zip |
| -d <目录> | 解压到指定目录 | unzip archive.zip -d /restore/ |
| -o | 覆盖已存在文件,不提示 | unzip -o archive.zip |
| -n | 不覆盖已存在文件 | unzip -n archive.zip |
| -j | 解压时不保留目录结构(扁平化) | unzip -j archive.zip |
| -P 密码 | 使用密码解密(配合 zip -e) | unzip -P mypass secure.zip |
| -t | 测试压缩包完整性 | unzip -t archive.zip |
22.useradd/userdel usermod/groups
| 命令 | 选项 | 说明 | 示例 |
|---|
useradd (创建用户) | -m | 创建用户主目录 /home/用户名 | useradd -m alice |
| -d /路径 | 指定主目录路径(常与 -m 配合) | useradd -m -d /data/alice alice |
| -s /bin/bash | 指定登录 Shell | useradd -m -s /bin/zsh bob |
| -c "描述" | 添加用户描述信息 | useradd -m -c "Web Developer" charlie |
| -u UID | 指定用户 ID(避免冲突) | useradd -m -u 2001 david |
| -g 组名 | 指定主组(必须已存在) | useradd -m -g developers alice |
| -G 组1,组2 | 指定附加组(可多组) | useradd -m -G sudo,docker alice |
| -r | 创建系统用户(无家目录,UID < 1000) | useradd -r nginx |
| | ✅ 推荐创建命令: useradd -m -s /bin/bash -G sudo alice | |
usermod (修改用户) | -l 新名 | 修改用户名 | usermod -l alice_new alice |
| -d /新路径 | 修改主目录路径 | usermod -d /home/newdir alice |
| -m | 与 -d 配合,移动旧主目录内容 | usermod -d /home/newdir -m alice |
| -s /新shell | 修改登录 Shell | usermod -s /bin/fish alice |
| -g 组名 | 修改主组 | usermod -g sales bob |
| -aG 组1,组2 | 追加附加组(✅ 安全,保留原有组) | usermod -aG docker alice |
| -G 组1,组2 | 重新设置附加组(⚠️ 覆盖原有组) | usermod -G sudo alice |
| -c "新描述" | 修改用户描述 | usermod -c "Senior Dev" alice |
| -L | 锁定用户(禁止登录) | usermod -L tempuser |
| -U | 解锁用户 | usermod -U tempuser |
| -e YYYY-MM-DD | 设置账户过期时间 | usermod -e 2025-12-31 contractor |
userdel (删除用户) | (无) | 仅删除用户,保留主目录 | userdel alice |
| -r | 删除用户 + 主目录 + 邮件(推荐) | userdel -r alice |
| -f | 强制删除(即使用户登录中)⚠️ | userdel -f bob |
groups (查看组) | (无参数) | 查看当前用户所属组 | groups |
| 用户名 | 查看指定用户所属组 | groups alice |
| `groups | grep 组` | 检查用户是否在某组 |
23.passwd
| 类别 | 选项/用法 | 说明 | 示例 |
|---|
| 基本语法 | passwd [用户名] | 修改密码 | passwd(当前用户) passwd alice(root 修改他人) |
| 核心功能 | 无参数 | 修改当前用户的密码 | passwd |
| 指定用户名 | root 用户修改其他用户密码 | passwd bob |
| 常用选项 | -l | 锁定账户(禁止登录) (密码前加 ! 或 !!) | passwd -l alice |
| -u | 解锁账户 | passwd -u alice |
| -d | 删除密码(设为空密码)⚠️ 不安全 | passwd -d guest |
| -S | 显示密码状态(状态、最近修改时间) | passwd -S alice |
| -n 天数 | 设置密码最短使用天数 | passwd -n 7 alice |
| -x 天数 | 设置密码最长使用天数(过期) | passwd -x 90 alice |
| -w 天数 | 密码过期前警告天数 | passwd -w 7 alice |
| -e | 强制密码过期(下次登录必须改) | passwd -e newuser |
24.time
| 类别 | 内容 | 说明 |
|---|
| 命令类型 | time(Shell 内建) | Bash/Zsh 内置,简单测量时间 |
| /usr/bin/time(GNU time) | 外部命令,功能强大,支持详细资源统计 |
| 基本语法 | time [命令] | 使用 shell 内建 |
| /usr/bin/time [选项] [命令] | 使用 GNU time(需安装 time 包) |
| 常用选项 (GNU time) | -v | 显示详细资源使用统计(推荐) |
| -f "格式" | 自定义输出格式(支持 %E, %M 等) |
| -o 文件 | 输出到文件(覆盖) |
| -a | 与 -o 配合,追加到文件 |
| 核心输出字段 | real | 真实时间:从开始到结束的总耗时(含等待、调度) |
| user | 用户态 CPU 时间:CPU 在用户代码中执行的时间 |
| sys | 内核态 CPU 时间:CPU 在系统调用中执行的时间 |
| Percent of CPU | CPU 占用率 = (user + sys) / real |
| Maximum resident set size | 内存峰值使用量(KB)⚠️ 关键指标 |
| Exit status | 命令退出状态(0 表示成功) |
常用格式化符号 (-f 选项) | %E | real 时间(格式:[h:]m:ss) |
| %U | user 时间(秒) |
| %S | sys 时间(秒) |
| %M | 内存峰值(最大驻留集大小,KB) |
| %P | CPU 占用率(百分比) |
| %C | 执行的命令 |
| %x | 退出状态 |
| 高频使用示例 | time sleep 5 | 测量简单命令耗时 |
| /usr/bin/time -v ./script.sh | 详细统计脚本资源使用 |
| /usr/bin/time -f "耗时: %E, 内存: %M KB" command | 自定义输出格式 |
| /usr/bin/time -o log.txt -v command | 记录到日志文件 |
| /usr/bin/time -a -o log.txt command | 追加记录到日志 |
25.free
| 类别 | 选项 | 说明 | 示例 |
|---|
| 基本语法 | free [选项] | 显示系统内存使用情况 | free |
| 常用选项 | -h | 人类可读格式(自动使用 K, M, G)✅ 推荐 | free -h |
| -m | 以 MB 为单位显示 | free -m |
| -g | 以 GB 为单位显示 | free -g |
| -k | 以 KB 为单位显示(默认) | free -k |
| -b | 以 字节 为单位显示 | free -b |
| -s 秒数 | 每隔指定秒数刷新显示 | free -h -s 2 |
| -c 次数 | 刷新指定次数后退出(配合 -s) | free -h -s 1 -c 5 |
| -t | 显示 总和 行 | free -h -t |
| -w | 分离 高速缓存(buffers/cache)列(旧版) | free -w |
26.crontab
| 类别 | 命令/语法 | 说明 | 示例 |
|---|
| 基本语法 | crontab [选项] | 管理用户的定时任务 | crontab -e |
| 核心操作 | crontab -e | 编辑当前用户的 cron 任务 ✅ 最常用 | crontab -e |
| crontab -l | 列出当前用户的 cron 任务 | crontab -l |
| crontab -r | 删除所有 cron 任务 ⚠️ 危险! | crontab -r |
| crontab -i | 删除时提示确认(与 -r 配合) | crontab -ri |
| crontab 文件 | 从指定文件加载 cron 任务 | crontab backup.cron |
| 时间格式 (5 个字段) | * * * * * command | 按顺序:分 时 日 月 周 | 0 2 * * * /backup.sh |
| 分 | 0–59 | 30 → 每小时第 30 分 |
| 时 | 0–23 | 2 → 凌晨 2 点 |
| 日 | 1–31 | 15 → 每月 15 日 |
| 月 | 1–12 或 JAN-DEC | 6 或 JUN → 6 月 |
| 周 | 0–7(0 和 7 = 周日)或 SUN-SAT | 1 或 MON → 周一 |
| 通配符 | * | 任意值 | * → 每分钟 |
| , | 指定多个值 | 0,30 → 第 0 和 30 分 |
| - | 范围 | 9-17 → 9 到 17 点 |
| */n | 每 n 个单位 | */5 → 每 5 分钟 |
| 常用时间示例 | 0 2 * * * | 每天 凌晨 2 点 | 备份任务 |
| 0 0 1 * * | 每月 1 号 0 点 | 月度报告 |
| 0 0 * * 0 | 每周 周日 0 点 | 每周清理 |
| */5 * * * * | 每 5 分钟 | 心跳检测 |
| 0 9-18 * * 1-5 | 工作日 9–18 点整点 | 工作时段监控 |
| 0 0 1 1 * | 每年 1 月 1 日 0 点 | 年度任务 |
| 环境与路径 | 显式路径 | cron 环境变量有限,推荐使用绝对路径 | /usr/bin/python /script.py |
| 环境变量 | 可在文件顶部设置 | PATH=/usr/local/bin:/usr/bin:/bin |
| 输出重定向 | 避免邮件通知 | command > /dev/null 2>&1 |
| 记录日志 | 建议将输出写入日志 | command >> /var/log/cron.log 2>&1 |
27.init
| 类别 | 命令/参数 | 说明 | 等效 systemctl 命令(systemd 系统) |
|---|
| 基本语法 | `init [0-6 | S | s |
| 运行级别 (Runlevel) | 0 | 关机(Shutdown) | systemctl poweroff |
| 1 | 单用户模式(Single User Mode) 无网络,root 权限,用于维护 | systemctl rescue |
| 2 | 多用户模式,无网络(Debian/Ubuntu) 有网络(RHEL/CentOS) | |
| 3 | 多用户模式,有网络,命令行界面(CLI) 标准服务器模式 | systemctl isolate multi-user.target |
| 4 | 未使用(用户自定义) | |
| 5 | 多用户模式,有图形界面(GUI) | systemctl isolate graphical.target |
| 6 | 重启系统(Reboot) | systemctl reboot |
| S 或 s | 单用户模式(与 1 类似) | |
| 其他命令 | init q 或 init Q | 重新读取 /etc/inittab 文件 (不重启服务) | systemctl daemon-reload |
| telinit | init 的软链接,功能相同 | |
| 查看当前运行级别 | who -r | 显示当前运行级别 | systemctl get-default |
| runlevel | 显示上一个和当前运行级别 (如 N 3 表示之前无,当前是 3) | systemctl list-units --type=target |
28.uname
| 类别 | 选项 | 说明 | 示例输出 |
|---|
| 基本语法 | uname [选项] | 显示系统信息 | uname -a |
| 核心选项 | -s | 显示操作系统内核名称(默认) | Linux |
| -n | 显示主机名(hostname) | server01 |
| -r | 显示内核版本号 | 5.4.0-42-generic |
| -v | 显示内核版本构建信息(编译时间等) | #46-Ubuntu SMP Fri Jul 10 ... |
| -m | 显示机器硬件架构 | x86_64, aarch64, i686 |
| -p | 显示处理器类型(部分系统不支持) | x86_64 或 unknown |
| -i | 显示硬件平台(部分系统不支持) | x86_64 或 unknown |
| -o | 显示操作系统名称 | GNU/Linux |
| -a | 显示所有信息(相当于 -snrvmpio)✅ 推荐 | Linux server01 5.4.0-42-generic #46-Ubuntu SMP ... x86_64 x86_64 GNU/Linux |
29.arch
arch
30.hostname
| 类别 | 选项/用法 | 说明 | 示例 |
|---|
| 基本功能 | hostname | 显示当前主机名 | hostname → server01 |
| hostname 新名称 | 临时修改主机名(重启失效) | sudo hostname web-server |
| 常用选项 | -s | 显示短主机名(第一个 . 之前) | hostname -s → server01(原 server01.example.com) |
| -d | 显示域名部分 | hostname -d → example.com |
| -f | 显示完全限定域名(FQDN) | hostname -f → server01.example.com |
| -i | 显示主机的主 IP 地址 | hostname -i → 192.168.1.10 |
| -I | 显示所有 IP 地址(IPv4/IPv6)✅ 推荐 | hostname -I → 192.168.1.10 2001:db8::1 |
| --help | 显示帮助 | hostname --help |
| --version | 显示版本 | hostname --version |
| 权限要求 | 查看 | 任意用户 | |
| 修改 | root 或 sudo | sudo hostname new-name |
| 永久修改 | ❌ 不支持 | 需使用 hostnamectl(现代系统)或手动修改 /etc/hostname | sudo hostnamectl set-hostname new-name |
| 输出示例 | hostname | web01.prod.example.com | 完整主机名 |
| hostname -s | web01 | 短主机名 |
| hostname -I | 192.168.1.10 10.0.0.5 | 所有 IP 地址 |
| 典型用途 | 脚本中获取主机名 | HOST=$(hostname -s) | |
| 获取服务器 IP | IP=$(hostname -I) | |
| 检查 FQDN 解析 | hostname -f | 应正确输出完整域名 |
| 日志记录 | echo "[$(date)] $(hostname): Service started" | |
| 注意事项 | - hostname -f 依赖 /etc/hosts 或 DNS 能正确解析主机名 - hostname -I 不依赖 DNS,更可靠 - 临时修改重启后失效 - 在容器中显示的是宿主机的主机名和 IP | | |
31.who/w
| 类别 | 命令 / 选项 | 说明 | 示例 |
|---|
| 基本功能 | who | 显示当前登录的用户信息(简洁) | who |
| w | 显示当前登录用户 + 系统运行状态(详细)✅ | w |
who 输出字段 | 用户名 | 登录用户的名称 | alice |
| 终端(TTY) | 用户连接的终端设备 | pts/0, tty1 |
| 登录时间 | 用户登录的日期和时间 | Nov 3 14:20 |
| 空闲时间 | 终端自上次活动以来的空闲时长 | 0.00s, 10:30 |
| 进程 ID (PID) | 用户登录 shell 的进程 ID | 1234 |
| 来源/主机 | 用户的登录来源(IP 或主机名) | (192.168.1.100), :0(本地图形) |
| 登录状态 | 如 login, gone(已断开) | login |
w 输出结构 | 第一行:系统摘要 | | |
| up | 系统已运行时间 | up 2 days, 5:30 |
| users | 当前登录用户总数 | users 3 |
| load average | 系统平均负载(1, 5, 15 分钟) | load average: 0.15, 0.10, 0.05 |
| 第二行:标题行 | USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT | |
| 后续行:用户详情 | 每个登录用户的详细信息 | |
| USER | 用户名 | bob |
| TTY | 终端 | pts/1 |
| FROM | 来源主机/IP | 10.0.0.5 |
| LOGIN@ | 登录时间 | 13:45 |
| IDLE | 空闲时间 | 2:15 |
32.uptime
| 类别 | 选项 | 说明 | 示例输出 |
|---|
| 基本功能 | uptime | 显示系统运行时间、当前时间、登录用户数和系统负载 | 10:15:30 up 2 days, 5:30, 3 users, load average: 0.15, 0.10, 0.05 |
| 常用选项 | -p 或 --pretty | 以易读格式显示运行时间 | up 2 days, 5 hours, 30 minutes |
| -s 或 --since | 显示系统启动的具体时间 | 2025-10-29 04:45:30 |
| -h | 显示帮助信息 | uptime -h |
| -V | 显示版本信息 | uptime -V |
| 输出字段详解 | 当前时间 | 命令执行时的系统时间 | 10:15:30 |
| up X time | 系统已连续运行的时间 | up 2 days, 5:30 |
| users | 当前登录的用户数量 | 3 users |
| load average | 系统平均负载(1分钟、5分钟、15分钟) | 0.15, 0.10, 0.05 |
| 负载解读 | load < CPU核心数 | 系统空闲,性能良好 | 如 4 核 CPU,load=2.0 → 良好 |
| load ≈ CPU核心数 | 系统负载适中 | |
| load > CPU核心数 | 系统过载,可能存在性能瓶颈 | 如 4 核 CPU,load=6.0 → 过载 |
| load >> CPU核心数 | 严重过载,需排查 | 如 load=20.0 → 紧急 |
33.env
| 类别 | 语法 / 选项 | 说明 | 示例 |
|---|
| 基本功能 | env | 显示当前所有环境变量(每行一个) | env → 输出 PATH=..., HOME=... 等 |
| env [命令] | 在默认环境下运行指定命令 | env ls -l |
| env 变量=值 [命令] | 设置或临时添加环境变量后运行命令 | env LANG=C date |
| env -i [命令] | 完全清空环境变量,仅用指定变量运行命令 | env -i PATH=/usr/bin ls |
| 常用选项 | -i 或 --ignore-environment | 忽略所有继承的环境变量(创建干净环境) | env -i bash(启动无环境的 shell) |
| -u 或 --unset=NAME | 从环境中移除指定变量 | env -u TEMP_VAR my_script.sh |
| -C 或 --chdir=DIR | 先切换到指定目录,再执行命令 | env -C /tmp pwd |
| --help | 显示帮助信息 | env --help |
| --version | 显示版本信息 | env --version |
| 输出示例 | env | <br>PWD=/home/user<br>HOME=/home/user<br>PATH=/usr/local/bin:/usr/bin<br>SHELL=/bin/bash<br> | 显示键值对格式的环境变量 |
| 典型用途 | 查看所有环境变量 | env | 替代 printenv |
| 临时设置变量运行命令 | env DEBUG=1 ./app | 不影响当前 shell 环境 |
| 强制使用特定语言环境 | env LANG=C grep pattern file | 避免乱码或 locale 相关问题 |
| 清理环境运行脚本 | env -i PATH=/bin:/usr/bin sh script.sh | 排除环境干扰,提高可移植性 |
| 跨平台兼容性测试 | env -i LC_ALL=C command | 模拟最小化环境 |
| 调试脚本依赖 | env -u PROXY curl example.com | 测试无代理时的行为 |
34.lsusb -tv
| 类别 | 内容 | 说明 |
|---|
| 命令功能 | lsusb -tv | 以树状结构(tree view)显示系统中所有 USB 总线和连接的设备,包含详细层级关系 |
| 基本语法 | lsusb -tv | 需要 usbutils 软件包(绝大多数 Linux 发行版默认安装) |
| 权限要求 | 通常无需 root | 普通用户可执行,但部分设备信息可能受限 |
| 核心选项 | -t | 以树状格式显示 USB 设备层级(Bus → Device → Interface → Endpoint) |
| -v | 显示详细信息(冗长模式),包括描述符、类、厂商 ID、产品 ID 等 |
| -t + -v | 组合使用,提供最完整的 USB 拓扑与设备信息 |
| 输出结构 | Bus 00X | 表示 USB 总线编号(如 Bus 002) |
| Dev 00Y | 表示该总线上的设备编号(如 Dev 003) |
| ` | __ Port Z` |
| ` | __ Device SSSS:PPPP` |
| ` | __ Interface` |
| ` | __ Endpoint` |
| ` | __ Configuration` |
| 关键字段 | idVendor | 厂商 ID(可查 USB ID 数据库) |
| idProduct | 产品 ID |
| bcdUSB | USB 协议版本(如 2.00, 3.00) |
| bDeviceClass | 设备大类(如 09=Hub, 08=Storage, 03=HID) |
| iManufacturer | 厂商名称 |
| iProduct | 产品名称 |
| iSerial | 序列号(如有) |
| bConfigurationValue | 当前激活的配置 |
| bmAttributes | 配置属性(如自供电、远程唤醒) |
| MaxPower | 最大功耗(单位:mA) |
35.lspci -tv
| 类别 | 选项 | 说明 | 示例 |
|---|
| 基本功能 | lspci | 列出所有 PCI 总线及连接的设备(如显卡、网卡、声卡、SATA 控制器等) | lspci |
| 常用选项 | -v | 显示详细信息(包括 I/O 端口、内存地址、中断等) | lspci -v |
| -vv | 更详细信息(包含子系统 ID、驱动状态等) | lspci -vv |
| -vvv | 最详细信息(调试用) | lspci -vvv |
| -k | 显示设备使用的内核驱动程序 | lspci -k |
| `-k | grep -A 2 "VGA | Network"` |
| -s <设备号> | 指定特定设备查看 | lspci -s 00:1f.6 |
| -t | 以树状结构显示设备层级关系 | lspci -t |
| -n | 显示厂商和设备 ID(十六进制),而非名称 | lspci -n |
| -nn | 同时显示名称和 ID(推荐) | lspci -nn ✅ |
| -m | 机器可读格式(适合脚本解析) | lspci -m |
| -d [vendor]:[device] | 过滤指定厂商或设备 | lspci -d 8086: (Intel 所有设备) |
| 输出字段 | 设备号 | 格式:总线:设备.功能(如 00:1f.6) | 00:1f.6 |
| 设备类型 | 如 VGA compatible controller, Ethernet controller | VGA controller |
| 厂商:设备 ID | 十六进制,可用于查数据库 | 8086:15b7(Intel 网卡) |
| 驱动(Driver) | 通过 -k 显示,如 e1000e, i915 | Kernel driver in use: i915 |
| 典型用途 | 查看所有 PCI 设备 | lspci | 快速概览 |
| 查看显卡信息 | `lspci | grep -i vga` |
| 查看网卡信息 | `lspci | grep -i ethernet` |
| 查看声卡信息 | `lspci | grep -i audio` |
| 查看设备使用哪个驱动 | `lspci -k | grep -A 3 “VGA”` |
| 结合 ID 查询设备型号 | `lspci -nn | grep "VGA"→ 得到10de:1c81` → 查 PCI ID 数据库 |
| 调试硬件未识别问题 | lspci -vv | 检查是否列出但无驱动 |
36.lsmod
| 类别 | 内容 | 说明 |
|---|
| 命令功能 | lsmod | 列出当前内核中已加载的模块(驱动程序、文件系统、功能扩展等) |
| 基本语法 | lsmod | 无需参数,直接执行 |
| 权限要求 | 普通用户可执行 | 仅查看,无需 root 权限 |
| 输出格式 | 三列制表符分隔 | 类似 ls -l 的表格格式 |
| 输出字段 | Module | 模块名称(如 usb_storage, nvidia, ext4) |
| Size | 模块占用的内存大小(单位:字节) |
| Used by | 使用该模块的其他模块数量或进程/模块名0 = 未被使用,可卸载 - = 无人使用 ext4 = 被 ext4 文件系统使用 1 = 被一个模块使用 |
| 等效命令 | cat /proc/modules | 输出格式略有不同,但内容一致 |
| 常用组合 | `lsmod | grep 模块名` |
| `lsmod | head -10` |
| `lsmod | sort -k2 -nr` |
| `lsmod | wc -l` |
37.lsblk
| 类别 | 选项 | 说明 | 示例 |
|---|
| 基本功能 | lsblk | 列出所有块设备(如硬盘、分区、LVM、RAID、CD-ROM、swap)及其层级关系 | lsblk |
| 默认输出 | 树状结构 | 显示设备之间的父子关系(如 /dev/sda → /dev/sda1, /dev/sda2) | 自动缩进表示层级 |
| 常用选项 | -f 或 --fs | 显示文件系统信息(TYPE, LABEL, UUID, MOUNTPOINT) | lsblk -f ✅ 推荐 |
| -l 或 --list | 以列表格式显示(非树状),便于脚本处理 | lsblk -l |
| -a | 显示所有设备(包括未挂载和空设备) | lsblk -a |
| -m | 显示设备的权限、所有者、组信息 | lsblk -m |
| -n | 不显示列标题(no headers) | lsblk -n |
| -o | 自定义输出列(可组合) | lsblk -o NAME,SIZE,TYPE,MOUNTPOINT |
| -d | 仅显示磁盘设备(不显示分区) | lsblk -d |
| -e <type> | 排除指定类型设备(如 -e 7 排除 loop 设备) | lsblk -e 7 |
| --bytes | 以字节为单位显示大小(而非人类可读) | lsblk --bytes |
| --output-all | 显示所有可用列(调试用) | lsblk --output-all |
38.lscpu
| 类别 | 内容 | 说明 |
|---|
| 命令功能 | lscpu | 显示当前系统 CPU 架构、核心数、线程、缓存、拓扑结构 等详细信息 |
| 基本语法 | lscpu | 无需参数,直接执行 |
| 权限要求 | 普通用户可执行 | 信息来自 /proc/cpuinfo 和 sysfs |
| 输出格式 | 键值对形式 | 易读,结构清晰 |
| 常用选项 | -a 或 --all | 显示所有 CPU(包括离线 CPU) |
| -e 或 --extended | 以表格形式显示扩展信息(含 CPU、ONLINE、SOCKET、CORE 等) |
| -p 或 --parse | 机器可读格式(适合脚本解析,字段用 : 分隔) |
| -x | 以十六进制显示 CPU 亲和性掩码(-e 时) |
| --version | 显示版本信息 |
39.date
| 类别 | 选项/用法 | 说明 | 示例输出/命令 |
|---|
| 基本功能 | date | 显示当前系统日期和时间(本地时区) | Fri Oct 31 11:30:45 CST 2025 |
| date -u 或 date --utc | 显示 UTC(协调世界时) 时间 | Fri Oct 31 03:30:45 UTC 2025 |
| 格式化输出 | +格式字符串 | 自定义输出格式(+ 后跟格式符) | date +"%Y-%m-%d %H:%M:%S" |
| %Y | 四位年份 | 2025 |
| %y | 两位年份 | 25 |
| %m | 月份(01-12) | 10 |
| %B | 完整月份名 | October |
| %b | 简写月份名 | Oct |
| %d | 日期(01-31) | 31 |
| %H | 小时(00-23) | 11 |
| %M | 分钟(00-59) | 30 |
| %S | 秒(00-60) | 45 |
| %s | Unix 时间戳(秒级,自 1970-01-01 00:00:00 UTC) | 1730345445 |
| %F | 完整日期(等价于 %Y-%m-%d) | 2025-10-31 |
| %T | 时间(等价于 %H:%M:%S) | 11:30:45 |
| %Z | 时区名称 | CST |
| %z | 时区偏移(+HHMM) | +0800 |
| %A | 星期全名 | Friday |
| %a | 星期简写 | Fri |
| %j | 一年中的第几天(001-366) | 304 |
| %V | ISO 周数(01-53) | 44 |
| 常用格式示例 | date +"%Y-%m-%d" | 标准日期 | 2025-10-31 |
| date +"%H:%M:%S" | 标准时间 | 11:30:45 |
| date +"%Y-%m-%d %H:%M:%S" | 常用时间戳格式 | 2025-10-31 11:30:45 |
| date +%s | 获取 Unix 时间戳 | 1730345445 |
| date -d @1730345445 | 将时间戳转为可读时间 | Fri Oct 31 11:30:45 CST 2025 |
| date +"%Y%m%d_%H%M%S" | 文件名友好格式 | 20251031_113045 |
| 显示指定时间 | -d "字符串" 或 --date="字符串" | 显示指定时间(不修改系统时间) | date -d "next Monday" |
| 支持关键词 | now, today, yesterday, tomorrow, next week, last month, +5 days 等 | date -d "tomorrow" |
| 支持具体时间 | date -d "2025-12-25 10:00:00" | |
| 支持相对时间 | date -d "now + 2 hours", date -d "today - 7 days" | |
| 设置系统时间⚠️ | date MMDDhhmm[[CC]YY][.ss] | 需要 root 权限,临时修改系统时间 | sudo date 103111302025.45 → 设为 2025年10月31日11:30:45 |
| date -s "字符串" | 使用字符串设置时间 | sudo date -s "2025-10-31 11:30:45" |
| date --set="STRING" | 同 -s | |
| 其他选项 | --help | 显示帮助 | date --help |
| --version | 显示版本 | date --version |
| -R 或 --rfc-email | 输出 RFC 5322 格式(邮件常用) | Fri, 31 Oct 2025 11:30:45 +0800 |
40.iostat
| 类别 | 选项 | 说明 | 示例 |
|---|
| 基本功能 | iostat | 显示 CPU 使用率 和 设备/分区的 I/O 统计信息 | iostat |
| iostat [设备] | 仅显示指定设备(如 sda, nvme0n1)的统计 | iostat sda |
| 常用选项 | -c | 仅显示 CPU 统计 | iostat -c |
| -d | 仅显示设备 I/O 统计(不显示 CPU) | iostat -d |
| -x | 显示扩展统计信息(关键性能指标) | iostat -x ✅ 推荐 |
| -m | 以 MB/s 为单位显示吞吐量(默认 KB/s) | iostat -xm |
| -k | 以 KB/s 为单位(默认) | iostat -k |
| -p [设备] | 显示指定设备及其分区的统计 | iostat -p sda |
| interval | 设置刷新间隔(秒) | iostat 2(每 2 秒刷新) |
| count | 指定输出次数 | iostat 2 5(每 2 秒一次,共 5 次) |
| -N | 显示 LVM 逻辑卷 名称而非设备名 | iostat -xN |
| -t | 在输出中添加时间戳 | iostat -xt 2 |
41.fdisk
| 类别 | 语法 / 操作 | 说明 | 示例 |
|---|
| 基本功能 | fdisk [设备] | 进入交互式分区编辑模式 | sudo fdisk /dev/sdb |
| fdisk -l | 列出所有磁盘和分区信息(只读) | sudo fdisk -l ✅ 最常用 |
| fdisk -l /dev/sda | 列出指定磁盘的分区 | sudo fdisk -l /dev/sda |
| 权限要求 | root 或 sudo | 修改分区表必须超级用户权限 | sudo fdisk /dev/sdb |
| 交互式命令 | m 或 help | 显示帮助菜单 | 在 fdisk 提示符下输入 |
| p | 打印当前分区表(preview) | 查看现有分区 |
| n | 创建新分区 | 进入分区创建向导 |
| d | 删除分区 | 可指定分区号 |
| t | 更改分区类型(如 Linux, LVM, Swap, EFI) | 设置分区用途 |
| l | 列出所有支持的分区类型代码 | 83=Linux, 8e=LVM, 82=Swap, ef=EFI |
| a | 切换引导标志(bootable flag) | 用于设置启动分区 |
| u | 切换显示单位(sectors/bytes) | |
| w | 写入更改并退出(关键!) | 分区表被永久修改 |
| q | 不保存退出 | 丢弃所有未保存的更改 |
42.mkfs
| 类别 | 选项/用法 | 说明 | 示例 |
|---|
| 基本功能 | mkfs [选项] [设备] | 在指定设备(分区)上创建文件系统(即“格式化”) | sudo mkfs /dev/sdb1 |
| 核心选项 | -t <类型> | 指定要创建的文件系统类型 | mkfs -t ext4 /dev/sdb1 ✅ |
| -V | 显示详细过程(verbose) | mkfs -V -t xfs /dev/sdb1 |
| -F | 强制创建,即使设备看起来像已有文件系统 | mkfs -F -t btrfs /dev/sdb1 ⚠️ |
| -c | 创建前检查坏块(耗时,但安全) | mkfs -c -t ext4 /dev/sdb1 |
| -L <标签> | 为文件系统设置卷标(Label) | mkfs -t ext4 -L DATA /dev/sdb1 |
| -q | 静默模式(quiet),减少输出 | mkfs -q -t xfs /dev/sdb1 |
| 常用文件系统类型 | ext2 | 传统 Linux 文件系统(无日志) | mkfs -t ext2 /dev/sdb1 |
| ext3 | ext2 + 日志 | mkfs -t ext3 /dev/sdb1 |
| ext4 | 现代 Linux 默认,高性能 | mkfs -t ext4 /dev/sdb1 ✅ 推荐 |
| xfs | 高性能,适合大文件和大容量 | mkfs -t xfs /dev/sdb1 |
| btrfs | 支持快照、压缩、RAID 的现代文件系统 | mkfs -t btrfs /dev/sdb1 |
| vfat | 兼容 Windows 的 FAT32 | mkfs -t vfat /dev/sdb1 |
| ntfs | Windows NTFS(需 ntfs-3g) | mkfs.ntfs /dev/sdb1 |
| swap | 创建交换分区 | mkswap /dev/sdb2(专用命令) |
43.mount
| 类别 | 命令 / 选项 | 说明 | 示例 |
|---|
| 基本功能 | mount [设备] [挂载点] | 将文件系统(设备)挂载到指定目录 | sudo mount /dev/sdb1 /data |
| umount [设备] 或 [挂载点] | 卸载已挂载的文件系统 | sudo umount /dev/sdb1 或 sudo umount /data |
| 权限要求 | root 或 sudo | 挂载/卸载通常需要超级用户权限 | sudo mount ... |
| 常用选项(mount) | -t <类型> | 指定文件系统类型(如 ext4, xfs, vfat) | mount -t ext4 /dev/sdb1 /data |
| -o <选项> | 指定挂载选项(可组合,逗号分隔) | mount -o ro,noatime /dev/sdb1 /data |
| -a | 挂载 /etc/fstab 中所有可挂载的文件系统 | mount -a(常用于启动时) |
| --bind | 绑定挂载(将一个目录挂载到另一个位置) | mount --bind /src /dst |
| --make-shared 等 | 高级挂载命名空间控制 | mount --make-shared /data |
常用挂载选项 -o | ro | 只读挂载 | mount -o ro /dev/sdb1 /data |
| rw | 读写挂载(默认) | |
| noatime | 不更新文件访问时间(提升性能) | mount -o noatime /data |
| nodiratime | 不更新目录访问时间 | |
| relatime | 相对时间更新(平衡性能与标准) | ✅ 推荐 |
| sync / async | 同步/异步 I/O | async 默认 |
| dirsync | 目录更新同步写入 | |
| noexec | 禁止执行文件 | 安全挂载 |
| nosuid | 禁止 setuid/setgid 位生效 | 安全挂载 |
| nodev | 禁止解释设备文件 | 安全挂载 |
| auto / noauto | 是否支持 mount -a | noauto 用于 USB |
| user / nouser | 允许普通用户挂载 | user 需在 /etc/fstab 设置 |
| defaults | 使用默认选项(rw, suid, dev, exec, auto, nouser, async) | mount -o defaults /dev/sdb1 /data |
44.df
| 类别 | 选项 | 说明 | 示例 |
|---|
| 基本功能 | df | 显示所有已挂载文件系统的磁盘空间使用情况 | df |
| 常用选项 | -h | 人类可读格式(自动使用 K, M, G, T)✅ 推荐 | df -h |
| -H | 类似 -h,但使用 1000 进制(KB=10³, MB=10⁶) | df -H |
| -k | 以 KB 为单位显示(默认) | df -k |
| -m | 以 MB 为单位显示 | df -m |
| -T | 显示文件系统类型(如 ext4, xfs, tmpfs) | df -T |
| -i | 显示inode 使用情况(而非磁盘空间) | df -i |
| -a | 显示所有文件系统(包括 0 大小或特殊文件系统) | df -a |
| --total | 在末尾添加总计行 | df -h --total |
| [目录/设备] | 查看指定目录所在文件系统的使用情况 | df /home, df /dev/sda1 |
45.du
| 类别 | 选项 | 说明 | 示例 |
|---|
| 基本功能 | du [目录/文件] | 显示指定文件或目录的磁盘使用空间 | du /home |
| 常用选项 | -h | 人类可读格式(K, M, G, T)✅ 推荐 | du -h /var/log |
| -H | 类似 -h,但使用 1000 进制 | du -H /data |
| -k | 以 KB 为单位显示(默认) | du -k /tmp |
| -m | 以 MB 为单位显示 | du -m /opt |
| -s | 汇总统计(只显示总大小,不列出子目录)✅ 常用 | du -sh /home |
| --max-depth=N | 显示指定深度的目录大小 | du -h --max-depth=1 / |
| -a | 显示所有文件和目录(不仅目录) | du -a /etc |
| -c | 在最后输出总计 | du -ch /tmp |
| --exclude=PATTERN | 排除匹配模式的文件/目录 | du -h --exclude="*.log" /var |
| -L | 跟随符号链接(symlink) | du -L /link/to/dir |
| -S | 不包含子目录的大小(仅当前层) | du -S /data |
| --time | 显示文件/目录的修改时间 | du -h --time /backup |
46.awk
| 类别 | 语法 / 选项 / 变量 | 说明 | 示例 |
|---|
| 基本语法 | awk 'pattern { action }' file | 核心结构:模式匹配后执行动作 | awk '/error/ {print}' log.txt |
| awk -F '分隔符' '{...}' | 指定输入字段分隔符(默认空格/制表符) | awk -F ':' '{print $1}' /etc/passwd |
| awk 'BEGIN{...} {...} END{...}' | BEGIN 初始化,END 最终处理 | 统计、求和、设置变量 |
| 核心组件 | pattern | 匹配条件(正则、比较、范围等) | /root/, $3 > 100, NR==1 |
| action | 满足条件时执行的动作 | {print $0}, {sum+=$2} |
| 常用动作 | print | 输出内容,默认换行 | print $1, $2 |
| printf | 格式化输出(类似 C) | printf "%-10s %d\n", $1, $2 |
| 流程控制 | if, for, while, break | 复杂逻辑处理 |
| 内置变量 | $0 | 当前整行内容 | print $0 |
| $1, $2, … | 第 1、2、… n 个字段 | print $1 |
| NF | 当前行的字段数量 | awk '{print NF}' file |
| NR | 总行号(所有文件累计) | awk '{print NR}' *.log |
| FNR | 当前文件行号(每文件从 1 开始) | awk '{print FNR}' f1 f2 |
| FS | 输入字段分隔符(可修改) | BEGIN{FS=","} 或 -F',' |
| OFS | 输出字段分隔符(默认空格) | BEGIN{OFS="-"} |
| FILENAME | 当前处理的文件名 | print FILENAME": "$0 |
| 常用选项 | -F 'sep' | 设置字段分隔符 | awk -F':' '{...}' |
| -v var=value | 在 BEGIN 前定义变量 | awk -v name=John '{...}' |
| -f script.awk | 从文件读取 awk 脚本 | awk -f myscript.awk data.txt |
| 操作符 | ~, !~ | 匹配 / 不匹配正则 | $1 ~ /^user/ |
| ==, !=, <, > | 比较操作符 | $2 == "active" |
| +, -, *, /, % | 算术运算 | sum += $2 |
| ++, -- | 自增自减 | count++ |
| 高频场景 | 提取列 | 使用 $n 和 -F | awk -F: '{print $1,$6}' /etc/passwd |
| 过滤行 | 正则或条件匹配 | awk '$3>50' data.txt |
| 统计行数 | END{print NR} | awk 'END{print NR}' file |
| 求和/平均 | 累加变量 + END | awk '{s+=$2} END{print s}' file |
| 格式化输出 | printf | awk '{printf "%5.2f\n", $1}' |
| 多文件处理 | FILENAME | awk '{print FILENAME,$0}' *.log |
| 经典示例 | 打印第一列 | awk '{print $1}' file | |
| CSV 求和第三列 | awk -F',' 'NR>1{sum+=$3} END{print sum}' sales.csv | |
| 显示行号 | awk '{print NR": "$0}' file | |
| 设置输出分隔符 | `awk 'BEGIN{OFS=" | "} {print 1,1,2}’ file` |
| 条件输出 | awk '{if($2>100) print $1,"High"; else print $1,"Low"}' | |
47.sed
| 类别 | 语法 / 选项 / 命令 | 说明 | 示例 |
|---|
| 基本语法 | sed [选项] '地址+命令' 文件 | 核心结构:在指定行执行编辑操作 | sed 's/old/new/' file.txt |
| sed -e 'cmd1' -e 'cmd2' | 执行多个命令 | sed -e '1d' -e 's/foo/bar/' file |
| sed -f script.sed | 从文件读取 sed 脚本 | sed -f myscript.sed data.txt |
| 常用选项 | -n | 静默模式(抑制默认输出) | sed -n '1p' file |
| -e | 添加编辑命令(可多个) | 同上 |
| -f | 指定脚本文件 | 同上 |
| -i[.bak] | 直接修改原文件(可选备份)✅ 危险! | sed -i.bak 's/foo/bar/g' file |
| -r 或 -E | 使用扩展正则表达式(ERE) | `sed -r 's/(a |
| 地址(定位) | 10 | 第 10 行 | sed '10d' file |
| 1,5 | 第 1 到 5 行 | sed '1,5d' file |
| /pattern/ | 匹配正则的行 | sed '/error/d' log.txt |
| 1~2 | 从第 1 行开始,每隔 2 行(奇数行) | sed '1~2d' file |
| $ | 最后一行 | sed '$d' file |
| 核心编辑命令 | p | 打印当前行(常与 -n 配合) | sed -n '1p' file |
| d | 删除当前行 | sed '3d' file |
| s/old/new/[flags] | 替换文本(最常用) | sed 's/foo/bar/g' file |
| a\text | 在匹配行后追加文本 | sed '/end/a\new line' file |
| i\text | 在匹配行前插入文本 | sed '/start/i\header' file |
| c\text | 替换整行内容 | sed '2c\replaced line' file |
| w file | 将匹配行写入到另一个文件 | sed -n '/error/w error.log' log.txt |
| = | 打印行号 | sed '=' file |
| q | 立即退出 sed | sed '5q' file |
替换标志 [flags] | g | 全局替换(每行所有匹配)✅ | s/foo/bar/g |
| 数字 | 替换第 n 个匹配 | s/foo/bar/2(替换第 2 个) |
| p | 打印替换成功的行(常与 -n 配合) | sed -n 's/foo/bar/p' |
| i | 忽略大小写 | s/error/ERROR/gi |
| w file | 将替换后的行写入文件 | s/foo/bar/gw changed.txt |
| 正则表达式 | . | 匹配任意字符 | sed 's/.*/X/' |
| ^ | 行首 | sed 's/^/#/'(注释整行) |
| $ | 行尾 | sed 's/$/;/'(行尾加分号) |
| * | 前一个字符 0 次或多次 | sed 's/f.*o/X/' |
| [abc] | 字符集合 | sed 's/[aeiou]/_/g' |
| \{m,n\} | 重复 m 到 n 次(基础正则) | sed 's/a\{2,4\}/X/' |
| $ $ | 分组捕获 | sed 's/$user$.*/\1_admin/' |
| \1, \2 | 引用分组 | 同上 |
| 高频场景 | 替换字符串 | s/old/new/g | sed 's/Windows/Linux/g' doc.txt |
| 删除空行 | /^$/d | sed '/^$/d' file |
| 删除注释行 | /^#/d | sed '/^#/d' config.conf |
| 在文件开头插入 | 1i\ | sed '1i\# Auto-generated' file |
| 在文件结尾追加 | $a\ | sed '$a\EOF' file |
| 批量修改文件 | -i + s///g | sed -i 's/old_domain/new_domain/g' *.conf |
| 提取匹配行 | -n '/pattern/p' | sed -n '/error/p' log.txt |
| 备份并替换 | -i.bak | sed -i.bak 's/foo/bar/g' important.conf |
48.sync/rsync
| 类别 | 命令 / 选项 | 说明 | 示例 |
|---|
| 命令类型 | sync | 同步内存缓存到磁盘(强制刷写) | sync |
| rsync | 远程/本地文件同步工具(增量备份)✅ | rsync -av /src/ /dst/ |
sync 核心功能 | sync | 将内核缓冲区中所有待写数据(文件、元数据)强制写入物理存储 | sync |
| sync; echo 3 > /proc/sys/vm/drop_caches | 刷写并清空页面缓存(运维常用) | 清理内存 |
rsync 基本语法 | rsync [选项] 源 目标 | 支持本地、远程(SSH)、守护进程模式 | rsync -av /a/ /b/ |
rsync 常用选项 | -a | 归档模式(保留权限、时间、符号链接等)✅ 推荐 | rsync -a ... |
| -v | 详细输出(verbose) | rsync -av ... |
| -r | 递归复制目录 | rsync -r ... |
| -l | 复制符号链接(软链接)本身 | |
| -L | 跟随符号链接(复制目标文件) | rsync -aL ... |
| -H | 保留硬链接 | rsync -aH ... |
| -S | 高效处理稀疏文件 | rsync -aS ... |
| -z | 传输时压缩数据(节省带宽) | rsync -az ... |
| -P | 显示进度 + 断点续传(--partial --progress) | rsync -avP ... |
| --delete | 删除目标中源不存在的文件(镜像同步)⚠️ 危险! | rsync -av --delete src/ dst/ |
| --exclude='PATTERN' | 排除匹配模式的文件/目录 | --exclude='*.tmp' |
| --include='PATTERN' | 包含特定文件(配合 exclude) | --include='/.git' |
| --dry-run | 模拟运行,不实际执行(测试用)✅ 安全! | rsync -avn --delete ... |
| -u 或 --update | 跳过目标中更新的文件(防止覆盖) | rsync -au ... |
| 传输模式 | 本地同步 | rsync [选项] 源/ 目标/ | rsync -av /data/ /backup/ |
| 通过 SSH 远程同步 | rsync [选项] user@host:源 目标 | rsync -av user@server:/data/ ./local/ |
| | rsync [选项] 源 user@host:目标 | rsync -av /data/ user@server:/backup/ |
| 守护进程模式(daemon) | 使用 rsync:// 协议 | rsync -av rsync://host/module/ /dst/ |
路径末尾 / 含义 | rsync /src /dst | 将 src 目录复制到 /dst/src | |
| rsync /src/ /dst | 将 src内容复制到 /dst/ ✅ 推荐用于同步 | rsync -av /data/ /backup/ |
| 高频使用场景 | 本地备份 | rsync -av /home/ /backup/home/ | 完整备份用户数据 |
| 远程备份(SSH) | rsync -azP user@server:/var/log/ ./logs/ | 压缩传输日志 |
| 镜像同步 | rsync -av --delete --dry-run /src/ /dst/ → 去掉 --dry-run | 确保目标与源完全一致 |
| 排除临时文件 | rsync -av --exclude='*.tmp' --exclude='cache/' /src/ /dst/ | 清理式同步 |
| 增量备份脚本 | 结合 date 命名目录 | rsync -av /data/ /backup/data_$(date +%F)/ |
| 同步后删除源文件 | rsync --remove-source-files ... | 移动而非复制 |
| 查看同步差异 | rsync -avn --delete /src/ /dst/ | 仅显示将发生的变更 |
49.ssh-keygen
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 生成、管理和转换 SSH 密钥对 | 用于无密码登录、身份认证 | ssh-keygen |
| 常用选项 | -t type | 指定密钥类型(rsa, dsa, ecdsa, ed25519)✅ 推荐 ed25519 | ssh-keygen -t ed25519 |
| -b bits | 指定密钥长度(RSA 用,如 2048, 4096) | ssh-keygen -t rsa -b 4096 |
| -f filename | 指定密钥文件名 | ssh-keygen -f ~/.ssh/id_mykey |
| -C "comment" | 添加注释(通常是邮箱) | ssh-keygen -C "user@company.com" |
| -N "passphrase" | 设置密码短语(空为无密码) | ssh-keygen -N "" |
| -p | 修改现有密钥的密码短语 | ssh-keygen -p -f ~/.ssh/id_rsa |
| -l -f keyfile | 显示密钥指纹(fingerprint) | ssh-keygen -l -f ~/.ssh/id_rsa |
| -y -f keyfile | 从私钥提取公钥 | ssh-keygen -y -f ~/.ssh/id_rsa > id_rsa.pub |
| 高频场景 | 生成新密钥 | ssh-keygen -t ed25519 -C "your_email" | |
| 无密码密钥 | ssh-keygen -t rsa -b 2048 -N "" | 自动化脚本用(注意安全) |
| 转换 OpenSSH 到 PEM | ssh-keygen -p -m PEM -f key | 兼容旧工具 |
| 查看服务器公钥指纹 | ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub | 验证主机真实性 |
| 注意事项 | - 私钥 (id_rsa) 必须保密,权限应为 600 - 公钥 (id_rsa.pub) 可分发,放入 ~/.ssh/authorized_keys - ed25519 比 RSA 更安全高效,优先使用 | | |
50.nc
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 网络瑞士军刀:读写网络连接 | 端口扫描、文件传输、端口监听、代理 | nc host port |
| 常用选项 | -l | 监听模式(server) | nc -l 8080 |
| -p port | 指定本地端口(客户端) | nc -l -p 8080 |
| -v | 详细输出 | nc -v google.com 80 |
| -w sec | 连接超时时间 | nc -w 5 host port |
| -z | 扫描模式(不发送数据) | nc -zv host 22-80 |
| -u | 使用 UDP 协议 | nc -u host 53 |
| -k | 监听时保持服务,处理多个连接 | nc -lk 8080 |
| -e program | 连接建立后执行程序(危险,后门) | nc -l -p 4444 -e /bin/sh ⚠️ |
| 高频场景 | 端口连通性测试 | nc -zv host port | 检查防火墙 |
| 端口扫描 | nc -zv host 20-100 | 快速扫描 |
| 文件传输 | 接收端: nc -l 1234 > file发送端: nc host 1234 < file | 简单传文件 |
| 简易 Web 服务器 | `echo -e “HTTP/1.1 200 OK\n\nHello” | nc -l 8080` |
| 测试 UDP 服务 | nc -u -zv host 53 | DNS 连通性 |
| 注意事项 | - nc 无加密,敏感数据用 socat 或 ssh - -e 选项极不安全,生产环境禁用 - 某些系统为 ncat (nmap 套件) 或 netcat | | |
51.history
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 显示、操作 shell 命令历史记录 | 回溯、重用、搜索之前执行的命令 | history |
| 常用选项 | (无选项) | 显示完整历史(带编号) | history |
| N | 显示最近 N 条命令 | history 10 |
| history -c | 清除当前会话历史 | history -c |
| history -d N | 删除第 N 条历史命令 | history -d 50 |
| history -w | 将历史写入文件(~/.bash_history) | history -w |
| history -r | 从文件重新加载历史 | history -r |
| 快捷键 | ↑/↓ | 上下浏览历史命令 | |
| Ctrl+R | 增量搜索历史(reverse-i-search)✅ | Ctrl+R + 输入关键词 |
| !n | 执行历史中第 n 条命令 | !50 |
| !! | 重复上一条命令 | sudo !! |
| !string | 执行最近以 string 开头的命令 | !grep |
| !?string | 执行包含 string 的最近命令 | !?log |
| 环境变量 | $HISTSIZE | 内存中保存的历史条数 | export HISTSIZE=1000 |
| $HISTFILESIZE | 历史文件中保存的最大条数 | export HISTFILESIZE=2000 |
| $HISTFILE | 历史文件路径(默认 ~/.bash_history) | |
| $HISTCONTROL | 控制记录(ignorespace, ignoredups, erase) | export HISTCONTROL=ignoredups |
| 注意事项 | - 历史仅对当前会话有效,关闭前用 history -w 保存 - 敏感命令前加空格可避免记录(若 HISTCONTROL 含 ignorespace) - 多个终端时历史可能不完全同步 | | |
52.scp
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 安全复制文件(基于 SSH) | 在本地和远程主机间加密传输文件 | scp source target |
| 常用选项 | -P port | 指定 SSH 端口(大写 P) | scp -P 2222 file user@host:/path |
| -r | 递归复制目录 | scp -r /local/dir user@host:/remote/ |
| -p | 保留文件修改时间、访问时间、权限 | scp -p file ... |
| -C | 启用压缩传输 | scp -C largefile ... |
| -i keyfile | 指定私钥文件 | scp -i ~/.ssh/id_rsa ... |
| -q | 静默模式(不显示进度) | scp -q ... |
| -l limit | 限制带宽(KB/s) | scp -l 800 ... |
| 传输方向 | 本地 → 远程 | scp /local/file user@host:/remote/path | |
| 远程 → 本地 | scp user@host:/remote/file /local/path | |
| 远程 → 远程 | scp user1@host1:/file user2@host2:/path | 通过本机中转 |
| 高频场景 | 上传文件 | scp -P 2222 config.txt admin@server:/tmp/ | |
| 下载文件 | scp user@host:~/data.tar.gz ./ | |
| 同步目录 | scp -r -C /data/ user@backup:/backup/ | 压缩传输 |
| 使用密钥 | scp -i ~/.ssh/aws-key.pem file ubuntu@ec2:/home/ | AWS EC2 上传 |
| 注意事项 | - 基于 SSH,需确保 SSH 连通和权限 - 端口是 -P(大写),不是 -p - 对于大量文件/增量同步,rsync 更高效 - 文件路径中 ~ 可能不被远程 shell 解析,建议用绝对路径 | | |
53.dd
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 转换和复制文件(位级别) | 创建镜像、烧录 U 盘、测速、清零 | dd if=源 of=目标 |
| 核心参数 | if=文件 | 输入文件(input file) | if=/dev/sda |
| of=文件 | 输出文件(output file) | of=/dev/sdb |
| bs=大小 | 块大小(如 512B, 1K, 1M)✅ 影响性能 | bs=4M |
| count=N | 复制 N 个块 | count=100 |
| skip=N | 输入跳过 N 个块 | skip=1 |
| seek=N | 输出跳过 N 个块 | seek=1 |
| conv=参数 | 转换选项(notrunc, sync, fdatasync) | conv=notrunc |
| 常用组合 | bs=1M count=1024 | 复制 1G 数据 | dd if=/dev/zero of=test bs=1M count=1024 |
| bs=4M | 大块提高磁盘复制速度 | dd if=src.img of=/dev/sdX bs=4M |
| conv=notrunc | 不截断输出文件(用于部分写入) | dd of=file conv=notrunc seek=1 |
| status=progress | 显示实时进度(GNU coreutils)✅ | dd ... status=progress |
| 高频场景 | 创建空文件 | dd if=/dev/zero of=file bs=1M count=100 | 100MB 文件 |
| 测磁盘写速度 | dd if=/dev/zero of=test bs=1G count=1 oflag=direct | 绕过缓存 |
| 烧录 ISO 到 U 盘 | dd if=system.iso of=/dev/sdX bs=4M status=progress | |
| 备份 MBR | dd if=/dev/sda of=mbr.bak bs=512 count=1 | |
| 恢复 MBR | dd if=mbr.bak of=/dev/sda bs=512 count=1 | |
| ⚠️ 注意事项 | dd 极其危险! 写错 of= 会永久覆盖数据! 操作前务必确认 of= 设备正确 使用 lsblk 或 fdisk -l 仔细核对设备名 建议先用 dd 创建小文件测试 | | |
54.ss
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 显示套接字(socket)统计信息 | 替代 netstat,更快更高效 | ss |
| 常用选项 | -t | 显示 TCP 连接 | ss -t |
| -u | 显示 UDP 连接 | ss -u |
| -l | 显示监听状态的套接字(listening) | ss -tl |
| -p | 显示进程/程序名 | ss -tlp ✅ |
| -n | 数字化显示(不解析服务名、主机名) | ss -tn |
| -a | 显示所有状态(包括监听和非监听) | ss -tln |
| -r | 解析主机名(与 -n 相反) | ss -tr |
| -s | 显示套接字使用统计摘要 | ss -s |
| -e | 显示详细信息(如 TOS, TS) | ss -te |
| -i | 显示 TCP 内部信息(拥塞控制) | ss -ti |
| -f FAMILY | 指定协议族(inet, inet6, unix) | ss -f inet |
| 高频场景 | 查看监听端口 | ss -tlnp ✅ | 找服务端口 |
| 查看所有 TCP 连接 | ss -tan | 分析连接数 |
| 查看特定端口 | `ss -tlnp | grep :80` |
| 查看 ESTABLISHED 连接 | ss -t state established | |
| 查看 UDP 连接 | ss -ulnp | |
| 统计连接状态 | ss -s | 快速看网络概况 |
| 注意事项 | - ss 比 netstat 更快,推荐使用 - LISTEN 状态需 -l 才显示 - 查看进程需 sudo 或足够权限(否则 users:(("...",pid=xxx,fd=xxx))) - 输出字段:State, Recv-Q, Send-Q, Local Address:Port, Peer Address:Port | | |
55.telnet
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 远程登录协议客户端 / 通用 TCP 连通性测试 | 测试端口开放、简单通信 | telnet host port |
| 常用用法 | telnet host | 连接远程登录服务(默认端口 23) | telnet 192.168.1.1 |
| telnet host port | 连接指定端口(HTTP, SMTP 等)✅ 测试用 | telnet smtp.com 25 |
| telnet | 进入交互模式,使用命令 | telnet> open host port |
| 交互命令 | open host port | 建立新连接 | telnet> open google.com 80 |
| close | 关闭当前连接 | telnet> close |
| quit | 退出 telnet | telnet> quit |
| set localecho | 本地回显(输入可见) | 调试用 |
| 高频场景 | 测试 Web 服务 | telnet www.site.com 80 → GET / HTTP/1.0 → 回车 | 手动发 HTTP |
| 测试邮件服务 | telnet mail.server 25 → EHLO client | SMTP 诊断 |
| 测试数据库 | telnet db.host 3306 | 看能否连通 |
| 测试自定义服务 | telnet localhost 8080 | 开发调试 |
| ⚠️ 注意事项 | - telnet 传输明文(包括密码),绝不用于生产登录! - 仅用于端口连通性测试或调试协议 - 现代系统常不预装,可用 nc 替代测试 - 连接后需手动输入协议命令(如 HTTP 的 GET)并回车两次 | | |
56.ping
| 类别 | 选项 / 用法 | 说明 | 示例 |
|---|
| 基本功能 | 发送 ICMP ECHO 请求包,测试网络连通性 | 检查主机是否可达、测量网络延迟和稳定性 | ping google.com |
| 常用选项 | -c N | 发送 N 个数据包后自动停止 ✅ | ping -c 4 8.8.8.8 |
| -i interval | 设置发送包的时间间隔(秒) | ping -i 0.5 host(每 0.5 秒发一个) |
| -s size | 设置 ICMP 数据包的大小(字节) | ping -s 1000 host(发送 1000 字节数据) |
| -W timeout | 等待每个回复的超时时间(秒) | ping -W 3 host(3 秒未回应则超时) |
| -w deadline | 设置 ping 命令总的执行时间(秒) | ping -w 10 host(运行 10 秒后退出) |
| -I interface/IP | 指定发送包的源网络接口或 IP 地址 | ping -I eth0 192.168.1.1 |
| -t ttl | 设置数据包的生存时间(TTL) | ping -t 64 host |
| -q | 静默模式,只显示最终统计摘要 | ping -qc 10 host(脚本中常用) |
| -n | 数字化输出,不解析主机名和服务名 | ping -n 1.1.1.1 |
| -b | 允许 ping 广播地址(需特权) | ping -b 192.168.1.255 |
| -R | 记录路由(Record Route) | ping -R host(部分系统支持) |
| 输出字段详解 | PING ... | 命令信息:目标主机、IP、数据包大小 | PING google.com (142.250.180.78): 56 data bytes |
| 64 bytes from ... | 收到回复:大小、来源 IP、序列号、TTL、往返时间 | 64 bytes from 142.250.180.78: icmp_seq=1 ttl=116 time=12.3 ms |
| icmp_seq | ICMP 序列号,用于匹配请求和回复 | |
| ttl | Time To Live,每经过一个路由器减 1 | 可大致判断网络跳数 |
| time | 往返延迟(Round-Trip Time, RTT),单位毫秒(ms)✅ 关键指标 | time=15.7 ms |
| --- host ping statistics --- | 统计摘要开始 | |
| X packets transmitted | 发送的数据包总数 | |
| Y packets received | 接收到的回复包数 | |
| Z% packet loss | 丢包率,衡量网络稳定性 ✅ | 0% packet loss |
| min/avg/max/mdev | 延迟的最小值、平均值、最大值和均方差 | min/avg/max/mdev = 10.1/12.5/15.0/1.8 ms |
| 高频使用场景 | 基本连通性测试 | ping -c 3 8.8.8.8 | 检查网关或 DNS 是否可达 |
| 持续监控网络 | ping google.com | 观察连接是否稳定(Ctrl+C 停止) |
| 测试服务器响应 | ping -c 10 your-server.com | 检查延迟和丢包 |
| 脚本中判断网络 | if ping -qc 1 host > /dev/null; then echo "UP"; fi | 自动化监控 |
| 测试 MTU(路径最大传输单元) | ping -s 1472 -M do host | 发送 1472 字节数据 + 28 字节头 = 1500 字节,-M do 禁止分片,不通则 MTU 更小 |
| 指定源地址测试 | ping -I 192.168.2.100 gateway | 多网卡环境下测试特定路径 |
| 注意事项 | - 防火墙可能阻止 ICMP:ping 不通不代表服务(如 HTTP)不可用。 - 延迟受多种因素影响:物理距离、网络拥塞、路由跳数、服务器负载。 - -c 选项至关重要:避免在终端中无限运行。 - 使用 mtr 或 traceroute 可进行更深入的路由诊断。 - 在 Windows 上,命令为 ping,选项略有不同(如 -n 代替 -c)。 | | |
| 替代/增强工具 | mtr | 结合 ping 和 traceroute,实时显示路径和延迟 | mtr google.com |
| fping | 可同时 ping 多个主机,适合脚本 | fping -g 192.168.1.1/24 |
| nping (nmap) | 功能更强大的网络探测工具 | nping --tcp -p 80 host |
57.iptables
| 类别 | 选项 / 语法 | 说明 | 示例 |
|---|
| 基本功能 | Linux 用户空间防火墙配置工具 | 基于 Netfilter 实现包过滤、NAT、连接跟踪 | iptables -A INPUT ... |
核心表 (-t table) | filter | 默认表,用于数据包过滤(INPUT, OUTPUT, FORWARD)✅ | -t filter |
| nat | 网络地址转换(PREROUTING/DNAT, POSTROUTING/SNAT) | -t nat |
| mangle | 修改数据包头部(TTL, TOS),高级用途 | -t mangle |
| raw | 绕过连接跟踪(connection tracking) | -t raw |
| 核心链 | INPUT | 处理进入本机的数据包 | -A INPUT |
| OUTPUT | 处理本机发出的数据包 | -A OUTPUT |
| FORWARD | 处理转发经过本机的数据包(路由) | -A FORWARD |
| PREROUTING | 路由前处理(nat 表中用于 DNAT) | -t nat -A PREROUTING |
| POSTROUTING | 路由后处理(nat 表中用于 SNAT/Masquerade) | -t nat -A POSTROUTING |
| 管理命令 | -L [chain] | 列出规则(推荐 -n -v --line-numbers)✅ | iptables -L INPUT -n -v |
| -A chain | 追加规则到链末尾 | iptables -A INPUT -j DROP |
| -I chain [num] | 插入规则到指定位置(1为最前) | iptables -I INPUT 1 -s 192.168.1.1 -j ACCEPT |
| -D chain num | 删除第 num 条规则 | iptables -D INPUT 2 |
| -F [chain] | 清空指定链(慎用)⚠️ | iptables -F INPUT |
| -P chain target | 设置链的默认策略(ACCEPT, DROP, REJECT)⚠️ | iptables -P INPUT DROP |
| -N chain / -X chain | 创建 / 删除自定义链 | iptables -N MYCHAIN |
| -S | 以命令形式输出所有规则(可重载) | iptables -S > rules.txt |
| 匹配条件 (matches) | -p tcp/udp/icmp | 指定协议 | -p tcp |
| --dport port | 目标端口(需 -p tcp/udp) | --dport 22 |
| --sport port | 源端口 | --sport 1024:65535 |
| -s ip/mask | 源 IP 地址或网段 | -s 192.168.1.0/24 |
| -d ip/mask | 目标 IP 地址或网段 | -d 10.0.0.5 |
| -i interface | 输入接口(INPUT/FORWARD) | -i eth0 |
| -o interface | 输出接口(OUTPUT/FORWARD) | -o eth1 |
| -m state --state | 连接状态(NEW, ESTABLISHED, RELATED)✅ | -m state --state ESTABLISHED,RELATED |
| -m mac --mac-source | 匹配源 MAC 地址 | -m mac --mac-source AA:BB:CC:DD:EE:FF |
| 目标动作 (target) | -j ACCEPT | 接受并放行数据包 | -j ACCEPT |
| -j DROP | 丢弃数据包(静默)✅ | -j DROP |
| -j REJECT | 拒绝并返回错误 | -j REJECT --reject-with icmp-port-unreachable |
| -j SNAT --to-source ip | 源地址转换(静态) | ... -j SNAT --to-source 203.0.113.1 |
| -j MASQUERADE | 源地址转换(动态,适合拨号)✅ | ... -j MASQUERADE |
| -j DNAT --to-destination ip | 目的地址转换(端口转发) | ... -j DNAT --to-destination 192.168.1.100 |
| -j LOG --log-prefix "MSG" | 记录日志(需配合 syslog) | -j LOG --log-prefix "FIREWALL: " |
| -j REDIRECT --to-ports | 重定向到本机端口(透明代理) | -j REDIRECT --to-ports 8080 |
| 高频场景 | 允许 SSH | iptables -A INPUT -p tcp --dport 22 -j ACCEPT | |
| 基础防火墙策略 | <br>iptables -P INPUT DROP<br>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br>iptables -A OUTPUT -j ACCEPT<br> | 安全默认策略 |
| 开放 Web 服务 | iptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables -A INPUT -p tcp --dport 443 -j ACCEPT | |
| 端口转发 (DNAT) | <br>echo 1 > /proc/sys/net/ipv4/ip_forward<br>iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:8080<br> | |
| 共享上网 (SNAT) | <br>echo 1 > /proc/sys/net/ipv4/ip_forward<br>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<br> | 内网共享公网IP上网 |
| 持久化 | 保存规则 | iptables-save > /etc/iptables/rules.v4 | |
| 恢复规则 | iptables-restore < /etc/iptables/rules.v4 | |
| 系统服务 | Debian/Ubuntu: netfilter-persistent save CentOS/RHEL: service iptables save | 重启后生效 |
| 注意事项 | • 规则顺序决定行为,从上到下匹配。 • 修改默认策略 (-P) 前,确保已有允许 SSH 的规则,否则可能失联! • 使用 -n -v 查看规则更清晰(显示 IP 和端口)。 • -A 追加到末尾,-I 插入到开头,行为不同。 • 生产环境推荐使用 ufw 或 firewalld 等前端工具。 • 现代系统推荐使用 nftables 替代。 | | |