我试着运行以下脚本,它运行良好,但没有得到预期的结果:
import os,sys
os.system("mount /dev/sdb3 /mnt")
os.system("lsblk")
os.system("mount --bind /proc /mnt/proc")
os.system("mount --bind /home /mnt/home")
os.system("mount --bind /dev /mnt/dev")
os.system("mount --bind /sys /mnt/sys")
os.chroot("/mnt")
os.system("pwd")
os.system("lsblk")
这是因为当我在os.chroot(“/mnt”)之后执行pwd时,我不在“/mnt”目录中。但是,当我使用shell命令(不使用python脚本)直接将以下代码运行到Linux终端时,我得到了预期的结果。
现在我的问题是,为什么我不能使用os.chroot(“/mnt”)进入/mnt目录。如何使用os.chroot(使用python脚本)实现这一点?
最佳答案
Python的os.chroot
是chroot(2)
系统调用的原始包装器。如系统调用文档中所述:
此调用不会更改当前工作目录,因此在调用之后“.”可以位于根目录为“/”的树之外。特别是,超级用户可以通过以下方式逃离“chroot监狱”:
mkdir foo; chroot foo; cd ..
此调用不会关闭打开的文件描述符,并且此类文件描述符可能允许访问chroot树之外的文件。
您需要自己显式地更改当前工作目录,例如
os.chdir('/')
以移动到新的根目录。您看到的行为与从shell运行命令时不同,因为
chroot(1)
可执行文件显式地将当前工作目录更改为新根目录(source)。关于python - os.chroot()麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30858174/