能用到退休的100条高级Linux命令,解决99%日常问题!


Linux 命令数以千计,但日常运维中 99% 的问题可通过 100 条核心高级命令解决。本文筛选标准:进阶性(非 ls/cd 等基础命令)、不可替代性(解决特定场景痛点)、跨发行版兼容(CentOS/Ubuntu 通用)、实战高频性(源自十年运维经验总结)。

一、文件系统与存储管理(20 条)

  1. 高效文件操作

    \# 带进度条的递归复制(比cp更可靠)
    rsync -ah --progress /data/backup/ user@192.168.1.100:/remote/backup/ 
    \# 查找7天前大于1G的日志文件并压缩
    find /var/log -mtime +7 -size +1G -name "\*.log" -exec gzip {} \\; 
    \# 批量修改文件权限(保留原有权限基础上加执行权)
    chmod -R a+x --preserve-root /usr/local/bin/
    \# 查找SUID权限文件(安全审计必备)
    find / -perm -4000 -type f -exec ls -la {} \\; 2>/dev/null 
  2. 存储管理进阶

    \# 查看磁盘I/O详情(定位慢盘)
    iostat -x 5 3 # 每5秒采样,共3次
    \# LVM扩容(实战扩容流程)
    lvresize -L +50G /dev/mapper/centos-root && xfs\_growfs /  # XFS文件系统
    \# 检测磁盘坏道(非破坏性检测)
    badblocks -v /dev/sda1 > bad\_sectors.txt
    \# 挂载ISO文件(无需刻录)
    mount -o loop /tmp/ubuntu.iso /mnt/iso/
    \# 查看文件系统inode使用情况(解决“磁盘未满却无法创建文件”问题)
    df -i
  3. 归档与压缩技巧

    \# 排除特定目录压缩(备份时常用)
    tar -czvf backup.tar.gz --exclude=node\_modules /home/project/
    \# 分卷压缩大文件(适配网盘上传)
    split -b 100M large\_file.tar.gz "large\_file\_part\_"
    \# 解压分卷文件
    cat large\_file\_part\_\* | tar -xzvf -
    \# 计算文件哈希(验证传输完整性)
    sha256sum ubuntu.iso > ubuntu.sha256 && sha256sum -c ubuntu.sha256 

二、网络诊断与配置(20 条)

  1. 连接状态分析

    \# 查看TCP连接状态统计(排查TIME-WAIT堆积)
    ss -tan | awk '{print \$1}' | sort | uniq -c 
    \# 查找占用80端口的进程(比netstat更高效)
    ss -tulnp | grep :80 
    \# 实时监控网络流量(按端口分类)
    iftop -P -i eth0
    \# 查看IP路由表(含网关优先级)
    ip route show table all
    \# 刷新ARP缓存(解决MAC地址冲突)
    ip neigh flush dev eth0 
  2. 故障排查工具

    \# 动态路由追踪(结合ping与traceroute优势)
    mtr -w github.com 
    \# 捕获HTTP请求(分析接口异常)
    tcpdump -i eth0 -s 0 -A 'tcp port 80 and (((tcp\[12:1] & 0xf0) >> 2) = 0x47455420)' 
    \# 测试端口连通性(支持UDP)
    nc -zv -u 192.168.1.1 53  # 测试DNS端口
    \# DNS深度解析(追踪解析链路)
    dig +trace www.baidu.com 
    \# 扫描局域网存活主机
    nmap -sn 192.168.1.0/24  # 仅ping扫描,不探测端口
  3. 网络配置进阶

    \# 临时修改MTU(解决jumbo帧问题)
    ip link set eth0 mtu 9000 
    \# 配置虚拟IP(高可用场景)
    ip addr add 192.168.1.100/24 dev eth0 label eth0:0
    \# 查看网络接口统计(定位丢包)
    ip -s link show eth0 
    \# 关闭TCP timestamp(优化高并发连接)
    sysctl -w net.ipv4.tcp\_timestamps=0
    \# 配置DNS服务器(临时生效)
    echo "nameserver 8.8.8.8" > /etc/resolv.conf

