最全总结!Linux 常用命令全量汇总手册

文档说明:本手册覆盖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.txt
line1
line2
EOF
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文件
    
  • ⚠️ 高危警告:
    1. rm删除的文件默认无法恢复,严禁执行rm -rf /rm -rf /*rm -rf .等命令,会直接导致系统崩溃、数据全丢失
    2. 执行带变量/通配符的rm命令前,必须先用echo验证目标(如echo rm -rf $path/*),避免变量为空导致执行rm -rf /*
    3. 生产环境建议替换rmmv到回收站,或添加-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的所有命令,主流发行版均默认安装
  • 三大核心模式:
    1. 命令模式(默认模式):打开文件后默认进入,可执行光标移动、复制、粘贴、删除、搜索等操作,按Esc可从其他模式回到命令模式
    2. 插入模式:用于编辑写入文件内容,按i/a/o等键进入,左下角显示-- INSERT --
    3. 底线命令模式:用于执行保存、退出、替换、配置等操作,按:进入
  • 命令模式高频操作:
    操作功能说明
    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=4w=2x=1,权限值为3个数字之和(如rwxr-xr-x对应数字权限755)。

4.1 权限修改

chmod
  • 功能:修改文件/目录的权限,核心命令
  • 语法:chmod [OPTIONS] 权限 目标文件/目录
  • 核心选项:
    • -R:递归修改目录及所有子文件/子目录的权限
    • -v:显示权限修改的详细过程
  • 两种权限设置方式:
    1. 数字权限方式(生产环境首选)
      chmod 755 file.txt        # 设置文件权限为rwxr-xr-x
      chmod 644 file.txt        # 普通文件推荐权限,rw-r--r--
      chmod 700 private_dir     # 私人目录推荐权限,rwx------
      chmod -R 755 /data/app    # 递归修改目录及所有内容权限
      
    2. 符号权限方式
      符号说明操作符权限
      u所有者user+ 增加权限r 读
      g所属组group- 移除权限w 写
      o其他用户other= 覆盖设置权限x 执行
      a所有用户alls 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权限
      
  • 特殊权限说明:
    1. SUID(4xxx):仅对二进制可执行文件生效,用户执行该文件时,将以文件所有者的权限执行,典型示例/usr/bin/passwd
      chmod 4755 /usr/bin/xxx
      chmod u+s /usr/bin/xxx
      
    2. SGID(2xxx):对目录生效,目录内新建的文件/目录将继承该目录的所属组,适合团队协作目录
      chmod 2775 /data/team_dir
      chmod g+s /data/team_dir
      
    3. Sticky Bit粘滞位(1xxx):仅对目录生效,仅文件所有者、root能删除目录内的文件,典型示例/tmp目录
      chmod 1777 /tmp
      chmod o+t /tmp
      
  • ⚠️ 安全警告:生产环境严禁使用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
  • 核心信号:
    信号编号信号名功能说明
    1SIGHUP重启进程,重新加载配置文件,不终止进程
    2SIGINT中断进程,等价于Ctrl + C
    9SIGKILL强制杀死进程,不可被捕获/忽略,终极终止方式
    15SIGTERM优雅终止进程,默认信号,允许进程释放资源后退出
    18SIGCONT恢复挂起的进程
    19SIGSTOP挂起进程,不可被捕获/忽略
  • 高频示例:
    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-011 hour agotoday
    --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网络配置全能命令,替代传统ifconfigroutearp等命令,生产环境首选
  • 语法:ip [OPTIONS] 对象 动作
  • 核心对象与高频用法:
    1. 地址管理(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地址
      
    2. 链路管理(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地址
      
    3. 路由管理(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       # 删除静态路由
      
    4. 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缓存
      
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
  • 功能:结合pingtraceroute的功能,实时动态监控路由路径的丢包率、延迟,网络排障首选
  • 语法: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,async
    • rw:读写模式
    • 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  fsck
    
    • UUID:分区唯一标识,推荐使用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-upgrade
    list列出软件包,支持--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次,实时监控系统状态
    
  • 核心字段说明:
    • procsr等待运行的进程数,b阻塞的进程数
    • cpuus用户态CPU使用率,sy内核态CPU使用率,id空闲CPU使用率,waIO等待CPU使用率
    • memswpd使用的Swap大小,free空闲内存,buff缓冲区,cache缓存
    • iobi从块设备读入的数据量,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-70和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
    
  • 核心注意事项:
    1. 定时任务中的命令/脚本必须使用绝对路径,包括脚本内的命令
    2. crontab的环境变量与用户登录环境不同,建议在脚本开头加载环境变量,或在crontab开头声明PATH变量
    3. 定时任务执行的输出默认会以邮件形式发送给用户,建议重定向到日志文件,如&>> /var/log/script.log
    4. 脚本必须有执行权限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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Echo_NGC2237

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值