บู๊ทส์ลินุกซ์

ปรากฎว่ากระบวนการบูตมีไม่มาก:

1. บูตพบภาพ kernel บนดิสก์โหลดลงในหน่วยความจำและเริ่มต้นมัน
2. เคอร์เนลเริ่มต้นอุปกรณ์และคนขับรถของตน
3. เคอร์เนลติดตั้งรูท filesystem.
4. เคอร์เนลเริ่ม init โปรแกรมที่เรียกว่า
5. init ชุดส่วนที่เหลือของกระบวนการในการเคลื่อนไหว
6. กระบวนการสุดท้ายที่ init เริ่มต้นเป็นส่วนหนึ่งของลำดับการบูตช่วยให้คุณสามารถเข้าสู่ระบบ

การระบุแต่ละขั้นตอนของกระบวนการบูตนั้นมีค่าอย่างยิ่งในการแก้ไขปัญหาการบูตและทำความเข้าใจกับไฟล์ system โดยรวม ในการเริ่มต้นให้เปิดศูนย์บนบูตโหลดเดอร์ซึ่งเป็นหน้าจอเริ่มต้นหรือข้อความแจ้งที่คุณได้รับหลังจากที่คอมพิวเตอร์ทำการทดสอบตัวเองเมื่อเปิดเครื่องโดยถามว่าปฏิบัติการใด system วิ่ง. หลังจากที่คุณเลือกแล้วบูตโหลดเดอร์จะรันเคอร์เนลลินุกซ์โดยมอบหมายการควบคุมของไฟล์ system ไปยังเคอร์เนล

มีการอภิปรายรายละเอียดของเคอร์เนลอื่น ๆ ในหนังสือเล่มนี้คัดลอกมาจากที่บทความนี้ บทความนี้จะครอบคลุมถึง ขั้นตอนการเริ่มต้น kernelขั้นตอนที่เคอร์เนลพิมพ์ข้อความจำนวนมากเกี่ยวกับฮาร์ดแวร์ที่มีอยู่ในไฟล์ system. เคอร์เนลเริ่มต้น init หลังจากที่แสดงข้อความที่ประกาศว่าเคอร์เนลได้ติดตั้งไฟล์ ราก filesystem:

วีเอฟเอ: ติดตั้ง รูท (ext2 filesystem) อ่านเท่านั้น.

หลังจากนั้นไม่นานคุณจะเห็นข้อความเกี่ยวกับการเริ่มต้นตามด้วย system ข้อความเริ่มต้นบริการและในที่สุดคุณจะได้รับแจ้งการเข้าสู่ระบบบางประเภท

บันทึก : บน Red Hat Linuxโน้ตเริ่มต้นมีความชัดเจนเป็นพิเศษเนื่องจาก "ยินดีต้อนรับ" คุณเข้าสู่ "Red Hat Linux" หลังจากนั้นข้อความทั้งหมดจะแสดงความสำเร็จหรือล้มเหลวในวงเล็บที่ด้านขวามือของหน้าจอ

ส่วนใหญ่ของบทนี้กับข้อเสนอที่ init เพราะมันเป็นส่วนหนึ่งของลำดับการบูตที่เป็นคุณมีการควบคุม
init

ไม่มีอะไรพิเศษเกี่ยวกับ init เป็นโปรแกรมที่เหมือนกับโปรแกรมอื่น ๆ บน Linux systemและคุณจะพบมันใน / sbin พร้อมกับอื่น ๆ system ไบนารี จุดประสงค์หลักของการเริ่มต้นคือการเริ่มต้นและหยุดโปรแกรมอื่น ๆ ตามลำดับเฉพาะ สิ่งที่คุณต้องรู้คือลำดับนี้ทำงานอย่างไร

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

ระดับการทำงาน

