gpt4 book ai didi

linux - 挂载 ISO 时 perl 代码被破坏

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:00 25 4
gpt4 key购买 nike

我已经构建了一个表单(使用 JavaScript、jQuery、PHP 和 HTML),使非技术人员可以轻松编写和触发创建包含 CentOS Linux 和公司应用程序的 ISO 镜像的命令它。这是带有示例变量的实际命令。

./test.pl --verbose --output tvmTEST.iso --virtual --isv 4.1.5.1.4147.8.0  --64bit --netproto static --hostname tvmTEST --address 192.168.5.235 --netmask 255.255.255.0 --gateway 192.168.5.252 --nameserver 192.168.5.21,192.168.5.2

当以 root 身份登录并从 shell 中触发时,这个确切的命令可以正常工作,并且成功创建了 ISO。但是,它不能通过 GUI 工作。该表单正确地组合了命令并将其传递给我调用 perl 程序的 PHP 代码。我在 shell 中测试了由 PHP 程序组成的命令,它创建了 ISO! Here is the perl program构建 ISO 镜像。当通过表单触发时,它作为用户 apache 运行。但是,它死于第 665 行,它说:

system("sudo mount -o loop $c{centosiso} $mp") and die;

我尝试打印上面传递给 system() 的字符串,它打印了:

sudo mount -o loop /tmp/test.pl-cache/CentOS-5.4-x86_64-bin-1of7.iso /mnt/CentOS

所以,我尝试通过 shell 执行此命令,它实际上安装了 ISO!但是,/mnt/CentOS 的权限更改为 755。我不清楚为什么?请注意,我在上面那行中使用和不使用 sudo 对其进行了测试。

而且,在此之前,/mnt/CentOS 的权限设置为 777 并且所有者设置为 apache!这些权限是我的表单无法正常工作的原因吗?我走在正确的轨道上吗?

最佳答案

您也可以尝试使用 qx( … )围绕命令而不是使用系统函数。

这个运算符告诉 Perl 在 shell 中运行命令。我遇到过 system 会失败,而使用 qx 运行相同的命令。

我更喜欢这个解决方案,而不是试图找出系统命令为何如此顽固。

一个很好的区别是 system 将返回命令的退出值,而 qx 返回命令的输出,因此您可以将结果分配给变量并打印出来用于调试目的。

关于linux - 挂载 ISO 时 perl 代码被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com