问题描述
有时当我运行一个命令时,我没有注意到我需要以超级用户的身份运行它才能拥有足够的权限。
有没有办法再次运行相同的命令,但作为超级用户?
最佳解决办法
最简单的方法是运行:
sudo !!
这将运行最后的命令,但作为超级用户。
次佳解决办法
答案:您之后直接输入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中做同样的事情的方法。