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.link

ping:主机连通性测试

 基础语法: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.1

ip:指令

 基础语法: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 all

netstat/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连接状态数量