Tutorial

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

By Arnon Puitrakul - 06 มกราคม 2025

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

เมื่อหลายวันก่อน เราไปทำงานแล้วใช้ Terminal แบบปีศาจมาก ๆ จนเพื่อนถามว่า เราทำยังไงถึงสามารถสลับ Terminal Session ไปมาได้แบบบ้าคลั่งขนาดนั้น เบื้องหลังของผมน่ะเหรอกัปตัน ผมใช้ tmux ยังไงละ วันนี้เราจะมาแชร์ให้อ่านกันว่า มันเอามาใช้งานจริงได้อย่างไร เป็น Beginner Guide สำหรับคนที่อยากลองละกัน

Installing tmux

// Homebrew
$ brew install tmux

// apt
$ sudo apt get install tmux

tmux ไม่ได้เป็นโปรแกรมที่ติดมากับเครื่อง ดังนั้น เราจะต้องติดตั้งกันก่อน โดยเราสามารถติดตั้งผ่าน Homebrew ได้ง่าย ๆ หรือ ถ้าใครใช้ Linux Distro ตัวไหน ก็ลองดูใน Package Manager ที่อยู่ในเครื่องของเราได้เลยว่า เราใช้ตัวไหน เราว่ามันน่าจะมีหมดนะ เท่าที่เราลองใช้บน macOS ผ่าน Homebrew และ Ubuntu ผ่านทั้ง apt และ LinuxBrew มันก็ติดตั้งตามนี้ได้เลย

$ tmux -V
tmux 3.5a

หลังติดตั้ง ให้เราเช็คอีกครั้งว่า เราสามารถเรียกมันได้อย่างถูกต้องหรือไม่ ง่าย ๆ ด้วยการขอเลข Version มันเลยละกันด้วย Argument -V ย้ำกว่า V ตัวพิมพ์ใหญ่นะ

Basic Terminology: Session, Window, Pane

ก่อนเราจะไปลองใช้งานกัน เราอยากจะต้องมาทำความเข้าใจหลักการทำงานพื้นฐานกันก่อน โดยการใช้ Terminal บน tmux มันจะมี 4 คำที่เราจะต้องทำความเข้าใจกันก่อน

Session เป็นหน่วยใหญ่ที่สุดของ tmux ที่ภายในมันจะประกอบด้วย Window และ Pane เราสามารถสร้าง Session ได้จากการสั่งรัน tmux บน Terminal โดยเมื่อเราเข้ามาแล้ว เราจะเห็นว่า เราได้หน้า Terminal เหมือนที่เราเปิดทั่วไป แต่เราจะได้แถบด้านล่างติดมาด้วย

ในแต่ละ Session เราสามารถใส่หลาย Window ได้ คิดภาพง่าย ๆ เหมือนเราเปิดหน้าต่างใหม่ใน macOS และ Windows เลย แค่ว่า Window บน tmux มันไม่สามารถขยับได้อย่างอิสระเหมือนกับ GUI ที่เราใช้งานกันปกตินั่นเอง

ในแต่ละ Window เราสามารถใส่ได้หลาย Pane เหมือนโปรแกรมสมัยก่อนที่เราเปิดมาแล้ว สามารถทำงานได้หลาย ๆ หน้าต่างย่อย ซึ่งใน tmux เราสามารถแบ่งครึ่งแนวตั้ง หรือแนวนอนแล้วแต่ที่เราสะดวกเลย

และสุดท้าย ไม่เกี่ยวกับโครงสร้างละ แต่เกี่ยวกับ Shortcut ที่เราจำเป็นต้องใช้ เวลาจะกด Shortcut ทุกอย่างใน tmux เราจะต้องเริ่มจากการกดสิ่งที่เรียกว่า Binding หรือ Prefix กันก่อน โดยค่าพื้นฐาน เราจะใช้ Control + B ปล่อยมือแล้วค่อยตามด้วย Shortcut ที่เราต้องการแค่นั้น ต่อจากนี้ ถ้าเราบอกว่า Prefix + ตัวหนังสือ ก็คือให้เรากด Control + B แล้วปล่อยมือ แล้วตามด้วยตัวหนังสือนั้น ๆ

tmux new -s <session_name>

tmux new -s data_analysis

เรามาเริ่มจากการกระโดดข้ามไปมาระหว่าง Session กันก่อน โดยทั่วไป หากเราเรียก tmux เฉย ๆ มันก็จะสร้าง Session ที่ไม่มีชื่อมาให้เรา เราสามารถตั้งชื่อให้มันได้ โดยใส่ Argument -s แล้วตามด้วยชื่อ Session ก็ได้ ตัวอย่างด้านบนเป็นการสร้าง Session ใหม่ที่ชื่อ data_analysis

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

