12/08/2018, 11:21

Giới thiệu cơ bản về Tmux

Tôi bắt đầu dùng Tmux thế nào? Ngày chập chững bắt đầu biết cách ssh vào server, chạy các tác vụ trực tiếp trên staging và production, tôi có gặp một vấn đề như sau. Khi đang chạy một tác vụ chuyển dữ liệu với thời gian thực thi lên tới gần 1 tiếng đồng hồ, đột nhiên tôi gặp thông báo: $ Write ...

Tôi bắt đầu dùng Tmux thế nào?

Ngày chập chững bắt đầu biết cách ssh vào server, chạy các tác vụ trực tiếp trên staging và production, tôi có gặp một vấn đề như sau. Khi đang chạy một tác vụ chuyển dữ liệu với thời gian thực thi lên tới gần 1 tiếng đồng hồ, đột nhiên tôi gặp thông báo:

$ Write failed: Broken pipe

Cái gì vậy?

Thì ra là mạng chập chờn khiến cho kết nối từ máy tính của tôi đến server bị mất. Và thế là tôi bắt đầu bấn loạn! Lo lắng ssh lại, mọi thứ quay lại từ đầu, không biết cái tiến trình đang chạy ban nãy nó thế nào rồi, có xong được không, hay lỗi ở đâu.

Phải có cách nào đó chứ? Nghĩ vậy tôi bắt đầu tìm và nhanh chóng tìm được một cái tên: Tmux. Phải thử ngay!

Sau khi ssh lại vào server và cài tmux, tôi thử chạy:

$ tmux

Màn hình terminal thay đổi về giao diện của tmux session, tôi gõ thử:

$ I am going to run db migration here

và sau đó... rút dây mạng. Tất nhiên, một lần nữa

$ Write failed: Broken pipe

Sau đó tôi ssh lại vào server, gõ thử:

tmux a

Kết quả:

$ I am going to run db migration here

Thật là tuyệt vời, tmux mở lại cho tôi đúng session là tôi đang có trước khi mất mạng. Như chưa hề có cuộc chia ly! Kể từ đó tôi hoàn toàn yên tâm khi phải thực thi những tác vụ kéo dài hàng tiếng, thậm chí là cả ngày trên server.

Tôi đã bắt đầu dùng Tmux như thế đó.

Cụ thể hơn về Tmux

Bên trên là kỷ niệm đầu đời cũng như là giá trị có lẽ là tuyệt vời nhất mà Tmux đem lại cho tôi. Phần này tôi sẽ trình bày kỹ hơn xem thực sự Tmux là cái gì và nó có thể làm được những gì.

Tmux là gì?

Định nghĩa trên trang https://tmux.github.io/ có nói rằng: Tmux là một Terminal Multiplexer - "bộ ghép kênh". Nó cho phép bạn chuyển qua lại giữa các chương trình độc lập ngay trên một terminal, tách các chương trình ra một terminal riêng mà vẫn giữ được trạng thái hoạt động của chúng. Và còn làm được nhiều việc hơn thế nữa...

Cài đặt Tmux thế nào?

Bạn có thể tải và cài tại đây Download hoặc cài trực tiếp từ terminal:

sudo apt-get update
sudo apt-get install tmux

Những tính năng hay của Tmux

Đầy đủ tính năng ghi hết ra đây không hết được. Các bạn có thể đọc tại đây hoặc tìm kiếm ở các nguồn khác. Ở đây tôi sẽ chỉ xin phép nêu ra các tính năng cơ bản mà tôi thường sử dụng.

Liên quan đến tạo và attach sessions

Tạo một session mới:

tmux

Attach nó:

tmux a

Tạo một session mới kèm theo tên gọi:

tmux new -s s_name

Attach session đã được đặt tên:

tmux a -t s_name

Hiện thị danh sách các sessions:

tmux ls

Xoá một session:

tmux kill-session -t s_name

Khi đã ở trong tmux

Mặc định của tmux, prefix của các lệnh sẽ là tổ hợp Ctrl+b, cũng giống như gõ Esc để chuyển về chế độ dòng lệnh như Vim vậy.

Các lệnh làm việc với cửa sổ
Ctrl+b c  # Tạo một cửa sổ mới
Ctrl+b w  # Xem danh sách cửa sổ hiện tại
Ctrl+b n/p  # Chuyển đến cửa sổ tiếp theo hoặc trước đó
Ctrl+b f  # Tìm kiếm cửa sổ
Ctrl+b ,  # Đặt/Đổi tên cho cửa sổ
Ctrl+b &  # Đóng cửa sổ
Cách lệnh làm việc với các panel trong 1 cửa sổ
Ctrl+b %  # chia đôi màn hình theo chiều dọc
Ctrl+b "  # chia đôi màn hình theo chiều ngang

Ctrl+b o/<phím mũi tên>  # Di chuyển giữa các panel
Ctrl+b q  # Hiện số thứ tự trên
Ctrl+b x  # Xoá panel
Những thứ khác

Còn rất nhiều những thứ hay ho khác có thể làm trên Tmux, tất nhiên có những thứ có lẽ sẽ chả giúp ích gì mấy cho công việc của bạn. Ví dụ xem giờ trên Terminal, tại sao không?

4063a796e51c96868836c92917139264.png

Tuỳ biến Tmux

Bản thân tôi hài lòng với những thiết lập mặc định của Tmux. Tuy nhiên nếu bạn khó tính, ví dụ cảm thấy prefix Ctrl+b rất là khó dùng chẳng hạn, bạn cũng có thể thay đổi nó. Tạo file .tmux.conf tại thư mục home của user của bạn và bạn có thể config tmux theo ý mình.

tmux source-file .tmux.conf

Ví dụ bạn thích Ctrl+c thay vì Ctrl+b? Chỉ cần viết vào file .tmux.conf mới tạo

unbind C-b
set -g prefix C-a

và thế là xong             </div>
            
            <div class=

0