这个问题涉及另一个问题。如果我将@kyodake 建议的代码一次性粘贴到终端中,它会起作用吗?
还是我应该一行一行地看?
答案1
有多种方法可以运行多个命令sudo
。
第一个最适合您的用例。其他的是为了探索替代方案而添加的;它们可能不适合您的特定需求,但将来可能会对您或其他用户有用。
方法 1:最干净、最简单
将所有内容放入脚本中,例如myscript.sh
,使用 使文件可执行chmod 755 myscript.sh
,然后使用 运行该脚本sudo myscript.sh
方法二:长串命令
您需要具有超级用户权限的程序才能运行多个命令。那就是 shell,(任何 shell,bash
或sh
)。shell 有一个-c
标志,告诉它们运行一个命令或一组用分号分隔的命令;
。简单的例子:sudo bash -c 'apt-get update; apt-get upgrade'
。特别是,kyodake 的答案可以像这样重新完成:
sudo bash -c 'apt-get update;apt-get install --reinstall aptitude deborphan mate-desktop; aptitude remove '?and(?reverse-depends(unity),?not(?reverse-depends(?exact-name(mate-desktop))))';aptitude remove '?and(?reverse-depends(ubuntu),?not(?reverse-depends(?exact-name(mate-desktop))))';aptitude remove '?and(?reverse-depends(gnome),?not(?reverse-depends(?exact-name(mate-desktop))))';apt-get install --reinstall mate-desktop;deborphan;apt-get --purge remove $(deborphan);deborphan --libdevel;apt-get --purge remove $(deborphan --libdevel);deborphan --find-config;dpkg --purge $(deborphan --find-config);apt-get autoremove;apt-get clean;reboot'
冗长?是的。当您只需要使用 sudo 运行几个命令时,这种方法效果更好。
方法#3:使用 sudo 超时
默认情况下,sudo
权限会在 15 分钟后过期。因此,如果您确定所有这些命令都不会花费那么长时间,那么您可以使用 运行第一个命令,系统sudo
将提示您输入密码;对于所有后续命令,系统将不会提示您输入密码,但您仍需要输入sudo
。
方法#4:使用root shell
正如 kyodake 在答案中自己建议的那样,使用 登录到 root shell 以sudo -i
使用 root 权限,直到您exit
。请注意,出于安全原因,不建议这样做。除非您 100% 确定您会记得在完成工作后注销并且没有人会进入您的 root shell,否则...请自行决定使用此方法。
答案2
复制粘贴脚本即可,命令将会被依次执行;
然而这里的问题是每行开头的$
/字符,这会破坏每个命令;#
在以任何方式运行脚本之前必须删除它们。
我认为最快/最直接的方法是使用以下方法处理它并同时运行它:
- 选择脚本,跳过第一行,原样(即包括
#
开头的字符) - Ctrl使用+复制脚本C
- 击球Ctrl+ Alt+T
- 打字
sed 's/^.//' <<EOF | sudo bash
- 打Enter
- 使用 ++Ctrl粘贴脚本ShiftV
- 打Enter
- 打字
EOF
- Enter再次出击
与专门创建脚本并运行相比,其优点如下:
- 更快
- 无需创建任何文件
- 无需处理脚本来删除
$
/#
字符
以下是使用该脚本的示例:
# whoami
# echo command1
# echo command2
# echo command3
ubuntu@ubuntu ~ % sed 's/^.//' <<EOF | sudo bash
ubuntu@ubuntu ~ pipe heredoc> # whoami
ubuntu@ubuntu ~ pipe heredoc> # echo command1
ubuntu@ubuntu ~ pipe heredoc> # echo command2
ubuntu@ubuntu ~ pipe heredoc> # echo command3
ubuntu@ubuntu ~ pipe heredoc> EOF
root
command1
command2
command3