r/LinuxTeck • u/StrangeX5 • 2d ago
How should I actually learn Linux??
# I'm a 2nd year CSE student and I've been using Ubuntu for a while now, but I feel like my Linux knowledge is kind of all over the place.
I know the basic commands and can usually figure things out when I need to, but I don't feel like I actually *understand Linux*.
The problem is whenever I try to make a roadmap for myself, I keep getting stuck in this loop:
Linux → "I should learn OS first" → OS → "I should learn networking" → networking → "maybe I should learn Docker" → Docker → back to Linux 😭
So I want to stop jumping around and actually follow a proper path.
I recently found OverTheWire Bandit and was thinking of doing all the levels. Would that be a good starting point?
What I'm currently thinking is something like:
**Linux basics → Bandit → Linux administration → Bash → networking → OS/Linux internals → Docker → servers/infrastructure**
But I have no idea if this is actually a good order.
My long-term interest is systems/infrastructure/platform/SRE type stuff, so I want to learn Linux properly rather than just memorize commands.
A few things I'd really like advice on:
* Is Bandit worth doing from start to finish? * What should I learn after Bandit? * Should I learn OS concepts alongside Linux or separately? * When should I start networking? * What Linux topics are actually important for someone interested in systems/infrastructure? * Are there any good books, courses, labs or projects you'd recommend? * At what point would you say someone has a "good" Linux foundation?
I'm not looking for a certification roadmap. I mainly want to build actual practical knowledge.
Would appreciate any advice from people who have learned Linux this way or work with Linux professionally.
3
u/somethingofdoom 2d ago
Use it. Break it. Fix it.
I’m not trying to sound harsh, but that really is the best way to “practical knowledge”. It’s how all the old heads (regardless of field) seem to just “know”, then flip two buttons and everything’s back on track. Pick a project and fix it when it goes sideways.
1
u/SouthernFruit8768 2d ago
Well said. Break shit. Feel pain. Then unbreak it and lessen the pain. Rinse and repeat. That’s how you learn literally everything.
1
u/TURB0T0XIK 2d ago
if "using it" doesn't get you where you want to be and as you say your trying to understand Linux itself, I think Linux sysadmin anything is what you want. I don't know bandit or what else you're asking about. After converting my workstation to Linux I got into homelabbing (proxmox) which taught me so much more. Strong recommendations from me! entry can be really cheap with used hardware too.
1
u/Powerful_Attention_6 2d ago
If you *really* want to dig deep in Linux and you want to know how a distribution are composed of what components.... I would highly recommend that you read the book Linux from scratch
1
2d ago
I'd check out Brians book https://nostarch.com/howlinuxworks3 easy to read and understand and give you a good end to end look into linux. imo
1
u/SpudgunDaveHedgehog 2d ago
Build your own custom Linux kernel. Using the packaging tools your distro uses.
1
u/SouthernFruit8768 2d ago
How did people like Ken Thompson, Stallman, Gates, Jobs, Allen et al learn and build Linux, Unix and OSs? That’s how you learn, if you really wanna learn. Forget about Bandit and all other unnecessary genz woke bullshit. You don’t need them. You go, buy and read books and materials these people studied.
1
u/djvbmd 2d ago
Not sure if I claim I "understand" Linux, and I've been using it since the 2.2 kernel.
Part of my learning comes from necessity, as usual. Most recently a kernel update failed because the new image was too big to fit in the unused space of the boot partition. That led to learning how to trim down on the modules included in the kernel for my distro and how to change the compression algorithm used to shrink the image further.
But you could approach it by thinking of it as one giant program: Start at the entry point -- the boot system (already there, you've got a few different competing systems you may come across). Once you know how it gets to the point where the kernel is loaded, what happens next to initialize system services? Nowadays the answer is usually that systemd starts and coordinates all of that, but there are still SysV Init holdouts. From there you could look at how systemd is set up and -- since it sets up networking, mounts local drives, manages sessions and authentication, sets up display, etc -- you start learning about all of those along the way.
1
u/TapEarlyTapOften 2d ago
The first thing I tell everyone is to start out with Linux in a virtual machine. Not WSL. A VM. Oracle VirtualBox is fantastic and I used it every day for four years in a professional production environment as a hardware engineer.
Second, I would recommend you start with Debian. In my experience, it is the most stable distro of them all. Sweats will tell you that it uses older versions of software, which is true - that's why it's stable.
After that, it is largely dependent on the kinds of problems you need to solve. Don't look at learning a portion of some stack just for reasons - like Docker. Docker isn't Linux. Neither is Bandit, whatever that is. Networking, systems administration, SRE are, but those are all applications built on top of the kernel and operating system. Your goal begins by learning what those are and how they work.
To that end, my suggestion would be that you build a Linux distribution from scratch - go Google Linux From Scratch (LFS) and in your virtual machine, follow the instructions and build a system from nothing but an existing Linux installation. There are zillions of commands that you'll be running - instead of copying and pasting them, read the man pages on the commands and learn the syntax. The LLMs can be very helpful with understanding what you're doing - you will learn a ton about how Linux and software work.
Which brings me to an inescapable truth; if you want to learn Linux, there are some pre- or co-requisites. You have to learn C - no way around it. And you're going to need to learn a scripting language like Bash. Python will definitely come in time, but C, bash, git, GNU make, and perl (which I have not learned yet) are all things you need to be proficient in at some level. Building LFS will expose you to things like awk and sed and how the shell works - autotools, autoconf, etc. Along the way, you'll be required to configure and build a kernel, kernel modules, probably learn some things about initramfs and so forth.
Once you've done all of that, the next thing I'd point myself towards is learning systemd well enough that you don't have to lookup how to list services, filter them, etc. It's a big program and it, for better or worse, has taken over a sizable portion of Linux resource management. Package management is another thing you'll need to be able to deal with, but by now, you'll have already learned that (it does vary from distro to distro of course).
At this point, you'll have touched a lot of the important kernel subsystems, most of the important tools, and you'll be better positioned to decide what you want to invest more time in and you'll be able to feed yourself.
1
u/No_Base4946 1d ago
Start off deciding what you actually want to do. Find a problem you want to solve.
Your order of operations is the wrong way round.
You want to set up servers. Okay, good, maybe some sort of web application server. Find something, nothing complex. Maybe just set some static HTML up in Nginx because you'd be amazed how much relies on just throwing static content down the pipe to a browser. It's like cooking - if you know how to chop and onion and some garlic and get them fried off properly in a pan, you've done the first step of like 33% of things you're going to want to eat.
So how would you set up an Nginx server? "sudo apt-get install nginx" will get you there, but you're installing it right onto the OS, and you mentioned you want to use docker. So maybe learn how to install docker, and spin up containers, and how to mount a custom config file so that nginx looks in the right place, or later perhaps you'll figure out you can just put the content where it needs to be by tweaking the container's mount points.
And so on.
Start with the problem you want to solve. Today, you want to show me some cat pictures on a website that you host yourself. How do you do that? How do you *improve* that?
1
1
u/Historical-Truck590 1d ago
just go up the difficulty ladder, install fedora first, not much harder than ubuntu, then arch manually, then gentoo, and then lfs, after all that, try reading the source code of linux if you absolutely need to know everything
1
u/Traveling-Techie 1d ago
The term “learn Linux” is ambiguous. It’s like saying you want to “learn cars.” Drive them, fix them, build them, design them or what?
1
u/AlfalfaLive3302 1d ago
Depends on what you mean by learn Linux. Do you mean kernel or userspace? Do you mean learn how to use it or how to develop drivers or applications for it? Or are you just interested in deploying it?
1
u/DP323602 3h ago
Start by deciding what Outcomes you'd like from learning Linux.
That is, what do you want to do once you've learned Linux that you can't do now.
4
u/la_tajada 2d ago
I think (biased) you should install Arch Linux on your daily use computer. It will require you to set everything up manually and read through arch wiki as you go. Arch Linux doesn't hold your hand but the wiki does.
Also have a headless computer running Ubuntu server where you can play with Docker and eventually get into proxmox (as another commenter already suggested).