Apa itu shell login dan non-login?


78

Dikatakan bahwa pengaturan untuk shell non login untuk masuk ke .bashrcfile dan pengaturan shell login untuk masuk ke .profilefile.

Apa yang dimaksud dengan shell login dan non-login?

Tolong jelaskan tanpa menggunakan jargon teknis sejauh mungkin.

Jawaban:


83

Sederhananya:

  • Jika Anda membuka shell atau terminal (atau beralih ke satu), dan ia meminta Anda untuk login (Username? Password?) Sebelum memberi Anda prompt, itu adalah shell login.
  • Jika tidak (seperti gnome-terminal ), dan memungkinkan Anda menggunakannya langsung, itu adalah shell non-login.

Jika Anda adalah pengguna normal Ubuntu Desktop, satu - satunya shell login adalah ... desktop Anda (Anda mengetikkan kata sandi untuk masuk, kan;)? Yah, secara teknis itu adalah shell login yang memulai GUI, tapi itu masuk ke jargon. Dan ya, itu akan membaca pengaturan di.profile

Satu-satunya saat Anda (pengguna normal) mungkin akan melihat shell login yang terlihat seperti shell login adalah jika Anda mengalami masalah dengan desktop Anda dan Anda beralih ke terminal virtual dengan Ctrl+ Alt+ F1shortcut.


Kasus umum lainnya untuk memiliki shell login meliputi:

  • mengakses komputer Anda dari jarak jauh melalui ssh(atau menghubungkan secara lokal dengan ssh localhost)
  • mensimulasikan shell login awal dengan bash -l(atau sh -l)
  • mensimulasikan rootshell login awal dengansudo -i
    • atau untuk non- pengguna lainsudo -u username -iroot
  • mengautentikasi sebagai bukan rootpengguna lain dengan (dan kata sandi mereka )su - username
  • menggunakan sudo loginperintah untuk mengalihkan pengguna

Jika saya memulai Eclipse IDE dari terminal, ia terbuka seperti yang diharapkan, tetapi jika saya mencoba untuk membukanya dengan mengklik ikon Eclipse, ia tidak dapat mengenali lokasi Java (kecuali kalau PATH untuk Java diatur dalam file profil.) Itu berarti mengklik ikon Eclipse memerlukan shell login, mengapa?
DUKE

2
@DUKE, Tidak, itu berarti bahwa variabel lingkungan perlu diatur secara berbeda ketika Anda menggunakan desktop / GUI versus sistem konsol baris perintah saja. Masukkan PATH Anda, dll. Di ~/.pam_environment(hanya variabel, tidak ada perintah bash di sana!), Logout, masuk, dan saksikan semuanya secara ajaib muncul di desktop dan juga di gnome-terminal!
ish

1
Login via ssh tidak meminta shell login. Itu tidak memuat /etc/profile, /etc/profile.datau ~/.profile.
xuhdev


@xuhdev Login melalui ssh memunculkan shell login dan ia memuat / etc / profile, /etc/profile.d dan ~ / .bash_profile.
MichaelZ

9

Saya tidak berpikir bahwa jawaban yang benar dapat diberikan tanpa "jargon teknis". Karena pertanyaan ini adalah yang pertama muncul di Google untuk pertanyaan "apa itu shell login", saya memberikan jawaban yang lebih benar di bawah ini:

Shell login hanyalah shell yang disuruh menjadi shell login. Itu tidak berarti shell yang muncul setelah Anda login, meskipun biasanya aplikasi yang login Anda mengatakan shell diluncurkan untuk menjadi shell login. Ada beberapa cara berikut untuk memberi tahu shell apakah itu harus login:

  1. Menjalankan shell dengan -latau --loginargumen dengan asumsi itu mengetahuinya (Saya tidak tahu ada shell yang tidak tahu -l, tetapi --loginhanya didukung oleh beberapa shell).
  2. Running shell dengan argv[0]set to -{some_string}(yaitu dengan HYPHEN-MINUS diawali dengan biasanya argv[0]atau ke string lain). Ini adalah apa ssh dan su lakukan: su hanya berjalan dieksekusi dengan -susebagai argv[0](Halo untuk semua orang berpikir argv[0]ada hubungannya dengan yang sedang berjalan nama executable), ssh berjalan zsh dengan -zshketika pengguna telah menetapkan /bin/zshsebagai cangkangnya.

Loginess dari shell sama sekali tidak ada hubungannya dengan siapa pun yang meminta Anda kata sandi atau melakukan beberapa prosedur autenikasi lainnya. Beberapa program seperti ssh atau login (atau beberapa emulator terminal seperti urxvt) menjalankan shell sebagai yang menggunakan login yang argv[0]dimulai dengan HYPHEN-MINUS. Beberapa seperti su atau sudo (atau zsh: lihat -pengubah precommand yang dijelaskan di bagian PRECOMMAND MODIFIER in man zshmisc) tidak melakukan ini secara default, tetapi dapat dikatakan demikian. Beberapa memiliki satu-satunya pilihan untuk memberitahu shell menjadi login menggunakan argumennya (yaitu bash -l): ssh dengan argumen perintah (yang secara eksplisit memberitahu ssh apa yang harus dijalankan pada remote end).

Umumnya lebih baik untuk terlebih dahulu berkonsultasi dokumentasi dari program yang digunakan untuk memohon shell untuk menentukan apakah shell akan login satu dan kedua melakukan beberapa tes untuk menentukan apakah aplikasi akan meluncurkan shell login (misalnya dengan menambahkan echoke .profile).


Saya tertarik pada opsi kedua: bagaimana saya bisa benar-benar mengubah argv [0] sebelum (atau setelah) memanggil bash? Bisakah itu dilakukan dari baris perintah?
VeryHardCoder

@ VeryHardCoder Ini tergantung pada aplikasi yang Anda gunakan untuk menjalankan perintah. Dalam kode C hal itu dilakukan dengan memasok langsung argv[0]ke salah satu exec*fungsi, alami dan tak terhindarkan: Anda selalu menyediakan keduanya argv[0] dan path ke perintah benar-benar dijalankan ketika menggunakan exec*fungsi, bahkan jika Anda tidak pernah ingin argv[0]berbeda dari menjalankan perintah. Bahasa lain menyediakan caranya sendiri. Khususnya bash mengizinkan penggunaan exec -a new_argv0 bash, tetapi ini, tentu saja, akan menggantikan shell yang saat ini berjalan dengan apa pun yang Anda execedit, jadi Anda mungkin perlu menggunakan (exec -a -zsh zsh)
subshell

OK mengerti! Sebenarnya, itu bisa dilakukan bahkan dengan cara yang lebih sederhana: (exec-l bash) ...
VeryHardCoder

1
Apa perbedaan fungsional antara keduanya? Apakah ini sekadar bendera boolean?
Alexey

@Alexey Perbedaan fungsional utama adalah sekumpulan file konfigurasi yang digunakan saat startup. $0, dan, mungkin juga sesuatu yang lain (variabel, pengaturan, dll) diatur sehingga loginess dari shell dapat dideteksi dalam file konfigurasi, tetapi siapa yang sebenarnya mendeteksi ini sehingga akan ada bedanya? Itu semua yang aku tahu.
ZyX
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.