Just start doing things using it and lookup how to do things you don't know. Enough time and you'll be good at it.
Linux
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
- Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
- No misinformation
- No NSFW content
- No hate speech, bigotry, etc
Related Communities
Community icon by Alpár-Etele Méder, licensed under CC BY 3.0
So there is no like FOSS course on how to be cli proficient
The answer is that it depends what you're doing. You can have an extremely efficient dev env CLI. You can kinda brows the web cli. You probably don't want to edit videos and pictures in the CLI.
Because a lot of foss has replaceable building blocks, you're not going to find a 'this is how you do things course'. You're much more likely to find, 'this is how you use a certain text editor in the CLI'.
So, first, I guess, figure out or articulate what you want to do in the CLI. From reading and sending mail to writing code and building a dev environment to just basic scripting to maintain your install.
After that step, you'll want to try a couple of the building blocks that do that.
Once you find one that kinda clicks, then you can go become proficient and start to put together the pieces of your workflow.
I run arch/Ubuntu and gnome. I spend about 50-70% of my time every day in a terminal. I spend the rest in a browser. Sometimes I use files, libre office calc, gimp or the calculator app, but even combined their usage is probably a rounding error.
I run gnome term (used to do a lot of urxvt but gnome term seems to work fine these days)
From there, I start tmux. Inside of tmux, I run a few windows. One has email, a couple shells, chat and system monitoring.
The next window has my core dev env, I run nvim with a server so I can upen tabs in nvim from different terminals, in nvim I run the lsp servers for linting and code completion. I use ranger as a file browser/previewer and that's hooked to nvim so when I select a file there it will open as a tab in nvim, additionally I can run that file in the debug pane in the bottom of the window.
Then I just have windows that I drop into to do additional tasks, ops work on multiple servers at once, a second dev env to make a quick change in a different package, or a new window to scrape up a one line script to parse a log file or data dump for processing else where.
All of this takes time, for me about 15 years probably to say 'ok, I want(need) to do this thing in the terminal, now what's the best way to get that done . . .'
And then, you just kinda build it.
Linux Journey is a good one for the basics. But I would agree with the other commentors here, and say the best thing you can do for yourself is to just use it day to day.
I once heard something about learning other languages. Your brain has two methods of learning, one is the academic, and another is practical. When you learn something purely academic, your brain isn't prioritizing it as much, but if you're doing it daily, and you need to be able to do it, then your brain goes "oh man, I better pick this up quick" and starts kicking more of your subconscious power into learning it. I think using the command line is going to be a similar deal.
"cli proficient" depends entirely on what you are doing, other than extremely basic stuff like learning how to use coreutils, really you just gotta try and use it whenever you can to get used to it.
There are a ton of them.
practice. practice. practice. Just keep at it. Compile the things you need from source and work through the problems until they are solved. Most CLI programs follow a common set of conventions which you just have to build an intuition for over time. You are learning a new language and immersion is key. Also, the CLI is merely the interface. The system is akin to the culture. There are whole set of idioms which have to be learned over time.
Unplug your mouse. Seriously. Do it. It might sound like the "kicking and screaming" method but you'll learn to rely on your keyboard even for GUI tools and you'll vastly improve how fast you navigate your computer. You should find yourself more and more in the terminal, obviously, but you may learn also some nice tricks with everything else.
Solid advice.
It boggles my mind how few people use hot keys and ALT to navigate menus. Something that has probably been a standard on computers since as long as I have been around (the 70's) ....
Just... Use it more, really the only way to get better at something is to do it more.
The trick is to xdotool the cursor around the screen and to simulate keystrokes.
Get use to navigating the file system. Know where you are, where you want to go and how to get there. After that, start following guides on installing things manually just for fun. I can't tell you how many times I've installed Arch Linux in a VM from scratch for fun. Lol. The Arch Wiki is your friend and can be used even if you stop using arch for certain things.
Lots of people are suggesting using TUI applications.
While I don't disagree that will make you more comfortable spending time in the terminal, you're not really getting better at the command line (CLI).
I recommend you learn the basics of how the shell works. This is a good resource: https://effective-shell.com/
I recommend replacing GUI apps that you use one by one with CLI apps, I started by changing my file manager to ranger. Don’t rush or you may get overwhelmed and don’t interrupt your workflow too much. Next I started using media players, video editors, and even steamcmd to launch games, try to find a replacement for GUI apps searching online. This list is a good place to start;
Focus maybe on some CLI tools, like text editor. I use Vim, it was pain to learn but been worth it, since you don't have to leave the keyboard for anything. Once you learn the layout you can use it in other IDEs that also, many have plugins or built in support for Vim layout (JetBrains IDEs do) so I can use the same key map in desktop apps to do C# and C++, etc..
Also use Vim Mode that mode in the https://obsidian.md/. Which is great since you can also use Vim in the CLI to edit the Markdown Files.
Good Vim Cheat Sheet, bit confusing but as you get use to VIM it makes more sense.
http://materials.ucsd.edu/doc/vim_cheat_sheet_for_programmers_screen.pdf
Also this book is pretty handy, the 3rd edition dropped GUI apps and focuses 100% on CLI.
https://linuxpocketguide.com/
Handy if you have a Steam Deck also.
Switch to Gentoo. Either your command-line abilities will improve, or you will run screaming into the night before you manage to get X (or Wayland) up and running. 😜
Trial by fire!
Here are some resources that might help:
- https://github.com/jlevy/the-art-of-command-line
- https://sanctum.geek.nz/arabesque/series/unix-as-ide/
- https://missing.csail.mit.edu/
For scripting, keep these links handy:
- https://mywiki.wooledge.org/BashFAQ and https://mywiki.wooledge.org/BashPitfalls
- https://www.shellcheck.net/
Also, +1 for Linux Journey mentioned in another comment.
Linuxcommand.org is a great start
Try to install arch without archinstall and look on the arch wiki and set up everything up in the terminal(sound, wifi, file managment, etc). When you get stuck just use google or the arch wiki(stay away from ubuntu guides bc they are usually copy and paste). If you understand the base tools try writing bash scripts to automate tasks that you do in your workflow. Good luck!
what do you mean with "CLI based workflow"? If it's about not using the gnome utilities like wifi, just check the arch wiki, pretty much everything is explained in there
Create a cheat sheet with useful commands so you don’t have to look them up online every time you need them.
Start using it more frequently and favor it over GUI apps. For instance, use cd and ls over the file manager. Launch applications I using the command line. Figure out ways to do in the CLI what you used to do using GUI. Over time you should get more comfortable with the environment.
My biggest suggestion is to use cli tools, read man pages, start with man man
, install info pages and use a tool like tldr
.
Like everything else one wants to learn, the best ist to practice and learn through finding better solution for own made failures.
First thing I'd do is ditch the GUI file manager: get comfortable with cd, ls, mv, rm, etc.
After that, maybe start with basic text manipulation, like grep, awk, sort, uniq, etc. This ties in nicely with IO redirection, which is essential for a "CLI based workflow." Get comfortable with pipes and file redirection, it's extremely powerful!
Writing shell scripts is another super useful exercise: any time you find yourself running the same set of commands multiple times, think about making it a shell script. You may end up with some really useful little custom tools that way.
When i first started woking at a Unix maker.. my task for my first 2 months was to know and document every file in /etc, /usr/bin/ and /bin..
After that month, my mentor ask me ..
what /usr/bin/ldd does ? and show me an example.
What are your typical daily activities and what kind of user are you?
Most command line proficiency comes out of necessity in managing a server that doesn't have a GUI. You are forced to learn how to do things in a text only environment, solve problems that you run in to, and keep services running.
Just use the programs in the terminal more and more. You're literally just running programs with some arguments to make them do exactly what you want. Even scripts are just a list of commands to run.
Start experimenting and break stuff. Set up some good backups and snapshots, learn how to use those well so you aren't completely screwed when something is unrecoverable, and then go to town on all the experimental software you read about but haven't tried. Breaking stuff will quickly make you proficient at the command line, and help you to understand how things work underneath your GUI.
And have fun!
Use it everyday and you just pick things up over time, you don't need to know everything. Make your terminal pretty colours. Fetishize about keyboards and the simplicity of plain text.
Start to use command line tools like mutt, links and so on. Okay, maybe not links, but mutt is still the best MUA around.
And whenever you are asked to get some data out of an excel sheet, export it to csv and use sed, awk, grep, wc, cut, uniq, sort, head, tail and stuff.
No, stuff is not a command afaik 😁
"Stuff" should be a compression tool, you tar it, then gz it, then stuff it down even further into tar.gz.stuff
I do most things on the command-line and for me, the trick is not having a lot of scripts laying around. If it's a common action I do a lot (like running the local test bed), I rely on shell history. Beyond that I just start chaining stuff together on the fly. It forces me to keep knowledge of the utilities fresh, and also keeps me from having a ~/bin folder full of outdated crap that almost does what I want.
Someone already mentioned The art of command-line. It's a start.
And just use it... you'll get better at it with time and practice.
Also, make sure your use of the CLI enhances your workflow, or it won't work.
Learn to like not having to use your mouse. Only use your mouse as a last resort. One strength of CLI is almost never having to move your hands off of the homerow. Fuzzy finding is your friend.
For example:
- Instead of using a desktop app like GNOME, where you click on stuff to open them on a visual desktop -> Use a window manager like i3. In i3 configs, set a keyboard shortcut to fuzzy find your installed applications and open them. Now, your process for opening Firefox goes from clicking on a desktop icon or scrolling through menus, to pressing a keyboard shortcut and typing in the first few characters of Firefox and pressing enter. Desktops are bloat, you can get all of the functionality of a desktop with just the i3 rust status bar extension and CLI.
- Instead of typing out and remembering long CLI commands with a bunch of flags, use fzf to fuzzy find through your bash history. Fzf uses Ctrl-R for this, and it makes CLI interfaces much faster to navigate once you've already used those commands. It also makes searching files and navigating directories in CLI faster.
- Mac and Windows lack keyboard shortcuts to fully manage the layout of things on your screen. I know they have some shortcuts, but they can't do everything without a mouse. Once again, I recommend a tiling window manager like i3 for moving tiles around, resizing, etc, all from the keyboard.
- Learn vim or similar text editors which not only use the keyboard for typing characters, but also for navigating and editing text. Instead of moving your mouse to the end character of a long word you want to delete and hitting the backspace key 20 times -> In vim, type '/' and the first few characters of the word, press enter, and type 'dw' to delete the entire word. Vim mode is also available in bash and a bunch of extensions for other apps, you just have to configure them.
Dedicate a set amount of time when you only use the cli to accomplish things. Pick simple, low risk things like cleaning up unneeded downloads in your downloads directory. Start with one file then try wildcards, brace expansion and regex.
View logs and grep to find specific events. Investigate (read only) what type of data is provided under different directories under /.
Use online resources to learn a scripting language, bash is convenient to start with, as it’s a common default shell and can be used for scripting. Learning bash can translate to one liners and eventually scripts.
This is a good resource, but I would recommend to not read it like a book, but maybe investigate sections of interest after you get a feel for some of the early topics: https://tldp.org/LDP/Bash-Beginners-Guide/html/
Force yourself to use it. Find the things you do everyday and research how to do them in the terminal
Sure, use it to post to Lemmy.ml - there's a nice challenge.
This is a bit of a pointless question. Also, not quite making sense.... because 'workflow' can mean absolutely anything.
I enjoy using Dolphin (KDE) because I have a terminal window at the bottom (F4 toggles it) which is tied to the GUI - so if I do 'zi' to jump to one of my video, or document folders, then the GUI follows... best of both worlds... and it means I can manage almost as well without the GUI, though not quite so well without the terminal.
You should aim to do things the most efficient way, without predetermined ideas about whether to use GUI or terminal. I use terminal to listen to radio, but not to edit pictures or videos.
When you get to your desktop, certainly start with a terminal open... I like Kitty - easy tabbing and splitting means I can do tons of stuff in the one window.
You learn by using, researching, and learning. That's how you can get better. You can also do a lot by trying different shells - for example, I run Konsole (with ZSH) and Kitty with FISH - so they're quite different to use, and each has benefits.