tmux
tmux (Terminal MUltipleXer) is a powerful utility that I often use, particularly when managing GNU-Linux servers and macOS. It’s a great tool for managing multiple terminal sessions within a single SSH connection.
One of the primary reasons I use tmux
is it lets perform a variety of tasks simultaneously from a single terminal instance. This include managing web servers, accessing database consoles, monitoring system resources, and even writing code. All of this is accomplished without the need to constantly switch between different terminal windows or sessions, making tmux an indispensable tool in my toolbox.
Basic Usage
Running tmux
Starting tmux is straightforward. To initiate a new tmux session, you just type tmux
in your command line. This opens up a tmux-terminal session that operates identically to a regular one. You can run any terminal commands just as you would normally do.
To start a new tmux session, simply type:
tmux
tmux
also gives you the option to create named sessions, which can be useful for better organization and easier navigation. This can be achieved using the new
command followed by the -s
option.
tmux new -s <name>
The “<name>
” should be replaced with the desired session name.
Getting Out of tmux
If you want to leave tmux and keep the session running, you can detach from your session by pressing the CTRL
and b
keys simultaneously ( CTRL+b
) followed by the d
key. Detaching from a session returns you to the terminal you were in before starting tmux. This is useful for manually starting a server over ssh and keeping it running when you leave. tmux will persist after you terminate your ssh session.
Note that ( CTRL+b
) is called a prefix. The prefix tells tmux that you want to execute a tmux command and not a terminal command. In this case, d
is the detach command.
If you want to stop tmux instead of leaving it running in the background, you can terminate your current session by typing CTRL+b
, then :
, followed by kill-session
.
If you’re in a session with a single window and pane you can also terminate the session by typing
exit
Note that exit
is not the same as killing a session. If you have multiple windows or panels in a session, exit
will close the active panel (or window) and move you to the next one. When there are no more remaining panes or windows, tmux_will terminate the current session and return you to the terminal.
Connecting to an Existing tmux Session
You can connect to a running tmux server by typing
tmux attach # attach to a tmux session
tmux a # Same as attach
This works fine if there’s just one tmux session on your machine. You can check for existing sessions with the ls
command.
tmux ls
This gives you a list of session currently running under tmux
This will attach you to a session in tmux. You can pick a specific session with the -t
option
tmux attach -t <session name>
Windows and Panes
Simply running a single session can be useful, but the real power of tmux is its ability to mimic multiple terminals with windows and panes. A window takes up the entire view in a session and acts like a terminal. You can have multiple windows in a session and switch back and forth between them. Windows can also be subdivided into panes. Each pane also acts as a terminal.
Creating Windows
You can create a new window in an existing tmux session by typing CTRL+b
followed by c
key Once you create a new window, it’ll be displayed in the tmux status bar at the bottom of your terminal window In the above example, there are two windows: 0 and 1. The Asterisk to the right of “1:bash” indicates that window 1 is active. You can switch between windows by typing ‘CTRL+b’ followed by the number of the window you want to switch to.
Creating Panes
When you create a pane in a window, you’re splitting the current window (or pane) into two smaller panes. To create a vertical split, press CTRL+b
followed by the %
(percent) key If you want to split horizontally press CTRL+b
followed by the "
(double quote) key You can continue to split the panes horizontally and vertically as needed.
Window Navigation
As mentioned above CTRL+b
followed by a number key selects a window by number. You can also change windows by displaying a list of windows and their sessions. Type CTRL+b
followed by w
to show a list of windows and sessions: Note that the top pane lists the sessions by name and the windows in each session.
(0) - node: 3 windows
(1) ├─> 0: bash (1 panes) "BOOMSTICK"
(2) ├─> 1: bash- (1 panes) "BOOMSTICK"
(3) └─> 2: bash* (1 panes) "BOOMSTICK"
(4) - react: 2 windows
(5) ├─> 0: bash- (1 panes) "BOOMSTICK"
(6) └─> 1: bash* (1 panes) "BOOMSTICK"
(7) - scratch: 2 windows (attached)
(8) ├─> 0: bash- (1 panes) "BOOMSTICK"
(9) └─> + 1: man*Z (4 panes)
(M-a) - sql: 1 windows
(M-b) └─> 0: bash* (1 panes) "BOOMSTICK"
The leftmost column of the list has number and letters. You can select the window you want to switch to by pressing the key(s) corresponding to the window you want.
You can also use the Up and Down arrow keys to select a window. Press Enter
to switch to the selected window.
Pane Navigation
Pressing CTRL+b
followed by o
cycles the active panel through the panels in the current window.
You can also select panels by number by pressing CTRL+b
followed by q
. This numbers the panels: Press the number key corresponding to the panel you want to select.
Pane Layout
You can resize the active pane by typing CTRL+b
and then the colon key :
. This lets you type commands in the status bar. Type resize-pane
followed by -U
, -D
, -L
, or -R
to move the borders of your pane Up, Down, Left, or Right respectively.
resize-pane -U
:resize-pane -D
:resize-pane -L
:resize-pane -R
:resize-pane -U 5
:resize-pane -D 5
:resize-pane -L 5
:resize-pane -R 5 :
You can also resize panes with the arrow keys. Just type
CTRL+b
followed byALT+Up Arrow
to move the border upCTRL+b
follows byALT+Down Arrow
to move the border downCTRL+b
follows byALT+Left Arrow
to move the border leftCTRL+b
follows byALT+Right Arrow
to move the border right
Cut and Paste
You can copy and paste text between panels. This takes several steps:
- Switch to the pane you want to copy text from.
- Type
CTRL+b
followed by[
(left square bracket) to put the pane in copy mode - Use the arrow keys to position your cursor where you want to start the selection
- Type
CTRL+SPACE
to start the copy - Use the arrow keys to position your cursor where you want to end the selection
- Type
ALT+w
to copy the selected text to the tmux buffer - Switch to the pane you want to copy to
- Type
CTRL+b
followed by]
(right square bracket) to paste from the tmux buffer.
Styling
set-option -g pane-active-border-style "bg=colour208"
set-option -ag pane-active-border-style "fg=black"
set background of active window.
set -g window-active-style 'fg=colour250,bg=black'
turn off time
set-option -g status-right ""