【跟我学Linux】第九天: 权限批量设置、循环读文件、简单备份

一、文件权限进阶:批量设置目录及子文件权限(递归操作)

之前学了chmod改单个文件权限,但实际工作中经常需要 “改一个目录里所有文件(包括子目录)的权限”(比如给团队共享目录设置权限)。

1. 先回忆:权限的 “数字表示法”(必记!)

权限分 “读(r=4)、写(w=2)、执行(x=1)”,每个用户组(所有者、所属组、其他人)的权限用 3 个数字表示,比如:

  • 755:所有者(7=4+2+1:读 + 写 + 执行),所属组和其他人(5=4+1:读 + 执行)—— 适合脚本、目录。
  • 644:所有者(6=4+2:读 + 写),所属组和其他人(4:读)—— 适合普通文件(文档、日志)。
2. 关键:chmod -R递归修改权限(改目录及所有子内容)

生活场景:你创建了一个share目录,里面有 10 个文件和 5 个子目录,想让 “所有文件权限都是 644,所有目录权限都是 755”,手动改太麻烦 —— 用-R(recursive 递归)一键搞定。

实操 1:给linux_study目录及子文件批量设权限

步骤 1:进入linux_study目录,先看看当前权限(用ll,之前设置的别名,等同于ls -l):

bash

cd ~/linux_study  # 进入学习目录  
ll  # 查看当前文件/目录的权限(记一下现在的权限,方便对比)  

步骤 2:递归设置 “所有文件和目录” 的权限为755(只是练习,实际按需调整):

bash

chmod -R 755 ./  # ./表示“当前目录”,-R表示“递归处理所有子文件和子目录”  

步骤 3:验证效果:再次用ll查看,会发现当前目录下的所有文件、子目录的权限都变成了rwxr-xr-x(对应 755)。

实操 2:更精细 —— 只改目录权限,不改文件权限(工作常用!)

有时候需要 “目录能进入(执行权限 x),但文件不能随便改”,可以用find配合chmod实现(结合第 3 天学的find命令):

需求linux_study目录中,所有 “子目录” 设为 755(能进入、读内容),所有 “普通文件” 设为 644(只能读,不能乱改)。

步骤 1:先找所有子目录,批量设为 755:

bash

find ./ -type d -exec chmod 755 {} \;  # -type d 表示“只找目录”  

  • 解释:find找到所有目录后,用-exec把每个目录({})传给chmod 755处理。

步骤 2:再找所有普通文件,批量设为 644:

bash

find ./ -type f -exec chmod 644 {} \;  # -type f 表示“只找普通文件”  

验证:用ll查看,目录权限都是rwxr-xr-x(755),文件都是rw-r--r--(644)—— 这是工作中 “共享目录” 的常用权限设置!

3. 为什么要批量设权限?(生活例子)

就像你家有个 “共享储物间”:

  • 储物间的门(目录)需要 “能打开(x)、能看里面有什么(r)”—— 对应目录权限 755;
  • 储物间里的文件(比如说明书)需要 “能看(r),但不能随便改(w)”—— 对应文件权限 644。

二、Shell 脚本进阶:while 循环(逐行处理文件内容)

之前学了for循环(比如 “批量创建 10 个文件”),今天学while循环 —— 它擅长 “逐行读取文件内容并处理”(比如分析日志文件,一行一行找错误)。

1. while 循环的核心用法:读一行,处理一行

命令格式(记这个):

bash

while read 变量名; do  
    # 对读取的一行内容(变量名)做处理(比如输出、判断)  
    echo $变量名  # 比如“输出这一行内容”  
done < 要读取的文件名  # < 表示“从文件读取内容”  
2. 实操 1:逐行读取long_text.txt并输出(最简单的例子)

步骤 1:确保long_text.txt有内容(如果没有,先随便写几行,每行一句话):

bash

# 如果文件为空,先添加内容  
echo "第一行:Linux权限很重要" >> long_text.txt  
echo "第二行:while循环能读文件" >> long_text.txt  
echo "第三行:备份数据要定期" >> long_text.txt  

步骤 2:创建脚本read_file.sh,用 while 循环逐行读文件:

bash

nano ~/linux_study/read_file.sh  # 打开编辑器  

步骤 3:写入以下内容(复制粘贴):

bash

#!/bin/bash  
# 脚本功能:逐行读取long_text.txt并输出,加行号  

line_num=1  # 定义一个变量,记录行号(从1开始)  

# while循环读文件:每次读一行,存到变量line里  
while read line; do  
    echo "第$line_num行:$line"  # 输出“行号:内容”  
    line_num=$((line_num + 1))  # 行号+1($(( )) 表示计算)  
done < ~/linux_study/long_text.txt  # 从long_text.txt读内容  

步骤 4:保存并加执行权限:

  • Ctrl+O→回车(保存);Ctrl+X(退出)。
  • 加权限:chmod +x read_file.sh

步骤 5:运行脚本,看效果:

