Shell login pertama kali dibaca /etc/profile
dan kemudian ~/.bash_profile
.
Shell non-login dibaca dari /etc/bash.bashrc
dan kemudian ~/.bashrc
.
Mengapa itu penting?
Karena baris ini di man ssh
:
Jika perintah ditentukan, ini dijalankan pada host jarak jauh alih-alih shell login.
Dengan kata lain, jika perintah ssh hanya memiliki opsi (bukan perintah), seperti:
ssh user@host
Itu akan memulai shell login, shell login membaca ~/.bash_profile
.
Perintah ssh yang memang memiliki perintah , seperti:
ssh user@host :
Di mana perintahnya :
(atau tidak melakukan apa-apa).
Itu tidak akan memulai shell login, oleh karena ~/.bashrc
itu apa yang akan dibaca.
Stdin jarak jauh
Koneksi tty yang disediakan untuk / dev / stdin di komputer jarak jauh mungkin tty yang sebenarnya atau yang lainnya.
Untuk:
$ ssh sorontar@localhost
/etc/profile sourced
$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
$ ls -la /proc/self/fd/0
lrwx------ 1 sorontar sorontar 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3
$ ls -la /dev/pts/3
crw--w---- 1 sorontar tty 136, 3 Dec 24 19:35 /dev/pts/3
Yang berakhir dengan TTY (bukan koneksi jaringan) sebagai bash mulai melihatnya.
Untuk koneksi ssh dengan perintah:
$ ssh sorontar@localhost 'ls -la /dev/stdin'
sorontar@localhost's password:
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
Daftar TTY memulai sama, tetapi perhatikan bahwa / etc / profile tidak bersumber.
$ ssh sorontar@localhost 'ls -la /proc/self/fd/0'
sorontar@localhost's password:
lr-x------ 1 sorontar sorontar 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]
Yang memberitahu shell bahwa koneksi adalah pipa (bukan koneksi jaringan).
Jadi, dalam kedua kasus pengujian, shell tidak dapat mengetahui bahwa koneksi berasal dari jaringan dan karena itu tidak membaca ~/.bashrc
(jika kita hanya berbicara tentang koneksi ke jaringan). Itu membaca ~ / .bashrc, tetapi untuk alasan yang berbeda.