เรียน Linux จากศูนย์: แผนการเรียนตั้งแต่คำสั่งแรกจนถึงการดูแลเซิร์ฟเวอร์
การเรียน Linux จากศูนย์ได้ผลดีที่สุดเมื่อเรียนเป็นชั้นๆ เริ่มจาก terminal และระบบไฟล์ ต่อด้วยผู้ใช้และสิทธิ์ Bash script แพ็กเกจ โปรเซสและ systemd แล้วจึงถึงดิสก์ log เครือข่าย SSH และความปลอดภัยของเซิร์ฟเวอร์ ในแต่ละขั้นควรฝึกบนเครื่องเสมือนหรือ VPS ราคาถูก และเป้าหมายสุดท้ายคือเซิร์ฟเวอร์ที่ตั้งค่าและป้องกันเองพร้อมบริการที่ทำงานอยู่
การเรียน Linux จากศูนย์ไม่ยากอย่างที่คิด หากเรียนตามลำดับที่ถูกต้องและฝึกไปพร้อมกัน ข้อผิดพลาดใหญ่ที่สุดของมือใหม่คือการอ่านเรื่องคำสั่งโดยไม่ได้พิมพ์ตาม หรือกระโดดไปหา Docker และ Kubernetes โดยยังไม่เข้าใจว่าโปรเซสและสิทธิ์การเข้าถึงคืออะไร ด้านล่างเป็นแผนเก้าขั้นตอน ว่าควรเรียนอะไร ฝึกอะไร และรู้ได้อย่างไรว่าผ่านขั้นนั้นแล้ว
ระยะเวลาโดยประมาณคือสองถึงสี่เดือน หากเรียนวันละหนึ่งชั่วโมง แต่ความเร็วของแต่ละคนต่างกัน สิ่งที่สำคัญกว่าความเร็วคือหลังจากจบแต่ละขั้น คุณทำอะไรบางอย่างด้วยมือตัวเองได้
ขั้นที่ 0. เตรียมสภาพแวดล้อม
เรียน Linux บน Linux มีตัวเลือกให้เลือกตั้งแต่ง่ายไปจนถึงใกล้เคียงของจริง:
- WSL2 บน Windows ได้ terminal Ubuntu ภายในไม่กี่นาที เหมาะกับคำสั่งและ script แต่ systemd และเครือข่ายไม่ทำงานเหมือนเซิร์ฟเวอร์
- เครื่องเสมือน (VirtualBox, VMware, UTM บน Mac) ที่ติดตั้ง Ubuntu Server หรือ Debian ทำลายได้โดยไม่มีผลเสีย และย้อนกลับด้วย snapshot ได้
- VPS ราคาถูก จากผู้ให้บริการคลาวด์ นี่คือเซิร์ฟเวอร์จริงที่มี IP สาธารณะ เป็นสนามฝึกที่ดีที่สุดสำหรับขั้นเรื่องเครือข่ายและความปลอดภัย
สำหรับเริ่มต้น แนะนำ Ubuntu Server หรือ Debian เพราะมีเอกสารและคำตอบให้ค้นหามากที่สุด ไม่จำเป็นต้องใช้ส่วนติดต่อกราฟิก เซิร์ฟเวอร์ถูกดูแลผ่าน terminal จึงควรคุ้นเคยตั้งแต่วันแรก
ขั้นที่ 1. Terminal และระบบไฟล์
เป้าหมายคือเดินทางในระบบและจัดการไฟล์ได้อย่างมั่นใจโดยไม่ใช้เมาส์
- การนำทาง:
pwd,ls -la,cd, พาธแบบสัมบูรณ์และสัมพัทธ์,~,.และ.. - ไฟล์:
cp,mv,rm,mkdir -p,touch, ดูด้วยcat,less,head,tail -f - การค้นหา:
find,which,locate - ความช่วยเหลือ:
man,--helpการอ่าน man เป็นทักษะที่ใช้ได้ตลอดชีวิต - โครงสร้างไดเรกทอรี: อะไรอยู่ใน
/etc,/var/log,/home,/usr,/proc,/devการเมานต์และ inode คืออะไร - โปรแกรมแก้ไขข้อความใน terminal: ใช้
nanoก่อน แล้วเรียนคำสั่งพื้นฐานของvimซึ่งแทบทุกเซิร์ฟเวอร์มีให้ใช้
ฝึก: หาไฟล์ .conf ทั้งหมดใน /etc ที่ถูกแก้ไขในสัปดาห์ที่ผ่านมา (find /etc -name "*.conf" -mtime -7) เปิด /etc/os-release และดูเวอร์ชันของระบบ ดูว่าระบบเขียนอะไรไว้ใน /var/log
ขั้นที่ 2. ผู้ใช้ กลุ่ม และสิทธิ์
สิทธิ์คือรากฐานด้านความปลอดภัยของ Linux และเป็นต้นตอของข้อผิดพลาด "Permission denied" ส่วนใหญ่
- การอ่านผลลัพธ์ของ
ls -l: ชนิด สิทธิ์ เจ้าของ กลุ่ม chmodทั้งแบบสัญลักษณ์และตัวเลขchownumask- บิตพิเศษ: SUID, SGID, sticky bit และเหตุผลที่
/tmpให้ทุกคนเขียนได้แต่ลบไฟล์ของคนอื่นไม่ได้ - ผู้ใช้และกลุ่ม:
useradd,usermod -aG,passwdไฟล์/etc/passwd,/etc/shadow,/etc/group sudoกฎใน sudoers และการแก้ไขด้วยvisudo
ฝึก: สร้างผู้ใช้สองคนและโฟลเดอร์โปรเจกต์ที่ใช้ร่วมกัน ซึ่งทั้งคู่สร้างไฟล์ได้ ส่วนคนอื่นมองไม่เห็นอะไรเลย คำใบ้: ใช้กลุ่ม chmod 2770 และ SGID เพื่อให้ไฟล์สืบทอดกลุ่ม
ขั้นที่ 3. Bash และยูทิลิตี้ข้อความ
การดูแลระบบส่วนใหญ่คือการประมวลผลข้อความ ทั้ง log การตั้งค่า และผลลัพธ์ของคำสั่ง ในขั้นนี้ terminal เปลี่ยนจากชุดคำสั่งเป็นเครื่องมือที่ใช้งานได้จริง
- การเปลี่ยนทิศทางและไปป์ไลน์:
>,>>,2>&1,|,xargs - ตัวกรอง:
grep(พร้อมนิพจน์ทั่วไป),sort,uniq -c,wc,cut,sed,awk - JSON และ HTTP จากบรรทัดคำสั่ง:
curlและjq - Script: shebang ตัวแปร เครื่องหมายคำพูด เงื่อนไข
ifและ[[ ]]ลูป ฟังก์ชัน รหัสออกset -euo pipefail
ฝึก: ด้วยคำสั่งบรรทัดเดียว นับที่อยู่ IP สิบอันดับแรกที่ส่งคำขอมายัง web server มากที่สุดในไฟล์ log:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
จากนั้นเขียน script สำรองไดเรกทอรีเป็นไฟล์บีบอัดที่มีวันที่ในชื่อ ลบไฟล์ที่เก่ากว่าเจ็ดวัน และคืนค่าที่ไม่ใช่ศูนย์เมื่อเกิดข้อผิดพลาด
ขั้นที่ 4. แพ็กเกจ สภาพแวดล้อม และการตั้งเวลา
- ตัวจัดการแพ็กเกจ:
apt update,apt install,apt remove,apt search,dpkg -lบนตระกูล RHEL ใช้dnfเข้าใจว่า repository คืออะไรและคีย์ลายเซ็นมีไว้ทำไม - ตัวแปรสภาพแวดล้อม:
env,export,PATHไฟล์~/.bashrc,~/.profile,/etc/environmentและแต่ละไฟล์ถูกอ่านเมื่อใด - ตารางเวลา:
crontab -eไวยากรณ์ห้าฟิลด์ และเหตุผลที่คำสั่งที่รันได้ใน terminal "ไม่ทำงาน" ใน cron (สภาพแวดล้อมและPATHต่างกัน)
ฝึก: ติดตั้ง nginx จาก repository เพิ่มไดเรกทอรีที่เก็บ script ของคุณไปยัง PATH และตั้งให้ script สำรองข้อมูลจากขั้นที่ 3 รันทุกคืนผ่าน cron พร้อมเขียนผลลัพธ์ลงไฟล์ log
ขั้นที่ 5. โปรเซสและ systemd
ในขั้นนี้คุณจะเริ่มเข้าใจว่าเกิดอะไรขึ้นจริงในระบบ
- โปรเซส:
ps aux,top/htop, PID และ PPID สถานะ ลำดับความสำคัญ (nice) สัญญาณและkill - โหลด: load average หน่วยความจำและ swap (
free -h) ความหมายของโปรเซสสถานะ D - การดีบัก:
lsofว่าโปรเซสเปิดไฟล์และพอร์ตใดบ้างstraceว่าโปรเซสเรียก system call อะไรและค้างที่จุดใด - systemd: unit,
systemctl status/start/enable, unit file ของตัวเองที่มีRestart=on-failure, timer แทน cron - Log:
journalctl -u,-f,-b,-p errการหมุนเวียน log, rsyslog สถิติประสิทธิภาพผ่าน sysstat (sar,iostat)
ฝึก: นำแอปพลิเคชันเล็กๆ (อย่างน้อยคือ python3 -m http.server) มาตั้งเป็นบริการ systemd ภายใต้ผู้ใช้แยกต่างหาก ฆ่าโปรเซสด้วย kill -9 แล้วตรวจว่า systemd เปิดมันขึ้นมาใหม่ และหาบันทึกการรีสตาร์ตใน journal
ขั้นที่ 6. ดิสก์ LVM และ RAID
- อุปกรณ์และพาร์ทิชัน:
lsblk,blkid,fdiskหรือpartedระบบไฟล์ ext4 และ XFS,mkfs - การเมานต์:
mount,/etc/fstabด้วย UUID ตรวจด้วยmount -a - พื้นที่:
df -h,df -i,du -shและการหาสิ่งที่กินพื้นที่ดิสก์ - LVM: physical volume, volume group, logical volume และการขยายพาร์ทิชันโดยไม่ต้องหยุดระบบ
- RAID ซอฟต์แวร์ด้วย
mdadmเข้าใจระดับ 0, 1, 5, 10 และว่า RAID ไม่ใช่การสำรองข้อมูล
ฝึก: เพิ่มดิสก์สองตัวให้เครื่องเสมือน สร้าง LVM บนดิสก์เหล่านั้น สร้าง volume เมานต์ผ่าน fstab แล้วขยายด้วย lvextend -r
ขั้นที่ 7. เครือข่าย
- โมเดล TCP/IP ในระดับที่เพียงพอสำหรับการวินิจฉัย: IP, subnet mask, gateway, พอร์ต, TCP และ UDP
- คำสั่ง:
ip a,ip r,ss -tlnp,ping,traceroute/mtr,curl -v,nc - DNS: การแปลงชื่อทำงานอย่างไร
/etc/hosts,/etc/resolv.conf,dig,resolvectl - การตั้งค่าเครือข่ายในดิสโทรของคุณ (netplan บน Ubuntu, NetworkManager บนอื่นๆ)
- การดักจับแพ็กเก็ตด้วย
tcpdumpเมื่อวิธีอื่นไม่ได้ผล
ฝึก: หาว่าโปรเซสใดรับฟังบนพอร์ตที่เปิดอยู่ทุกพอร์ตของเซิร์ฟเวอร์ วิเคราะห์ว่าทำไมบริการที่รับฟังที่ 127.0.0.1 เข้าจากภายนอกไม่ได้ แล้วแก้ไข
ขั้นที่ 8. การทำงานระยะไกล: SSH และการส่งไฟล์
- SSH: กุญแจ (
ssh-keygen -t ed25519,ssh-copy-id) ไฟล์~/.ssh/configssh-agentการส่งต่อพอร์ต (ssh -L) และ bastion ผ่านProxyJump - การคัดลอก:
scpและrsync -avz --deleteและเหตุผลที่ rsync เหมาะกับการซิงก์มากกว่า - ระบบไฟล์เครือข่าย: NFS ระหว่างเซิร์ฟเวอร์ Linux และ SMB (Samba) สำหรับแชร์ไฟล์กับ Windows
ฝึก: ตั้งค่า VPS ให้ล็อกอินได้ด้วยกุญแจเท่านั้น กำหนดกุญแจใน ~/.ssh/config ด้วยชื่อสั้นๆ และซิงก์ไดเรกทอรีหนึ่งขึ้นเซิร์ฟเวอร์ทุกวันด้วย rsync
ขั้นที่ 9. ความปลอดภัยของเซิร์ฟเวอร์
- ไฟร์วอลล์: หลักการ "ปฏิเสธทุกอย่างที่ไม่ได้อนุญาต"
ufwสำหรับกรณีง่าย และnftablesเพื่อเข้าใจสิ่งที่เกิดขึ้นเบื้องหลัง fail2ban: แบนไอพีหลังล็อกอินล้มเหลวหลายครั้ง ตรวจด้วยfail2ban-client status sshd- การตั้งค่า sshd: ห้ามล็อกอินด้วยรหัสผ่านและด้วย root
- อัปเดตความปลอดภัยและการติดตั้งอัตโนมัติ (unattended-upgrades บน Debian และ Ubuntu)
- GPG: ตรวจลายเซ็นของแพ็กเกจและไฟล์ เข้ารหัสไฟล์สำรอง
ฝึก: เปิดเฉพาะพอร์ต 22, 80 และ 443 ในไฟร์วอลล์ เปิด fail2ban และหลังจากหนึ่งวันดูสถานะว่ามีที่อยู่ใดถูกบล็อกไปแล้วบ้าง
โปรเจกต์สุดท้าย: สร้างเซิร์ฟเวอร์ให้ครบ
วิธีตรวจสอบที่ดีที่สุดว่าคุณเรียน Linux จริงหรือไม่ คือสร้างเซิร์ฟเวอร์จากศูนย์โดยไม่มีคำใบ้:
- VPS ใหม่ มีผู้ใช้ของตัวเองพร้อม sudo ล็อกอินด้วย SSH key และปิดรหัสผ่านและ root แล้ว
- ไฟร์วอลล์และ fail2ban รวมทั้งการอัปเดตความปลอดภัยอัตโนมัติ
- เว็บเซิร์ฟเวอร์และแอปพลิเคชันเป็นบริการ systemd พร้อมการรีสตาร์ตอัตโนมัติ
- ดิสก์แยกหรือ volume สำหรับข้อมูล เมานต์ผ่าน fstab
- การสำรองข้อมูลตามกำหนดเวลา (cron หรือ timer ของ systemd) ไปยังเครื่องอื่นด้วย rsync พร้อม log และการทดสอบการกู้คืน
- คู่มือสั้นๆ ว่าจะตั้งค่าทั้งหมดใหม่ได้อย่างไร
หากคุณทำรายการนี้ได้ทั้งหมดและอธิบายทุกขั้นได้ คุณก็มีพื้นฐานสำหรับการทำงานเป็นผู้ดูแลระบบหรือวิศวกร DevOps ขั้นต่อไปตามธรรมชาติคือคอนเทนเนอร์ การจัดการการตั้งค่าอัตโนมัติ และการมอนิเตอร์
เรียนให้ได้ผลมากขึ้น
- พิมพ์คำสั่งด้วยตัวเอง การคัดลอกจากบทความไม่ช่วยให้จำ การพิมพ์และทำผิดต่างหากที่ทำให้จำได้
- ทำพัง แล้วซ่อม ลองทำ fstab หรือสิทธิ์ของ
~/.sshเสียในเครื่องเสมือนแล้วกู้ระบบคืน ประสบการณ์แบบนี้มีค่ามากในการสัมภาษณ์ - จดบันทึก สมุดบันทึกคำสั่งที่มีตัวอย่างของคุณเองมีประโยชน์กว่าตารางของคนอื่นเสมอ
- อ่าน log เกือบทุกปัญหาใน Linux ถูกอธิบายไว้ใน log ให้เคยชินกับการดูที่นั่นเป็นอันดับแรก
สรุป
คำตอบของการเรียน Linux จากศูนย์คือก้าวไปทีละชั้น: terminal และไฟล์ สิทธิ์ Bash แพ็กเกจ โปรเซสและ systemd ดิสก์ เครือข่าย SSH และความปลอดภัย และในทุกขั้นแก้โจทย์ปฏิบัติบนสภาพแวดล้อมของคุณเอง เป้าหมายสุดท้ายคือตั้งค่าและป้องกันเซิร์ฟเวอร์ด้วยตัวเองพร้อมบริการที่ทำงานอยู่ ตามเส้นทางนี้ตั้งแต่บทนำจนถึงโปรเจกต์สุดท้าย คือหลักสูตร Linux บนแพลตฟอร์มนี้
คำถามที่พบบ่อย
ต้องใช้เวลานานเท่าไรในการเรียน Linux จากศูนย์?
หากเรียนวันละหนึ่งชั่วโมง คนส่วนใหญ่จะมีพื้นฐานสำหรับทำงานกับเซิร์ฟเวอร์ภายในไม่กี่เดือน ความมั่นใจมาจากการฝึกกับงานจริง ดังนั้นความสม่ำเสมอสำคัญกว่าจำนวนชั่วโมงรวม
ต้องรู้การเขียนโปรแกรมก่อนเรียน Linux ไหม?
ไม่จำเป็น เริ่มได้โดยไม่ต้องรู้ แต่เมื่อถึงขั้น Bash script คุณก็เริ่มเขียนโปรแกรมจริงๆ แล้ว ทักษะนั้นจะใช้ประโยชน์ได้ในงานอัตโนมัติ
เรียน Linux บน Windows ได้ไหม?
ได้ ผ่าน WSL2 หรือเครื่องเสมือน สำหรับหัวข้อ systemd ดิสก์ และเครือข่าย ควรใช้เครื่องเสมือนเต็มรูปแบบหรือ VPS
ควรติดตั้ง Linux เป็นระบบหลักบนคอมพิวเตอร์ไหม?
เป็นประโยชน์ แต่ไม่จำเป็น สำหรับงานดูแลระบบ สิ่งสำคัญกว่าคือการทำงานกับ Linux บนเซิร์ฟเวอร์ผ่าน terminal มากกว่าการใช้เดสก์ท็อปแบบกราฟิก
มือใหม่ควรเลือก distribution ไหน?
Ubuntu Server หรือ Debian เพราะมีเอกสารมาก และทักษะนำไปใช้กับ distribution อื่นได้ง่าย ความต่างหลักของระบบตระกูล RHEL คือตัวจัดการแพ็กเกจ dnf
หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Linux: с нуля до уверенного администрирования”
- Linux: с нуля до уверенного администрирования
- Финал: собираем защищённый и автоматизированный сервер целиком