this post was submitted on 31 Jul 2025
94 points (96.1% liked)

Linux

56896 readers
532 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 6 years ago
MODERATORS
 

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.
top 48 comments
sorted by: hot top controversial new old
[–] freijon@lemmings.world 3 points 1 day ago

The suggestions in the comments are all nice, but the biggest game changer for me was nushell. Once you understand how it works there is no going back. I have saved so many hours already.

[–] sxan@midwest.social 9 points 2 days ago

Oh boy. This is a rabbit hole which, once you fall into, there's no coming back out.

There is a world of terminal software. You can, quite reasonably, get entirely rid of X (and Wayland) and live in the console. Honestly, the reason I don't is only because there is no fully competent terminal web browser (although there are some quite good ones), and because anything having to do with graphics like photo management, or vector graphics drawing, is really where GUIs are useful. But for everything else, terminal clients are almost always superior.

Choosing a good terminal emulator is important, and the best one right now is Rio. It's fast, smaller memory footprint, and less CPU use than Wezterm or Kitty, and it supports ligatures, iTerm, and SIXEL graphics.

In that goes tmux, because it works over ssh and having consistent everywhere is handy, because it survives terminal and window manager crashes, and because you can open multiple clients in different windows on the same tmux session.

In that runs zsh, because it's the best shell. It's backwards-compatible to bash, but has a ton of extra features.

I'm conservative about replacing standard POSIX tools with new fad tools, because grep is literally everywhere (even BusyBox) and new things usually aren't; but ripgrep and fd are such nice improvements over grep and find I've been unable to resist. Helix is currently the best text editor. However, having a good familiarity with grep, find, and vi is IMHO critical, because they're the foundations.

My media player is ostui, which is an ncurses SubSonic client with synced lyrics and cover art support. I use catnip for visualization, because it uses less memory and CPU than cava. For task management I use a bespoke script (tdp) that use fzf with todo.txt files. I use gotop for system monitoring.

I try to use chawan for terminal web browsing, and it does do CSS layout better than most, and supports sixel image rendering, but it's often a chore so I mostly browse in Luakit, which is a GUI program.

rook is my secret service tool that uses a KeePassXC DB as the backing store, and provides credentials to everything that needs them.

  • vdirsyncer syncs my calendar and contracts to a VPS, and thence to my phone
  • mbsync syncs all of my email from my IMAP server, and I use notmuch to index and tag it
  • khard is a terminal address book that uses standard vcard directories
  • lbb is a super-fast address book search tool which also works on vcard directories
  • khal is a TUI calendar app, which works with vcal directories
  • aerc, which someone else mentioned, is a fantastic TUI email client that can use notmuch.
  • tasker is what I use for scheduled cron control; it uses standard crontab files.
  • devmon and udevil handle automounts of USB media
  • mosh is a UDP-based ssh, with interruptable sessions and network resilience
  • mpdris2-rs is the agent I use to hook up various media control tooling to ostui (which supports the mpris protocol) and other players - mpris is a sort of standardized glue for media players.
  • gomuks is an excellent TUI for Matrix
  • weechat is a TUI for IRC. I prefer gomuk's interface, but you can get a Matrix plugin for weechat if you want to use only one. I find I often have to restart weechat because otherwise it end up eating all of the memory; there's a memory leak, or something in it.
  • syncthing-daemon for syncing between almost everything
  • restic for backups

dinit handles all of my user task management, because systemd is fucking broken for user tasks. dinit is a better init system.

Almost every application I use is a cli or TUI client. The exceptions are the web browser, for reasons I've explained; Jami, which doesn't have a CLI client; Factorio, which is a game; and darktable for photo management. I'll also occasionally open Gimp or Inkscape for graphics, vlc for movies (which I could probably watch in the terminal, now that I think of it), and I usually view PDFs in a GUI client such as mupdf.

My philosophy on software is to use standards wherever possible. I avoid programs that insist on using their own DBs when there's a perfectly good standard, such as ics, maildir, and so on. It's just another form of vender lock-in. Hence notmuch (maildir), khard and lbb (directory of .ics), khal (directory of .vcs), rook (KeePass DB), and so on. This drives most of my tooling choices.

[–] why0y@lemmy.ml 4 points 2 days ago

du-dust - disk usage (written in R U S T ⚙️) bottom/btm - htop/top replacement zed editor obs-studio (not CLI exactly)

