跳转到内容
实战指南filesystem

文件与目录安全练习

在家目录的隔离练习区完成创建、查看、复制、改名、文本替换和受控删除,并验证每一步结果。

状态
已审阅
难度
入门
风险
破坏性操作
平台
linux · raspberry-pi-os

所有改动限制在 $HOME/practice/file-operations,完成后能够查看结果或交互式清理整个练习区。

  • 使用普通用户登录 GNU/Linux 或 Raspberry Pi OS。
  • 家目录至少有少量可用空间。
  • 系统提供 GNU Coreutils;文本替换步骤使用 GNU sed
  • 下面的 rm 会删除练习文件,执行清理前必须核对路径和内容。
  1. 创建名称唯一的隔离目录并确认当前位置:

    Terminal window
    mkdir -p -- "$HOME/practice"
    WORK_DIR="$(mktemp -d "$HOME/practice/file-operations.XXXXXX")"
    mkdir -- "$WORK_DIR/empty-dir"
    cd -- "$WORK_DIR"
    pwd

    mktemp -d 每次创建新目录,避免重复练习时覆盖旧文件。后续步骤必须在同一个终端会话执行。

  2. 创建并查看文本文件:

    Terminal window
    touch -- note.txt
    printf '%s\n' 'first line' 'second line' > note.txt
    cat -n -- note.txt
  3. 复制备份并改名:

    Terminal window
    cp -i -- note.txt note.txt.copy
    mv -i -- note.txt note-renamed.txt
    ls -la -- .
  4. 修改第二行,同时让 GNU sed 创建备份:

    Terminal window
    sed -i.bak '2c\second line updated' -- note-renamed.txt
    cat -n -- note-renamed.txt
  5. 删除空目录:

    Terminal window
    rmdir -- empty-dir
Terminal window
pwd
ls -la -- .
cat -n -- note-renamed.txt

应看到 note-renamed.txt 的第二行为 second line updated,并存在 note-renamed.txt.baknote.txt.copyempty-dir 已不存在。

确认变量仍指向本次由 mktemp 创建的目录,先离开练习目录,再交互式删除:

Terminal window
case "$WORK_DIR" in
"$HOME"/practice/file-operations.*)
cd -- "$HOME"
ls -la -- "$WORK_DIR"
rm -ri -- "$WORK_DIR"
;;
*)
printf '%s\n' 'Refusing unsafe cleanup path' >&2
;;
esac

变量为空、Shell 会话已经更换或路径不匹配时,保护分支会拒绝清理。rm 不会把文件移入回收站,对每个询问确认目标后再回答。

现象 原因 处理
Permission denied 不在自己的目录或父目录不可写 运行 pwd,回到 $HOME 下重新创建练习区;不要直接加 sudo
sed: invalid option 当前系统不是 GNU sed 运行 sed --help 确认实现,改用该平台支持的备份语法。
rmdir: Directory not empty 目录仍有内容 ls -la -- empty-dir 检查,不要盲目改用递归删除。
cp 询问是否覆盖 目标备份已存在 核对旧备份后选择是否覆盖,或更换文件名。