สัมภาษณ์งาน

คำถาม Linux ในการสัมภาษณ์งาน: 24 ข้อพร้อมคำตอบ

อัปเดต: · Skillaria.Top

ในการสัมภาษณ์ Linux มักถามเรื่องโครงสร้างระบบไฟล์และ inode ลิงก์แข็งและลิงก์อ่อน สิทธิ์และ sudo โปรเซสและสัญญาณ การบูตระบบ และเครือข่าย เช่น วิธีตรวจพอร์ตที่เปิดอยู่ การแปลงชื่อโดเมนด้วย DNS และวิธีจัดการเมื่อเซิร์ฟเวอร์เข้าไม่ได้

Linux เป็นหัวข้อที่ถูกถามในการสัมภาษณ์งานตำแหน่ง DevOps วิศวกร วิศวกรความน่าเชื่อถือ (SRE) และ backend developer ผู้สัมภาษณ์แทบไม่คาดหวังให้จำแฟล็กคำสั่งได้ทั้งหมด สิ่งที่พวกเขาอยากรู้คือคุณเข้าใจว่าระบบทำงานอย่างไร และสามารถค้นหาสาเหตุของปัญหาได้หรือไม่ ด้านล่างรวบรวมคำถาม Linux ในการสัมภาษณ์ที่พบบ่อยที่สุด ตั้งแต่พื้นฐานไปจนถึงการวินิจฉัย พร้อมคำตอบและคำสั่งประกอบ

เคล็ดลับ: ขณะตอบ ให้บอกคำสั่งที่คุณจะใช้ตรวจสอบสิ่งที่คุณพูด การพูดว่า "ผมจะดูด้วย ss -tlnp" น่าเชื่อถือกว่าการพูดลอยๆ มาก

ระบบไฟล์

1. FHS คืออะไร และไดเรกทอรีหลักเก็บอะไรบ้าง?

FHS (Filesystem Hierarchy Standard) คือมาตรฐานการจัดวางไดเรกทอรี โครงสร้างทั้งหมดเริ่มจากราก / ไม่มีไดรฟ์แบบตัวอักษร ระบบไฟล์อื่นจะถูกเมานต์เข้าไปในไดเรกทอรีของโครงสร้างนี้

  • /etc — การตั้งค่าระบบและบริการ;
  • /var — ข้อมูลที่เปลี่ยนแปลงได้: log (/var/log) แคช คิว ฐานข้อมูล;
  • /home — ไดเรกทอรีส่วนตัวของผู้ใช้ /root — ของ root;
  • /usr — โปรแกรมและไลบรารี; /bin และ /sbin บน distribution สมัยใหม่มักเป็นลิงก์ไปยัง /usr/bin และ /usr/sbin;
  • /tmp — ไฟล์ชั่วคราว /boot — kernel และ bootloader;
  • /proc และ /sys — ระบบไฟล์เสมือนที่มีข้อมูลโปรเซสและ kernel /dev — ไฟล์อุปกรณ์

2. inode คืออะไร?

inode คือโครงสร้างของระบบไฟล์ที่เก็บ metadata ของไฟล์: ชนิด สิทธิ์ เจ้าของ ขนาด เวลา จำนวน hard link และตัวชี้ไปยังบล็อกข้อมูล ชื่อไฟล์ไม่ได้อยู่ใน inode แต่เก็บในไดเรกทอรีเป็นรายการ "ชื่อ → หมายเลข inode"

ดูหมายเลข inode ด้วย ls -i และรายละเอียดด้วย stat file จำนวน inode ของระบบไฟล์มีจำกัด และ df -i แสดงว่าใช้ไปเท่าไร สถานการณ์คลาสสิกคือ "ดิสก์ยังมีที่ว่างแต่สร้างไฟล์ไม่ได้" เพราะ inode หมด จากไฟล์เล็กจำนวนหลายล้านไฟล์

3. Hard link ต่างจาก symbolic link อย่างไร?

Hard link (ln file link) คือชื่ออีกชื่อหนึ่งของ inode เดียวกัน ทั้งสองชื่อมีสถานะเท่ากัน ข้อมูลจะถูกลบเมื่อจำนวน link เป็นศูนย์ ข้อจำกัด: ไม่สามารถลิงก์ไปยังไดเรกทอรีและข้ามระบบไฟล์ไม่ได้

