เปลือกเข้าสู่ระบบแรกอ่านแล้ว/etc/profile
~/.bash_profile
เปลือกที่ไม่ได้เข้าสู่ระบบอ่านจากแล้ว/etc/bash.bashrc
~/.bashrc
เหตุใดจึงสำคัญ
เนื่องจากบรรทัดนี้ในman ssh
:
หากระบุคำสั่งคำสั่งจะถูกดำเนินการบนรีโมตโฮสต์แทนที่จะเป็นเชลล์ล็อกอิน
กล่าวอีกนัยหนึ่งหากคำสั่ง ssh มีเพียงตัวเลือก (ไม่ใช่คำสั่ง) เช่น:
ssh user@host
~/.bash_profile
มันก็จะเริ่มเข้าสู่ระบบเปลือกเป็นเปลือกเข้าสู่ระบบอ่าน
คำสั่ง ssh ซึ่งไม่มีคำสั่งเช่น:
ssh user@host :
คำสั่งอยู่ที่ไหน:
(หรือไม่ทำอะไรเลย)
มันจะไม่เริ่มเชลล์การเข้าสู่ระบบดังนั้นจึง~/.bashrc
เป็นสิ่งที่จะอ่าน
รีโมต stdin
การเชื่อมต่อ tty ที่ให้มาสำหรับ / dev / stdin ในคอมพิวเตอร์ระยะไกลอาจเป็น 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
ซึ่งลงท้ายด้วย TTY (ไม่ใช่การเชื่อมต่อเครือข่าย) เมื่อ bash เริ่มต้นเห็น
สำหรับการเชื่อมต่อ 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 แต่ด้วยเหตุผลอื่น