我是一名 Ubuntu 用户,没有太多经验,一直在使用sudo
。
做什么sudo !!
以及怎么做?
答案1
!!
在 bash 中是前一个命令的别名(参见事件指示器)。因此它会以权限重新运行上一个命令sudo
。
答案2
sudo bang bang
在命令行界面下工作时是一个非常有用的命令。
一些 Linux 发行版要求您以用户身份而不是管理员身份登录。
因此,要以管理员身份执行某些操作,您必须使用sudo
(Super-User DO) 继续执行命令,这会告诉系统“您将执行此操作,因为我这么说。” !! / bang-bang (! = bang) 基本上是一个快捷方式,您可以用来重复上一个命令。
因此,典型的情况是,您尝试一个命令,它会返回一条消息,提示您必须以管理员身份执行该命令。因此,您可以键入sudo
以超级用户/管理员身份运行该命令,也可以键入sudo !!
where!!
告诉系统使用之前尝试的命令。超滤
还有许多其他的 bang 命令。有关它们的列表及其解释,请查看Linux Bang 命令, 也可以看看Bash 历史记录和 bang 命令
答案3
该bang bang (!!)
命令是重复并运行上一个命令您在终端中输入的命令。当您忘记需要管理员权限才能执行特定操作时,此命令非常有用,并且只需输入以下内容即可使用超级用户权限重复此操作:
sudo !!
!!
抓住最后的运行命令。
例如:
apt-get update
输出将是,
E:无法打开锁定文件 /var/lib/apt/lists/lock - open (13:权限被拒绝)
E:无法锁定目录 /var/lib/apt/lists/
E:无法打开锁定文件 /var/lib/dpkg/lock - open (13:权限被拒绝)
E:无法锁定管理目录 (/var/lib/dpkg/),您是 root 吗?
之后,如果我们运行sudo !!
命令,输出将是
Hit http://extras.ubuntu.com saucy/main amd64 Packages
Get:3 http://mirror.sov.uk.goscomb.net saucy-updates Release.gpg [933 B]
Hit http://ppa.launchpad.net saucy Release
Hit http://extras.ubuntu.com saucy/main i386 Packages
Hit http://mirror.sov.uk.goscomb.net saucy Release
99% [Waiting for headers] [Waiting for headers] [Waiting for headers]
这意味着!!
部分抓取前一个运行的命令apt-get update
,并且前面的sudo
部分使命令以超级用户权限运行。
和如何以超级用户权限运行sudo !!
上一个命令的意思是,通常我们在终端上输入的所有命令都存储在中command history
。history
在终端上运行命令,它会显示你输入的所有命令。!!
其中的部分sudo !!
抓取存储在命令历史记录中的最后一条命令,而整个sudo !!
以管理员权限运行最后一条命令。
其他砰砰命令解释如下博客文章。
答案4
!!
是语法上最简单、也可能是最常见的表达历史扩展。
您可能已经注意到,在用 替换最后执行的命令后!!
,bash 会执行两件事(在其默认配置中):
带有替换文本的完整命令将显示给您。
例如,如果您的命令是
lshw -c video
,并且您接下来运行sudo !!
,那么历史扩展后的命令是sudo lshw -c video
。该命令已运行。
通常这两个步骤不会中断,并且没有用户交互的机会,因为shopt histverify
默认情况下未设置(shopt -u histverify
)。
然而,如果你启用shopt histverify
(shopt -s histverify
),那么历史记录扩展的工作方式会有所不同:
- 您将获得一个新的主提示符,其中自动输入了扩展的文本。就好像您自己输入了该文本,光标位于末尾,但尚未运行命令。
- 然后,您(用户)必须按Enter来运行该命令。或者您可以编辑该命令、取消它(Ctrl+ C)等。请注意,这不是特殊提示,而是常规主提示。这真的就像您自己输入文本一样。
(请注意histverify
shell 选项仅在以下情况下生效readline 库正在使用——但是当你在 Ubuntu 或其他 GNU/Linux 系统上以交互方式使用 bash 时,基本上总是如此。)
shell 选项是否histverify
启用,历史扩展与许多其他 shell 扩展不同。其他 shell 扩展不会在命令运行前显示扩展后的命令。与其他旨在以交互和非交互方式使用的扩展(例如,在 shell 脚本中)不同,历史扩展几乎总是以交互方式使用。