复杂命令(管道)的权利

时间:2017-02-01 15:13:22

标签: bash pipe rights

我有一个使用管道的小型复杂命令

python3 wlan.py -p taken | awk '{$10 = sprintf( "%.1f", $10 / 60); print $4 $6 $8 $10 ",min"}' | awk '{gsub(/,/," ");print}' >> /tmp/missed.log

如果从程序执行此命令而不是从命令行(sudo)执行此命令,则会收到权限错误。所以,显然该计划的权利存在问题。我已经将python和awk的权限设置为777无济于事。但主要问题是:>>的权利是什么?命令以及如何更改它们?

错误消息是“写miss.log - 权限被拒绝”。

1 个答案:

答案 0 :(得分:0)

类Unix环境中的文件访问与你是的人有关,而不是你运行的程序。*当你运行sudo python3 ...时,你是在python3命令期间将您的身份更改为更高权限的用户。一旦Python停止运行,你就会恢复正常的自我。想象一下,sudo是克拉克肯特摘下眼镜并披上斗篷。一旦badguys被击败,超人就会回到普通的Joe身上。

您的错误消息表明您的普通用户帐户没有访问//tmp以及撰写/tmp/missed.log的必要权限。 wlan.py/usr/bin/python3上的权限不是问题所在。我可以想到四种选择(最好到最差):

  1. 将输出文件放在/tmp以外的其他位置。您应该始终能够编写主目录,这样您就可以在没有sudo的情况下运行> ~/missed.log而不是> /tmp/missed.log
  2. 当你从一个程序中运行你的管道""如你所说,只需包含sudo,就像从命令行运行它一样。这样你就可以得到一致的结果。
  3. 将自己添加到拥有/ tmp的群组中。做stat -c '%G' /tmp。这将告诉你哪个组拥有/ tmp。然后,如果该群组不是root ,请执行usermod -a -G <that group name> <your username>
  4. 更改/tmp的权限。这是大棒:可能,但不推荐。 sudo rm -f /tmp/missed.logsudo chmod o+rwx /tmp应该可以正常运行,但可能会打开您不想要的其他漏洞。
  5. *忽略setuid,这似乎不是这种情况。