로그인 쉘은 먼저 읽고 /etc/profile
다음 ~/.bash_profile
.
비 로그인 쉘에서 읽고 /etc/bash.bashrc
다음 ~/.bashrc
.
왜 중요한가요?
이 줄로 인해 man ssh
:
경우 명령이 지정되어, 그 대신 로그인 쉘의 원격 호스트에서 실행됩니다.
즉, ssh 명령에 다음과 같은 옵션 만있는 경우 (명령이 아님) :
ssh user@host
로그인 쉘이 시작되고 로그인 쉘이 읽습니다 ~/.bash_profile
.
다음 과 같은 command 가있는 ssh 명령
ssh user@host :
명령이있는 곳 :
(또는 아무것도하지 마십시오).
그것은 것입니다 하지 따라서 로그인 쉘을 시작 ~/.bashrc
으로 판독 될 수 있습니다.
원격 표준 입력
원격 컴퓨터에서 / dev / stdin에 제공된 tty 연결은 실제 tty이거나 다른 것일 수 있습니다.
에 대한:
$ 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
시작된 bash가 볼 때 TTY (네트워크 연결이 아님)로 끝나는 것.
명령으로 ssh 연결의 경우 :
$ 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
TTY의 목록은 동일하게 시작되지만 / etc / profile은 소스되지 않았습니다.
$ 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]
연결이 네트워크 연결이 아닌 파이프임을 쉘에 알려줍니다.
따라서 두 테스트 사례 모두에서 셸은 연결이 네트워크에서 온 것임을 알 수 없으므로 읽을 수 없습니다 ~/.bashrc
(네트워크 연결에 대해서만 이야기하는 경우). ~ / .bashrc를 읽지 만 다른 이유가 있습니다.