如何对无人拥有的文件进行 grep?

如何对无人拥有的文件进行 grep?

我有一个/etc/openvpn/test.txt具有以下状态和一个单词内容“test”的文件:

-rw-r--r-- 1 nobody root  173 Jan 25 21:48 test.txt

当我尝试对其执行 grep 操作时,出现权限被拒绝错误。

/etc/openvpn/test.txt | grep -c "test"

结果是:

-bash: /etc/openvpn/consumption.txt: Permission denied
0

如果我尝试以 nobody 身份使用 sudo 运行 grep ,仍然会收到相同的错误:

/etc/openvpn/test.txt | sudo -u nobody grep -c "abs"

结果是:

-bash: /etc/openvpn/consumption.txt: Permission denied
0

当我将所有者更改test.txt为 root 时,grep 的表现符合预期。

但我必须将其保留为无人所有,因为它应该从客户端断开连接的 openvpn 脚本读取和写入。出于安全原因,我被建议以无人身份运行 openvpn。请给我建议如何处理这种情况。

/etc/openvpn/test.txt | grep -c "test"命令必须在客户端断开连接脚本中运行。

答案1

该文件具有rw-r--r--权限,这意味着它可以nobody每个人都可以。只有但在这种情况下这并不相关,因为您不需要写入文件。

出现该消息Permission denied是因为您使用了错误的命令。

/etc/openvpn/test.txt | grep -c "test"意味着你告诉系统执行文件/etc/openvpn/test.txt 作为一个程序,并喂输出该程序的命令grep

由于该文件/etc/openvpn/test.txt缺少执行许可(它只有每个人都有权获得许可,权限nobody),系统无法执行它,您会收到消息Permission denied。因此,此命令没有输出(错误消息转到标准误差并不是标准输出,因此你在屏幕上看到它)并grep收到空的输入,因此显示0结果。

此命令是错误的。我认为文件/etc/openvpn/test.txt不是一个可以执行的程序,但它只是一个文本文件,你想通过 grep。在这种情况下,您应该使用以下命令:

grep -c "test" /etc/openvpn/test.txt

意思是运行该程序grep,并让该程序文件/etc/openvpn/test.txt

相关内容