[–] Mordikan@kbin.earth 15 points 3 days ago (2 children)
  1. lazydocker: terminal based docker management
  2. ncdu: disk usage analyzer
  3. nmtui: terminal based network management
  4. browsh: terminal based web browser with headless Firefox backend
[–] Ferk@lemmy.ml 4 points 2 days ago

I prefer dua over ncdu, specially when called interactively (dua i), since you can explore the results in parallel before it finishes scanning, while it updates asynchronously.

[–] dil@lemmy.zip 4 points 3 days ago* (last edited 3 days ago) (2 children)

I do like btop for performance monitoring, your comment somehow reminded me

[–] Mordikan@kbin.earth 1 points 2 days ago

I really like btop/bpytop too. Its more useful than glances imo.

[–] dil@lemmy.zip 1 points 3 days ago

I always click on it from the start menu, forgot it was terminal based

[–] wwwgem@lemmy.ml 13 points 2 days ago* (last edited 1 day ago)

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 manager

I have some of them detailed here.
This GitHub also has a long list.

Edit: added abook and duf to the list

[–] Decker108@lemmy.ml 8 points 2 days ago

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.
[–] GrappleHat@lemmy.ml 10 points 2 days ago (3 children)

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.

[–] Landless2029@lemmy.world 1 points 1 day ago

It even works on other sites. I haven't run into mainstream site it doesn't support.

[–] dil@lemmy.zip 3 points 2 days ago

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?

[–] digdilem@lemmy.ml 2 points 2 days ago

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.

[–] dessalines@lemmy.ml 2 points 2 days ago* (last edited 2 days ago)

Some I haven't seen mentioned yet:

  • bottom, a process manager written in rust.
  • starship.rs, a smart prompt that works with most shells. Fish is my fav.
  • broot. A unique file explorer and search.
  • dua-cli a space analyzer.
  • fdupes . Find and remove duplicate files.
[–] corsicanguppy@lemmy.ca 3 points 2 days ago

Xargs, bc, paste, sed, awk.

[–] psykon@lemmy.sdf.org 3 points 2 days ago* (last edited 2 days ago)

I often work with media files. These are some tools I really like in this domain:

  • Exiftool Best metadata editor around. And it's basically a single massive perl script...
  • MediaInfo Metadata viewer specifically for AV Files. Comes with a GUI viewer but also works just from the command line.
  • FFprobe part of the ffmpeg project. For getting information about streams in AV files
  • ImageMagick For editing/convertig images.
  • G'Mic Also for image processing. But more for creative stuff.
  • GStreamer (gst-launch for running pipelines) AV Stream manipulation, Video Editing
  • DNGLab For convertig RAW Images to DNG. Its the only one I found that works well with fujifilm RAF files (and its fast)
  • SoX Swiss Army Knife of sound processing
  • Gltfpack For reducing the size of gltf files (3d meshes)
[–] TootSweet@lemmy.world 9 points 2 days ago (2 children)

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.)

[–] Badabinski@kbin.earth 4 points 2 days ago (1 children)

A bunch of GNU tools have added JSON output and it's so good. Like, GNU column can take tabular data and convert it into JSON really easily. It's like the perfect text stream.

[–] balsoft@lemmy.ml 1 points 2 days ago

OMG how did I not know this... It just might be time to switch to nushell/elvish.

[–] harsh3466@lemmy.ml 4 points 2 days ago

jq is indispensable.

[–] mbirth@lemmy.ml 7 points 3 days ago* (last edited 3 days ago) (1 children)

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 or whiptail to spice up your shell scripts.

If you do Python, there’s the rich library and there’s also pythondialog. Both pretty easy to use. If you want more, there’s textual.

EDIT: mutt for emails is nice once you’ve managed to set it up.

[–] dil@lemmy.zip 2 points 3 days ago (1 children)

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

[–] mbirth@lemmy.ml 3 points 2 days ago

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:

https://terminaltrove.com/

[–] callyral@pawb.social 6 points 2 days ago (1 children)

things i use:

  • gitui . terminal UI for git (like lazygit)

  • helix . modal text editor similar to vim, but with less configuration required

  • eza . basically ls but with some more features

[–] balsoft@lemmy.ml 3 points 2 days ago (1 children)

helix . modal text editor similar to vim, but with less configuration required

Not only less configuration required, but also semantic navigation (jump around the AST directly with simple keybindings). I can't use a code editor without it now.

