Linux 常用命令与 Shell 脚本实战指南:从文本处理到系统运维
文本处理是 Linux 日常操作的高频需求,grep、sed、awk 被誉为 “文本三剑客”,三者配合使用能高效处理各类文本任务。grep:文本搜索利器grep 用于在文件或输出中搜索匹配指定模式的行,支持正则表达式,是日志分析、配置文件检索的必备工具。基础用法:grep "ERROR" /var/log/syslog 搜索 syslog 中包含 “ERROR” 的行;。
一、文本处理三剑客:grep、sed、awk
文本处理是 Linux 日常操作的高频需求,grep、sed、awk 被誉为 “文本三剑客”,三者配合使用能高效处理各类文本任务。
grep:文本搜索利器
grep 用于在文件或输出中搜索匹配指定模式的行,支持正则表达式,是日志分析、配置文件检索的必备工具。
基础用法:grep "ERROR" /var/log/syslog 搜索 syslog 中包含 “ERROR” 的行;
进阶技巧:grep -rni "failed" /etc/ 递归(-r)搜索 /etc 目录下包含 “failed” 的文件,忽略大小写(-i)并显示行号(-n);
结合管道:ps aux | grep "nginx" 筛选出 nginx 进程。
sed:流编辑器
sed 以 “流” 为处理单位,可实现文本替换、删除、插入等操作,常用于批量修改配置文件。
替换操作:sed -i 's/old_string/new_string/g' file.txt 原地(-i)替换文件中所有 “old_string” 为 “new_string”;
删除空行:sed '/^$/d' input.txt 删除输入文件中的空行;
行处理:sed -n '5,10p' file.txt 仅打印第 5 到 10 行内容。
awk:结构化数据处理
awk 适合处理表格类数据(如 CSV、日志),支持字段分割、条件判断和计算,功能强大且灵活。
字段提取:awk -F ',' '{print $1, $3}' data.csv 以逗号为分隔符,打印第 1 和第 3 列;
条件过滤:awk '$3 > 100 {print $0}' access.log 打印第三列数值大于 100 的行;
统计计算:awk '{sum += $2} END {print "平均值:", sum/NR}' numbers.txt 计算第二列的平均值。
二、性能监控工具:实时掌握系统状态
系统性能监控是保障服务稳定运行的核心,以下工具能帮助快速定位资源瓶颈。
top:进程与资源实时监控
top 是最常用的交互式监控工具,可实时显示进程的 CPU、内存占用率,默认按 CPU 使用率排序。
关键指标:% CPU(进程 CPU 占比)、% MEM(内存占比)、VSZ(虚拟内存)、RSS(物理内存);
实用操作:按 “P” 以 CPU 排序,“M” 以内存排序,“k” 终止进程,“q” 退出。
netstat:网络连接分析
netstat 用于查看网络连接、端口监听、路由表等信息,是排查网络问题的利器。
常用命令:netstat -tuln 显示所有监听(-l)的 TCP(-t)和 UDP(-u)端口,不解析域名(-n);
连接统计:netstat -an | grep ESTABLISHED | wc -l 统计当前 ESTABLISHED 状态的连接数。
glances:全方位系统监控
glances 是一款跨平台监控工具,整合了 CPU、内存、磁盘、网络、进程等信息,支持 Web 界面和远程监控。
安装:yum install glances(CentOS)或 apt install glances(Ubuntu);
特色功能:红色标记异常指标,支持导出数据到 CSV,适合批量服务器监控。
三、数据同步:scp 与 rsync 的选择
在服务器间传输文件或备份数据时,scp 和 rsync 是最常用的工具,二者各有侧重。
scp:简单直接的文件传输
scp 基于 SSH 协议,语法与 cp 类似,适合单个文件或小批量文件的传输。
本地到远程:scp local.txt user@remote_ip:/home/user/;
远程到本地:scp user@remote_ip:/var/log/syslog ./;
传输目录:scp -r /data user@remote_ip:/backup/(-r 表示递归)。
rsync:高效的增量同步
rsync 支持增量同步(仅传输变化的部分),并能保持文件权限、时间戳等属性,是备份和大规模同步的首选。
基本用法:rsync -av /source/ user@remote_ip:/dest/(-a 归档模式,-v 显示过程);
本地同步:rsync -av --delete /source/ /dest/(--delete 删除目标中源没有的文件);
优势:比 scp 更快(尤其大文件),支持断点续传,适合定时备份任务。
四、日志服务:管理与分析系统日志
Linux 系统日志是排查问题的 “黑匣子”,掌握日志管理技巧能大幅提升运维效率。
日志存放位置
系统日志:/var/log/messages(通用信息)、/var/log/secure(安全相关,如 SSH 登录);
应用日志:Nginx 日志通常在 /var/log/nginx/,MySQL 日志在 /var/lib/mysql/(可配置);
内核日志:/var/log/dmesg(启动时内核信息,可用 dmesg 命令查看)。
日志查看与跟踪
实时跟踪:tail -f /var/log/nginx/access.log(监控新写入的日志);
按时间筛选:grep "2025-07-16" /var/log/syslog 查找指定日期的日志;
统计分析:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head 统计访问量最高的 IP。
日志轮转:logrotate
为避免日志文件过大占满磁盘,logrotate 会定期切割、压缩日志,并删除旧文件。配置文件通常在 /etc/logrotate.d/,例如 Nginx 的日志轮转配置:
/var/log/nginx/*.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志
missingok # 日志不存在时不报错
postrotate # 轮转后重启Nginx
systemctl reload nginx
endscript
}
五、文件系统:管理磁盘与权限
理解文件系统及相关命令,是 Linux 操作的基础,涉及磁盘空间、挂载、权限等核心概念。
常用文件系统
ext4:最常用的日志文件系统,支持大文件和分区,稳定性好;
xfs:高性能文件系统,适合大吞吐量场景(如数据库),支持动态扩展;
tmpfs:临时文件系统,数据存于内存,重启后丢失,适合存放临时文件。
磁盘与空间管理
查看磁盘使用:df -h(-h 人类可读格式,如 G、M);
查看目录大小:du -sh /var/*(-s 汇总,-h 可读格式);
挂载文件系统:mount /dev/sdb1 /mnt/data(需先创建 /mnt/data 目录);
永久挂载:在 /etc/fstab 中添加 UUID=xxx /mnt/data xfs defaults 0 0(UUID 可通过 blkid 获取)。
文件权限控制
Linux 通过权限(读 r=4、写 w=2、执行 x=1)控制文件访问,用 ls -l 可查看权限:
修改权限:chmod 755 file.sh(所有者 rwx,组和其他 rx);
变更所有者:chown user:group file.txt(将文件所有者改为 user,所属组改为 group)。
六、开机启动流程:从 BIOS 到服务运行
理解 Linux 启动流程,有助于排查启动故障和管理服务自启动。
主流启动流程(以 systemd 为例)
-
BIOS/UEFI 初始化:硬件自检(POST),加载引导设备(如硬盘);
-
引导加载程序:GRUB 读取 /boot 中的内核(vmlinuz)和初始化内存盘(initramfs);
-
内核启动:加载硬件驱动,挂载根文件系统(/);
-
systemd 启动:替代传统 init 进程,成为第一个用户进程(PID 1);
-
运行级别:通过 target 定义(如 multi-user.target 对应命令行模式,graphical.target 对应图形界面);
-
服务启动:systemd 按依赖关系启动服务(如 sshd、nginx),可通过 systemctl list-dependencies 查看依赖。
服务管理命令
启动服务:systemctl start nginx;
设为开机自启:systemctl enable nginx;
查看状态:systemctl status nginx;
禁用自启:systemctl disable nginx。
七、Shell 脚本实战:自动化运维任务
Shell 脚本将命令组合,实现批量操作和定时任务,以下是一个日志备份脚本示例:
#!/bin/bash
# 日志备份脚本:每天备份 Nginx 日志并压缩,保留 7 天
LOG_DIR="/var/log/nginx"
BACKUP_DIR="/backup/nginx_logs"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份并压缩日志
tar -czf $BACKUP_DIR/nginx_logs_$DATE.tar.gz $LOG_DIR/*.log
# 清空原日志(避免占用空间)
> $LOG_DIR/access.log
> $LOG_DIR/error.log
# 删除 7 天前的备份
find $BACKUP_DIR -name "nginx_logs_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "备份完成:$BACKUP_DIR/nginx_logs_$DATE.tar.gz"
使用方法:
-
保存为 backup_nginx_logs.sh;
-
赋予执行权限:chmod +x backup_nginx_logs.sh;
-
定时执行:通过 crontab 添加 0 0 * * * /path/to/backup_nginx_logs.sh(每天凌晨执行)。
更多推荐





所有评论(0)