Been using the CLI more and more and for whatever reason it gives me more dopamine than using apps with a GUI and I’m curious about what else is out there since I was a windows user til 6 months ago.
Discovering ish and the ability to use alpine linux on my iphone, also has me curious if there is anything useful/fun out there that isn’t openssh, ranger, and ffmpeg. (a-shell is still updated and comes with those two by default but doesn’t have access to alpine repo and apk, uses its own iphone based thing) Tho im curious about cli tools/apps in general to use on my pc or over ssh, not just those that could be installed on my phone
I mostly use ffmpeg to convert video and compress stuff for size limits (so I can convert before sftp when away from my pc after the render finishes) Ranger file manager on phone since it can easily exit at a path, and yazi with the shell script that lets it exit at whatever path your on on pc.
Will update this list as people comment.
- Conversion/Compression: ffmpeg
- Email: mutt, neomut
- File management: mc, nnn, ranger, yazi, sfm
- File editor: vim, neovim
- Git: lazygit
- Piracy: ani-cli (anime) rip (music)
- Pdf Management: pdftk (pdftk-idk, or stapler)
- Python: rich, pythondialog, textual
- Docker management : lazydocker
- Performance monitor: btop, nvtop (nvidia), ncdu (disk usage)
- Network management: nmtui
- Web browser : browsh (firefox backend)
- Video downloader: yt-dlp
- Shell scripts: dialog, whiptail
- Misc: netpbm (plaintext image creation) If you can’t comment this post seems to be bugged for me at least, says I’ve deleted it and I can’t reply to anyone.
Unpopular opinion maybe: many of the suggestions here are not worth the time.
Buy I’ll add one to the mix:
yt-dlp
I use a lot to download YouTube videos. Very robust.Feel free to tell them why and help fill us in on whats better lol, im sure no one minds finding better, or is it because youd rather use an app or website?
Great tool. It’s also leveraged by pinchflat, where you add Youtube channels via a webui and it downloads their videos and adds them to Jellyfin.
It even works on other sites. I haven’t run into mainstream site it doesn’t support.
My list is a bit software developer-centric, but can be useful for development-adjacent tasks too.
- The Github CLI - great for doing routine GH work, like opening PRs or filing issues.
- glab - ditto for Gitlab.
- jq - JSON parsing, formatting, searching and modification.
- pup - like jq, but for HTML pages.
- sed - A powerful text find-and-replace tool with regular expressions.
- scp - File transfers over SSH.
- xargs - run a command for every line of output from another command. Great for automating manual tasks.
- curl - make any type of HTTP (and many other protocols) request from the command line.
- tar - compress/uncompress archive files.
- pwgen - generate passwords with lots of options.
- uuidgen - generate universally unique ids.
- exiftool - read and modify image/video/audio file metadata. Good for adding/editing tags/albums/dates/etc.
I’m a big fan of jq. It’s a domain-specific language for manipulating JSON data.
ImageMagick is like ffmpeg but for images.
inotify-tools has command-line utilities that can be used in a Bash script or a Bash one-liner to make arbitrary things “happen” when something “happens” to a file or directory. (Then the file is opened or written to or renamed or whatever.)
I probably should mention rsync. It’s like a swiss army knife for copying files from one place to another. And it supports “keeping files syncronized” between two locations.
Of course, there’s tons of stuff that you pretty much can’t talk about Bash scripting without mentioning. Sed, awk, grep, find, etc.
Also, I totally relate about the terminal giving more dopamine. I kinda just hate going on a point-and-click adventure to do things like image editing or whatever. To the point that I’ve written a whole-ass domain-specific-language to do what I want rather than use Gimp. (And I’m working on another whole-ass domain-specific-language to do a traditionally-GUI-app sort of task.)
jq
is indispensable.
Midnight Commander (mc) is a classic file manager if you grew up in the 90s with Norton Commander on DOS.
For my local Git repositories I prefer
lazygit
now. There’s also a plethora of other lazy* tools for e.g. Docker.And you should maybe look at
dialog
orwhiptail
to spice up your shell scripts.If you do Python, there’s the
rich
library and there’s alsopythondialog
. Both pretty easy to use. If you want more, there’stextual
.EDIT:
mutt
for emails is nice once you’ve managed to set it up.Yeah i never used norton commander so mc was a bit rough looking for me, but it was the first one I saw and why I found yazi, ranger, etc. There are a ton of them, just listed the few i tried
Yeah, I’m trying to build some muscle memory in
yazi
, too, as I like its instant previews.I’ve also just remembered this website that has lots of other cool terminal tools:
I rely on cli tools for a lot of things too. Here’s a list:
tmux: terminal multiplexer
zsh (with fzf zsh completion): shell
fzf: fuzzy finder
doas: sudo replacement
bat: cat replacement
fd: find replacement
advcpmv: cp/mv replacement
eza: ls replacement
zenith: htop replacement
trash-cli: trash management
neomutt: email client (notmuch is a most recommended addition)
neovim (and plugins): text/code editor
buku: internet bookmarks manager
tut: mastodon client
ucollage: image viewer
udevil: (un)mounting removable devices and networks without a password
magic-tape: youtube search/download and more
rofi: used with scripts to do a lot of things
pass: password manager
yazi: file explorer
iwd: wireless manager
khal: calendar and webdav sync with vdirsyncer
taskjuggler: complete task manager
newsboat: feed aggregator
fwupd: firmware updater
chawan: web browser
ncmpcpp: mpd-client
duf: disk usage
abook: contacts managerI have some of them detailed here.
This GitHub also has a long list.Edit: added abook and duf to the list
Let’s save yourself some time. https://github.com/toolleeo/awesome-cli-apps-in-a-csv
du-dust - disk usage (written in R U S T ⚙️) bottom/btm - htop/top replacement zed editor obs-studio (not CLI exactly)
Ripgrep (rg) instead of grep or ack. Stupid fast.
yt-dlp since I don’t see it mentioned.
Drop tmux and use zellij (if you are scared of tmux, zellij is easier to learn IMO).
pdftk is fantastic for merging and splitting pdfs (among other things)
zoxide
. It’scd
but better. It remembers which directories you’ve navigated to, and fuzzy finds them.So instead of typing:
cd /really/long/path/to/sime/dir
You can type:
zoxide dir
And it’ll take you right to the directory.
I’ve got it aliased to
zd
so I type:zd dir
And I’m there.
Pretty sure zoxide automatically uses “z” as its alias by default. One less letter for you to type.
You can save tons of time by adding aliases to your
.gitconfig
such as ‘ga $fname’ (where “fname” would be files you want to add) the alias for git add. You can also do the same thing with gc, gs, etc and if youre like me and you write dozens of lines of code a day, it can save you a lot of time.I’ve already aliased
gl
for git log with my flags, but have been too lazy to add more aliases.
Oh. I did not know that. Gonna try that right now.
Xargs, bc, paste, sed, awk.
Git: lazygit Docker management : lazydocker
Well, seeing them in the list like that rubs me the wrong way. 😅
Both of those come with a CLI, called
git
anddocker
respectively, which is the official way of using them. These CLIs might not be particularly sexy, depending on who you ask, but they’re decent enough and worth learning, even if you go thelazy*
route, since online resources all just explain the official CLIs and you might find yourself one day administering remote systems where you can’t install additional software…deleted by creator
aerc for email