2019-09-17 02:54:39 +00:00
# bottom
2020-03-20 15:06:12 +00:00
<!-- ALL - CONTRIBUTORS - BADGE:START - Do not remove or modify this section -->
2020-03-20 15:07:41 +00:00
[![All Contributors ](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square )](#contributors-)
2020-03-20 15:06:12 +00:00
<!-- ALL - CONTRIBUTORS - BADGE:END -->
2019-09-04 03:27:25 +00:00
2020-03-02 05:08:12 +00:00
[![Build Status ](https://travis-ci.com/ClementTsang/bottom.svg?token=1wvzVgp94E1TZyPNs8JF&branch=master )](https://travis-ci.com/ClementTsang/bottom)
[![crates.io link ](https://img.shields.io/crates/v/bottom.svg )](https://crates.io/crates/bottom)
2020-03-02 05:09:15 +00:00
[![tokei ](https://tokei.rs/b1/github/ClementTsang/bottom?category=code )](https://github.com/ClementTsang/bottom)
2019-09-15 02:29:40 +00:00
2020-02-22 05:41:55 +00:00
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 ](https://github.com/aksakalli/gtop ) and [gotop ](https://github.com/cjbassi/gotop ).
2019-09-04 03:27:25 +00:00
2020-02-21 04:26:07 +00:00
![Quick demo recording showing off searching, maximizing, and process killing. ](assets/summary_and_search.gif ) _Terminal: Kitty Terminal, Font: IBM Plex Mono, OS: Arch Linux. Theme based on [gruvbox ](https://github.com/morhetz/gruvbox ) (see [sample config ](./sample_configs/demo_config.toml ))._
2019-09-17 01:45:48 +00:00
2020-01-12 23:45:11 +00:00
## Features
Features of bottom include:
2020-02-17 02:12:31 +00:00
- CPU widget to show a visual representation of per-core (and optionally average) usage.
2020-01-12 23:45:11 +00:00
- 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.
2020-02-20 03:24:05 +00:00
- Flags to customize the display.
2020-02-12 02:16:43 +00:00
- Config file support for custom colours and default options.
2020-02-17 02:12:31 +00:00
- Maximizing of widgets of interest to take up the entire window.
2020-02-12 02:16:43 +00:00
2020-03-17 23:21:37 +00:00
- A minimal mode that focuses less on charts and more on data, similar to [htop ](https://hisham.hm/htop/ ).
2020-03-10 05:26:30 +00:00
2020-03-17 23:21:37 +00:00
- Zooming in/out by time to see more/less data.
2020-03-05 04:13:00 +00:00
2020-02-20 02:32:47 +00:00
More details about each widget and compatibility can be found [here ](./docs/widgets.md ).
2020-01-12 23:45:11 +00:00
2020-02-21 04:33:23 +00:00
## Config files
2020-02-21 04:26:07 +00:00
For information about config files, see [this document ](./docs/config.md ) for more details, and this [config ](./sample_configs/demo_config.toml ) for an example.
2020-02-20 03:24:05 +00:00
2019-09-09 04:09:58 +00:00
## Installation
2019-09-05 22:28:54 +00:00
2020-03-13 05:07:24 +00:00
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.42 as of writing).
2020-02-23 04:49:45 +00:00
2020-02-26 04:28:56 +00:00
In addition to the below methods, you can manually build from the [Releases ](https://github.com/ClementTsang/bottom/releases ) page by downloading and building.
2020-01-19 07:02:44 +00:00
2020-02-26 04:28:56 +00:00
I officially support and test 64-bit versions of [Tier 1 ](https://forge.rust-lang.org/release/platform-support.html ) Rust targets. I will try to build and release 32-bit versions for Linux and Windows, but as of now, I will not be testing 32-bit for validity beyond building.
### Cargo
```bash
cargo install bottom
```
2020-02-22 05:41:55 +00:00
2019-09-09 04:09:58 +00:00
### Linux
2020-02-26 04:28:56 +00:00
Installation methods on a per-distro basis:
2020-01-10 03:31:49 +00:00
#### Arch Linux
2020-02-28 00:01:50 +00:00
You can get the release versions from the AUR by installing [`bottom` ](https://aur.archlinux.org/packages/bottom/ ) or [`bottom-bin` ](https://aur.archlinux.org/packages/bottom-bin/ ). For example, using `yay` :
2020-02-21 02:24:49 +00:00
```bash
yay bottom
2020-03-08 05:35:01 +00:00
# Or
2020-02-28 00:01:50 +00:00
yay bottom-bin
2020-02-21 02:24:49 +00:00
```
2020-01-05 00:20:54 +00:00
2020-02-22 23:44:34 +00:00
#### Debian (and anything based on it, like Ubuntu)
2020-02-22 23:38:18 +00:00
2020-02-26 04:28:56 +00:00
A `.deb` file is provided on each [release ](https://github.com/ClementTsang/bottom/releases/latest ):
2020-02-22 23:38:18 +00:00
```bash
2020-02-25 17:28:48 +00:00
curl -LO https://github.com/ClementTsang/bottom/releases/download/0.2.2/bottom_0.2.2_amd64.deb
sudo dpkg -i bottom_0.2.2_amd64.deb
2020-02-22 23:38:18 +00:00
```
2019-09-09 04:09:58 +00:00
### Windows
2020-03-08 05:35:01 +00:00
You can get release versions via [Chocolatey ](https://chocolatey.org/packages/bottom/ ):
2020-02-22 20:00:17 +00:00
```bash
2020-03-08 05:35:01 +00:00
choco install bottom
# Or
2020-03-13 04:47:10 +00:00
choco install bottom --version=0.2.2 # Version number may be required for newer releases
2020-02-22 20:00:17 +00:00
```
2019-09-09 04:09:58 +00:00
2019-12-17 07:11:16 +00:00
### macOS
2019-09-09 04:09:58 +00:00
2020-02-21 02:24:49 +00:00
You can get release versions using Homebrew:
```bash
2020-03-03 05:59:03 +00:00
brew tap clementtsang/bottom
brew install bottom
2020-02-21 02:24:49 +00:00
# Or
2020-03-03 05:59:03 +00:00
brew install clementtsang/bottom/bottom
2020-02-21 02:24:49 +00:00
```
2019-09-08 05:28:03 +00:00
2020-01-03 01:31:58 +00:00
## Usage
2019-10-10 22:05:26 +00:00
2020-01-10 04:36:24 +00:00
Run using `btm` .
2019-09-17 02:39:57 +00:00
### Command line options
2019-12-16 07:40:35 +00:00
- `-h` , `--help` shows the help screen and exits.
2019-09-17 02:39:57 +00:00
2020-02-05 01:05:07 +00:00
- `-a` , `--avg_cpu` enables also showing the average CPU usage in addition to per-core CPU usage.
2019-09-25 05:54:38 +00:00
2019-12-16 07:40:35 +00:00
- `-m` , `--dot-marker` uses a dot marker instead of the default braille marker.
2019-09-17 02:39:57 +00:00
2020-02-05 01:05:07 +00:00
- Temperature units (you can only use one at a time):
2019-09-17 02:39:57 +00:00
2020-02-05 01:05:07 +00:00
- `-c` , `--celsius` displays the temperature type in Celsius. This is the default.
2019-09-17 02:39:57 +00:00
2020-02-05 01:05:07 +00:00
- `-f` , `--fahrenheit` displays the temperature type in Fahrenheit.
- `-k` , `--kelvin` displays the temperature type in Kelvin.
2019-09-17 02:39:57 +00:00
2019-09-25 05:34:33 +00:00
- `-v` , `--version` displays the version number and exits.
2019-09-17 02:39:57 +00:00
2020-03-09 01:56:30 +00:00
- `-r <RATE>` , `--rate <RATE>` will set the refresh rate in _milliseconds_ . Lowest it can go is 250ms, the highest it can go is 2< sup > 64</ sup > - 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.
2019-09-17 02:39:57 +00:00
2019-12-28 06:21:49 +00:00
- `-l` , `--left_legend` will move external table legends to the left side rather than the right side. Right side is default.
2020-02-11 05:34:22 +00:00
- `-u` , `--current_usage` will make a process' CPU usage be based on the current total CPU usage, rather than assuming 100% CPU usage.
2020-01-01 03:24:54 +00:00
2020-01-18 00:59:01 +00:00
- `-g` , `--group` will group together processes with the same name by default (equivalent to pressing `Tab` ).
2020-02-05 01:05:07 +00:00
- `-S` , `--case_sensitive` will default to matching case.
2020-02-03 04:20:53 +00:00
2020-02-05 01:05:07 +00:00
- `-W` , `--whole` will default to searching for the world word.
2020-02-03 04:20:53 +00:00
2020-02-05 01:05:07 +00:00
- `-R` , `--regex` will default to using regex.
2020-02-02 04:49:44 +00:00
2020-02-14 08:39:37 +00:00
- `--cpu_default` , `--memory_default` , `--disk_default` , `--temperature_default` , `--network_default` , `--process_default` will select the corresponding widget on startup. By default the process widget is selected.
2020-02-14 02:36:49 +00:00
2020-03-17 23:21:37 +00:00
- `-s` , `--show_disabled_data` will show data entries in the chart legends even if the lines for that entry are disabled.
2020-02-17 17:07:43 +00:00
2020-03-05 07:09:29 +00:00
- `-C` , `--config` takes in a file path leading to a TOML file. If the file doesn't exist, one will be created.
2020-02-07 05:28:26 +00:00
2020-03-17 23:21:37 +00:00
- `-b` , `--basic` will enable basic mode, removing all charts from the main interface and condensing data.
2020-03-03 05:05:49 +00:00
2020-03-17 23:21:37 +00:00
- `-t` , `--default_time_value` will set the default time interval charts will display to (in milliseconds). Lowest is 30 seconds, defaults to 60 seconds.
2020-03-09 01:56:30 +00:00
2020-03-17 23:21:37 +00:00
- `-d` , `--time_delta` will set the amount each zoom in/out action will change the time interval of a chart (in milliseconds). Lowest is 1 second, defaults to 15 seconds.
2020-03-09 01:56:30 +00:00
2019-12-22 22:37:07 +00:00
### Keybindings
2019-09-17 01:45:48 +00:00
#### General
2020-01-12 20:41:27 +00:00
- `q` , `Ctrl-c` to quit. Note if you are currently in the search widget, `q` will not work so you can still type.
2019-10-10 22:01:23 +00:00
2020-02-20 03:21:18 +00:00
- `Esc` to close a dialog window, widget, or exit maximized mode.
2020-03-17 23:21:37 +00:00
- `Ctrl-r` to reset the screen and all collected data.
2019-09-17 01:45:48 +00:00
2019-10-10 02:50:36 +00:00
- `f` to freeze the screen from updating with new data. Press `f` again to unfreeze. Note that monitoring will still continue in the background.
2019-10-10 02:34:09 +00:00
2020-03-17 23:21:37 +00:00
- `Ctrl/Shift` -arrow or `H/J/K/L` to navigate between widgets. **Note that on macOS, some keybindings may conflict with existing ones; `H/J/K/L` should work however.**
2019-09-25 20:43:13 +00:00
2020-02-20 03:21:18 +00:00
- `Up` or `k` and `Down` or `j` scrolls through the list if the widget is a table (Temperature, Disks, Processes).
2019-10-10 02:00:10 +00:00
2019-10-10 02:50:36 +00:00
- `?` to get a help screen explaining the controls. Note all controls except `Esc` to close the dialog will be disabled while this is open.
2019-09-17 01:45:48 +00:00
2020-01-05 00:41:32 +00:00
- `gg` or `Home` to jump to the first entry of the current table.
2020-01-03 05:00:05 +00:00
2020-01-12 18:15:35 +00:00
- `G` (`Shift-g`) or `End` to jump to the last entry of the current table.
2020-01-03 05:00:05 +00:00
2020-02-20 03:21:18 +00:00
- `Enter` on a widget to maximize the widget.
2020-03-10 05:51:11 +00:00
- `+` to zoom in (reduce time interval, smallest is 30 seconds).
- `-` to zoom out (increase time interval, largest is 10 minutes).
- `=` to reset zoom.
2020-02-17 01:21:42 +00:00
#### CPU
2020-03-17 23:21:37 +00:00
- `/` to allow for enabling/disabling showing certain cores on the chart with `Space` .
2020-02-17 01:21:42 +00:00
2020-01-03 05:00:05 +00:00
#### Processes
2019-09-17 01:45:48 +00:00
2020-03-17 23:21:37 +00:00
- `dd` to kill the selected process.
2019-09-17 01:45:48 +00:00
2019-09-25 05:34:33 +00:00
- `c` to sort by CPU usage. Sorts in descending order by default. Press again to reverse sorting order.
2019-09-17 01:45:48 +00:00
2019-09-25 05:34:33 +00:00
- `m` to sort by memory usage. Sorts in descending order by default. Press again to reverse sorting order.
2019-09-17 01:45:48 +00:00
2019-09-25 05:34:33 +00:00
- `p` to sort by PID. Sorts in ascending order by default. Press again to reverse sorting order.
2019-09-17 01:45:48 +00:00
2019-09-25 05:34:33 +00:00
- `n` to sort by process name. Sorts in ascending order by default. Press again to reverse sorting order.
2019-09-17 01:45:48 +00:00
2020-03-17 23:21:37 +00:00
- `Tab` to group together processes with the same name. This disables PID sorting. `dd` will now kill all processes covered by that name.
2020-01-09 03:54:14 +00:00
2020-01-12 23:45:11 +00:00
- `Ctrl-f` or `/` to open the search widget.
2020-02-20 02:36:17 +00:00
#### Search widget
2020-01-12 23:45:11 +00:00
2020-02-03 04:20:53 +00:00
- `Tab` to switch between searching for PID and name respectively.
2020-02-20 03:21:18 +00:00
- `Esc` to close.
2020-02-03 04:20:53 +00:00
2020-02-20 03:21:18 +00:00
- `Ctrl-a` and `Ctrl-e` to jump to the start and end of the search bar respectively.
2020-01-12 23:45:11 +00:00
2020-02-20 03:21:18 +00:00
- `Ctrl-u` to clear the current search query.
2020-01-18 00:59:01 +00:00
2020-02-20 03:24:05 +00:00
- `Backspace` to delete one character behind the current cursor position.
2020-01-18 00:59:01 +00:00
2020-02-20 03:24:05 +00:00
- `Delete` to delete one character at the current cursor position.
2020-01-22 00:28:39 +00:00
2020-02-20 03:24:05 +00:00
- `Left` and `Right` arrow keys to move the cursor within the search bar.
2020-02-17 05:20:31 +00:00
2020-02-26 02:24:26 +00:00
- `Alt-c/F1` to toggle ignoring case.
2020-02-17 05:20:31 +00:00
2020-02-26 02:24:26 +00:00
- `Alt-w/F2` to toggle matching the entire word.
2020-02-17 05:20:31 +00:00
2020-02-26 02:24:26 +00:00
- `Alt-r/F3` to toggle using regex.
2020-02-17 05:20:31 +00:00
2020-01-12 23:45:11 +00:00
Note that `q` is disabled while in the search widget.
2020-01-12 19:25:47 +00:00
2019-12-17 07:11:16 +00:00
### Mouse actions
2019-09-17 01:45:48 +00:00
2020-01-22 00:28:39 +00:00
- Scrolling with the mouse will scroll through the currently selected list if the widget is a scrollable table.
2019-12-31 02:05:39 +00:00
2020-03-17 23:21:37 +00:00
- Scrolling on a chart will zoom in (scroll up) or zoom out (scroll down).
2020-03-09 04:52:29 +00:00
2020-03-06 04:54:39 +00:00
## Bugs and Requests
2020-03-08 05:35:01 +00:00
Spot an bug? Have an idea? Leave an issue that explains what you want in detail and I'll try to take a look.
2020-03-06 04:54:39 +00:00
2020-02-26 13:09:03 +00:00
## Contribution
2020-02-28 06:12:45 +00:00
Contribution is welcome! Just submit a PR. Note that I develop and test on stable Rust.
2020-02-26 13:09:03 +00:00
If you spot any issue with nobody assigned to it, or it seems like no work has started on it, feel free to try and do it!
2020-03-06 04:54:39 +00:00
### Contributors
Thanks to those who have contributed:
- [shilangyu ](https://github.com/shilangyu )
2020-03-20 01:04:38 +00:00
- [mqudsi ](https://github.com/mqudsi )
2020-03-06 04:54:39 +00:00
2019-12-17 07:11:16 +00:00
## Thanks, kudos, and all the like
2019-09-04 03:27:25 +00:00
2020-01-22 00:28:39 +00:00
- This project is very much inspired by both [gotop ](https://github.com/cjbassi/gotop ) and [gtop ](https://github.com/aksakalli/gtop ).
2019-09-25 05:34:33 +00:00
2020-03-08 17:56:18 +00:00
- Basic mode inspired by [htop's ](https://hisham.hm/htop/ ) design.
2020-03-08 05:35:01 +00:00
2020-02-20 00:56:38 +00:00
- This application was written with the following libraries, and would otherwise not be possible:
2020-02-02 23:06:19 +00:00
- [backtrace ](https://github.com/rust-lang/backtrace-rs )
2019-09-25 05:34:33 +00:00
- [chrono ](https://github.com/chronotope/chrono )
- [clap ](https://github.com/clap-rs/clap )
- [crossterm ](https://github.com/TimonPost/crossterm )
2020-02-21 04:10:52 +00:00
- [dirs ](https://github.com/soc/dirs-rs )
2019-09-25 05:34:33 +00:00
- [fern ](https://github.com/daboross/fern )
- [futures-rs ](https://github.com/rust-lang-nursery/futures-rs )
- [heim ](https://github.com/heim-rs/heim )
2020-02-02 23:06:19 +00:00
- [lazy_static ](https://github.com/rust-lang-nursery/lazy-static.rs )
2019-09-25 05:34:33 +00:00
- [log ](https://github.com/rust-lang-nursery/log )
2020-03-13 05:07:24 +00:00
- [serde ](https://github.com/serde-rs/serde )
2019-09-25 05:34:33 +00:00
- [sysinfo ](https://github.com/GuillaumeGomez/sysinfo )
2020-02-09 03:38:55 +00:00
- [toml-rs ](https://github.com/alexcrichton/toml-rs )
2020-03-13 05:07:24 +00:00
- [typed-builder ](https://github.com/idanarye/rust-typed-builder )
2019-12-13 04:03:34 +00:00
- [tui-rs ](https://github.com/fdehau/tui-rs )
2020-02-26 03:23:17 +00:00
- [unicode-segmentation ](https://github.com/unicode-rs/unicode-segmentation )
2020-02-27 15:21:03 +00:00
- [unicode-width ](https://github.com/unicode-rs/unicode-width )
2019-09-25 05:34:33 +00:00
- [winapi ](https://github.com/retep998/winapi-rs )
2020-03-20 15:06:12 +00:00
## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL - CONTRIBUTORS - LIST:START - Do not remove or modify this section -->
<!-- prettier - ignore - start -->
<!-- markdownlint - disable -->
< table >
< tr >
< td align = "center" > < a href = "http://shilangyu.github.io" > < img src = "https://avatars3.githubusercontent.com/u/29288116?v=4" width = "100px;" alt = "" / > < br / > < sub > < b > Marcin Wojnarowski< / b > < / sub > < / a > < br / > < a href = "https://github.com/ClementTsang/bottom/commits?author=shilangyu" title = "Code" > 💻< / a > < / td >
2020-03-20 15:07:41 +00:00
< td align = "center" > < a href = "http://neosmart.net/" > < img src = "https://avatars3.githubusercontent.com/u/606923?v=4" width = "100px;" alt = "" / > < br / > < sub > < b > Mahmoud Al-Qudsi< / b > < / sub > < / a > < br / > < a href = "https://github.com/ClementTsang/bottom/commits?author=mqudsi" title = "Code" > 💻< / a > < / td >
2020-03-20 15:06:12 +00:00
< / tr >
< / table >
<!-- markdownlint - enable -->
<!-- prettier - ignore - end -->
<!-- ALL - CONTRIBUTORS - LIST:END -->
This project follows the [all-contributors ](https://github.com/all-contributors/all-contributors ) specification. Contributions of any kind welcome!