+8

Giới thiệu về tmux

Mayfest2023

Giới thiệu

Khi ssh vào server, chắc hẳn các bạn đã gặp trường hợp do bị ảnh hưởng bởi ngoại cảnh nào đó như mất điện, mạng chập chờn,... làm mất kết nối ảnh hưởng tới tiến trình ta đang chạy trên server đó. Phải có cách khắc phục cho tình trạng này chứ, tình cờ mình đọc bài viết này trên viblo, và bắt đầu tìm hiểu kĩ hơn về tmux.

Bên cạnh đó sử dụng command line, bạn sẽ thường muốn chạy nhiều thứ cùng một lúc. Chẳng hạn, bạn có thể muốn chạy trình soạn thảo và chương trình của mình song song. Mặc dù điều này có thể đạt được bằng cách mở các cửa sổ terminal mới, nhưng sử dụng Terminal Multiplexer - "bộ ghép kênh" là một giải pháp linh hoạt hơn. Đây là lý do đâu tiên mình biết tới bộ ghép kênh và công cụ đâu tiên mình sử dụng là Terminator Terminal Emulator , nhưng sau mình dùng tmux vì khả năng mạnh mẽ cũng như linh hoạt của nó 😆.

image.png

(Hình 1: Ví dụ việc sử dụng tmux sau khi config của mình chia nhiều panes trong một cửa số kết hợp với một số công cụ như lvim, dust, duf, htop)

Các bộ ghép kênh đầu cuối như tmux cho phép bạn ghép các cửa sổ đầu cuối bằng cách sử dụng các panes và tab để bạn có thể tương tác với nhiều shell session. Ngoài ra, bộ ghép kênh đầu cuối cho phép bạn detach (chạy nền) terminal session hiện tại và chạy lại nó vào một thời điểm nào đó sau này. Điều này có thể làm cho quy trình làm việc của bạn tốt hơn nhiều khi làm việc với các máy từ xa vì nó tránh được nhu cầu sử dụng các câu lệnh như nohup và các thủ thuật tương tự.

Bộ ghép kênh đầu cuối phổ biến nhất hiện nay là tmux. tmux có khả năng cấu hình cao và bằng cách sử dụng các tổ hợp phím, bạn có thể tạo nhiều tab và ngăn và nhanh chóng điều hướng qua chúng.

Tmux

Cài đặt

Với ubuntu bạn có thể cài đặt như sau:

sudo apt-get update
sudo apt-get install tmux

Hoặc bạn có thể cài đặt trực tiếp từ repo releases.

Các thành phần chính

Tất cả các tổ hợp phím của nó đều có dạng prefix + x, prefix mặc định là <C-b>, nghĩa là có 3 bước bạn cần làm (1) nhấn Ctrl+b, (2) nhả Ctrl+b và sau đó (3) nhấn x.

Session

Session: là một không gian làm việc độc lập với một hoặc nhiều cửa sổ.

  • Bắt đầu một phiên làm việc mới: tmux

  • Đóng một session: exit

  • Bắt đầu một session mới với tên basic: tmux new -s basic

  • Liệt kê các session hiện tại: tmux ls, ví dụ ở dưới đang có 2 session có tên lần lượt là test_1 và test_2 image.png

  • Xóa một session: tmux kill-sesion -t basic

  • Detaching (chạy nền) một session: <C-b> d

  • Chạy lại session cuối cùng tmux, bạn có thể sử dùng flag -t để chỉ định session nào.

  • Thay đổi tên session: tmux rename-session -t basic database

Windows

Tương đương với các tab trong trình chỉnh sửa hoặc trình duyệt, chúng là các phần riêng biệt trực quan của cùng một session. Như hình 1, ta thấy có 2 cửa sổ.

  • <C-b> c: Tạo một cửa sổ mới. Để đóng nó, bạn chỉ cần chấm dứt các shell đang làm sử dụng <C-d>

  • <C-b> N: Tới cửa sổ thứ N. Lưu ý rằng chúng được đánh số

  • <C-b> p: Chuyển đến cửa sổ trước

  • <C-b> n: Chuyển đến cửa sổ tiếp theo

  • <C-b> , : Đổi tên cửa sổ hiện tại

  • <C-b> w: Liệt kê các cửa sổ. Sẽ có kết quả như dưới và ta có thể dùng các mũi tên để chọn cửa số mong muốn rồi ấn enter.

    image.png