เมื่อเราเข้ามา ให้เราสังเกตด้านล่างซ้ายมือ มันจะมีเขียนชื่อ Session ให้เราอยู่ ดังนั้นเวลาเราสลับ Session ไปมา ให้เราดูด้วยนะว่า เราอยู่ที่ Session ไหน ไม่ใช่ว่า สลับไปมา งง กันเองซะงั้น ฮ่า ๆ

$ tmux new -s data_pipeline -d
$ tmux ls
0: 1 windows (created Sun Jan  5 20:02:42 2025)
data_analysis: 1 windows (created Sun Jan  5 20:25:52 2025) (attached)
data_pipeline: 1 windows (created Sun Jan  5 20:28:23 2025)

ทีนี้ เราจะลองสร้าง Session ใหม่กันดู อาจจะชื่อว่า data_pipeline เราก็ใช้คำสั่งเดิมได้เลย แต่ใส่ -d ลงไปเพื่อบอกว่า ให้มัน Detach ออกไปก่อนนะ อย่าพึ่ง Attach เข้ามาตอนนี้ โดยเราสามารถขอดูได้ว่า ณ ตอนนี้เรามี Session ใดเปิดอยู่บ้างด้วยคำสั่ง ls ก็จะเห็นว่า ตอนนี้เรามี 2 Session เปิดอยู่

$ tmux attach -t data_analysis

เราสามารถกลับมารัน Session เดิมได้อีกครั้ง ด้วยคำสั่ง attach แต่เราควรที่จะทำนอก tmux นะ ไม่งั้นมันจะเป็นการ เอา Session มาซ้อนกัน แล้วมันจะ งง มาก ๆ และเมื่อเราเข้ามาใน Session แล้วหากเราต้องการ Detach ออกจาก Session ให้เรากด Prefix + D

หากเรา ls ดู เราจะเห็นว่า Session ที่เรา Detach ไป มันก็จะยังคงเปิดอยู่เหมือนเดิม ทำให้ หากเรารันโปรแกรมอะไรเอาไว้ มันก็จะอยู่แบบนั้นแหละ ทำให้เราสามารถเปิด Session อื่น ๆ เพื่อทำงานต่อไปได้นั่นเอง

$ tmux a

ความสนุกมันอยู่ที่ว่า หากเราเปิด Terminal แล้วเปิดขึ้นมาใหม่ แล้วลอง ls ดู เราจะพบว่า Session มันไม่ได้หายไปไหนเลย เพราะแต่ละ Session มันมี Process ของตัวเองที่ถูกควบคุมด้วย tmux-server อีกทีนึง อันนี้รู้ไว้เท่านี้พอแล้ว ซึ่งถ้าเราต้องการ Attach หน้าต่างล่าสุดแบบเร็ว ๆ เราสามารถใช้คำสั่งด้านบนได้เลย

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

ในแต่ละ Session เราสามารถใส่ได้หลาย Window พร้อม ๆ กัน เราสามารถสร้าง Window ใหม่ได้โดยการกด Prefix + c เมื่อเรากด เราจะเห็นว่า เราจะได้หน้า Terminal ใหม่ ให้เราสังเกตที่ด้านล่างซ้ายเหมือนเดิม จากเดิมมันมีเลข 0 แล้วตามด้วย Shell ตอนนี้มันมีเลข 1 โผล่ขึ้นมาแล้ว มันคือ Window ที่เราเปิดทิ้งไว้อยู่ คล้าย ๆ กับการเปิด Tab ใหม่ใน Web Browser เลย

โดยเราสามารถขอดูได้ว่าใน Session เราเปิด Windows ไหนไว้บ้าง ด้วยการกด Prefix + w จากนั้นเราอยากไป Windows ไหนของ Session ไหน เราแค่เอาลูกศรเลื่อน ๆ แล้วกด Enter มันก็จะไปที่หน้าต่างนั้นเลย แต่วิธีนี้มันช้า มันดูเด็ก ๆ ไป เรามันระดับผู้ใหญ่แล้ว เราจะกด Prefix + n เพื่อเลื่อนไปยัง Window ถัดไป และ Prefix + p สำหรับย้อนกลับไป Window ก่อนหน้า

