Nghịch tmux
tmux
2
White

manhdung viết ngày 06/02/2016

Tmux - Một phần mềm nho nhỏ nhưng cực kỳ hữu ích. Lợi ích lớn nhất mà tmux đem lại là cho phép bạn tái truy cập lại một session sau khi kết nối bị mất. Giả sử tình huống như sau: Bạn đang thực hiện một long running action như import file sql có dung lượng lớn, rsync, scp data... Và đột nhiên kết nối ssh bị mất do network nhà bạn gặp trục trặc. Tiến trình import, rsync, scp vẫn hoạt động nhưng bạn không thể thấy nó đang diễn ra như thế nào. Làm cách nào để tái truy cập session đã mất. Tmux chính là thiên thần cứu rỗi bạn trong tình huống đó. Xin bạn chú ý, thiên thần này chỉ giúp bạn nếu bạn nhờ cậy trước khi thực hiện long running action. Nhưng thế cũng là tốt lắm rồi :D

Một điểm nữa tôi thấy tmux khá hấp dẫn là cho phép tạo nhiều window, mỗi window lại cho phép tạo nhiều pane. Tmux sẽ biến terminal của bạn trông rất ngầu. Rất tiện khi bạn dễ dàng thao tác trên nhiều cửa sổ. Tuy vậy, nếu bạn lạm dụng thì chúng lại khiến bạn rối trí.

alt text

Giờ thì chúng ta xem tmux thực hiện các phép màu của nó như thế nào

Cài đặt và khởi động

Cài đặt, đơn giản bạn chỉ cần gõ yum install tmux
Khởi động tmux session, cũng đơn giản bạn chỉ cần gõ tmux

Một số câu lệnh cơ bản

Ctrl + b được tmux gọi là bind-key

Ctrl + b " sẽ chia màn hình terminal thành hai nửa theo chiều ngang
Ctrl + b % sẽ chia màn hình terminal thành hai nửa theo chiều dọc
Ctrl +b, giữ và dùng arrow keys để thay đổi kích cỡ của pane
Ctrl + b c tạo một cửa sổ mới
Ctrl + b w danh sách cửa sổ
Ctrl + b n di chuyển đến cửa sổ tiếp theo
Ctrl + b p di chuyển về cửa sổ trước đó.
Ctrl + b [ chuyển vào chế độ copy mode để cho phép bạn copy text trong một window hoặc một pane.
Ctrl + b ? liệt kê tất cả các bind key
Ctrl + b & Kill window, kéo theo toàn bộ các pane trong window đó.
Ctrl + b x Kill pane, xóa một pane trong một window
Ctrl +b d detach tmux session

Các window khi được tạo ra bằng Ctrl + b c sẽ được đánh số từ 0. Bạn có thể dùng Ctrl + c 0 hoặc Ctrl + c 9 để di chuyển đến các window có số tương ứng. Với những window từ 10 bạn sẽ nên đặt tên cho nó để tiện truy cập.

alt text

Tái truy cập tmux session

Giờ là phần thú vị nhất của tmux. Tất cả window, pane mà bạn tạo ra nằm trong tmux session. Khi thao tác từ xa trên server bạn bỗng nhiên bị mất kết nối network hoặc có thể bạn nhỡ tay đóng terminal (tương đương với việc bạn detach tmux session), tmux session vẫn nguyên vẹn. Truy cập lại server, bạn chạy lệnh

tmux ls
0: 16 windows (created Sat Feb 6 18:36:47 2016) 80x23

0 là số id cho tmux session. Hiện tại tôi có một tmux session. Trong session đó tôi có 16 windows.
Tôi có thể tái truy cập tmux session này bằng cách:

tmux attach -t 0

Ở đây tôi tái truy cập vào tmux session 0. Bạn có thể có nhiều tmux session trên một máy. Bạn có thể hủy tmux session bằng cách:
tmux kill-session -t session_name hoặc session_id

Một số tiện ích khác

Để thân thiện hơn và cũng dễ quản lý hơn, tôi sẽ đặt lại tên cho tmux session
Ctrl + b : Truy cập vào chế độ command của tmux, tôi gõ rename-session niceday

Khi đó tmux ls
niceday: 16 windows (created Sat Feb 6 18:36:47 2016) 80x23

Và bạn phải tmux attach -t niceday để tái truy cập lại

Nếu muốn đặt tên cho window, bạn có thể dùng ctrl + b ,
Và dùng ctrl +b f để tìm window

tmux cũng thiết kế ngầm một big clock, bạn có thể dùng ctrl + b t để xem đồng hồ :)

