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 "优秀"
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 aux grep [服务名]` 检查进程是否存在

实战技巧:避免常见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
    
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