我需要注册一个特定的内核模块(https://github.com/504ensicsLabs/LiME)在 Ubuntu 18.04 中
sudo insmod /path/to/lime.ko path=~/dump.raw format=raw
来自 python 脚本。我尝试使用
os.system() ; subprocess.run()/call()/Popen() - shell=True/False
.我明确导入了 .bashrc 环境,当它从命令行运行时,它全部失败,并出现模块错误中的未知符号。 python 脚本以 root 权限运行。我想念的点是什么?子进程和直接 shell 之间有什么区别?它与我尝试安装的模块的特殊性质有关吗?错误是
insmod: error inserting 'path/to/lime.ko': Unknown symbol in module
答案1
我不知道这是否是您问题的原因,但请注意,当未启用各自的选项时, ~
in仅由和shellcmd path=~/dump.raw
扩展(仅当 剩下的内容看起来像有效的变量名时)(对于,该选项在作为 调用时启用)并且由shell 在其选项启用时启用。bash
mksh
bash
=
posix
bash
posix
sh
zsh
magicequalsubst
不在其他外壳中。对于sh
,POSIX要求echo path=~
输出path=~
。
因此,除非您的sh
构建没有默认启用mksh
该模式,否则如果使用 shell(将是)从内部运行,则不会扩展到您的主目录。posix
python
sh
~
在这里,使用:
sudo insmod /path/to/lime.ko path="$HOME/dump.raw" format=raw
反而。或者,如果不调用 shell,则python
检索环境变量的值HOME
来构造该参数。path=....
有关扩展主题的更多阅读~
,请参阅~ 是否始终等于 $HOME