Symbolic link (ln -s target link) คือไฟล์แยกที่มี inode ของตัวเอง ภายในเก็บพาธไปยังเป้าหมาย ชี้ไปยังไดเรกทอรีและข้ามระบบไฟล์ได้ แต่จะ "พัง" หากเป้าหมายถูกลบหรือย้าย

4. พื้นที่ดิสก์เต็มแต่ du แสดงน้อยกว่า df เพราะอะไร?

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

หาไฟล์เหล่านี้ได้ด้วย lsof +L1 หรือ lsof | grep deleted วิธีแก้คือรีสตาร์ตโปรเซส หรือตัดไฟล์ผ่าน descriptor: : > /proc/PID/fd/N ในอนาคตควรเคลียร์ log ด้วย truncate หรือ logrotate แทนการใช้ rm

5. Linux บูตผ่านขั้นตอนอะไรบ้าง?

Firmware (BIOS หรือ UEFI) เริ่มต้นฮาร์ดแวร์และส่งต่อให้ bootloader ซึ่งมักเป็น GRUB Bootloader อ่านการตั้งค่า โหลด kernel และ initramfs เข้าสู่หน่วยความจำ initramfs คือระบบไฟล์รูทชั่วคราวที่มีไดรเวอร์ที่จำเป็นสำหรับเข้าถึงรูทจริง

Kernel เริ่มต้นอุปกรณ์ เมานต์ระบบไฟล์รูท และรันโปรเซสของผู้ใช้ตัวแรกที่มี PID 1 ซึ่งบน distribution ส่วนใหญ่คือ systemd systemd เปิดบริการจนถึง target เริ่มต้น เช่น multi-user.target เวลาของแต่ละขั้นดูได้ด้วย systemd-analyze

6. คำสั่ง mount ทำอะไร และการเมานต์อัตโนมัติตอนบูตกำหนดไว้ที่ไหน?

mount เชื่อมระบบไฟล์จากอุปกรณ์เข้ากับไดเรกทอรี (จุดเมานต์): mount /dev/sdb1 /mnt/data ดูจุดเมานต์ปัจจุบันด้วย findmnt หรือ mount โดยไม่มีอาร์กิวเมนต์

การเมานต์ตอนบูตกำหนดใน /etc/fstab ควรระบุอุปกรณ์ด้วย UUID (ดูได้จาก blkid) แทนชื่อ /dev/sdb1 ซึ่งอาจเปลี่ยนได้ ก่อนรีบูตให้ตรวจการเปลี่ยนแปลงด้วย mount -a เพราะ fstab ที่ผิดพลาดอาจทำให้บูตไม่สำเร็จ

ผู้ใช้และสิทธิ์

7. สิทธิ์การเข้าถึงใน Linux ทำงานอย่างไร?

ทุกไฟล์มีเจ้าของ กลุ่ม และสิทธิ์สามชุดสำหรับเจ้าของ กลุ่ม และผู้อื่น แต่ละชุดประกอบด้วย r (อ่าน) w (เขียน) x (รัน) ในรูปตัวเลข r=4, w=2, x=1 ดังนั้น chmod 640 file ให้เจ้าของอ่านและเขียนได้ กลุ่มอ่านได้ ส่วนผู้อื่นไม่มีสิทธิ์

$ ls -l app.conf
-rw-r----- 1 deploy www-data 512 Oct 12 10:03 app.conf

เปลี่ยนเจ้าของด้วย chown user:group file ส่วนสิทธิ์ใช้ chmod

8. สิทธิ์ r, w, x บนไดเรกทอรีหมายความว่าอย่างไร?

สำหรับไดเรกทอรี ความหมายต่างออกไป: r — ดูรายชื่อได้ w — สร้าง ลบ และเปลี่ยนชื่อไฟล์ข้างในได้ x — เข้าไปในไดเรกทอรีและเข้าถึงไฟล์ด้วยชื่อได้

