Note
The master branch code and readme may include features that are not yet released. For the official, stable version and its documentation, please refer to the crates.io page.
- pleasing to the eye thanks to a nice table view
- filterable and sortable output
- interactive killing of processes
- json and custom formattable output
- from
netstat -tulpn
tosomo -l
- cross-platform support for Linux and macOS
- you can find all features further down
cargo install somo
Most of the time, you’ll want to run this with sudo
to see all processes and ports. To make that work, you can create a symlink so the binary can be run with root privileges:
sudo ln -s ~/.cargo/bin/somo /usr/local/bin/somo
sudo somo # this works now
Warning: This will install the cutting-edge development version and may be unstable or contain incomplete features.
cargo install --git https://github.com/theopfr/somo
If you use a Debian OS go to releases and download the latest .deb file.
yay -S somo
Warning: This will install the cutting-edge development version and may be unstable or contain incomplete features.
You can build it using Nix with Flakes:
nix build 'github:theopfr/somo?dir=nix'
sudo ./result/bin/somo
To run somo just type:
somo # or sudo somo
Click to see the somo --help summary!
A human-friendly alternative to netstat for socket and port monitoring on Linux and macOS.
Usage: somo [OPTIONS] [COMMAND]
Commands:
generate-completions Generate shell completions
generate-config-file Generate config file
help Print this message or the help of the given subcommand(s)
Options:
-k, --kill Display an interactive selection option after inspecting connections
--proto <PROTO> Deprecated: Use '--tcp' and '--udp' instead
-t, --tcp Include TCP connections
-u, --udp Include UDP connections
--ip <IP> Filter connections by remote IP address
--remote-port <REMOTE_PORT> Filter connections by remote port
-p, --port <PORT> Filter connections by local port
--program <PROGRAM> Filter connections by program name
--pid <PID> Filter connections by PID
--format <FORMAT> Format the output in a certain way, e.g., `somo --format "PID: {{pid}}, Protocol: {{proto}}, Remote Address: {{remote_address}}"`
--json Output in JSON
-o, --open Filter by open connections
-l, --listen Filter by listening connections
-e, --established Filter by established connections
--exclude-ipv6 Deprecated: Use '--ipv4' instead
-4, --ipv4 Get only IPv4 connections
-6, --ipv6 Get only IPv6 connections
-c, --compact Get compact table view
-r, --reverse Reverse order of the table
-s, --sort <SORT> Sort by column name [possible values: proto, local_port, remote_address, remote_port, program, pid, state]
--config-file Retrieve config file path
--no-config Ignore config file
-a, --annotate-remote-port Annotate remote port with service name and ephemeral tag
-h, --help Print help
-V, --version Print version
You can use the following flags to filter based on different attributes:
filter flag | description | value |
---|---|---|
--tcp, -t |
filter by TCP connections | - |
--udp, -u |
filter by UDP connections | - |
--proto |
deprecated – use --tcp / --udp instead |
tcp or udp |
--port, -p |
filter by a local port | port number, e.g 5433 |
--remote-port |
filter by a remote port | port number, e.g 443 |
--ip |
filter by a remote IP | IP address e.g 0.0.0.0 |
--program |
filter by a client program | program name e.g chrome |
--pid |
filter by a PID | PID number, e.g 10000 |
--open, -o |
filter by open connections | - |
--listen, -l |
filter by listening connections | - |
--established, -e |
filter by established connections | - |
--exclude-ipv6 |
deprecated – use --ipv4 instead (mutually exclusive with --ipv6 ) |
- |
--ipv4, -4 |
filter by IPv4 connections | - |
--ipv6, -6 |
filter by IPv6 connections | - |
To get a smaller, more compact table use the --compact, -c
flag.
With the --kill, -k
flag you can choose to kill a process after inspecting the connections using an interactive selection.
Using the --json
flag you can choose to retrieve the connection data in JSON format.
You can also define a custom output format using the --format
flag, for example:
somo --format "PID: {{pid}}, Protocol: {{proto}}, Remote Address: {{remote_address}}" # attributes must be specified in snake_case
In the format-string, the attributes have to be specified in snake_case.
The --sort, -s
flag can be used to sort the table after a specific column ascending. For example:
somo --sort pid # column names must be specified in snake_case
To get a descending order, you can use the --reverse, -r
flag.
You can create a config file that defines flags to be automatically applied every time you run somo
.
- run
somo generate-config-file
to create the file - run
somo --config-file
to print the path to the config file - run
somo --no-config
to ignore all default flags
For example, if your config file looks like this:
# View compact version of the table
--compact
# Sort by PID
--sort=pid
then somo
will always show the table in compact mode, sorted by PID.
When using the --annotate-remote-port, -a
flag, the table will display the corresponding service names for the listed ports as defined in the IANA Port Number Registry (for example, 443 -> https
).
Somo supports shell completions for bash, zsh, fish, and elvish. Choose your shell:
- Bash:
mkdir -p ~/.local/share/bash-completion/completions somo generate-completions bash > ~/.local/share/bash-completion/completions/somo
- Zsh:
mkdir -p ~/.local/share/zsh/site-functions somo generate-completions zsh > ~/.local/share/zsh/site-functions/_somo echo 'fpath=(~/.local/share/zsh/site-functions $fpath)' >> ~/.zshrc echo 'autoload -U compinit && compinit' >> ~/.zshrc
- Fish:
mkdir -p ~/.config/fish/completions somo generate-completions fish > ~/.config/fish/completions/somo.fish
- Elvish:
mkdir -p ~/.config/elvish/lib somo generate-completions elvish > ~/.config/elvish/lib/somo.elv echo 'use somo' >> ~/.config/elvish/rc.elv
Somo currently supports: