我可以执行多行 sudo 命令吗?

我可以执行多行 sudo 命令吗?

这个问题涉及另一个问题。如果我将@kyodake 建议的代码一次性粘贴到终端中,它会起作用吗?

还是我应该一行一行地看?

答案1

有多种方法可以运行多个命令sudo

第一个最适合您的用例。其他的是为了探索替代方案而添加的;它们可能不适合您的特定需求,但将来可能会对您或其他用户有用。

方法 1:最干净、最简单

将所有内容放入脚本中,例如myscript.sh,使用 使文件可执行chmod 755 myscript.sh,然后使用 运行该脚本sudo myscript.sh

方法二:长串命令

您需要具有超级用户权限的程序才能运行多个命令。那就是 shell,(任何 shell,bashsh)。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再次出击

与专门创建脚本并运行相比,其优点如下:

  1. 更快
  2. 无需创建任何文件
  3. 无需处理脚本来删除$/#字符

以下是使用该脚本的示例:

# 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

相关内容