ไผ๋บ่มัก tmux | tmux — terminal multiplexer

เรศ ชาวไร่
4 min readJul 31, 2017

--

ไผ๋บ่มัก tmux

เมื่อวันที่ 28 กรกฎาคม 2560 ผมไปงาน SysAdminThai มา รายละเอียดตามไปดูได้ที่ https://www.facebook.com/sysadminthailand/ ผมไปเป็น Speaker ด้วยน่ะ โดยใช้รูปรูปเดียว คือรูปข้างบนในการประกอบการบรรยาย เพราะความที่งานยุ่งๆ เลยไม่ได้เตรียมสไลด์ไปสักแผ่น ไปก็สาย เกือบเที่ยง คนอื่นๆเข้าเตรียมตัวมาอย่างดีเลย โคตรดี ผมเลยเน้นเดโมอย่างเดียว ซึ่งก็ทำได้ไม่ดีนัก เพราะผมไม่ชินกับการพูดกับคน อยู่ห้องพูดแต่กับแมว 🐱

เข้าเรื่องเลย คือ Maykin ชวนผมไปพูดในงานนี้ ผมไม่รู้จะพูดเรื่องอะไร เลยไปแชทถามในกลุ่มที่ทำงาน เลยได้เรื่อง tmux นี่แหละ และด้วยที่มันเป็นงานของ System Admin เลยคิดว่า มันคงได้ใช้ประโยชน์กันบ้างแหละหน่า

