我是Ubuntu的用户,经验不足,并且一直在使用sudo
。
做sudo !!
什么,怎么做?
!!
命令部分的更多信息。
!!
做什么和如何做。另一个想要一种方法来做到这一点。
sudo !!
做什么,而实际上有两个答案具体说明了!!
做什么。
我是Ubuntu的用户,经验不足,并且一直在使用sudo
。
做sudo !!
什么,怎么做?
!!
命令部分的更多信息。
!!
做什么和如何做。另一个想要一种方法来做到这一点。
sudo !!
做什么,而实际上有两个答案具体说明了!!
做什么。
Answers:
sudo bang bang
在命令行界面中工作时,这是一个非常有用的命令。
某些Linux发行版要求您以用户而非管理员身份登录。
因此,要以管理员身份执行某项操作,您必须使用sudo
(超级用户DO)继续执行该命令,该命令告诉系统“您将执行此操作,因为我这样说。” / bang-bang(!= bang)基本上是可以用来重复上一个命令的快捷方式。
因此,典型的情况是您尝试一个命令,并且它会弹出一条消息,提示您必须是管理员才能执行此操作。所以,你可以键入sudo
要运行该命令,超级用户/管理员,也可以键入sudo !!
这里!!
告诉系统使用已尝试了以前的命令。超高频
还有许多其他爆炸命令。有关它们的列表以及它们的解释,请查看Linux Bang命令,另请参阅Bash历史记录和bang命令
sudo
并查看命令行。
sudo
某件事并得到一个错误,所以您立即想要sudo
它
sudo
并不意味着“超级用户做”,它会为做一个命令,就好像我做了su
(苏意切换用户[而不是超级用户]); 即,您可以以任何用户身份sudo命令,而不仅仅是root(-u
switch); su [user] [-c command]
su
不代表这样的事情。见linux.die.net/man/1/su,gnu.org/software/coreutils/manual/html_node/su-invocation.html,linfo.org/su.html。它应该表示替代用户。
该bang bang (!!)
命令是重复并运行您在终端中输入的上一个命令的快捷方式。当您忘记了执行某项操作所需的管理员权限,并且只需键入以下内容即可通过超级用户权限重复执行此命令时,该命令非常有用
sudo !!
!!
获取最后一个运行命令。
apt-get update
输出将是
E:无法打开锁定文件/ var / lib / apt / lists / lock-打开(13:权限被拒绝)
E:无法锁定目录/ var / lib / apt / lists /
E:无法打开锁定文件/ var / lib / dpkg / lock-打开(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
终端上的命令,它会显示所有你entered.The命令!!
在部分sudo !!
争夺存储的最后一个命令在命令历史记录中,整个sudo !!
命令以管理员权限运行最后一条命令。
此博客文章中还介绍了其他一些bang命令。
答案分为两部分:!!
和sudo
!!
是外壳程序功能的一部分(在Ubuntu中,这可能是bash,但是zsh或csh等其他外壳程序也支持此功能),称为“历史扩展”。它的行为与其他扩展类似,因为外壳将“占位符”扩展为一组单词。虽然foo*
将扩展为以'foo'开头的所有文件的列表,但将扩展为上一个!!
命令行的内容。
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
与其他扩展一样,此操作完全由外壳程序完成,因此,如果!!
在其他命令后键入,则该命令不会知道存在!!
,而只会看到前一个命令行。(与其他扩展不同,历史扩展是在将命令保存到历史中之前发生的,也就是说!!
,替换后的命令行将保存到历史中。)
该sudo
命令允许以其他用户身份执行命令,前提是安全策略授予了权限(默认值在中配置/etc/sudoers
)。
默认情况下,root密码在Ubuntu中未设置。为了执行系统管理任务,在安装过程中创建的用户被授予sudo权限。现在,该用户只需添加prep即可以root身份在shell上执行任何命令sudo
。一些GUI程序也使用sudo机制,例如程序包管理。
sudo
可以以root(或另一个用户)身份执行其他命令的原因是sudo二进制(/usr/bin/sudo
)在其权限中设置了setuid位,并且它属于root。设置了setuid位的任何(二进制)可执行文件都将在其所有者的许可下运行。这意味着无论哪个用户实际调用sudo,sudo都具有root权限有效运行。只有sudo的内部安全策略才能管理允许哪个用户使用什么内容,并阻止任意用户执行任意操作。
因此,在的情况下sudo !!
,这意味着
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
基本上与
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
只需少打字。在这两种情况下,sudo都只能mount /dev/sdb1 /mnt
以root权限查看并运行它。
!!
是历史扩展的语法最简单,也许是最普遍的表达。
您可能已经注意到,在将最后执行的命令替换为之后!!
,bash做两件事(在其默认配置中):
显示带有替换文本的完整命令。
例如,如果您的命令是,然后再lshw -c video
运行sudo !!
,那么历史记录扩展后的命令为sudo lshw -c video
。
该命令运行。
通常,这两个步骤不会中断,并且没有用户互动的机会,因为shopt histverify
默认情况下未设置(shopt -u histverify
)。
但是,如果启用shopt histverify
(shopt -s histverify
),则历史记录扩展的工作方式将有所不同:
(请注意,只有在使用readline库的情况下,histverify
shell选项才会生效-但在Ubuntu或其他GNU / Linux系统上以交互方式使用bash时,实际上总是这样。)
不管是否histverify
启用了shell选项,历史记录扩展都与许多其他shell扩展不同。其他Shell扩展在运行之前不会显示扩展命令。与旨在以交互方式和非交互方式(例如,在Shell脚本中)使用的其他扩展不同,历史扩展几乎总是以交互方式使用。