我经常在以 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"
}
以下是它的作用(按顺序):
- 创建一个临时目录(用作干净环境中的工作目录);
- 创建一个临时文件(用作我们的
bash
rc 文件); - 在 rc 文件中,添加以下行:
- 将提示设置
PS1
为提示终止符,后跟一个空格,这样可以保持相关性,以防我们希望在问答网站上获得输出的副本; - 切换到我们创建的临时目录。
- 将提示设置
- 调用 的一个新实例
bash
,其中:- 最初有一个空环境,除了 和
$HOME
($TERM
)env - ...
之外; - 从我们之前创建的临时文件 (
--rcfile
) 中读取其 rc 文件。
- 最初有一个空环境,除了 和
- bash 退出后,删除我们创建的临时文件。
显然这并不完全万无一失,也就是说,您仍然可以访问系统的其他部分。但是,这确实提供了一个干净的临时环境,可用于测试。
答案2
chroot
是一种方法,使用虚拟机是另一种方法。您可以在 LV 上构建 chroot 环境,对其进行快照,执行任何操作,然后恢复到快照状态。
或者 - 对虚拟机(磁盘快照)执行相同的操作,然后恢复所有更改。
我通常使用新安装的虚拟机(使用 VirtualBox 和 kickstart 或带有 PXE 引导的 autoyast)来执行此操作。