โดยตำแหน่งงานแล้ว ผมเป็นโปรแกรมเมอร์น่ะ เป็นโปรแกรมเมอร์ เกรด B… แต่ ผมก็ทำงานข้างหลังบ้าง ดูระบบบ้างเช่น Docker ทำเว็บ Server ให้เอิร์ธ (คนที่มีแฟนเยอะๆ) เอาเว็บไปรัน (อันนี้ล้อเล่น ไม่อ้างอิงน่ะ ว่าเป็นใครว่ามีแฟนเยอะ #อย่าตามไปอ่านโพสต์ก่อนหน้าเดี๋ยวรู้)

ก่อนอื่นเลย ออกตัวก่อน ผมไม่ชอบเขียนอะไรที่เป็นทางการ และอาจจะสื่อสารได้ไม่ดีนัก หาสาระไปทางอื่น หาคนหื่นๆมาทางนี้ กด Follow ผมใน Facebook fb.com/koonnarate ได้น่ะ อันนี้เขียนตอนกินเบียร์ ถ้าอ่านตรงไหน ไม่เข้าใจ นัดเลี้ยงเบียร์ผมได้ ผมจะพูดให้พัง ตัวๆ อิอิ

tmux หรือชื่อเต็มมันคือ Terminal Multiplexer มีคนบอกว่า มันคล้ายๆ screen บน Linux แหละ แต่ว่า ผมเองเพิ่งใช้ Linux มาไม่นาน เลยไม่รู้จัก screen เพราะมันโบราณไป 55555555 ผมเริ่มใช้ tmux มาสักพักแล้ว แต่ใช้ไม่มาก ท่าไม่ยาก แต่เด็ด

ข้อดี ข้อเสียว ระหว่าง tmux, screen ผมไม่รู้จริงๆ ผมใช้แต่ tmux อ่านเพิ่มเติมได้ที่เว็บของ tmux เลย https://github.com/tmux/tmux/wiki

tmux ใช้ทำอะไร พูดคร่าวๆ และยกตัวอย่างให้เห็นได้ชัดเจน เช่น เวลาเราใช้ Terminal หรือ iTerm2 หรือ Terminal emulator อื่นๆ ในการ ssh ไปทำงานบนเครื่อง server จากนั้นรันคำสั่งอะไรสักอย่างไว้ เช่น คอมไพล์โปรแกรม หรือ เขียนไฟล์คอนฟิกอะไรสักอย่างอยู่ แล้วเกิดเน็ตหลุด… คำถามคือ เราจะกลับไปทำงานต่อจากตรงนั้นยังไง อันนี้เป็นคำถามคาใจผมมานานมาก บางคนบอกว่า ใช้ screen ซิ ผมงงมาก แล้วที่ผมใช้ตอนนี้มัน มันตู้เย็นเหรอ screen ผมเนี่ยโคตรชัด (ล้อเล่น) แต่ว่าตอนนั้นไม่เข้าใจจริงๆน่ะ แล้วไปเจอ tmux ใน GitHub trending จากนั้นเลยค่อยๆใช้มันมา

หลังจากได้ใช้ tmux มา มันก็ทำให้ชีวิตสบายขึ้นมากเลยครับ ตัวอย่างคือ ตอนบ่ายไปนั่งทำงานร้านกาแฟ ทำงานเพลินๆ เขียนโค้ดอยู่ มอนิเตอร์ระบบ เล่น Facebook กดไลก์ Cup E, D, A, Sexy Angel, หมูไม่กลัว พอ!! และระหว่างนั้น สั่งคอมไพล์โปรแกรมอยู่ และมันใช้เวลานาน แล้วอยู่ๆ เพื่อนก็โทรมา บอกว่า วันนี้กูได้แฟนเพิ่ม มากินเบียร์ฉลองกับกูหน่อย ตอนนี้ เดี๋ยวนี้ มาเลย ให้เวลา 20 นาที ไม่มากูกลับ ด้วยความที่เรา เป็นนักกินเบียร์ในตำนาน มีรึจะไม่ไป พับฝาคอมและก็ไปในทันที ถ้าเป็นเมื่อก่อน คอมไพล์โปรแกรมที่ใช้เวลานานๆ และไม่ได้ใช้ tmux นี่ คือมันไม่ทำงานต่อเลยน่ะ หรือ ทำงานต่อ แต่ผมไม่รู้เลยว่า มันไปถึงไหนแล้ว แต่พอใช้ tmux กินเบียร์เมา กลับมาตื่นบ่ายอีกวัน สั่ง tmux a กลับไป ยังเจอเลยว่า error : OPENSSL not found อะไรทำนองนั้น

อห… โม้ไปเยอะมาก ยังไม่เห็น tmux จริงๆเลย งั้นเข้าเรื่องเลย แรกสุด ติดตั้ง และเรียกใช้ tmux โดยการติดตั้ง บน ubuntu, debian ทำได้โดน รันคำสั่ง apt install tmux -y จากนั้น เรียกใช้โดยรันคำสั่ง tmux

หลังจากที่ติดตั้ง tmux และเรียกใช้ได้แล้ว มาดูถึงคำสั่งพื้นฐาน และ Key กันว่า ใช้อะไร ยังไง โดย tmux หลังจากเราเรียกใช้แล้ว เวลาจะสั่งงาน จะต้องเรียก หรือกด Prefix ก่อน โดยค่าปกติของมันแล้ว จะเป็นการกด ctrl + b หรือ control + b (เครื่องหมาย + หมายถึง กด ctrl หรือ control แล้ว ตามด้วยกด b โดยไม่ต้องกดค้างไว้ กดเสร็จยกนิ้วออกแล้วค่อยกดปุ่มอื่นๆตาม)

ส่วนประกอบหลักๆของ tmux มีดังนี้เรียงจากใหญ่ไปเล็กคือ
- Session อันนี้จะใหญ่สุด โดยใน session จะประกอบไปด้วย window, pane
- Window รองลงมาจาก session โดย ใน 1 window จะมีได้หลายๆ pane
- Pane เป็นส่วนย่อยของ window โดยใน 1 pane คือ terminal ย่อย ที่เราใช้งาน

หลังจากที่เรารันคำสั่ง tmux แล้ว เราจะได้ session มา ตามรูปแรกคือ session ชื่อ 2 จากนั้นเราจะลองสร้าง Window ขึ้นมาใช้งานกัน โดยหลังจากที่เรียก tmux ขึ้นมาแล้วสิ่งที่ได้คือ session และ window ในที่นี้คือ session ชื่อ 2 และ window 0 การสร้าง window เพิ่ม ทำได้โดยกด Prefix + c หรือกด ctrl + b + c

เมื่อเรากดสร้าง window แล้ว window ใหม่จะถูกสร้างขึ้นโดยจะแสดงรายการไว้ที่ด้านล่าง ซึ่งจะเรียกว่า status bar โดยคอลัมภ์แรกสุดจะเป็นชื่อ session และถัดมาจะเป็นชื่อ window และขั้นด้วยคำสั่งที่กำลังรันอยู่ในแต่ละ window

การเลือกใช้งาน window หรือ การสลับ window ทำได้ด้วยการกด Prefix + ตัวเลข ของ window นั้นๆ หรือการการ Prefix + w เพื่อแสดงรายชื่อ window จากนั้นใช้ลูกศรขึ้นลงในการเลือก จากนั้นกด enter เพื่อเข้าไปใช้งาน window นั้นๆ หรือ กด Prefix + n เพื่อสลับไปใช้งาน window ถัดไป, Prefix + p เพื่อเลือกใช้งาน window ก่อนหน้า

ตัวอย่างก่อนหน้าคือ การใช้ tmux แบบพื้นฐานสุดๆเลย คือรันคำสั่ง tmux และสร้าง window ขึ้นมา จากนั้นจะได้ session และ window ในการใช้งาน จากนั้นเรามาทดลองดูว่า ถ้าเราปิด Termial ไปหรือเน็ตหลุดไป จะกลับไปใช้งานต่อได้ยังไง

อันนี้ทดลองปิด Terminal tab ไป จากนั้น ssh ไปยัง server เดิม และสั่ง tmux a ก็จะเห็นสิ่งที่ทำไว้ก่อนหน้านี้ (พิมพ์ผิด Clone จะพิมพ์ Close น่ะ เมาเบียร์)

Close tab and attach session

การรันคำสั่ง tmux และตั้งชื่อ session ตั้งแต่แรก ทำได้โดยรันคำสั่ง tmux new -s demo หลังจากเริ่ม session ใหม่แล้ว สั่งเปลี่ยนชื่อ window ได้ด้วยการกด Prefix + :rename-window ชื่อใหม่ จะได้แบบนี้

การแบ่ง window ออกมา เรียกว่า pane ทำได้โดยการกด Prefix + % หรือ Prefix + “

การสลับใช้งานระหว่าง pane ทำได้ด้วยการกด Prefix + ลูกศร ซ้าย ขวา บน ล่าง

การเรียง layout ของ pane ให้อยู่ในรูปแบบต่างๆ เช่น ทำให้ขนาดเท่ากันหมด เรียงขนาดเท่ากันในแนวนอน เรียงขนาดเท่ากันในแนวตั้ง ทำได้โดยการกด Prefix + space

การเพิ่ม ลด ขนาดของ pane ที่กำลังใช้งานอยู่ ทำได้โดยการกด Prefix + :resize-pane -R 5 โดย จะเป็นการขยายขนาด pane ที่ใช้งานอยู่ไปทางขวา 5 column, ลดขนาดลง 10 column

การเปลี่ยนสี status bar!!! ทำได้โดยการกด Prefix + :set status-bg red

การเปิดใช้งาน Mouse ให้เลือกเลือก pane, window ได้ โดยกด Prefix + :set mouse

สุดท้าย แล้ว อันนี้เด็ด การ synchronize pane! อันนี้มีประโยชน์ เช่นเรา ssh ไปยัง server ต่างๆ แล้วอยากสั่ง update software พร้อมๆกัน หรือ สั่งแก้ไฟล์คอนฟิก ที่มันต้องทำเหมือนๆกัน ทำได้โดยสั่ง Prefix + : set synchronize-panes

อันนี้เร็วหน่อย gif มันใหญ่ และ medium แม่ง ปัญหาเยอะ -_-’

เขียนมาทั้งหมด น่าจะจบได้เท่านี้แหละครับ ที่ใช้อยู่ในชีวิตประจำวัน SysAdmin หรือยามเฝ้า Server คนไหนไม่ได้ใช้ tmux อาจจะเป็นบาปส์

เออลืม มีคนไม่เข้าใจหน้าปกด้วยว่าทำไมต้อง ไผ๋บ่มัก tmux เอางี้ เอามุกปูทางไป
- ใครไม่ทน กรุงธน
- ใครไม่หล่อ ทองหล่อ
- ใครไม่ทอน สาธร
- ใครไม่เย โปเยโปโลเย… พอ!!

อ่านจบแล้ว เลี้ยงเบียร์ผมด้วย

Update: 17/08/2018

--

--

เรศ ชาวไร่

ทดลองเป็นโปรแกรมเมอร์ (หื่น)