กระบวนการทำงานของ Linux เริ่มตั้งแต่เปิดเครื่องจนกระทั่งพร้อมใช้งาน มีขั้นตอนหลักๆ ดังนี้
- BIOS/UEFI: เมื่อเปิดเครื่อง firmware (BIOS หรือ UEFI) จะทำการ POST (Power-On Self-Test) ตรวจสอบฮาร์ดแวร์เบื้องต้น จากนั้นจะค้นหา boot loader ตามลำดับที่กำหนดในการตั้งค่า firmware
- Boot Loader: โปรแกรม boot loader เช่น GRUB จะถูกโหลดและเริ่มทำงาน มันจะแสดงเมนูให้เลือก kernel ที่ต้องการบู๊ต จากนั้นจะโหลด kernel image และ initial RAM disk (initrd) เข้าไปในหน่วยความจำ
- Kernel: kernel จะถูกโหลดเข้ามาใน RAM และเริ่มทำงาน มันจะตรวจสอบและกำหนดค่าฮาร์ดแวร์ต่างๆ จากนั้นจะเมาท์ root file system และเริ่มต้น init process
- Init: init process (ปัจจุบันส่วนใหญ่ใช้ systemd) เป็นกระบวนการแรกที่ถูกรันโดย kernel (มี PID=1) หน้าที่หลักคือเริ่มต้นบริการต่างๆ ตามลำดับที่กำหนดไว้ ตัวอย่างบริการที่ init เริ่มต้น ได้แก่
- udev: ตรวจจับอุปกรณ์ต่างๆ และโหลดไดร์เวอร์ที่เกี่ยวข้อง
- mountfs: เมาท์ filesystems ต่างๆ ที่กำหนดไว้ใน /etc/fstab
- swap: เปิดใช้งาน swap space
- network: เริ่มต้นบริการเครือข่าย เช่น กำหนดค่า network interface ด้วย DHCP
- มีการเรียกใช้ /etc/rc.d/rc.sysinit เพื่อเริ่มต้นบริการและกำหนดค่าเริ่มต้นต่างๆ
- Network: บริการเครือข่ายจะถูกเริ่มต้นในขั้นตอนนี้ ไฟล์ /etc/hosts จะถูกโหลดมาใช้เพื่อแปลงชื่อ hostname เป็น IP ตามที่กำหนดไว้ในไฟล์ นอกจากนี้ nameservers ที่กำหนดใน /etc/resolv.conf ก็จะถูกเรียกใช้งานเพื่อ query หา IP จาก hostname ด้วยโพรโทคอล DNS
- nsswitch ย่อมาจาก "Name Service Switch" เป็นกลไกที่ Linux และ Unix-like systems ใช้ในการค้นหาข้อมูลต่างๆ
- Runlevel: init จะเข้าสู่ runlevel ที่กำหนดไว้ โดยจะเรียกสคริปต์ใน /etc/rc.d/rc?.d/ (? คือเลข runlevel) ให้ทำงานตามลำดับ สคริปต์เหล่านี้จะเริ่มต้นบริการ (daemon) ที่จำเป็นในการใช้งานระบบ เช่น cron, sshd, httpd เป็นต้น
- Login: init จะเริ่มต้น getty processes เพื่อแสดง login prompt ที่คอนโซลต่างๆ (เช่น tty1-tty6) รอให้ผู้ใช้กรอกชื่อและรหัสผ่านเพื่อล็อกอินเข้าใช้งาน ถ้ามีการล็อกอินผ่าน SSH ก็จะใช้ sshd ในการจัดการแทน
- Shell: เมื่อผู้ใช้ล็อกอินเข้ามา ก็จะได้เชลล์ (shell) ไว้คอยรับคำสั่งจากผู้ใช้แล้วส่งไปให้กับเคอร์เนลประมวลผล เชลล์มีหลายชนิด เช่น bash, zsh, fish
- Desktop Environment: ในกรณีที่ใช้งานโหมดกราฟิก (X Window) เชลล์จะเริ่มต้น X server และ desktop environment หรือ window manager ที่กำหนดไว้ใน ~/.xinitrc หรือ ~/.xsession
จากนั้นผู้ใช้ก็สามารถใช้งานเครื่อง Linux ได้ตามปกติ ผ่านทางเชลล์หรือ desktop environment โดยที่กระบวนการต่างๆ ที่จำเป็นในการทำงานของระบบจะทำงานอยู่เบื้องหลัง