Question Exécutez la même commande à nouveau mais en tant que root


Parfois, lorsque je lance une commande, je ne remarque pas que je dois l'exécuter en tant que super utilisateur pour avoir suffisamment de permissions.

Existe-t-il un moyen d'exécuter à nouveau la même commande mais en tant que super utilisateur?


90
2018-05-27 20:31


origine




Réponses:


Le moyen le plus simple est de lancer:

sudo !!

Cela exécutera la dernière commande mais en tant que super utilisateur.

La source.


165
2018-05-27 20:31



J'ai trouvé cela très utile et je ne l'avais pas rencontré auparavant (bien que cela puisse être de notoriété publique). Je n'ai pas pu le trouver sur le site, alors j'ai pensé que je pourrais y répondre moi-même. - Trufa
En aparté, en cours d'exécution !! de son propre chef exécute votre commande précédente en tant que par enregistré dans history. En outre, faire !-1, !-2, et ainsi de suite exécute votre dernière commande, votre dernière commande, etc. Pratique! - oaskamay
À part un autre, !<command> va exécuter le dernier événement de ~/.bash_history qui commence par <command> - Radu Rădeanu
ctrl-r est également très utile. il va chercher en arrière dans votre historique pour les commandes correspondant à ce que vous tapez. Cela vous permettra de modifier la commande avant de l'exécuter à nouveau - KayEss
Cette stupide ! bash chose copiée de tcsh m'a bousillé plus de fois qu'il n'a jamais été utile. Les doubles citations ne protègent pas de l'interprétation de !. $ foo "!bar" -> !bar: event not found. - Kaz


enter image description here

Répondre: tu entres sudo !! tout de suite après pour répéter la commande précédente avec des privilèges plus élevés.

modifier:  Image trouvée via reddit, et c'est une parodie de la original BD xkcd de Randall Munroe.


64
2018-05-27 21:31



s'il vous plaît ne pas avoir une conversation pro ou contre ici dans les commentaires. Si vous souhaitez discuter des mérites ou autre, veuillez utiliser Meta. Merci. - fossfreedom♦


Vous pouvez essayer la touche fléchée vers le haut pour faire défiler vos anciennes commandes et réécrire / modifier et ajouter le sudo devant eux. (le bouton d’accueil situé au-dessus des touches fléchées définira la position au début.)

Je n'aime pas la sudo !! idée, parce que parfois vous ajoutez une autre commande entre et ne vous souvenez plus.


17
2018-05-28 11:09



Heureusement, quand tu le fais sudo !!, la coquille va s'étendre !! afin que vous puissiez voir quelle commande il essaie de lancer. Donc, il peut être irritant de frapper Ctrl-C et de trouver la bonne commande, mais au moins cela ne vous prendra pas au dépourvu. - Reid
@Reid Il ne s'agrandira pas avant après vous appuyez sur Entrée, et si vous êtes dans cette fenêtre où vous n'avez pas à entrer à nouveau votre mot de passe, il sera exécuté sans confirmation. +1 pour utiliser l'historique au lieu d'utiliser aveuglément !! - Izkata
@ Izkata: Je suppose que c'est vrai. J'utilise zsh, donc je tape juste sudo !!<TAB> et il se complète automatiquement !! pour moi. Bash peut élargir l'histoire avec M-^ (pour moi, alt + shift + 6), mais c'est moins fluide (vous pouvez cependant le retrouver). Il y a aussi shopt -s histverify, ce qui fait que lorsque vous utilisez l'expansion de l'historique et que vous appuyez sur Entrée, cela vous donne une autre ligne rapide avec l'extension effectuée pour vous permettre de le voir / éditer. - Reid
Je pensais plus à la situation où j'ai tapé une commande, la commande a retourné cette autorisation a été refusée, et je sais que je veux exécuter à nouveau cette même commande mais comme sudo, le processus d'appuyer sur home, taper sudo et ressent beaucoup plus lent pour moi. C'est comme ça que je le fais pour toujours et cela me semblait inefficace. - Trufa
@Reid: shopt -s histverify ne va pas aider un seul bit. La plupart des gens s'habitueront à frapper Enter deux fois. À ce moment-là, ils sont encore trop tard pour vérifier ce qui s'est passé. - Frank Kusters


Je vais juste ajouter une alternative: aussi court comme dactylographie sudo !! et plus flexible:

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

