Pourquoi $ est-il le symbole par défaut pour un shell utilisateur et # le symbole par défaut pour un shell racine?

10

En utilisant un shell bash standard sur un serveur, l'invite PS1 se termine par défaut par $ pour les utilisateurs non root et # pour root.

C'EST À DIRE:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

Pourquoi est-ce?

Jack
la source
Historiquement ou plus directement?
Jeff Schaller

Réponses:

16

Historiquement, le shell Bourne d'origine / bin / sh utiliserait $comme invite normale et #pour l' invite de l'utilisateur root (et csh utiliserait %). Cela rendait assez facile de dire si vous utilisiez ou non en tant que superutilisateur.

# est également le caractère de commentaire, donc toute personne qui rentre aveuglément des données n'exécutera aucune commande réelle.

Les shells plus modernes (par exemple ksh, bash) continuent cette distinction $et #bien que ce soit moins important lorsque vous pouvez définir des valeurs plus compliquées telles que le nom d'utilisateur, le nom d'hôte, le répertoire :-)

Stephen Harris
la source
Pouvez-vous donner un exemple de la façon dont #le caractère de commentaire empêche quelqu'un d'exécuter de vraies commandes s'il rentre aveuglément des données?
John Gowers
6
Que se passe-t-il si vous coupez et collez la ligne complète # reboot- répondez ... rien, car #c'est un commentaire.
Stephen Harris
9

Tradition.

La norme POSIX dit (c'est moi qui souligne):

PS1

Cette variable est utilisée pour les invites interactives. Historiquement, le "superutilisateur" a eu une invite "#". Étant donné que les privilèges ne doivent pas nécessairement être monolithiques, il est difficile de définir les privilèges qui doivent provoquer l'invite alternative. Cependant, un utilisateur suffisamment puissant devrait être rappelé de ce pouvoir en ayant une invite alternative.

Voir aussi cette réponse à pratiquement la même question sur le forum SuperUser.

Kusalananda
la source
Pour ajouter, cela peut être trouvé sous Justification> C. Justification de Shell & Utilities> 2. Langage de commande Shell; Je devais juste y trouver une référence pour autre chose :)
forquare
1
@forquare Merci. J'ai ajouté un lien approprié maintenant.
Kusalananda