บทความนี้จะพาทุกคนไปรู้จักกับ tmux เครื่องมือสามัญประจำบ้านสำหรับนักพัฒนา คอนฟิกเซิร์ฟเวอร์ หรือใครก็ตามที่ต้องทำงานบน Terminal บ่อย ๆ
ลองจินตนาการว่าคุณกำลังรันคำสั่งสำคัญบนเซิร์ฟเวอร์ผ่าน SSH แล้วจู่ ๆ อินเทอร์เน็ตก็หลุด… งานที่ทำค้างไว้พังทลายทันที ปัญหานี้จะหมดไปถ้าคุณใช้ tmux ครับ
Tmux คืออะไร?
Tmux (Terminal Multiplexing) คือเครื่องมือที่ช่วยให้เราสามารถแบ่งหน้าจอ Terminal ออกเป็นหลาย ๆ หน้าต่าง (Windows) หรือหลายช่อง (Panes) ได้ในหน้าจอเดียว และความสามารถที่เจ๋งที่สุดคือ “Session Detachment” ซึ่งหมายความว่าเราสามารถปิดหน้าจอ Terminal หรือตัดการเชื่อมต่อ SSH ไปได้ โดยที่โปรแกรมที่รันอยู่ข้างในยังคงทำงานต่อไปอย่างปลอดภัย
ขั้นตอนการติดตั้ง Tmux
เราสามารถติดตั้ง tmux ได้ง่าย ๆ ผ่าน Package Manager ของแต่ละระบบปฏิบัติการดังนี้ครับ
สำหรับ Linux (Ubuntu / Debian)sudo apt update
sudo apt install tmux
สำหรับ Linux (CentOS / RHEL / Fedora)sudo dnf install tmux
หรือสำหรับเวอร์ชันเก่าsudo yum install tmux
สำหรับ macOS
แนะนำให้ติดตั้งผ่าน Homebrew ครับbrew install tmux
แนวคิดพื้นฐานของ Tmux (The Hierarchy)
ก่อนจะไปดูคำสั่ง เรามาเข้าใจโครงสร้างของ tmux กันก่อน ซึ่งแบ่งออกเป็น 3 ระดับ
- Session: คือออบเจกต์ใหญ่สุด (เช่น 1 โปรเจกต์ = 1 Session) ข้างในจะมีกี่หน้าต่างก็ได้
- Window: คือหน้าจอเต็ม ๆ 1 หน้าจอ (เหมือน Tab บนเว็บเบราว์เซอร์)
- Pane: คือการซอยย่อยหน้าจอ Window ออกเป็นช่องเล็ก ๆ (ซ้าย ขวา บน ล่าง)
เริ่มต้นใช้งานและคำสั่งที่ต้องรู้
ใน tmux จะมีปุ่มมหัศจรรย์ปุ่มหนึ่งที่เรียกว่า “Prefix” ซึ่งค่าเริ่มต้นคือ Ctrl + b ทุกครั้งที่เราจะสั่งการ tmux เราจะต้องกดปุ่ม Prefix นี้ก่อน แล้วค่อยตามด้วยปุ่มคำสั่งครับ (เช่น กด Ctrl + b แล้วปล่อย จากนั้นกด c)
การจัดการ Session (ภายนอก tmux)
| คำสั่ง | คำอธิบาย |
tmux | เปิดใช้งาน tmux (สร้าง Session ใหม่แบบไม่มีชื่อ) |
tmux new -s <ชื่อ_session> | สร้าง Session ใหม่พร้อมตั้งชื่อ (แนะนำวิธีนี้) |
tmux ls | ดูรายการ Session ทั้งหมดที่ทำงานอยู่ |
tmux a -t <ชื่อ_session> | เชื่อมต่อกลับเข้าไปใน Session นั้นๆ (Attach) |
tmux kill-session -t <ชื่อ_session> | ปิด Session นั้นทิ้ง |
การจัดการ Window (ภายใน tmux)
เมื่อคุณอยู่ใน tmux ให้ใช้ปุ่มคีย์ลัดเหล่านี้ (อย่าลืมกด Ctrl + b ก่อนเสมอนะครับ)
| คีย์ลัด | คำอธิบาย |
|---|---|
Ctrl + b ตามด้วย c | สร้าง Window ใหม่ (Create) |
Ctrl + b ตามด้วย , | เปลี่ยนชื่อ Window ปัจจุบัน |
Ctrl + b ตามด้วย n | เลื่อนไป Window ถัดไป (Next) |
Ctrl + b ตามด้วย p | เลื่อนกลับไป Window ก่อนหน้า (Previous) |
Ctrl + b ตามด้วย 0-9 | กระโดดไปที่ Window ตามหมายเลขเลขนั้นๆ |
Ctrl + b ตามด้วย & | ปิด Window ปัจจุบัน |
การจัดการ Pane (แบ่งหน้าจอย่อย)
| คีย์ลัด | คำอธิบาย |
|---|---|
Ctrl + b ตามด้วย % | แบ่งหน้าจอเป็นแนวตั้ง (ซ้าย-ขวา) |
Ctrl + b ตามด้วย " | แบ่งหน้าจอเป็นแนวนอน (บน-ล่าง) |
Ctrl + b ตามด้วย ปุ่มลูกศร (↑ ↓ ← →) | ย้ายเคอร์เซอร์ไป Pane ที่ต้องการ |
Ctrl + b ตามด้วย x | ปิด Pane ปัจจุบัน |
Ctrl + b ตามด้วย z | ขยาย Pane ปัจจุบันให้เต็มจอ (Zoom) และกดซ้ำเพื่อย่อกลับมาเท่าเดิม |
การเลิกเชื่อมต่อ (Detach)
สมมติว่าคุณรันบอท หรือรันสคริปต์ทิ้งไว้ แล้วอยากปิดคอมฯ กลับบ้าน ให้กดCtrl + b ตามด้วย d
tmux จะทำการ Detach (หลุดออกมาหน้า Terminalปกติ) โดยที่โปรแกรมข้างในยังทำงานอยู่ วันหลังคุณแค่ SSH กลับมาแล้วพิมพ์ tmux a ก็จะเจอกระบวนการเดิมรันอยู่เหมือนเดิมเป๊ะครับ!
ทำไมมันถึงทำงานต่อได้แม้ปิดคอมฯ ไปแล้ว?
ปกติเวลาเรา SSH เข้าเซิร์ฟเวอร์ ตัวระบบปฏิบัติการจะสร้าง Process การทำงานขึ้นมาภายใต้ Session ของ SSH นั้น ๆ พอเรา ปิดคอมฯ หรือเน็ตหลุด Session ของ SSH จะขาด ส่งผลให้เซิร์ฟเวอร์สั่งฆ่า (Kill) ทุกโปรแกรมที่รันค้างไว้ทันที (รวมถึงโปรแกรมใหญ่ ๆ ที่กำลังติดตั้งอยู่ด้วย)
แต่พอเราใช้ tmux
- ตัว tmux จะสร้างตัวจัดการกลาง (tmux server) รันแยกต่างหากอยู่ในเซิร์ฟเวอร์
- เมื่อเราสั่งติดตั้งโปรแกรมข้างใน tmux… ตัวโปรแกรมนั้นจะถือว่าเป็น “ลูก” ของ tmux ไม่ใช่ลูกของ SSH
- พอเรากด Detach (
Ctrl + bตามด้วยd) หรือปิดคอมพิวเตอร์ไป ตัว SSH จะตัดไปก็จริง แต่ tmux server บนเซิร์ฟเวอร์ไม่ได้ถูกปิดไปด้วย มันยังคงทำงานและเลี้ยงกระบวนการติดตั้งโปรแกรมนั้นให้วิ่งต่อไปเรื่อย ๆ จนเสร็จครับ
ข้อควรระวังและเทคนิคเพิ่มเติมเพื่อความชัวร์
แม้ว่า tmux จะช่วยให้โปรแกรมทำงานต่อได้ร้อยเปอร์เซ็นต์ แต่เพื่อให้การติดตั้งโปรแกรมใหญ่ ๆ ราบรื่น มี 2 เรื่องที่ควรระวังครับ
- เช็ก Disk Space ก่อนเริ่ม: โปรแกรมใหญ่ ๆ มักจะใช้พื้นที่เยอะ หากระหว่างที่เราปิดคอมไป แล้วพื้นที่เซิร์ฟเวอร์เต็ม (Disk Full) การติดตั้งจะค้างหรือพังได้ครับ
- ระวังคำสั่งที่ต้องรอการกดตกลง (Interactive Prompts): บางโปรแกรมระหว่างติดตั้งอาจจะมีหน้าต่างเด้งขึ้นมาถามว่า
Do you want to continue? (y/n)หรือให้เรายอมรับเงื่อนไข ถ้าเราไม่อยู่หน้าจอและไม่ได้กดข้ามไว้ล่วงหน้า (เช่น ไม่ได้ใส่ flag-yในคำสั่ง) โปรแกรมมันก็จะจอดค้างหน้านั้นรอนิ้วเรามากดอยู่ดีครับ
💡 ทิป: ถ้าอยากดู Log การติดตั้งย้อนหลังหลังจากที่เราต่อกลับเข้ามา (Attach) แล้วหน้าจอแผงคำสั่งมันเลื่อนไปไกลจนมองไม่เห็น ให้กด Ctrl + b ตามด้วย [ จะเป็นการเปิด Copy Mode จากนั้นคุณจะสามารถใช้ปุ่มลูกศร (↑ ↓) หรือ PageUp/PageDown เลื่อนขึ้นไปดูประวัติการติดตั้งที่ผ่านมาได้ครับ (กด q เพื่อออกจากโหมดนี้)
สรุป
tmux เป็นเครื่องมือที่ช่วยเพิ่ม Productivity ให้กับคนที่ใช้ Command Line ได้อย่างมหาศาล ช่วยประหยัดเวลา ไม่ต้องเปิดหน้าต่าง Terminal หลาย ๆ บานให้รก และป้องกันงานพังเวลาเน็ตหลุดได้เป็นอย่างดี ลองฝึกใช้คำสั่งพื้นฐานเหล่านี้ให้ชินมือ แล้วคุณจะขาดมันไม่ได้เลยครับ!
อ่านเพิ่มเติม
