Bài đăng nổi bật

Redo log, undo log và binary log

Đây là ba loại log mà bạn đã từng nghe khi tiếp cận mysql. Trong các cơ sở dữ liệu quan hệ (RDBMS) khác, cũng sẽ có các thành phần có vai tr...

Thứ Sáu, 5 tháng 2, 2016

Nghịch tmux

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í.



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.



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] (attached)

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] (attached)

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ồ :)



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



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



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:

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

Không có nhận xét nào:

Đăng nhận xét