如何在Shell脚本中修改rc.local?
我想在一个叫做 /etc/rc.d/rc.local
的文件里添加一行,比如 '*/data/mod/myservice start some_parameter*'
。如果这个文件里已经有一行是以 '*/data/mod/myservice start*'
开头的,那就用新的那一行替换掉它。
在我的脚本中,它会执行下一个 Python 方法。
def excuteCmd(cmd):
import commands
output = commands.getoutput(cmd)
def setTask(cmd, installFlag):
print cmd, installFlag
excuteCmd('cat /etc/rc.d/rc.local > oldTask')
input = open('oldTask','r')
emptyFile = False
lines = input.readlines()
input.close()
taskNum = len(lines)
output = open('newTask', 'w')
if (taskNum == 0):
if (installFlag):
output.write(cmd + '\n')
else:
for i in range(taskNum):
if (lines[i].find(cmd) == -1):
output.write(lines[i])
if (installFlag):
output.write(cmd + '\n')
output.close()
excuteCmd('sudo cat newTask > /etc/rc.d/rc.local')
excuteCmd('rm -f oldTask')
excuteCmd('rm -f newTask')
但是当我执行 sudo cat newTask > /etc/rc.d/rc.local
时,出现了以下错误。
-bash: /etc/rc.d/rc.local: 权限被拒绝
2 个回答
2
sudo command > filename
这个命令是用来以超级用户的身份(也就是有更高权限的用户)来执行 command
,但是它把结果写入 filename
时却是用普通用户的权限(这可能不够写入 /etc 这个文件夹)。可以想象成这样:
(sudo command) > filename
这里的 sudo
只对括号里的部分有效。
你也可以用 sudo
来运行整个脚本。
2
这意味着你没有权限去写入或删除这个文件。而且,你不能像那样运行 sudo
命令,因为需要输入密码。所以,最好是用 sudo python scriptname
来运行这个脚本。