Linux Shell 脚本 7 大高频操作实战:从文件处理到用户管理,覆盖 90% 期末考点
1. 文件查找与内容追加:高效数据管理三板斧
在Linux系统管理中,文件查找与内容追加是最基础却最常考的操作组合。掌握以下三个核心技巧,可以解决80%的文件操作需求:
# 1. 按扩展名查找XML文件并记录路径 find / -name "*.xml" -type f | grep usr >> work1.txt # 2. 获取系统时间并格式化追加 date +'%Y-%m-%d %H:%M:%S' >> work1.txt # 3. 提取/etc/passwd特定行内容 tail -5 /etc/passwd >> work1.txt关键参数解析:
-type f:限定只查找普通文件>>:追加写入(区别于覆盖写入的>)+%Y-%m-%d:日期格式化符号需用单引号包裹
注意:使用
find搜索系统根目录时,建议添加2>/dev/null过滤权限错误提示,例如:find / -name "*.conf" -type f 2>/dev/null
2. 用户权限管理:从创建到权限设置的完整流程
用户管理是Shell脚本考核的重点模块,以下是一个包含UID指定、权限修改的完整示例:
# 创建指定UID用户 useradd -u 1024 testuser # 修改文件所有权 chown -R testuser:mail /target_directory # 设置复杂权限组合 chmod u=rwx,g=rx,o= /sensitive_file权限数字表示法对照表:
| 权限 | 字符表示 | 数字值 |
|---|---|---|
| 读 | r | 4 |
| 写 | w | 6 |
| 执行 | x | 1 |
| 全权 | rwx | 7 |
典型应用场景:
755:所有者可读写执行,其他用户只读执行600:仅所有者可读写777:开放所有权限(慎用)
3. 定时任务自动化:系统管理的核心技能
crontab是运维自动化的利器,下面通过具体案例演示三种典型配置:
# 每天8:30启动服务 30 8 * * * /usr/sbin/service vsftpd start >> /var/log/ftp.log 2>&1 # 每小时测试网络连通性 0 */1 * * * ping -c 4 baidu.com >> /var/log/network.log # 每周三、六备份 0 21 * * 3,6 tar -zcf /backups/web_$(date +\%Y\%m\%d).tar.gz /var/www特殊符号说明:
*:任意值,:多个值分隔-:范围值/:步长值
重要提示:crontab中
%需要转义为\%,否则会被解析为换行符
4. 文本处理四剑客:grep/sed/awk/cut组合应用
这组命令是处理日志和配置文件的瑞士军刀,看一个综合案例:
# 提取IP访问频次(实验六案例) awk '{print $1}' access.log | sort | uniq -c | sort -nr # 批量修改配置(实验三案例) sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf # 提取特定列数据 cut -d: -f1,3 /etc/passwd >> users.txt常用参数对比:
| 命令 | 核心参数 | 典型应用场景 |
|---|---|---|
| grep | -i(忽略大小写) | 日志过滤 |
| sed | -i(直接修改文件) | 批量替换 |
| awk | -F(指定分隔符) | 列式处理 |
| cut | -d(分隔符) | 提取固定列 |
5. 压缩归档实战:从基础操作到自动备份
压缩操作在系统维护中频率极高,需要掌握这些关键命令:
# 创建压缩包(实验一案例) tar zcvf log_$(date +%Y%m%d).tar.gz /var/log # 排除特定目录 tar --exclude='*.tmp' -zcf backup.tar.gz /home # 分卷压缩(适用于大文件) tar zcvf - bigfile | split -b 500M - bigfile_part_压缩格式性能对比:
| 格式 | 压缩率 | 速度 | 典型命令 |
|---|---|---|---|
| .gz | 中 | 快 | gzip/gunzip |
| .bz2 | 高 | 慢 | bzip2/bunzip2 |
| .xz | 最高 | 最慢 | xz/unxz |
6. 流程控制结构:Shell脚本的逻辑骨架
这是Shell编程的必考重点,通过实例掌握三种核心结构:
if-else判断成绩等级:
#!/bin/bash read -p "输入分数: " score if [ $score -lt 60 ]; then echo "不及格" elif [ $score -lt 80 ]; then echo "良好" else echo "优秀" fifor循环处理文件:
for file in $(ls *.log); do gzip $file mv $file.gz /backups/ donewhile读取用户输入:
while true; do read -p "输入命令(q退出): " cmd [ "$cmd" = "q" ] && break eval $cmd done7. 网络服务管理:FTP与防火墙配置
网络服务配置常出现在实验题中,重点掌握以下操作:
# FTP服务管理(实验三案例) service vsftpd restart chkconfig vsftpd on # 防火墙配置 iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables-save > /etc/sysconfig/iptables # 网络测试组合命令 telnet 192.168.1.100 21 netstat -tulnp | grep vsftpd服务状态检查命令对比:
| 命令 | 作用 | 输出特点 |
|---|---|---|
service --status-all | 查看所有服务状态 | 简单状态标识 |
systemctl list-units | 显示系统所有单元 | 包含详细描述信息 |
| `ps aux | grep [服务名]` | 检查进程是否存在 |
实战技巧:避免常见Shell脚本陷阱
变量引用问题:始终用
${var}代替$var,特别是拼接字符串时dir="/tmp" file="${dir}/work.log" # 正确 file="$dir/work.log" # 可能有歧义权限检查技巧:关键操作前添加验证
[ $(id -u) -ne 0 ] && echo "需要root权限" && exit 1错误处理机制:使用
set -e让脚本遇错即停#!/bin/bash set -e critical_command1 critical_command2日志记录规范:重要操作记录执行日志
log(){ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $@" >> /var/log/operation.log } log "开始备份数据库"兼容性处理:不同Linux发行版的命令差异
# 检测系统类型 if [ -f /etc/redhat-release ]; then # CentOS/RHEL系统 installer="yum" elif [ -f /etc/debian_version ]; then # Debian/Ubuntu系统 installer="apt-get" fi