ผลที่ตามมาสำคัญคือ ผู้ที่มีสิทธิ์เขียนบนไดเรกทอรีสามารถลบไฟล์ที่ไม่ใช่ของตนได้ และหากไม่มี x บนไดเรกทอรี แม้จะมี r ก็ไม่ช่วยอะไร คุณจะเห็นชื่อแต่เปิดไฟล์ไม่ได้

9. SUID, SGID และ sticky bit คืออะไร?

SUID บนไฟล์ที่รันได้ทำให้โปรแกรมทำงานด้วยสิทธิ์ของเจ้าของไฟล์ ไม่ใช่ของผู้รัน ตัวอย่างคลาสสิกคือ /usr/bin/passwd ซึ่งเป็นของ root และแก้ไข /etc/shadow ได้ SGID บนไฟล์ทำแบบเดียวกันกับกลุ่ม ส่วนบนไดเรกทอรีทำให้ไฟล์ใหม่สืบทอดกลุ่มของไดเรกทอรี เหมาะกับโฟลเดอร์ที่ใช้ร่วมกัน

Sticky bit บนไดเรกทอรีอนุญาตให้ลบไฟล์ได้เฉพาะเจ้าของ แม้ไดเรกทอรีจะเขียนได้สำหรับทุกคน /tmp ทำงานแบบนี้: ls -ld /tmp จะแสดง drwxrwxrwt ค้นหาไฟล์ SUID ทั้งหมดเพื่อตรวจสอบด้วย find / -perm -4000 -type f 2>/dev/null

10. umask คืออะไร?

umask คือมาสก์ที่ตัดสิทธิ์ของไฟล์และไดเรกทอรีใหม่ สิทธิ์พื้นฐานคือ 666 สำหรับไฟล์และ 777 สำหรับไดเรกทอรี umask จะลบบิตออก เมื่อ umask เป็น 022 ไฟล์ใหม่จะมีสิทธิ์ 644 และไดเรกทอรีได้ 755 ดูค่าปัจจุบันด้วยคำสั่ง umask

11. ข้อมูลผู้ใช้และรหัสผ่านถูกเก็บไว้ที่ไหน?

บัญชีอยู่ใน /etc/passwd: ชื่อ UID GID ของกลุ่มหลัก ไดเรกทอรีส่วนตัว และ shell แฮชของรหัสผ่านแยกไปไว้ใน /etc/shadow ซึ่งมีเพียง root เท่านั้นที่อ่านได้ ทำให้ผู้ใช้ทั่วไปไม่สามารถนำแฮชไปเดารหัสได้ กลุ่มถูกอธิบายใน /etc/group

ดูข้อมูลผู้ใช้ได้สะดวกด้วย id user และ getent passwd user ซึ่งอย่างหลังรวมแหล่งข้อมูลภายนอก เช่น LDAP ด้วย

12. sudo ทำงานอย่างไร และดีกว่าการล็อกอินด้วย root อย่างไร?

sudo รันคำสั่งในฐานะผู้ใช้อื่น (ค่าเริ่มต้นคือ root) ตามกฎใน /etc/sudoers และไฟล์ใน /etc/sudoers.d/ ผู้ใช้ป้อนรหัสผ่านของตนเอง ไม่ใช่ของ root และทุกการกระทำถูกบันทึกไว้พร้อมชื่อผู้ทำ

กฎอาจอนุญาตทุกอย่าง (alena ALL=(ALL:ALL) ALL) หรือเฉพาะคำสั่งบางคำสั่ง การแก้ไข sudoers ต้องใช้ visudo ซึ่งตรวจไวยากรณ์ก่อนบันทึก และความผิดพลาดจะไม่ทำให้คุณเสีย sudo บน Ubuntu สิทธิ์ผู้ดูแลให้ผ่านกลุ่ม sudo ส่วนบน distribution ตระกูล RHEL ใช้กลุ่ม wheel

13. จะเพิ่มผู้ใช้เข้ากลุ่มอย่างไร และทำไมการเปลี่ยนแปลงยังไม่มีผล?

คำสั่ง usermod -aG docker alena เพิ่มผู้ใช้เข้ากลุ่มเสริม แฟล็ก -a จำเป็น หากไม่มี -G จะแทนที่รายการกลุ่มทั้งหมด

