Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

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

เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

2. Interactive non-login Shell

เชลล์เริ่มต้นที่บรรทัดคำสั่งโดยใช้โปรแกรมเชลล์ เช่น $/bin/bash หรือ $/bin/zsh มันยังสามารถเริ่มต้นได้โดยการรันคำสั่ง /bin/su

นอกจากนี้ interactive non-login shell ยังสามารถเรียกใช้ได้ด้วยโปรแกรมเทอร์มินัล เช่น konsole, terminator หรือ xterm จากภายในสภาพแวดล้อมกราฟิก

เมื่อเชลล์เริ่มต้นในสถานะนี้ มันจะคัดลอกสภาพแวดล้อมของเชลล์แม่ และอ่านไฟล์ ~/.bashrc เฉพาะผู้ใช้สำหรับคำแนะนำการกำหนดค่าเริ่มต้นเพิ่มเติม

$ su
# ls -la
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

3. Non-interactive Shell

เชลล์ถูกเรียกใช้เมื่อสคริปต์เชลล์กำลังรัน ในโหมดนี้ มันกำลังประมวลผลสคริปต์ (ชุดคำสั่งเชลล์หรือคำสั่งระบบทั่วไป/ฟังก์ชัน) และไม่ต้องการอินพุตจากผู้ใช้ระหว่างคำสั่ง ยกเว้นจะระบุไว้เป็นอย่างอื่น มันทำงานโดยใช้สภาพแวดล้อมที่สืบทอดมาจากเชลล์แม่

การเข้าใจไฟล์เริ่มต้นเชลล์ระดับระบบ

ในส่วนนี้ เราจะส่องแสงเพิ่มเติมเกี่ยวกับไฟล์เริ่มต้นเชลล์ที่เก็บการกำหนดค่าสำหรับผู้ใช้ทุกคนบนระบบ ซึ่งรวมถึง:

ไฟล์ /etc/profile — เก็บการกำหนดค่าสภาพแวดล้อมระดับระบบและโปรแกรมเริ่มต้นสำหรับการตั้งค่าล็อกอิน การกำหนดค่าทั้งหมดที่คุณต้องการให้ใช้กับสภาพแวดล้อมของผู้ใช้ระบบทั้งหมดควรเพิ่มในไฟล์นี้

ตัวอย่างเช่น คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PATH ทั่วไปได้ที่นี่

# cat /etc/profile
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

หมายเหตุ: ในบางระบบเช่น 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
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

ไฟล์ /etc/bashrc หรือ /etc/bash.bashrc — มีฟังก์ชันและอัลลิแอสระดับระบบ รวมถึงการกำหนดค่าอื่นๆ ที่ใช้กับผู้ใช้ระบบทั้งหมด

หากระบบของคุณมีหลายประเภทของเชลล์ การวางการกำหนดค่าเฉพาะ bash ในไฟล์นี้เป็นแนวคิดที่ดี

# cat /etc/bashrc
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

การเข้าใจไฟล์เริ่มต้นเชลล์เฉพาะผู้ใช้

ต่อไป เราจะอธิบายเพิ่มเติมเกี่ยวกับไฟล์ดอทเริ่มต้นเชลล์เฉพาะผู้ใช้ (bash) ที่เก็บการกำหนดค่าสำหรับผู้ใช้คนใดคนหนึ่งบนระบบ พวกเขาอยู่ในไดเรกทอรีบ้านของผู้ใช้ และรวมถึง:

# ls -la
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

ไฟล์ ~/.bash_profile — เก็บการกำหนดค่าสภาพแวดล้อมและโปรแกรมเริ่มต้นเฉพาะผู้ใช้ คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม PATH กำหนดเองได้ที่นี่ ตามที่แสดงในภาพหน้าจอด้านล่าง:

# cat ~/.bash_profile
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

ไฟล์ ~/.bashrc — ไฟล์นี้เก็บอัลลิแอสและฟังก์ชันเฉพาะผู้ใช้

# cat ~/.bashrc
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

ไฟล์ ~/.bash_login — มีการกำหนดค่าเฉพาะที่ปกติจะรันเฉพาะเมื่อคุณล็อกอินเข้าระบบ เมื่อ ~/.bash_profile ไม่มีอยู่ ไฟล์นี้จะถูกอ่านโดย bash

ไฟล์ ~/.profile — ไฟล์นี้ถูกอ่านในกรณีที่ไม่มี ~/.bash_profile และ ~/.bash_login มันสามารถเก็บการกำหนดค่าเดียวกันได้ ซึ่งก็สามารถเข้าถึงได้โดยเชลล์อื่นๆ บนระบบ เนื่องจากเราพูดถึง bash หลักๆ ที่นี่ จงทราบว่าเชลล์อื่นๆ อาจไม่เข้าใจไวยากรณ์ bash

ต่อไป เราจะอธิบายไฟล์เฉพาะผู้ใช้อีกสองไฟล์ที่สำคynbซึ่งไม่จำเป็นต้องเป็นไฟล์เริ่มต้น bash:

ไฟล์ ~/.bash_history — bash รักษาประวัติคำสั่งที่ผู้ใช้ป้อนในระบบ รายการคำสั่งนี้ถูกเก็บในไดเรกทอรีบ้านของผู้ใช้ในไฟล์ ~/.bash_history

เพื่อดูรายการนี้ ให้พิมพ์:

$ history or $ history | less
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

ไฟล์ ~/.bash_logout — ไม่ได้ใช้สำหรับการเริ่มต้นเชลล์ แต่เก็บคำแนะนำเฉพาะผู้ใช้สำหรับขั้นตอนล็อกเอาท์ มันถูกอ่านและรันเมื่อผู้ใช้ออกจาก interactive login shell

ตัวอย่างปฏิบัติจริงหนึ่งคือการล้างหน้าต่างเทอร์มินัลเมื่อล็อกเอาท์ นี่สำคัญสำหรับการเชื่อมต่อระยะไกล ซึ่งจะทิ้งหน้าต่างสะอาดหลังจากปิด:

# cat bash_logout
เชี่ยวชาญไฟล์เริ่มต้นเชลล์และโปรไฟล์ผู้ใช้: คู่มือสำหรับผู้ดูแลระบบ Linux

สำหรับข้อมูลเชิงลึกเพิ่มเติม โปรดตรวจสอบเนื้อหาของไฟล์เริ่มต้นเชลล์เหล่านี้ในการกระจาย Linux ต่างๆ และอ่านหน้าคู่มือ bash:

ขอจบเพียงเท่านี้สำหรับตอนนี้! ในบทความนี้ เราอธิบายไฟล์เริ่มต้น/การเริ่มต้นเชลล์ใน Linux ใช้แบบฟอร์มความคิดเห็นด้านล่างเพื่อตอบกลับมาให้เราครับ