แต่ถ้าเรามีหน้าต่างเยอะ ๆ การจะ Next ไปเรื่อย ๆ โหว มันดูไก่อ่อนไปหน่อย เราสามารถตั้งชื่อ Window เพื่อ Navigate ไปหาได้แบบเร็วได้ ๆ ด้วยการกด Prefix + , แล้วตั้งชื่อแล้วกด Enter เช่นเราตั้งชื่อหน้าต่างนี้ว่า main เราจะเห็นว่าจากเดิมมันเป็น zsh มันก็จะเปลี่ยนเป็น main ให้เรา

จากนั้น หากเราต้องการไปที่หน้าต่างที่เราตั้งชื่อไว้ เราสามารถกด Prefix + f แล้วพิมพ์ชื่อเข้าไป มันจะเป็นการค้นหาหน้าต่าง หากเราพิมพ์ชื่อเป๊ะ ๆ เราก็สามารถกด Enter ได้แบบเร็ว ๆ

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

ตัวอย่างของการทำงานหลาย ๆ Window แบบง่าย ๆ คือ ใน 1 Project ของเราอาจจะมีหลาย ๆ Source Code ย่อย ๆ เช่นมี Frontend และ Backend Project เราก็สามารถแบ่ง Window ตัวนึงของ Frontend และอีกตัวของ Backend พร้อมกับตั้งชื่อเพื่อความง่ายในการดูที่ด้านล่างซ้ายด้วย

มาถึงจุดที่เท่กว่าเดิม เหมือนในหนัง Sci-Fi ละ คือการจัดการกับ Pane คือ ใน 1 Window เราสามารถใส่ได้หลาย ๆ Pane พร้อม ๆ กัน ตัวอย่างเช่นใน Frontend Project เราจะต้องรัน Web Server ขึ้นมาอันนึง กับมีอีกอันเพื่อไว้สั่งสร้าง หรือจัดการไฟล์ต่าง ๆ ใน Frontend เอง เราก็จะสร้าง Pane 2 ตัวมาเพื่อจัดการตรงนี้แหละ

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

เราสามารถกดสร้าง Pane ได้โดยการกด Prefix + % หน้าต่างมันก็จะแยกออกมาเป็นซ้ายขวาอย่างที่เห็นในรูปเลย และเราสามารถสลับการทำงานระหว่าง Pane ได้การกด Prefix + ลูกศร เช่น เราอยู่ซ้าย เราจะไปขวา เราก็กด Prefix + ลูกศรขวา บอกเลยว่า ถ้ากด เร็ว ๆ มันจะทำให้เราดูเทพมาก ๆ เลยแหละ

และเรายังสามารถสลับรูปแบบของการจัดเรียงในขนาดที่เท่า ๆ กันได้โดยการกด Prefix + Space จากตัวอย่าง จะเห็นว่า พอเรามี 3 Pane มันก็จะจัดเรียงให้แต่ละ Pane เท่ากันหมดเลย และเมื่อเรากด Prefix + Space ไปเรื่อย ๆ มันก็จะเปลี่ยน Layout ไปเรื่อย ๆ

แต่ถ้าเราต้องการลดความเท่แบบหนัง Hacker ไก่อ่อน เราสามารถใช้ Mouse ได้ด้วยนะ แต่เราจะต้องเปิดการใช้งานมันก่อนด้วย Prefix + :set mouse เราก็จะสามารถเอา Mouse ไปคลิกที่ Pane มันก็จะสลับไปที่ Pane นั้นให้เราเลย วิธีนี้เราใช้เฉพาะกับ OS ที่มี Mouse Support เท่านั้นนะ เราแนะนำว่า อย่าใช้เลย พยายามใช้ Keyboard อย่างเดียวดีกว่า เพราะส่วนใหญ่ เราคิดว่า คนที่ต้องใช้ tmux จริง ๆ เขาน่าจะทำงานกับ OS ที่เป็น Command Line ล้วน ๆ เช่น Ubuntu Server

อีกความเท่ ที่ทำทีไร ทุกคนช๊อคมากคือ เราสามารถ Sync Pane กันได้ เช่น เราพิมพ์อะไร มันจะโผล่ไปในทุก Pane เลย เช่น เรา SSH เข้าไปที่ Server อยู่ 3 Pane แล้วเราต้องการรันโปรแกรมเหมือนกัน เราก็สามารถกด Prefix + :set syncronize-panes กด Enter จากนั้นเราพิมพ์อะไร มันจะพิมพ์เหมือนกันในทุก Pane เลย โคตรเท่ Like a hacker ปะละ