ในเวลาใดก็ได้บน Linux systemชุดพื้นฐานของกระบวนการกำลังทำงานอยู่ สถานะนี้ของ machine เรียกว่า runlevel และแสดงด้วยตัวเลขตั้งแต่ 0 ถึง 6 system ใช้เวลาส่วนใหญ่ใน runlevel เดียว อย่างไรก็ตามเมื่อคุณปิดไฟล์ machine down, init สลับไปยังระดับการวิ่งที่แตกต่างกันเพื่อที่จะยุติ system บริการอย่างเป็นระเบียบและบอกให้เคอร์เนลหยุดทำงาน อีกระดับหนึ่งสำหรับโหมดผู้ใช้คนเดียวซึ่งจะกล่าวถึงในภายหลัง

วิธีที่ง่ายที่สุดในการจัดการกับ runlevels คือการตรวจสอบการกำหนดค่า init file, / etc / inittab. มองหาบรรทัดต่อไปนี้:

ID: 5: initdefault:

บรรทัดนี้หมายความว่าไฟล์ default runlevel บน system คือ 5. ทุกบรรทัดใน inittab file ใช้แบบฟอร์มนี้โดยมีฟิลด์สี่ฟิลด์คั่นด้วยเครื่องหมายทวิภาคตามลำดับต่อไปนี้:
# ตัวระบุที่ไม่ซ้ำกัน (สตริงสั้นเช่นรหัสในตัวอย่างก่อนหน้านี้)
# จำนวน runlevel บังคับ (s)
# การดำเนินการที่ init ควรทำ (ในตัวอย่างก่อนหน้านี้การดำเนินการคือการตั้งค่า default runlevel ถึง 5)
# คำสั่งในการดำเนินการ (อุปกรณ์เสริม)

ไม่มีคำสั่งให้ดำเนินการใน init ก่อนหน้านี้default ตัวอย่างเนื่องจากคำสั่งไม่สมเหตุสมผลในบริบทของการตั้งค่า default ระดับการวิ่ง มองลงไปใน inittab อีกเล็กน้อยจนกว่าคุณจะเห็นบรรทัดดังนี้:

l5: 5: รอ: /etc/rc.d/rc 5

บรรทัดนี้เรียกใช้ไฟล์ system การกำหนดค่าและบริการผ่านไดเร็กทอรี rc * .d และ init.d คุณจะเห็นได้ว่า init ถูกตั้งค่าให้รันคำสั่งที่เรียกว่า /etc/rc.d/rc 5 เมื่ออยู่ในระดับรันเลเวล 5 การดำเนินการ wait จะบอกว่า init รันคำสั่งเมื่อใดและอย่างไร: รัน rc 5 ครั้งเดียวเมื่อ enterเข้ารันเลเวล 5 แล้วรอให้คำสั่งนี้เสร็จสิ้นก่อนที่จะทำอย่างอื่น

มีการกระทำที่แตกต่างกันหลายประการใน addการเริ่มต้นdefault และรอโดยเฉพาะอย่างยิ่งเกี่ยวกับการจัดการพลังงานและหน้าคู่มือ inittab (5) จะบอกคุณเกี่ยวกับสิ่งเหล่านี้ทั้งหมด สิ่งที่คุณน่าจะพบมากที่สุดมีอธิบายไว้ในส่วนต่อไปนี้

respawn

การดำเนินการเกิดใหม่ทำให้ init รันคำสั่งที่ตามมาและหากคำสั่งดำเนินการเสร็จสิ้นให้รันอีกครั้ง คุณจะเห็นสิ่งที่คล้ายกับบรรทัดนี้ใน inittab file:

1: 2345: respawn: / sbin / mingetty tty1

โปรแกรมเก็ตตี้ให้แจ้งการเข้าสู่ระบบ บรรทัดก่อนหน้าเป็นครั้งแรกคอนโซลเสมือน (/ dev / tty1) หนึ่งที่คุณเห็นเมื่อคุณกด Alt-Control-Alt-F1 หรือ F1 การกระทำที่เกิดใหม่นำกลับเข้าสู่ระบบแจ้งหลังจากที่คุณออกจากระบบ

