Bash脚本无法写入日志文件

时间:2019-09-19 21:53:02

标签: bash shell

我创建了一个简单的bash脚本,该脚本可以获取一些数据,然后将其输出到日志文件。当我在没有sudo的情况下运行脚本时,它无法写入日志,并说它们已被写保护。然后,它询问我是否应对其进行写保护,但这失败(权限被拒绝)。

如果我以sudo身份运行脚本,它似乎可以正常工作。如何设置这些日志文件可用于脚本?

cd /home/pi/scripts/powermonitor/
python /home/pi/powermonitor/plugpower.py > plug.log
echo -e "$(sed '1d' /home/pi/scripts/powermonitor/plug.log)\n" > plug.log
sed 's/^.\{139\}//' plug.log > plug1.log
rm plug.log
grep -o -E '[0-9]+' plug1.log > plug.log
rm plug1.log
sed -n '1p' plug.log > plug1.log
rm plug.log
perl -pe '

2 个答案:

答案 0 :(得分:0)

我很傻。我只需要设置日志文件的写权限。

答案 1 :(得分:0)

写入文件的能力取决于已分配给该文件的file permissions,或者,如果该文件不存在但您要创建一个新文件,则取决于您在其中的目录的权限要写文件。如果使用sudo,则您将暂时成为root用户,并且root用户完全可以不受限制地读取/写入/执行任何文件。

如果您首先使用sudo运行脚本,并且脚本最终创建了一个文件,则该文件可能将由root用户拥有,而您的典型用户将无法写该文件。如果您在不使用sudo的情况下运行脚本,那么它将以您用于连接到计算机的用户名运行,并且该用户将需要具有写日志文件的权限。

您可以使用chown,chmod,chgrp命令更改目录和文件的所有权和权限。如果您想始终以sudo的身份运行脚本,则无需担心太多。如果要在不使用sudo的情况下运行这些命令,则意味着您正在以其他用户身份运行它们,并且您需要授予该用户(无论是谁)的写许可权,以便将文件/文件夹写到获取日志文件的位置

例如,如果我想以用户 sneakyimp 的身份运行脚本,并希望将文件写入/ home / sneakyimp / logs /,那么我需要确保该目录可被Snepyimp写入:

sudo chown -R sneakyimp:sneakyimp /home/sneakyimp/logs

此命令将目录的所有权及其内容更改为用户slipneyimp。您可能还需要运行一些chmod命令,以确保所有者可写这些命令。