web-dev-qa-db-fra.com

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

Parfois, lorsque j'exécute une commande, je ne remarque pas que je devais l'exécuter en tant que super utilisateur pour disposer de suffisamment d'autorisations.

Est-il possible d'exécuter à nouveau la même commande mais en tant que super utilisateur?

114
Trufa

Le moyen le plus simple consiste à exécuter:

Sudo !!

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

Source .

192
Trufa

Un séjour sans failleenter image description here

Réponse: vous entrez Sudo !! tout de suite après pour répéter la commande précédente avec des privilèges augmentés.

edit: Image trouvée via reddit , et c'est une parodie de la bande dessinée originale xkcd de Randall Munroe.

69
wim

Vous pouvez utiliser la flèche vers le haut pour faire défiler vos anciennes commandes, les réécrire/les modifier et ajouter le Sudodevant elles. (le bouton d'accueil au-dessus des touches fléchées réglera la position au début.)

Je n'aime pas l'idée de Sudo !!, car parfois vous ajoutez une autre commande entre les deux et vous ne vous en souvenez plus.

17
Xylol

Je vais juste ajouter une alternative: en tant que court en tapant 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 ...), mais en ajoutant "flèche vers le haut", vous pouvez le faire selon la commande de votre historique.

13
Olivier Dulac

Cette question aurait pu être généralisée en " Exécuter la même commande mais avec quelques modifications ", car l'une des brillantes décisions de conception sous Unix est de ne pas implémenter dans le shell, peut être exploitée par toute commande appelée à partir du shell.

En d'autres termes, cette astuce ne s'applique pas seulement à Sudo:

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

L’extension d’historique (également appelée substitution d’historique) n’est qu’une fonction du shell facilitant la répétition des commandes précédentes (avec moins de frappes au clavier). Consultez votre page de manuel Shell pour history expansion. Il décrit beaucoup d'autres astuces et raccourcis que vous pouvez utiliser avec l'historique, par exemple:

Vous pouvez vous référer aux commandes précédentes par leur 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 quelque chose d'autre:

!?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 de manière indépendante.

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

7
arielf

Il y a quelques façons de le faire

  • Il suffit de saisir à nouveau la commande en ajoutant Sudo avant la commande

  • Presse Up arrow pour obtenir la dernière commande et mettre Sudo devant celle-ci.

  • Entrez Sudo !!

Le !! se développe à la dernière commande entrée. Vous pouvez faire la même chose avec d’autres choses avec l’historique en ligne de commande, voir ici

7
user162424

J'utilise zsh au lieu de bash et j'ai ceci dans mon ~/.zshrc, donc en pressant Alt+S insère 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
Patches

Si vous voulez le faire dans un alias, vous devez utiliser alias redo='Sudo $(history -p !!)' pour une raison quelconque.

2
Aaron Franke
su -c "!!"

Si vous n'avez pas la permission d'être root avec Sudo ou le programme Sudo ne s'est pas installé sur le système.

1
Achu

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

  • Touche flèche haut
  • Accueil
  • "Sudo"
  • Entrer

Mais il serait peut-être plus facile de faire "Sudo !!", à vous de choisir.

1
Farid El Nasire