Linux目录含义
/ # 根目录,整个文件系统的起点
/boot # 存放启动引导文件(内核、initrd/initramfs、grub配置等)
/dev # 设备文件目录(硬盘、终端、随机数生成器等)
/etc # 系统配置文件目录(全局配置文件大多在此)
/home # 普通用户的家目录(/home/用户名)
/root # root 用户的家目录
/var # 经常变化的数据(日志、缓存、邮件、临时文件等)
/tmp # 临时文件目录(重启后通常清空)
/opt # 第三方软件安装目录(如手动安装的应用)
/usr # 用户系统资源目录(系统软件、库、文档)
/bin # 基础命令(单用户模式可用的命令,链接到/usr/bin)
/sbin # 系统管理命令(供root使用,链接到/usr/sbin)
/lib # 基础动态链接库(/bin 和 /sbin 依赖的库)
/lib64 # 64位库文件(64位系统特有)
/proc # 虚拟文件系统,存储进程和内核信息(内存中)
/sys # 虚拟文件系统,暴露内核设备和驱动信息(内存中)
/media # 可移动媒体挂载点(光盘、U盘自动挂载)
/mnt # 临时挂载点(手动挂载的备用位置)
/srv # 服务数据目录(Web、FTP等服务的数据文件)
/run # 运行时数据(进程PID文件、系统运行时状态)
/lost+found # 文件系统恢复时存放找回的残缺文件基础常用指令
#常用指令
top # 查看进程
lscpu # 查看cpu型号
uname -a # 查看内核
free -h # 查看内存占用率
df -h # 查看磁盘利用率
ip a # 查看ip
nmtui # 半图形化网络配置
history # 显示历史指令
reboot # 重启
poweroff # 关机
which 命令 # 查找命令的绝对路径
umask # 设置用户创建文件和目录时的默认权限 默认值 0022 可以修改默认值
du # 统计文件或目录实际占用的磁盘空间大小
#网络常用命令
ping # 测试网络连通性
ip a # 查看网卡信息、IPv4/IPv6地址,子网掩码及网卡状态
curl 127.0.0.1 # 测试本机搭建的Web服务
nmcli c r # 重新加载网卡配置
nmcli c up ens33 # 重启网卡
#高频运维命令速查
场景需求 首选命令 备用命令
测试主机连通性 ping -c 4 目标 mtr 目标
查看网卡IP信息 ip addr ifconfig
查看路由表 ip route route -n
查看监听端口+进程 ss -tulnp netstat -tulnp
查看指定端口占用 lsof -i :端口 ss -tulnp \| grep :端口
测试端口连通性 nc -zv 目标 端口 telnet 目标 端口
DNS域名解析 dig 域名 nslookup 域名
实时网卡流量监控 iftop nload
网络抓包 tcpdump tshark
远程服务器登录 ssh 用户名@目标 -
远程文件传输 scp 源 目标 sftp
#用户信息
id # 查看用户的uid编号
who # 当前系统的登录用户,登录方式,登录时间
whoami # 当前用户名
w # 显示当前登录的用户以及负载情况
last # 用户的登录记录(历史记录)
#登录方式
# pts/0 # 远程终端/编号
# tty1 # 物理终端
#退出
logout # 退出登录
exit # 退出当前终端
#切换用户方式
su # 切换用户
su - # 切换用户 在用户自己的家目录登录重启网卡的几种方式
# 重启网卡的方法:
# 1.使用网络管理脚本重启网卡
/etc/init.d/network restart
# start启动 stop关闭 restart重启 status状态
# 2.systemctl系统服务管理工具统一管理
systemctl restart network
systemctl status network
# 3.service管理服务
service network restart
# 4.nmtui半图形化网络管理器
nmtui -> 启用连接 -> 敲两次回车
# 5.nmcli命令行网络管理器
nmcli c r # 重新加载网卡配置
nmcli c up ens33 # 重启网卡 常用符号介绍
2> # 重定向错误输出
&> # 重定向所有输出(包括错误)
* # 匹配任意字符(包括0个) rm *.log 删除所有.log文件
? # 匹配单个字符 file?.txt 匹配 file1.txt、fileA.txt
&& # 逻辑与运算
|| # 逻辑或运算
; # 分号
& # 命令末尾;表示后台执行;例:cmd1 &
& # 命令间;表示并行启动两个程序,无逻辑依赖;例:mod1 & mod2
例子:
命令1 && 命令2 # 只有当左边的命令执行成功(返回值为 0)时,才会继续执行右边的命令;
命令1 || 命令2 # 只有当左边的命令执行失败(返回值不为 0)时,才会去执行右边的命令;
命令1 ; 命令2 # 无脑执行,它只负责按顺序跑完,完全不管前面的命令是成功还是失败。
使用小技巧:
rm file.txt && echo "success" || echo "fail" # 先尝试删除一个文件,如果删除成功就提示“success”,如果失败就提示“fail”
ls /path/to/dir1/test.txt || ls /path/to/dir2/test.txt # 或者尝试在两个不同的目录下查找文件,只要在一个地方找到了,就不再找另一个地方.重定向
> 命令 > 文件 输出重定向
将命令的执行结果保存在文件中,文件不存在会创建文件,存在则会覆盖文件
# free -h > a.txt 加内容保存在此文件中
# > a.txt 清空文件内容
>> 命令 >> 文件 文件追加重定向
将命令的执行结果保存在文件中,文件不存在会创建文件,不会覆盖之前文件
< 命令 < 文件 输入重定向
# bc < a.txt bc 计算器.
<< 将键盘输入的内容交给命令给执行
命令 << EOF
内容
...
EOF结尾
# 将键盘输入内容保存到文件
cat >> 文件 << EOF
内容...
EOF
echo "内容" >> 文件ls:看看这地方都有什么
========================================
ls 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-l # 长格式显示(包含权限、大小、时间等详细信息)
-a # 显示所有文件(包含以 . 开头的隐藏文件)
-h # 以人类可读格式显示大小(如 KB, MB, GB)
-t # 按修改时间排序(最新的在最前面)
-S # 按文件大小排序(最大的在最前面)
-r # 反向排序(配合 -t 或 -S 使用)
-R # 递归显示(列出所有子目录的内容)
-d # 仅显示目录本身,不列出目录内的内容
-i # 显示文件的 inode 编号
-F # 在文件名后加类型指示符(如目录加 /)
========================================
常用组合示例:
ls -lh # 长格式 + 易读大小
ls -la # 长格式 + 显示隐藏文件
ls -lt # 按时间排序查看最新文件
ls -lhS # 按大小排序查看大文件
========================================cd:切换目录
========================================
cd 命令常用选项速查表
========================================
命令/选项 说明
----------------------------------------
cd # 不带参数,直接返回当前用户的家目录
cd - # 返回上一次所在的目录(目录间来回切换神器)
cd .. # 返回上一级目录(父目录)
cd ../.. # 返回上两级目录
cd ~ # 返回当前用户的家目录
cd /path # 跳转到指定的绝对路径目录
cd dir_name # 跳转到当前目录下的指定子目录
========================================
实用小技巧:
cd /var/lo[TAB] # 使用 Tab 键自动补全路径
cd "dir name" # 目录名有空格时,记得加引号
========================================pwd:显示当前位置
========================================
pwd 命令常用选项速查表
========================================
命令/选项 说明
----------------------------------------
pwd # 显示当前工作目录的完整绝对路径
pwd -P # 显示当前目录的真实物理路径(避开软链接)
========================================
输出示例:
$ pwd
/home/user/Documents
========================================cp:复制粘贴
========================================
cp 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-r # 递归复制(复制目录及其所有内容,必会!)
-i # 覆盖前询问(防止误覆盖重要文件)
-f # 强制覆盖(不提示,直接覆盖目标文件)
-v # 显示复制进度(显示正在复制的文件名)
-p # 保留原文件的属性(如修改时间、权限等)
-a # 归档模式(等于 -r -p -d,常用于备份)
-u # 仅当源文件比目标文件新,或目标不存在时才复制
/. # 复制文件里面的内容
========================================
常用组合示例:
cp -r /路径/. ./ # 把文件里面的内容复制到当前目录下(包括隐藏文件)
cp -r /路径/* ./ # 把文件里面的内容复制到当前目录下
cp file1.txt file2.txt # 复制并重命名文件
cp -r dir1/ dir2/ # 复制整个目录
cp -i file1.txt /path/ # 覆盖前询问,防止误操作
cp -rv dir1/ /backup/ # 递归复制目录并显示进度
cp -a /home/user /backup/ # 完整备份,保留所有文件属性
========================================mv:剪切小能手
========================================
mv 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-i # 覆盖前询问(防止误覆盖,推荐日常使用)
-f # 强制覆盖(不提示,直接覆盖目标文件)
-n # 不覆盖已存在的文件(直接跳过)
-v # 显示详细的移动/重命名过程
-u # 仅当源文件比目标文件新,或目标不存在时才移动
-b # 覆盖前自动为旧文件创建备份(文件名后加 ~)
========================================
常用组合示例:
mv file.txt /path/to/dir/ # 将文件移动到指定目录
mv old.txt new.txt # 将文件重命名
mv -i file.txt /path/ # 移动并询问,防止误覆盖
mv -v *.log /backup/ # 批量移动日志文件并显示进度
mv -b file.txt /backup/ # 移动并备份目标位置的同名文件
mv dir1/ dir2/ # 将目录 dir1 移动到 dir2 下
========================================rm:删除大师
========================================
rm 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-r # 递归删除(删除目录及其所有内容,删文件夹必用)
-f # 强制删除(忽略不存在的文件,不进行任何确认提示)
-i # 删除前逐一询问确认(防误删神器)
-v # 显示详细的删除过程
-I # 删除超过3个文件或递归删除时,仅提示一次确认
-d # 删除空目录(相当于 rmdir)
========================================
常用组合示例:
rm file.txt # 删除单个文件
rm file1.txt file2.txt # 同时删除多个文件
rm -r dir1/ # 递归删除目录及其内部所有内容
rm -i file.txt # 删除前询问确认,防止手滑
rm -rf dir1/ # 强制递归删除(极度危险,请慎用!)
rm -v *.log # 批量删除日志文件并显示进度
========================================
高危操作警告:
千万不要随意执行 rm -rf / 或 rm -rf /*
这会导致系统根目录下的所有文件被强制清空!
========================================mkdir:创建目录
========================================
mkdir 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-p # 递归创建(自动创建所有不存在的父目录,最常用!)
-v # 显示详细的创建过程(打印出每个新建的目录名)
-m # 直接设置新目录的权限(如 755、777)
========================================
常用组合示例:
mkdir testdir # 在当前目录创建一个名为 testdir 的文件夹
mkdir dir1 dir2 dir3 # 同时创建多个同级目录
mkdir -p a/b/c # 一键创建多级嵌套目录(即使 a 和 b 不存在)
mkdir -pv a/b/c # 创建多级目录并显示创建过程
mkdir -m 755 secure_dir # 创建一个权限为 755 的目录
mkdir "My Documents" # 创建名字带空格的目录(记得加引号)
========================================rmdir:删除目录
========================================
rmdir 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-p # 递归删除(逐级向上删除空目录,直到遇到非空目录为止)
-v # 显示详细的删除过程(打印出每个被删除的目录名)
--ignore-fail-on-non-empty # 忽略因目录非空而产生的报错
========================================
常用组合示例:
rmdir emptydir # 删除一个名为 emptydir 的空目录
rmdir dir1 dir2 dir3 # 同时删除多个空目录
rmdir -p a/b/c # 递归删除 a/b/c,如果删完后 a/b 和 a 也变空了,会一并删除
rmdir -pv a/b/c # 递归删除并显示每一步的删除过程
rmdir --ignore-fail-on-non-empty * # 批量删除当前目录下的所有空文件夹,忽略非空的报错
========================================touch:新建一个文件(如果文件存在更新时间戳)
========================================
touch 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-a # 仅更新文件的访问时间 (atime)
-m # 仅更新文件的修改时间 (mtime)
-c # 如果文件不存在,则不创建新文件
-t # 使用指定的时间格式来更新时间戳
-d # 使用易读的字符串来更新时间戳 (如 "2 days ago")
-r # 使用另一个文件的时间戳作为参考
========================================
常用组合示例:
touch file.txt # 创建空文件或更新现有文件的时间戳
touch file1.txt file2.txt # 同时创建或更新多个文件
touch file{1..10}.txt # 批量创建 file1.txt 到 file10.txt
touch -c notexist.txt # 仅当文件存在时才更新时间,不创建新文件
touch -t 202501011200 file # 将文件时间戳设为 2025年1月1日 12:00
touch -d "yesterday" file # 将文件时间戳设为昨天
touch -r ref.txt target.txt # 让 target.txt 的时间戳和 ref.txt 完全一致
========================================init:初始化系统
========================================
init 命令运行级别速查表
========================================
级别 说明
----------------------------------------
0 # 关机 (系统安全关闭并断电)
1 # 单用户模式 (用于系统维护/修复,仅root可登录)
2 # 多用户模式 (无NFS网络文件系统)
3 # 完全多用户模式 (标准的服务器命令行界面)
4 # 保留/未使用 (通常供用户自定义)
5 # 图形界面模式 (带GUI桌面的多用户环境)
6 # 重启 (系统安全关闭后重新启动)
========================================
常用组合示例:
sudo init 0 # 立即关闭系统
sudo init 6 # 立即重启系统
sudo init 3 # 切换到纯命令行模式 (退出图形界面)
sudo init 5 # 切换到图形桌面模式
sudo init 1 # 进入单用户维护模式
who -r 或 runlevel # 查看当前系统的运行级别
========================================
重要提示:
1. 执行 init 切换级别通常需要 root 超级用户权限。
2. 现代 Linux 发行版 (如 Ubuntu, CentOS 7+) 大多使用 systemd。
init 命令通常只是兼容性的符号链接,实际执行的是 systemctl。
3. 日常关机/重启更推荐使用 shutdown 或 systemctl,因为它们会
提前通知已登录的用户,更加安全。
========================================man:查看命令文档信息
========================================
man 命令使用速查表
========================================
基本语法:man [命令名]
----------------------------------------
常用快捷键(在 man 手册界面内使用):
----------------------------------------
空格键 # 向下翻一页
b # 向上翻一页
/关键词 # 向下搜索关键词(例如 /-r)
n # 跳转到下一个匹配的搜索结果
N # 跳转到上一个匹配的搜索结果
q # 退出 man 手册,返回终端
========================================
常用组合示例:
man ls # 查看 ls 命令的完整帮助手册
man mkdir # 查看 mkdir 命令的详细说明
man 5 passwd # 查看 passwd 配置文件的格式说明(5代表文件类)
man -k pwd # 模糊搜索包含 pwd 关键词的所有命令(同 apropos)
man -f ls # 简要显示 ls 的手册页描述(同 whatis)
========================================
💡 手册章节说明(man 1-9):
1 - 普通用户可执行的命令
2 - 系统调用(内核提供的函数)
3 - 库函数调用(编程常用)
4 - 设备文件说明
5 - 配置文件格式
6 - 游戏
7 - 杂项(如协议、标准)
8 - 系统管理员命令
9 - 内核例程
========================================file:查看文件类型
========================================
file 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-b # 简洁模式(不显示文件名,只显示文件类型)
-i # 输出标准的 MIME 类型(如 text/plain)
-L # 跟随符号链接(查看快捷方式指向的真实文件类型)
-z # 尝试查看压缩包内部的文件类型
-f # 从指定文件中读取文件名列表,批量识别
========================================
常用组合示例:
file example.txt # 查看单个文件的真实类型
file * # 批量查看当前目录下所有文件的类型
file -b example.txt # 简洁输出,适合在脚本中获取类型信息
file -i image.jpg # 查看文件的 MIME 类型(如 image/jpeg)
file -L my_link # 查看符号链接(软链接)指向的真实文件
file -z backup.tar.gz # 不解压,直接看压缩包里面装的是什么
========================================
类型介绍:
text 文本类型
directory 目录类型
executable 可执行程序类型
symbolic link 软链接
block 块文件,光盘、硬盘、U盘
character 输入、输出设备(字符文件)cat:查看文件内容输出屏幕(小扩展)
========================================
选项 说明
----------------------------------------
-n # 对所有输出的行进行编号(包括空行)
-b # 对非空行进行编号(跳过空行)
-s # 压缩连续的空行(多个空行只显示一个)
-E # 在每行末尾显示 $ 符号(排查行尾空格神器)
-T # 将制表符(Tab)显示为 ^I
========================================
常用组合示例:
cat file.txt # 查看单个文件的全部内容
cat -n file.txt # 查看文件并显示行号
cat file1.txt file2.txt # 同时查看多个文件的内容
cat file1.txt file2.txt > new.txt # 合并两个文件的内容到新文件
cat file.txt >> other.txt # 将 file.txt 的内容追加到 other.txt 末尾
cat > newfile.txt # 创建新文件并从键盘输入内容(Ctrl+D 结束)
cat /dev/null > file.txt # 快速清空某个文件的内容
========================================
# 扩展内容
nl 文件名 # 显示内容并加上行号
tac 文件名 # 内容也会从尾到头
less 文件名 # 内容可以滚轮看,按q退出,Enter键一行翻页,空格一屏一屏看
more 文件名 # 内容可以看进度(%)只能向下翻页,不能向上
========================================
#扩展内容 搭配管道符|
head 文件名 # 默认看文件的前十行
head -数字 文件名 # 可以看数字前几行(数字写几看几行)
tail 文件名 # 可以看文件尾部的十行
tail -数字 文件名 # 可以看数字后几行(数字写几看几行)
cat -n 文件名 |head -10|tail -5 # 先输出前十行,在输出后五行,最终可看6-10行
| 管道符 # 将一个命令的执行结果,交给后一个命令继续执行
/关键字 # 查找信息 stat:文件详细信息(文件元数据)
介绍:比ls -l更加全面。
* 元数据(inode、block、size、ugo、fileType...)
更改时间:文件内容的修改时间
改动时间:文件元数据的改动时间
========================================
stat 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-L # 跟随符号链接(查看快捷方式指向的真实文件状态)
-f # 显示文件所在文件系统的整体状态(而非文件本身)
-c 格式 # 自定义输出格式(提取特定的文件信息)
========================================
常用组合示例:
stat file.txt # 查看文件的完整详细状态
stat -L my_link # 查看符号链接指向的真实文件信息
stat -f /home # 查看 /home 目录所在文件系统的状态
stat -c "%n %s %A" file # 自定义输出:文件名 大小(字节) 权限
stat -c "%y %n" *.log # 批量查看多个日志文件的修改时间和文件名
========================================type:查看命令的类型
介绍:在 shell 中,type 是一个用于确定命令如何被解释和执行的内置命令。它可以帮助你了解某个命令是 shell 内置命令、外部可执行文件,还是别名(alias)或函数。
用法:type [选项] 命令名
- 选项:常用的有 -a(显示所有可能的位置)、-t(只显示类型)等。
- 命令名:要查询的命令(如 ls、cd、type 本身)。echo:使用方法
# 基础输出与变量提取
## 打印普通文本
echo "Hello, Shell!"
## 打印变量的值
name="Linux"
echo "当前系统是: $name"
## 打印命令的执行结果(命令替换)
echo "当前目录是: $(pwd)"
# 输出带颜色的文字(运维脚本必备)
## 31=红色, 32=绿色, 33=黄色, 1=加粗
echo -e "\033[32m[成功] 操作已完成!\033[0m"
echo -e "\033[31m[错误] 执行失败,请检查!\033[0m"
echo -e "\033[33;1m[警告] 这是一个加粗的黄色提示\033[0m"
# 输出不带换行的提示语
## -n 表示输出后不换行
echo -n "请输入你的姓名:"
read name # 等待用户输入
echo "你好,$name"
# 格式化输出(换行与制表符)
介绍:默认情况下 echo 不会识别 \n(换行)或 \t(制表符/Tab),必须加上 -e 参数来开启转义功能。
## -e 开启转义,\n 实现换行,\t 实现制表符(Tab缩进)
echo -e "第一行\n第二行\n\t缩进的第三行"du:文件或目录实际占用大小
du -sh 查看当前目录的总大小
du -sh 目录名 查看指定目录的总大小
du -ah 目录名 看所有文件的大小(包含隐藏文件)
du -h --max-depth=1 目录名 | sort -rh 它会列出第一层子目录的大小,并且自动帮你从大到小排 好序一眼就能看到谁在吃硬盘block/inode:查看占用
# 查看磁盘block使用情况(空间占用)
df -h
# 查看文件系统block大小
stat / | grep "IO Block"
# 查看文件inode号
ls -li 文件名
# 查看inode完整元数据
stat 文件名
# 查看磁盘inode使用情况
df -i软硬链接文件
硬链接方式:
ln 原文件 硬链接名
# 语法:ln 原文件路径 硬链接文件路径
ln test.txt test_hard.link
# 验证:inode号完全一致
ls -i test.txt test_hard.link
# 验证:硬链接计数变为2
ls -l test.txt
软连接方式:
ln -s 原文件 软链接名
# 语法:ln -s 目标文件/目录路径 软链接文件路径
# 最佳实践:优先使用绝对路径创建,避免软链接移动后断链
ln -s /root/test.txt /root/test_soft.link
# 给目录创建软链接
ln -s /root/test_dir /root/test_dir_link
# 验证:inode号与原文件完全不同
ls -i test.txt test_soft.linkping:主机连通性测试
基础语法:ping [选项] 目标IP/域名
核心常用选项:
选项 功能说明
-c 次数 指定发送数据包的数量(Linux默认持续发送)
-i 间隔 设置数据包发送间隔(单位秒,默认1秒)
-s 包大小 设置数据包大小(单位字节,默认56字节)
-W 超时 设置等待响应的超时时间(单位秒)
-n 禁用域名解析,仅显示IP,加快输出
-4/-6 强制使用IPv4/IPv6协议
实战示例:
# 最常用:发送4个包测试百度连通性
ping -c 4 baidu.com
# 禁用DNS解析,测试网关连通性,超时2秒
ping -c 4 -n -W 2 192.168.1.1
# 大包测试(1400字节),排查MTU问题
ping -c 10 -s 1400 192.168.1.1ip:指令
基础语法:ip [选项] 子命令 [操作] [参数]
核心子命令:link(接口管理)、addr(IP地址管理)、route(路由管理)、neigh(ARP邻居表)
1.1 ip link - 网络接口(网卡)管理
核心作用:查看网卡硬件信息、启用/禁用网卡、修改MTU、MAC地址等属性。
常用示例:
# 查看所有网卡的详细状态(MAC地址、MTU、启停状态)
ip link show
# 简写
ip l
# 查看指定网卡信息
ip link show eth0
# 启用/禁用网卡
sudo ip link set eth0 up
sudo ip link set eth0 down
# 修改网卡MTU值(默认1500,解决大包丢包问题)
sudo ip link set eth0 mtu 1450
# 修改网卡MAC地址(需先禁用网卡)
sudo ip link set eth0 down
sudo ip link set eth0 address 00:11:22:33:44:55
sudo ip link set eth0 up
1.2 ip addr - IP地址管理
核心作用:查看、添加、删除网卡的IP地址(IPv4/IPv6),替代传统ifconfig。
常用示例:
# 查看所有网卡的IP地址信息(IPv4+IPv6)
ip addr show
# 简写
ip a
# 查看指定网卡的IP信息
ip addr show eth0
# 给网卡添加临时IP地址(重启网络/系统后失效)
sudo ip addr add 192.168.1.100/24 dev eth0
# 给网卡添加辅助IP(同网卡多IP)
sudo ip addr add 192.168.1.101/24 dev eth0 label eth0:1
# 删除网卡的IP地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 清空指定网卡的所有IP地址
sudo ip addr flush dev eth0
1.3 ip neigh - ARP/邻居表管理
核心作用:查看、添加、删除ARP缓存条目,替代传统arp命令。
常用示例:
# 查看ARP邻居表(IP与MAC地址对应关系)
ip neigh show
# 简写
ip n
# 添加静态ARP绑定(防止ARP欺骗)
sudo ip neigh add 192.168.1.2 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
# 删除ARP条目
sudo ip neigh del 192.168.1.2 dev eth0
# 清空ARP缓存
sudo ip neigh flush allnetstat/ss:查看网络连接和开放端口
========================================
netstat / ss 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-t # 仅显示 TCP 协议的连接状态
-u # 仅显示 UDP 协议的连接状态
-l # 仅显示正在监听(LISTEN)状态的端口
-n # 直接以数字形式显示 IP 和端口(不解析域名,速度更快)
-p # 显示占用该连接的进程 PID 和程序名称(需 root 权限)
-a # 显示所有连接(包含监听和非监听的活跃连接)
-r # 显示系统内核路由表信息(相当于 route -n)
-s # 显示网络协议的整体统计信息(如丢包、错误数等)
-c # 持续实时刷新输出网络状态(类似 top 的动态监控效果)
-i # 显示网卡接口的详细统计信息(类似 ifconfig)
========================================
常用组合示例:
ss -tulnp # 查看所有 TCP/UDP 监听端口及对应进程(最常用)
netstat -antp # 查看所有 TCP 连接状态及对应进程
ss -s # 快速查看当前系统的网络连接整体概况
ss -tn state established # 仅筛选出处于 ESTABLISHED(已建立)状态的连接
netstat -r # 查看本机的默认网关和路由表信息
ss -tan | grep :80 # 排查 80 端口的所有连接情况
========================================进程和线程
进程:进程是正在运行中的程序;数据被加载到内存,被CPU调用执行;进程是最小的资源管理的单元;
程序:静态的可以被执行的文件;
线程:进程中最小运行单元,一个进程中至少需要一个线程(主线程);现代CPU、操作系统支持多线程;
指令
ps # 静态显示进程信息
ps -aux # 显示所有用户、进程、所有执行状态
kill # 按照PID进行杀进程 -9 是强制杀死
pkill # 按名字批量杀死
常用ps命令变体
# 按CPU使用率降序排列
ps aux --sort=-%cpu
# 按内存使用率降序排列
ps aux --sort=-%mem
# 显示进程树(父子关系)
ps auxf
# 显示指定用户的所有进程
ps aux -u nginx
# 显示完整命令行(不截断)
ps auxww
======================================================
top 动态显示进程运行信息(实时刷新)
# 在top实时显示输入可查看
t 显示CPU占用率
m 显示内存占用率
q 退出
======================================================
Ctrl + z # 将前台进程在后台终止
& # 将前台进程在后台继续执行
jobs # 查看被放置在后台的进程
fg 工作编号 # 将后台进程放到前台
bg 工作编号 # 将终止的后台进程,在后台继续执行
命令 & # 后台执行
命令1 && 命令2 # 命令1正常结束,才会运行命令2
命令 &> /dev/null # 重定向所有输出(stdio/stderr) /dev/null 黑洞文件
符号使用介绍:
&& # 逻辑与运算
|| # 逻辑或运算
; # 分号
& # 命令末尾;表示后台执行;例:cmd1 &
& # 命令间;表示并行启动两个程序,无逻辑依赖;例:mod1 & mod2
例子:
命令1 && 命令2 # 只有当左边的命令执行成功(返回值为 0)时,才会继续执行右边的命令;
命令1 || 命令2 # 只有当左边的命令执行失败(返回值不为 0)时,才会去执行右边的命令;
命令1 ; 命令2 # 无脑执行,它只负责按顺序把命令一个个跑完,完全不管前面的命令是成功还是失败。
案例:
sleep 1000 # 会阻塞终端1000秒,添加'&'可将命令置于后台运行,如:sleep 1000 &
Ctrl + z # 放到后台,暂停前台进程,状态为'已停止'
jobs # 查看后台任务列表,使用工作编号(jobs ID)
bg %1 # 将已停止的任务在后台继续执行
fg %1 # 后台运行进程切换到前台运行常见状态
进程状态(S)的常见值
R:运行中(Running),正在CPU上执行或等待执行
S:睡眠中(Sleeping),等待某个事件完成
D:不可中断睡眠(Uninterruptible Sleep),通常在等待IO操作完成 # IO进程是指正在大量进行磁盘续写操作
Z:僵尸进程(Zombie),进程已终止但父进程未回收其资源
T:停止(Stopped),被信号暂停或被调试器跟踪
主状态码(第一个字符):
R:运行中(Running),正在CPU上执行或等待执行
S:可中断睡眠(Sleeping),等待事件完成(最常见状态)
D:不可中断睡眠(Uninterruptible Sleep),通常在等待磁盘IO
Z:僵尸进程(Zombie),已终止但父进程未回收资源
T:停止状态(Stopped),被信号暂停或被调试器跟踪
I:空闲内核线程(Idle Kernel Thread),Linux 4.14+新增
附加状态码(后续字符):
s:会话首进程(Session Leader)
l:多线程进程(包含多个线程)
+:前台进程组中的进程
<:高优先级进程(nice值为负)
N:低优先级进程(nice值为正)
L:有页面被锁定在内存中
s:会话领导者
t:被跟踪状态(正在被调试器跟踪)
常见组合示例:
Ss:系统守护进程(会话首进程,睡眠状态)
Ssl:多线程系统守护进程
S+:前台运行的普通进程
R+:前台运行的活跃进程
Z:僵尸进程
示例解读:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 123456 45678 12345 jS 5.2 2.3 0:12.34 nginx
表示:
PID (1234):进程的身份证号。方便系统管理和我们进行精准操作(比如用 kill 1234 来结束它)。
USER (root):这个进程是由哪个用户启动的。这里显示是 root,也就是系统的超级管理员。
PR (20):代表进程的优先级。PR 是内核看到的实际优先级。默认是 20,说明这是一个按标准优先级运行的普通进程。
NI (0):NI 是用户可以调整的数值。默认是 0,说明这是一个按标准优先级运行的普通进程。
VIRT (123456):虚拟内存总量。表示该进程申请占用的所有内存空间总和(包括还没真正用到的),单位通常是 KB。
RES (45678):常驻物理内存。这是最关键的指标之一,表示该进程当前实实在在占用了多少条物理内存(RAM)。
SHR (12345):共享内存大小。表示这部分内存是可以和其他进程共用的(比如调用了某些公共的系统库)。
S (S):进程当前的状态。S 代表 Sleeping(睡眠/待机)。
%CPU (5.2):自上次刷新以来,该进程占用了 5.2% 的 CPU 算力。
%MEM (2.3):该进程占用了系统总物理内存的 2.3%。
TIME+ (0:12.34):该进程从启动到现在,累计消耗了 12.34 秒的纯 CPU 运算时间。
COMMAND (nginx):启动这个进程的程序名称。特殊进程
守护进程:
在后台长期运行,脱离终端控制;
通常以服务方式提供功能;
名称常以'd'结尾;
关闭终端不影响其运行;
守护进程具有独立于用户会话的生命周期
孤儿进程:
父进程先于子进程终止;
子进程变成孤儿,由init(PID=1)接管;
init会自动回收孤儿进程资源;
孤儿进程由init(PID=1)自动接管并回收
僵尸进程:
子进程终止后,父进程未读取其退出状态;
导致PID和部分资源残留;
无法通过kill直接终止;
解决方法:杀死父进程,出发init自动回收机制;
僵尸进程无法被kill终止,需要通过父进程回收服务管理
操作参数:
例:systemctl 操作 服务名
start 启动服务
stop 停止服务
restart 重启服务(没启动的服务会启动)
try-restart 只重启正在运行的服务(没有运行则不启动)
reload 重载配置文件(修改完服务的配置文件后使用)
status 检查服务状态
is-active 检查服务是否已经启动
enable 设置服务开机时启动
disable 设置服务开机时不启动
is-enabled 查看服务是否开机自动启动
mask 屏蔽一个服务
unmask 取消屏蔽user:用户操作
useradd 创建用户
========================================
useradd 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-m # 强制创建用户的家目录(默认在 /home/用户名)
-s # 指定用户登录的 Shell(如 /bin/bash)
-u # 指定用户的 UID(用户ID)
-g # 指定用户的主组(该组必须已存在)
-G # 指定用户的附加组(多个组用逗号隔开)
-c # 添加用户的备注信息(如真实姓名)
-d # 指定用户的家目录路径(覆盖默认位置)
-e # 设置账号的失效日期(格式:YYYY-MM-DD)
-r # 创建一个系统账号(无家目录,UID在保留范围内)
-M # 不创建家目录(即使配置文件里默认要创建)
========================================
常用组合示例:
useradd -m -s /bin/bash user1 # 创建带家目录且可登录的普通用户
useradd -r -M -s /sbin/nologin app # 创建无家目录且不可登录的系统账号
useradd -m -d /opt/data user1 # 创建用户并指定自定义的家目录位置
useradd -G sudo,dev team1 # 创建用户并直接加入 sudo 和 dev 附加组
========================================usermod:用户修改
========================================
usermod 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-a # 追加附加组(必须与 -G 连用,否则会覆盖原有组)
-G # 修改用户的附加组列表
-l # 修改用户的登录名
-u # 修改用户的 UID
-g # 修改用户的主组
-d # 修改用户的家目录路径
-m # 移动旧家目录内容到新位置(必须与 -d 连用)
-s # 修改用户登录的 Shell
-L # 锁定用户密码(禁止登录)
-U # 解锁用户密码(恢复登录)
-e # 设置账号的失效日期(格式:YYYY-MM-DD)
========================================
常用组合示例:
usermod -aG sudo,docker user1 # 给用户追加 sudo 和 docker 组权限
usermod -d /new/home -m user1 # 迁移用户家目录并移动文件
usermod -l newname oldname # 将用户名 oldname 修改为 newname
usermod -L user1 # 临时锁定禁止用户登录
========================================userdel:用户删除
========================================
userdel 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-r # 删除用户的同时,彻底删除其家目录和邮件池
-f # 强制删除(即使用户正在登录也强制踢出并删除)
-Z # 删除用户的 SELinux 用户映射(仅限支持 SELinux 的系统)
========================================
常用组合示例:
userdel -r user1 # 彻底删除用户及其所有文件(最常用)
userdel user1 # 仅删除账号,保留 /home/user1 下的文件
userdel -f user1 # 强制删除当前正在登录的用户
========================================pawwsd:用户密码
========================================
passwd 命令常用选项速查表
========================================
选项 说明
----------------------------------------
(无) # 不带参数时,修改当前登录用户自己的密码
用户名 # 直接跟用户名,修改指定用户的密码(需要 root 权限)
-d # 删除用户的密码(使其成为无密码登录状态)
-l # 锁定指定用户的密码(禁止该用户登录)
-u # 解锁指定用户的密码(恢复登录权限)
-e # 强制密码立即过期(用户下次登录时必须修改密码)
-S # 查看用户的密码状态(如是否被锁定、加密算法等)
-n # 设置密码修改的最小间隔天数(0 表示随时可改)
-x # 设置密码的最长有效期(多少天后必须修改)
-w # 设置密码过期前的警告天数
-i # 设置密码过期后的宽限天数(超过后账号将被禁用)
--stdin # 从标准输入读取密码(常用于 Shell 脚本中静默修改)
========================================
常用组合示例:
passwd user1 # 交互式修改指定用户的密码
echo "123456" | passwd --stdin user1 # 脚本中静默将用户密码改为 123456
passwd -e user1 # 强制用户 user1 下次登录时重置密码
passwd -S user1 # 查看 user1 的密码状态信息
passwd -l user1 # 临时锁定用户,禁止其登录系统
========================================文件权限及属主和属组
chmod:文件权限修改
========================================
chmod 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-R # 递归修改目录及其内部所有子文件、子目录的权限
-v # 显示权限修改的详细执行过程
-c # 仅在权限实际发生更改时才输出提示信息
--reference=RFILE # 将文件的权限直接修改为与参考文件 RFILE 一致
u / g / o / a # 代表 所有者(u) / 所属组(g) / 其他人(o) / 所有人(a)
+ / - / = # 代表 增加(+) / 取消(-) / 精确设定(=) 权限
r / w / x # 代表 读(r=4) / 写(w=2) / 执行(x=1)
========================================
常用组合示例:
chmod 755 script.sh # 设置标准可执行权限(所有者全开,其他人读+执行)
chmod 644 file.txt # 设置标准文件权限(所有者读写,其他人只读)
chmod +x app # 给所有人增加执行权限
chmod u+x,go-w file # 所有者加执行权限,组和其他人减写权限
chmod -R 755 /var/www/html # 递归将目录下所有文件设为标准网页权限
chmod --reference=a.txt b.txt # 把 b.txt 的权限改成和 a.txt 一模一样
========================================chown:属主和属组相关修改
========================================
chown 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-R # 递归修改目录及其内部所有子文件、子目录的所有者
-v # 显示指令执行的详细过程
-c # 仅在所有者实际发生更改时才输出提示信息
-f # 静默模式,屏蔽大部分的错误信息
-h # 只修改符号链接本身的拥有者,不修改其指向的目标文件
--reference=RFILE # 将文件的权限直接修改为与参考文件 RFILE 一致
--from=CURRENT # 仅当文件当前的所有者匹配时,才进行修改(防误操作)
========================================
常用组合示例:
chown user1 file.txt # 将单个文件的所有者修改为 user1
chown user1:group1 file.txt # 同时修改文件的所有者为 user1,所属组为 group1
chown :developers file.txt # 仅修改文件的所属组为 developers(不改变所有者)
chown -R apache:apache /var/www # 递归将目录下所有文件的所有者和组改为 apache
chown --reference=a.txt b.txt # 把 b.txt 的所有者和组改成和 a.txt 一模一样
chown -R --from=root nginx /data # 仅将原本属于 root 的文件改为 nginx 所有
========================================chgrp:属组相关修改
========================================
chgrp 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-R # 递归修改目录及其内部所有子文件、子目录的所属组
-v # 显示指令执行的详细过程
-c # 仅在所属组实际发生更改时才输出提示信息
-f # 静默模式,屏蔽大部分的错误信息
-h # 只修改符号链接本身的所属组,不修改其指向的目标文件
--reference=RFILE # 将文件的所属组直接修改为与参考文件 RFILE 一致
========================================
常用组合示例:
chgrp developers file.txt # 将单个文件的所属组修改为 developers
chgrp -R staff /var/www/html # 递归将目录下所有文件的所属组改为 staff
chgrp -v admin config.log # 修改所属组并显示详细执行过程
chgrp --reference=a.txt b.txt # 把 b.txt 的所属组改成和 a.txt 一模一样
chgrp -h users link_file # 修改软链接本身的所属组(不影响目标文件)
========================================group:用户组操作
grouoadd:创建用户组
========================================
groupadd 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-g # 指定新用户组的组ID(GID),默认系统会自动分配
-o # 允许使用重复的 GID 创建新组(需配合 -g 使用)
-r # 创建一个系统用户组(GID通常在 1-999 范围内)
-f # 强制创建(如果组已存在,配合 -g 可强制分配新 GID)
-p # 为新用户组设置密码(密码需为加密后的形式)
-K # 覆盖 /etc/login.defs 配置文件中的默认值
========================================
常用组合示例:
groupadd developers # 创建一个名为 developers 的普通用户组
groupadd -g 1000 devteam # 创建一个指定 GID 为 1000 的用户组
groupadd -r sysadmin # 创建一个用于系统服务的系统用户组
groupadd -g 2000 -o backup # 强制创建一个与现有组 GID 重复的组
groupadd -f -g 1001 project # 如果组已存在,强制为其分配新的 GID
========================================groupmod:修改用户组
========================================
groupmod 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-h # 显示命令帮助信息并退出
-n # 修改用户组的名称 (new name)
-g # 修改用户组的组ID(GID)
-o # 允许使用重复的 GID(需与 -g 配合使用,不推荐常规操作)
-p # 修改用户组的密码(需填入已加密的密码字符串)
-R # 在指定的 CHROOT_DIR 目录下应用更改
========================================
常用组合示例:
groupmod -n newname oldname # 将旧组名 oldname 修改为 newname
groupmod -g 2001 developers # 将 developers 组的 GID 修改为 2001
groupmod -n dev_team -g 3002 old # 同时修改组名和 GID
groupmod -g 1000 -o temp_group # 强制将 GID 修改为与现有组重复的 1000
========================================
⚠️ 特别提醒:
修改组的 GID 后,系统不会自动更新文件系统中已存在文件的属组信息(这些文件仍指向旧的 GID 编号)。
修改后通常需要手动使用 find 等命令查找并修复文件权限,否则可能会引发权限问题。groupdel:删除用户组
========================================
groupdel 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-f # 强制删除用户组(即使该组是某个用户的主组也强制删除)
-h # 显示帮助信息并退出
-R # 在指定的 CHROOT_DIR 目录下应用更改(需绝对路径)
-P # 在指定的 PREFIX_DIR 目录下应用更改(用于交叉编译环境)
========================================
常用组合示例:
groupdel developers # 删除名为 developers 的普通用户组
groupdel -f oldteam # 强制删除 oldteam 组(即使有用户将其设为主组)
groupdel -R /mnt/sysimage mygroup # 在指定的系统镜像目录中删除指定用户组
========================================
⚠️ 特别提醒:
1.默认情况下,groupdel 不能删除任何用户当前的“主组”(Primary Group)。
如果必须删除,需要先用 usermod 修改该用户的主组,或者使用 -f 选项强制删除。
2.删除用户组后,系统不会自动处理原本属于该组的文件。这些文件的 GID 会变成无归属的数字编号,
通常需要手动使用 chgrp 或 find 命令重新分配这些文件的所属组。gpasswd:管理用户组
========================================
gpasswd 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-a # 向指定的组中添加用户(安全追加,不影响原有附加组)
-d # 从指定的组中移除用户(踢出组员)
-M # 批量设定/覆盖组成员列表(会直接替换掉原有的所有成员)
-A # 设置组的管理员(被授权的用户可自行管理该组的进出人员)
-r # 删除组的密码
-R # 限制只有组内成员才能通过 newgrp 命令切换到该组
(无选项) # 仅跟组名时,用于为该组交互式设置或修改密码
========================================
常用组合示例:
gpasswd -a tom admin # 将用户 tom 添加到 admin 组中
gpasswd -d lily admin # 将用户 lily 从 admin 组中移除
gpasswd -M alice,bob dev_team # 将 dev_team 组的成员重置为 alice 和 bob
gpasswd -A manager project_a # 将用户 manager 设为 project_a 组的管理员
gpasswd test_group # 为 test_group 组设置一个访问密码
========================================
⚠️ 特别提醒:
使用 -M 选项时会完全覆盖组内现有的所有成员,操作前请务必确认;日常给用户追加组权限时,
强烈推荐使用 gpasswd -a 或 usermod -aG,千万不要直接使用不带 -a 的 usermod -G,
否则会清空用户原本所属的其他附加组。四剑客find、grep、sed、awk
find:文件搜索
========================================
find 命令常用选项速查表
========================================
常用查找条件:
----------------------------------------
-name "文件名" # 按文件名查找(支持 * 通配符,区分大小写)
-iname "文件名" # 按文件名查找(不区分大小写)
-type 类型 # 按文件类型查找 (f=文件, d=目录, b=块文件、磁盘设备,l=链 接,c=字符文件、输入输出设备)
-size 大小 # 按文件大小查找 (+大于, -小于,单位(c,k,M,G))
-mtime 天数 # 按文件修改时间查找 (+超过n天, -n天内)
-user 用户名 # 按文件所有者查找
-perm 权限 # 按文件权限查找 (如 755, 644)
-empty # 查找空文件或空目录
-maxdepth 层级 # 限制搜索的最大目录深度
-a and # 与运算 多个条件同时满足,才会找到结果,一般省略
-o or # 或运算 满足任意一个条件,就可以找到结果
! not # 非运算 取反,获取和条件相反的结果
*内容* # 模糊查找
*.log # 以.log结尾的查找
----------------------------------------
常用执行动作:
----------------------------------------
-print # 打印找到的文件路径(默认动作)
-delete # 直接删除找到的文件
-exec 命令 {} \; # 对找到的文件执行指定的命令
========================================
常用组合示例:
find . -name "*.log" # 在当前目录查找所有 .log 结尾的文件
find /home -type d -name "test" # 在 /home 下查找名为 test 的目录
find . -size +100M # 查找当前目录下大于 100MB 的文件
find . -mtime -7 # 查找最近 7 天内修改过的文件
find . -type f -empty # 查找当前目录下所有的空文件
find . -name "*.tmp" -delete # 查找并直接删除所有 .tmp 文件
find . -name "*.txt" -exec rm {} \; # 查找所有 .txt 文件并执行 rm 删除
========================================
💡 重点注意事项:
1. 通配符 * 必须加引号:例如 "*.txt",否则会被系统提前解析导致失效。
2. -exec 的固定格式:命令结尾的 {} \; 是固定写法,{} 代表找到的文件,
\; 代表命令结束,注意反斜杠和分号前要有空格。
3. 搜索范围尽量精确:尽量不要直接从根目录 / 开始全盘搜索,速度会非常慢。
建议指定具体的目录(如 /var/log 或 . 当前目录)。
========================================
#例:
find 是命令行下的文件管理利器,搜索与操作一气呵成
# 按文件名:-name iname
find /etc -name ifcfg* # 搜索文件(ifcfg))的名字,区分大小写
find /etc -iname ifcfg* # 搜索文件且不区分大小写
find /root -type f root*
#按类型 -type筛选类型(d 目录, f文件)
find /root -type f # 按文件列出
find /root -type d # 按目录列出
# 按大小 -size精确筛选文件大小
find / -size +10M # 你在这个系统里面大于10M的文件
find /root -size -1M # 在root下小于1M的文件
find /root -size +1M -size -10M # 在root下大于1M的文件 小于10M的
# 按时间 -mtime 找最近修改的文件
find /root -mtime -1 # 修改时间在一天以内
find /root -mtime +1 # 修改时间大于一天
find /root -mtime +1 -10 # 修改时间大于一天小于十天的文件
# 结合操作:用 -exec对结果执行操作,比如删除或移动文件
find / -iname root*
查到两个root文件
find / -iname root* -exec rm -rf {} \;
你先查找,后删除这两个文件
#例: find . -iname 1 -exec chown cc {} \;
💡 一个让效率翻倍的小建议:
如果你一次性查找到了成百上千个文件,目前的写法会让系统把 chown 命令重复执行几百次(每找到一个文件就启动一次进程)。
在这种情况下,你可以将结尾的 \; 替换为 +,写成:
find . -iname 1 -exec chown cc {} +
两者的区别在于:
\;:找到 100 个文件,就会执行 100 次 chown。
+:找到 100 个文件,会把它们打包在一起,只执行 1 次 chown 命令
(类似于 chown cc 文件1 文件2 ... 文件100),在处理大量文件时能显著提升效率。grep:文本搜索
========================================
grep 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-i # 忽略大小写进行搜索
-n # 显示匹配行在文件中的行号(非常实用)
-v # 反向匹配(排除包含关键词的行)
-c # 只统计匹配行的数量,不显示具体内容
-w # 精确匹配整个单词(避免部分匹配)
-r # 递归搜索指定目录下的所有文件
-f # 匹配文件里面的内容进行搜索
-l # 只列出包含匹配内容的文件名,不显示具体行
-E # 支持扩展正则表达式(等同于 egrep)
-F # 按字符串字面意思匹配(禁用正则,速度更快)
-o # 只输出文件中匹配到的那部分内容
--color=auto # 高亮显示匹配到的关键词
-A / -B / -C # 分别显示匹配行后、前、以及前后各 N 行的上下文
========================================
📚 常用正则表达式元字符速查
========================================
^ # 匹配行的开头(如 "^error" 匹配以 error 开头的行)
$ # 匹配行的结尾(如 "end$" 匹配以 end 结尾的行)
. # 匹配任意单个字符(换行符除外)
* # 匹配前一个字符 0 次或多次
.* # 匹配任意长度的任意字符(最常用的通配组合)
[abc] # 匹配括号内的任意一个字符
[^abc] # 匹配除了括号内字符以外的任意字符
[0-9] 或 \d # 匹配任意数字
[a-z] # 匹配任意小写字母
\ # 转义字符(让特殊符号失去意义,如 "\." 匹配真正的点)
========================================
常用组合示例:
grep -vE "^#|^$" nginx.conf # 过滤掉以 # 开头的注释行和空行
grep -E "error|warn|fail" app.log # 查找包含 error 或 warn 或 fail 的行
grep -n "timeout$" error.log # 查找以 timeout 结尾的行并显示行号
grep -E "[0-9]{3}\.[0-9]{3}" data.txt # 使用扩展正则匹配类似 IP 的数字格式
grep -oE "http://[a-zA-Z0-9./]+" log # 只提取日志中所有的 http 链接地址
grep -E "^$" file.txt # 专门筛选出文件中的所有空行
tail -f app.log | grep --color "ERROR" # 实时监控日志,并高亮显示 ERROR 信息
========================================
💡 补充说明:正则表达式的避坑指南
1 基础正则 vs 扩展正则:默认情况下 grep 使用的是基础正则(BRE)
很多高级符号(比如 +、?、{}、())需要加上反斜杠 \ 才能生效。强烈建议养成使用 grep -E 的习惯(也就是以前的 egrep)
可以直接使用扩展正则(ERE),写起来更符合直觉。
2 . 不代表一切:在正则里 . 只能匹配“任意单个字符”,如果你想匹配“任意内容”,记得要用 .* 这个万能组合。
精准锚定:在处理配置文件或日志时,善用 ^(开头)和 $(结尾)能帮你避开很多误伤
比如只想找名为 log 的变量,用 ^log= 就比光搜 log 要准确得多。正则表达式
# 正则表达式入门
Re 是一种通过特定符号进行字符串匹配的规则;
内容查找过滤、替换、删除、数据验证等操作;
常见匹配规则:邮箱、手机号、IP、身份证号;
* 符号分类:
* 元字符:用于匹配内容;
* 数量词:内容重复的次数;
* 特殊功能符号:分组匹配、转义字符、贪婪模式与非贪婪模式
# 常见元字符
字母、数字可以匹配自己本身
. 英文状态的小数点,可以匹配任意一个字符;
[abc] 匹配范围内容的所有字符
[a-z] 匹配所有小写字母
[0-9] 匹配任意一个数字
[a-zA-Z0-9] 匹配所有一个字母或数字
[^0-9] 匹配所有非数字
# 特殊元字符,grep不支持
\w 匹配所有文本
\d 所有数字
\W 所有非文本
\D 所有非数字
\s 所有不显示的内容
\S 所有显示内容
# 数量符
# 数量符要写在元字符之后,表示元字符重复的次数
* 匹配任意次 0~+∞
+ 匹配1次以上 1~+∞
? 匹配0或1次
{n} 精确匹配n次
{n,m} n到m次 n ~ m次
{n,} 匹配n次以上 n~+∞
{0,m} 匹配m次以内
# 特殊功能
\ 转义字符,匹配符号本身
() 分组匹配
{} 匹配次数
[] 匹配字母和数字
^ 以...开头
$ 以...结尾sed:流文本编辑
========================================
sed 命令常用选项速查表
========================================
选项 说明
----------------------------------------
-n # 静默模式,只打印匹配或经过处理的行(取消默认全部输出)
-i # 直接修改原文件内容(慎用!建议先不加 -i 预览)
-i.bak # 修改原文件的同时,生成一个 .bak 后缀的备份文件(安全用法)
-e # 允许多条指令同时执行(例如同时进行替换和删除)
-E (或 -r) # 支持扩展正则表达式(无需转义 + ? | () 等符号)
-f # 从指定的脚本文件中读取 sed 命令
-r # 启动正则扩展
========================================
📚 sed 核心内置指令速查
========================================
s # 字符串替换(如 s/旧/新/g,最常用的指令)
d # 删除指定的行
p # 打印指定的行(通常配合 -n 使用)
a # 在指定行的后面追加(append)一行或多行文本
i # 在指定行的前面插入(insert)一行或多行文本
c # 将指定的行替换(change)为新的整行内容
========================================
常用组合示例:
sed 's/old/new/g' file.txt # 将每行的 old 替换为 new(仅预览不修改)
sed -i 's/old/new/g' file.txt # 直接修改原文件,全局替换所有匹配项
sed -i.bak 's/old/new/g' file.txt # 修改原文件并自动备份为 file.txt.bak
sed -n '5,10p' file.txt # 只显示文件的第 5 到 10 行
sed '3d' file.txt # 删除文件的第 3 行
sed '/^$/d' file.txt # 删除文件中的所有空行
sed '/error/d' app.log # 删除包含 error 关键词的所有行
sed '2i\插入的内容' file.txt # 在第 2 行前面插入一行文本
sed '2a\追加的内容' file.txt # 在第 2 行后面追加一行文本
sed -e 's/a/A/g' -e 's/b/B/g' file.txt # 同时执行多条替换指令
sed 's|/bin/bash|/bin/sh|g' /etc/passwd # 替换路径时,用 | 代替 / 避免频繁转义
sed -r 's/^#//' nginx.conf # 批量去掉配置文件行首的 # 注释符号
========================================
d 删除指定的行
========================================
sed '1d' 文件 # 表示删除第一行
sed '2,5d' 文件 # 表示删除第二至5行
sed '/关键字/d' 文件 # 通过关键字查找,并删除所在行
cat -n test.txt | sed '/@/d' # 打印到屏幕,显示行号,删除带@的某一行
========================================
p 模式 查找模式
========================================
sed -n '1p' 文件 # 显示文件的第一行
sed -n '2,5p' 文件 # 显示2,5行
sed -n '/关键字/p' # 显示关键字所在行
cat -n test.txt | sed -n "/@/p" # 打印到屏幕,显示行号,显示包含@的某一行
========================================
i 在指定内容的上一行添加
========================================
sed '1i hello' test.txt
sed '/@/i 邮箱:' test.txt
========================================
a 在指定内容下一行添加
========================================
sed '/@/a 邮箱:' test.txt
========================================
💡 补充说明:实战中的避坑指南与技巧
1.-i 选项是双刃剑:sed 默认只是把处理结果输出到屏幕上,不会改动原文件。一旦加上了 -i 就会真的去修改文件。
在生产环境操作前,强烈建议先用不带 -i 的命令预览效果,或者养成使用 -i.bak 的习惯,给自己留一条后悔路。
2.灵活更换分隔符:默认的替换指令格式是 s/旧/新/g
但如果你要替换的内容里本身就带有斜杠 /(比如文件路径、URL),每次都要写反斜杠转义会非常麻烦
这时可以直接换成其他符号,比如 s|旧|新|g 或 s#旧#新#g,清晰又省事。
3.基础正则 vs 扩展正则:和 grep 一样,sed 默认也使用基础正则
如果你想用更直观的扩展正则(比如直接使用 +、?、() 而不需要加反斜杠 \),记得加上 -E(部分老版本系统需用 -r)选项。
4.结合管道做流水线处理:sed 非常适合放在管道的中间环节
比如 cat config.txt | sed '/^#/d' | grep "port",可以先剔除注释行,再精准查找端口配置,极大提升运维效率。awk:数据分析与运算
========================================
awk 命令常用选项与变量速查表
========================================
选项 说明
----------------------------------------
-F # 指定输入字段的分隔符(默认为空格或制表符)
-v # 在 awk 脚本中定义一个自定义变量
-f # 从指定的脚本文件中读取 awk 命令
print # 打印,显示结果
printf # 格式化输出和C语言的printf功能类似
========================================
📚 awk 核心内置变量速查
========================================
$0 # 代表当前行的整行内容
$1, $2, ... # 代表当前行的第1、第2...个字段(列)
$NF # 代表最后一列
NF # 当前行的字段总数(Number of Fields)
NR # 当前处理的总行号(Number of Records)
FS # 输入字段分隔符(默认空格,等同于 -F)
OFS # 输出字段分隔符(打印时字段间的连接符,默认空格)
FILENAME # 当前正在处理的文件名
========================================
📚 awk 核心模式与动作速查
========================================
BEGIN # 在处理任何行之前执行一次(常用于初始化变量、打印表头)
END # 在处理完所有行之后执行一次(常用于输出统计结果、打印总计)
/正则表达式/ # 只处理匹配该正则表达式的行
条件表达式 # 如 $3 > 100,只处理满足条件的行
{ print ... } # 对匹配的行执行的动作(打印、计算等)
========================================
简单案例
## 打印第一列
awk -F":" '{print $1}' /etc/passwd
## 打印最后一列
awk -F":" '{print $NF}' /etc/passwd
## 计算内存占用率
free | grep 'Mem'|awk -F" " '{printf("%.2f%\n",$3/$2*100) }'
========================================
常用组合示例:
awk '{print $1}' file.txt # 打印文件每一行的第1列
awk -F: '{print $1, $7}' /etc/passwd # 以冒号为分隔符,打印用户名和Shell
awk 'NR==3' file.txt # 只打印文件的第3行
awk '/error/{print NR, $0}' app.log # 打印包含 error 的行及其行号
awk '$3 > 100 {print $1}' data.txt # 当第3列数值大于100时,打印该行第1列
awk '{sum+=$3} END{print sum}' data.txt # 累加第3列的所有数值,最后输出总和
awk -F, 'BEGIN{OFS="|"} {print $1,$2}' csv # 读取逗号分隔文件,改为竖线分隔输出
awk '{print $NF}' file.txt # 打印每一行的最后一个字段
awk '{if($3>50) print "High"; else print "Low"}' data.txt # 带 if-else 的条件判断
netstat -ant | awk '/^tcp/{state[$6]++} END{for(i in state) print i, state[i]}' # 统计TCP连接状态数量
原创
常用指令
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法