[–] callyral@pawb.social 4 points 2 days ago

semantic navigation (jump around the AST directly with simple keybindings).

just searched up abstract syntax tree in helix, and i learned about syntax aware motions. how had i never heard of them before? they look very useful! thanks for mentioning that

[–] cmnybo@discuss.tchncs.de 5 points 2 days ago

GNU Parallel: It lets you run multiple things in parallel. It's very useful for batch converting large numbers of files.

[–] Zikeji@programming.dev 5 points 3 days ago

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).

[–] Ephera@lemmy.ml 4 points 2 days ago* (last edited 2 days ago)

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 and docker 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 the lazy* 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...

[–] tux0r@feddit.org 4 points 2 days ago
[–] Interstellar_1@lemmy.blahaj.zone 3 points 2 days ago* (last edited 2 days ago)

streamrip for ripping music from streaming services

[–] alt_xa_23@lemmy.world 3 points 2 days ago (1 children)

pdftk is fantastic for merging and splitting pdfs (among other things)

[–] EarlGrey@discuss.tchncs.de 2 points 2 days ago

Amazing tool but sadly abandoned and slowly getting more and more unstable and difficult to build

The better options:

  • Stapler (which also hasn't been updated in a few years) is a version implemented in python
  • pdftk-idk is a slightly more active implementation in java
[–] tuna@discuss.tchncs.de 3 points 2 days ago

I've been meaning to try out netpbm

If you aren't aware, pbm represents an image with plaintext, which makes it great for when you want to easily create an image with code

I recently learned there is a whole suite of CLI tools which work with the format. Like conversion to/from png, scaling, and overlaying one image on top of another.

[–] Maiq@lemy.lol 3 points 2 days ago* (last edited 2 days ago)

nvtop : visualize nvidia GPU usage and memory

top : monitor/manage processes although ps aux | grep appName is still my goto.

pyenv : easily install and use any python version

ipython : a customizable python interpreter. I have figured out many poorly documented modules using ipython and great for exploring modules.

Import psutil as ps

ps.#then hit tab

after hitting tab will show all attributes related to your imported module, use arrow keys to select methods == profit!

nethogs : monitor network connections by app.

firejail : app sandboxing

[–] gramgan@lemmy.ml 1 points 2 days ago

bluetuith is great for managing Bluetooth devices.

[–] hexagonwin@lemmy.sdf.org 3 points 2 days ago

emacs is great, from your list it can do at least email/file management/file editing/git/piracy/python/web browser

[–] eager_eagle@lemmy.world 3 points 2 days ago* (last edited 2 days ago)
  • dua-cli - file storage analyzer, ncdu alternative
  • topgrade - one tool to upgrade all package managers
[–] Frederic@beehaw.org 1 points 2 days ago (1 children)

Well, I used vi a lot, but seriously nano is better especially for beginner.

I also use DoubleCommander instead of midnight one

[–] seralth@lemmy.world 1 points 2 days ago

Nano supremacy! Keep it simple!

[–] k4j8@lemmy.world 1 points 2 days ago
[–] juipeltje@lemmy.world 1 points 2 days ago* (last edited 2 days ago)

Good old nano is something i use a lot, although i am considering finally giving micro a try, heard a lot of good things about it, and i want something with a bit more features in the terminal, but i really hate vim keybinds. I also really like rmpc, which is an mpd client with album art support, though i am not using it anymore at the moment because i realized mpd wasn't really what i was looking for when it comes to music players.

Edit: also want to mention cyanrip. Really good cli cd ripper with a lot sane defaults, easy to use, and in terms of accuracy probably the closest thing to EAC on windows.

s-tui is also great. It's a tui stress testing utility. I still use it every now and then even if it's just to test if my fan curve is actually working by putting some load on the cpu.

[–] harsh3466@lemmy.ml 2 points 2 days ago (1 children)

zoxide. It's cd 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.

[–] dizzy@lemmy.ml 1 points 2 days ago (2 children)

Pretty sure zoxide automatically uses “z” as its alias by default. One less letter for you to type.

[–] why0y@lemmy.ml 2 points 2 days ago (1 children)

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.

[–] harsh3466@lemmy.ml 1 points 2 days ago

I've already aliased gl for git log with my flags, but have been too lazy to add more aliases.

[–] harsh3466@lemmy.ml 1 points 2 days ago

Oh. I did not know that. Gonna try that right now.