alt text

Thay đổi tmux bind-key

Mặc định tmux dùng bind-key là Ctrl + b, tôi sẽ thử đổi sang Ctrl + a

vim ~/.tmux.conf

set -g prefix C-a
unbind C-b
bind C-a send-prefix

Bạn phải kill tất cả các tmux session hiện tại. Sau đó, thay đổi bind-key sẽ được áp dụng với các tmux session mới.

Sharing screen dùng tmux

Với hai terminal, cùng một account thì đơn giản chỉ cần hai bước:

Ở terminal thứ nhất
tmux new-sesssion -s shared

Ở terminal thứ hai
tmux attach -t shared

shared không là keyword, bạn có thể dùng bất cứ session-name nào cũng được.

Cả hai terminal khi đó đều nhận keyboard. Để các terminal attach chỉ có quyền xem, bạn dùng
tmux attach -t shared -r

alt text

Với hai terminal của hai account khác nhau:

Ở terminal thứ nhất, trong account root

tmux -S /tmp/shareds new -s shared

Tương tự, /tmp/shareds cũng không phải keyword, bạn có thể dùng file có tên bất kỳ.

Tạo user thứ hai: useradd admin

Tạo group chia sẻ: groupadd tmux_shared

Thêm root và admin vào chung tmux_shared:
usermod -a -G tmux_shared root
usermod -a -G tmux_shared admin

Kiểm tra lại:
cat /etc/group | grep tmux
tmux_shared:x:501:root,admin

[admin@localhost ~]$ groups
admin tmux_shared

[root@localhost ~]# groups
root tmux_shared

Dùng quyền quản trị gán quyền group tmux_shared lên /tmp/shareds
chown root:tmux_shared /tmp/shareds

ls -l
srwxrwx---. 1 root tmux_shared 0 Th02 6 20:35 shareds

Ở terminal thứ hai, trong account admin

tmux -S /tmp/shareds attach -t shared -r

Nếu bạn không thêm tham số -r thì admin sẽ có quyền chỉnh sửa như root vì đang truy cập vào tmux session của root qua socket chia sẻ /tmp/shareds

alt text

Như trên hình vẽ, tôi đang dùng tài khoản admin, mượn quyền root qua việc truy cập vào tmux session together của root để tạo folder test1 trong /root

Tham khảo

tmux cheatsheet

As configured in my dotfiles.

start new:

tmux

start new with session name:

tmux new -s myname

attach:

tmux a  #  (or at, or attach)

attach to named:

tmux a -t myname

list sessions:

tmux ls

kill session:

tmux kill-session -t myname

In tmux, hit the prefix ctrl+b and then:

Sessions

:new<CR>  new session
s  list sessions
$  name session

Windows (tabs)

c           new window
,           name window
w           list windows
f           find window
&           kill window
.           move window - prompted for a new number
:movew<CR>  move window to the next unused number

Panes (splits)

%  horizontal split
"  vertical split

o  swap panes
q  show pane numbers
x  kill pane
⍽  space - toggle between layouts

Window/pane surgery

:joinp -s :2<CR>  move window 2 into a new pane in the current window
:joinp -t :1<CR>  move the current pane into a new pane in window 1

Misc

d  detach
t  big clock
?  list shortcuts
:  prompt

Resources:

Notes:

  • You can cmd+click URLs to open in iTerm.

TODO:

  • Conf copy mode to use system clipboard. See PragProg book.

http://tmuxp.readthedocs.org/en/latest/about_tmux.html
https://www.howtoforge.com/sharing-terminal-sessions-with-tmux-and-screen

-Bản gốc trên blog cá nhân-
https://coffeecode101.blogspot.com/2016/02/nghich-tmux.html

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

manhdung

44 bài viết.
275 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
82 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết hơn 3 năm trước
82 11
White
48 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết hơn 2 năm trước
48 4
White
43 12
Trong phần 1, tôi đã giới thiệu về sơ lược rabbitmq, vai trò của rabbitmq trong hệ thống phân tán và hướng dẫn cài đặt. Trong phần này, tôi sẽ trìn...
manhdung viết hơn 3 năm trước
43 12
Bài viết liên quan
White
3 3
Sử dụng Terminal hiệu quả hơn với tmux (Link) 1. Cài đặt bash $ sudo E addaptrepository ppa:pirho/dev $ sudo aptget update $ sudo aptget install...
Manh Truong Tuan viết 2 năm trước
3 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
275 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!