GNU/Linux >> Belajar Linux >  >> Linux

Perbedaan Antara Shell Login dan Shell Non-login?

Saya memahami perbedaan mendasar antara shell interaktif dan shell non-interaktif. Tapi apa sebenarnya yang membedakan shell login dari shell non-login?

Dapatkah Anda memberikan contoh penggunaan interaktif non-login cangkang?

Jawaban yang Diterima:

Shell login adalah proses pertama yang dijalankan di bawah ID pengguna Anda saat Anda masuk untuk sesi interaktif. Proses login memberi tahu shell untuk berperilaku sebagai shell login dengan konvensi:meneruskan argumen 0, yang biasanya merupakan nama shell yang dapat dieksekusi, dengan - karakter yang ditambahkan (mis. -bash padahal biasanya bash . Shell login biasanya membaca file yang melakukan hal-hal seperti mengatur variabel lingkungan:/etc/profile dan ~/.profile untuk shell Bourne tradisional, ~/.bash_profile tambahan untuk bash, /etc/zprofile dan ~/.zprofile untuk zsh, /etc/csh.login dan ~/.login untuk csh, dll.

Saat Anda masuk di konsol teks, atau melalui SSH, atau dengan su - , Anda mendapatkan login interaktif kerang. Saat Anda masuk dalam mode grafis (pada manajer tampilan X), Anda tidak mendapatkan shell login, tetapi Anda mendapatkan manajer sesi atau manajer jendela.

Jarang menjalankan login non-interaktif shell, tetapi beberapa pengaturan X melakukannya ketika Anda masuk dengan manajer tampilan, untuk mengatur untuk membaca file profil. Pengaturan lain (ini tergantung pada distribusi dan pada pengelola tampilan) baca /etc/profile dan ~/.profile eksplisit, atau tidak membacanya. Cara lain untuk mendapatkan shell login non-interaktif adalah dengan login dari jarak jauh dengan perintah yang melewati input standar yang bukan terminal, mis. ssh example.com <my-script-which-is-stored-locally (sebagai lawan dari ssh example.com my-script-which-is-on-the-remote-machine , yang menjalankan shell non-interaktif, non-login).

Saat Anda memulai shell di terminal dalam sesi yang ada (layar, terminal X, buffer terminal Emacs, shell di dalam yang lain, dll.), Anda mendapatkan interaktif, non-login kerang. Shell itu mungkin membaca file konfigurasi Shell (~/.bashrc untuk bash dipanggil sebagai bash , /etc/zshrc dan ~/.zshrc untuk zsh, /etc/csh.cshrc dan ~/.cshrc untuk csh, file yang ditunjukkan oleh ENV variabel untuk shell yang sesuai dengan POSIX/XSI seperti tanda hubung, ksh, dan bash saat dipanggil sebagai sh , $ENV jika disetel dan ~/.mkshrc untuk mksh, dll.).

Saat shell menjalankan skrip atau perintah yang diteruskan pada baris perintahnya, itu adalah non-interaktif, non-login kerang. Kerang seperti itu berjalan sepanjang waktu:sangat umum bahwa ketika sebuah program memanggil program lain, itu benar-benar menjalankan skrip kecil di dalam cangkang untuk menjalankan program lain itu. Beberapa shell membaca file startup dalam kasus ini (bash menjalankan file yang ditunjukkan oleh BASH_ENV variabel, zsh menjalankan /etc/zshenv dan ~/.zshenv ), tetapi ini berisiko:shell dapat dipanggil dalam semua jenis konteks, dan hampir tidak ada yang dapat Anda lakukan yang mungkin tidak merusak sesuatu.

Terkait:Memahami tc qdisc dan iperf?

Saya menyederhanakan sedikit, lihat manual untuk detail berdarah.


Linux
  1. Perbedaan Antara 2>&-, 2>/dev/null, |&, &>/dev/null Dan>/dev/null 2>&1?

  2. Perbedaan Penggunaan Antara Variabel Shell Dan Variabel Lingkungan?

  3. Apa perbedaan antara nohup dan ampersand

  1. perbedaan antara cgroup dan namespace

  2. Apa perbedaan antara &> dan >&di bash?

  3. Perbedaan antara perintah dalam skrip bash dan perintah di terminal

  1. Perbedaan Antara Perintah Bawaan Dan Yang Tidak?

  2. Perbedaan Antara "...", '...', $'...', Dan $"..." Kutipan Di Shell?

  3. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?