สรุป : จะเท่ได้ นายต้องใช้บ่อย ๆ ถึงจะคล่อง

ถ้าใครได้อ่านมาถึงตรงนี้ แล้วได้ลองทำแบบที่เราบอกดู จะรู้สึกว่า เห้ยการกด Control + B แล้วตามด้วย Shortcut มันจะทำให้เราทำงานได้เร็วแบบพระเจ้าได้อย่างไร เอาจริง ๆ ถ้าไม่เก่งเท่าเราก็ทำไม่ได้หรอกนะครับ ฮั่นแน่ ตรีนทาบจอแล้วอะเด้ ล้อเล่นนะ เอาจริง ๆ คือ เราคิดว่า มันจะต้องใช้งานบ่อย ๆ และเดี๋ยวมันจะค่อย ๆ เร็วขึ้นเอง กับบางคน อาจจะมีการเปลี่ยน Prefix จาก Control + B เป็นตัวอื่นที่ถนัดมากกว่า ก็แล้วแต่เราเลยว่า เราชอบแบบไหน การเล่นกับ Terminal เราว่ามันสนุกตรงนี้แหละ เราสามารถ Config วิธีการทำงานได้ตามแบบที่เราต้องการ

ถามว่า แล้วประโยชน์ของ tmux คืออะไร (นอกจากความเท่ อะนะ) คือ มันทำให้เราสามารถเปิด Terminal หลาย ๆ หน้าต่างได้ เราอาจจะบอกว่า เอ้า แล้วมันจะต่างจากการเปิด Terminal อันใหม่ในเครื่องของเราอย่างไรละ คือต้องเข้าใจก่อนนะว่า tmux มันถูกสร้างขึ้นมาสำหรับ OS ที่เป็น Command Line เพียว ๆ เลยยังไงละ หากเราต้องไปใช้ OS แบบนั้น มันก็จะทำให้เราทำงานได้เร็วขึ้น ตัวอย่างเช่นเราเอง ส่วนใหญ่ เราทำงานอยู่บน HPC และ Cluster ต่าง ๆ บางทีเราก็จะ SSH เข้าไปแก้ Source Code บนนั้น และสั่งรัน แต่ถ้าเราต้องมานั่งเปิด Terminal หลาย ๆ หน้าต่างแล้วต้อง SSH เข้าไปทุกหน้าต่างมันก็ไม่ไหวเหมือนกัน tmux มันเข้ามาช่วยเราได้เยอะมากเลยทีเดียว

Read Next...

รัน LLM Model อะไรก็ได้ฟรีด้วย Ollama, VS Code และ Continue

รัน LLM Model อะไรก็ได้ฟรีด้วย Ollama, VS Code และ Continue

AI เข้ามามีบทบาทในการทำงานสำหรับฝั่ง Software Developer ค่อนข้างมาก วันนี้เราจะมาเล่าวิธีการที่ทำให้เราสาารถใช้งาน Feature พวกนี้ได้แบบฟรี ๆ ในเครื่องของเรากันด้วย Visual Studio Code และ Continue กัน...

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

เมื่อหลายวันก่อน เราไปทำงานแล้วใช้ Terminal แบบปีศาจมาก ๆ จนเพื่อนถามว่า เราทำยังไงถึงสามารถสลับ Terminal Session ไปมาได้แบบบ้าคลั่งขนาดนั้น เบื้องหลังของผมน่ะเหรอกัปตัน ผมใช้ tmux ยังไงละ วันนี้เราจะมาแชร์ให้อ่านกันว่า มันเอามาใช้งานจริงได้อย่างไร เป็น Beginner Guide สำหรับคนที่อยากลองละกัน...

ปกป้อง Ubuntu ผ่าน Firewall แบบง่าย ๆ ด้วย UFW

ปกป้อง Ubuntu ผ่าน Firewall แบบง่าย ๆ ด้วย UFW

Firewall ถือว่าเป็นเครื่องมือในการป้องกันภัยขั้นพื้นฐานที่ปัจจุบันใคร ๆ ก็ติดตั้งใช้งานกันอยู่แล้ว แต่หากเรากำลังใช้ Ubuntu อยู่ จริง ๆ แล้วเขามี Firewall มาให้เราใช้งานได้เลยนะ มันชื่อว่า UFW วันนี้เราจะมาทำความรู้จัก และทดลองตั้ง Rule สำหรับการดักจับการเชื่อมต่อที่ไม่เกี่ยวข้องกันดีกว่า...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...