我需要在启动时运行一系列命令。此序列也需要 root 密码。我该怎么做?
这是我需要运行的命令序列:
virginia@asus-F552CL:~$ cd MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00/
virginia@asus-F552CL:~/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00$ sudo su
[sudo] password for virginia:
root@asus-F552CL:/home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00# ./load.sh
root@asus-F552CL:/home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00# exit
virginia@asus-F552CL:~/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00$
答案1
既然您提到必须执行 sudo su,我假设您希望在登录后执行这些命令。
为此,您必须将命令放入脚本文件中,例如myCom.sh
。内容如下所示:
cd MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00/
echo myPassword | sudo -S su && sudo su -c ./load.sh
请注意,由于每个命令都以 root 身份运行,并且脚本在完成后返回,因此不需要退出。
还必须以纯文本形式提供“myPassword”。
然后使用 KDE/Ubuntu 的启动管理器启动此脚本。或者您可以将此文件直接放在 中~/.profile
。
另一方面,如果您想在启动时而不是登录时运行这些命令,则可以使用 init 脚本。您不必sudo su
在那里使用,因为所有内容都将在 root 上下文中运行。
答案2
您可以修改您的/etc/rc.local在运行级别启动序列中作为最后一个服务执行的文件,并授予 root 权限。
以下是一个例子:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
cd /home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00
/bin/bash load.sh
exit 0
使用此命令验证您的更改:
sudo /etc/init.d/rc.local start
请注意以下几点:
- load.sh 将以 root 身份运行
- 环境受到限制,因此您可能需要定义缺少的变量
- 如果你想登录系统日志, 使用
logger "message"
如果可能的话我建议您像这样执行脚本:
/bin/bash /home/virginia/MT7630E_Wi-Fi_BT_Source_Release_20140625/rt2x00/load.sh
在 Ubuntu 运行级别上,当filesystem and static-network-up
事件发生时启动。如果您需要启动加载脚本在特定事件中,比更好地定义新兴任务。