Ini agak rumit. Pertama-tama, detailnya tergantung pada jenis shell yang Anda jalankan. Untuk menjiplak diriku sendiri :
Ketika Anda membuka terminal emulator ( gnome-terminal
misalnya), Anda mengeksekusi apa yang dikenal sebagai shell non-login yang interaktif .
Ketika Anda masuk ke mesin Anda dari baris perintah, atau menjalankan perintah seperti su - username
, Anda menjalankan shell login interaktif .
Ketika Anda masuk secara grafis, Anda menjalankan sesuatu yang sangat berbeda. Detailnya akan tergantung pada sistem dan lingkungan grafis Anda, tetapi secara umum, itu adalah shell grafis yang berhubungan dengan login Anda. Sementara banyak shell grafis (termasuk default Ubuntu) akan membaca /etc/profile
dan ~/.profile
tidak semuanya melakukannya.
Akhirnya, ketika Anda menjalankan skrip shell, dijalankan di shell non-interaktif, non-login .
File yang akan dibaca bash saat diluncurkan tergantung pada jenis shell yang digunakan. Berikut ini adalah kutipan dari bagian INVOCATION dari man bash
(penekanan tambang):
Ketika bash dipanggil sebagai shell login interaktif , atau sebagai shell non-interaktif dengan opsi --login, ia pertama kali membaca dan mengeksekusi perintah dari file / etc / profile , jika file itu ada. Setelah membaca file itu, ia mencari ~ / .bash_profile, ~ / .bash_login, dan ~ / .profile, dalam urutan itu , dan membaca serta mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca. Opsi --noprofile dapat digunakan ketika shell mulai menghambat perilaku ini.
Ketika shell interaktif yang bukan shell login dimulai, bash membaca dan mengeksekusi perintah dari /etc/bash.bashrc dan ~ / .bashrc , jika file-file ini ada. Ini dapat dihambat dengan menggunakan opsi --norc. Opsi file --rcfile akan memaksa bash untuk membaca dan menjalankan perintah dari file alih-alih /etc/bash.bashrc dan ~ / .bashrc.
Itu adalah file inisialisasi. Anda juga memiliki /etc/environment
tempat Anda dapat mengatur variabel lingkungan global tapi itu dibaca daripada bersumber (perintah di dalamnya tidak dijalankan tetapi definisi variabel ditetapkan).
Sekarang, salam yang Anda lihat adalah sesuatu yang lain lagi. Itu diatur /etc/motd
dan ditampilkan melalui pam_motd
. Sebagaimana dijelaskan dalam man motd
:
Isi / etc / motd ditampilkan oleh pam_motd (8) setelah login berhasil tetapi tepat sebelum ia mengeksekusi shell login.
Singkatan "motd" adalah singkatan dari "message of the day", dan file ini secara tradisional digunakan untuk hal itu (ini membutuhkan ruang disk jauh lebih sedikit daripada email ke semua pengguna).
Pada Debian GNU / Linux, konten /run/motd.dynamic juga ditampilkan. File ini dihasilkan oleh /etc/init.d/motd saat boot.
Untuk menghapus pesan, cukup kosongkan /etc/motd
file dan pastikan tidak ada yang dihasilkan /etc/init.d/motd
jika ada.
Bagaimanapun, berdasarkan pada output yang Anda tunjukkan, Anda tampaknya masuk melalui ssh
yang berarti Anda menjalankan shell login interaktif , lihat di atas untuk apa artinya. Jadi, secara ringkas, hal-hal yang Anda pedulikan yang bersumber saat Anda masuk adalah (dan dalam urutan ini):
- Daemon SSH, melalui
pam_motd
modul perpustakaan PAM, menampilkan konten /etc/motd
. Melalui pam_env
modul, ini mengatur variabel lingkungan dari /etc/environment
dan ~/.pam_environment
.
- Shell login dimulai, dan file-file berikut dibaca secara berurutan:
/etc/profile
/etc/bash.bashrc
( /etc/profile
sumber-sumber Ubuntu default /etc/bash.bashrc
).
~/.bash_profile
. File lain yang bisa dibaca di sini ( ~/.profile
dan ~/.bash_login
) diabaikan karena ~/.bash_profile
ada.
export SET_IN_ETC_PROFILE=yes
di/etc/profile
,export SET_IN_HOME_ZSHRC=yes
di~/.zhshrc
(saya pengguna zsh), dll ... Kemudian reboot dan bagusenv|grep SET_IN
akan memberitahu Anda semua cerita. Untuk melihat variabel mana yang dilihat oleh aplikasi desktop (yang Anda luncurkan dari dasbor atau WM, tanpa menggunakan terminal), lihat askubuntu.com/a/356973/16395env
tidak memiliki hubungan dengan urutan eksekusi.SET_IN
akan menunjukkan kepada Anda file mana yang telah dibaca, bukan dalam urutan mana mereka telah dibaca. Urutannya standar, itu yang ditunjukkan dalam kutipan halaman manual yang saya miliki dalam jawaban saya.Info yang Anda lihat ketika Anda masuk melalui ssh dibuat sebelum / etc / profile bahkan pernah dilihat. Lihatlah urutan file di /etc/update-motd.d. Itu akan menunjukkan kepada Anda di mana pesan yang Anda lihat dihasilkan oleh berbagai skrip.
sumber