Bạn đã bao giờ cảm thấy khó chịu khi kết nối Linux từ xa bị ngắt giữa chừng trong một tác vụ tốn thời gian? Hoặc có thể bạn muốn chạy nhiều phiên làm việc chỉ với một kết nối SSH duy nhất? Nếu vậy, một bộ ghép kênh terminal (terminal multiplexer) chính là giải pháp mà bạn đang tìm kiếm. Đây là một công cụ mạnh mẽ, cho phép bạn tạo và quản lý nhiều phiên terminal ảo trong cùng một cửa sổ terminal vật lý. Đặc biệt, đối với những người thường xuyên làm việc trên các máy chủ từ xa, terminal multiplexer không chỉ giúp duy trì tiến độ công việc bất kể sự cố mạng mà còn tối ưu hóa quy trình làm việc đa nhiệm. Bài viết này sẽ đi sâu vào định nghĩa, lợi ích, các công cụ phổ biến và hướng dẫn chi tiết cách sử dụng một trong những terminal multiplexer hiệu quả nhất hiện nay.
Terminal Multiplexer là gì?
Terminal multiplexer là một tiện ích cho phép bạn “ghép kênh” một terminal, tức là sử dụng một cửa sổ terminal như thể nó là nhiều terminal khác nhau. Khái niệm này tương tự như việc sử dụng nhiều cửa sổ terminal riêng biệt hoặc các terminal theo tab, nhưng điểm khác biệt then chốt là tất cả đều hoạt động bên trong một terminal duy nhất. Trên các máy tính hiện đại, tiện ích này thường được triển khai trong trình giả lập terminal Linux. Tuy nhiên, ý tưởng về terminal multiplexer đã có từ lâu, khi cách chính để tương tác với máy tính là thông qua các terminal văn bản chuyên dụng.
Một terminal multiplexer cho phép bạn chạy các lệnh trong một terminal ảo, đồng thời có thể dễ dàng chuyển sang một terminal khác để thực hiện các lệnh khác mà không làm gián đoạn công việc hiện tại. Điều này tạo ra một môi trường làm việc vô cùng linh hoạt và hiệu quả, đặc biệt khi bạn cần giám sát nhiều tác vụ cùng lúc hoặc chuyển đổi nhanh chóng giữa các dự án.
Tại sao nên sử dụng Terminal Multiplexer?
Với khả năng chạy nhiều cửa sổ hoặc tab terminal trên các hệ điều hành hiện đại, nhiều người có thể tự hỏi tại sao phải bận tâm đến một terminal multiplexer. Câu trả lời nằm ở những lợi ích vượt trội mà nó mang lại, đặc biệt trong các tình huống làm việc từ xa hoặc cần duy trì liên tục các phiên làm việc.
Nếu bạn đã từng đăng nhập vào một máy từ xa, chẳng hạn như máy chủ web hoặc máy chủ phòng thí nghiệm (home lab server) của riêng mình, và gặp phải sự cố mạng, bạn sẽ nhận ra ngay ưu điểm của một terminal multiplexer. Trong một phiên SSH thông thường, nếu kết nối bị gián đoạn, SSH sẽ bỏ qua các thao tác gõ phím của bạn ngay cả khi mạng trở lại. Bạn sẽ buộc phải chấm dứt và khởi động lại kết nối SSH. Điều này đặc biệt phiền toái nếu bạn đang ở giữa một thao tác phức tạp như cập nhật gói phần mềm hoặc cài đặt một ứng dụng lớn, bởi vì bạn sẽ phải bắt đầu lại từ đầu. SSH ban đầu được thiết kế cho các kết nối có dây, ổn định.
Các công cụ như Mosh có thể giải quyết phần lớn vấn đề này, nhưng terminal multiplexer thực sự tỏa sáng trong các kết nối từ xa. Bạn có thể bắt đầu một phiên làm việc, và nếu kết nối bị ngắt, bạn có thể kết nối lại và quay lại phiên làm việc đó như chưa từng có chuyện gì xảy ra. Bạn có thể bắt đầu một tiến trình chạy dài, sau đó tách (detach) phiên đó ra khỏi terminal hiện tại, đi làm việc khác, rồi kết nối lại (reattach) và tiếp tục công việc từ nơi bạn đã dừng. Chừng nào máy chủ chưa được khởi động lại và phiên làm việc của bạn vẫn tồn tại, bạn có thể truy cập và thoát khỏi nó bất cứ lúc nào mình muốn.
Hình ảnh giao diện tmux với tùy chỉnh màu sắc, chạy ứng dụng IRC Weechat trên một tài khoản shell, minh họa việc duy trì phiên làm việc từ xa.
Nếu bạn từng sử dụng IRC và thắc mắc tại sao một số người dùng dường như không bao giờ đăng xuất, đó không phải vì họ không ngủ hay không đi làm/đi học. Cách chính mà họ duy trì kết nối là chạy một terminal multiplexer trên một máy chủ shell. Điều này cho phép họ duy trì trạng thái “idling” (duy trì kết nối IRC mà không cần tương tác liên tục).
Một lý do rõ ràng khác để sử dụng terminal multiplexer là khả năng có nhiều cửa sổ terminal. Điều này trở nên hữu ích khi làm việc với các kết nối từ xa, bởi vì hầu hết người dùng Linux trên máy tính để bàn thường sử dụng hệ thống cửa sổ như X11 hoặc Wayland, vốn đã cho phép họ chạy nhiều cửa sổ terminal. Trong trường hợp cần thiết, họ có thể sử dụng các console ảo để chạy các phiên dòng lệnh toàn màn hình.
Nếu không có terminal multiplexer được cài đặt trên máy từ xa, cách duy nhất để thực hiện đa nhiệm qua SSH là sử dụng tính năng kiểm soát công việc (job control) hoặc mở nhiều kết nối SSH riêng biệt. Việc kiểm soát công việc có thể phức tạp, trong khi mở nhiều kết nối sẽ tiêu tốn nhiều tài nguyên hơn. Do đó, sử dụng cùng một kết nối khi có thể sẽ hiệu quả hơn nhiều. Ví dụ, nếu bạn cần chạy một lệnh và đồng thời tham khảo trang hướng dẫn (manual page), bạn có thể có một shell trong một cửa sổ và trang hướng dẫn trong cửa sổ khác. Nhiều terminal multiplexer thậm chí còn cho phép bạn hiển thị nhiều cửa sổ trên cùng một màn hình, tương tự như việc sử dụng một trình quản lý cửa sổ dạng lát gạch (tiling window manager).
Nhìn chung, terminal multiplexer là lựa chọn tối ưu nếu bạn thực hiện nhiều công việc trên các máy từ xa như máy chủ web, tài khoản shell hoặc máy chủ phòng thí nghiệm. Nếu bạn chủ yếu sử dụng máy tính để bàn, việc dùng nhiều cửa sổ hoặc tab terminal có thể đủ. Còn nếu bạn muốn các cửa sổ terminal được sắp xếp gọn gàng, hãy cân nhắc sử dụng một trình quản lý cửa sổ dạng lát gạch.
Các Terminal Multiplexer phổ biến hiện nay
Có một số terminal multiplexer nổi bật mà bạn có thể sử dụng trên hệ thống Linux của mình.
Giao diện GNU Screen hoạt động trên Ubuntu WSL, hiển thị môi trường dòng lệnh truyền thống.
GNU Screen: Đây là một trong những bộ ghép kênh terminal lâu đời nhất, ra đời trước cả Linux. GNU Screen đã tồn tại từ năm 1987. Ngay cả vào thập niên 80, với sự phát triển của các máy trạm (workstations), nhiều người vẫn phải làm việc với các terminal dựa trên ký tự. Screen đã giúp cuộc sống của nhiều người dùng này dễ dàng hơn bằng cách cho phép chia nhỏ màn hình chật hẹp thành nhiều cửa sổ terminal. Nó cũng giới thiệu ý tưởng về việc tách (detaching) và kết nối lại (reattaching) các phiên làm việc.
Đây là một lợi ích lớn cho những người kết nối vào các hệ thống từ xa qua modem. GNU Screen gần như không có đối thủ cho đến khi một số công cụ cạnh tranh xuất hiện vào thế kỷ 21.
Giao diện tmux hiển thị một phiên shell trong môi trường Ubuntu WSL, minh họa sự đơn giản và hiệu quả của công cụ.
tmux: Ban đầu được phát triển như một phần của dự án OpenBSD, tmux dường như đã chiếm lĩnh vị trí của GNU Screen như bộ ghép kênh terminal hàng đầu, được chuyển đổi sang hầu hết mọi hệ thống giống Unix. Sự đơn giản, khả năng tùy biến cao và hiệu suất vượt trội đã giúp tmux trở thành lựa chọn yêu thích của nhiều quản trị viên hệ thống và nhà phát triển.
Byobu, một bộ ghép kênh terminal, đang chạy trên Ubuntu trong WSL, với các thanh trạng thái được tối ưu hóa.
Byobu: Byobu ban đầu là một bản fork của GNU Screen được tạo ra cho Ubuntu. Tên gọi này bắt nguồn từ một từ tiếng Nhật có nghĩa là “màn hình trang trí gấp”. Đúng với mục đích sử dụng hiện đại của terminal multiplexer cho các hệ thống từ xa, Byobu ban đầu được thiết kế chủ yếu để sử dụng trên các máy chủ Ubuntu. Theo thời gian, Byobu đã chuyển hướng sang chủ yếu tăng cường các tính năng của tmux thay vì GNU Screen, giúp người dùng dễ dàng sử dụng tmux hơn với các phím tắt và cấu hình mặc định tiện lợi.
Hướng dẫn sử dụng Terminal Multiplexer (ví dụ với tmux)
Trước khi sử dụng một terminal multiplexer, bạn cần cài đặt nó. Chúng ta sẽ cùng tìm hiểu cách sử dụng tmux, một lựa chọn phổ biến và mạnh mẽ.
tmux được hỗ trợ rộng rãi trên hầu hết các trình quản lý gói của các bản phân phối Linux lớn. Dưới đây là ví dụ cách cài đặt trên Debian/Ubuntu:
sudo apt install tmux
Sau khi cài đặt tmux, bạn có thể khởi động nó từ dòng lệnh:
tmux
Phiên làm việc tmux với nhiều cửa sổ (windows) đang hoạt động, hiển thị thanh trạng thái ở phía dưới với danh sách các cửa sổ.
Trong tmux, bạn sẽ thấy một phiên shell mới. Bạn có thể nhập lệnh vào đó như một phiên shell thông thường. Để đưa ra các lệnh cho tmux, bạn cần sử dụng tiền tố Ctrl+b.
- Để tạo một cửa sổ terminal mới, bạn nhấn Ctrl+b, sau đó nhấn c. Thao tác này sẽ mở một cửa sổ terminal mới trong tmux và chuyển sang cửa sổ đó. Các cửa sổ hiện có được liệt kê ở góc dưới cùng bên trái của cửa sổ terminal trên thanh trạng thái.
- Để chuyển đổi giữa các cửa sổ, bạn có thể nhấn Ctrl+b một lần nữa, sau đó nhấn số của cửa sổ bạn muốn di chuyển đến.
Cửa sổ tmux được chia ngang thành hai panel, minh họa khả năng đa nhiệm và sắp xếp không gian làm việc hiệu quả.
Bạn cũng có thể chia một cửa sổ hiện tại để có thêm các phiên terminal. Các phiên trong mỗi cửa sổ được gọi là “panes” (ngăn) trong tmux.
- Để chia cửa sổ theo chiều ngang, bạn nhấn Ctrl+b theo sau là dấu “ (nháy kép).
- Để chia cửa sổ theo chiều dọc, bạn nhấn Ctrl+b theo sau là phím % (phần trăm).
- Để chuyển đổi giữa các pane, bạn nhấn Ctrl+b theo sau là o.
- Để hoán đổi vị trí các pane, bạn nhấn Ctrl+b theo sau là O (chữ O in hoa).
Cửa sổ tmux được chia thành nhiều panel theo cả chiều dọc và ngang, tạo ra một không gian làm việc đa nhiệm phức tạp và linh hoạt.
Để tách (detach) một phiên làm việc, bạn nhấn Ctrl+b theo sau là d. Thao tác này sẽ đưa bạn trở lại shell gốc nhưng phiên tmux vẫn tiếp tục chạy ngầm.
Thông báo 'detached' hiển thị trong shell sau khi tách một phiên tmux, xác nhận phiên làm việc đã được giữ lại ở chế độ nền.
Để kết nối lại (reattach) sau khi đã tách phiên, bạn nhập lệnh này vào dấu nhắc lệnh:
tmux attach
Bạn có thể sao chép và dán giữa các phiên bằng cách vào “chế độ sao chép” (copy mode), mặc dù đôi khi việc sử dụng các chức năng sao chép và dán gốc trong hệ thống cửa sổ của bạn sẽ tiện lợi hơn.
Kết luận
Các bộ ghép kênh terminal có thể nghe có vẻ phức tạp, nhưng nếu bạn thường xuyên làm việc với các máy chủ Linux từ xa, chúng là những công cụ vô cùng hữu ích. Chúng không chỉ cho phép bạn chia một phiên terminal thành nhiều terminal ảo mà còn giúp bạn duy trì kết nối với máy chủ ngay cả khi kết nối mạng bị gián đoạn. Việc lựa chọn một terminal multiplexer như tmux có thể giúp các phiên làm việc trực tuyến của bạn hiệu quả hơn, ổn định hơn và thậm chí thú vị hơn. Hãy thử nghiệm và khám phá sức mạnh của các công cụ này để tối ưu hóa quy trình làm việc của bạn trên Linux!
Bạn có đang sử dụng terminal multiplexer nào không? Đâu là tính năng bạn yêu thích nhất? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới nhé!