WEB开发网
开发学院操作系统Linux/Unix 理解 chroot 阅读

理解 chroot

 2009-07-12 08:32:13 来源:WEB开发网   
核心提示: 刚才我们使用的是方式[2],这将在没有给定环境时,理解 chroot(3),默认执行 `/bin/sh`,但是当给定环境后,)但是实质上,它们仅是将 chroot 的功能进行了封装,将运行 `${SHELL} –i`,即与环境相同的可交互的 shell

刚才我们使用的是方式[2]。这将在没有给定环境时,默认执行 `/bin/sh`,但是当给定环境后,将运行 `${SHELL} –i`,即与环境相同的可交互的 shell。我们的目录结构中并没有包含sh,显然清单 2中的 chroot 运行了 `${SHELL} –i`。当然我们也可以在进行切换时指定需要的命令,即使用方式[1]。

清单 4. chroot 另一种方式的使用

# chroot . /bin/ash

#

在清单 4 中,尝试了在经过 chroot 后,执行新目录结构下的 ash shell。不得不说的是,如果新根下的目录结构和文件准备的够充分,那么一个新的简单的 Linux 系统就可以使用了。其实更为常见的是在初始 RAM 磁盘 (initrd)中使用 chroot,以此来执行系统的 init。清单 5 中,展示的是在 Linux 2.4 内核 initrd 中使用 chroot。

清单 5. 在 Linux 2.4 内核 initrd 中使用 chroot 的示例

mount /dev/hda1 /new-root 
cd /new-root 
pivot_root . old-root 
exec chroot . /sbin/init <dev/console >dev/console 2>&1 
umount /old-root 
 

由于 Linux 内核的升级,initrd 处理机制和格式发生了变化,在 Linux 2.6 内核 initrd 中不能再使用 pivot_root,因此一般也不再使用 chroot,而是选择使用 busybox 提供的 switch_root 或者 klibc 提供的 run-init 进行根目录的切换。(这并不是说不能在 Linux 2.6内核 initrd 中使用 chroot,选择 switch_root 或 run-init 仅是出于习惯和方便的考虑。)但是实质上,它们仅是将 chroot 的功能进行了封装,以此更加方便简单的切换根目录。

清单 6. 在 Linux 2.6 内核 initrd 中 chroot 的使用

上一页  1 2 3 4 5  下一页

Tags:理解 chroot

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接