如何创建一个干净的shell环境供临时使用?

如何创建一个干净的shell环境供临时使用?

我经常在以 Unix 为中心的热门问答网站上回答问题,并且在许多回答中我都提供了使用 shell 的示例bash。但是,每次执行此操作时,我都必须手动完成创建干净环境的过程,以确保每个步骤都得到考虑和记录。我怎样才能使这个过程更加简单?理想情况下,我希望输入一个命令并获得一个干净的环境,并在完成后删除该临时环境的所有痕迹。

答案1

我个人使用以下bash函数来执行此操作:

so() {
    local tmpdir="$(mktemp -d)"
    local tmprc="$(mktemp)"
    cat > "$tmprc" << EOF
PS1='\\$ '
cd "$tmpdir"
EOF
    env - HOME="$HOME" TERM="$TERM" bash --rcfile "$tmprc"
    rm -rf "$tmpdir" "$tmprc"
}

以下是它的作用(按顺序):

  • 创建一个临时目录(用作干净环境中的工作目录);
  • 创建一个临时文件(用作我们的bashrc 文件);
  • 在 rc 文件中,添加以下行:
    • 将提示设置PS1为提示终止符,后跟一个空格,这样可以保持相关性,以防我们希望在问答网站上获得输出的副本;
    • 切换到我们创建的临时目录。
  • 调用 的一个新实例bash,其中:
    • 最初有一个空环境,除了 和$HOME( $TERM)env - ...之外;
    • 从我们之前创建的临时文件 ( --rcfile) 中读取其 rc 文件。
  • bash 退出后,删除我们创建的临时文件。

显然这并不完全万无一失,也就是说,您仍然可以访问系统的其他部分。但是,这确实提供了一个干净的临时环境,可用于测试。

答案2

chroot是一种方法,使用虚拟机是另一种方法。您可以在 LV 上构建 chroot 环境,对其进行快照,执行任何操作,然后恢复到快照状态。

或者 - 对虚拟机(磁盘快照)执行相同的操作,然后恢复所有更改。

我通常使用新安装的虚拟机(使用 VirtualBox 和 kickstart 或带有 PXE 引导的 autoyast)来执行此操作。

相关内容