การเปลี่ยนแปลงมีผลเมื่อเข้าสู่ระบบใหม่ เพราะเซสชันปัจจุบันยังเก็บรายการกลุ่มเดิม สามารถล็อกอินใหม่หรือเปิด shell ที่มีกลุ่มใหม่ด้วย newgrp docker ตรวจสอบด้วย id

โปรเซส

14. โปรเซสและ PID คืออะไร และดูโปรเซสอย่างไร?

โปรเซสคือโปรแกรมที่กำลังทำงาน มีพื้นที่แอดเดรส ไฟล์ที่เปิดอยู่ และตัวระบุ PID ของตัวเอง แต่ละโปรเซสมีโปรเซสแม่ (PPID) และบรรพบุรุษร่วมคือโปรเซสที่มี PID 1 ดูรายการโปรเซสด้วย ps aux หรือ ps -ef ดูแบบต้นไม้ด้วย pstree หรือ ps -ef --forest และดูแบบเรียลไทม์ด้วย top หรือ htop

15. SIGTERM ต่างจาก SIGKILL อย่างไร?

kill PID ส่ง SIGTERM (15) ตามค่าเริ่มต้น ซึ่งเป็นคำขอให้จบการทำงานอย่างสุภาพ โปรเซสสามารถดักสัญญาณนี้ ปิดการเชื่อมต่อ บันทึกข้อมูล แล้วออกได้ ส่วน SIGKILL (9, kill -9) ดักไม่ได้ kernel จบโปรเซสทันทีโดยไม่มีการเคลียร์ข้อมูล

ลำดับที่ถูกต้องคือส่ง SIGTERM ก่อน และใช้ SIGKILL เฉพาะเมื่อโปรเซสไม่ตอบสนอง สัญญาณอีกตัวที่พบบ่อยคือ SIGHUP ซึ่งดีมอนหลายตัวใช้โหลดการตั้งค่าใหม่

16. Zombie process คืออะไร?

Zombie คือโปรเซสที่จบการทำงานแล้ว แต่โปรเซสแม่ยังไม่ได้อ่านรหัสผลลัพธ์ด้วย wait() มันแทบไม่ใช้ทรัพยากร แต่ยังมีรายการอยู่ในตารางโปรเซส ใน ps สถานะของมันคือ Z

ฆ่า zombie ไม่ได้เพราะมันตายไปแล้ว ต้องให้โปรเซสแม่รับไปจัดการ คือแก้โปรแกรมแม่ หรือจบโปรเซสแม่ ซึ่งจะทำให้ zombie ถูกส่งต่อให้ PID 1 และ PID 1 จะเก็บกวาดเอง

17. Load average บอกอะไร?

ตัวเลขสามตัวใน uptime และ top คือจำนวนโปรเซสเฉลี่ยที่รอทำงานในช่วง 1, 5 และ 15 นาที บน Linux รวมถึงโปรเซสที่รอในสถานะที่ไม่สามารถขัดจังหวะได้ (สถานะ D) ซึ่งมักรอดิสก์

ค่านี้เทียบกับจำนวนคอร์ (nproc): load 4 บน 4 คอร์คือเต็มกำลัง บน 16 คอร์คือหนึ่งในสี่ ถ้า load สูงแต่ CPU ว่าง มักบ่งชี้ปัญหา I/O ตรวจด้วย iostat หรือคอลัมน์ wa ใน top

เครือข่าย

18. ดูที่อยู่ IP เส้นทาง และพอร์ตที่เปิดอยู่อย่างไร?

ที่อยู่ของอินเทอร์เฟซดูด้วย ip a ตารางการกำหนดเส้นทางดูด้วย ip r คำสั่งเก่า ifconfig และ netstat จากแพ็กเกจ net-tools ไม่ได้ติดตั้งมาบน distribution หลายตัว

พอร์ตที่กำลังรับการเชื่อมต่อและโปรเซสที่เปิดพอร์ตดูด้วย ss -tlnp: t — TCP, l — เฉพาะที่กำลังรับฟัง, n — ไม่แปลงเป็นชื่อ, p — แสดงโปรเซส สำหรับ UDP ใช้ ss -ulnp