ctrlaltdel

แพทเทิร์น ctrlการดำเนินการ altdel ควบคุมสิ่งที่ system ทำเมื่อคุณกด CONTROL-ALT-DELETE บนคอนโซลเสมือน ส่วนใหญ่ systems นี่คือคำสั่งรีบูตบางประเภทโดยใช้คำสั่ง shutdown

sysinit

การดำเนินการ sysinit เป็นสิ่งแรกที่ init ควรทำงานเมื่อเริ่มต้นขึ้นก่อน enterในทุกระดับ

วิธีการกระบวนการในระดับการทำงานเริ่มต้น

ตอนนี้คุณพร้อมที่จะเรียนรู้วิธีเริ่มต้นไฟล์ system บริการก่อนที่จะให้คุณเข้าสู่ระบบ เรียกคืนบรรทัด inittab จากก่อนหน้านี้:

l5: 5: รอ: /etc/rc.d/rc 5

เส้นเล็ก ๆ นี้จะเรียกโปรแกรมอื่น ๆ อีกมากมาย RC ย่อมาจากคำสั่งเรียกใช้และคุณจะได้ยินคนอ้างถึงคำสั่งที่เป็นสคริปต์โปรแกรมหรือบริการ เพื่อที่จะมีคำสั่งเหล่านี้หรือไม่?

สำหรับ runlevel 5 ในตัวอย่างนี้คำสั่งอาจอยู่ใน /etc/rc.d/rc5.d หรือ /etc/rc5.d Runlevel 1 ใช้ rc1.d, runlevel 2 ใช้ rc2.d และอื่น ๆ คุณอาจพบสิ่งต่อไปนี้ items ในไดเร็กทอรี rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

คำสั่งเริ่มต้น 5 RC โปรแกรม runlevel ในไดเรกทอรีนี้โดยใช้คำสั่งในเขตเวลา GMT:

บ้าน S10sysklogd
บ้าน S12kerneld
บ้าน S15netstd_init
บ้าน S18netbase
...
บ้าน S99sshd

ขอให้สังเกตการโต้เถียงที่เริ่มต้นในแต่ละคำสั่ง ดัชนี S ในชื่อคำสั่งหมายความว่าไม่ควรเรียกใช้คำสั่งในโหมดเริ่มต้นและหมายเลข (00 99 ผ่าน) กำหนดที่อยู่ใน RC ลำดับเริ่มต้นคำสั่ง

คำสั่ง .d RC * มักจะเปลือกสคริปต์ว่าโปรแกรมเริ่มต้นใน sbin / หรือ / usr / sbin ปกติคุณสามารถคิดออกว่าหนึ่งในคำสั่งที่ไม่จริงโดยดูที่สคริปต์ที่มีน้อยหรือเพจเจอร์โปรแกรมอื่น

คุณสามารถเริ่มบริการเหล่านี้ด้วยตนเอง ตัวอย่างเช่นหากคุณต้องการเริ่มโปรแกรม httpd Web server ด้วยตนเองให้รัน S99httpd start ในทำนองเดียวกันหากคุณจำเป็นต้องฆ่าหนึ่งในบริการเมื่อไฟล์ machine เปิดอยู่คุณสามารถรันคำสั่งในไดเร็กทอรี rc * .d ด้วยอาร์กิวเมนต์ stop (เช่น S99httpd stop เป็นต้น)

ไดเรกทอรี rc * .d บางรายการมีคำสั่งที่ขึ้นต้นด้วย K (สำหรับ "kill" หรือโหมดหยุด) ในกรณีนี้ rc จะรันคำสั่งด้วยอาร์กิวเมนต์ stop แทนที่จะเป็น start คุณมักจะพบคำสั่ง K ใน runlevels ที่ปิดไฟล์ system ลง

Adding และถอดบริการ

