<center>
# Unix System Monitoring and Diagnostic CLI Tools
*Originally published 2020-09-01 on [blog.sweeting.me](https://docs.sweeting.me/s/blog), updated sporadically since then.*
*Also published on the [Monadical Blog](https://monadical.com/posts/system-monitoring-tools.html), [HackerNews](https://news.ycombinator.com/item?id=24344520), and [ /r/Sysadmin](https://www.reddit.com/r/sysadmin/comments/ikynyo/an_opinionated_list_of_system_monitoring_and/).*
<img src="https://docs.monadical.com/uploads/upload_8293c5cdcc3cf0dc6a6024ea0b18a2ee.png" style="width: 70%; border-radius: 4px; border: 1px solid #ccc; box-shadow: 4px 4px 4px rgba(0,0,0,0.08)">
<br/><br/>
*An opinionated list of CLI utilities for monitoring and inspecting Linux/BSD systems.*
*A similar list is available for macOS here: [awesome-macos-command-line](https://git.herrbischoff.com/awesome-macos-command-line/about/).*
</center>
<hr/>
[TOC]
---
## Getting Started
**CLI Usage Reference Tools:**
- https://linux.die.net/man/
- https://explainshell.com/ ([Github](https://github.com/idank/explainshell))
- https://tldr.sh/
- http://bropages.org/
- https://terminaltrove.com/
- https://github.com/chrisallenlane/cheat
- https://regex101.com/
- https://wiki.tilde.fun/admin/linux/cli/start
- https://github.com/rothgar/awesome-tuis
- https://github.com/toolleeo/cli-apps
- https://github.com/agarrharr/awesome-cli-apps
**My own personal helper script collections for Bash & Fish + reading lists & resources:**
- https://github.com/pirate/bash-utils
- https://github.com/pirate/fish-utils
**Guides:**
- https://github.com/jlevy/the-art-of-command-line
- http://www.brendangregg.com/linuxperf.html
- https://www.tecmint.com/command-line-tools-to-monitor-linux-performance/
- https://www.thegeekstuff.com/2011/03/linux-performance-monitoring-intro/
- https://www.opsdash.com/blog/disk-monitoring-linux.html
- https://www.binarytides.com/linux-commands-monitor-network/
- https://www.cyberciti.biz/faq/network-statistics-tools-rhel-centos-debian-linux/
**[And More...](#Further-Reading)**
Below is a collection of CLI tools that I've personally used while doing Linux/BSD systems administration over the past 10+ years. Some of them I use daily, others I only use once a year or less... but when I need them, boy am I glad they exist!
- `⭐️` I've added a star next to utilities that I find to be extremely well-built or well-suited to solving their particular task
- `🌈` Utiltities marked with a rainbow have glorious xterm256/full-color output
On non-Ubuntu/Debian-based Linuxes you should replace any instance of `apt install xyz` below with `pkg install xyz`/`brew install xyz`/`yum install xyz`/`nix install xyz`/etc. depending on your respective system.
If you would like to suggest changes/additions to this list you can comment on [Reddit](https://www.reddit.com/r/sysadmin/comments/ikynyo/an_opinionated_list_of_system_monitoring_and/), ping me on Twitter [`@theSquashSH`](https://twitter.com/theSquashSH), or find my contact email on [sweeting.me](https://nicksweeting.com).
---
## All-in-one tools
### `glances` ⭐️ 🌈
`htop`, `iftop`, `iotop`, `gpustat`, `ctop`, and more, all rolled into one tool.
Prints pretty much everything you need to know at a glance, including container resource usage, active processes, network and disk IO usage, and other stats.
```bash
pip install 'glances[action,browser,cloud,cpuinfo,docker,export,folders,gpu,graph,ip,raid,snmp,web,wifi]'
# launch glances CL
glances
# start a webserver to view glances output in a web UI on http://0.0.0.0:8787/
glances -w -B 0.0.0.0 -p 8787
```
- https://github.com/nicolargo/glances
- https://glances.readthedocs.io/en/stable/cmds.html
- https://opensource.com/article/19/11/monitoring-linux-glances
### `nmon` 🌈
Jack-of-all-trades tool similar to `glances`, but with an interactive CLI UI to switch between panes for each type of resource.
```bash
# run nmon then press c/m/r/etc to enable/disable each pane in the ncurses UI
nmon
```
- http://nmon.sourceforge.net/pmwiki.php
- https://www.admin-magazine.com/HPC/Articles/Nmon-All-Purpose-Admin-Tool
- https://www.tecmint.com/nmon-analyze-and-monitor-linux-system-performance/
- https://www.techrepublic.com/article/how-to-monitor-your-linux-servers-with-nmon/
### `dstat`
A minimalist utility that prints a colored one-line summary of system stats every second.
```bash
# give an update of cpu, disk, and network usage every 5sec
dstat -cdn 5
# show advanced cpu, filesystem, ipc, locking, and asyncio stats every 2sec
dstat --cpu-adv --fs --aio --ipc --lock 2
```
- https://www.sanfoundry.com/5-dstat-command-usage-examples-in-linux/
- https://www.tecmint.com/dstat-monitor-linux-server-performance-process-memory-network/
- https://www.geeksforgeeks.org/dstat-command-in-linux-with-examples/
- https://www.networkworld.com/article/3291616/examining-linux-system-performance-with-dstat.html
### `atop` ⭐️
Great for finding out what's causing system-wide slowness when you're not sure whether what the culprit is (e.g. CPU/disk/network/temperature/hardware/etc.).
Ranks all possible sources of slowness independent of individual processes, highlights potential bottlenecks or high resource usage areas in red. Very useful when you can't tell what's causing slowness from `htop` alone.
```bash
apt install atop
# show all processes and individual threads
atop -y
```
- https://github.com/Atoptool/atop
- https://linux.die.net/man/1/atop
- https://haydenjames.io/use-atop-linux-server-performance-analysis/
### `tiptop`/`mactop` 🌈
tiptop is a command-line system monitoring tool in the spirit of top. It displays various interesting system stats and graphs them. Works on all operating systems.
```bash
pip install tiptop
tiptop
```
- https://github.com/nschloe/tiptop
- https://github.com/laixintao/mactop
### `osquery` ⭐️
Run SQL queries on your system setup and resources.
```bash
# show all processes listening on local ports
osqueryi "SELECT DISTINCT
process.name,
listening.port,
process.pid
FROM processes AS process
JOIN listening_ports AS listening
ON process.pid = listening.pid
WHERE listening.address = '0.0.0.0'"
# show all gateway routes to the internet in json format
osqueryi --json "SELECT * FROM routes WHERE destination = '::1'"
# show number of threads by process name
osqueryi 'SELECT count(pid) AS total, name FROM processes GROUP BY name ORDER BY total desc LIMIT 10'
```
- https://osquery.io/
- https://blog.rapid7.com/2016/05/09/introduction-to-osquery-for-threat-detection-dfir/
- https://osquery.readthedocs.io/en/stable/introduction/sql/
### `sar`
```bash
apt install sysstat
echo 'ENABLED="true"' > /etc/default/sysstat
systemctl restart sysstat
# print all basic stats every 1sec
sar -A 1
# show network stats by interface/device every 2sec
sar -n DEV 2
# show all available stats every 1sec
sar -B -b -d -I ALL -m ALL -n ALL -q -r ALL -S -u ALL -v -W -w -y 1
```
- https://kirelos.com/how-to-install-and-configure-sysstat-on-ubuntu-20-04/
- https://www.linuxtechi.com/generate-cpu-memory-io-report-sar-command/
- https://www.poftut.com/linux-sysstat-utilities-monitoring-system-performance/
- https://www.thegeekstuff.com/2011/03/sar-examples/
- https://github.com/sysstat/sysstat
### `landscape-sysinfo`
Ubuntu's builtin system status summary tool that displays whenever you SSH in.
```bash
landscape-sysinfo
```
### `webmin`/`cockpit` ⭐️ 🌈
Web GUI system control panels.
```bash
curl -fsSL 'http://www.webmin.com/jcameron-key.asc' | apt-key add -
echo "deb http://download.webmin.com/download/repository/ sarge contrib" \
"deb http://webmin.mirror.somersettechsolutions.co.uk/repository/ sarge contrib" | tee /etc/apt/sources.list.d/webmin.list
apt install webmin
apt update
```
- https://webmin.com/
---
## CPU / Memory
### `lscpu`
Show info about the available CPU slots and installed CPUs.
```bash
apt install util-linux
lscpu
```
- https://manpages.ubuntu.com/manpages/focal/man1/lscpu.1.html
- https://www.howtoforge.com/linux-lscpu-command/
### `lsmem`
Show info about the available RAM slots and installed chips.
```bash
apt install util-linux
lsmem -a
```
- https://manpages.ubuntu.com/manpages/focal/en/man1/lsmem.1.html
- https://zoomadmin.com/HowToLinux/LinuxCommand/lsmem
### `top`
Barebones process resource usage monitoring.
```bash
apt install top
top
```
- https://linux.die.net/man/1/top
- https://www.thegeekstuff.com/2010/01/15-practical-unix-linux-top-command-examples/
### `htop` ⭐️ 🌈
A better version of `top`.
```bash
apt install htop
htop
```
- https://linux.die.net/man/1/htop
- https://www.deonsworld.co.za/2012/12/20/understanding-and-using-htop-monitor-system-resources/
- https://www.thegeekstuff.com/2011/09/linux-htop-examples/
- https://devanswers.co/ubuntu-system-monitoring-with-htop/
### `mpstat`
Show per-core CPU usage statistics including IO load, interrupt load, system load, user load, etc. Gets its data from `/proc/stat`.
```bash
apt install sysstat
# show all stats every 1sec
mpstat -A 1
# show utilization of all processors on the system every 1sec
mpstat -P ALL 1
```
- https://manpages.ubuntu.com/manpages/focal/man1/mpstat.1.html
- https://www.linuxnix.com/7-mpstat-command-examples-in-linux/
### `btop++` ⭐️ 🌈
```bash
# install btop from github
btop
```
![](https://docs.monadical.com/uploads/upload_32d152f61395c99470005ffc72d2d848.png)
https://github.com/aristocratos/btop
### `pidstat`
Show per-process CPU usage statistics including IO load, interrupt load, wait time, etc. Gets its data from `/proc/<pid>/stat`.
```bash
apt install sysstat
# show stats for each pid with human-readable sizes and full commands w/ args
pidstat --human -l
# show reports of page faults and memory statistics for PID 1234 every 2sec
pidstat -r -p 1234 2
```
- https://manpages.ubuntu.com/manpages/focal/en/man1/pidstat.1.html
- https://www.thegeekstuff.com/2014/11/pidstat-examples/
- https://linoxide.com/linux-command/linux-pidstat-monitor-statistics-procesess/
### `free`
Show RAM and SWAP usage information.
```bash
# show RAM and SWAP usage info along with buffer/cache stats and totals
free -h -t -l
```
- https://manpages.ubuntu.com/manpages/focal/en/man1/free.1.html
- https://www.howtoforge.com/linux-free-command/
- https://linuxize.com/post/free-command-in-linux/
### `vmstat`
Show virtual memory, buffer, cache, and paging information.
```bash
apt install sysstat
# show all virtual memory stats in megabytes every 1sec
vmstat -S M -a 1
# show aggregate statistics and totals
vmstat -s
# show disk-related virtual memory access statistics
vmstat -d
```
- https://linux.die.net/man/8/vmstat
- https://www.linode.com/docs/uptime/monitoring/use-vmstat-to-monitor-system-performance/
- https://www.tecmint.com/linux-performance-monitoring-with-vmstat-and-iostat-commands/
### `tsubame` 🌈
- https://github.com/DoranekoSystems/Tsubame
### `memray` 🌈
Fancy memory profiling TUI for python. It can track memory allocations in Python code, in native extension modules, and in the Python interpreter itself.
- https://github.com/bloomberg/memray
- https://github.com/laixintao/flameshow (flamegraph viewer)
---
## GPU
### `gpustat`
(Only works for NVidia GPUs.)
```bash
pip install gpustat
# print GPU performance stats with color every second
watch -c gpustat -cp --color
```
- https://github.com/wookayin/gpustat
### `intel_gpu_top`
Show GPU usage stats for Intel, NVidia, or Radeon GPUs.
```bash
apt install intel-gpu-tools
intel_gpu_top
```
- https://gitlab.freedesktop.org/drm/igt-gpu-tools
- https://manpages.ubuntu.com/manpages/focal/en/man1/intel_gpu_top.1.html
### `nvtop`
```bash
apt install nvtop
nvtop
```
- https://github.com/Syllo/nvtop
- https://manpages.ubuntu.com/manpages/focal/en/man1/nvtop.1.html
### `radeontop`
```bash
apt install radeontop
radeontop
```
- https://github.com/clbr/radeontop
- https://manpages.ubuntu.com/manpages/focal/en/man1/radeontop.1.html
### `nvidia-smi`
Monitor NVidia hardware sensor values (e.g. temperature, frequency, etc.).
```bash
apt install nvidia-smi
# print nvidia performance and sensor stats every second
nvidia-smi -l 1
# print nvidia utilization stats for GPU 0 every second
nvidia-smi -q -g 0 -d UTILIZATION -l 1
```
- https://developer.nvidia.com/nvidia-system-management-interface
- https://subscription.packtpub.com/book/programming/9781788996242/app01/app01sec01/useful-nvidia-smi-commands
- https://www.microway.com/hpc-tech-tips/nvidia-smi_control-your-gpus/
- https://developer.download.nvidia.com/compute/DCGM/docs/nvidia-smi-367.38.pdf
### `glmark2`
Stress-test GPU performance.
```bash
apt install glmark2
glmark2
```
- https://github.com/glmark2/glmark2
- https://linuxreviews.org/Glmark2
- https://manpages.ubuntu.com/manpages/focal/man1/glmark2.1.html
- https://www.howtoforge.com/tutorial/linux-gpu-benchmark/
- https://wiki.archlinux.org/index.php/Benchmarking
### `glxgears`
Stress-test GPU performance.
```bash
apt install mesa-utils
glxgears
```
- https://linux.die.net/man/1/glxgears
- https://www.howtoforge.com/tutorial/linux-gpu-benchmark/
- https://wiki.archlinux.org/index.php/Benchmarking
---
## Filesystem
### `iotop` ⭐️
Ranks processes by disk IO usage and throughput in realtime.
### `ioping`
Check the response time of a given device or socket. <1ms times with low variance are indicators of a healthy storage device.
```bash
apt install ioping
ioping /dev/sda
```
### `lsof` ⭐️
View processes actively reading/writing/locking a given path or device.
```bash
lsof +D /some/path/here
# see which processes are actively using a connected USB drive
lsof +D /media/usb
# see which processes are actively using nvidia GPUs
lsof /dev/nvidia*
```
### `fuser`
View processes actively reading/writing/locking a given directory or path.
```bash
fuser -a -v -u /some/path/here
```
### `blktrace`
Prints all disk-read events happening on the system.
```bash
sudo blktrace -d /dev/nvme0n1 -a read -o - | blkparse -i -
```
- https://questdb.io/blog/investigating-linux-phantom-disk-reads/
### `debugfs`
Translate between block numbers, inode numbers, and file paths.
```bash
debugfs -R 'icheck 536514808' /dev/nvme0n1
# debugfs 1.46.5 (30-Dec-2021)
# Block Inode number
# 536514808 8270377
debugfs -R 'ncheck 8270377' /dev/nvme0n1
# debugfs 1.46.5 (30-Dec-2021)
# Inode Pathname
# 8270377 /home/ubuntu/.questdb/db/table_name/2022-10-04/symbol_col9.d.1092
```
- https://questdb.io/blog/investigating-linux-phantom-disk-reads/
### `iostat`
View IO usage stats and avg response times for a given drive in realtime.
```bash
# show io stats in human readable sizes for all devices
iostat -d -m
# show extended stats (w/ human readable sizes) for /dev/sda every 1sec
iostat -d -m -x 1 /dev/sda
```
`d_await` is the avg time it took to respond to IO in ms (lower is better)
`%util` is the percent utilization (lower is better)
- https://www.geeksforgeeks.org/iostat-command-in-linux-with-examples/
- https://www.thegeekstuff.com/2011/07/iostat-vmstat-mpstat-examples/
- https://linoxide.com/linux-command/linux-iostat-command/
- https://www.linuxtechi.com/monitor-linux-systems-performance-iostat-command/
### `zpool iostat` ⭐️
View realtime ZFS IO stats for a pool.
```bash
zpool iostat -v poolnametotest 1
```
### `nfsiostat`
View realtime NFS IO stats.
```bash
apt install nfs-common
# show NFS IO stats sorted by operations per second every 1sec
nfsiostat -s 1
# show NFS IO stats for the mount /mnt/nfs-drive
nfsiostat /mnt/nfs-drive
```
- https://manpages.ubuntu.com/manpages/focal/man8/nfsiostat.8.html
- https://www.thegeekdiary.com/understanding-the-nfsiostat-command-output-examples-included/
### `cifsiostat`
View realtime CIFS IO stats.
```bash
apt install sysstat
# show human-readable CIFS IO stats in megabytes every 1sec
cifsiostat -h -m 1
```
- https://manpages.ubuntu.com/manpages/focal/en/man1/cifsiostat.1.html
- https://zoomadmin.com/HowToLinux/LinuxCommand/cifsiostat
- https://github.com/sysstat/sysstat
### `hdparm`
One-off command to test disk read/write speed.
```bash
hdparm -Tt /dev/sda
```
### `bonnie++`
One-off command to test disk read/write speed at a variety of block sizes.
```bash
# bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [USER]
# simple example with a 1 gigabyte test file on /media/somedisk
bonnie++ -d /media/somedisk -s 1G ...
# full example with a 4 gigabyte test file on
bonnie++ -d /media/somedisk -s 4G -n 0 -m TEST -f -b
```
### `dd` ⭐️
The jack-of-all-trades tool `dd` can also be used for simple disk speed tests.
```bash
# create a ramdisk with a large test file in it
# this is needed to avoid being CPU or disk-speed limited
# when reading our random test data to write during the test
mkdir /mnt/ramdisk
mount -t tmpfs -o size=1024m tmpfs /mnt/ramdisk
dd if=/dev/urandom of=/mnt/ramdisk/testfile bs=1M count=1024 status=progress
# to test the write speed of a disk
sync
dd if=/mnt/ramdisk/testfile of=/mnt/disktotest/testfile bs=1M count=1024 oflag=dsync status=progress
# to test the read speed of a disk
echo 3 > /proc/sys/vm/drop_caches
dd if=/mnt/disktotest/testfile of=/dev/null bs=1M count=1024 status=progress
```
### `rsync`/`rclone`/`rsnapshotd`/`sanoid`+`syncoid`
Backup and file syncing tools.
```bash
apt install rclone rsync rsnapshotd
# sync some local files to a remote server over ssh/rsyncd
rsync --archive --info=progress2 /some/local/path user@host:/some/remote/path
# sync some local files to a remote directory on a cloud storage provider
rclone sync source:path dest:path [flags]
# mount remote dir as a local FUSE filesystem
rclone mount remote:path/to/files /path/to/local/mount
# take an rsync+hardlink snapshot of all the sources set in /etc/rsnapshot.conf
rsnapshot
# or take a zfs snapshot of a given pool/dataset
zfs snapshot -r poolname/dataset@snapshotname
```
### `gddrescue`/`dd_rescue`/`ddrescue-gui`/`recoverdisk`/`safecopy`/`recoverypy`
- https://askubuntu.com/questions/211578/whats-the-difference-between-ddrescue-gddrescue-and-dd-rescue
- https://github.com/PabloLec/RecoverPy 🌈
### `df`
Show the space available on a given filesystem.
```bash
df -h /
```
### `ncdu` ⭐️🌈
Analyze a directory to find all the largest files.
```bash
# show tree of largest files and dirs on / filesystem
ncdu -x /
# show tree of largest files and dirs in all filesystems below /mnt
ncdu /mnt
```
### `find`
```bash
# list files ordered by modified date from most recent to least recently modified
find /some/path -mtime -1 -lsblk
```
### `parted`
```bash
# list all drives and partitions
parted /dev print all
```
### `blkid`
```bash
# list all partitions with their UUIDs, filesystem types, and labels
blkid
```
### `lsblk` ⭐️
```bash
# show the partition tree with filesystem types, mountpoints, permissions, and sizes
lsblk -f -m
# show drives only with no partitions or headers
lsblk --nodeps --noheadings
```
### `lsscsi`
```bash
apt install lsscsi
# list all drives with info about size, disk id, etc.
$ lsscsi -s -P -p -g -i -D
[0:0:0:0] 0x0 ATA CT120BX300SSD1 010 /dev/sda - /dev/sg0 - none - 120GB
[2:0:0:0] 0x0 ATA CT2000BX500SSD1 030 /dev/sdg - /dev/sg6 - none - 2.00TB
[2:0:1:0] 0x0 ATA Samsung SSD 860 1B6Q /dev/sdh - /dev/sg7 - none - 500GB
[2:0:2:0] 0x0 ATA Samsung SSD 860 1B6Q /dev/sdi - /dev/sg8 - none - 500GB
[2:0:3:0] 0x0 ATA WDC WDS100T2B0A 00WD /dev/sdj - /dev/sg9 - none - 1.00TB
[2:0:4:0] 0x0 ATA WDC WDS100T2B0A 00WD /dev/sdk - /dev/sg10 - none - 1.00TB
[2:0:5:0] 0x0 ATA WDC WDS100T2B0A 00WD /dev/sdl - /dev/sg11 - none - 1.00TB
[3:0:0:0] 0x0 JMicron Generic DISK00 0103 /dev/sdb JMicron_Generic_DISK00_0123456789ABCDEF-0:0 /dev/sg1 - none - 8.00TB
[3:0:0:1] 0x0 JMicron Generic DISK01 0103 /dev/sdc JMicron_Generic_DISK01_0123456789ABCDEF-0:1 /dev/sg2 - none - 8.00TB
[3:0:0:2] 0x0 JMicron Generic DISK02 0103 /dev/sdd JMicron_Generic_DISK02_0123456789ABCDEF-0:2 /dev/sg3 - none - 8.00TB
[3:0:0:3] 0x0 JMicron Generic DISK03 0103 /dev/sde JMicron_Generic_DISK03_0123456789ABCDEF-0:3 /dev/sg4 - none - 8.00TB
[3:0:0:4] 0x0 JMicron Generic DISK04 0103 /dev/sdf JMicron_Generic_DISK04_0123456789ABCDEF-0:4 /dev/sg5 - none - 10.0TB
```
### `fdisk` ⭐️🌈
```bash
# list detailed information about disk device models, sector alignment and sizes, partition maps, partition types, block sizes
fdisk -l
```
### `zfs`/`nfs`/`samba`/`glusterfs`
Alternative filesystems / fileshares besides ext4.
---
## Network
### `nethogs` ⭐️🌈
Show a list of processes sorted by network activity in realtime.
```bash
apt install nethogs
# show process traffic across all interfaces
nethogs
# show process traffic between all hosts on eno2 in promiscous mode
nethogs -p eno2
```
### `iftop`
Lists active network connections sorted by activity level in realtime.
```bash
# show all connections with ports
iftop -P
# show only connections on eno1 to/from 192.168.1.10
iftop -P -i eno1 -f "host 192.168.1.10"
# show traffic between all hosts on eno2 in promiscuous mode (if available)
iftop -P -i eno2 -p
# when inside of tmux/screen you may need to set TERM manually for pretty output
env TERM=xterm-256color iftop
```
- https://www.systutorials.com/docs/linux/man/8-iftop/
- https://www.thegeekstuff.com/2008/12/iftop-guide-display-network-interface-bandwidth-usage-on-linux/
- https://github.com/srix/iftopcolor
### `iptraf-ng`🌈
Show a real-time updating list of all connections by host `iftop`, with a log of the packets being sent. Can also show a statistical summaries of traffic per-host, per-interface, or per-packet-type.
```bash
iptraf-ng
```
- https://linux.die.net/man/8/iptraf-ng
- https://wiki.ipfire.org/addons/iptraf-ng
### `pktstat`
Display list of active connections including any HTTP requests within each connection.
```bash
# list active connections and requests on all interfaces sorted by traffic volume
pktstat -t
# list active connections and requests on eth0 with full hostnames and Byte totals
pktstat -i eth0 -t -B -F -T
```
### `speedometer` / `nload` / `bmon` / `slurm` / `bwm-ng` / `cbm` / `netload` / `ifstat` / etc. 🌈
Show realtime staticstics/graphs of total network traffic on the system.
These all work similarly and can be installed via most system package managers.
```bash
# Show a fancy colored realtime graph of sent and received traffic on eth0
speedometer -r eth0 -t eth0
```
- https://www.binarytides.com/linux-commands-monitor-network/
### `netstat` ⭐️
View information about processes bound to ports and active network connections.
```bash
# list processes listening on all ports (UDP & TCP, IPv4 & IPv6)
netstat -tulpn
# list all active connections with their current status
netstat -tupn
# list all active connections with their current status and realtime updating
netstat -tupnc
# show summary stats each type of socket
netstat -i
# show summary stats for type of protocol
netstat -s
# or show socket stats using ss
ss -s
```
- https://www.geeksforgeeks.org/netstat-command-linux/
- https://www.thegeekstuff.com/2010/03/netstat-command-examples/
### `ethtool`
Show information about the kernel module / driver powering a given network interface.
```bash
apt install ethtool
# show speed, duplex, and additional metadata for eth0 interface
ethtool eth0
# show feature flags status for eth0 interface
ethtool -k eth0
# show transfer stats for eth0 interface
ethtool -S eth0
# show the eth0 driver / kernel module
ethtool -i eth0
# identify the physical eth0 ethernet port by blinking its LED
ethtool -p eth0
```
- https://linux.die.net/man/8/ethtool
- https://www.thegeekstuff.com/2010/10/ethtool-command/
### `ip`/`ifconfig`
View network interface and routing table information.
```bash
# print entire routing table
ip route
# or on BSD systems
route -n
# get the default "next hop" route for the end destination 192.168.1.2
ip route get 192.168.1.2
# or on BSD systems
route get 192.168.1.2
# interface info with human-readable sizes for the eno1 interface
ip -s -h link show eno1
# or on BSD systems
ifconfig eno1
# show transfer stats for each interface
ip -s link
# or on BSD systems
ifconfig
```
- https://linuxize.com/post/linux-ip-command/
- https://www.cyberciti.biz/faq/linux-ip-command-examples-usage-syntax/
- https://www.tecmint.com/ip-command-examples/
- https://phoenixnap.com/kb/linux-ip-command-examples
### `ping`/`tcping`/`arping`
Basic ICMP/TCP/ARP ping utilities (you cant ping over UDP unless you have a process running on the server to send back a UDP response, like `iperf`).
```bash
apt install ping
# ping a given IP/host 10 times using ICMP with a 5sec timeout for each packet
ping -c 10 -t 5 <IP/host>
```
- https://linux.die.net/man/8/ping
- https://www.howtoforge.com/linux-ping-command/
```
apt install tcping
# send 10 TCP packgets to a given IP/host:80 with a 1sec delay between each
tcping -ip <IP/host> --port 80 --number 10 --sleep 1000
```
- https://github.com/AyoobAli/TCPing
- https://techtalk.gfi.com/troubleshooting-networks-with-tcping/
```bash
apt install arping
# ask peers on the network for the MAC address associated with 192.168.1.2
arping 192.168.1.2
# check for duplicate responses for the IP 192.168.1.5 (to detect ARP spoofing)
arping -d 192.168.1.4
```
- https://manpages.ubuntu.com/manpages/focal/man8/arping.8.html
- https://www.poftut.com/arping-command-tutorial-examples-linux/
- https://devconnected.com/arping-command-on-linux-explained/
### `arpwatch`
Monitor new ARP cache entries broadcased by devices on your local network.
```bash
apt install net-tools arpwatch
# show new ARP mappings announced on eth0 interface
arpwatch -i eth0
# show entire arp table
arp -a -v
# print only the arp entries for the host 192.168.1.2 on the interface eno1
arp -i eno1 -a 192.168.1.2
```
- https://linux.die.net/man/8/arpwatch
- https://www.tecmint.com/monitor-ethernet-activity-in-linux/
- https://www.geeksforgeeks.org/arp-command-in-linux-with-examples/
- https://www.computerhope.com/unix/arp.htm
### `iperf`/`iperf3` ⭐️
One-off command to test network speed over a single/multiple connections.
```bash
apt install iperf
# on the server
iperf -s
# on the client
iperf -c <ip/host of server>
```
```bash
apt install iperf3
# on the server
iperf3 -s
# on the client
iperf3 -c <ip/host of server>
```
(make sure to swap the client & server to test in both directions for the most accurate results)
- https://iperf.fr/iperf-doc.php
- https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/iperf/
- https://support.cumulusnetworks.com/hc/en-us/articles/216509388-Throughput-Testing-and-Troubleshooting
- https://www.tecmint.com/test-network-throughput-in-linux/
### `nuttcp`
One-off command to test network speed with advanced options for TCP/UDP bursting, timing, packet sizes, and more. Better than `iperf` for stress testing network edge-conditions, buffer sizes of intermediate devices, or extremely high-bandwidth links.
```bash
apt install nuttcp
# on the server
nuttcp -S
# on the client
nuttcp -i1 <ip/host of server>
# send 300 Mbps of UDP traffic in bursts of 50 packets for 5 seconds
nuttcp -u -Ri300m/50 -i 1 -T5 <ip/host of server>
# saturate a 10Gbit connection with a 9K MTU using max-size UDP packets (len=8972)
nuttcp -l8972 -T30 -u -w4m -Ru -i1 <ip/host of server>
```
- https://fasterdata.es.net/performance-testing/network-troubleshooting-tools/nuttcp/
- https://www.systutorials.com/docs/linux/man/8-nuttcp/
- https://manpages.ubuntu.com/manpages/focal/man8/nuttcp.8.html
### `speedtest-cli`
A CLI to test your internet speed using the speedtest.net service.
```bash
pip install speedtest-cli
speedtest-cli
```
- https://github.com/sivel/speedtest-cli
- https://www.speedtest.net/apps/cli
### `dig`/`dug`/`dog`/`host`/`nslookup`/`doggo` 🌈
You can test DNS record resolution, trace, and speed stats using `dig` or `dog`.
```bash
apt install dnsutils
# simple example using system default resolver
dig -4 +trace example.com
# full example using 1.1.1.1 as the resolver with DNSSEC checking
dig -4 +dnssec +multi +trace @1.1.1.1 example.com
# get your public IP address using the opendns reflector resolver
dig -4 +short myip.opendns.com @resolver1.opendns.com
# get pretty colorized output optimized for human-readability
dog example.com A @1.1.1.1
host -t A example.com
nslookup example.com
curl -s ipinfo.io
```
- https://doggo.mrkaran.dev/docs/
- https://github.com/unfrl/dug
- https://github.com/ogham/dog
- https://github.com/TheRook/subbrute
### `mtr` ⭐️
Traceroute tool that shows realtime ping speed to all hops between you and a destination in realtime.
```bash
apt install mtr
# Simple trace of connection to example.com using ICMP
mtr example.com
# Full trace showing AS numbers, IP addresses, and ICMP extension info
mtr --show-ips --aslookup --mpls --max-ttl 20 example.com
# Trace using TCP port 80 instead
mtr --tcp --port 80 example.com
# Trace using UDP port
mtr --udp --port 80 example.com
```
- https://www.digitalocean.com/community/tutorials/how-to-use-traceroute-and-mtr-to-diagnose-network-issues
- https://www.cloudflare.com/learning/network-layer/what-is-mtr/
- https://vitux.com/how-to-use-the-linux-mtr-command/
### `nmap` ⭐️
Jack-of-all-trades port-scanner, network scanner, fingerprinter, and network tester.
```bash
apt install nmap
# scan all TCP ports on a given host
nmap -p 1-65535 -T4 -A -v <IP/hostname>
# detect host OS and protocols on open ports
nmap -sO <IP/hostname>
```
- https://nmap.org/
- https://nmap.org/book/man-examples.html
- https://www.tecmint.com/nmap-command-examples/
### `tcpdump` + `wireshark`
Collect a dump of all packets sent/received and inspect their contents.
```bash
# capture all packets on eth0 port 80, without resolving hostnames/ports
tcpdump -i eth0 -nn -s0 -v port 80
# show all HTTP GET/POST requests on all interfaces
tcpdump -s0 -v -n -l | grep -E -i "POST /|GET /|Host:"
# capture all packets on eth0 and write them to test.pcap
tcpdump -i eth0 -s0 -w test.pcap
# open a given pcap capture file in the wireshark GUI
wireshark -r test.pcap
```
- https://www.wireshark.org/docs/wsug_html_chunked/ChapterIntroduction.html
- https://hackertarget.com/tcpdump-examples/
- https://danielmiessler.com/study/tcpdump/
### `ssldump`
```bash
ssldump -k cert.key -i eth0 -dn host 123.123.123.123 and port 443
```
### `wsrepl` 🌈
Interactive REPL for websocket exploration.
- https://github.com/doyensec/wsrepl
### `iptables`/`iptables-tui`
Interactive TUI to explore iptables.
- https://github.com/davidmoreno/iptables-tui
### `impala` 🌈
TUI for managing Wifi on Linux
```bash
cargo install impala
impala
```
- https://github.com/pythops/impala
---
## Hardware
### `sensors`
Monitor hardware sensor values (e.g. temp, frequency, etc.).
```bash
apt install lm-sensors
sensors-detect
watch sensors
```
### `ipmitool`
Show additional sensor values not accessible to `lm-sensors`.
```bash
apt install ipmitool
# show all sensor values including voltage, current, temp, fan speeds, etc.
ipmitool sensor
# show ambient air temperature
ipmitool sdr type temperature | grep 'degrees C'
# get chassis hardware and power status information
ipmitool chassis status
```
### `i7z`
Show the the C-states and temperature for i3, i5 and i7 based Core processors from Intel.
```bash
apt install i7z
i7z
```
### `cpufreq-info` ⭐️
Show information about current CPU frequency, hardware limits, active governor policy, and more.
```bash
apt install cpufrequtils
# view CPU frequency info
cpufreq-info
# set upper CPU frequency limit to 1.6Ghz
cpufreq-set -u 1.6Ghz
# set the governor to userspace-controlled frequency with a constant 800Mhz frequency
cpufreq-set -g userspace
cpufreq-set -f 800Mhz
```
- http://www.thinkwiki.org/wiki/How_to_use_cpufrequtils
- https://wiki.debian.org/CpuFrequencyScaling
- https://wiki.archlinux.org/index.php/CPU_frequency_scaling
- https://www.kernel.org/doc/Documentation/cpu-freq/boost.txt
### `cpupower`
Get information about CPU clock speeds, governors, and power modes.
```bash
# show information on frequencies, turbo-boost, and transition speeds of installed CPUs
cpupower frequency-info
# show information about available idle states of installed CPUs
cpupower idle-info
# show per-core breakdown of usage, frequency, clock speed, and idle stats
cpupower monitor
```
### `powertop` ⭐️
Monitor CPU power consumption and power management on Linux.
```bash
apt install powertop
# show breakdown of power usage per-process in watts, cpu usage time, events/s and more
powertop
```
- https://github.com/fenrus75/powertop
- https://wiki.archlinux.org/index.php/Powertop
### `dmidecode`
```bash
# show SMBIOS data from sysfs about CPU sockets, vendors, architectures, available feature flags, versions, clock speeds, hyperthreading, turbo-boost, and more
dmidecode -t 4
# show system hardware summary
dmidecode --type system -q
# show processor hardware summary
dmidecode -q --type processor
# show memory hardware summary
dmidecode -q --type memory
dmidecode --type 17
free -m -h -t
```
### `smartctl` ⭐️
Monitor disk SMART sensor values and statuses (e.g. temp, power-on hours, write errors, etc.).
```bash
apt install smartmontools
# get all the SMART values and information for /dev/sdc
smartctl --all /dev/sdc
```
### `apcaccess status`
Monitor UPS power usage, battery level, voltage, and other stats.
```bash
apt install apcupsd
# enable in config
echo "UPSCABLE usb" >> /etc/apcupsd/apcupsd.conf
echo "UPSTYPE usb" >> /etc/apcupsd/apcupsd.conf
echo "DEVICE" >> /etc/apcupsd/apcupsd.conf
echo "ISCONFIGURED=yes" > /etc/default/apcupsd
systemctl enable apcupsd
systemctl start apcupsd
# show curent power draw, max power draw, battery level, voltage, runtime, etc.
apcaccess status
```
### `lshw` ⭐️
Show the entire hardware information tree with all info.
```bash
lshw
# less verbose output
lshw -short
# fetch SCISI, USB, PCI, etc. extended bus information
lshw -businfo
# output an HTML summary
lshw -html > hardware.html
```
- https://linux.die.net/man/1/lshw
- https://ezix.org/project/wiki/HardwareLiSter
- https://github.com/lyonel/lshw
- https://www.howtoforge.com/linux-lshw-command/
### `lsusb`
Show information about attached USB devices and connection topology.
```bash
# show all USB device info in tree format including vendor information
lsusb -v -t
```
### `usb-devices` ⭐️
List attached USB device BUS IDs + type, device IDs, vendor IDs, serial numbers, driver, feature flags, and power consumption info.
```bash
usb-devices
```
### `camcontrol`
Show information about available hardware on FreeBSD systems using the CAM system.
```bash
camcontrol devlist
```
- https://www.freebsd.org/cgi/man.cgi?query=camcontrol&sektion=8
### `dmesg` ⭐️
View kernel log output related to hardware devices, including connection/disconnection events, errors, warnings, debug info, and more.
```bash
dmesg
```
- https://man7.org/linux/man-pages/man1/dmesg.1.html
- https://www.tecmint.com/dmesg-commands/
- https://www.linuxtechi.com/10-tips-dmesg-command-linux-geeks/
### `last`
Show information and logs from the most recent boot.
```bash
# show last boot log w/ init level changes, full usernames, and timestamps
last -x -w -F | tac
```
---
## VM / Docker
### `ctop` ⭐️🌈
`htop` equivalent for monitoring containers, works for Docker and runC and has pretty colors.
```bash
brew install ctop
# show performance stats, entrypoint, and health of all active containers
ctop -a
```
(see [`glances`](#glances-⭐%EF%B8%8F) for `htop` + `ctop` all-in-one)
- https://github.com/bcicen/ctop
- https://www.tecmint.com/ctop-monitor-docker-containers/
### `docker stats`
The docker equivalent of `top`. Uncolored output, one row per container.
```bash
docker stats
docker compose stats
```
- https://docs.docker.com/engine/reference/commandline/stats/
### `virt-top`
Monitor performance statistics of virtual machines on a KVM host.
```bash
apt install virt-top
virt-top
```
- https://linux.die.net/man/1/virt-top
- https://github.com/olafhering/virt-top
- https://packages.debian.org/stretch/virt-top
### `esxtop`
Monitor performance statistics of virtual machines on an ESXi host.
```bash
ssh someuser@esxi-host esxtop
```
- https://kb.vmware.com/s/article/1008205
- http://www.yellow-bricks.com/esxtop/
- https://www.virten.net/vmware/esxtop/
---
## DB / Webserver
### `pg_top` ⭐️
Show PostgreSQL performance information.
```bash
apt install pgtop
# connect to postgres@localhost:5432/example and show perf stats w/ color
pg_top --color-mode -h localhost -p 5432 -d example -U postgres
```
- https://gitlab.com/pg_top/pg_top
- https://manpages.ubuntu.com/manpages/focal/man1/pg_top.1.html
- https://metacpan.org/pod/release/COSIMO/pgtop-0.05/pgtop
- https://severalnines.com/database-blog/dynamic-monitoring-postgresql-instances-using-pgtop
### `mytop`
Show MySQL performance information.
```bash
apt install mytop myps
# connect to mysql@localhost:3306/example and show perf stats w/ color
mytop -color -h localhost -P 3306 -u mysql -d example
```
- http://jeremy.zawodny.com/mysql/mytop
- https://manpages.ubuntu.com/manpages/focal/en/man1/mytop.1p.html
- https://www.tecmint.com/mytop-mysql-mariadb-database-performance-monitoring-in-linux/
- https://github.com/kazeburo/myps
### `redis-stat`
Show Redis performance information.
```bash
gem install redis-stat # also available as a JAR file
# show performance stats of a redis db on localhost:6380 every 1sec
redis-stat --verbose localhost:6380 1
# you can also use redis's built-in monitoring commands
redis-cli INFO
redis-cli MONITOR
```
- https://github.com/junegunn/redis-stat
- https://www.datadoghq.com/blog/how-to-monitor-redis-performance-metrics/
- https://redis.io/commands/monitor
- https://blog.serverdensity.com/monitor-redis/
### `ngxtop` ⭐️
Show Nginx performance information.
```bash
pip install ngxtop
# show summary of performance and breakdown by request URL
ngxtop
# show summary of usage by client IP
ngxtop top remote_addr
# show 4xx/5xx responses by referrer
ngxtop -i 'status >= 400' print request status http_referer
```
- https://github.com/lebinh/ngxtop
- https://github.com/gsquire/topngx
### `apachetop`
Show Apache performance information.
```bash
apt install apachetop
# show performance statistics parsed from the example.com access_log
apachetop -f /var/www/vhosts/example.com/statistics/logs/access_log
```
- https://linux.die.net/man/1/apachetop
- https://www.howtogeek.com/howto/ubuntu/monitor-your-website-in-real-time-with-apachetop/
- https://www.liquidweb.com/kb/how-to-install-and-use-apachetop/
- https://github.com/fr3nd/apache-top
- https://www.tecmint.com/monitor-apache-web-server-load-and-page-statistics/
- https://httpd.apache.org/docs/2.4/mod/mod_status.html
### `uwsgitop`
Show uWSGI performance information.
```bash
pip install uwsgitop
# enable the stats socket on the server
uwsgi --module myapp --socket :3030 --stats /tmp/stats.socket
# then connect to it with uwsgitop
uwsgitop /tmp/stats.socket
```
- https://github.com/xrmx/uwsgitop
- https://www.engagespark.com/blog/deploying-monitoring-python-web-apps-uwsgi/
## OS / System
### `nala` 🌈
Prettier drop-in replacement frontend for the `apt` package manager. Provides faster parallelized downloads, better progress bars, extra helpers, etc. on top of `apt`.
```bash
apt install nala
# then use it in place of apt:
nala update
nala install python3 nodejs
```
- https://github.com/volitank/nala
### `uname`
Get active kernel and architecture information.
```bash
uname --all
# or to only get architecture
arch
```
### `lsmod`
Get active kernel module list.
```bash
lsmod
```
### `lsb_release`
Get Ubuntu version info.
```bash
lsb_release --all
```
### `watchdog`/`auditd`/`acct`
System event monitoring, audit logging, alerting tools, etc.
```bash
apt install watchdog auditd acct
# read documentation for more info
man watchdog
man auditd
man acct
```
### `systemd-analyze`
Useful for track down the cause of slow boots and other startup service issues.
```bash
# list all processes that started at boot, ordered from slowest to fastest
systemd-analyze blame
# plot the services that ran at boot as a pretty SVG with colors
systemd-analyze plot > boot-trace.svg
# see what security permissions the docker service has enabled
systemd-analyze security docker
```
### `dpkg`/`apt list`/`apt-file`/`apt-mark`
Other useful apt-related package management commands.
```bash
apt list --installed
apt-mark showmanual
apt show <packagename>
dpkg -L <packagename>
apt-file search <filename>
```
## Profiling / Debugging
### `pv`/`progress` ⭐️
Show progress of `cp`, `mv`, etc. file transfer operations, pipe operations, etc.
```bash
apt install pv progress
cat some_large_file.txt | pv | gzip -9 > compressed_file.txt.gz
cp compressed_file.txt.gz /some/other/location
progress
```
- https://github.com/Xfennec/progress
### `strace`/`dtrace`/`dtruss` ⭐️
Trace the system calls of a given process to watch what it's doing internally.
```bash
# Run `ls /home` and print all system calls to stdout
strace ls /home
# Print 'open' or 'read' system calls with timestamps
strace -t -e open,read ls /home
# Attach to a running process by PID
strace -p 1234
```
(`dtrace` is the macOS/BSD equivalent to `strace`)
- https://www.tecmint.com/strace-commands-for-troubleshooting-and-debugging-linux/
- https://www.thegeekstuff.com/2011/11/strace-examples/
- https://www.deepanseeralan.com/tech/fun-with-dtruss-macOS/
- https://poweruser.blog/using-dtrace-with-sip-enabled-3826a352e64b
### `ltrace`
Trace the dynamic calls made to shared libraries to see how processes are using shared libs.
```bash
# attach to a specific PID and show call names with start timestamp and duration
ltrace -t -T -p 1234
# Run `docker ps` and only show calls made to the libselinux.so dylib (with timestamps)
ltrace -t -T -l /lib/libselinux.so.1 docker ps
```
- use [`LD_PRELOAD`](https://www.tomaz.me/2014/01/08/detecting-which-process-is-creating-a-file-using-ld-preload-trick.html?utm_source=pocket_saves)/[`DYLD_INSERT_LIBRARIES`](https://gist.github.com/talaviram/1f21e141a137744c89e81b58f73e23c3?permalink_comment_id=3975633&utm_source=pocket_saves) directly for more preload-injection tracing fun
- https://gitlab.com/cespedes/ltrace
- https://manpages.ubuntu.com/manpages/cosmic/man1/ltrace.1.html
### `binwalk`/`strings`/`hexyl`/`hexabyte`/`dissy` 🌈
Decompiler utility normally used to inspect firmware binaries, but is useful along with `strings` to see what a binary contains before you run it.
```python3
pip3 install 'git+https://github.com/ReFirmLabs/binwalk.git'
# extract the full root filesystem from a firmware image binary
binwalk --extract some_firmware.bin
# show machine instructions used in a given firmware
binwalk --opcodes some_executable.bin
# show all strings found inside a binary blob
strings some_binary_blob.exe
# show hex dump explorer with pretty color highlighting
hexyl /bin/some_binary.exe
```
- https://github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md
- https://github.com/ReFirmLabs/binwalk/wiki/quick-start-guide
- https://github.com/sharkdp/hexyl 🌈
- https://github.com/thetacom/hexabyte ⭐️🌈
- https://github.com/tonybaloney/dissy ⭐️🌈
---
## Shell Utilities
### `bat`/`pygmentize`/`grc`/`colortail`/`rich`/`imgcat`/`timg` ⭐️🌈
Tools to help you generically colorize the output any command. Great for printing logfiles, source code, config files, tracebacks, etc. any other structured data with syntax highlighting.
```bash
bat < docker.log
docker compose logs | grc
pygmentize -g < somecode.py
...
```
- https://github.com/sharkdp/bat ⭐️
- https://github.com/garabik/grc ⭐️
- https://github.com/pygments/pygments ⭐️
- https://github.com/sharkdp/hexyl ⭐️
- https://github.com/textualize/rich-cli ⭐️
- https://github.com/eddieantonio/imgcat ⭐️
- https://github.com/owenthereal/ccat
- https://github.com/joakim666/colortail
- https://github.com/tanderson92/supercat
- https://codeberg.org/mehrad/highlighter
- https://www.gnu.org/software/src-highlite/
- https://github.com/armandino/TxtStyle
- https://github.com/PatrickF1/colored_man_pages.fish / https://github.com/decors/fish-colored-man
- https://github.com/Kikobeats/awesome-cli#output
- https://github.com/victante/trish
-
- [and more here...](https://stackoverflow.com/questions/7851134/syntax-highlighting-colorizing-cat)
### `iTerm2`/`fig` ⭐️ 🌈
Alternative Terminal Emulator applicaitons with tons of extra features.
- https://iterm2.com/
- https://github.com/withfig/fig
### `fish`/`fisher`/`fifc` ⭐️ 🌈
```bash
apt install fish
fish
curl -fsSL 'https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish' | source
fisher install jorgebucaran/fisher
fisher install gazorby/fifc
```
Alternative to traditional `bash` shell with better autocomplete, image viewing support, user-installable plugins, and other features.
- ⭐️ https://github.com/pirate/fish-utils (fish functions I wrote myself + many useful links)
- https://github.com/jorgebucaran/fisher (fish plugin manager)
- https://github.com/topics/fish-plugin (list of fish plugins on github)
- ⭐️🌈 https://github.com/gazorby/fifc (awesome fzf style autocomplete for cli args, git, etc.)
### `tmux`/`tmux2html`
```bash
apt install tmux
# stream your tmux window as a live-updating HTML UI on http://0.0.0.0:8000
pip install tmux2html
tmux2html -o index.html --stream --interval 1 0
python3 -m http.server --directory . --bind 0.0.0.0 --port 8000
```
### `atuin` ⭐️🌈
Improved shell history manager that can also sync history between machines (encrypted).
```bash
bash <(curl https://raw.githubusercontent.com/atuinsh/atuin/main/install.sh)
atuin status
atuin help
```
- https://github.com/atuinsh/atuin
### `shellcheck` ⭐️
```bash
apt install shellcheck
shellcheck /some/bash/script.sh
```
Best linter available for bash scripts with hundreds of checks for common mistakes.
- https://github.com/koalaman/shellcheck
### `ag`/`ripgrep`/`ack`/`ugrep` ⭐️
`grep -r`/`git grep` replacement with much faster performance and additional features.
```bash
apt install silversearcher-ag
ag 'some-regex' .
```
- https://github.com/Genivia/ugrep 🌈
### `autojump`/`z`/`zoxide`/`aj`/`pj`/`fasd`/`j` ⭐️
Cd into recently used directories quickly (fuzzy-matched).
- https://github.com/jethrokuan/z ⭐️
- https://github.com/joelthelion/autojump ⭐️
- https://github.com/kidonng/zoxide.fish
- https://github.com/oh-my-fish/plugin-pj
### `eza`/`exa`/`lsd`/`lsp`/`broot`/`fzf`/`browsr` 🌈
`cd` and `ls` replacements.
```bash
brew install eza
eza --header --group-directories-first -s name \
--time-style=long-iso --created --modified \
--all --long --extended --group --git --classify --icons \
--ignore-glob=.DS_Store \
/some/directory/path
```
- https://github.com/eza-community/eza ⭐️
- https://github.com/juftin/browsr ⭐️
- https://github.com/junegunn/fzf ⭐️
- https://github.com/Donaldttt/fuzzyy
- https://github.com/Canop/broot
- https://github.com/lsd-rs/lsd
- https://github.com/dborzov/lsp
### `micro`/`most`/`toolong`/`logmerger` 🌈
`nano`, `cat`, and `less` alternatives with multi-cursor selection, syntax highlighting, mouse support, and more.
```bash
pipx install toolong
apt install bat most
brew install micro
tl /path/to/some/file.js
tl access.log* --merge
most /path/to/some/file.js
bat /path/to/some/file.js
micro /path/to/some/file.js
```
- https://github.com/textualize/toolong
- https://github.com/ptmcg/logmerger
### `jq`/`yq`/`jsome`/`mlr`/`confget`/`plutil`/`pup`/`peco`/`glow`/`hexyl`
Command-line parsers and manipulators of JSON, YAML, XML, CSV, INI, and PLIST formats.
- https://github.com/Javascipt/Jsome
- https://github.com/peco/peco
- https://github.com/ericchiang/pup
- https://github.com/charmbracelet/glow
- https://github.com/thetacom/hexabyte
### `watch`/`timeout`/`wait`/`mkfifo`/`nohup`/`disown`/`bg`/`fg`/`jobs`
Watch the output of any command for changes and highlight the diff, useful in conjuction with other tools below.
```bash
# show changes in the output of `ip -s link show eno1` highlighting network IO
watch -n1 -d ip -s link show eno1
# show changes in the output of `lsof +D /mnt/somedrive` highlighting accesses
watch -n1 -d lsof +D /media/usb
# run a long-running command with a given timeout
timeout 10 wget 'https://example.com/some/large/file'
# wait for a pid to finish running and exit with its return status
wait 123
# create a fifo pipe for inter-process communication
mkfio /tmp/testpipe
mknod /tmp/testpipe p
```
- https://www.lostpenguin.net/index.php/bg-fg-jobs-nohup-and-disown/
- https://www.networkworld.com/article/970196/sleeping-and-waiting-on-linux.html
- https://github.com/pirate/bash-utils
### `op`/`passman`/`keyring`/`uuidgen`/`openssl`/`mkcert`/`certbot`
Password, secret, and token generators/managers.
```bash
openssl rand -hex 20
# 8ca5a28c055a766aa5a676fff24a9755fdd113f4
```
<br/>
---
---
<br/>
## Further Reading
- https://terminaltrove.com/
- https://github.com/ibraheemdev/modern-unix
- https://github.com/rothgar/awesome-tuis
- https://github.com/alebcay/awesome-shell
- https://github.com/cdleon/awesome-terminals
- https://github.com/xuxiaodong/awesome-shell
- https://github.com/awesome-lists/awesome-bash
- https://github.com/joseluisq/awesome-bash-commands
- https://github.com/toolleeo/cli-apps
- https://github.com/agarrharr/awesome-cli-apps
- https://github.com/Kikobeats/awesome-cli
- https://www.linuxlinks.com/alternatives-popular-cli-tools/
- https://dev.to/lissy93/cli-tools-you-cant-live-without-57f6
- https://awesome-docker.netlify.app/
- https://docs.sweeting.me/s/an-intro-to-the-opt-directory
- https://12factor.net/
<center>