$ sudo ss -tlnp
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*     users:(("nginx",pid=812,fd=6))
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*     users:(("sshd",pid=640,fd=3))

19. บริการรับฟังที่ 127.0.0.1:8080 เชื่อมต่อจากภายนอกได้หรือไม่?

ไม่ได้ ที่อยู่ 127.0.0.1 คืออินเทอร์เฟซ loopback ที่เข้าถึงได้จากเครื่องนั้นเท่านั้น หากต้องการรับการเชื่อมต่อจากภายนอก บริการต้องรับฟังที่ที่อยู่ของอินเทอร์เฟซภายนอก หรือ 0.0.0.0 (ที่อยู่ IPv4 ทั้งหมด) นี่เป็นสาเหตุที่พบบ่อยของอาการ "พอร์ตเปิดอยู่แต่เข้าจากข้างนอกไม่ได้" ควบคู่กับไฟร์วอลล์

20. Linux แปลงชื่อโฮสต์เป็นที่อยู่ IP อย่างไร?

ลำดับของแหล่งข้อมูลกำหนดโดยบรรทัด hosts: ใน /etc/nsswitch.conf ซึ่งปกติคือ /etc/hosts ก่อน แล้วจึงเป็น DNS ที่อยู่ของเซิร์ฟเวอร์ DNS มาจาก /etc/resolv.conf ในระบบที่ใช้ systemd-resolved ไฟล์นั้นระบุที่อยู่ท้องถิ่น 127.0.0.53 และเซิร์ฟเวอร์จริงดูได้ด้วย resolvectl status

ตรวจสอบด้วย dig example.com หรือ dig @1.1.1.1 example.com (ส่งคำขอไปยังเซิร์ฟเวอร์ที่ระบุ) ข้อควรระวัง: dig และ nslookup ถาม DNS โดยตรงและไม่อ่าน /etc/hosts ส่วน getent hosts example.com ผ่านเส้นทางเดียวกับแอปพลิเคชัน

21. TCP ต่างจาก UDP อย่างไร?

TCP สร้างการเชื่อมต่อ (จับมือสามขั้น SYN, SYN-ACK, ACK) รับประกันการส่งและลำดับข้อมูล และส่งแพ็กเก็ตที่สูญหายซ้ำ HTTP, SSH และฐานข้อมูลส่วนใหญ่ทำงานบน TCP ส่วน UDP ส่ง datagram โดยไม่มีการเชื่อมต่อและไม่มีการรับประกัน แต่มีความหน่วงต่ำกว่า จึงใช้กับคำขอ DNS การโทรวิดีโอ และเกม

22. เว็บไซต์เปิดไม่ได้ คุณจะหาสาเหตุอย่างไร?

ไล่ตามชั้น ตั้งแต่ชื่อไปจนถึงแอปพลิเคชัน:

  1. ชื่อแปลงเป็นที่อยู่ได้หรือไม่: dig site.example และที่อยู่ตรงกับที่คาดไว้หรือไม่
  2. โฮสต์เข้าถึงได้หรือไม่: ping (อาจถูกบล็อก) traceroute หรือ mtr
  3. พอร์ตเปิดอยู่หรือไม่: nc -zv host 443 หรือ curl -v https://site.example
  4. บนเซิร์ฟเวอร์: บริการทำงานอยู่หรือไม่ (systemctl status nginx) พอร์ตรับฟังอยู่หรือไม่ (ss -tlnp) ไฟร์วอลล์บล็อกหรือไม่ (sudo nft list ruleset, sudo ufw status)
  5. log ของแอปพลิเคชันและ journalctl -u ของบริการ

ผู้สัมภาษณ์สนใจลำดับการคิดอย่างเป็นระบบมากกว่าชุดเครื่องมือเฉพาะ

23. สถานะ TIME_WAIT คืออะไร?

หลังจากปิดการเชื่อมต่อ TCP ฝ่ายที่ปิดก่อนจะเก็บซ็อกเก็ตไว้ในสถานะ TIME_WAIT ระยะหนึ่ง เพื่อให้แพ็กเก็ตที่มาช้าของการเชื่อมต่อเก่าไม่ไปตกในการเชื่อมต่อใหม่ที่ใช้ที่อยู่และพอร์ตเดียวกัน จำนวน TIME_WAIT ที่มากเป็นเรื่องปกติของเซิร์ฟเวอร์หรือ client ที่มีโหลดสูงและเชื่อมต่อสั้นๆ จำนวนนี้นับได้ด้วย ss -tan state time-wait | wc -l

24. /etc/hosts ต่างจาก DNS อย่างไร และเมื่อไรควรใช้ /etc/hosts?

/etc/hosts คือตารางคงที่ "ที่อยู่ — ชื่อ" บนเครื่องใดเครื่องหนึ่ง มันถูกตรวจก่อน DNS (ด้วยการตั้งค่า nsswitch มาตรฐาน) และสะดวกสำหรับการทดสอบ เช่น ชี้โดเมนไปยังเซิร์ฟเวอร์ใหม่ก่อนเปลี่ยนระเบียน DNS DNS เป็นระบบกระจายที่ client ทุกเครื่องเห็นคำตอบเดียวกัน ข้อผิดพลาดใน /etc/hosts เป็นสาเหตุที่พบบ่อยของเหตุการณ์ "เว็บเปิดได้บนเครื่องฉันแต่คนอื่นเปิดไม่ได้"

สรุป

คำถาม Linux ในการสัมภาษณ์ทดสอบสามเรื่อง คือคุณเข้าใจโมเดลของระบบหรือไม่ (inode สิทธิ์ โปรเซส การบูต) รู้จักเครื่องมือวินิจฉัยหรือไม่ (ss, dig, journalctl, lsof) และหาสาเหตุทีละขั้นตอนได้หรือไม่ ตอบพร้อมคำสั่งและตัวอย่างจากประสบการณ์จริง ระบบไฟล์ สิทธิ์ และเครือข่ายถูกสอนแบบลงมือทำอย่างละเอียดในหลักสูตร Linux

คำถามที่พบบ่อย

ตำแหน่ง DevOps จูเนียร์มักถูกถามเรื่อง Linux อะไรบ้าง?

มักเป็นพื้นฐาน ได้แก่ การนำทางและสิทธิ์ โปรเซสและ systemctl การอ่าน log เครื่องมือเครือข่ายอย่าง ip, ss, dig และ curl และพื้นฐาน bash script บ่อยครั้งจะมีโจทย์ปฏิบัติ เช่น "หาว่าอะไรกินพื้นที่ดิสก์"

ต้องจำแฟล็กของคำสั่งทั้งหมดไหม?

ไม่จำเป็น สามารถตอบว่าจะตรวจแฟล็กใน man ได้ สิ่งที่สำคัญกว่าคือเข้าใจว่าเครื่องมือใดแก้ปัญหาใด และผลลัพธ์ที่แสดงหมายความว่าอย่างไร

ควรเรียน distribution ไหนก่อนไปสัมภาษณ์?

ตัวที่นิยมใช้กับเซิร์ฟเวอร์ก็ได้ เช่น Ubuntu หรือ Debian หรือ Rocky Linux ซึ่งอยู่ในตระกูล RHEL พื้นฐานใช้ร่วมกันได้ ส่วนที่ต่างกันหลักๆ คือตัวจัดการแพ็กเกจและชื่อของบริการบางตัว

จะเตรียมตัวสำหรับส่วนปฏิบัติของการสัมภาษณ์ Linux อย่างไร?

ตั้งเครื่องเสมือนและแก้โจทย์จริงด้วยตัวเอง เช่น ตั้งเว็บเซิร์ฟเวอร์เป็นบริการ systemd ล็อกอินด้วย SSH key ตั้งไฟร์วอลล์ และหาโปรเซสจากพอร์ต การอธิบายขั้นตอนของตัวเองออกเสียงก็เป็นส่วนหนึ่งของการเตรียมตัว

เรียนหัวข้อนี้ผ่านวิดีโอ

หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Linux: с нуля до уверенного администрирования”

ไปที่คอร์ส