bottom
A cross-platform graphical process/system monitor with a customizable interface and a multitude of features. Supports Linux, macOS, and Windows. Inspired by both gtop and gotop.
Terminal: Kitty Terminal, Font: IBM Plex Mono, OS: Arch Linux. Theme based on gruvbox (see sample config).
Features
Features of bottom include:
-
CPU widget to show a visual representation of per-core (and optionally average) usage.
-
Memory widget to show a visual representation of both RAM and SWAP usage.
-
Networks widget to show a log-based visual representation of network usage.
-
Sortable and searchable process widget. Searching supports regex, and you can search by PID and process name.
-
Disks widget to display usage and I/O per second.
-
Temperature widget to monitor detected sensors in your system.
-
Flags to customize the display.
-
Config file support for custom colours and default options.
-
Maximizing of widgets of interest to take up the entire window.
More details about each widget and compatibility can be found here.
Config files
For information about config files, see this document for more details, and this config for an example.
Installation
In all cases you can install the in-development version by cloning from this repo and using cargo build --release. This is built and tested with Rust Stable (1.41.0 as of writing).
In addition to the below methods, you can also get release versions using cargo install bottom, or manually building from the Releases page by downloading and building.
I officially support and test 64-bit variants. I will also build and release 32-bit variants for Linux and Windows, but I'm (currently) not testing whether they work.
Linux
Other installation methods based on distros are as follows:
Arch Linux
You can get the release versions from the AUR by installing bottom. For example:
yay bottom
Debian (and anything based on it, like Ubuntu)
A .deb file is provided on each release. For example:
curl -LO https://github.com/ClementTsang/bottom/releases/download/0.2.1/bottom_0.2.1_amd64.deb
sudo dpkg -i bottom_0.2.1_amd64.deb
Windows
You can get release versions via Chocolatey:
choco install bottom
macOS
You can get release versions using Homebrew:
$ brew tap clementtsang/bottom
$ brew install bottom
# Or
$ brew install clementtsang/bottom/bottom
Usage
Run using btm.
Command line options
-
-h,--helpshows the help screen and exits. -
-a,--avg_cpuenables also showing the average CPU usage in addition to per-core CPU usage. -
-m,--dot-markeruses a dot marker instead of the default braille marker. -
Temperature units (you can only use one at a time):
-
-c,--celsiusdisplays the temperature type in Celsius. This is the default. -
-f,--fahrenheitdisplays the temperature type in Fahrenheit. -
-k,--kelvindisplays the temperature type in Kelvin.
-
-
-v,--versiondisplays the version number and exits. -
-r <RATE>,--rate <RATE>will set the refresh rate in milliseconds. Lowest it can go is 250ms, the highest it can go is 2128 - 1. Defaults to 1000ms, and lower values may take more resources due to more frequent polling of data, and may be less accurate in some circumstances. -
-l,--left_legendwill move external table legends to the left side rather than the right side. Right side is default. -
-u,--current_usagewill make a process' CPU usage be based on the current total CPU usage, rather than assuming 100% CPU usage. -
-g,--groupwill group together processes with the same name by default (equivalent to pressingTab). -
-S,--case_sensitivewill default to matching case. -
-W,--wholewill default to searching for the world word. -
-R,--regexwill default to using regex. -
--cpu_default,--memory_default,--disk_default,--temperature_default,--network_default,--process_defaultwill select the corresponding widget on startup. By default the process widget is selected. -
-s,--show_disabled_datawill show data entries in the graph legends even if the lines for that entry are disabled. -
-C,--configtakes in a file path leading to a TOML file.
Keybindings
General
-
q,Ctrl-cto quit. Note if you are currently in the search widget,qwill not work so you can still type. -
Escto close a dialog window, widget, or exit maximized mode. -
Ctrl-rto reset the screen and reset all collected data. -
fto freeze the screen from updating with new data. Pressfagain to unfreeze. Note that monitoring will still continue in the background. -
Ctrl/Shift-arrow orH/J/K/Lto navigate between widgets. Note that on macOS, some keybindings may collide with existing ones;H/J/K/Lshould work however. -
UporkandDownorjscrolls through the list if the widget is a table (Temperature, Disks, Processes). -
?to get a help screen explaining the controls. Note all controls exceptEscto close the dialog will be disabled while this is open. -
ggorHometo jump to the first entry of the current table. -
G(Shift-g) orEndto jump to the last entry of the current table. -
Enteron a widget to maximize the widget.
CPU
/to allow for enabling/disabling showing certain cores withSpace.
Processes
-
ddto kill the selected process -
cto sort by CPU usage. Sorts in descending order by default. Press again to reverse sorting order. -
mto sort by memory usage. Sorts in descending order by default. Press again to reverse sorting order. -
pto sort by PID. Sorts in ascending order by default. Press again to reverse sorting order. -
nto sort by process name. Sorts in ascending order by default. Press again to reverse sorting order. -
Tabto group together processes with the same name. Disables PID sorting.ddwill now kill all processes covered by that name. -
Ctrl-for/to open the search widget.
Search widget
-
Tabto switch between searching for PID and name respectively. -
Escto close. -
Ctrl-aandCtrl-eto jump to the start and end of the search bar respectively. -
Ctrl-uto clear the current search query. -
Backspaceto delete one character behind the current cursor position. -
Deleteto delete one character at the current cursor position. -
LeftandRightarrow keys to move the cursor within the search bar. -
Alt-cto toggle ignoring case. -
Alt-mto toggle matching the entire word. -
Alt-rto toggle using regex.
Note that q is disabled while in the search widget.
Mouse actions
- Scrolling with the mouse will scroll through the currently selected list if the widget is a scrollable table.