文档说明:本手册覆盖Linux系统全场景高频核心命令,基于主流发行版(CentOS/Rocky/RHEL 7+、Debian/Ubuntu 16+)编写,兼顾POSIX标准规范与生产环境最佳实践,包含命令语法、核心选项、实战示例、风险提示与底层原理说明,适合从入门到资深运维全阶段用户查阅。
一、命令行基础规范与核心符号
1.1 命令通用语法格式
command [OPTIONS] [ARGUMENTS]
command:可执行命令(内置命令/外部二进制程序/Shell脚本)OPTIONS:选项,分为短选项(单横杠-,如-l)和长选项(双横杠--,如--help),多个短选项可合并(如-lha等价于-l -h -a)ARGUMENTS:参数,命令的操作对象(文件、目录、用户等)
1.2 核心特殊符号与语法
| 符号 | 功能说明 | 典型示例 |
|---|---|---|
| ` | ` | 管道符,将前一个命令的标准输出作为后一个命令的标准输入 |
> | 标准输出重定向(覆盖模式) | echo "test" > file.txt |
>> | 标准输出重定向(追加模式) | echo "test" >> file.txt |
< | 标准输入重定向 | wc -l < file.txt |
<< | Here Document,多行输入重定向 | cat << EOF > file.txtline1line2EOF |
2> | 标准错误重定向 | command 2> error.log |
&> | 标准输出+标准错误合并重定向 | command &> output.log |
&& | 逻辑与,前一条命令执行成功(退出码0)才执行后一条 | mkdir test && cd test |
| ` | ` | |
& | 后台运行命令 | sh script.sh & |
* | 通配符,匹配任意长度任意字符 | ls *.log |
? | 通配符,匹配单个任意字符 | ls file?.txt |
[] | 通配符,匹配括号内任意单个字符 | ls file[1-3].txt |
() | 子Shell执行命令组,不影响当前Shell环境 | (cd /tmp && ls) |
{} | 当前Shell执行命令组,批量生成序列 | touch file{1..5}.txt |
# | 注释符,该行后续内容不执行 | # 这是一行注释 |
$ | 变量引用符 | echo $PATH |
\ | 转义符,取消特殊字符的含义 | echo "hello \$PATH" |
; | 命令分隔符,顺序执行多条命令,不校验执行结果 | cd /tmp; ls; pwd |
1.3 核心快捷键
| 快捷键 | 功能说明 |
|---|---|
Tab | 命令/路径/文件名自动补全(按2次列出所有匹配项) |
Ctrl + C | 强制终止当前正在执行的命令 |
Ctrl + D | 退出当前Shell终端/结束输入 |
Ctrl + Z | 挂起当前命令到后台(可用fg恢复) |
Ctrl + R | 反向搜索历史命令 |
Ctrl + A | 光标跳转到行首 |
Ctrl + E | 光标跳转到行尾 |
Ctrl + U | 删除光标到行首的所有内容 |
Ctrl + K | 删除光标到行尾的所有内容 |
Ctrl + L | 清屏(等价于clear命令) |
二、文件与目录核心操作命令
2.1 目录导航与查看
pwd
- 功能:打印当前工作目录的绝对路径
- 语法:
pwd [OPTIONS] - 核心选项:
-L:显示逻辑路径(默认),跟随符号链接-P:显示物理路径,不跟随符号链接
- 示例:
pwd cd /var/log && pwd -P
cd
- 功能:切换工作目录
- 语法:
cd [目录路径] - 核心用法:
cd /etc # 切换到绝对路径/etc cd ~ # 切换到当前用户家目录,等价于cd cd .. # 切换到上一级目录 cd ../.. # 切换到上两级目录 cd - # 切换到上一次所在的目录 cd $HOME # 切换到当前用户家目录
ls
- 功能:列出目录内容,Linux最高频命令
- 语法:
ls [OPTIONS] [路径] - 核心选项:
选项 功能说明 -l长格式列出,显示文件权限、所有者、大小、修改时间等详细信息 -a显示所有文件,包括以 .开头的隐藏文件-h人性化显示文件大小(KB/MB/GB/TB),需配合 -l使用-i显示文件的inode号 -d仅列出目录本身,不列出目录内的内容 -t按文件修改时间倒序排序 -r反向排序 -S按文件大小倒序排序 -R递归列出子目录内容 - 高频示例:
ls -lha # 查看当前目录所有文件的详细信息,人性化显示大小 ls -ld /etc # 查看/etc目录本身的属性,而非内部内容 ls -lht /var/log # 按修改时间倒序列出日志文件 ls -i # 查看文件inode号
tree
- 功能:以树形结构展示目录层级
- 语法:
tree [OPTIONS] [路径] - 核心选项:
-L N:限制展示的层级深度为N-d:仅显示目录,不显示文件-h:人性化显示文件大小-I 模式:排除匹配通配符的文件/目录
- 示例:
tree -L 2 /etc # 展示/etc目录下2级目录结构 tree -d /home # 仅展示/home下的目录树形结构
2.2 目录与文件创建/删除
mkdir
- 功能:创建目录
- 语法:
mkdir [OPTIONS] 目录名 - 核心选项:
-p:递归创建多级目录,父目录不存在时自动创建-m 权限:创建目录时直接指定权限(如-m 755)
- 示例:
mkdir test # 创建单个目录 mkdir -p a/b/c/d # 递归创建多级目录 mkdir -m 700 private_dir # 创建权限为700的目录 mkdir dir1 dir2 dir3 # 批量创建多个目录 mkdir project/{bin,conf,log,src} # 批量创建项目子目录
rmdir
- 功能:删除空目录(仅能删除空目录,安全系数高)
- 语法:
rmdir [OPTIONS] 目录名 - 核心选项:
-p:递归删除多级空目录
- 示例:
rmdir empty_dir rmdir -p a/b/c/d # 从最内层开始删除,直到遇到非空目录
touch
- 功能:创建空文件,或修改文件的时间戳
- 语法:
touch [OPTIONS] 文件名 - 核心选项:
-a:仅修改文件的访问时间-m:仅修改文件的修改时间-t 时间戳:指定文件的时间戳(格式YYYYMMDDhhmm.ss)
- 示例:
touch file.txt # 创建空文件,文件已存在则更新时间戳 touch file1.txt file2.txt # 批量创建多个空文件 touch -t 202501010000.00 test.txt # 修改文件时间戳为2025-01-01
rm
- 功能:删除文件或目录,高危命令
- 语法:
rm [OPTIONS] 目标文件/目录 - 核心选项:
选项 功能说明 -r递归删除目录及目录内所有内容(删除目录必须加此选项) -f强制删除,忽略不存在的文件,不提示确认 -i交互式删除,每删除一个文件都提示用户确认 -v显示删除的详细过程 - 高频示例:
rm file.txt # 删除单个文件 rm -f file.txt # 强制删除文件,无提示 rm -r test_dir # 递归删除目录及内容 rm -rf test_dir # 强制递归删除目录,生产环境最高频用法 rm -i *.log # 交互式删除当前目录下所有.log文件 - ⚠️ 高危警告:
rm删除的文件默认无法恢复,严禁执行rm -rf /、rm -rf /*、rm -rf .等命令,会直接导致系统崩溃、数据全丢失- 执行带变量/通配符的
rm命令前,必须先用echo验证目标(如echo rm -rf $path/*),避免变量为空导致执行rm -rf /* - 生产环境建议替换
rm为mv到回收站,或添加-i交互选项
2.3 文件复制、移动与重命名
cp
- 功能:复制文件或目录
- 语法:
cp [OPTIONS] 源文件/目录 目标路径/目标名 - 核心选项:
选项 功能说明 -r递归复制目录及所有子内容(复制目录必须加此选项) -a归档模式,递归复制并保留文件的所有属性(权限、所有者、时间戳、软硬链接),备份首选 -f强制覆盖目标文件,不提示 -i交互式覆盖,覆盖前提示用户确认 -p保留文件的权限、所有者、时间戳属性 -u仅当源文件比目标文件新,或目标文件不存在时才复制 -v显示复制的详细过程 -l创建硬链接,而非复制文件内容 -s创建软链接(符号链接),而非复制文件内容 - 高频示例:
cp file.txt /tmp/ # 复制文件到/tmp目录 cp file.txt /tmp/new_file.txt # 复制并重命名文件 cp -a /home/user /backup/ # 归档复制用户家目录,保留所有属性 cp -r test_dir /tmp/ # 递归复制目录到/tmp cp -u *.log /backup/logs/ # 仅复制更新过的日志文件 cp -p file.txt /tmp/ # 复制文件并保留原属性
mv
- 功能:移动文件/目录,或重命名文件/目录
- 语法:
mv [OPTIONS] 源文件/目录 目标路径/目标名 - 核心选项:
-f:强制覆盖目标文件,不提示-i:交互式覆盖,覆盖前提示确认-u:仅当源文件比目标文件新时才覆盖-v| 显示移动的详细过程 |
- 高频示例:
mv file.txt /tmp/ # 移动文件到/tmp目录 mv old_name.txt new_name.txt # 重命名文件(同目录下移动等价于重命名) mv test_dir /tmp/ # 移动目录(无需递归选项) mv -i *.log /tmp/ # 交互式移动所有.log文件 mv file1.txt file2.txt /tmp/ # 批量移动多个文件
2.4 链接管理
ln
- 功能:创建硬链接或软链接(符号链接)
- 语法:
ln [OPTIONS] 源文件 链接名 - 核心选项:
-s:创建软链接(符号链接),默认创建硬链接-f:强制覆盖已存在的链接文件-i| 覆盖前提示确认 |
- 核心原理说明:
特性 硬链接 软链接(符号链接) inode号 与源文件共用同一个inode 拥有独立的inode号 跨文件系统 不支持 支持 目录支持 不支持 支持 源文件删除 链接文件依然有效,内容可正常访问 链接失效,成为死链接 相对路径 无影响 必须使用绝对路径,否则移动链接后会失效 - 高频示例:
ln /data/file.txt hard_link.txt # 创建硬链接 ln -s /data/file.txt soft_link.txt # 创建软链接(必须用绝对路径) ln -sf /data/new_file.txt soft_link.txt # 强制修改软链接指向 ln -s /data/logs /var/log/nginx_logs # 给目录创建软链接
三、文件内容查看与编辑命令
3.1 文件内容查看
cat
- 功能:正序查看文件内容,拼接多个文件
- 语法:
cat [OPTIONS] 文件名 - 核心选项:
-n:显示所有行的行号-b:仅显示非空行的行号-s:将多个连续的空行合并为一个空行-A:显示不可见字符(换行符、制表符等)
- 示例:
cat file.txt # 查看文件全部内容 cat -n file.txt # 查看文件并显示行号 cat file1.txt file2.txt # 拼接多个文件内容输出 cat > new_file.txt << EOF # 快速创建并写入文件内容 line1 line2 EOF
tac
- 功能:倒序查看文件内容(从最后一行到第一行),与
cat相反 - 语法:
tac 文件名 - 示例:
tac file.txt tac /var/log/nginx/access.log # 倒序查看访问日志,最新日志在最前
more
- 功能:分页查看文件内容,适合大文件
- 语法:
more 文件名 - 核心交互操作:
- 回车:向下滚动一行
- 空格:向下滚动一屏
b:向上滚动一屏/关键词:向下搜索关键词q:退出查看
- 示例:
more /var/log/messages ls -lha | more # 管道分页查看长输出
less
- 功能:分页查看文件内容,
more的增强版,Linux查看大文件首选 - 语法:
less [OPTIONS] 文件名 - 核心优势:支持上下双向滚动、实时刷新、搜索高亮,加载大文件无需读取全部内容,速度极快
- 核心交互操作:
- 上下方向键:逐行滚动
- 空格/
PageDown:向下翻一屏 b/PageUp:向上翻一屏g:跳转到文件开头G:跳转到文件结尾/关键词:向下搜索关键词,n跳转到下一个匹配项,N跳转到上一个?关键词:向上搜索关键词F:实时刷新文件末尾(等价于tail -f,按Ctrl+C退出)q:退出查看
- 示例:
less /var/log/nginx/access.log less -N /etc/passwd # 显示行号查看 dmesg | less # 查看内核日志
head
- 功能:查看文件开头的内容,默认显示前10行
- 语法:
head [OPTIONS] 文件名 - 核心选项:
-n N:显示前N行,简写-N-c N:显示前N个字节
- 示例:
head file.txt # 显示文件前10行 head -20 file.txt # 显示文件前20行 head -n 5 /etc/passwd # 查看系统前5个用户 head -c 100 file.txt # 显示文件前100个字节
tail
- 功能:查看文件末尾的内容,默认显示后10行,实时查看日志首选
- 语法:
tail [OPTIONS] 文件名 - 核心选项:
选项 功能说明 -n N显示后N行,简写 -N-f实时跟踪文件末尾的新增内容,按 Ctrl+C退出-F等价于 -f --retry,文件被删除重建后会自动重新跟踪,日志滚动场景首选-c N显示后N个字节 - 高频示例:
tail file.txt # 显示文件后10行 tail -30 file.txt # 显示文件后30行 tail -f /var/log/nginx/access.log # 实时跟踪nginx访问日志 tail -F /var/log/messages # 实时跟踪系统日志,支持日志滚动 tail -n +100 file.txt # 从第100行开始显示到文件末尾
nl
- 功能:显示文件内容并自动添加行号,比
cat -n更灵活 - 语法:
nl [OPTIONS] 文件名 - 核心选项:
-ba:所有行都显示行号(包括空行)-bt:仅非空行显示行号(默认)-n ln| 行号左对齐 |
- 示例:
nl file.txt nl -ba file.txt # 空行也显示行号
od
- 功能:以二进制、八进制、十六进制等格式查看文件内容,适合查看非文本文件
- 语法:
od [OPTIONS] 文件名 - 核心选项:
-t x1:以十六进制格式显示,每个字节单独显示-t c:以ASCII字符格式显示-a:以八进制格式显示
- 示例:
od -t x1 binary_file od -c /usr/bin/ls
3.2 文本编辑器
vi/vim
- 功能:Linux系统标配的终端文本编辑器,功能极其强大,运维必备
- 核心说明:vim是vi的增强版,完全兼容vi的所有命令,主流发行版均默认安装
- 三大核心模式:
- 命令模式(默认模式):打开文件后默认进入,可执行光标移动、复制、粘贴、删除、搜索等操作,按
Esc可从其他模式回到命令模式 - 插入模式:用于编辑写入文件内容,按
i/a/o等键进入,左下角显示-- INSERT -- - 底线命令模式:用于执行保存、退出、替换、配置等操作,按
:进入
- 命令模式(默认模式):打开文件后默认进入,可执行光标移动、复制、粘贴、删除、搜索等操作,按
- 命令模式高频操作:
操作 功能说明 i在光标当前位置前进入插入模式 a在光标当前位置后进入插入模式 o在光标当前行下方新建一行并进入插入模式 O在光标当前行上方新建一行并进入插入模式 I跳转到当前行首并进入插入模式 A跳转到当前行尾并进入插入模式 gg跳转到文件开头 G跳转到文件结尾 ngg/nG跳转到第n行 0跳转到当前行首 $跳转到当前行尾 dd删除光标当前行 ndd删除从当前行开始的n行 yy复制光标当前行 nyy复制从当前行开始的n行 p在光标下方粘贴复制/删除的内容 P在光标上方粘贴复制/删除的内容 u撤销上一步操作 Ctrl + r恢复撤销的操作 /关键词向下搜索关键词, n下一个,N上一个?关键词向上搜索关键词 x删除光标当前位置的单个字符 dw删除光标当前位置到单词结尾的内容 yw复制光标当前位置到单词结尾的内容 - 底线命令模式高频操作:
命令 功能说明 :w保存文件 :w 文件名另存为指定文件 :q退出vim :q!强制退出,不保存修改 :wq/:x保存并退出 :wq!强制保存并退出(只读文件需root权限) :set nu显示行号 :set nonu关闭行号显示 :set ic搜索时忽略大小写 :set noic搜索时区分大小写 :s/old/new/替换当前行第一个匹配的old为new :s/old/new/g替换当前行所有匹配的old为new :%s/old/new/g替换整个文件所有匹配的old为new :%s/old/new/gc替换整个文件所有匹配项,每次替换前提示确认 :n,m s/old/new/g替换第n行到第m行所有匹配的old为new :! 命令临时执行Shell命令,按回车回到vim :r 文件名将另一个文件的内容读取到当前光标位置 :set fileformat=unix将文件格式转为unix格式(解决Windows换行符问题) - 高频示例:
vim file.txt # 打开/创建文件 vim +100 file.txt # 打开文件并跳转到第100行 vim +/关键词 file.txt # 打开文件并定位到第一个关键词匹配处 vim -R file.txt # 以只读模式打开文件
nano
- 功能:轻量级终端文本编辑器,操作简单,适合新手,部分发行版默认预装
- 语法:
nano 文件名 - 核心操作:底部显示快捷键提示,
^代表Ctrl键Ctrl + O:保存文件Ctrl + X:退出编辑器Ctrl + W:搜索内容Ctrl + K:剪切当前行Ctrl + U:粘贴剪切的内容
- 示例:
nano file.txt
四、权限管理命令
Linux权限核心说明:Linux系统中一切皆文件,每个文件/目录都有3类用户权限(所有者u、所属组g、其他用户o),3种基础权限(读r、写w、执行x),对应数字权限:r=4、w=2、x=1,权限值为3个数字之和(如rwxr-xr-x对应数字权限755)。
4.1 权限修改
chmod
- 功能:修改文件/目录的权限,核心命令
- 语法:
chmod [OPTIONS] 权限 目标文件/目录 - 核心选项:
-R:递归修改目录及所有子文件/子目录的权限-v:显示权限修改的详细过程
- 两种权限设置方式:
- 数字权限方式(生产环境首选)
chmod 755 file.txt # 设置文件权限为rwxr-xr-x chmod 644 file.txt # 普通文件推荐权限,rw-r--r-- chmod 700 private_dir # 私人目录推荐权限,rwx------ chmod -R 755 /data/app # 递归修改目录及所有内容权限 - 符号权限方式
符号 说明 操作符 权限 u 所有者user + 增加权限 r 读 g 所属组group - 移除权限 w 写 o 其他用户other = 覆盖设置权限 x 执行 a 所有用户all s SUID/SGID t 粘滞位 chmod u+x file.txt # 给所有者增加执行权限 chmod g-w,o-r file.txt # 移除所属组的写权限、其他用户的读权限 chmod a=r file.txt # 给所有用户设置只读权限 chmod u=rwx,g=rx,o=rx file.txt # 等价于755权限
- 数字权限方式(生产环境首选)
- 特殊权限说明:
- SUID(4xxx):仅对二进制可执行文件生效,用户执行该文件时,将以文件所有者的权限执行,典型示例
/usr/bin/passwdchmod 4755 /usr/bin/xxx chmod u+s /usr/bin/xxx - SGID(2xxx):对目录生效,目录内新建的文件/目录将继承该目录的所属组,适合团队协作目录
chmod 2775 /data/team_dir chmod g+s /data/team_dir - Sticky Bit粘滞位(1xxx):仅对目录生效,仅文件所有者、root能删除目录内的文件,典型示例
/tmp目录chmod 1777 /tmp chmod o+t /tmp
- SUID(4xxx):仅对二进制可执行文件生效,用户执行该文件时,将以文件所有者的权限执行,典型示例
- ⚠️ 安全警告:生产环境严禁使用
chmod -R 777,777权限意味着任何用户都可读写执行,严重违反最小权限原则,极易导致系统被入侵。
4.2 所有者与所属组修改
chown
- 功能:修改文件/目录的所有者和所属组,仅root用户可执行
- 语法:
chown [OPTIONS] 所有者[:所属组] 目标文件/目录 - 核心选项:
-R:递归修改目录及所有子内容的所有者/所属组-v:显示修改的详细过程
- 示例:
chown user1 file.txt # 修改文件所有者为user1 chown user1:group1 file.txt # 同时修改所有者为user1,所属组为group1 chown :group1 file.txt # 仅修改所属组为group1 chown -R user1:group1 /data/app # 递归修改目录及所有内容的所有者和所属组 chown -R root:root /data/ # 递归修改为root所有者
chgrp
- 功能:仅修改文件/目录的所属组,功能为
chown的子集 - 语法:
chgrp [OPTIONS] 所属组 目标文件/目录 - 核心选项:
-R:递归修改
- 示例:
chgrp group1 file.txt chgrp -R group1 /data/app
4.3 权限掩码与权限提升
umask
- 功能:查看/设置新建文件/目录的默认权限掩码
- 语法:
umask [掩码值] - 核心原理:
- 新建目录默认最大权限
777,最终权限=777-umask - 新建文件默认最大权限
666(默认不给执行权限),最终权限=666-umask
- 新建目录默认最大权限
- 示例:
umask # 查看当前掩码,默认0022 umask 0027 # 设置掩码为0027,新建目录750,新建文件640 - 永久生效:写入
/etc/profile(全局)或~/.bashrc(用户级)
sudo
- 功能:以其他用户(默认root)的权限执行命令,Linux权限安全核心
- 语法:
sudo [OPTIONS] 命令 - 核心选项:
-i:切换到root用户,加载root的环境变量-u 用户名:以指定用户的身份执行命令-l:查看当前用户的sudo权限
- 配置说明:sudo权限配置文件为
/etc/sudoers,必须使用visudo命令编辑,避免语法错误导致sudo失效 - 典型配置示例(
/etc/sudoers):# 允许wheel组所有用户执行所有命令,需要输入密码 %wheel ALL=(ALL) ALL # 允许user1用户执行所有命令,无需输入密码 user1 ALL=(ALL) NOPASSWD: ALL # 允许user2用户仅执行systemctl、nginx命令 user2 ALL=(ALL) /usr/bin/systemctl, /usr/sbin/nginx - 示例:
sudo systemctl restart nginx # 以root权限重启nginx sudo -i # 切换到root用户 sudo -u nginx ls /var/log/nginx # 以nginx用户执行命令 sudo visudo # 编辑sudo配置文件
su
- 功能:切换用户
- 语法:
su [OPTIONS] 用户名 - 核心选项:
-/-l:登录式切换,加载目标用户的环境变量,切换到目标用户家目录(推荐)-s:指定登录的Shell-c 命令:以目标用户身份执行单条命令,不切换终端
- 示例:
su - root # 登录式切换到root用户,需要输入root密码 su - user1 # 切换到普通用户user1 su - user1 -c "ls ~" # 以user1身份执行命令 - 与sudo的区别:
su需要输入目标用户的密码,sudo输入当前用户的密码,且可精细化控制权限,生产环境推荐使用sudo。
五、用户与用户组管理命令
5.1 用户管理
Linux用户信息存储在/etc/passwd文件,用户密码加密存储在/etc/shadow文件(仅root可读)。
useradd
- 功能:创建新用户,仅root用户可执行
- 语法:
useradd [OPTIONS] 用户名 - 核心选项:
选项 功能说明 -u UID指定用户的UID,默认从1000开始递增 -g 主组指定用户的主组(必须已存在) -G 附属组指定用户的附属组,多个组用逗号分隔 -d 家目录指定用户的家目录,默认 /home/用户名-s 登录Shell指定用户的登录Shell,默认 /bin/bash,禁止登录用/sbin/nologin-M不创建用户的家目录 -m强制创建用户的家目录(默认) -c 注释添加用户的描述信息 -e 过期时间指定用户的过期时间,格式 YYYY-MM-DD - 高频示例:
useradd user1 # 创建默认配置的用户user1 useradd -s /sbin/nologin nginx # 创建禁止登录的程序用户nginx useradd -u 1005 -g root -G wheel,admin user2 # 指定UID、主组、附属组 useradd -d /data/user3 -m user3 # 指定家目录并创建 useradd -e 2025-12-31 temp_user # 创建临时用户,2025年底过期
userdel
- 功能:删除用户,仅root用户可执行
- 语法:
userdel [OPTIONS] 用户名 - 核心选项:
-r:删除用户的同时,删除家目录、邮箱等所有相关文件-f:强制删除用户,即使用户正在登录
- 示例:
userdel user1 # 删除用户,保留家目录 userdel -r user2 # 删除用户及所有相关文件(推荐)
usermod
- 功能:修改已存在用户的属性,仅root用户可执行
- 语法:
usermod [OPTIONS] 用户名 - 核心选项:与
useradd基本一致,新增/修改用户属性-L:锁定用户,禁止登录-U:解锁用户-aG 附属组:给用户追加附属组(不覆盖原有附属组,推荐)
- 高频示例:
usermod -s /bin/bash nginx # 修改用户的登录Shell usermod -aG docker user1 # 给user1追加docker附属组 usermod -L user2 # 锁定用户 usermod -U user2 # 解锁用户 usermod -u 1006 -d /data/new_home -m user3 # 修改UID和家目录 usermod -e "" user4 # 取消用户的过期时间
passwd
- 功能:设置/修改用户密码,锁定/解锁用户,普通用户仅能修改自己的密码,root可修改所有用户密码
- 语法:
passwd [OPTIONS] 用户名 - 核心选项:
选项 功能说明 -l锁定用户密码,禁止登录 -u解锁用户密码 -d清空用户密码(生产环境严禁使用) -e强制用户下次登录必须修改密码 -n 天数设置密码最短使用天数 -x 天数设置密码最长使用天数 -w 天数设置密码过期前警告天数 - 高频示例:
passwd # 修改当前用户的密码 passwd user1 # root修改user1的密码 passwd -l user2 # 锁定用户 passwd -u user2 # 解锁用户 passwd -e user3 # 强制用户下次登录修改密码 passwd -d user4 # 清空用户密码
其他用户信息查询命令
id # 查看当前用户的UID、GID、所属组
id user1 # 查看指定用户的信息
whoami # 查看当前登录的用户名
who # 查看当前所有登录的用户
w # 查看所有登录用户及正在执行的命令
last # 查看用户登录历史记录
lastlog # 查看所有用户的最后一次登录时间
5.2 用户组管理
Linux用户组信息存储在/etc/group文件,组密码存储在/etc/gshadow文件。
groupadd
- 功能:创建用户组,仅root用户可执行
- 语法:
groupadd [OPTIONS] 组名 - 核心选项:
-g GID| 指定组的GID |-r| 创建系统组(GID小于1000) |
- 示例:
groupadd group1 groupadd -g 1005 group2 groupadd -r docker
groupdel
- 功能:删除用户组,仅root用户可执行
- 语法:
groupdel 组名 - 注意:不能删除用户的主组,必须先删除/修改对应用户
- 示例:
groupdel group1
groupmod
- 功能:修改用户组属性,仅root用户可执行
- 语法:
groupmod [OPTIONS] 组名 - 核心选项:
-g 新GID:修改组的GID-n 新组名:修改组名
- 示例:
groupmod -g 1006 group1 groupmod -n new_group old_group
gpasswd
- 功能:管理用户组的成员和密码
- 语法:
gpasswd [OPTIONS] 组名 - 核心选项:
-a 用户名:将用户添加到组-d 用户名:将用户从组中移除-M 用户列表:批量设置组成员,多个用户用逗号分隔-A 管理员列表:设置组的管理员
- 示例:
gpasswd -a user1 group1 # 将user1添加到group1 gpasswd -d user1 group1 # 将user1从group1移除 gpasswd -M user1,user2,user3 group1 # 批量设置组成员
六、进程与服务管理命令
6.1 进程查看
ps
- 功能:查看系统进程快照,Linux进程管理核心命令
- 语法:
ps [OPTIONS] - 核心选项分为两种风格:BSD风格(无横杠)和UNIX风格(有横杠)
- 高频组合用法:
ps aux # BSD风格,查看系统所有进程,最常用 # 字段说明:USER 进程所有者, PID 进程ID, %CPU CPU使用率, %MEM 内存使用率, VSZ 虚拟内存大小, RSS 物理内存大小, TTY 终端, STAT 进程状态, START 启动时间, TIME 累计CPU时间, COMMAND 进程命令 ps -ef # UNIX风格,查看系统所有进程,PPID为父进程ID ps -ef | grep nginx # 过滤查看nginx相关进程 ps -l # 查看当前终端的进程 ps -u root # 查看root用户的所有进程 ps -p 1234 -l # 查看指定PID的进程详细信息 - 进程状态STAT说明:
R:运行中S:休眠中D:不可中断的休眠(通常为IO阻塞)Z:僵尸进程T:停止/挂起s:会话首进程l:多线程进程+:前台进程组
top
- 功能:实时动态监控系统进程与资源使用情况,任务管理器
- 语法:
top [OPTIONS] - 核心选项:
-d 秒数:设置刷新间隔,默认3秒-p PID:仅监控指定PID的进程-u 用户名:仅监控指定用户的进程
- 核心交互操作:
按键 功能说明 P按CPU使用率倒序排序 M按内存使用率倒序排序 T按累计CPU时间倒序排序 k杀死指定PID的进程 r调整进程的nice值(优先级) 1显示所有CPU核心的使用情况 c显示进程的完整命令路径 h查看帮助 q退出top - 示例:
top top -d 1 # 每秒刷新一次 top -p 1234,5678 # 监控指定PID的进程 top -u nginx # 监控nginx用户的进程
htop
- 功能:
top的增强版,界面更友好,支持鼠标操作、颜色高亮、横向滚动,功能更强大 - 语法:
htop [OPTIONS] - 安装:
# CentOS/RHEL yum install htop # Debian/Ubuntu apt install htop
pstree
- 功能:以树形结构展示进程的父子关系
- 语法:
pstree [OPTIONS] - 核心选项:
-p:显示进程PID-u:显示进程所有者-a| 显示进程的完整命令 |
- 示例:
pstree pstree -p # 显示进程PID pstree -p 1 # 查看systemd进程的子进程树
6.2 进程控制
kill
- 功能:向进程发送信号,最常用为终止进程
- 语法:
kill [OPTIONS] PID - 核心信号:
信号编号 信号名 功能说明 1 SIGHUP 重启进程,重新加载配置文件,不终止进程 2 SIGINT 中断进程,等价于 Ctrl + C9 SIGKILL 强制杀死进程,不可被捕获/忽略,终极终止方式 15 SIGTERM 优雅终止进程,默认信号,允许进程释放资源后退出 18 SIGCONT 恢复挂起的进程 19 SIGSTOP 挂起进程,不可被捕获/忽略 - 高频示例:
kill 1234 # 发送默认SIGTERM信号,优雅终止进程 kill -15 1234 # 同上 kill -9 1234 # 强制杀死进程 kill -1 1234 # 重启进程,重新加载配置 kill -19 1234 # 挂起进程 kill -18 1234 # 恢复进程
killall
- 功能:按进程名批量杀死所有匹配的进程
- 语法:
killall [OPTIONS] 进程名 - 核心选项:
-9:强制杀死-u 用户名:仅杀死指定用户的进程-i:交互式杀死,每个进程提示确认
- 示例:
killall nginx # 终止所有nginx进程 killall -9 java # 强制杀死所有java进程 killall -u user1 python # 杀死user1用户的所有python进程
pkill
- 功能:按进程名、用户、终端等条件匹配并发送信号,支持正则匹配
- 语法:
pkill [OPTIONS] 匹配模式 - 核心选项:
-9:强制杀死-u 用户名:匹配指定用户的进程-t 终端:匹配指定终端的进程-f:匹配完整的命令行,而非仅进程名
- 示例:
pkill nginx pkill -9 java pkill -u user1 python pkill -f "python script.py" # 匹配完整命令杀死进程
nice/renice
- 功能:调整进程的优先级,nice值范围
-20~19,值越小优先级越高,仅root可设置负值 - 语法:
nice -n 优先级值 命令 # 启动进程时指定优先级 renice 优先级值 -p PID # 修改已运行进程的优先级 - 示例:
nice -n -10 nginx # 高优先级启动nginx nice -n 19 bash script.sh # 低优先级执行脚本 renice -5 -p 1234 # 将PID1234的进程优先级调整为-5
6.3 后台进程管理
command & # 启动命令时直接放到后台运行
jobs # 查看当前终端所有后台任务,显示任务号、状态、命令
fg %任务号 # 将后台任务恢复到前台运行
bg %任务号 # 将挂起的任务放到后台继续运行
Ctrl + Z # 挂起当前前台任务,放到后台
nohup command & # 后台执行命令,终端关闭后进程依然运行,输出默认写入nohup.out
nohup command &> output.log & # 后台执行,将输出重定向到日志文件
disown # 将后台任务从当前终端剥离,终端关闭后不终止
6.4 系统服务管理(systemd)
主流Linux发行版(CentOS 7+、RHEL 7+、Debian 9+、Ubuntu 16.04+)均采用systemd作为系统初始化系统,systemctl为核心管理命令。
systemctl
- 功能:管理系统服务(启动、停止、开机自启、状态查看等)
- 语法:
systemctl [OPTIONS] 动作 服务名.service - 核心高频动作:
动作 功能说明 start启动服务 stop停止服务 restart重启服务(先停止再启动) reload重新加载服务配置文件,不重启服务(不中断业务) status查看服务的运行状态、日志、开机自启状态 enable设置服务开机自启 enable --now设置开机自启并立即启动服务 disable取消服务开机自启 is-enabled查看服务是否设置了开机自启 is-active查看服务是否正在运行 mask屏蔽服务,禁止启动 unmask取消屏蔽服务 daemon-reload重新加载所有systemd服务配置文件,修改服务配置后必须执行 list-unit-files --type=service查看所有服务的开机自启状态 list-units --type=service --state=running查看所有正在运行的服务 - 高频示例:
systemctl start nginx # 启动nginx服务 systemctl stop nginx # 停止nginx服务 systemctl restart nginx # 重启nginx服务 systemctl reload nginx # 重新加载nginx配置 systemctl status nginx # 查看nginx服务状态 systemctl enable nginx # 设置nginx开机自启 systemctl enable --now nginx # 设置开机自启并立即启动 systemctl disable nginx # 取消开机自启 systemctl daemon-reload # 重新加载服务配置 systemctl list-units --type=service --state=running # 查看所有运行中的服务
journalctl
- 功能:查看systemd管理的服务日志,系统日志核心命令
- 语法:
journalctl [OPTIONS] - 核心选项:
选项 功能说明 -u 服务名查看指定服务的日志 -f实时跟踪日志新增内容 -n N查看最后N行日志 --since 时间查看指定时间之后的日志(如 2025-01-01、1 hour ago、today)--until 时间查看指定时间之前的日志 -p 优先级按日志级别过滤(emerg/alert/crit/err/warning/notice/info/debug) -xe查看系统启动失败的服务详细日志,排障首选 --disk-usage查看日志占用的磁盘空间 --vacuum-size=1G清理日志,保留1G大小 --vacuum-time=7d清理日志,保留最近7天的日志 - 高频示例:
journalctl -u nginx # 查看nginx服务的所有日志 journalctl -u nginx -f # 实时跟踪nginx日志 journalctl -u nginx -n 100 # 查看nginx最后100行日志 journalctl -u nginx --since today # 查看nginx今天的日志 journalctl -u nginx --since "2025-01-01 00:00:00" --until "2025-01-02 00:00:00" # 查看指定时间段日志 journalctl -p err # 查看系统所有错误级别日志 journalctl -xe # 查看系统启动失败的服务日志,排障首选
七、网络管理命令
7.1 基础网络配置
ip
- 功能:Linux网络配置全能命令,替代传统
ifconfig、route、arp等命令,生产环境首选 - 语法:
ip [OPTIONS] 对象 动作 - 核心对象与高频用法:
- 地址管理(addr)
ip addr show # 查看所有网卡的IP地址、MAC地址等信息,等价于ip a ip addr show eth0 # 查看指定网卡eth0的信息 ip addr add 192.168.1.100/24 dev eth0 # 给eth0添加IP地址 ip addr del 192.168.1.100/24 dev eth0 # 删除eth0的IP地址 ip addr flush dev eth0 # 清空eth0的所有IP地址 - 链路管理(link)
ip link show # 查看所有网卡的链路状态,等价于ip l ip link set eth0 up # 启用eth0网卡 ip link set eth0 down # 禁用eth0网卡 ip link set eth0 mtu 1500 # 设置eth0网卡的MTU值 ip link set eth0 address 00:11:22:33:44:55 # 修改网卡MAC地址 - 路由管理(route)
ip route show # 查看系统路由表,等价于ip r ip route add default via 192.168.1.1 dev eth0 # 添加默认网关 ip route del default via 192.168.1.1 # 删除默认网关 ip route add 10.0.0.0/8 via 192.168.1.2 dev eth0 # 添加静态路由 ip route del 10.0.0.0/8 # 删除静态路由 - ARP管理(neigh)
ip neigh show # 查看ARP缓存表 ip neigh add 192.168.1.200 lladdr 00:aa:bb:cc:dd:ee dev eth0 # 添加静态ARP条目 ip neigh del 192.168.1.200 dev eth0 # 删除ARP条目 ip neigh flush all # 清空ARP缓存
- 地址管理(addr)
ifconfig
- 功能:传统网卡配置命令,部分最小化系统需安装
net-tools包 - 语法:
ifconfig [OPTIONS] [网卡名] - 示例:
ifconfig # 查看所有启用网卡的IP、MAC信息 ifconfig -a # 查看所有网卡(包括禁用的) ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 设置eth0的IP和子网掩码 ifconfig eth0 up # 启用网卡 ifconfig eth0 down # 禁用网卡
hostname/hostnamectl
- 功能:查看/修改系统主机名
- 示例:
hostname # 查看当前主机名 hostname new_hostname # 临时修改主机名,重启失效 hostnamectl set-hostname new_hostname # 永久修改主机名,主流发行版通用 hostnamectl status # 查看主机名详细信息
7.2 网络连通性测试
ping
- 功能:测试与目标主机的网络连通性,基于ICMP协议
- 语法:
ping [OPTIONS] 目标IP/域名 - 核心选项:
-c 次数:指定发送的数据包数量,默认无限发送-i 秒数:设置数据包发送间隔,默认1秒-s 字节数| 设置数据包大小,默认56字节 |-W 秒数| 设置超时时间 |
- 示例:
ping baidu.com ping -c 4 192.168.1.1 # 发送4个数据包后停止 ping -i 0.5 -c 10 10.0.0.1 # 每0.5秒发送一个,共10个
traceroute
- 功能:追踪数据包从本机到目标主机的路由路径,定位网络故障节点
- 语法:
traceroute [OPTIONS] 目标IP/域名 - 安装:
# CentOS/RHEL yum install traceroute # Debian/Ubuntu apt install traceroute - 示例:
traceroute baidu.com traceroute -n 192.168.1.1 # 不解析域名,加快速度
mtr
- 功能:结合
ping和traceroute的功能,实时动态监控路由路径的丢包率、延迟,网络排障首选 - 语法:
mtr [OPTIONS] 目标IP/域名 - 核心选项:
-n:不解析域名,加快速度-c 次数:指定发送数据包数量-r:以报告模式输出,非实时交互 |
- 安装:
# CentOS/RHEL yum install mtr # Debian/Ubuntu apt install mtr - 示例:
mtr baidu.com mtr -n -r -c 100 192.168.1.1 # 生成100个数据包的测试报告
telnet
- 功能:测试目标主机的端口是否开放,也可用于telnet协议远程登录
- 语法:
telnet 目标IP/域名 端口 - 示例:
telnet 192.168.1.100 80 # 测试目标主机80端口是否开放 telnet baidu.com 443 # 测试443端口 - 退出方式:按
Ctrl + ],输入quit回车
7.3 端口与套接字管理
ss
- 功能:查看系统套接字统计信息,替代传统
netstat,速度更快,功能更强 - 语法:
ss [OPTIONS] [过滤条件] - 核心选项:
选项 功能说明 -t显示TCP套接字 -u显示UDP套接字 -l仅显示监听状态的套接字 -n不解析域名、端口号,数字形式显示,加快速度 -a显示所有状态的套接字 -p显示套接字对应的进程名和PID -o显示TCP定时器信息 -s显示套接字统计汇总信息 - 高频示例:
ss -tuln # 查看所有TCP/UDP监听端口,生产环境最常用 ss -tulnp # 查看监听端口及对应的进程PID/名称 ss -a # 查看所有状态的套接字 ss -t state ESTABLISHED # 查看所有已建立的TCP连接 ss -t dst 192.168.1.100 # 查看目标地址为192.168.1.100的TCP连接 ss -t dport = :80 # 查看目标端口为80的TCP连接 ss -s # 查看系统套接字统计汇总
netstat
- 功能:传统网络连接、端口查看命令,需安装
net-tools包 - 语法:
netstat [OPTIONS] - 核心选项:
-t:TCP协议-u:UDP协议-l:监听状态-n:数字形式显示-p:显示进程PID/名称-r:查看路由表-i:查看网卡统计信息
- 示例:
netstat -tulnp netstat -rn netstat -an | grep 80
lsof
- 功能:列出系统中打开的文件(Linux中一切皆文件,包括网络套接字、设备等),端口排查神器
- 语法:
lsof [OPTIONS] - 核心选项:
-i:查看网络相关的打开文件,支持过滤协议、IP、端口-p PID:查看指定PID进程打开的所有文件-u 用户名:查看指定用户进程打开的文件+D 目录:递归查看目录下被打开的文件
- 高频示例:
lsof -i :80 # 查看80端口被哪个进程占用 lsof -i tcp:80 # 查看TCP 80端口 lsof -i udp:53 # 查看UDP 53端口 lsof -p 1234 # 查看PID1234进程打开的所有文件 lsof -u root # 查看root用户进程打开的文件 lsof /var/log/nginx/access.log # 查看哪个进程正在使用该文件
7.4 防火墙管理
firewalld(CentOS/RHEL/Rocky默认)
- 核心管理命令
firewall-cmd - 高频示例:
firewall-cmd --state # 查看防火墙运行状态 firewall-cmd --reload # 重新加载防火墙规则,修改规则后必须执行 firewall-cmd --list-all # 查看所有防火墙规则 firewall-cmd --list-ports # 查看所有开放的端口 firewall-cmd --add-port=80/tcp --permanent # 永久开放80/tcp端口 firewall-cmd --remove-port=80/tcp --permanent # 永久关闭80/tcp端口 firewall-cmd --add-service=http --permanent # 永久开放http服务(对应80端口) firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent # 允许指定网段访问3306端口--permanent:永久生效,不加则临时生效,重启防火墙后失效
ufw(Ubuntu/Debian默认)
- 高频示例:
ufw status # 查看防火墙状态 ufw enable # 启用防火墙 ufw disable # 禁用防火墙 ufw reload # 重新加载规则 ufw default deny incoming # 默认拒绝所有入站流量 ufw default allow outgoing # 默认允许所有出站流量 ufw allow 80/tcp # 开放80/tcp端口 ufw allow 22/tcp # 开放22/tcp端口(SSH) ufw delete allow 80/tcp # 删除80端口规则 ufw allow from 192.168.1.0/24 to any port 3306 # 允许指定网段访问3306端口
7.5 文件传输与下载
wget
- 功能:命令行下载工具,支持HTTP/HTTPS/FTP协议,支持断点续传
- 语法:
wget [OPTIONS] 下载链接 - 核心选项:
-O 文件名:指定下载后的文件名-P 目录:指定下载文件的保存目录-c| 断点续传,继续下载中断的文件 |-b| 后台下载 |--limit-rate=速度| 限制下载速度,如1M|--user=用户名 --password=密码| 带认证下载 |
- 高频示例:
wget https://example.com/file.tar.gz wget -O nginx.tar.gz https://example.com/nginx-1.24.0.tar.gz wget -P /data/download https://example.com/file.tar.gz wget -c https://example.com/large_file.iso # 断点续传 wget -b https://example.com/large_file.iso # 后台下载 wget --limit-rate=500k https://example.com/file.tar.gz # 限速500KB/s下载
curl
- 功能:全能的命令行数据传输工具,支持几乎所有协议,常用于接口测试、文件下载、数据提交
- 语法:
curl [OPTIONS] 目标URL - 核心高频用法:
# 基础GET请求 curl https://example.com # 下载文件 curl -O https://example.com/file.tar.gz # 保留原文件名 curl -o file.tar.gz https://example.com/file.tar.gz # 指定文件名 curl -C - -O https://example.com/large_file.iso # 断点续传 # POST请求 curl -X POST https://example.com/api # POST提交表单数据 curl -X POST -d "username=admin&password=123456" https://example.com/login # POST提交JSON数据 curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://example.com/api # 自定义请求头 curl -H "Authorization: Bearer token123" https://example.com/api # 忽略SSL证书验证 curl -k https://self-signed.badssl.com # 显示请求详细信息,排障用 curl -v https://example.com # 只显示响应状态码 curl -s -o /dev/null -w "%{http_code}" https://example.com
scp
- 功能:基于SSH协议的安全文件传输,用于本地与远程服务器、远程服务器之间的文件传输
- 语法:
scp [OPTIONS] 源文件 目标路径 - 核心选项:
-r:递归传输目录-P 端口:指定SSH端口,默认22-i 密钥文件:指定SSH私钥文件认证
- 高频示例:
# 本地文件上传到远程服务器 scp local_file.txt root@192.168.1.100:/data/ # 本地目录上传到远程服务器 scp -r /data/local_dir root@192.168.1.100:/data/ # 远程服务器文件下载到本地 scp root@192.168.1.100:/data/remote_file.txt /data/local/ # 远程服务器目录下载到本地 scp -r root@192.168.1.100:/data/remote_dir /data/local/ # 指定SSH端口传输 scp -P 2222 local_file.txt root@192.168.1.100:/data/
sftp
- 功能:基于SSH协议的安全文件传输,交互式操作,支持文件上传、下载、目录管理
- 语法:
sftp [OPTIONS] 远程服务器地址 - 核心交互命令:
sftp root@192.168.1.100 # 连接远程服务器 # 远程服务器操作 ls # 列出远程当前目录内容 pwd # 查看远程当前目录 cd /data # 切换远程目录 mkdir remote_dir # 远程创建目录 rm remote_file.txt # 远程删除文件 # 本地操作(命令前加l,代表local) lls # 列出本地当前目录内容 lpwd # 查看本地当前目录 lcd /data/local # 切换本地目录 # 文件传输 put local_file.txt # 本地上传文件到远程 put -r local_dir # 本地上传目录到远程 get remote_file.txt # 远程下载文件到本地 get -r remote_dir # 远程下载目录到本地 # 退出 exit/quit
7.6 高级网络工具
tcpdump
- 功能:命令行网络抓包工具,网络排障、协议分析神器
- 语法:
tcpdump [OPTIONS] [过滤条件] - 核心选项:
-i 网卡:指定抓包的网卡,any代表所有网卡-c 数量:指定抓取的数据包数量-w 文件名:将抓包数据写入文件,可用于Wireshark分析-r 文件名:读取已保存的抓包文件-n:不解析域名、端口,数字形式显示-nn:不解析域名、端口、协议,加快速度-v:显示详细的数据包信息
- 高频示例:
tcpdump -i any # 抓取所有网卡的数据包 tcpdump -i eth0 -c 100 # 抓取eth0网卡的100个数据包 tcpdump -i eth0 port 80 # 抓取80端口的数据包 tcpdump -i eth0 tcp port 443 # 抓取TCP 443端口的数据包 tcpdump -i eth0 host 192.168.1.100 # 抓取与指定主机的通信数据包 tcpdump -i eth0 src 192.168.1.100 # 抓取源地址为指定主机的数据包 tcpdump -i eth0 dst 192.168.1.100 # 抓取目标地址为指定主机的数据包 tcpdump -i eth0 -w capture.pcap # 将抓包数据写入文件 tcpdump -r capture.pcap # 读取抓包文件
nc/netcat
- 功能:网络工具中的瑞士军刀,支持端口扫描、端口监听、文件传输、网络测试等
- 语法:
nc [OPTIONS] 目标IP 端口 - 核心高频用法:
# 端口扫描 nc -zv 192.168.1.100 1-100 # 扫描目标主机1-100端口,显示开放端口 # 端口监听(服务端) nc -l 8888 # 监听本地8888端口 # 端口连接(客户端) nc 192.168.1.100 8888 # 连接目标主机8888端口 # 文件传输 # 服务端:监听端口,接收文件 nc -l 8888 > receive_file.txt # 客户端:连接服务端,发送文件 nc 192.168.1.100 8888 < send_file.txt # 端口测试,等价于telnet nc -zv 192.168.1.100 22
八、磁盘与存储管理命令
8.1 磁盘空间查看
df
- 功能:查看文件系统磁盘空间使用率,挂载点信息
- 语法:
df [OPTIONS] [挂载点/设备] - 核心选项:
-h:人性化显示大小(KB/MB/GB/TB)-i:查看inode使用率-T:显示文件系统类型-t 类型:仅显示指定类型的文件系统
- 高频示例:
df -h # 查看所有挂载点的磁盘使用率,最常用 df -hi # 查看所有挂载点的inode使用率 df -hT # 查看磁盘使用率及文件系统类型 df -h /dev/sda1 # 查看指定设备的磁盘使用率 df -h /data # 查看指定挂载点的磁盘使用率
du
- 功能:查看文件/目录占用的磁盘空间大小
- 语法:
du [OPTIONS] [文件/目录] - 核心选项:
-h:人性化显示大小-s:仅显示总计大小,不显示子目录详情-a:显示所有文件和目录的大小--max-depth=N:限制目录显示的深度-c:最后显示总计大小
- 高频示例:
du -sh . # 查看当前目录总大小,最常用 du -sh /data/* # 查看/data目录下每个子目录/文件的大小 du -h --max-depth=1 /var # 查看/var目录下一级目录的大小 du -ah /data | sort -rh | head -20 # 查看/data目录下最大的20个文件/目录
lsblk
- 功能:查看系统块设备(磁盘、分区)信息,树形结构展示,清晰直观
- 语法:
lsblk [OPTIONS] - 核心选项:
-f:显示文件系统类型、UUID、挂载点-d:仅显示磁盘本身,不显示分区
- 示例:
lsblk lsblk -f # 查看磁盘分区、文件系统、UUID、挂载点
blkid
- 功能:查看块设备的UUID、文件系统类型,用于配置
/etc/fstab开机自动挂载 - 语法:
blkid [设备名] - 示例:
blkid # 查看所有块设备的UUID blkid /dev/sda1 # 查看指定分区的UUID
8.2 磁盘分区与格式化
fdisk
- 功能:MBR分区格式的磁盘分区工具,支持2TB以下磁盘
- 语法:
fdisk [OPTIONS] 磁盘设备名 - 核心交互操作:
fdisk /dev/sda # 对/dev/sda磁盘进行分区操作 # 交互命令 m # 查看帮助 p # 打印分区表 n # 新建分区 d # 删除分区 t # 修改分区类型 w # 保存分区表并退出 q # 不保存退出 - 注意:修改分区表后,需执行
partprobe刷新内核分区表
parted
- 功能:支持MBR和GPT分区格式,支持2TB以上大磁盘,生产环境大磁盘首选
- 语法:
parted [OPTIONS] 磁盘设备名 - 核心示例:
parted /dev/sda # 交互命令 mklabel gpt # 将磁盘设置为GPT分区格式 mkpart primary 0% 100% # 创建一个使用整个磁盘的主分区 print # 打印分区表 rm 分区号 # 删除分区 quit # 退出
mkfs
- 功能:磁盘分区格式化,创建文件系统
- 语法:
mkfs.文件系统类型 [OPTIONS] 分区设备名 - 高频示例:
mkfs.xfs /dev/sda1 # 格式化为XFS文件系统(CentOS/RHEL默认) mkfs.ext4 /dev/sda1 # 格式化为EXT4文件系统(Ubuntu/Debian默认) mkfs.ext4 -L data /dev/sda1 # 格式化并设置卷标为data
8.3 挂载与卸载
mount
- 功能:挂载文件系统/分区到指定目录
- 语法:
mount [OPTIONS] 设备名 挂载点目录 - 核心选项:
-t 文件系统类型:指定文件系统类型,通常自动识别-o 挂载选项:指定挂载参数,多个选项用逗号分隔
- 常用挂载选项:
defaults:默认选项,等价于rw,suid,dev,exec,auto,nouser,asyncrw:读写模式ro:只读模式noatime:不更新文件的访问时间,提升IO性能nodiratime:不更新目录的访问时间remount:重新挂载已挂载的文件系统,用于修改挂载参数
- 高频示例:
mount /dev/sda1 /data # 挂载/dev/sda1到/data目录 mount -o ro /dev/sda1 /data # 只读模式挂载 mount -o remount,rw /data # 重新挂载/data为读写模式 mount -t iso9660 /opt/cdrom.iso /mnt/cdrom # 挂载ISO镜像文件 mount -a # 挂载/etc/fstab中所有未挂载的文件系统
umount
- 功能:卸载已挂载的文件系统
- 语法:
umount 设备名/挂载点 - 核心选项:
-l:懒卸载,立即卸载,待进程释放资源后清理所有相关资源,解决设备正忙无法卸载的问题
- 示例:
umount /dev/sda1 umount /data umount -l /data # 懒卸载
开机自动挂载配置
- 配置文件:
/etc/fstab,每行格式如下:UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxx 挂载点 文件系统类型 挂载选项 dump fsckUUID:分区唯一标识,推荐使用UUID,而非设备名(设备名可能变化)dump:是否备份,0不备份,1备份fsck:开机磁盘检查顺序,0不检查,根分区设为1,其他分区设为2
- 示例配置:
UUID=12345678-1234-1234-1234-1234567890ab /data xfs defaults,noatime 0 0 - 验证:配置完成后,执行
mount -a验证是否能正常挂载,无报错则配置正确
8.4 内存与Swap管理
free
- 功能:查看系统内存、Swap分区的使用情况
- 语法:
free [OPTIONS] - 核心选项:
-h:人性化显示大小-s 秒数:持续刷新,间隔指定秒数-w:分开显示缓冲区和缓存区大小
- 示例:
free -h # 查看内存使用情况,最常用 free -h -s 1 # 每秒刷新一次内存使用情况
swapon/swapoff
- 功能:启用/关闭Swap分区/文件
- 语法:
swapon 设备名/文件路径 swapoff 设备名/文件路径 - 示例:
swapon /dev/sda2 # 启用Swap分区 swapon -a # 启用/etc/fstab中所有配置的Swap swapoff /dev/sda2 # 关闭Swap分区 swapoff -a # 关闭所有Swap
Swap文件创建步骤
# 1. 创建Swap文件,大小4G
dd if=/dev/zero of=/swapfile bs=1G count=4
# 2. 设置权限(必须600,否则有安全风险)
chmod 600 /swapfile
# 3. 格式化为Swap文件系统
mkswap /swapfile
# 4. 启用Swap
swapon /swapfile
# 5. 配置开机自动挂载,写入/etc/fstab
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
# 6. 验证
swapon --show
free -h
8.5 磁盘修复与性能监控
fsck
- 功能:检查并修复文件系统错误,必须在卸载状态下执行
- 语法:
fsck [OPTIONS] 设备名 - 核心选项:
-y:自动确认所有修复操作-t 文件系统类型:指定文件系统类型
- 示例:
umount /dev/sda1 fsck /dev/sda1 fsck -y /dev/sda1
xfs_repair
- 功能:XFS文件系统修复工具,XFS文件系统专用,替代fsck
- 语法:
xfs_repair [OPTIONS] 设备名 - 示例:
umount /dev/sda1 xfs_repair /dev/sda1 xfs_repair -L /dev/sda1 # 强制清空日志,修复严重损坏的XFS文件系统
iostat
- 功能:监控系统磁盘IO性能、CPU使用率
- 语法:
iostat [OPTIONS] [间隔秒数] [次数] - 核心选项:
-d:仅显示磁盘IO统计-x:显示扩展详细统计信息-k/-m:以KB/MB为单位显示
- 安装:需安装
sysstat包 - 示例:
iostat # 查看系统启动以来的平均IO统计 iostat -x 1 5 # 每秒刷新一次,共5次,显示扩展IO详情 iostat -d -m 2 # 每2秒刷新一次,以MB为单位显示磁盘IO
九、压缩与归档管理命令
9.1 tar归档工具
- 功能:Linux最常用的归档压缩工具,支持多种压缩格式,打包+压缩二合一
- 语法:
tar [OPTIONS] 归档文件名 源文件/目录 - 核心选项:
选项 功能说明 -c创建新的归档文件(打包) -x解压归档文件 -v显示打包/解压的详细过程 -f 文件名指定归档文件名,必须放在选项的最后一位 -z使用gzip压缩/解压,后缀 .tar.gz/.tgz-j使用bzip2压缩/解压,后缀 .tar.bz2-J使用xz压缩/解压,后缀 .tar.xz,压缩率最高-C 目录指定解压/打包的目标目录 -t查看归档文件内的内容,不解压 -r向已存在的归档文件中追加文件 --exclude=模式打包时排除匹配的文件/目录 - 高频示例:
# 打包(仅归档,不压缩) tar -cvf data.tar /data # 打包+gzip压缩(最常用) tar -zcvf data.tar.gz /data # 打包+xz压缩(压缩率最高) tar -Jcvf data.tar.xz /data # 解压(自动识别压缩格式,通用解压命令,推荐) tar -xvf data.tar.gz tar -xvf data.tar.bz2 tar -xvf data.tar.xz tar -xvf data.tar # 解压到指定目录 tar -xvf data.tar.gz -C /opt/ # 查看归档文件内容 tar -tvf data.tar.gz # 打包时排除指定文件/目录 tar -zcvf data.tar.gz --exclude=*.log --exclude=tmp /data # 打包时排除多个目录 tar -zcvf data.tar.gz --exclude={log,tmp,cache} /data
9.2 其他压缩工具
gzip/gunzip
- 功能:gzip压缩/解压工具,仅能压缩单个文件,不能打包目录
- 语法:
gzip [OPTIONS] 文件名 gunzip [OPTIONS] 文件名.gz - 核心选项:
-9:最高压缩率-1:最快压缩速度-d:解压,等价于gunzip-c:输出到标准输出,保留原文件
- 示例:
gzip file.txt # 压缩为file.txt.gz,原文件删除 gzip -9 file.txt # 最高压缩率压缩 gzip -d file.txt.gz # 解压 gunzip file.txt.gz # 解压 gzip -c file.txt > file.txt.gz # 压缩,保留原文件
zip/unzip
- 功能:zip格式压缩/解压,跨平台兼容Windows/Mac/Linux
- 安装:
# CentOS/RHEL yum install zip unzip # Debian/Ubuntu apt install zip unzip - 高频示例:
# 压缩 zip data.zip file1.txt file2.txt # 压缩多个文件 zip -r data.zip /data # 递归压缩目录及所有内容 zip -r -P 123456 data.zip /data # 加密压缩,密码123456 zip -r data.zip /data --exclude=*.log # 压缩时排除.log文件 # 解压 unzip data.zip # 解压到当前目录 unzip data.zip -d /opt/ # 解压到指定目录 unzip -l data.zip # 查看压缩包内的内容,不解压 unzip -P 123456 data.zip # 解压加密压缩包 unzip data.zip file1.txt # 仅解压压缩包内的file1.txt
bzip2/bunzip2
- 功能:bzip2压缩工具,压缩率比gzip高,速度稍慢
- 示例:
bzip2 file.txt bunzip2 file.txt.bz2
xz/unxz
- 功能:xz压缩工具,压缩率极高,适合大文件压缩
- 示例:
xz file.txt unxz file.txt.xz
十、软件包管理命令
Linux软件包分为两大派系:RPM系(CentOS/RHEL/Rocky/AlmaLinux)和DEB系(Debian/Ubuntu/Mint)。
10.1 RPM系软件包管理
rpm
- 功能:RPM包底层管理工具,直接操作
.rpm包文件 - 语法:
rpm [OPTIONS] 包名/包文件 - 核心选项:
选项 功能说明 -i安装软件包 -v显示详细过程 -h显示安装进度条 -e卸载软件包 -U升级软件包,不存在则安装 -q查询软件包 -a所有已安装的软件包 -l列出软件包安装的文件列表 -i(配合-q)显示软件包的详细信息 -f 文件名查询文件属于哪个软件包 - 高频示例:
# 安装rpm包 rpm -ivh nginx-1.24.0-1.el7.x86_64.rpm # 升级rpm包 rpm -Uvh nginx-1.24.0-2.el7.x86_64.rpm # 卸载软件包 rpm -e nginx # 查询已安装的软件包 rpm -qa | grep nginx # 查询软件包的详细信息 rpm -qi nginx # 查询软件包安装的文件列表 rpm -ql nginx # 查询文件属于哪个软件包 rpm -qf /etc/nginx/nginx.conf
yum/dnf
- 功能:RPM系的前端包管理器,自动解决依赖关系,yum是传统工具,dnf是yum的下一代替代版(CentOS 8+/RHEL 8+默认),命令完全兼容
- 语法:
yum [OPTIONS] 动作 包名 - 核心高频动作:
动作 功能说明 install安装软件包,自动解决依赖 remove/erase卸载软件包,同时卸载依赖的包 update升级所有可升级的软件包,或指定软件包 list列出软件包,支持 installed/available过滤search按关键词搜索软件包 info查看软件包的详细信息 provides查询文件/命令属于哪个软件包 clean all清理本地缓存的软件包和元数据 makecache生成软件源元数据缓存 repolist查看所有配置的软件源 history查看yum执行历史记录,支持回滚 - 高频示例:
# 安装软件包 yum install nginx -y yum install nginx-1.24.0 -y # 安装指定版本 yum localinstall nginx-1.24.0-1.el7.x86_64.rpm -y # 安装本地rpm包,自动解决依赖 # 卸载软件包 yum remove nginx -y # 升级软件包 yum update -y # 升级所有可升级的包 yum update nginx -y # 仅升级nginx # 搜索软件包 yum search nginx # 查看软件包信息 yum info nginx # 查询命令属于哪个软件包 yum provides ifconfig # 查看已安装的软件包 yum list installed | grep nginx # 清理缓存 yum clean all yum makecache # 查看软件源 yum repolist # 查看执行历史 yum history yum history undo 序号 # 回滚指定的历史操作-y:自动确认所有操作,无需人工交互,脚本中必加
10.2 DEB系软件包管理
dpkg
- 功能:DEB包底层管理工具,直接操作
.deb包文件,对应RPM系的rpm命令 - 语法:
dpkg [OPTIONS] 包名/包文件 - 核心选项:
选项 功能说明 -i安装deb包 -r卸载软件包,保留配置文件 -P完全卸载软件包,包括配置文件 -l列出已安装的软件包 -s查看软件包的详细信息 -L列出软件包安装的文件列表 -S 文件名查询文件属于哪个软件包 - 高频示例:
# 安装deb包 dpkg -i nginx_1.24.0-1ubuntu1_amd64.deb # 卸载软件包 dpkg -r nginx dpkg -P nginx # 完全卸载 # 查询已安装的软件包 dpkg -l | grep nginx # 查看软件包详细信息 dpkg -s nginx # 查看软件包安装的文件列表 dpkg -L nginx # 查询文件属于哪个软件包 dpkg -S /etc/nginx/nginx.conf
apt
- 功能:DEB系的前端包管理器,自动解决依赖关系,替代传统的
apt-get/apt-cache,命令更简洁,输出更友好 - 语法:
apt [OPTIONS] 动作 包名 - 核心高频动作:
动作 功能说明 install安装软件包 remove卸载软件包,保留配置文件 purge完全卸载软件包,包括配置文件 update更新软件源的包列表信息 upgrade升级所有可升级的软件包 full-upgrade升级系统,处理依赖变更,等价于 dist-upgradelist列出软件包,支持 --installed/--upgradable过滤search按关键词搜索软件包 show查看软件包的详细信息 provides查询文件/命令属于哪个软件包 clean/autoclean清理本地缓存 autoremove自动卸载不再需要的依赖包 edit-sources编辑软件源配置文件 - 高频示例:
# 更新软件源包列表 apt update # 安装软件包 apt install nginx -y apt install nginx=1.24.0-1ubuntu1 -y # 安装指定版本 # 卸载软件包 apt remove nginx -y apt purge nginx -y # 完全卸载 # 升级软件包 apt upgrade -y apt full-upgrade -y # 搜索软件包 apt search nginx # 查看软件包信息 apt show nginx # 查看已安装的软件包 apt list --installed | grep nginx # 查看可升级的软件包 apt list --upgradable # 自动清理无用依赖 apt autoremove -y # 清理缓存 apt clean
10.3 源码编译安装
Linux通用的软件安装方式,适用于没有对应二进制包的软件,核心三步:
# 1. 配置,指定安装路径、启用/禁用功能
./configure --prefix=/usr/local/nginx --with-http_ssl_module
# 2. 编译,根据CPU核心数指定-j参数,加快编译速度
make -j 4
# 3. 安装,将编译好的文件复制到指定目录
make install
- 依赖安装:编译前需安装基础编译环境
# CentOS/RHEL yum install gcc gcc-c++ make automake autoconf -y # Debian/Ubuntu apt install build-essential -y
十一、系统管理与监控命令
11.1 系统信息查看
uname -a # 查看内核版本、系统架构、主机名等所有系统信息
uname -r # 仅查看内核版本
cat /etc/os-release # 查看系统发行版信息,主流发行版通用
cat /etc/redhat-release # 查看RHEL/CentOS发行版版本
lsb_release -a # 查看发行版信息,需安装lsb-release包
hostnamectl # 查看主机名、系统版本、内核版本、时区等信息
uptime # 查看系统运行时间、平均负载
dmesg # 查看内核环形缓冲区日志,系统启动、硬件故障排障
11.2 系统资源监控
vmstat
- 功能:系统资源监控工具,实时监控CPU、内存、IO、进程等系统状态
- 语法:
vmstat [间隔秒数] [次数] - 示例:
vmstat # 查看系统启动以来的平均状态 vmstat 1 5 # 每秒刷新一次,共5次,实时监控系统状态 - 核心字段说明:
procs:r等待运行的进程数,b阻塞的进程数cpu:us用户态CPU使用率,sy内核态CPU使用率,id空闲CPU使用率,waIO等待CPU使用率mem:swpd使用的Swap大小,free空闲内存,buff缓冲区,cache缓存io:bi从块设备读入的数据量,bo写入块设备的数据量
sar
- 功能:系统活动报告全能工具,可监控CPU、内存、IO、网络、负载等所有系统资源,支持历史数据查询,Linux系统监控瑞士军刀
- 语法:
sar [OPTIONS] [间隔秒数] [次数] - 安装:需安装
sysstat包 - 高频示例:
sar # 查看当天的CPU平均使用率 sar -u 1 5 # 每秒刷新一次,共5次,监控CPU使用率 sar -r 1 5 # 监控内存使用率 sar -b 1 5 # 监控磁盘IO sar -n DEV 1 5 # 监控网络流量 sar -q 1 5 # 监控系统平均负载 sar -u -f /var/log/sa/sa25 # 查看25号的历史CPU数据
mpstat
- 功能:监控CPU每个核心的使用情况
- 语法:
mpstat [间隔秒数] [次数] - 示例:
mpstat # 查看所有CPU核心的平均使用率 mpstat -P ALL 1 5 # 每秒刷新一次,查看每个CPU核心的使用率
11.3 时间与时区管理
date # 查看当前系统时间
date +"%Y-%m-%d %H:%M:%S" # 格式化输出时间
date -s "2025-01-01 00:00:00" # 临时设置系统时间
hwclock # 查看硬件时钟
hwclock -w # 将系统时间同步到硬件时钟
hwclock -s # 将硬件时钟同步到系统时间
timedatectl # 查看系统时间、时区、NTP同步状态
timedatectl list-timezones # 查看所有可用时区
timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海
timedatectl set-ntp true # 启用NTP时间同步
11.4 系统开关机与重启
shutdown -h now # 立即关机
shutdown -h 23:00 # 23:00定时关机
shutdown -r now # 立即重启
shutdown -c # 取消已计划的关机/重启
halt # 关机
poweroff # 关机
reboot # 重启
init 0 # 关机
init 6 # 重启
十二、定时任务管理命令
12.1 crontab
- 功能:Linux定时任务核心工具,用于周期性执行脚本/命令,支持分钟、小时、日、月、周粒度的定时
- 语法:
crontab [OPTIONS] - 核心选项:
-e:编辑当前用户的定时任务-l:查看当前用户的定时任务-r:删除当前用户的所有定时任务-u 用户名:指定用户操作定时任务,仅root可用
- 时间格式:
# 分 时 日 月 周 要执行的命令 * * * * * command字段 取值范围 特殊符号说明 分 0-59 *每一分钟;/n每隔n分钟;-范围;,枚举时 0-23 *每一小时;/n每隔n小时日 1-31 *每一天;/n每隔n天月 1-12 *每一月;1-12代表1月到12月周 0-7 0和7都代表周日;1-6代表周一到周六 - 特殊符号说明:
*:代表该字段的所有可能值,如分钟位*代表每分钟/n:代表每隔n个单位,如分钟位*/5代表每隔5分钟-:代表范围,如小时位9-18代表9点到18点,:代表枚举,如周位1,3,5代表周一、周三、周五
- 高频示例:
# 每分钟执行一次 * * * * * /bin/sh /data/script.sh # 每隔5分钟执行一次 */5 * * * * /bin/sh /data/script.sh # 每天凌晨2点执行 0 2 * * * /bin/sh /data/backup.sh # 每周一凌晨3点执行 0 3 * * 1 /bin/sh /data/backup.sh # 每月1号凌晨4点执行 0 4 1 * * /bin/sh /data/backup.sh # 每天9点到18点,每隔1小时执行一次 0 9-18/1 * * * /bin/sh /data/script.sh # 每天的8点、12点、18点各执行一次 0 8,12,18 * * * /bin/sh /data/script.sh # 工作日(周一到周五)凌晨1点执行 0 1 * * 1-5 /bin/sh /data/script.sh # 执行脚本并将输出重定向到日志文件,避免产生邮件 0 2 * * * /bin/sh /data/backup.sh &>> /var/log/backup.log # 执行脚本前先加载环境变量 0 2 * * * source /etc/profile; /bin/sh /data/backup.sh - 核心注意事项:
- 定时任务中的命令/脚本必须使用绝对路径,包括脚本内的命令
- crontab的环境变量与用户登录环境不同,建议在脚本开头加载环境变量,或在crontab开头声明
PATH变量 - 定时任务执行的输出默认会以邮件形式发送给用户,建议重定向到日志文件,如
&>> /var/log/script.log - 脚本必须有执行权限
chmod +x script.sh
- 系统级定时任务:配置文件
/etc/crontab,格式多了一个用户名字段:分 时 日 月 周 用户名 命令 - 定时任务目录:系统会自动执行对应目录内的脚本
/etc/cron.hourly/:每小时执行/etc/cron.daily/:每天执行/etc/cron.weekly/:每周执行/etc/cron.monthly/:每月执行
12.2 at
- 功能:一次性定时任务,仅执行一次,适合临时定时任务
- 语法:
at 时间 - 安装:
# CentOS/RHEL yum install at -y && systemctl enable --now atd # Debian/Ubuntu apt install at -y && systemctl enable --now atd - 示例:
# 5分钟后执行 at now + 5 minutes at> /bin/sh /data/script.sh at> <Ctrl+D> # 按Ctrl+D结束输入 # 今天23:00执行 at 23:00 # 2025-01-01 00:00执行 at 00:00 2025-01-01 # 查看待执行的at任务 atq # 删除指定的at任务 atrm 任务号
十三、文本处理三剑客:grep、sed、awk
Linux文本处理三大核心工具,支持正则表达式,可实现复杂的文本过滤、替换、统计、分析功能,运维、开发必备。
13.1 grep:文本搜索匹配
- 功能:按正则表达式搜索文本,输出匹配的行,文本过滤首选
- 语法:
grep [OPTIONS] 匹配模式 [文件] - 核心选项:
选项 功能说明 -v反向匹配,输出不匹配的行 -i忽略大小写匹配 -n输出匹配行的行号 -c仅输出匹配的行数 -o仅输出匹配的内容,而非整行 -r/-R递归搜索目录下的所有文件 -w匹配完整单词,而非部分匹配 -E启用扩展正则表达式,等价于 egrep-F按固定字符串匹配,不解析正则,等价于 fgrep-A N输出匹配行及后面N行 -B N输出匹配行及前面N行 -C N输出匹配行及前后各N行 -f 文件从文件中读取匹配模式 - 高频示例:
# 基础匹配 grep "error" /var/log/nginx/error.log # 忽略大小写匹配 grep -i "error" /var/log/nginx/error.log # 反向匹配,输出不包含error的行 grep -v "error" /var/log/nginx/access.log # 显示匹配行的行号 grep -n "root" /etc/passwd # 递归搜索当前目录下所有文件中包含test的行 grep -r "test" . # 匹配完整单词 grep -w "root" /etc/passwd # 显示匹配行及前后2行 grep -C 2 "error" /var/log/messages # 统计匹配的行数 grep -c "404" /var/log/nginx/access.log # 启用扩展正则,匹配多个关键词 grep -E "error|warn|critical" /var/log/nginx/error.log # 仅输出匹配的IP地址 grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /var/log/nginx/access.log # 管道过滤 ps aux | grep nginx | grep -v grep
13.2 sed:流编辑器
- 功能:按行处理文本,实现文本的增、删、改、查,支持正则表达式,批量修改文件首选
- 语法:
sed [OPTIONS] '动作' [文件] - 核心选项:
-n:静默模式,仅输出处理后的行,默认输出所有行-i:直接修改原文件,高危选项,建议先测试-e:执行多个编辑动作-f 文件| 从文件中读取sed脚本 |-r/-E| 启用扩展正则表达式 |
- 核心动作格式:
[地址范围]动作/匹配模式/替换内容/标志 - 高频示例:
# 1. 文本替换(最常用) # 替换每行第一个匹配的old为new sed 's/old/new/' file.txt # 替换每行所有匹配的old为new,g代表全局替换 sed 's/old/new/g' file.txt # 替换第3行的old为new sed '3s/old/new/g' file.txt # 替换第1-5行的old为new sed '1,5s/old/new/g' file.txt # 替换包含keyword的行中的old为new sed '/keyword/s/old/new/g' file.txt # 忽略大小写替换 sed 's/old/new/gi' file.txt # 直接修改原文件(高危,先不加-i测试) sed -i 's/old/new/g' file.txt # 备份原文件后修改,生成file.txt.bak备份文件 sed -i.bak 's/old/new/g' file.txt # 替换特殊字符,如/,使用#作为分隔符,避免转义 sed 's#/usr/local#/opt#g' file.txt # 2. 行删除 # 删除第3行 sed '3d' file.txt # 删除第2-5行 sed '2,5d' file.txt # 删除最后一行 sed '$d' file.txt # 删除包含keyword的行 sed '/keyword/d' file.txt # 删除空行 sed '/^$/d' file.txt # 删除以#开头的注释行 sed '/^#/d' file.txt # 3. 行添加/插入 # 在第2行后添加新行(a=append) sed '2a new_line' file.txt # 在第2行前插入新行(i=insert) sed '2i new_line' file.txt # 在最后一行添加新行 sed '$a new_line' file.txt # 在包含keyword的行后添加新行 sed '/keyword/a new_line' file.txt # 4. 行替换 # 将第3行整行替换为new_line sed '3c new_line' file.txt # 将包含keyword的行整行替换 sed '/keyword/c new_line' file.txt # 5. 行打印 # 打印第3行 sed -n '3p' file.txt # 打印第1-5行 sed -n '1,5p' file.txt # 打印包含keyword的行,等价于grep sed -n '/keyword/p' file.txt # 打印从匹配行到最后一行 sed -n '/keyword/,$p' file.txt # 6. 多个动作执行 sed -e 's/old/new/g' -e '/keyword/d' file.txt
13.3 awk:文本分析处理语言
- 功能:强大的文本分析工具,支持字段分割、条件判断、循环、数组、函数,适合结构化文本的统计、分析、处理,日志分析首选
- 语法:
awk [OPTIONS] '模式{动作}' [文件] - 核心内置变量:
变量 功能说明 $0当前整行内容 $1,$2...$n当前行的第1、2…n个字段 FS输入字段分隔符,默认空格/制表符 OFS输出字段分隔符,默认空格 NR已处理的行号(Number of Record) NF当前行的字段数(Number of Field), $NF代表最后一个字段FILENAME当前处理的文件名 RS输入行分隔符,默认换行符 ORS输出行分隔符,默认换行符 - 核心选项:
-F 分隔符:指定输入字段分隔符,等价于设置FS变量-v 变量=值:定义外部变量-f 文件| 从文件中读取awk脚本 |
- 高频示例:
# 1. 基础字段提取 # 打印/etc/passwd的第1和第7字段(用户名和登录Shell),分隔符为: awk -F ":" '{print $1,$7}' /etc/passwd # 打印第1、3、最后一个字段 awk '{print $1,$3,$NF}' file.txt # 打印第3行 awk 'NR==3' file.txt # 打印行号和整行内容 awk '{print NR,$0}' file.txt # 打印字段数大于3的行 awk 'NF>3' file.txt # 2. 条件判断 # 打印第3字段大于1000的行(UID大于1000的普通用户) awk -F ":" '$3>1000' /etc/passwd # 打印第7字段为/bin/bash的行 awk -F ":" '$7=="/bin/bash"' /etc/passwd # 打印包含error的行 awk '/error/' /var/log/nginx/error.log # 多条件判断 awk -F ":" '$3>1000 && $7=="/bin/bash"' /etc/passwd # 3. 数学运算与统计 # 统计当前目录下所有文件的总大小 ls -l | awk 'BEGIN{sum=0} {sum+=$5} END{print "总大小:"sum" 字节"}' # 统计nginx日志中404状态码的次数 awk '$9=="404"{count++} END{print "404次数:"count}' /var/log/nginx/access.log # 计算第2字段的平均值 awk '{sum+=$2} END{print "平均值:"sum/NR}' file.txt # 找出第3字段的最大值 awk 'BEGIN{max=0} $3>max{max=$3} END{print "最大值:"max}' file.txt # 4. 日志分析实战 # 统计nginx访问日志中IP访问量前10 awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10 # 统计nginx日志中状态码分布 awk '{code[$9]++} END{for(i in code) print i,code[i]}' /var/log/nginx/access.log # 统计访问量大于100次的IP awk '{ip[$1]++} END{for(i in ip) if(ip[i]>100) print i,ip[i]}' /var/log/nginx/access.log | sort -rnk2 # 5. 流程控制 # if判断 awk '{if($3>1000) print $1,"普通用户"; else print $1,"系统用户"}' /etc/passwd # for循环 awk 'BEGIN{for(i=1;i<=5;i++) print i}' # while循环 awk 'BEGIN{i=1; while(i<=5) {print i; i++}}' # 6. 字符串处理 # 字符串长度 awk '{print length($1),$1}' file.txt # 字符串替换 awk '{gsub("old","new",$0); print $0}' file.txt # 字符串截取 awk '{print substr($1,1,3)}' file.txt # 截取第1字段前3个字符 # 7. BEGIN和END块 # BEGIN块:处理文件前执行,仅执行一次 # END块:处理完所有行后执行,仅执行一次 awk 'BEGIN{print "用户名\tUID\tShell"}; {print $1"\t"$3"\t"$7}; END{print "总用户数:"NR}' /etc/passwd
十四、其他高频实用命令
14.1 文件查找:find
- 功能:Linux文件查找全能工具,可按名称、类型、大小、权限、时间、用户等条件查找文件/目录,功能极其强大
- 语法:
find 查找路径 [查找条件] [执行动作] - 核心查找条件:
条件 功能说明 -name 模式按文件名匹配,支持通配符,区分大小写 -iname 模式按文件名匹配,忽略大小写 -type 类型按文件类型匹配, f普通文件,d目录,l软链接,b块设备,c字符设备,s套接字-size 大小按文件大小匹配, +大于,-小于,单位k/M/G/T-user 用户名按文件所有者匹配 -group 组名按文件所属组匹配 -uid UID按文件所有者UID匹配 -perm 权限按文件权限匹配 -mtime 天数按文件修改时间匹配, +nn天前,-nn天内,n正好n天前-atime 天数按文件访问时间匹配 -ctime 天数按文件状态修改时间匹配 -maxdepth N限制查找的最大目录深度 -mindepth N限制查找的最小目录深度 -empty匹配空文件或空目录 -executable匹配可执行文件 -writable匹配可写文件 -readable匹配可读文件 - 核心执行动作:
-print:打印匹配的结果,默认动作-exec 命令 {} \;:对匹配的文件执行指定命令,{}代表匹配的文件-ok 命令 {} \;:交互式执行命令,每次执行前提示确认-delete:删除匹配的文件,高危动作
- 高频示例:
# 1. 按名称查找 # 在当前目录下查找所有.txt文件 find . -name "*.txt" # 在/etc目录下查找nginx.conf文件 find /etc -name "nginx.conf" # 忽略大小写查找所有.log文件 find /var/log -iname "*.log" # 查找文件名包含test的文件 find / -name "*test*" # 2. 按类型查找 # 查找当前目录下所有目录 find . -type d # 查找系统中所有软链接 find / -type l # 查找当前目录下所有普通文件 find . -type f # 3. 按大小查找 # 查找大于1G的文件 find / -type f -size +1G # 查找小于100k的文件 find . -type f -size -100k # 查找100M到1G之间的文件 find / -type f -size +100M -size -1G # 4. 按时间查找 # 查找最近7天内修改过的文件 find . -type f -mtime -7 # 查找30天前修改过的文件 find /var/log -type f -mtime +30 # 查找最近24小时内修改过的文件 find . -type f -mtime -1 # 查找今天修改过的文件 find . -type f -mtime 0 # 5. 按权限/用户查找 # 查找权限为777的文件 find / -type f -perm 777 # 查找所有者为nginx的文件 find / -user nginx # 查找所属组为docker的文件 find / -group docker # 查找SUID权限的文件 find / -perm /4000 # 6. 限制查找深度 # 仅查找当前目录下一级,不递归子目录 find . -maxdepth 1 -name "*.log" # 查找深度至少2级 find . -mindepth 2 -name "*.txt" # 7. 对查找结果执行命令 # 查找30天前的.log文件并删除 find /var/log -name "*.log" -mtime +30 -delete # 查找大于1G的文件并显示详细信息 find / -type f -size +1G -exec ls -lh {} \; # 查找所有.sh文件并添加执行权限 find . -name "*.sh" -exec chmod +x {} \; # 交互式删除匹配的文件 find . -name "*.tmp" -ok rm -f {} \; # 查找结果通过管道传给xargs处理(效率更高) find . -name "*.log" | xargs ls -lh # 处理带空格的文件名,使用-print0和xargs -0 find . -name "*.txt" -print0 | xargs -0 rm -f # 8. 组合条件 # 查找7天前的.log文件,大小大于100M find /var/log -name "*.log" -mtime +7 -size +100M # 查找不是root所有者的文件 find /home ! -user root # 查找.txt或.log文件 find . -name "*.txt" -o -name "*.log"
14.2 帮助与信息查询
man 命令名 # 查看命令的官方手册,Linux最权威的帮助文档,按q退出
man 5 passwd # 查看配置文件passwd的手册,第5章节为配置文件
info 命令名 # 查看命令的info帮助文档,比man更详细
whatis 命令名 # 查看命令的简短说明
which 命令名 # 查看命令的可执行文件路径
whereis 命令名 # 查看命令的二进制文件、源码、帮助文档路径
type 命令名 # 查看命令的类型(内置命令/外部命令/别名)
14.3 历史命令与别名
history # 查看所有历史命令
history -c # 清空当前终端的历史命令
history -w # 将历史命令写入~/.bash_history文件
!n # 执行历史命令中第n条命令
!! # 执行上一条命令
!$ # 引用上一条命令的最后一个参数
!关键词 # 执行最近一条以关键词开头的命令
Ctrl + R # 反向搜索历史命令
alias # 查看所有已设置的别名
alias 别名='命令' # 设置别名
alias ll='ls -lha' # 最常用的别名设置
alias rm='rm -i' # 给rm添加交互提示,防止误删
unalias 别名 # 删除别名
- 永久生效:将别名配置写入
~/.bashrc(用户级)或/etc/profile(全局),执行source ~/.bashrc生效
14.4 其他高频命令
# 文本排序与去重
sort file.txt # 对文件内容排序
sort -rn file.txt # 倒序数字排序
uniq file.txt # 去除连续的重复行,需先sort排序
uniq -c file.txt # 统计每行出现的次数
# 文本统计
wc file.txt # 统计文件的行数、单词数、字节数
wc -l file.txt # 统计文件行数
wc -w file.txt # 统计文件单词数
wc -c file.txt # 统计文件字节数
# 字段提取
cut -d ":" -f 1 /etc/passwd # 按:分隔,提取第1字段
cut -c 1-5 file.txt # 提取每行前5个字符
# 命令参数传递
xargs # 将标准输入转换为命令行参数
ls *.log | xargs rm -f # 删除匹配的日志文件
find . -name "*.txt" | xargs grep "test" # 在匹配的文件中搜索test
# 文件对比
diff file1.txt file2.txt # 对比两个文件的差异
cmp file1.txt file2.txt # 对比两个文件是否相同
diff -u file1.txt file2.txt # 统一格式输出差异,用于生成补丁
# 多输出重定向
tee # 将标准输入同时输出到屏幕和文件
ls -lha | tee ls.txt # 将ls结果输出到屏幕并写入ls.txt
ls -lha | tee -a ls.txt # 追加模式写入
# 系统运行时间
uptime # 查看系统运行时间、平均负载、登录用户数
# 查看登录用户
who # 查看当前登录的用户
w # 查看登录用户及正在执行的命令
last # 查看用户登录历史
lastlog # 查看所有用户最后一次登录时间
# 路径处理
basename /data/file.txt # 提取文件名,输出file.txt
dirname /data/file.txt # 提取目录路径,输出/data
# 序列生成
seq 1 10 # 生成1到10的序列
seq 1 2 10 # 生成1到10的奇数序列
# 清空文件
> file.txt # 快速清空文件内容
cat /dev/null > file.txt # 清空文件内容
# 实时执行命令
watch -n 1 'ls -lha' # 每秒执行一次ls命令,实时刷新结果
watch -n 2 'df -h' # 每2秒执行一次df命令
🎉祝你天天开心,我将更新更多有意思的内容,欢迎关注!
最后更新:2026年3月
作者:Echo

859

被折叠的 条评论
为什么被折叠?



