当前位置: 首页 > news >正文

Linux Shell 脚本 7 大高频操作实战:从文件处理到用户管理,覆盖 90% 期末考点

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

权限数字表示法对照表:

权限字符表示数字值
r4
w6
执行x1
全权rwx7

典型应用场景:

  • 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_

压缩格式性能对比:

格式压缩率速度典型命令
.gzgzip/gunzip
.bz2bzip2/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 "优秀" fi

for循环处理文件:

for file in $(ls *.log); do gzip $file mv $file.gz /backups/ done

while读取用户输入:

while true; do read -p "输入命令(q退出): " cmd [ "$cmd" = "q" ] && break eval $cmd done

7. 网络服务管理: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 auxgrep [服务名]`检查进程是否存在

实战技巧:避免常见Shell脚本陷阱

  1. 变量引用问题:始终用${var}代替$var,特别是拼接字符串时

    dir="/tmp" file="${dir}/work.log" # 正确 file="$dir/work.log" # 可能有歧义
  2. 权限检查技巧:关键操作前添加验证

    [ $(id -u) -ne 0 ] && echo "需要root权限" && exit 1
  3. 错误处理机制:使用set -e让脚本遇错即停

    #!/bin/bash set -e critical_command1 critical_command2
  4. 日志记录规范:重要操作记录执行日志

    log(){ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $@" >> /var/log/operation.log } log "开始备份数据库"
  5. 兼容性处理:不同Linux发行版的命令差异

    # 检测系统类型 if [ -f /etc/redhat-release ]; then # CentOS/RHEL系统 installer="yum" elif [ -f /etc/debian_version ]; then # Debian/Ubuntu系统 installer="apt-get" fi
http://www.cnnetsun.cn/news/3210364.html

相关文章:

  • MySQL EXISTS 子查询优化:5 个常见低效写法与改写方案
  • DB2 12.1.2 新特性实战:VECTOR 数据类型与 AI 应用集成 3 步指南
  • macOS Ventura 13+ 系统“已损坏”报错:5 步完整排查与修复指南(含终端权限)
  • Web Vitals 优化实战:从数据采集到性能提升的完整工程路径
  • 从单机到全家共享:Sunshine如何重新定义游戏串流体验
  • Linux x86-64 分页机制:4级页表下的虚拟地址转换深度解析
  • 如何免费解锁Adobe全家桶?这个开源工具让你轻松实现
  • CentOS 7 企业级服务配置实战:DHCP+FTP+DNS+Apache 四合一部署与联调
  • AEKF vs EKF算法:锂电池SOC估算误差降低2%的Matlab/Simulink实现步骤
  • NAU8224与PIC18LF25K42构建高效音频系统方案
  • 深入解析Python异步编程事件循环机制
  • 深入理解Linux内核网络协议栈实现
  • AI辅助PSD转Unity UGUI:自动化UI开发与智能代码生成实践
  • Linux内核升级后NVIDIA驱动失效的修复与AI辅助排查代码Bug实战
  • 用 AI 做技术债务评估:量化、排序与还债优先级的工程方法
  • 如何用League Akari提升你的英雄联盟游戏体验:终极本地化效率工具指南
  • ArcGIS 标注 SQL 查询优化:3 种方法精准筛选 10 万+ 要素并提升性能
  • AD24实战:PCB设计全流程与工程规范详解
  • BMI160与PIC18LF4610构建高精度运动数据采集系统
  • 【Bug已解决】Failed to fetch version ECONNREFUSED 解决方案
  • OpenCV + Scikit-learn 图像分类:从直方图特征到6类垃圾分类实战
  • Kimi K2.5前端实测:真实业务需求下的工程衰减分析
  • Cursor对接私有LLM中转网关:Caddy反向代理实战指南
  • GitHub Copilot CLI实战手册:终端里的AI结对编程
  • A3910与PIC18F4515电机控制方案详解
  • 自助法原理与实战:小样本下统计推断的可靠替代方案
  • ClaudeCode实战工作流:16个提升开发者效率的结构化提示技巧
  • VS Code Continue插件404修复:构建OpenAI兼容本地AI网关
  • Squirrel-RIFE:3步实现专业级AI视频补帧,让老旧视频秒变流畅大片
  • IIM-20670运动传感器与PIC18微控制器的工业应用实践