三、系统监控与性能调优(15 条)

  1. 资源监控工具

    \# 按内存使用率排序进程(找出内存黑洞)
    ps aux --sort=-%mem | head -10
    \# 实时监控系统资源(含磁盘I/O)
    htop -s PERCENT\_MEM  # 按内存排序
    \# 查看CPU核心详情(含型号与频率)
    lscpu | grep -E "Model name|CPU MHz|CPU cores"
    \# 监控内存页交换(判断内存是否不足)
    vmstat 1 5 # 每1秒输出,共5次
    \# 查看系统负载趋势(近1/5/15分钟)
    uptime
  2. 性能分析命令

    \# 分析进程文件句柄(解决“too many open files”)
    lsof -p 1234 | wc -l  # 1234为进程PID
    \# 查看系统调用(诊断程序异常)
    strace -p 1234 -c  # 统计调用频率
    \# 监控磁盘IOPS(评估存储性能)
    iostat -d 1 5
    \# 分析网络吞吐量(按协议分类)
    nload -m
    \# 查看内核日志(排查硬件故障)
    dmesg | grep -i error 
  3. 系统信息查询

    \# 查看系统版本(通杀所有发行版)
    cat /etc/\*release 
    \# 查看内核参数(含当前值)
    sysctl -a | grep net.ipv4.tcp\_max\_tw\_buckets
    \# 查看硬件信息(替代lshw)
    dmidecode -t memory  # 仅查看内存信息
    \# 查看系统启动时间与运行时长
    systemd-analyze
    \# 查看已安装软件包(含版本)
    dpkg --list | grep nginx  # Debian/Ubuntu
    rpm -qa | grep nginx      # CentOS/RHEL

四、安全审计与权限管理(15 条)

  1. 账户安全检查

    \# 查看所有UID为0的账户(排查隐藏root)
    awk -F: '(\$3 == 0) {print}' /etc/passwd 
    \# 查找空密码账户
    awk -F: '(\$2 == "") {print}' /etc/shadow 
    \# 查看sudo权限用户
    grep -v "^#" /etc/sudoers | grep "ALL=(ALL)" 
    \# 锁定账户(禁止登录但保留文件)
    passwd -l testuser
    \# 查看最近登录记录
    last -n 20 
  2. 登录与访问控制

    \# 排查SSH暴力破解(统计失败IP)
    grep "Failed password" /var/log/auth.log | awk '{print \$11}' | sort | uniq -c | sort -nr 
    \# 查看当前登录用户详情
    w  # 含IP与操作命令
    \# 限制用户SSH登录(仅允许指定IP)
    echo "AllowUsers testuser@192.168.1.\*" >> /etc/ssh/sshd\_config
    \# 查看SSH连接日志
    journalctl -u sshd -f  # 实时追踪
    \# 禁用root直接SSH登录
    sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd\_config
  3. 文件与权限审计

    \# 查找全局可写且无粘滞位的目录(安全隐患)
    find / -xdev -type d \\( -perm -0002 -a ! -perm -1000 \\) -print 
    \# 检查重要文件权限(防止越权访问)
    ls -la /etc/passwd /etc/shadow /etc/sudoers 
    \# 监控文件变更(临时追踪配置文件)
    watch -n 1 "md5sum /etc/nginx/nginx.conf"
    \# 恢复文件权限(基于rpm数据库)
    rpm -Va nginx  # CentOS/RHEL 
    \# 查找最近修改的敏感文件
    find /etc -mtime -1 -type f  # 1天内修改的/etc文件

五、容器与虚拟化管理(10 条)

  1. Docker 核心命令

    \# 查看容器资源占用(按CPU排序)
    docker stats --no-stream --format "{{.Name}} {{.CPUPerc}} {{.MemUsage}}" | sort -k2 -r
    \# 清理悬空镜像与容器(释放磁盘)
    docker system prune -a -f
    \# 查看容器详细配置(含网络与挂载)
    docker inspect nginx-container
    \# 进入容器(带终端与环境变量)
    docker exec -it --env "TERM=xterm" nginx-container /bin/bash
    \# 备份容器数据卷
    docker run --rm -v nginx-data:/source -v \$(pwd):/backup alpine tar -czvf /backup/nginx-backup.tar.gz -C /source .
  2. K8s 基础运维

    \# 查看Pod资源使用(需metrics-server)
    kubectl top pod -n default
    \# 查看Pod事件(排查启动失败)
    kubectl describe pod nginx-pod
    \# 进入Pod容器
    kubectl exec -it nginx-pod -c nginx-container -- /bin/sh
    \# 复制文件到Pod
    kubectl cp local-file.txt nginx-pod:/tmp/
    \# 查看节点资源状态
    kubectl describe node node-1

