
Ask HN: Is there a "learn Linux the hard way"? - BadassFractal
I've been a hardcore Windows user for far too many years, and I'm quite uncomfortable working on Linux. I've installed Ubuntu several times throughout the years, but never got too far with it: most of my time was figuring out why video card drivers wouldn't work, what latest update broke something and how to get my 2nd monitor to be used.<p>It'd like to address my comfort levels though, and perhaps make a permanent switch to the OS for everything but the Windows-only apps. As a software engineer I'm not too averse to learning things the hard way, and I love the nitty gritty technical details. I couldn't locate anything like a "learn the hard way" approach to Linux, and was hoping that you would be able to point me in the right direction.<p>Are there books / online tutorials / anything else that are great for people just starting out, but not afraid to get their hands dirty?<p>Thanks!!!
======
nitrogen
Back in the day I found installing Gentoo from stage 1 and going through the
(now significantly obsolete) HOWTOs of The Linux Documentation Project to be
very educational.

~~~
kogir
That's how I learned too! I haven't looked at it in ages, but assuming it's
still maintained, got through the Gentoo Handbook at
<http://www.gentoo.org/doc/en/handbook/> and do all of it. Research anything
you encounter that you don't undertand, rather than just following the
directions blindly, and you'll end up knowing more than many casual linux
users.

------
gexla
Creating such a guide would be difficult since the Linux ecosystem is so
large.

Here is a good blog post by one of the developers of Mono.

<http://tirania.org/blog/archive/2011/Sep-06.html>

You might be better off running Linux in a VM so that you don't have to ditch
Windows completely. The command line is a better way to learn Linux as opposed
to the GUI. How much have you really learned about Windows via the GUI?

First focus on getting the basics down. Even the basics can get not so basic
once you get deeper into the command line tools.

Bookmark some good cheatsheets for commands and then make a point to pick up
something new in a few areas every day. For example, you can pick up Vim in a
couple of weeks but mastery is a lifetime journey. The way to get better with
Vim is to spend time every day learning something different and incorporating
that into your workflow. Otherwise you will never get far from being a
beginner. Many Linux tools are like that.

Don't worry about getting crazy with building your environment with Arch or
Gentoo until you have become strong with the basics. Also wait until you have
a lot of time on your hands. It's not an easy journey. Better to start with
something that you can be productive with right away.

------
szany
Linux From Scratch (probably the hardest reasonable way)
<http://www.linuxfromscratch.org/>

------
caw
I think the quickest way of learning it is to make something dependent on it.
With newbie Linux installs, something is going to break on you, and you have
to fix it. Whether that's flash player, a dependency hell, or messing up a
critical config, something is going to go awry before you can do your normal
work. Yes it takes longer, but you're learning.

In the year prior to really learning Linux I had tried to install Linux in a
VM, dual boot, etc. It just didn't work out because I didn't have anything to
"do" in it. It could be different that you're a software engineer, but while
my friends were scripting the automatic download of their torrents or piping
their TV tuner through a windows VM to feed it back into mplayer, I didn't
have a use case. So find your use case and force yourself to context switch
OS's. I did it when my job switched me from primary Windows admin to secondary
*NIX admin

------
LarryMade
When I got into Linux I bought one of those thick Red Hat Linux Bible, and
read it from cover to cover... well maybe not every word but skimming each
section gave me a very good insight on what the file system was, key programs,
how the OS works with daemons, popular services Linux can run, etc. With
having that background of what is what, it was much easier to poke around and
not be too afraid of it all.

Also as a suggestion is set up Linux on a spare PC and beat on it... my first
installs were usually the works, all the packages that sounded cool then
filter down on subsequent re-installs as you get an Idea what you want.

If you want quick answers to your questions stick with popular distros like
Ubuntu, Fedora, Suse, Debian - with most of those you can get what you need to
know with a well phrased google query.

------
mixu
My tip would be to get VirtualBox or VMWare Workstation, and run your choice
of Linux on it in fullscreen. There are two things that are annoying when
learning Linux:

1) dealing with hardware issues

2) dealing with updates that break stuff

Virtualization solves both of those, at the cost of a little performance. The
nice thing about VM's is that the virtual hardware is always the same and
generally well tested (no hardware issues). And if you break stuff, you can
roll back changes (VM snapshots). Both VirtualBox and VMWare have full screen
modes and support for dual monitors out of the box.

