当前位置: 首页>>技术教程>>正文


再次以root身份运行相同的命令

, ,

问题描述

有时当我运行一个命令时,我没有注意到我需要以超级用户的身份运行它才能拥有足够的权限。

有没有办法再次运行相同的命令,但作为超级用户?

最佳解决办法

最简单的方法是运行:

sudo !!

这将运行最后的命令,但作为超级用户。

Source

次佳解决办法

command-line,sudo,ubuntu

答案:您之后直接输入sudo !!以使用升级的权限重复上一个命令。

编辑:通过reddit找到的图像,它是Randall Munroe的original xkcd漫画的拙劣模仿。

第三种解决办法

您可以尝试up-arrow键来滚动您的旧命令并重写/更改它们,并将sudo添加到它们前面。 (箭头键上方的主页按钮会将位置设置为开头。)

我不喜欢sudo !!的想法,因为有时候你会在中间添加另一个命令,而不再记得。

第四种办法

我只需添加一个替代方案:与输入sudo !!一样简单,并且更灵活:

Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A   (place cursor at beginning of line)
"sudo "
Enter

它的键击次数完全相同(我将”ctrl+A”当作一个…),但是添加”up arrow”,您可以根据历史记录中的任何一条命令执行此操作。

第五种办法

有几种方法可以做到这一点

  • 只需在命令前添加sudo再次输入命令

  • Up arrow获取最后一个命令并将sudo放在它的前面。

  • 输入sudo !!

!!扩展到最后输入的命令。您可以使用命令行历史记录查看其他内容,请参阅here

第六种办法

这个问题可以被概括为“运行相同的命令,但有一些修改”,因为Unix中的一个明智的设计决定是在shell中实现了一次,可以通过从shell调用的任何命令来利用。

换句话说,这个技巧不适用于sudo

  • 以超级用户身份重复上一个命令(sudo !!)

  • 重复上一个命令并将其计时(time !!)

  • 用不同的环境重复上一个命令(env A=b B=z !!)

  • 重复上一个命令(!!)

历史扩展(也称为历史替换)只是一个shell功能,可以使重复以前的命令更轻松(使用较少的击键)。检查history expansion的shell手册页。它描述了许多更多的技巧和short-cuts,例如:

您可以通过编号引用先前的命令:

!55                 # repeat command number 55
!-1                 # repeat the previous command, alias for !!
!-2                 # repeat the command before the previous command

你可以参考以前的命令中的单词:

some-command !$     # run some-command on the last arg of previous command

您也可以在重复之前进行搜索:

!?awk               # repeat the last command including the string 'awk'

您可以搜索历史记录并用其他方式替换某些内容:

!?awk?:s/str1/str2/  # repeat previous command matching 'awk' replacing str1 by str2

还有更多,因为您可以结合命令选择arg-selection,搜索和独立替换。

你的shell的手册页(在这种情况下是man bash)是你的朋友。

第七种办法

我使用zsh而不是bash,并且在我的~/.zshrc中有这个,所以按下Alt + S会在命令行开头插入sudo

insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo

不幸的是,我无法找到在bash中做同样的事情的方法。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/723.html,未经允许,请勿转载。