龙空技术网

chroot改变程序运行根目录

程序员修行 184

前言:

如今各位老铁们对“ubuntu root文件夹有个叉”可能比较关注,兄弟们都想要了解一些“ubuntu root文件夹有个叉”的相关内容。那么小编也在网摘上搜集了一些对于“ubuntu root文件夹有个叉””的相关内容,希望你们能喜欢,我们快快来了解一下吧!

我们习惯使用docker容器隔离不同程序的执行环境。在不同容器中看到的目录不同,且在一个容器中任意操作都不会影响到主机程序,也不会影响其他容器内程序,这是怎么实现的呢?

linux chroot命令修改程序运行根目录。程序默认的根目录是/,使用chroot可以指定程序运行的根目录,把程序可以操作的文件全部放到某个指定的文件夹下面,实现程序的隔离。

下面通过例子看下chroot使用方法

使用docker指令获取ubuntu镜像中文件,并把它们放到rootfs目录

$ mkdir rootfs$ docker export $(docker create ubuntu:bionic) | tar -C rootfs -xvf -

查看rootfs目录下的内容

$ ls rootfs                                                                                                                                                                                                130 ↵bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

执行chroot后的ls命令,与ls rootfs, 返回内容相同,但此时返回信息是调用/rootfs/bin/ls后,返回的rootfs目录下的内容

$ sudo chroot rootfs lsbin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

执行chroot后的pwd命令,可以看出pwd命令把rootfs作为根目录了

$ sudo chroot rootfs pwd/

执行chroot bash,终端把rootfs作为根目录。运行ps和df指令不能正常执行,是因为很多目录没有mount导致。

$ chroot rootfs bashroot@wq-VirtualBox:/# ps -efError, do this: mount -t proc proc /procroot@wq-VirtualBox:/# df -hdf: cannot read table of mounted file systems: No such file or directory
总结

chroot可以把程序的执行限制在指定目录,实现程序间文件系统简单隔离目的。了解chroot作用,也能大致了解docker 如何实现不同容器间文件系统隔离。

标签: #ubuntu root文件夹有个叉