ถ้าคุณต้องการ add, ลบหรือแก้ไขบริการในไดเร็กทอรี rc * .d คุณต้องพิจารณา look fileอยู่ข้างใน รายชื่อยาวเผยให้เห็นโครงสร้างเช่นนี้:

lrwxrwxrwx . . S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx . . S12kerneld -> ../init.d/kerneld
lrwxrwxrwx . . S15netstd_init -> ../init.d/netstd_init
lrwxrwxrwx . . S18netbase -> ../init.d/netbase
...

คำสั่งในไดเร็กทอรี rc * .d เป็นลิงก์สัญลักษณ์ไปยัง files ในไดเร็กทอรี init.d โดยปกติจะอยู่ใน / etc หรือ /etc/rc.d ลีนุกซ์ดิสทริบิวชันมีลิงก์เหล่านี้เพื่อให้สามารถใช้สคริปต์เริ่มต้นเดียวกันสำหรับรันเลเวลทั้งหมด อนุสัญญานี้ไม่ได้เป็นข้อกำหนด แต่มักจะทำให้องค์กรง่ายขึ้นเล็กน้อย

เพื่อป้องกันไม่ให้คำสั่งใดคำสั่งหนึ่งในไดเร็กทอรี init.d ทำงานใน runlevel ใดระดับหนึ่ง คุณอาจนึกถึงการลบลิงก์สัญลักษณ์ในไดเร็กทอรี rc * .d ที่เหมาะสม วิธีนี้ใช้ได้ แต่หากคุณทำผิดพลาดและจำเป็นต้องใส่ลิงก์กลับเข้าที่ คุณอาจมีปัญหาในการจำชื่อที่แน่นอนของลิงก์ ดังนั้น คุณไม่ควรลบลิงก์ในไดเร็กทอรี rc * .d แต่ควร add ขีดล่าง (_) ที่จุดเริ่มต้นของชื่อลิงค์ดังนี้:

MV S99httpd _S99httpd

ในเวลาบูต rc จะละเว้น _S99httpd เนื่องจากไม่ได้ขึ้นต้นด้วย S หรือ K นอกจากนี้ชื่อเดิมยังคงชัดเจนและคุณสามารถเข้าถึงคำสั่งได้อย่างรวดเร็วหากคุณไม่สะดวกและจำเป็นต้องเริ่มด้วยมือ

ไปยัง add คุณต้องสร้างสคริปต์เหมือนกับบริการอื่นๆ ในไดเร็กทอรี init.d แล้วสร้างลิงก์สัญลักษณ์ในไดเร็กทอรี rc * .d ที่ถูกต้อง วิธีที่ง่ายที่สุดในการเขียนสคริปต์คือการตรวจสอบสคริปต์ที่มีอยู่แล้วใน init.d ทำสำเนาของสคริปต์ที่คุณเข้าใจ และแก้ไขสำเนา

เมื่อ addสำหรับบริการ ตรวจสอบให้แน่ใจว่าคุณได้เลือกตำแหน่งที่เหมาะสมในลำดับการบู๊ตเพื่อเริ่มบริการ หากบริการเริ่มทำงานเร็วเกินไป บริการอาจไม่ทำงาน เนื่องจากต้องพึ่งพาบริการอื่นๆ สำหรับบริการที่ไม่จำเป็น ส่วนใหญ่ systemผู้ดูแลระบบชอบตัวเลขในยุค 90 หลังจากบริการส่วนใหญ่ที่มาพร้อมกับ system.

ลินุกซ์มามักจะมีคำสั่งให้เปิดและปิดให้บริการใน RC * ไดเรกทอรี .d ยกตัวอย่างเช่นใน Debian คำสั่งมีการอัปเดต rc.d และ Red Hat Linux, คำสั่ง chkconfig อินเตอร์เฟซผู้ใช้แบบกราฟิกนอกจากนี้ยังเป็น จะช่วยให้การใช้โปรแกรมเหล่านี้ให้ไดเรกทอรีเริ่มต้นจะช่วยให้สอดคล้องกับและการอัพเกรด

