php 中的 lsof shell 命令被拒绝
lsof shell command in php denied
我有以下代码:
$cmd="lsof | awk '{print \" \" \" \" \" \" }'";
$info = shell_exec($cmd);
$processors = preg_split('/\s?\n\s?\n/', trim($info));
$processors = explode("\n",$processors[0]);
foreach($processors as $processor){
echo $processor."\n";
}
当我在命令行上 运行 它时,我得到了积极的结果。然而,当我 运行 它在 php 脚本上时,我得到:
systemd 1 root denied)
每个 $processor
如果您查看 lsof
的完整输出,您会看到大多数行如下所示:
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd unknown /proc/1/cwd (readlink: Permission denied)
因为您是 运行 的用户无权查看不属于自己的进程。
尝试:sudo lsof
当我尝试发布您的代码时,我也遇到了同样的错误(能够重现错误)。
然后我尝试只用 lsof
代替完整的 lsof
命令和 awk
以查看完整的错误是什么,我得到了以下错误。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sh 1 root cwd unknown /proc/1/cwd (readlink: Permission denied)
sh 1 root rtd unknown /proc/1/root (readlink: Permission denied)
sh 1 root txt unknown /proc/1/exe (readlink: Permission denied)
sh 1 root NOFD /proc/1/fd (opendir: Permission denied)
time 9 root cwd unknown /proc/9/cwd (readlink: Permission denied)
time 9 root rtd unknown /proc/9/root (readlink: Permission denied)
之后我用谷歌搜索并找到了一个很棒的 link https://unix.stackexchange.com/a/109228(跨站点引用),它告诉我们 lsof
提供错误,因为我们无法访问那些 files/commands 显然我们不是 运行ning 命令与 root
.
所以恕我直言,要克服这个问题,您可以:
- 运行
lsof
命令作为 sudo
以消除错误,以防您的用户具有对 运行 此命令的 sudo 访问权限。
- 如果您对根进程的详细信息不感兴趣,那么您可以将这些错误发送至
/dev/null
。
我有以下代码:
$cmd="lsof | awk '{print \" \" \" \" \" \" }'";
$info = shell_exec($cmd);
$processors = preg_split('/\s?\n\s?\n/', trim($info));
$processors = explode("\n",$processors[0]);
foreach($processors as $processor){
echo $processor."\n";
}
当我在命令行上 运行 它时,我得到了积极的结果。然而,当我 运行 它在 php 脚本上时,我得到:
systemd 1 root denied)
每个 $processor
如果您查看 lsof
的完整输出,您会看到大多数行如下所示:
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd unknown /proc/1/cwd (readlink: Permission denied)
因为您是 运行 的用户无权查看不属于自己的进程。
尝试:sudo lsof
当我尝试发布您的代码时,我也遇到了同样的错误(能够重现错误)。
然后我尝试只用 lsof
代替完整的 lsof
命令和 awk
以查看完整的错误是什么,我得到了以下错误。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sh 1 root cwd unknown /proc/1/cwd (readlink: Permission denied)
sh 1 root rtd unknown /proc/1/root (readlink: Permission denied)
sh 1 root txt unknown /proc/1/exe (readlink: Permission denied)
sh 1 root NOFD /proc/1/fd (opendir: Permission denied)
time 9 root cwd unknown /proc/9/cwd (readlink: Permission denied)
time 9 root rtd unknown /proc/9/root (readlink: Permission denied)
之后我用谷歌搜索并找到了一个很棒的 link https://unix.stackexchange.com/a/109228(跨站点引用),它告诉我们 lsof
提供错误,因为我们无法访问那些 files/commands 显然我们不是 运行ning 命令与 root
.
所以恕我直言,要克服这个问题,您可以:
- 运行
lsof
命令作为sudo
以消除错误,以防您的用户具有对 运行 此命令的 sudo 访问权限。 - 如果您对根进程的详细信息不感兴趣,那么您可以将这些错误发送至
/dev/null
。