Linux คืออะไร: kernel, distribution และระบบไฟล์อธิบายแบบเข้าใจง่าย
Linux คือ kernel ของระบบปฏิบัติการแบบโอเพนซอร์สที่ควบคุมซีพียู หน่วยความจำ ดิสก์ และเครือข่าย เมื่อรวมกับยูทิลิตี้ ตัวจัดการแพ็กเกจ และระบบ init จะกลายเป็น distribution เช่น Ubuntu, Debian หรือ Fedora Linux ทำงานบนเซิร์ฟเวอร์ คอนเทนเนอร์ และคลาวด์เกือบทั้งหมด จึงเป็นทักษะพื้นฐานของวิศวกร DevOps และผู้ดูแลระบบ
Linux คือ kernel ของระบบปฏิบัติการแบบโอเพนซอร์ส ซึ่งนำไปสร้างเป็นระบบที่สมบูรณ์ได้หลายรูปแบบ ทั้งเซิร์ฟเวอร์ เดสก์ท็อป และอุปกรณ์ฝังตัว เมื่อคนพูดว่า "เซิร์ฟเวอร์ใช้ Linux" หมายถึงไม่ใช่โปรแกรมเดียว แต่เป็น distribution คือ kernel บวกกับชุดยูทิลิตี้ ไลบรารี ตัวจัดการแพ็กเกจ และระบบ init บทความนี้จะอธิบายว่า Linux คืออะไรจริงๆ ประกอบด้วยอะไรบ้าง และทำไมวิศวกร DevOps ทุกคนจึงหลีกเลี่ยงไม่ได้
Linux คือ kernel ไม่ใช่ระบบทั้งหมด
พูดให้ถูกต้อง Linux คือ kernel เท่านั้น kernel คือโปรแกรมที่ถูกเรียกขึ้นมาเป็นตัวแรกหลังจาก bootloader ทำงาน และคงอยู่ในหน่วยความจำตลอดเวลาที่เครื่องเปิดอยู่ มันทำหน้าที่แบ่งเวลาของซีพียูให้โปรเซส จัดสรรหน่วยความจำ ทำงานกับดิสก์และการ์ดเครือข่ายผ่านไดรเวอร์ และตรวจสอบสิทธิ์การเข้าถึง
โปรแกรมทั่วไปไม่ได้ควบคุมฮาร์ดแวร์โดยตรง เมื่อโปรแกรมแก้ไขบันทึกไฟล์ มันจะเรียก system call (open, write, close) และ kernel จะตัดสินใจว่าจะเขียนข้อมูลลงบล็อกใดของดิสก์ และโปรเซสนั้นมีสิทธิ์หรือไม่ การแบ่งหน้าที่แบบนี้ทำให้ระบบเสถียร โปรแกรมที่ล้มเหลวจะไม่ทำให้ทั้งเครื่องล่มไปด้วย
ดูเวอร์ชันของ kernel ได้ด้วยคำสั่งเดียว:
$ uname -r
6.8.0-45-generic
Kernel ถูกสร้างโดย Linus Torvalds ในปี 1991 และพัฒนาแบบเปิดมาตลอด ซอร์สโค้ดอยู่ภายใต้สัญญาอนุญาต GNU GPL เวอร์ชัน 2 ทุกคนสามารถอ่าน แก้ไข และเผยแพร่ต่อได้ภายใต้เงื่อนไขเดียวกัน
Distribution ของ Linux คืออะไร
มี kernel อย่างเดียวไม่พอ ต้องมี shell สำหรับพิมพ์คำสั่ง ยูทิลิตี้จัดการไฟล์ ไลบรารี และตัวติดตั้งโปรแกรม ยูทิลิตี้พื้นฐานส่วนใหญ่ (ls, cp, bash, grep) มาจากโครงการ GNU ระบบจึงบางครั้งถูกเรียกว่า GNU/Linux kernel รวมกับชุดเครื่องมือทั้งหมดนี้ ที่ประกอบและทดสอบมาเป็นชุดเดียว เรียกว่า distribution
Distribution แตกต่างกันหลักๆ ที่ตัวจัดการแพ็กเกจ นโยบายการอัปเดต และกลุ่มผู้ใช้เป้าหมาย
| ตระกูล | ตัวอย่าง | แพ็กเกจ | พบได้ที่ |
|---|---|---|---|
| Debian | Debian, Ubuntu, Linux Mint | .deb, apt | เซิร์ฟเวอร์ คลาวด์ เครื่องทำงาน |
| Red Hat | RHEL, Fedora, Rocky Linux, AlmaLinux | .rpm, dnf | เซิร์ฟเวอร์ระดับองค์กร |
| Alpine | Alpine Linux | apk | Docker image ที่ต้องการขนาดเล็ก |
| Arch | Arch Linux, Manjaro | pacman | ผู้ที่ชื่นชอบ ต้องการแพ็กเกจเวอร์ชันใหม่ |
ดูว่ากำลังใช้ distribution อะไรได้จากไฟล์ /etc/os-release:
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
ID=ubuntu
ID_LIKE=debian
สำหรับการเรียนและการใช้งานเซิร์ฟเวอร์ มักเลือก Ubuntu LTS หรือ Debian เพราะมีเอกสารมาก และคำสั่งจากคู่มือบนอินเทอร์เน็ตมักใช้ได้เลยโดยไม่ต้องแก้
ระบบทำงานอย่างไร: kernel, shell, user space
การมองเป็นชั้นจะเข้าใจง่ายกว่า ชั้นล่างสุดคือฮาร์ดแวร์ เหนือขึ้นมาคือ kernel ถัดขึ้นไปคือ user space ซึ่งประกอบด้วยบริการของระบบ ไลบรารี (เช่น glibc) และโปรแกรมต่างๆ ระหว่างผู้ใช้กับระบบคือ shell ซึ่งส่วนใหญ่เป็น bash ทำหน้าที่รับคำสั่งและเรียกโปรแกรม
- Kernel — โปรเซส หน่วยความจำ ระบบไฟล์ เครือข่าย ไดรเวอร์
- ระบบ init — โปรเซสแรกที่มี PID 1 ใน distribution สมัยใหม่ส่วนใหญ่คือ
systemdซึ่งเป็นตัวเริ่มบริการอื่นๆ - บริการ (daemon) — เว็บเซิร์ฟเวอร์ SSH เซิร์ฟเวอร์ cron ระบบบันทึก log
- Shell และยูทิลิตี้ — สิ่งที่คุณใช้ทำงานใน terminal
เซิร์ฟเวอร์มักไม่มีหน้าจอกราฟิก ผู้ดูแลระบบเชื่อมต่อผ่าน SSH และทำงานบนบรรทัดคำสั่ง ดังนั้นการเรียน Linux จึงหมายถึงการเรียนรู้การใช้ terminal เป็นหลัก
ระบบไฟล์ของ Linux: ทุกอย่างเริ่มต้นที่ /
ใน Linux ไม่มีไดรฟ์ C: และ D: มีโครงสร้างไดเรกทอรีเพียงโครงสร้างเดียวที่เริ่มจากราก / ดิสก์ แฟลชไดรฟ์ และโฟลเดอร์เครือข่ายทั้งหมดจะถูกเมานต์ (mount) เข้ากับไดเรกทอรีใดไดเรกทอรีหนึ่งในโครงสร้างนี้ อีกหลักการหนึ่งคือ เกือบทุกอย่างใน Linux ถูกแทนด้วยไฟล์ ทั้งไฟล์ปกติ ไดเรกทอรี อุปกรณ์ และข้อมูลเกี่ยวกับโปรเซส
$ ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
ตำแหน่งของไดเรกทอรีถูกกำหนดโดยมาตรฐาน FHS (Filesystem Hierarchy Standard) ดังนั้นในทุก distribution ไฟล์ตั้งค่าจะอยู่ในตำแหน่งใกล้เคียงกัน
| ไดเรกทอรี | เก็บอะไร |
|---|---|
/etc | การตั้งค่าระบบและบริการ: /etc/passwd, /etc/ssh/sshd_config, /etc/fstab |
/home | ไดเรกทอรีส่วนตัวของผู้ใช้: /home/alice |
/root | ไดเรกทอรีส่วนตัวของ root ผู้ดูแลสูงสุด |
/var | ข้อมูลที่เปลี่ยนแปลงได้: log ใน /var/log, แคชแพ็กเกจ, ฐานข้อมูล, คิวอีเมล |
/usr | โปรแกรมและไลบรารีที่ติดตั้งแล้ว: /usr/bin, /usr/lib |
/bin, /sbin | คำสั่งพื้นฐาน; ใน distribution สมัยใหม่เป็นลิงก์ไปยัง /usr/bin และ /usr/sbin |
/boot | kernel (vmlinuz-*), initramfs และไฟล์ของ bootloader |
/dev | ไฟล์อุปกรณ์: /dev/sda, /dev/null |
/proc, /sys | ระบบไฟล์เสมือน: kernel แสดงข้อมูลโปรเซสและการตั้งค่าผ่านทางนี้ |
/tmp | ไฟล์ชั่วคราว มักถูกล้างเมื่อรีบูต |
/opt | โปรแกรมของบุคคลที่สามที่มาเป็นชุดเดียว |
/mnt, /media | จุดเมานต์สำหรับดิสก์และสื่อถอดได้ |
พาธแบบสัมบูรณ์และแบบสัมพัทธ์
พาธแบบสัมบูรณ์ขึ้นต้นด้วย / และไม่ขึ้นกับตำแหน่งปัจจุบันของคุณ เช่น /var/log/syslog ส่วนพาธแบบสัมพัทธ์คำนวณจากไดเรกทอรีปัจจุบัน เช่น ../logs/app.log จุด . คือไดเรกทอรีปัจจุบัน จุดสองจุด .. คือไดเรกทอรีแม่ และเครื่องหมาย ~ คือไดเรกทอรีส่วนตัวของคุณ
$ pwd
/home/alice
$ cd /var/log
$ cd ..
$ pwd
/var
$ cd ~
$ pwd
/home/alice
/proc: ระบบเป็นชุดของไฟล์
ไดเรกทอรี /proc ไม่ได้ถูกเก็บลงดิสก์ kernel สร้างขึ้นทันทีที่มีการอ่าน เช่น cat /proc/cpuinfo แสดงข้อมูลโปรเซสเซอร์ cat /proc/meminfo แสดงหน่วยความจำ และโปรเซสแต่ละตัวมีไดเรกทอรี /proc/<PID> ที่เก็บบรรทัดคำสั่งและไฟล์ที่โปรเซสเปิดอยู่ ยูทิลิตี้อย่าง ps และ top ก็แค่อ่านไฟล์เหล่านี้
การเมานต์
คำสั่ง df -h แสดงว่าระบบไฟล์ใดถูกเมานต์ที่ไหน และยังมีพื้นที่ว่างเหลือเท่าไร:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 12G 26G 32% /
/dev/sda1 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs 393M 1.2M 392M 1% /run
จุดเมานต์ถาวรถูกกำหนดไว้ใน /etc/fstab ซึ่งระบบจะอ่านไฟล์นี้ตอนบูต
Linux บูตอย่างไร: จากเปิดเครื่องถึงหน้าล็อกอิน
การเข้าใจขั้นตอนการบูตช่วยให้แก้ปัญหาได้เมื่อเซิร์ฟเวอร์ "ไม่ขึ้น" หลังรีบูต โดยสรุปลำดับจะเป็นดังนี้
- Firmware (UEFI หรือ BIOS) ตรวจสอบฮาร์ดแวร์และค้นหา bootloader
- Bootloader GRUB แสดงเมนูและโหลด kernel จาก
/bootพร้อมภาพ initramfs เข้าสู่หน่วยความจำ - Kernel เริ่มต้นฮาร์ดแวร์ และใช้ initramfs เพื่อหาและเมานต์ระบบไฟล์รูท
- systemd เริ่มทำงานเป็นโปรเซส PID 1 และเปิดบริการต่างๆ ตามลำดับที่ถูกต้อง ได้แก่ เครือข่าย log SSH cron และบริการอื่นๆ
- หน้าล็อกอิน บนคอนโซลหรือผ่าน SSH
ข้อความของ kernel ตอนบูตดูได้ด้วย sudo dmesg หรือ journalctl -k ส่วนเวลาที่ใช้ในแต่ละขั้นดูได้ด้วย systemd-analyze
ผู้ใช้และสิทธิ์การเข้าถึง: การป้องกันที่มาพร้อมระบบ
Linux เป็นระบบหลายผู้ใช้มาตั้งแต่ต้น ทุกไฟล์มีเจ้าของ กลุ่ม และสิทธิ์อ่าน เขียน และรัน ผู้ใช้ทั่วไปไม่สามารถทำลายไฟล์ของระบบได้ และงานดูแลระบบทำผ่าน sudo ผู้ใช้ root ทำได้ทุกอย่าง จึงไม่ควรทำงานด้วยบัญชีนี้เป็นประจำ
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2847 Oct 1 10:12 /etc/passwd
อ่านบรรทัดนี้ได้ว่า เป็นไฟล์ปกติ เจ้าของ root อ่านและเขียนได้ ส่วนคนอื่นอ่านได้อย่างเดียว
ทำไม DevOps ต้องรู้ Linux
สำหรับวิศวกร DevOps Linux ไม่ใช่แค่หัวข้อหนึ่งในหลายๆ หัวข้อ แต่เป็นสภาพแวดล้อมที่งานเกือบทั้งหมดเกิดขึ้น นี่คือที่ที่พวกเขาพบ Linux ทุกวัน
- เซิร์ฟเวอร์ เว็บเซิร์ฟเวอร์ ฐานข้อมูล และคิวส่วนใหญ่ทำงานบน Linux
- คอนเทนเนอร์ Docker ใช้กลไกของ kernel Linux เช่น namespaces และ cgroups คอนเทนเนอร์ก็คือโปรเซส Linux ที่ถูกแยกออกมา และ image ตั้งอยู่บน distribution เช่น Debian หรือ Alpine
- คลาวด์และ Kubernetes เครื่องเสมือนบนคลาวด์และโหนดของคลัสเตอร์ก็ใช้ Linux
- CI/CD การ build ใน pipeline ทำงานบน Linux runner และสคริปต์ build มักเขียนด้วย bash
- การวินิจฉัย เมื่อบริการล่ม คำตอบอยู่ใน
journalctltopssdfหากไม่รู้จักเครื่องมือเหล่านี้ก็ไม่สามารถแก้ไขเหตุการณ์ได้
ทักษะขั้นต่ำ ได้แก่ การเดินทางในระบบไฟล์ได้คล่อง เข้าใจสิทธิ์การเข้าถึง ติดตั้งแพ็กเกจ จัดการบริการด้วย systemctl อ่าน log ทำงานกับโปรเซส เครือข่าย และ SSH และเขียน bash script ง่ายๆ ได้
เริ่มเรียน Linux อย่างไร
ไม่จำเป็นต้องติดตั้ง Linux แทนระบบหลักของคอมพิวเตอร์ มีหลายวิธีที่ปลอดภัยในการลองใช้งาน
- เครื่องเสมือน (VirtualBox, VMware) พร้อม Ubuntu Server ทดลองทำลายแล้วกู้คืนจาก snapshot ได้
- WSL บน Windows เป็นสภาพแวดล้อม Ubuntu เต็มรูปแบบใน terminal ของ Windows:
wsl --install - เซิร์ฟเวอร์บนคลาวด์ ใกล้เคียงกับงานจริงที่สุด เชื่อมต่อผ่าน SSH
- คอนเทนเนอร์ Docker
docker run -it --rm ubuntu bashให้ shell ได้ในไม่กี่วินาที
เริ่มจากการเดินทาง (pwd, ls, cd) จากนั้นเป็นไฟล์และสิทธิ์ แล้วจึงเป็นแพ็กเกจ โปรเซส และบริการ ระบบช่วยเหลือมีให้เสมอ: man ls หรือ ls --help
สรุป
Linux คือ kernel ส่วน distribution คือ kernel รวมกับยูทิลิตี้ ไลบรารี ตัวจัดการแพ็กเกจ และ systemd ระบบทั้งหมดเป็นโครงสร้างไดเรกทอรีเดียวที่เริ่มจากราก / โดยการตั้งค่าอยู่ใน /etc log อยู่ใน /var/log และโปรแกรมอยู่ใน /usr เมื่อเข้าใจว่า Linux คืออะไรและบูตอย่างไร คุณก็มีพื้นฐานสำหรับเซิร์ฟเวอร์ คอนเทนเนอร์ และคลาวด์ ระบบไฟล์ การบูต และการดูแลระบบถูกสอนแบบลงมือทำในหลักสูตร Linux
คำถามที่พบบ่อย
Linux เป็นระบบปฏิบัติการหรือ kernel กันแน่?
พูดตามหลักเคร่งครัด Linux คือ kernel ส่วนระบบปฏิบัติการคือ distribution ซึ่งประกอบด้วย kernel บวกกับยูทิลิตี้ GNU ไลบรารี ตัวจัดการแพ็กเกจ และระบบ init แต่ในการสนทนาทั่วไป คำว่า "Linux" มักหมายถึงทั้งระบบ
Linux ใช้ฟรีหรือไม่?
Kernel และ distribution ส่วนใหญ่ (Ubuntu, Debian, Fedora) เผยแพร่ฟรีภายใต้สัญญาอนุญาตโอเพนซอร์ส สิ่งที่มีค่าใช้จ่ายมักเป็นบริการสนับสนุน เช่น Red Hat Enterprise Linux
มือใหม่ควรเลือก distribution ไหน?
สำหรับเซิร์ฟเวอร์และการเรียนการดูแลระบบ Ubuntu LTS และ Debian เหมาะที่สุด เพราะมีเวอร์ชันเสถียรและเอกสารมาก ความรู้สามารถย้ายไปใช้กับ distribution อื่นได้ ความต่างหลักอยู่ที่ตัวจัดการแพ็กเกจ
ต้องรู้ Linux ก่อนจะใช้ Docker ได้ไหม?
ควรรู้อย่างน้อยพื้นฐาน เพราะคอนเทนเนอร์สร้างจากกลไกของ kernel Linux ภายใน image มี distribution และการดีบักใช้คำสั่งของ shell
Linux ต่างจาก Unix อย่างไร?
Unix คือตระกูลระบบปฏิบัติการที่เกิดขึ้นในช่วงทศวรรษ 1970 ส่วน Linux คือ kernel ที่เขียนขึ้นใหม่โดยอิสระ และนำแนวคิดกับอินเทอร์เฟซของ Unix มาใช้ (มาตรฐาน POSIX) คำสั่งและหลักการทำงานจึงคล้ายกันมาก
หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Linux: с нуля до уверенного администрирования”
- Linux: с нуля до уверенного администрирования
- Как устроена файловая система Linux: от корня до загрузки ядра