因此我正在看:
https://help.ubuntu.com/community/LiveCDCustomizationFromScratch
并在 Bash 脚本中尝试执行以下操作:
sudo chroot chroot
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts
运行脚本会进入 shell sudo chroot chroot
。当我看到exit
它时,我收到了有关挂载需要 root 的预期警告。有没有办法将所有这些保留在一个 shell 脚本中?
编辑:我希望这是一个可重复的过程,这就是为什么我要编写整个脚本而不是一次又一次地输入它。
答案1
您应该采用像管道这样的简单解决方案:
cat << EOF | chroot chroot
#do something
EOF
EOF 中的任何内容都会在你的 chrooted 目录中运行,如果你愿意,也可以使用 sudo:
cat << EOF | sudo chroot chroot
ls /
EOF
答案2
创建第二个脚本(例如chroot.sh
)并将其放在您的chroot/
文件夹中。
现在将原始脚本中的命令编辑如下:
chroot chroot/ ./chroot.sh
现在脚本chroot.sh
将在你的chroot
.
答案3
关于chroot
s 和/proc
,/sys
以及/dev/pts
,这三个文件系统是由内核提供的,因此无论您是在 chroot 内还是从外部挂载,它们都保持不变。事实上,您会在前面的说明中看到:
sudo mount --bind /dev chroot/dev
/dev
由内核填充,但不是内核提供的文件系统,因此必须进行绑定挂载。因此,在实践中,您会发现在进入 chroot 之前使用绑定挂载(或其他方式)挂载它也同样有效(假设sudo
):
for i in dev proc sys dev/pts
do
mount -o bind /$i chroot/$i
done
chroot chroot
for i in dev/pts proc sys dev
do
umount -chroot/$i
done
# or
mount -o bind /dev chroot/dev
mount -t sysfs none chroot/sys
mount -t proc none chroot/proc
mount -t devpts none chroot/dev/pts
chroot chroot
for i in dev/pts proc sys dev
do
umount -chroot/$i
done
相关阅读:
答案4
我认为这并不是说你应该把这些命令放到脚本里,而是说你应该键入它们;即mount
在sudo
shell 中输入命令。