พื้นฐาน

Linux คืออะไร: kernel, distribution และระบบไฟล์อธิบายแบบเข้าใจง่าย

อัปเดต: · Skillaria.Top

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 แตกต่างกันหลักๆ ที่ตัวจัดการแพ็กเกจ นโยบายการอัปเดต และกลุ่มผู้ใช้เป้าหมาย

ตระกูลตัวอย่างแพ็กเกจพบได้ที่
DebianDebian, Ubuntu, Linux Mint.deb, aptเซิร์ฟเวอร์ คลาวด์ เครื่องทำงาน
Red HatRHEL, Fedora, Rocky Linux, AlmaLinux.rpm, dnfเซิร์ฟเวอร์ระดับองค์กร
AlpineAlpine LinuxapkDocker image ที่ต้องการขนาดเล็ก
ArchArch Linux, Manjaropacmanผู้ที่ชื่นชอบ ต้องการแพ็กเกจเวอร์ชันใหม่

ดูว่ากำลังใช้ 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
/bootkernel (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 บูตอย่างไร: จากเปิดเครื่องถึงหน้าล็อกอิน

การเข้าใจขั้นตอนการบูตช่วยให้แก้ปัญหาได้เมื่อเซิร์ฟเวอร์ "ไม่ขึ้น" หลังรีบูต โดยสรุปลำดับจะเป็นดังนี้

  1. Firmware (UEFI หรือ BIOS) ตรวจสอบฮาร์ดแวร์และค้นหา bootloader
  2. Bootloader GRUB แสดงเมนูและโหลด kernel จาก /boot พร้อมภาพ initramfs เข้าสู่หน่วยความจำ
  3. Kernel เริ่มต้นฮาร์ดแวร์ และใช้ initramfs เพื่อหาและเมานต์ระบบไฟล์รูท
  4. systemd เริ่มทำงานเป็นโปรเซส PID 1 และเปิดบริการต่างๆ ตามลำดับที่ถูกต้อง ได้แก่ เครือข่าย log SSH cron และบริการอื่นๆ
  5. หน้าล็อกอิน บนคอนโซลหรือผ่าน 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
  • การวินิจฉัย เมื่อบริการล่ม คำตอบอยู่ใน journalctl top ss df หากไม่รู้จักเครื่องมือเหล่านี้ก็ไม่สามารถแก้ไขเหตุการณ์ได้

ทักษะขั้นต่ำ ได้แก่ การเดินทางในระบบไฟล์ได้คล่อง เข้าใจสิทธิ์การเข้าถึง ติดตั้งแพ็กเกจ จัดการบริการด้วย 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: с нуля до уверенного администрирования”

ไปที่คอร์ส