2015-06-16 198 views
0

我試圖運行下面的腳本,它工作正常,但我沒有得到預期的結果:麻煩與os.chroot()

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") 

這是因爲當我做PWD os.chroot後(「/ mnt「),我不在」/ mnt「目錄中。但是,當我使用shell命令將下面的代碼直接運行到Linux終端(不使用python腳本)時,我得到了預期的結果。

現在我的問題是,爲什麼我不能使用os.chroot(「/ mnt」)進入/ mnt目錄。我如何使用os.chroot(使用python腳本)來實現這一點?

+0

'os.chroot(「/ mnt」)'不會進入'/ mnt'目錄,我想你的意思是把pwd改成'/ mnt'。它只會改變進程的根目錄。它是'os.chdir()'而不是'os.chroot()'? – Celada

+0

Ok.how我可以使用python命令而不是os.chroot來限制我的文件在chroot目錄樹中。我想要在我的「/mnt"上執行yum update&build a kernal ..因此我需要一個命令來通過使用python命令複製「chroot命令使用shell」的功能 – Thale

回答

0

Python的os.chroot圍繞chroot(2)系統調用原始包裝。正如系統調用文檔中所述:

這個調用不會改變當前的工作目錄,所以在調用'。'之後。可以在植根於'/'的樹之外。特別是,超級用戶可以通過執行從「chroot監牢」逃:

mkdir foo; chroot foo; cd .. 

此調用不會關閉打開的文件描述符,這樣的文件描述符可以允許訪問的文件在chroot樹之外。

您需要自己明確更改當前工作目錄,例如, os.chdir('/')進入新的根目錄。

由於chroot(1)可執行文件明確將當前工作目錄更改爲新的根目錄(source),因此您會看到與從shell運行命令不同的行爲。

+0

Ic.Very informative.However我怎樣才能限制我的文件在chroot目錄樹使用python命令而不是os.chroot ..我想做百勝更新&建立一個內核我的「/ mnt」..因此,我需要使用python命令來複制「使用shell的chroot命令」的功能。 – Thale

0

方法的chroot()更改當前進程 的根目錄中給定的path.To使用這種方法,你需要超級用戶特權 。

來源:http://www.tutorialspoint.com/python/os_chroot.htm

難道是根本原因?

作爲一種變通方法,你可以調用os.system("cd /mnt; mycommand")

+0

不。我嘗試將它作爲su運行,但它沒有解決問題..謝謝:) – Thale

+0

作爲解決方法,您可以調用'os.system( 「cd/mnt; mycommand」)' –

+0

yup.Im知道cd命令..但是我需要使用chroot命令來運行這個命令,因爲我不想訪問該環境目錄(outside/mnt)樹之外的文件和命令。 – Thale