คำแนะนำ: หนึ่งใน Linux . ที่พบบ่อยที่สุด installปัญหาของเอชั่นคือเซิร์ฟเวอร์ XFree86 ที่กำหนดค่าไม่ถูกต้องซึ่งเปิดและปิด ซึ่งทำให้ making system ใช้ไม่ได้บนคอนโซล หากต้องการหยุดพฤติกรรมนี้ให้บูตเข้าสู่โหมดผู้ใช้คนเดียวและปรับเปลี่ยน runlevel หรือ runlevel services ของคุณ มองหาสิ่งที่มี xdm, gdm หรือ kdm ในไดเร็กทอรี rc * .d หรือ / etc / inittab ของคุณ

การควบคุม init

ในบางครั้งคุณต้องเริ่มเตะเล็กน้อยเพื่อบอกให้เปลี่ยนระดับการวิ่งเพื่ออ่าน inittab อีกครั้ง fileหรือเพียงแค่ถึง shut down system. เนื่องจาก init เป็นกระบวนการแรกเสมอในไฟล์ systemรหัสกระบวนการคือ 1 เสมอ

คุณสามารถควบคุม init กับ telinit ตัวอย่างเช่นถ้าคุณต้องการที่จะเปลี่ยนไป runlevel 3 ใช้คำสั่งนี้:

telinit 3

เมื่อเปลี่ยน runlevels init จะพยายามฆ่ากระบวนการใด ๆ ที่ไม่ได้อยู่ใน inittab file สำหรับ runlevel ใหม่ ดังนั้นคุณควรระมัดระวังเกี่ยวกับการเปลี่ยนระดับการวิ่ง

เมื่อคุณต้องการ add หรือลบงานที่เกิดใหม่หรือทำการเปลี่ยนแปลงใด ๆ กับ inittab fileคุณต้องบอก init เกี่ยวกับการเปลี่ยนแปลงและทำให้ต้องอ่านไฟล์ file. บางคนใช้ kill -HUP 1 เพื่อบอกให้ init ทำสิ่งนี้ วิธีการดั้งเดิมนี้ใช้ได้กับ Unix เกือบทุกเวอร์ชันตราบใดที่คุณพิมพ์ถูกต้อง อย่างไรก็ตามคุณสามารถเรียกใช้คำสั่ง telinit นี้:

telinit Q

คุณยังสามารถใช้ telinit S เพื่อสลับไปยังโหมดผู้เดียว

ปิด

init ยังควบคุมวิธีการ system ปิดและรีบูต วิธีที่เหมาะสมในการ shut down และลินุกซ์ machine คือการใช้คำสั่ง shutdown

มีสองวิธีพื้นฐานในการใช้การปิดระบบ หากคุณหยุด systemมันจะปิดไฟล์ macลดระดับลงและทำให้มันลง เพื่อให้ machine หยุดทันทีใช้คำสั่งนี้:

ปิด -h ในขณะนี้

ที่ทันสมัยที่สุด macด้วยลินุกซ์เวอร์ชันล่าสุดที่สมเหตุสมผลการหยุดชะงักของไฟไปที่ไฟล์ macไฮน์ คุณยังสามารถรีบูตไฟล์ macไฮน์ สำหรับการรีบูตให้ใช้ -r แทน -h

กระบวนการปิดเครื่องใช้เวลาหลายวินาที คุณไม่ควรรีเซ็ตหรือปิดเครื่อง macในช่วงนี้

ในตัวอย่างก่อนหน้านี้เป็นเวลาที่จะ shut down. อาร์กิวเมนต์นี้จำเป็น แต่มีหลายวิธีในการระบุ หากคุณต้องการ machine ที่จะลงไปในอนาคตวิธีหนึ่งคือใช้ + n โดยที่ n คือจำนวนนาทีที่ปิดเครื่องควรรอก่อนที่จะทำงาน สำหรับตัวเลือกอื่น ๆ ให้ดูที่หน้าคู่มือการปิดเครื่อง (8)