Panes

  • Giống như phân tách vim, ngăn cho phép bạn có nhiều trình bao trong cùng một cửa sổ, như hình đâu tiên, cửa sổ đang có 4 panes.

  • C-b> ": Chia pane hiện tại theo chiều ngang

  • <C-b> %: Chia pane hiện tại theo chiều dọc

  • <C-b> <direction>: Di chuyển đến pane theo hướng đã chỉ định . Hướng ở đây có nghĩa là các phím mũi tên.

  • <C-b> z: Chuyển đổi thu phóng cho pane hiện tại

  • <C-b> <space>: Chu kỳ thông qua sắp xếp khung.

Còn nhiều chức năng khác, các bạn có thể tham khảo ở đây

Tuỳ biến Tmux

Các tùy chọn sẽ được thêm trong trong dot file .tmux.conf, hãy sử dụng lệnh set-option mà bạn có thể rút ngắn thành set .

Cấu hình các tùy chọn tương tác với windows, chúng ta phải sử dụng một lệnh khác, được gọi là set-window-option, chúng ta có thể rút gọn thành setw.

Nhưng nếu bạn sử dụng flag -r với lệnh liên kết, bạn có thể chỉ định rằng bạn muốn phím có thể lặp lại, nghĩa là bạn chỉ có thể nhấn phím prefix một lần và sau đó nhấn liên tục phím đã xác định trong một cửa sổ thời gian nhất định, được gọi là giới hạn lặp lại

Các tùy biến mình hay dùng như sau:

  • Như ta thấy prefix <C-b> khi ta nhấn tổ hợp phím hơi bất tiện, nên mình chuyển sang tổ hợp phím dễ hơn <C-a>

    # Setting the prefix from C-b to C-a
    set -g prefix C-a
    # Free the original Ctrl-b prefix keybinding
    unbind C-b
    #setting the delay between prefix and command
    set -s escape-time 1
    # Ensure that we can send Ctrl-A to other apps
    bind C-a send-prefix
    
  • Thứ tự của pane cũng như của window bắt đầu từ 0, mình muốn chuyển sang bắt đầu từ 1 cho dễ hơn:

    # Set the base index for windows to 1 instead of 0
    set -g base-index 1
    
    # Set the base index for panes to 1 instead of 0
    setw -g pane-base-index 1
    
  • Tạo tổ hợp phím để reload config, 2 câu lệnh được tách nhau bởi \;

    # Reload the file with Prefix r
    bind r source-file ~/.tmux.conf  \; display  " Reloaded!"
    
  • Splitting Panes sử dụng | với '-` cho dễ nhớ

    # splitting panes with | and -
    bind | split-window -h
    bind - split-window -v
    
  • Mặc định tmux không thể sử dụng chuột để chọn window hay panes, dùng câu lệnh sau để thay đổi điều đó

    # Mouse support if you want
    set -g mouse on
    
  • Remapping Movement Keys

    # moving between panes with Prefix h,j,k,l
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    
  • Resizing Panes ( mỗi lần với kích thước 5%)

    # Pane resizing panes with Prefix H,J,K,L
    bind -r H resize-pane -L 5
    bind -r J resize-pane -D 5
    bind -r K resize-pane -U 5
    bind -r L resize-pane -R 5
    
  • Configuring Colors

    # Set the default terminal mode to 256color mode
    set -g default-terminal "screen-256color"
    

Sau khi tùy biến, ta có thể xem danh cách key bindings: prefix ?.

image.png

Một công cụ tương tự tmux được cài đặt trong hầu hết các hệ thống UNIX là screen, bạn có thể đọc hướng dẫn về Screen.

Kết luận

Bài viết đã dài, cảm ơn các bạn đã đọc tới đây, nay chạy kpi để có huy hiệu may fest 2023 =)), nếu trong thời gian rảnh mình sẽ viết tiếp các phần như buffers trong tmux cũng như cài đặt các plugin cho tmux. Hẹn gặp lại các bạn trong các bài tiếp theo của mình.

Tài liệu tham khảo


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.