I know we all enjoy being nerds and using commands (H4ckerman). But now that everything is either a gui or web based, is there really any use to terminal commands?
For example, on windows I never used powershell or cmd hardly ever. I realize now I probably could have. But Linux just drives me to use it more, which i like anyway (because let’s be honest, it makes us feel superior)
Terminal is nice for a lot of repetitive tasks that would be a chore via GUI.
Even though I’ve been a Linux user for almost 20 years >!(fuck I feel old)!<, I mostly use GUI stuff. Terminal is super neat for doing batch stuff, I’ve even learned how to do some stuff for windows for whenever I inevitably get a call from family to fix their shit. I was pleasantly surprised with
wingetand I keep a .txt file to batch install common general use apps for them, same as I keep some dotfiles for getting my preferences over on a new PC or install.I fixed a family member’s Windows PC once. Stuck in an update boot loop. Had to rebuild the bootloader to fix it. It took ten minutes once I looked up the commands online. He had already taken it to a PC repair shop and they said all they could do was reinstall the operating system. Honestly, these Windows people are like handicapped because they never really interact with their computers. They only interact with a kind of software nanny that keeps them away from the scary stuff for their own good.
I love my terminal.
Yeah linux made me love computers again! Interacting more closely with the machine is so much better for me
GUI: ~5 mouse buttons / wheel functions Terminal: +102 keys
GUI: Oh shit I still use a lot of keyboard shortcuts.
Do you unplug your keyboard to use a gui or something?
I actually do navigate through folder structures typing letters even in a GUI, but the terminal is still way faster for experienced users. And - what’s more important: knowledge acquired for the terminal stays valid for ages - in the linux world now, 30+ years. Whereas a GUI change can be catastrophic to a learned workflow.
Cmd was torturous and powershell not much better.
Some things are just massively tedious to do through any gui. Sometimes the converse is true.
One reason why LLM is desired as a ui element is that you can describe what you want in text without having to remember how to navigate a bunch of convoluted ui elements. CLI is related, except more precise but more demanding on specifics of input.
As much as I hate to say it, powershell is actually pretty good.
https://www.nushell.sh/ ?? sort of PowerShell without Microsoft?
I’ve heard of this before but never looked into it much.
It’s certainly capable, and has a more structured pipeline structure saving you in theory from awkwardness of grep/awk sorts of ‘processing’ that may be out of whack. It also has a command model where whether you are calling cmdlets or .Net functions, it’s lighter weight than a typical bash interaciton that has to fork/exec every little thing (and the ability to invoke .Net functions means a lot of capabilities that are normally not directly available to something like bash).
However, from a user experience, it’s got a few things that can be a problem:
- It’s a bit too ‘programmer-y’, and particularly maybe a bit too perl-y. Some of the same criticisms of how perl can be a bit of a mess carry over to powershell.
- It’s ecosystem is mostly just whatever Microsoft gives to you. The *nix side of the house has had a diverse ecosystem, but Microsoft is largely on their own. Good hooks into most Microsoft products, but not a whole not of third party enablement.
- Other shells have better and/or richer UX, like fish
Powershell is actually really good a manipulating large amounts of data and outputting it how you want, the trouble is the commands are too lengthy and convoluted to remember, so I have to check web sources. While Linux commands are simple and short.
There’s a sweet spot between CLI and GUI: TUI.
Pipes etc.
A GUI can’t combine commands from several different programs and move data to and from and use that with the ease and explicit nature of a terminal.
GUIs can use pipes just fine. You tell it to write to a named pipe or similar device and the program on the other end will happily consume it.
But only if the gui very specifically designs for it. With a cli you can generally wrangle arbitrary command into a pipeline.
No, if it implements any standard file I/O, it’ll work. Write to a fifo and then consume it with the other application. Or write into the fifo from another application and read it with the GUI app.
The point is that you can’t “pipe GUI output to other command”, the GUI would actually have to serialize things in a useful way and send to that fifo. Similarly you can’t send stuff to it’s stdin and expect it to do anything sane.
Further, since you can’t seek() in a fifo, a lot of likely GUI applications involving files would break on trying to deal with a fifo. Also the typical GUI app on read doesn’t assume a ‘tail -f’ like approach to arbitrary file inputs.
Yeah you can’t run a one-line pipeline, but you can still pipe between applications. Just a little more asynchronously.
Some GUIs
Yea, but try to set this up in an easy way, or to process more than one file.
Bonus points if you can achieve this under Windows 😃
There are only a couple of things that I like a gui more than the terminal.
On Windows, I used to install stuff using winget install whatever.
Waiting for the MS Store to load was a freaking anxiety needle injected into my veins. Unacceptable.
Bazaar on the other hand, it’s glorious. Blazing fast. So, I go with a GUI.
Also, there are tools like pandoc, ghostscript, caddy, imagemagick, and a gazillion others that are very powerful and quicker to do their job than waiting for a GUI to load.
And then, sometimes, there’s just no other way. Maybe it’s part of installing or updating something, or stuff like that. But a casual will either wait for a GUI, or just not do that.
I don’t think using the terminal is aspirational, it’s practical and it’s value is clear.
I don’t use the terminal often (outside my job where I’m using git commands or launching code) but when I use it it’s generally for things that are almost impossible with gui. Troubleshooting network issues or boot issues or searching for files. Fuck, sometimes I can’t even get to a folder I know is on my computer without a terminal.
It does. On Linux you can stick to graphical applications like you do on windows, it’s just when people get on Linux they suddenly have the interest to try more things that they didn’t try on windows. 90% of the time I’m using handbrake for videos conversions. Then there’s the 10% of the time where command line ffmpeg because the functionality of the software is often greater than everything that the graphical interface has implemented or ever plans to implement.
This applies to windows too. General users usually don’t need to go into PowerShell or a WSL shell but a lot of professional users will do so. Not just IT but people that process videos, images, a lot scientist, not just Matlab types, but people that got to do mapping stuff. You grab map files, terrain data - whatever - then you need to process it for another application. A lot of cases, good luck finding a GUI that hits your specific use case but some guy that had the same problem years ago got a one liner bash command, better chance for niche use cases in my opinion.
If you play games on Steam and you ever wanted to skip intro movies or a launcher and you Google for a solution and you get an answer that says to add something to the games launch options in Steam. That’s pretty close to what people mostly do in a terminal.
Especially when on windows freeware is so frequently adware and/or abandoned last updated for windows 7 and it’s a wildcsrd if that specific functionality that is really just ffmpeg or imagemagick in the background doing the work
Deleting a huge amount of files. You’ll come across cases windows, Mac, Linux where the animations add a ton of time to the operation compared to just rm -rf 'ing a folder. Folder with a ton of files. Terminal searching for a file can be so much faster and responsive compared to GUI file explorer
Creating graphical interfaces is of critical importance for user applications for accessibility but plenty of times it’s just way faster to do it in a terminal - same with Windows and Mac.
It’s easier to automate.
Its a window into the actual internals of the machine. I would say yes, its one of hte many ways linux sets itself way from Windows. And its VERY lightweight. Some linux distros dont need it, some do.
Heck even MacOS has a terminal app. Just because
For programming it’s essential.
Could you elaborate ?
I’ve always wanted to get into coding but what ive watched/read on something like godot or VBA was all clicking certain boxes in the gui and didnt interest me much. Are you saying like python and scripts ? That makes sense. I have no clue what programmers actually do since ive never been able to find something to apply it to
Godot has a terminal only mode
Clicking? I spend most of my time typing. Even in Labview there’s some typing to do. And godot requires a substantial amount of code to go with the gui side, it just has its own text editor.
But I mostly mod games these days, and I frequently need to understand the terminal api that’s being used to gather and use resources because the vscode gui fails to get things set up on its own a lot. I use the terminal directly less these days. But I still interact with it daily. Heck, I even use terminal args in steam game launching to improve performance occasionally.
I mostly use the terminal for automation though. And ffmpeg.
I wrote a program at work that gets deployed to hundreds of thousands of systems and is very hard to fully test or instrument. This program recently had a bug that was hard to track down. Using the command line, I connected to one of these boxes over ssh and ran a series of commands to detect the bug and dump details of what happened. Then, I took all those commands and turned them into a onliner that I could pass in over ssh, so I could get everything I needed for an individual maxhine. I then used
xargsto run that command in parallel over every single one of the systems my code was running on and in the end, I was left with a nice directory of files whose name was the IP of an affected system, each filled with useful information. I started by manually running command over ssh, but the composable nature of the shell allowed me to transition that into a script in a matter of minutes.I provided a more residential example of why I exclusively use the terminal for file management in a different top level comment.
So curiously I just did a post on realizing I could move some files around and realize it was quicker in the terminal. Basically I had a bunch of files in a folder and I needed to make some sub folders and move the files into them. The difference is not massive but its, to me, a bit easier in the terminal. mkdir “directoryname” instead of click new folder folder name. then like looking at a large amount of files with ls is sorta easier. ls -l resume then mv resume to ./jobs . In the gui I have to hunt around to multi select with shift and ctrl and pull them over. It likely does not sound easier but it is. terminal to is something that the more you use the easier it is doing things with it. Like using the mouse a lot does not make you quicker appreciably and moving or renaming or whatever but if you use the terminal more you do get appreciably faster. Im not even sure of the limit as I have never gotten that good but like I had a boss that could edit files so quickly in vi it was just nuts. since deleting lines is two keystrokes and repeating multiplines is even easier with no need to select. He was also crazy good with grep. Im going to make it a point of having the terminal up and think about using it before gui and then going to gui when I think it will be faster. Its kinda good for you when your in tech to. I hope to get back to my old better pace or better.
multi select with shift and control
There are cases where manually-selecting from a list of files to perform an operation on is desirable, but there are ways to do so in a terminal. Myself, I’d use dired on emacs: hit
C-x dand select the directory in question, then tag the items you want (various tools to do this, butmwill mark the current item) and then!to invoke a specified command on all of them.There are other terminal file managers out there including Orthodox File Manager-type programs like Midnight Commander and others like
ranger. I don’t use those, but I’m sure that they have similar “manually build set of files to perform operation on” functionality.
Even outside of scripting and so forth, which I use a lot, often it’s far easier and faster to just cook up a wildcard string or a regex or whatever when you’re faced with a folder with eleventy bazillion files in it, only some of which you’d like to move somewhere else.
Yes, you could point-and-click on all of those for the next hour and a half plucking them all out of your file browser window. Me personally, I’d really rather not.
Other similar use cases abound.








