Linux เป็นระบบหลายผู้ใช้ (multi-user) แบบแบ่งปันเวลา (time sharing) หมายความว่ามีผู้ใช้มากกว่าหนึ่งคนสามารถล็อกอินและใช้ระบบได้ และผู้ดูแลระบบมีหน้าที่จัดการมุมมองต่างๆ ของวิธีที่ผู้ใช้ต่างๆ สามารถดำเนินการระบบได้ในแง่ของการติดตั้ง/อัปเดต/ลบซอฟต์แวร์ โปรแกรมที่พวกเขาสามารถรัน ไฟล์ที่พวกเขาสามารถดู/แก้ไข และอื่นๆ
Linux ยังอนุญาตให้สร้างหรือดูแลสภาพแวดล้อมของผู้ใช้ได้สองวิธีหลัก: การกำหนดค่าระบบทั้งหมด (global) และการกำหนดค่าเฉพาะผู้ใช้ (personal) ปกติวิธีพื้นฐานในการทำงานกับระบบ Linux คือเชลล์ และเชลล์สร้างสภาพแวดล้อมขึ้นอยู่กับไฟล์บางไฟล์ที่มันอ่านระหว่างการเริ่มต้นหลังจากผู้ใช้ล็อกอินสำเร็จ
แนะนำอ่าน: วิธีตั้งค่าตัวแปรสภาพแวดล้อมใน Linux
ในบทความนี้ เราจะอธิบายไฟล์เริ่มต้นเชลล์ (shell initialization files) ที่เกี่ยวข้องกับโปรไฟล์ผู้ใช้ สำหรับการจัดการผู้ใช้ท้องถิ่นใน Linux เราจะบอกคุณว่าจะเก็บฟังก์ชันเชลล์กำหนดเอง อัลลิแอส ตัวแปร และโปรแกรมเริ่มต้นไว้ที่ไหน
สำคัญ: เพื่อวัตถุประสงค์ของบทความนี้ เราจะเน้นที่ bash เชลล์ที่เข้ากันได้กับ sh ซึ่งเป็นเชลล์ที่นิยม/ใช้มากที่สุดบนระบบ Linux
หากคุณใช้เชลล์อื่น (zsh, ash, fish เป็นต้น) โปรดอ่านเอกสารของมันเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ที่เกี่ยวข้องที่เราจะพูดถึงที่นี่
การเริ่มต้นเชลล์ใน Linux
เมื่อเชลล์ถูกเรียกใช้ มีไฟล์เริ่มต้น/การเริ่มต้นบางไฟล์ที่มันอ่าน ซึ่งช่วยตั้งค่าสภาพแวดล้อมสำหรับเชลล์เองและผู้ใช้ระบบ นั่นคือ ฟังก์ชัน ตัวแปร อัลลิแอส และอื่นๆ ที่กำหนดไว้ล่วงหน้า (และปรับแต่ง)
มีสองหมวดหมู่ของไฟล์เริ่มต้นที่เชลล์อ่าน:
- system-wide startup files — ไฟล์เหล่านี้มีการกำหนดค่าสากลที่ใช้กับผู้ใช้ทุกคนบนระบบ และมักอยู่ในไดเรกทอรี /etc รวมถึง: /etc/profile และ /etc/bashrc หรือ /etc/bash.bashrc
- user-specific startup files — ไฟล์เหล่านี้เก็บการกำหนดค่าที่ใช้กับผู้ใช้คนเดียวบนระบบ และปกติอยู่ในไดเรกทอรีบ้านของผู้ใช้เป็นไฟล์ดอท (dot files) พวกเขาสามารถลบล้างการกำหนดค่าระบบทั้งหมดได้ รวมถึง: .profile, .bash_profile, .bashrc และ .bash_login
อีกครั้ง เชลล์สามารถถูกเรียกใช้ในสามโหมดที่เป็นไปได้:
1. Interactive Login Shell
เชลล์ถูกเรียกใช้หลังจากผู้ใช้ล็อกอินเข้าสู่ระบบสำเร็จ โดยใช้ /bin/login หลังจากอ่านข้อมูลประจำตัวที่เก็บในไฟล์ /etc/passwd
เมื่อเชลล์เริ่มต้นเป็น interactive login shell มันจะอ่าน /etc/profile และไฟล์ที่เทียบเท่าเฉพาะผู้ใช้ ~/.bash_profile
2. Interactive non-login Shell
เชลล์เริ่มต้นที่บรรทัดคำสั่งโดยใช้โปรแกรมเชลล์ เช่น $/bin/bash หรือ $/bin/zsh มันยังสามารถเริ่มต้นได้โดยการรันคำสั่ง /bin/su
นอกจากนี้ interactive non-login shell ยังสามารถเรียกใช้ได้ด้วยโปรแกรมเทอร์มินัล เช่น konsole, terminator หรือ xterm จากภายในสภาพแวดล้อมกราฟิก
เมื่อเชลล์เริ่มต้นในสถานะนี้ มันจะคัดลอกสภาพแวดล้อมของเชลล์แม่ และอ่านไฟล์ ~/.bashrc เฉพาะผู้ใช้สำหรับคำแนะนำการกำหนดค่าเริ่มต้นเพิ่มเติม
$ su # ls -la
3. Non-interactive Shell
เชลล์ถูกเรียกใช้เมื่อสคริปต์เชลล์กำลังรัน ในโหมดนี้ มันกำลังประมวลผลสคริปต์ (ชุดคำสั่งเชลล์หรือคำสั่งระบบทั่วไป/ฟังก์ชัน) และไม่ต้องการอินพุตจากผู้ใช้ระหว่างคำสั่ง ยกเว้นจะระบุไว้เป็นอย่างอื่น มันทำงานโดยใช้สภาพแวดล้อมที่สืบทอดมาจากเชลล์แม่
การเข้าใจไฟล์เริ่มต้นเชลล์ระดับระบบ
ในส่วนนี้ เราจะส่องแสงเพิ่มเติมเกี่ยวกับไฟล์เริ่มต้นเชลล์ที่เก็บการกำหนดค่าสำหรับผู้ใช้ทุกคนบนระบบ ซึ่งรวมถึง:
ไฟล์ /etc/profile — เก็บการกำหนดค่าสภาพแวดล้อมระดับระบบและโปรแกรมเริ่มต้นสำหรับการตั้งค่าล็อกอิน การกำหนดค่าทั้งหมดที่คุณต้องการให้ใช้กับสภาพแวดล้อมของผู้ใช้ระบบทั้งหมดควรเพิ่มในไฟล์นี้
ตัวอย่างเช่น คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PATH ทั่วไปได้ที่นี่
# cat /etc/profile
หมายเหตุ: ในบางระบบเช่น RHEL/CentOS 7 คุณจะได้รับคำเตือนอย่าง "It's not recommended to change this file unless you know what you are doing. It's much better to create a custom .sh shell script in /etc/profile.d/ to make custom changes to your environment, as this will prevent the need for merging in future updates" (ไม่แนะนำให้เปลี่ยนไฟล์นี้ ยกเว้นคุณรู้ว่ากำลังทำอะไร ควรสร้างสคริปต์เชลล์ .sh กำหนดเองใน /etc/profile.d/ เพื่อทำการเปลี่ยนแปลงกำหนดเองในสภาพแวดล้อมของคุณ เนื่องจากจะป้องกันความจำเป็นในการรวมในอัปเดตอนาคต)
ไดเรกทอรี /etc/profile.d/ — เก็บสคริปต์เชลล์ที่ใช้ทำการเปลี่ยนแปลงกำหนดเองในสภาพแวดล้อมของคุณ:
# cd /etc/profile.d/ # ls -l
ไฟล์ /etc/bashrc หรือ /etc/bash.bashrc — มีฟังก์ชันและอัลลิแอสระดับระบบ รวมถึงการกำหนดค่าอื่นๆ ที่ใช้กับผู้ใช้ระบบทั้งหมด
หากระบบของคุณมีหลายประเภทของเชลล์ การวางการกำหนดค่าเฉพาะ bash ในไฟล์นี้เป็นแนวคิดที่ดี
# cat /etc/bashrc
การเข้าใจไฟล์เริ่มต้นเชลล์เฉพาะผู้ใช้
ต่อไป เราจะอธิบายเพิ่มเติมเกี่ยวกับไฟล์ดอทเริ่มต้นเชลล์เฉพาะผู้ใช้ (bash) ที่เก็บการกำหนดค่าสำหรับผู้ใช้คนใดคนหนึ่งบนระบบ พวกเขาอยู่ในไดเรกทอรีบ้านของผู้ใช้ และรวมถึง:
# ls -la
ไฟล์ ~/.bash_profile — เก็บการกำหนดค่าสภาพแวดล้อมและโปรแกรมเริ่มต้นเฉพาะผู้ใช้ คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PATH กำหนดเองได้ที่นี่ ตามที่แสดงในภาพหน้าจอด้านล่าง:
# cat ~/.bash_profile
ไฟล์ ~/.bashrc — ไฟล์นี้เก็บอัลลิแอสและฟังก์ชันเฉพาะผู้ใช้
# cat ~/.bashrc
ไฟล์ ~/.bash_login — มีการกำหนดค่าเฉพาะที่ปกติจะรันเฉพาะเมื่อคุณล็อกอินเข้าระบบ เมื่อ ~/.bash_profile ไม่มีอยู่ ไฟล์นี้จะถูกอ่านโดย bash
ไฟล์ ~/.profile — ไฟล์นี้ถูกอ่านในกรณีที่ไม่มี ~/.bash_profile และ ~/.bash_login มันสามารถเก็บการกำหนดค่าเดียวกันได้ ซึ่งก็สามารถเข้าถึงได้โดยเชลล์อื่นๆ บนระบบ เนื่องจากเราพูดถึง bash หลักๆ ที่นี่ จงทราบว่าเชลล์อื่นๆ อาจไม่เข้าใจไวยากรณ์ bash
ต่อไป เราจะอธิบายไฟล์เฉพาะผู้ใช้อีกสองไฟล์ที่สำคynbซึ่งไม่จำเป็นต้องเป็นไฟล์เริ่มต้น bash:
ไฟล์ ~/.bash_history — bash รักษาประวัติคำสั่งที่ผู้ใช้ป้อนในระบบ รายการคำสั่งนี้ถูกเก็บในไดเรกทอรีบ้านของผู้ใช้ในไฟล์ ~/.bash_history
เพื่อดูรายการนี้ ให้พิมพ์:
$ history or $ history | less
ไฟล์ ~/.bash_logout — ไม่ได้ใช้สำหรับการเริ่มต้นเชลล์ แต่เก็บคำแนะนำเฉพาะผู้ใช้สำหรับขั้นตอนล็อกเอาท์ มันถูกอ่านและรันเมื่อผู้ใช้ออกจาก interactive login shell
ตัวอย่างปฏิบัติจริงหนึ่งคือการล้างหน้าต่างเทอร์มินัลเมื่อล็อกเอาท์ นี่สำคัญสำหรับการเชื่อมต่อระยะไกล ซึ่งจะทิ้งหน้าต่างสะอาดหลังจากปิด:
# cat bash_logout
สำหรับข้อมูลเชิงลึกเพิ่มเติม โปรดตรวจสอบเนื้อหาของไฟล์เริ่มต้นเชลล์เหล่านี้ในการกระจาย Linux ต่างๆ และอ่านหน้าคู่มือ bash:
ขอจบเพียงเท่านี้สำหรับตอนนี้! ในบทความนี้ เราอธิบายไฟล์เริ่มต้น/การเริ่มต้นเชลล์ใน Linux ใช้แบบฟอร์มความคิดเห็นด้านล่างเพื่อตอบกลับมาให้เราครับ