ที่จะทำให้ system รีบูตใน 10 นาทีเรียกใช้คำสั่งนี้:

ปิด -R + 10

บน Linux การปิดระบบจะแจ้งเตือนทุกคนที่เข้าสู่ระบบ machine กำลังจะลง แต่มันไม่ได้ผลจริงเพียงเล็กน้อย หากคุณระบุเวลาอื่นนอกเหนือจากนี้การปิดระบบจะสร้างไฟล์ file เรียกว่า / etc / nologin เมื่อเป็นเช่นนี้ file ปัจจุบัน system ห้ามทุกคนเข้าสู่ระบบยกเว้น superuser

เมื่อ system ในที่สุดเวลาปิดเครื่องก็มาถึงการปิดเครื่องจะบอกให้ init เปลี่ยนเป็น runlevel 0 เพื่อหยุดและ runlevel 6 เพื่อรีบูต เมื่อเริ่มต้น enters runlevel 0 หรือ 6 สิ่งต่อไปนี้เกิดขึ้นทั้งหมดซึ่งคุณสามารถตรวจสอบได้โดยดูที่สคริปต์ภายใน rc0.d และ rc6.d:

1 ว่ามันฆ่ากระบวนการ init ทุกความสามารถ (มันจะเมื่อเปลี่ยนระดับการทำงานอื่น ๆ )

# คำสั่ง rc0.d / rc6.d เริ่มต้นทำงานการล็อก system fileเข้าที่และเตรียมการอื่น ๆ สำหรับการปิดระบบ
# คำสั่ง rc0.d / rc6.d ถัดไปยกเลิกการต่อเชื่อมทั้งหมด filesystems นอกเหนือจากรูท
# คำสั่ง rc0.d / rc6.d เพิ่มเติมต่อเชื่อมรากใหม่ filesystem อ่านเท่านั้น.
# ยังมีคำสั่ง rc0.d / rc6.d เพิ่มเติมเขียนข้อมูลที่บัฟเฟอร์ทั้งหมดไปยังไฟล์ filesystem ด้วยโปรแกรมซิงค์
# สุดท้ายคำสั่ง rc0.d / rc6.d บอกเคอร์เนลที่จะเริ่มต้นหรือหยุดด้วยการรีบูต, หยุดหรือโปรแกรม poweroff

โปรแกรมรีบูตและหยุดทำงานแตกต่างกันไปในแต่ละระดับการทำงานซึ่งอาจทำให้เกิดความสับสน โดย defaultโปรแกรมเหล่านี้จะเรียกการปิดระบบด้วยตัวเลือก -r หรือ -h แต่ถ้าไฟล์ system อยู่ที่ระดับการหยุดทำงานหรือรีบูตแล้วโปรแกรมจะบอกให้เคอร์เนลปิดตัวเองทันที หากคุณต้องการปิดไฟล์ macรีบร้อน (โดยไม่คำนึงถึงความเสียหายที่อาจเกิดขึ้นจากการปิดระบบที่ไม่เป็นระเบียบ) ให้ใช้ตัวเลือก -f

หลงใหลในเทคโนโลยี ฉันชอบทดสอบและเขียนบทช่วยสอนเกี่ยวกับระบบปฏิบัติการ macOSลินุกซ์ Windowsเกี่ยวกับการกำหนดค่าเว็บเซิร์ฟเวอร์ WordPress, WooCommerce และ LEMP (Linux, NGINX, MySQL และ PHP) ฉันเขียนบน StealthSettings.com ตั้งแต่ปี 2006 และไม่กี่ปีต่อมา ฉันเริ่มเขียนบทแนะนำและข่าวสารเกี่ยวกับอุปกรณ์ในระบบนิเวศ iHowTo.Tips Apple: iPhone, iPad, Apple ดู, โฮมพอด, iMac, MacBook, AirPods และอุปกรณ์เสริม

แสดงความคิดเห็น