六、文本处理与日志分析(10 条)

  1. 三剑客高级用法

    \# 提取Nginx日志中的404请求(含URL与IP)
    awk '\$9 == 404 {print \$1, \$7}' /var/log/nginx/access.log 
    \# 批量替换配置文件内容(跨目录)
    sed -i 's/old\_domain.com/new\_domain.com/g' \`grep -rl "old\_domain.com" /etc/\` 
    \# 高亮日志中的ERROR(实时追踪)
    tail -f /var/log/syslog | grep --color=auto -i "error" 
    \# 统计不同状态码的请求数
    awk '{count\[\$9]++} END {for(code in count) print code, count\[code]}' /var/log/nginx/access.log
    \# 提取JSON日志中的特定字段
    jq '.timestamp, .message' /var/log/app/json.log
  2. 日志管理技巧

    \# 查看日志中最频繁的IP(排查攻击)
    grep -oE "\b(\[0-9]{1,3}\\.){3}\[0-9]{1,3}\b" /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
    \# 按时间范围过滤日志(ISO格式)
    sed -n '/2025-12-01T00:00:00/,/2025-12-01T06:00:00/p' /var/log/syslog
    \# 压缩旧日志(保留30天)
    find /var/log -name "\*.log" -mtime +30 -exec gzip {} \\;
    \# 合并分割日志(按时间排序)
    ls -tr access.log.\* | xargs cat > access.log.full

七、备份恢复与自动化(10 条)

  1. 备份策略实现

    \# 增量备份(仅备份变更文件)
    rsync -av --link-dest=/backup/last /data /backup/current  # 硬链接增量
    \# 数据库备份(自动压缩)
    mysqldump -u root -p'password' --all-databases | gzip > /backup/mysql\_\$(date +%Y%m%d).sql.gz
    \# 备份校验(防止备份损坏)
    md5sum /backup/backup.tar.gz > /backup/backup.tar.gz.md5 && md5sum -c /backup/backup.tar.gz.md5
    \# 定时备份(保留最近7天)
    echo "0 1 \* \* \* root /usr/local/bin/backup.sh && find /backup -name '\*.tar.gz' -mtime +7 -delete" >> /etc/crontab 
  2. 自动化与脚本工具

    \# 查看定时任务(所有用户)
    for user in \$(cut -f1 -d: /etc/passwd); do echo "User: \$user"; crontab -u \$user -l 2>/dev/null; done 
    \# 监控脚本(内存超80%报警)
    while true; do if \[ \$(free | awk '/Mem/{print \$3/\$2\*100}' | cut -d. -f1) -gt 80 ]; then echo "Memory alert" | mail -s "Alert" admin@example.com; fi; sleep 60; done
    \# 批量执行命令(多服务器)
    for host in \$(cat hosts.txt); do ssh \$host "uptime"; done
    \# 查看脚本执行日志(调试crontab)
    grep CRON /var/log/syslog
    \# 生成随机密码(自动化脚本用)
    openssl rand -hex 16

100 条命令只是工具,真正 “能用到退休” 的是组合思维:比如用ss + awk + sort定位连接瓶颈,用find + xargs + gzip清理日志。建议养成查man手册的习惯(如man ss看参数细节),结合--help快速验证用法。运维的核心不是记命令,而是用工具解决问题 —— 这些命令,正是解决问题的最优解。


收藏

扫描二维码,在手机上阅读

运维排障快 10 倍的秘密!50 + 默认端口号(含 Linux/Windows 命令)

nrf51802开发的一些说明

评 论
请登录后再评论