Ram*_*mHS 64 command-line sudo
我是 Ubuntu 用户,没有太多经验,我一直在使用sudo.
做sudo !!什么以及如何做?
Mit*_*tch 64
sudo bang bang 在命令行界面中工作时是一个非常有用的命令。
某些 Linux 发行版让您以用户身份而不是管理员身份登录。
因此,要在管理方面执行某些操作,您必须使用sudo(超级用户 DO)继续执行该命令,它会告诉系统“您将执行此操作,因为我是这么说的。” 这 !!/ bang-bang (!= bang) 基本上是一个可以用来重复上一个命令的快捷方式。
所以,典型的情况是你尝试一个命令,它会回退一条消息,说你必须是管理员才能做到这一点。因此,您可以输入sudo以超级用户/管理员身份运行该命令,也可以输入sudo !!where!!告诉系统使用先前尝试的命令。超高频
还有许多其他的 bang 命令。有关它们的列表和对它们的解释,请查看Linux Bang 命令,另请参阅Bash 历史记录和 bang 命令
Avi*_*Raj 38
该bang bang (!!)命令是重复和运行您在终端中输入的上一个命令的快捷方式。当您忘记执行某个操作需要管理员权限时,此命令非常有用,并且只需键入以下内容即可以超级用户权限重复该命令,
sudo !!
Run Code Online (Sandbox Code Playgroud)
!! 获取最后一个运行命令。
apt-get update
Run Code Online (Sandbox Code Playgroud)
输出将是,
E: 无法打开锁定文件 /var/lib/apt/lists/lock - open (13: Permission denied)
E: 无法锁定目录 /var/lib/apt/lists/
E: 无法打开锁定文件 /var/ lib/dpkg/lock - open (13: Permission denied)
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]
Run Code Online (Sandbox Code Playgroud)
这意味着!!part 获取先前的运行命令apt-get update,而前面的sudo部分使命令以超级用户权限运行。
而如何在sudo !!运行具有超级用户权限的手段,通常我们所有的终端上输入存储在命令前面的命令command history。运行在history终端上的命令,它会显示所有的命令,你entered.The!!部分在sudo !!抓住存储的最后一个命令在命令历史记录中,整体sudo !!以管理员权限运行最后一个命令。
这篇博文中解释了其他一些bang 命令。
Ada*_*hon 13
答案有两部分:!!和sudo
!!是 shell 功能的一部分(在 Ubuntu 的情况下,这可能是 bash,但其他 shell,如 zsh 或 csh 也支持此功能),称为“历史扩展”。它的行为方式与其他扩展类似,因为 shell 将“占位符”扩展为一组单词。虽然foo*将扩展为以 'foo' 开头的所有文件的列表,!!将扩展为前一个命令行的内容。
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Run Code Online (Sandbox Code Playgroud)
与其他扩展一样,这完全由 shell 完成,因此如果您!!在其他命令之后键入,则该命令不会意识到存在!!,而只会看到前一个命令行。(与其他扩展不同,历史扩展发生在命令被保存到历史之前,即被!!替换的命令行将被保存到历史中。)
该sudo命令允许以其他用户身份执行命令,前提是安全策略授予了权限(默认在 中配置/etc/sudoers)。
默认情况下,root 密码在 Ubuntu 中保持未设置。为了执行系统管理任务,在安装期间创建的用户被授予 sudo 权限。该用户现在可以以 root 身份在 shell 上执行任何命令,只需在sudo. 一些 GUI 程序也使用 sudo 机制,例如包管理。
之所以sudo能够以root(或其他用户)身份执行其他命令,是因为sudo binary( /usr/bin/sudo)在其权限中设置了setuid位,属于root。任何设置了 setuid 位的(二进制)可执行文件都以其所有者的权限运行。这意味着 sudo 以 root 权限有效运行,无论哪个用户实际调用它。只有 sudo 的内部安全策略管理允许哪些用户做什么,并防止任意用户做任意事情。
所以,在这种情况下sudo !!意味着
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
Run Code Online (Sandbox Code Playgroud)
基本上与
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
Run Code Online (Sandbox Code Playgroud)
只是少打字。在这两种情况下,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) 则历史扩展的工作方式不同:
(请注意,histverify shell 选项仅在使用 readline 库时才生效——但是当您在 Ubuntu 或其他 GNU/Linux 系统上以交互方式使用 bash 时,基本上总是如此。)
无论是否histverify启用 shell 选项,历史扩展都与许多其他 shell 扩展不同。其他 shell 扩展在运行之前不会向您显示扩展的命令。与旨在以交互方式和非交互方式使用的其他扩展(例如,在 shell 脚本中)不同,历史扩展几乎总是以交互方式使用。