Execute o mesmo comando novamente, mas como root

89

Às vezes, quando executo um comando, não percebo que precisei executá-lo como superusuário para ter permissão suficiente.

Existe uma maneira de executar o mesmo comando novamente, mas como superusuário?

    
por Trufa 27.05.2013 / 22:31

10 respostas

163

A maneira mais simples é executar:

sudo !!

Isso executará o último comando, mas como superusuário.

Source .

    
por Trufa 27.05.2013 / 22:31
62

Resposta: você digita sudo !! logo em seguida para repetir o comando anterior com privilégios escalados.

editar: Imagem encontrada através de reddit , e é uma paródia do comic xkcd original de Randall Munroe.

    
por wim 30.05.2013 / 00:33
17

Você pode tentar a tecla de seta para cima para rolar pelos comandos antigos e reescrevê-los / alterá-los e adicionar o sudo na frente deles. (o botão home acima das setas direciona a posição para o começo.)

Eu não gosto da ideia de sudo !! , porque às vezes você adiciona outro comando e não se lembra mais.

    
por Xylol 27.05.2013 / 23:31
12

Vou apenas adicionar uma alternativa: como curto como digitar sudo !! e mais flexível:

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

É exatamente o mesmo número de pressionamentos de teclas (eu conto "ctrl + A" como um ...), mas adicionando "seta para cima" você pode fazer isso em qualquer comando que esteja em seu histórico.

    
por Olivier Dulac 28.05.2013 / 13:09
7

Existem algumas maneiras de fazer isso

  • Basta digitar o comando novamente, adicionando sudo antes do comando

  • Pressione Seta para cima para obter o último comando e coloque sudo na frente dele.

  • Insira sudo !!

O !! se expande para o último comando inserido. Você pode fazer coisas semelhantes com outras coisas com o histórico da linha de comando, veja aqui

    
por user162424 28.05.2013 / 11:22
6

Esta questão poderia ter sido generalizada em " Executar mesmo comando, mas com alguma modificação ", já que uma das decisões de design brilhantes no Unix é que o que é implementado uma vez no shell pode ser aproveitado por qualquer comando sendo invocado a partir do shell.

Em outras palavras, esse truque não se aplica apenas a sudo :

  • Repita o comando anterior como superusuário ( sudo !! )
  • Repita o comando anterior e tempo ( time !! )
  • Repita o comando anterior com um ambiente diferente ( env A=b B=z !! )
  • Repita o comando anterior ( !! )

A expansão do histórico (também conhecida como substituição de histórico) é apenas um recurso de shell para facilitar a repetição de comandos anteriores (com menos pressionamentos de teclas). Verifique sua página de manual do shell para history expansion . Ele descreve muito mais truques e atalhos que você pode fazer com o histórico, por exemplo:

Você pode consultar os comandos anteriores por número:

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

Você pode se referir a palavras individuais em comandos anteriores:

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

Você também pode pesquisar antes de repetir:

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

Você pode pesquisar o histórico e substituir algo por outra coisa:

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

E muito mais, já que você pode combinar seleção de comando, seleção de argumentos, pesquisar e substituir independentemente.

A página man do seu shell (neste caso, man bash ) é sua amiga.

    
por arielf 31.05.2013 / 21:07
5

Eu uso zsh ao invés do bash e tenho isso no meu ~/.zshrc , então pressionando Alt + S insere sudo no começo da linha de comando:

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

Infelizmente, não consegui encontrar uma maneira de fazer a mesma coisa no bash.

    
por Patches 28.05.2013 / 01:58
1
su -c "!!"

Se você não tem permissão para ser root com o sudo ou sudo, o programa não foi instalado no sistema.

    
por Achu 29.05.2013 / 06:37
1

Do jeito que eu prefiro:

  • Seta para cima
  • Início
  • "sudo"
  • Insira

Mas pode ser mais fácil apenas fazer "sudo !!", depende de você.

    
por Farid El Nasire 14.06.2013 / 16:22
1

Se você quiser fazer isso em um alias, você tem que usar alias redo='sudo $(history -p !!)' por algum motivo.

    
por Aaron Franke 07.07.2016 / 11:55