我有一个使用管道的小型复杂命令
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 - 权限被拒绝”。
答案 0 :(得分:0)
类Unix环境中的文件访问与你是的人有关,而不是你运行的程序。*当你运行sudo python3 ...
时,你是在python3
命令期间将您的身份更改为更高权限的用户。一旦Python停止运行,你就会恢复正常的自我。想象一下,sudo
是克拉克肯特摘下眼镜并披上斗篷。一旦badguys被击败,超人就会回到普通的Joe身上。
您的错误消息表明您的普通用户帐户没有访问/
和/tmp
以及撰写/tmp/missed.log
的必要权限。 wlan.py
和/usr/bin/python3
上的权限不是问题所在。我可以想到四种选择(最好到最差):
/tmp
以外的其他位置。您应该始终能够编写主目录,这样您就可以在没有sudo
的情况下运行> ~/missed.log
而不是> /tmp/missed.log
。sudo
,就像从命令行运行它一样。这样你就可以得到一致的结果。stat -c '%G' /tmp
。这将告诉你哪个组拥有/ tmp。然后,如果该群组不是root
,请执行usermod -a -G <that group name> <your username>
。/tmp
的权限。这是大棒:可能,但不推荐。 sudo rm -f /tmp/missed.log
和sudo chmod o+rwx /tmp
应该可以正常运行,但可能会打开您不想要的其他漏洞。 *忽略setuid,这似乎不是这种情况。