Mengapa $ simbol default untuk shell pengguna dan # simbol default untuk shell root?

10

Mengoperasikan bash shell standar pada server, prompt PS1 secara default untuk mengakhiri $ untuk pengguna non-root, dan # untuk root.

YAITU:

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

Kenapa ini?

Mendongkrak
sumber
Secara historis atau lebih langsung?
Jeff Schaller

Jawaban:

16

Secara historis shell Bourne / bin / sh asli akan digunakan $sebagai prompt normal dan #untuk prompt pengguna root (dan csh akan menggunakan %). Ini membuatnya cukup mudah untuk mengetahui apakah Anda menjalankan sebagai pengguna super atau tidak.

# juga karakter komentar, jadi siapa pun yang secara acak memasukkan kembali data tidak akan menjalankan perintah nyata.

Semakin banyak shell modern (mis. Ksh, bash) melanjutkan perbedaan ini $dan #meskipun itu kurang penting ketika Anda dapat menetapkan nilai yang lebih rumit seperti nama pengguna, nama host, direktori :-)

Stephen Harris
sumber
Bisakah Anda memberikan contoh bagaimana #menjadi karakter komentar mencegah seseorang menjalankan perintah nyata jika mereka secara acak memasukkan kembali data?
John Gowers
6
Apa yang terjadi jika Anda tidak memotong garis lengkap # reboot- jawab ... tidak ada, karena #ini adalah komentar.
Stephen Harris
9

Tradisi.

Standar POSIX mengatakan (penekanan saya):

PS1

Variabel ini digunakan untuk prompt interaktif. Secara historis, "superuser" memiliki prompt '#'. Karena hak istimewa tidak diharuskan bersifat monolitik, sulit untuk menentukan hak istimewa mana yang harus menyebabkan prompt alternatif. Namun, pengguna yang cukup kuat harus diingatkan tentang kekuatan itu dengan memiliki prompt alternatif.

Lihat juga jawaban ini untuk pertanyaan yang hampir sama di forum SuperUser.

Kusalananda
sumber
Untuk menambahkan, ini dapat ditemukan di Rationale> C. Rationale for Shell & Utilities> 2. Shell Command Language; Saya hanya harus menemukan referensi untuk sesuatu yang lain :)
forquare
1
@forquare Terima kasih. Saya telah menambahkan tautan yang tepat sekarang.
Kusalananda