Esegui di nuovo lo stesso comando ma come root

90

A volte quando eseguo un comando non mi accorgo che ho bisogno di eseguirlo come super user per avere abbastanza autorizzazioni.

C'è un modo per eseguire di nuovo lo stesso comando ma come un super utente?

    
posta Trufa 27.05.2013 - 22:31
fonte

10 risposte

165

Il modo più semplice è eseguire:

sudo !!

Questo eseguirà l'ultimo comando ma come super utente.

Source .

    
risposta data Trufa 27.05.2013 - 22:31
fonte
63

Rispondi: immetti sudo !! subito dopo per ripetere il comando precedente con privilegi escalation.

modifica: Immagine trovata tramite reddit , e è una parodia del originale fumetto di xkcd di Randall Munroe.

    
risposta data wim 30.05.2013 - 00:33
fonte
17

Potresti provare il tasto freccia su per scorrere i vecchi comandi, riscriverli / modificarli e aggiungere sudo davanti a loro. (il pulsante home sopra i tasti freccia imposta la posizione all'inizio).

Non mi piace l'idea sudo !! , perché a volte aggiungi un altro comando in mezzo e non ricordo più.

    
risposta data Xylol 27.05.2013 - 23:31
fonte
12

Aggiungerò solo un'alternativa: come breve come digitare sudo !! e più flessibile:

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

È esattamente lo stesso numero di sequenze di tasti (contiamo "ctrl + A" come uno ...), ma aggiungendo "freccia su" puoi farlo con qualsiasi comando nella tua cronologia.

    
risposta data Olivier Dulac 28.05.2013 - 13:09
fonte
7

Ci sono alcuni modi per farlo

  • Basta inserire nuovamente il comando aggiungendo sudo prima del comando

  • Premi freccia su per ottenere l'ultimo comando e metti sudo davanti a esso.

  • Inserisci sudo !!

La !! si espande all'ultimo comando immesso. Puoi fare cose simili con altre cose con la cronologia della riga di comando vedi qui

    
risposta data user162424 28.05.2013 - 11:22
fonte
6

Questa domanda avrebbe potuto essere generalizzata in " Esegui lo stesso comando ma con qualche modifica ", dal momento che una delle brillanti decisioni di design in Unix è che ciò che viene implementato una volta nella shell, può essere sfruttato da qualsiasi comando invocato dalla shell.

In altre parole, questo trucco non si applica solo a sudo :

  • Ripeti il ​​comando precedente come superutente ( sudo !! )
  • Ripeti il ​​comando precedente e cronometralo ( time !! )
  • Ripeti il ​​comando precedente con un ambiente diverso ( env A=b B=z !! )
  • Ripeti il ​​comando precedente ( !! )

L'espansione della cronologia (nota anche come sostituzione della cronologia) è solo una funzione di shell per rendere più semplice la ripetizione dei comandi precedenti (con una minore pressione di tasti). Controlla la pagina man della shell per history expansion . Descrive molti altri trucchi e scorciatoie che puoi fare con la cronologia, ad esempio:

È possibile fare riferimento ai comandi precedenti per numero:

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

È possibile fare riferimento a singole parole nei comandi precedenti:

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

Puoi anche cercare prima di ripetere:

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

Puoi cercare la cronologia e sostituire qualcosa con qualcos'altro:

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

E molto altro, dal momento che puoi combinare la selezione dei comandi, arg-selection, search e replace indipendentemente.

La pagina man della tua shell (in questo caso man bash ) è tua amica.

    
risposta data arielf 31.05.2013 - 21:07
fonte
5

Io uso zsh invece di bash e ho questo nel mio ~/.zshrc , quindi premendo Alt + S inserisce sudo all'inizio della riga di comando:

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

Purtroppo non sono riuscito a trovare un modo per fare la stessa cosa in bash.

    
risposta data Patches 28.05.2013 - 01:58
fonte
1
su -c "!!"

Se non hai il permesso di essere root con sudo o il programma sudo non si installa sul sistema.

    
risposta data Achu 29.05.2013 - 06:37
fonte
1

Il modo in cui lo preferisco:

  • Tasto freccia su
  • Home
  • "sudo"
  • Invio

Ma potrebbe essere più semplice fare "sudo !!", dipende da te.

    
risposta data Farid El Nasire 14.06.2013 - 16:22
fonte
1

Se vuoi farlo in un alias, devi usare alias redo='sudo $(history -p !!)' per qualche motivo.

    
risposta data Aaron Franke 07.07.2016 - 11:55
fonte

Leggi altre domande sui tag