Also, make sure you get a server as well and learn to administer it it from
the command line. It's a great way to keep learning more.

~~~
schwede
If you were going to learn Linux the hard way, wouldn't you want to jump right
in with a dual boot?

~~~
mixu
A VM is for most purposes identical to a dual boot setup, except for the part
where you have hardware incompatibility issues and/or break your system. If
you want, you can ignore the option of going back to a snapshot and stay in
hardcore mode figuring out things, but you also get the option of reverting
and learning from the experience. Less frustration = more fun = more
motivation = more learning.

------
poissonpie
Try the Survival guide for Unix newbies <http://matt.might.net/articles/basic-
unix/> and follow up with Settling into Unix
<http://matt.might.net/articles/settling-into-unix/>

------
the-come-ons
If you really don't mind getting your hands dirty, I recommend:
<https://wiki.archlinux.org/index.php/Beginners%27_Guide>

My Linux skills have improved and I have really enjoyed using Linux as my
desktop and dev environment since learning by using Arch.

~~~
BadassFractal
Thanks for the tip! Ignoring the educational aspect altogether for a second,
what does one lose by using less glamorous / widely popular distros of Linux
such as the one you recommended? Is there generally a good reason to stick to
something like Ubuntu, or does it really not matter?

~~~
the-come-ons
I feel there is more freedom to choose exactly what system I want to create
for my needs with Arch over Ubuntu. I love the Arch community and I enjoy
using the forum system more than Ubuntu's. Also, I hang out in the #archlinux
channel and people are super friendly and helpful!

Ubuntu tends to be recommended for novices coming from Windows or Mac who are
also unsure of the command line. My brother installed it after he purchased a
cheap laptop. He came from Mac OS X and fell in love. After learning more, he
installed Mint and really enjoys it. He is programming now! Obviously Ubuntu
is for advanced users also. It just so happens that it is accessible to
beginners as well which is great!

When switching distros, say from Debian to Arch, you should embrace the idea
that fundamentals are completely different. Package management, for instance,
must be re-learned. And the way daemons and modules are initialized and
configured is different and plenty of other things! You are going to lose
context and that can be the most frustrating part of switching. If you can
overcome that and succeed at the new tools, you will have gained more skills.

The great thing about Linux is that it is free software. I love to experiment
with Virtualbox and lots of distros for fun. I would encourage you to try a
few, a couple non debian based, and see if you enjoy them more.

------
dot_tilde_dot
tldr: rtfm!

(maybe read about the core principles of unix first. the links suggested by
other commentators look good.)

learn how the documentation provided with your linux install is organized:
man, info, apropos, whatis. the more comfortable you get with the built-in
documentation, the more you'll find that most of your questions will be
answered there. it takes a while to get used to it though. understanding the
structure of the docs helps a lot with where to start reading. (did you know
that the man page browser has a built-in string search?)

next step: dig into online documentation resources. start with the material
curated by the distro project of your choice. don't forget wikipedia, some of
their free software articles are nicely structured, concise and very well
interconnected. you'll find plenty of useful links there, too.

third step: learn how to get the questions you can't answer yourself solved
quickly by the community. "how to ask questions the smart way" by esr comes
into mind. the way you asked your question here suggests that you might have
read that already. anyway: for almost every question there are the right
persons to ask and the right way to do so. mailing lists are good, but may not
be fast enough. on the other hand, irc culture is a little rough sometimes,
not everybody is a catalyst on freenode. look that up, there's a nice article
about how to communicate on irc. if you know how to ask in which channel, irc
is a fast resource.

when you get used to the culture of documentation and community, the gap
between user and developer gets really small.

linux is transparent. learn how this transparency is organized and
communicated.

that might sound easy, but it _is_ the hard way.

if you like the experience, consider writing on the web about your very own
way of learning linux. or put some time into improving the resources you were
using. that's a fun way to say thank you. :-)

have fun!

.~.

------
ekm2
Check out command line crash course by Zed shaw
<http://learncodethehardway.org/cli/book/>

------
kenrik
The hard way.

Hmm I would take one of the stripped down command line only distros and build
it up from there so that you get into the nitty gritty stuff.

Something like this: <http://distro.ibiblio.org/tinycorelinux/welcome.html>

Put it on a 128meg usb stick and have at it.