C'est exactement le même nombre de frappes (je compte "ctrl + A" comme un seul ...), mais en ajoutant "flèche vers le haut", vous pouvez le faire sur n'importe quelle commande de votre historique.


12
2018-05-28 09:22



ctrl + A provient des liaisons emacs, vous pouvez également utiliser les liaisons vi (set -o vi). Ensuite, vous pouvez vous échapper (aller en mode commande), puis «I» (majuscule «i», insérer au début de la ligne). - Gerhard Burger
@GerhardBurger: Je sais, mais étrangement, je amour vi (en particulier vim) pour l'édition de documents multi-lignes, mais je préfère de loin la liaison emacs dans le shell (le fait de devoir passer du mode commande au mode édition dans le shell n'a pas vraiment de sens, imo, et les raccourcis des emacs sont assez pour un usage quotidien, même si moins puissant) - Olivier Dulac
C'est vrai, je l'ai ajouté juste pour être complet, pour moi c'est la même chose, mais je trouve que la recherche avec '/' est très pratique;) - Gerhard Burger
@GerhardBurger: à propos de vi / "/", basal (emacs binding) a aussi un moyen très pratique de trouver les commandes précédentes en tapant quelques lettres puis "ctrl + r" jusqu'à ce que vous le trouviez - Olivier Dulac


Il y a quelques façons de le faire

  • Entrez simplement la commande en ajoutant à nouveau sudo avant la commande

  • presse Flèche vers le haut pour obtenir la dernière commande et mettre sudo devant elle

  • Entrer sudo !!

le !! se développe à la dernière commande entrée. Vous pouvez faire des choses similaires avec d’autres choses avec l’historique de la ligne de commande voir ici 


7
2018-05-31 19:07





Cette question aurait pu être généralisée dans "Exécuter la même commande mais avec quelques modifications"Depuis que l'une des décisions brillantes de conception sous Unix a été prise, c'est que tout ce qui est implémenté une fois dans le shell peut être exploité par n'importe quelle commande appelée depuis le shell.

En d'autres termes, cette astuce ne s'applique pas juste  à sudo:

  • Répétez la commande précédente en tant que superutilisateur (sudo !!)
  • Répétez la commande précédente et chronométrez-la (time !!)
  • Répétez la commande précédente avec un environnement différent (env A=b B=z !!)
  • Répétez la commande précédente (!!)

L’expansion de l’historique (également appelée substitution d’historique) n’est qu’une fonction shell qui facilite la répétition des commandes précédentes (avec moins de frappes). Vérifiez votre page de gestion de shell pour history expansion. Il décrit de nombreuses astuces et raccourcis que vous pouvez faire avec l’histoire, par exemple:

Vous pouvez vous référer aux commandes précédentes par numéro:

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

Vous pouvez faire référence à des mots individuels dans les commandes précédentes:

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

Vous pouvez également rechercher avant de répéter:

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

Vous pouvez rechercher l'historique et remplacer quelque chose par autre chose:

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

Et bien plus encore, puisque vous pouvez combiner la sélection de commandes, la sélection d'arguments, la recherche et le remplacement indépendamment.

La page de manuel de votre shell (dans ce cas man bash) est votre ami.


6
2018-05-27 23:58



Briliant! celui-là devrait être la réponse acceptée. - Eliran Malka


j'utilise zsh au lieu de bash et avoir ceci dans mon ~/.zshrc, en appuyant sur Alt+S inserts sudo au début de la ligne de commande:

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

Malheureusement, je ne pouvais pas trouver un moyen de faire la même chose en bash.


5
2018-05-29 04:37



Vous pouvez facilement faire la même chose avec Bash en utilisant GNU Readline: ajoutez à votre ~/.inputrc  "\es":"\C-asudo " et vous allez passer au début d'une longue ligne et sudo sera inséré au début de la ligne en appuyant sur alt-s. Redémarrer le terminal ou relire ~/.inputrc pour que ça marche.


su -c "!!"

Si vous n'avez pas la permission d'être root, le programme sudo ou sudo n'a pas été installé sur le système.


1
2018-06-14 14:22





La façon dont je le préfère:

  • Touche fléchée haut
  • Accueil
  • "sudo"
  • Entrer

Mais il peut être plus facile de faire "sudo !!", à vous de voir.


1
2017-07-07 09:55





Si vous voulez le faire dans un alias, vous devez utiliser alias redo='sudo $(history -p !!)' pour certaines raisons.


1