以root身份再次运行相同的命令
有时当我运行命令时,我没有注意到我需要以超级用户身份运行它才能获得足够的权限。
有没有办法再次运行相同的命令,但作为超级用户?
最简单的方法是运行:
sudo !!
这将运行最后一个命令,但作为超级用户。
来源 。
答案:你进入sudo !!
之后直接用升级的权限重复上一个命令。
编辑:通过reddit找到的图像,这是对Randall Munroe的原始 xkcd漫画的拙劣模仿。
您可以尝试使用向上箭头键滚动旧命令并重写/更改它们并在它们前面添加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”视为一个…),但添加“向上箭头”,您可以在历史记录中的任何一个命令上执行此操作。
有几种方法可以做到这一点
-
只需在命令之前再次输入
sudo
命令即可 -
按向上箭头以获取最后一个命令并将
sudo
放在它前面。 -
输入
sudo !!
!!
扩展到最后输入的命令。 您可以使用命令行历史记录执行与此类似的操作
这个问题可以概括为“ 运行相同的命令,但需要进行一些修改 ”,因为Unix中的一个很棒的设计决策是,在shell中实现的一次,可以被从shell调用的任何命令利用。
换句话说,这个技巧不仅仅适用于sudo
:
- 以超级用户身份重复上一个命令(
sudo !!
) - 重复上一个命令并计时(
time !!
) - 使用不同的环境重复上一个命令(
env A=b B=z !!
) - 重复上一个命令(
!!
)
历史扩展(也称为历史替换)只是一个shellfunction,可以更轻松地重复以前的命令(使用较少的击键次数)。 检查shell手册页以查看history expansion
。 它描述了许多你可以用历史做的技巧和捷径,例如:
您可以按编号参考以前的命令:
!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选择,搜索和替换。
你的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中做同样事情的方法。
su -c "!!"
如果你没有权限root用sudo或sudo程序没有安装在系统上。
我更喜欢它的方式:
- 箭头键
- 家
- “sudo”
- 输入
但是做“sudo !!”可能更容易,这取决于你。
如果你想用别名来做,你必须出于某种原因使用alias redo='sudo $(history -p !!)'
。