We've already learned how to use GNU Screen to manage multiple Terminal sessions. Today, we will see yet another well-known command-line utility named "Tmux", which is also used to manage multiple Terminal sessions. This guide explains what is Tmux and the Tmux commands usage with examples in Linux.
Table of Contents
1. What is Tmux?
Similar to GNU Screen, Tmux is also a Terminal multiplexer that allows us to create number of terminal sessions and run more than one programs or processes at the same time inside a single Terminal window.
Tmux is free, open source and cross-platform program that supports Linux, OpenBSD, FreeBSD, NetBSD and Mac OS X.
2. Install Tmux in Linux
Tmux is available in the official repositories of most Linux distributions.
To install Tmux in Alpine Linux, run:
$ sudo apk add tmux
On Arch Linux and its variants like EndeavourOS and Manjaro Linux, run the following command to install it.
$ sudo pacman -S tmux
On Debian, Ubuntu, Linux Mint, Pop_OS!:
$ sudo apt-get install tmux
On Fedora, RHEL, CentOS, AlmaLinux, Rocky Linux:
$ sudo dnf install tmux
Or,
$ sudo yum install tmux
On SUSE/openSUSE:
$ sudo zypper install tmux
Well, we have just installed Tmux. Let us go ahead and see some examples on how to use Tmux.
3. Tmux commands usage with examples
The default prefix shortcut to all commands in Tmux is Ctrl+b
. Just remember this keyboard shortcut when using Tmux.
Heads Up: The default prefix to all Screen commands is Ctrl+a.
3.1. Creating Tmux sessions
To create a new Tmux session and attach to it, run the following command from the Terminal:
$ tmux
Or,
$ tmux new
Once you are inside the Tmux session, you will see a green bar at the bottom as shown in the screenshot below.
It is very handy to verify whether you're inside a Tmux session or not.
3.2. Detaching from Tmux sessions
To detach from a current Tmux session, just press Ctrl+b
and d
. You don't need to press this both Keyboard shortcut at a time. First press "Ctrl+b"
and then press "d"
.
Once you're detached from a session, you will see an output something like below.
[detached (from session 0)]
3.3. Creating named sessions
If you use multiple sessions, you might get confused which programs are running on which sessions. In such cases, you can just create named sessions.
For example if you wanted to perform some activities related to web server in a session, just create the Tmux session with a custom name, for example "webserver" (or any name of your choice).
$ tmux new -s webserver
Here is the new named Tmux session.
As you can see in the above screenshot, the name of the Tmux session is webserver. This way you can easily identify which program is running on which session.
To detach, simply press Ctrl+b
and d
.
3.4. List Tmux sessions
To view the list of open Tmux sessions, run:
$ tmux ls
Sample output:
As you can see, I have two open Tmux sessions.
3.5. Creating detached sessions
Sometimes, you might want to simply create a session and don't want to attach to it automatically.
To create a new detached session named "ostechnix", run:
$ tmux new -s ostechnix -d
The above command will create a new Tmux session called "ostechnix", but won't attach to it.
You can verify if the session is created using tmux ls
command:
3.6. Attaching to Tmux sessions
You can attach to the last created session by running this command:
$ tmux attach
Or,
$ tmux a
If you want to attach to any specific named session, for example "ostechnix", run:
$ tmux attach -t ostechnix
Or, shortly:
$ tmux a -t ostechnix
3.7. Kill Tmux sessions
When you're done and no longer required a Tmux session, you can kill it at any time with command:
$ tmux kill-session -t ostechnix
To kill when attached, press Ctrl+b
and x
. Hit "y"
to kill the session.
You can verify if the session is closed with tmux ls
command.
To Kill Tmux server along with all Tmux sessions, run:
$ tmux kill-server
Be careful! This will terminate all Tmux sessions even if there are any running jobs inside the sessions without any warning.
When there were no running Tmux sessions, you will see the following output:
$ tmux ls no server running on /tmp/tmux-1000/default
3.8. Split Tmux Session Windows
Tmux has an option to split a single Tmux session window into multiple smaller windows called Tmux panes.
This way we can run different programs on each pane and interact with all of them simultaneously.
Each pane can be resized, moved and closed without affecting the other panes. We can split a Tmux window either horizontally or vertically or both at once.
3.8.1. Split panes horizontally
To split a pane horizontally, press Ctrl+b
and "
(single quotation mark).
Use the same key combination to split the panes further.
3.8.2. Split panes vertically
To split a pane vertically, press Ctrl+b
and %
.
3.8.3. Split panes horizontally and vertically
We can also split a pane horizontally and vertically at the same time. Take a look at the following screenshot.
First, I did a horizontal split by pressing Ctrl+b
"
and then split the lower pane vertically by pressing Ctrl+b
%
.
As you see in the above screenshot, I am running three different programs on each pane.
3.8.4. Switch between panes
To switch between panes, press Ctrl+b and Arrow keys (Left, Right, Up, Down).
3.8.5. Send commands to all panes
In the previous example, we run three different commands on each pane. However, it is also possible to run send the same commands to all panes at once.
To do so, press Ctrl+b
and type the following command and hit ENTER
:
:setw synchronize-panes
Now type any command on any pane. You will see that the same command is reflected on all panes.
3.8.6. Swap panes
To swap panes, press Ctrl+b
and o
.
3.8.7. Show pane numbers
Press Ctrl+b
and q
to show pane numbers.
3.8.8. Kill panes
To kill a pane, simply type exit
and ENTER
key. Alternatively, press Ctrl+b
and x
. You will see a confirmation message. Just press "y"
to close the pane.
4. Zoom in and Zoom out Tmux Panes
We can zoom Tmux panes to fit them into the full size of the current Terminal window for better text visibility and for viewing more of its contents.
It is useful when you need more space or focus on a specific task. After finishing that task, you can zoom out (unzoom) the Tmux pane back to its normal position. More details in the following link.
5. Autostart Tmux Sessions
It is always a good practice to run a long running process inside a Tmux session when working with remote systems via SSH.
Because, it prevents you from losing the control of the running process when the network connection suddenly drops.
One way to avoid this problem is to autostart Tmux sessions. For more details, refer the following link.
6. Setup Tmux Session Selection Menu
This is same as autorstarting tmux sessions method but with slightly improved functionality. By creating a tmux selection menu, we can easily attach to an existing session or create a new one. For more details, please check the following link.
7. Install Tmux Plugins with TPM
We can extend the functionality of Tmux using Plugins. However, manually downloading and installing each plugin can be a bit difficult. This is where Tmux Plugin Manager (TPM) comes in help. The following guide show you how to install and manage Tmux plugins using TPM in Linux.
8. Save and Restore Tmux Environments
By default, Tmux sessions will not persist across system reboots. This can be frustrating if you're running multiple sessions, windows, panes, and programs.
Of course, there are helpful tools that can make Tmux environments persistent across restarts, but they can be tricky to set up and maintain.
The following tutorial explains how to save and restore your Tmux sessions with minimal configuration.
Conclusion
In this guide, we have discussed Tmux commands usage with examples. At this stage, you will get a basic idea of Tmux command line utility and how to use Tmux to manage multiple Terminal sessions. For more details, refer man pages.
$ man tmux
Both GNU Screen and Tmux utilities can be very helpful when managing servers remotely via SSH. Learn Screen and Tmux commands thoroughly to manage your remote servers like a pro.
2 comments
Just Ctrl+D (analog of “exit”) for pane/session close. No need to kill somebody 😀
Very helpful man. Thank you for this.