La réponse comporte deux parties: !!
etsudo
!!
fait partie des fonctionnalités du shell (dans le cas d’Ubuntu, il s’agit probablement de bash, mais d’autres shells comme zsh ou csh le supportent également) appelé "développement de l’historique". Il se comporte de la même manière que les autres extensions en ce sens que le shell étend le "espace réservé" à un ensemble de mots. While foo*
serait étendu à une liste de tous les fichiers commençant par «foo», puis !!
étendu au contenu de la ligne de commande précédente.
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Comme d'autres extensions, cela est entièrement fait par le shell, donc si vous tapez !!
après une autre commande, cette commande n'est pas consciente de l'existence d'un !!
, mais ne verra que la ligne de commande précédente. (Contrairement aux autres extensions, l’extension de l’historique se produit avant l’enregistrement d’une commande dans l’historique, c’est-à-dire que !!
la ligne de commande remplacée sera enregistrée dans l’historique.)
La sudo
commande permet d'exécuter des commandes en tant qu'autre utilisateur, à condition que les autorisations soient accordées par la politique de sécurité (celle-ci est configurée par défaut /etc/sudoers
).
Par défaut, le mot de passe root reste non défini dans Ubuntu. Pour effectuer des tâches d'administration système, l'utilisateur créé lors de l'installation dispose des droits sudo. Cet utilisateur peut maintenant exécuter n'importe quelle commande du shell en tant que root, par simple ajout de préfixe sudo
. Certains programmes graphiques utilisent également le mécanisme sudo, par exemple la gestion des paquets.
La raison pour laquelle vous sudo
pouvez exécuter d'autres commandes en tant que root (ou un autre utilisateur) est que sudo binary ( /usr/bin/sudo
) a le bit setuid défini dans son autorisation et appartient à root. Tout exécutable (binaire) avec le bit setuid est exécuté avec les autorisations de son propriétaire. Cela signifie que sudo fonctionne efficacement avec les autorisations root, quel que soit l'utilisateur qui l'a appelé. Seules les politiques de sécurité internes de sudo gèrent quel utilisateur est autorisé et empêchent les utilisateurs arbitraires de faire des choses arbitraires.
Donc, dans le cas de sudo !!
cela signifie
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
est fondamentalement identique à
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
juste moins en tapant. Dans les deux cas, sudo voit juste mount /dev/sdb1 /mnt
et l'exécute avec les permissions root.