bash

./read_file.sh  

预期输出(一行一行显示,带行号):

plaintext

第1行:第一行:Linux权限很重要  
第2行:第二行:while循环能读文件  
第3行:第三行:备份数据要定期  
3. 实操 2:逐行读取并筛选内容(比如找含 “错误” 的行)

场景:假设long_text.txt是日志文件,里面有 “错误” 记录,用 while 循环一行一行找。

步骤 1:先给long_text.txt加一行带 “错误” 的内容:

bash

echo "第四行:系统错误:无法连接网络" >> long_text.txt  

步骤 2:修改read_file.sh,添加 “筛选含‘错误’的行”:

bash

nano read_file.sh  # 打开脚本  

修改后内容(在循环里加 if 判断):

bash

#!/bin/bash  
line_num=1  

while read line; do  
    echo "第$line_num行:$line"  
    # 如果当前行包含“错误”,就标红提示(用echo -e加颜色)  
    if echo "$line" | grep -q "错误"; then  # -q 表示“安静模式”,只判断不输出  
        echo -e "\033[31m注意:这一行有错误!\033[0m"  # 31m是红色,0m恢复默认  
    fi  
    line_num=$((line_num + 1))  
done < ~/linux_study/long_text.txt  

步骤 3:运行脚本,会看到 “含错误的行” 下面有红色提示 —— 这就是 “分析日志找错误” 的基础逻辑!

三、系统备份基础:用 tar 命令备份重要文件(防丢数据)

“数据备份” 是工作中 “最重要的习惯”—— 就像你手机里的照片会备份到云端,Linux 里的配置文件、日志、脚本也需要定期备份。

1. 备份的核心命令:tar(打包 + 压缩,之前学过,今天练 “指定内容备份”)

生活场景:你想把linux_study目录(你的学习笔记)和/etc目录(系统配置文件,很重要)备份到/backup目录,避免误删。

2. 实操 1:手动备份linux_study/backup

步骤 1:先创建一个专门放备份的目录/backup(需要管理员权限,因为/目录下创建):

bash

sudo mkdir /backup  # 创建/backup目录  

步骤 2:用tar打包linux_study目录,压缩到/backup,文件名带日期(方便区分版本):

bash

# 格式:tar -zcvf 备份文件路径/文件名-日期.tar.gz 要备份的目录  
tar -zcvf /backup/linux_study-$(date +%Y%m%d).tar.gz ~/linux_study  

  • $(date +%Y%m%d):自动获取当前日期(比如 20250710),避免备份文件重名;
  • 执行后会显示 “正在打包哪些文件”,完成后/backup目录会有一个.tar.gz压缩包。

步骤 3:验证备份是否有效(解压缩看看内容对不对):

bash

# 先创建一个临时目录,用来解压测试  
mkdir ~/test_backup  
# 解压备份文件到临时目录  
tar -zxvf /backup/linux_study-20250710.tar.gz -C ~/test_backup  # 替换成你的日期  
# 查看解压后的内容,和原目录一致就成功了  
ls ~/test_backup/home/你的用户名/linux_study  
3. 实操 2:备份/etc目录(系统配置文件,必备份!)

/etc目录存着系统所有配置(比如网络、用户、服务设置),删错会导致系统故障,必须备份:

bash

sudo tar -zcvf /backup/etc-$(date +%Y%m%d).tar.gz /etc  # 需要sudo,因为/etc权限高  
4. 为什么要带日期?(生活例子)

就像你手机照片的备份:“20250701 备份” 和 “20250710 备份”—— 如果 7 月 5 日误删了文件,可以恢复到 7 月 1 日的版本,而不是最新的(可能已经丢了)。

今日必练实操清单(跟着做,10 分钟完成)

  1. 权限批量设置

    • 进入linux_study,创建一个子目录test_dir,里面随便放 2 个文件(touch test_dir/file1.txt test_dir/file2.txt);
    • find命令给test_dir的子目录设 755,文件设 644(复现今天的步骤)。
  2. while 循环读文件

    • long_text.txt里加 2 行带 “成功” 的内容;
    • 修改read_file.sh,让它遇到含 “成功” 的行时,用绿色字提示(参考红色提示的写法,绿色是\033[32m)。
  3. 备份练习

    • read_file.sh脚本单独备份到/backup,文件名带日期(tar -zcvf /backup/script-$(date +%Y%m%d).tar.gz ~/linux_study/read_file.sh)。

今日总结(3 句话记住核心)

  1. 批量权限find ./ -type d -exec chmod 755 {} \;(目录 755)和find ./ -type f -exec chmod 644 {} \;(文件 644)—— 共享目录必用。
  2. while 循环while read line; do ... done < 文件名—— 逐行处理日志 / 文本的万能公式。
  3. 简单备份tar -zcvf /backup/文件名-$(date +%Y%m%d).tar.gz 要备份的内容—— 每天花 1 分钟备份,能避免 99% 的 “数据丢失崩溃”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值