[LinuxFilter] Resources to help learn everything there is to know about Linux/Ubuntu. (kind of)
August 28, 2008 7:56 PM   Subscribe

Greetings! I was hoping you guys might have some suggestions on the best resources to learn about linux and how to use it to its max potential. I am using Ubuntu 8.04, but I want to learn everything about using linux. The problem is I cant find good resources as usual. I want to learn about the terminal in depth, and every little knook and cranny. I want to know what the good programs are and so on. So any books/websites/etc. you guys could link me would be great. And i already know about ubuntuforums i browse there all the time!
posted by Javed_Ahamed to Computers & Internet (16 answers total) 11 users marked this as a favorite
Two ubuntu-flavored blogs I have in my reader are:


If you want to really unleash the power of the command line, learn a little bash and a scripting language (perl, ruby, python) will get you a long way.
posted by chrisamiller at 8:14 PM on August 28, 2008

There are tons about books about linux and unix. In my opinion, it's almost impossible to learn about unix or linux or lots of other computer stuff, with just the goal of learning about it. Everything I know about computers, nearly, I know because I needed to get something done, and I had to learn more about something to do it. So, I'd recommend developing some goals and working towards them. Find books and websites about the tools you'll need to know.

Regarding the "terminal" I assume you mean working in a shell. I don't know what the kids are using these days but I've used bash for a decade and I'm not swithing, so that's something worth learning well - the basic syntax of bash is powerful enough, combined with basic unix utilities like split, cut, sort, uniq, etc, to get some real stuff done.

Learning a programming language is a pretty good idea. C is kind of an obvious choice because tons of stuff for linux is still written in it. However, linux supports almost every programming language there is, so pick one you like, and learn to use it.

There are very few books for unix that I've bought that were not published by O'Reilly. So you might want to check their stuff out. They have fantastic books about bind (a linux DNS server), sendmail, bash, etc etc.
posted by RustyBrooks at 8:15 PM on August 28, 2008

Heh. That's quite the goal. If you seriously want to learn about linux as much as you say, you're not going to get there with playing around with Ubuntu. You're going to get there by breaking every part of the system and then fixing it. You could try something like Linux From Scratch, or maybe Slackware, starting with an absolutely minimal system, learning how that works, and then slowly adding in programs to fix things that you're missing. Then you can start to understand the decisions that were made, why stuff like Debian's apt is so important, why there are 7 runlevels and what they're for, etc.

On the other hand, that'll take you a long time, and for most people it isn't a productive use of time. Unfortunately, even for a smaller subset, books and resources will only get you so far. The best way you can learn is still to solve problems. Look through /bin and /usr/bin, look at the man page for every program in there. Look through the man page for your shell (probably bash), then use and read about tcsh, ksh, and zsh. I'd pay special attention to programs like xargs, sed, awk, grep, and find, and maybe learn a little bit of perl or python for glue and one-liners. Learn either vi or emacs, if not to use, to at least be familiar with the keybindings, because they pop up everywhere in *nix, and most programs will fall into either one category or the other (i.e., `less` has vi-like bindings that are very convenient, but anything using GNU readline will have emacs-like bindings).
posted by devilsbrigade at 8:16 PM on August 28, 2008 [1 favorite]

Read the Ubuntu Forums a lot. Search the forums when you have problems.

Ask a few questions if you're really stumped.

Start helping others when you've started to figure things out.
posted by achmorrison at 9:19 PM on August 28, 2008

Yeah, basically the whole point of Ubuntu is that you don't have to learn everything about Linux to use it. It's the same philosophy as OSX - OSX is a full-fledged BSD UNIX, but probably 80% or more of its users never open the terminal or know what a kernel is. Ubuntu isn't the distribution to use to really learn about the nuts and bolts. Slackware was recommended, but it's different enough from all other major Linux distributions (BSD-style initscripts rather than SysV-style like everyone else, no real package system, etc.) that I'd sooner recommend, say, basic Debian instead.

As far as "learning the terminal in depth" - well, unfortunately that takes a long time, depending on your definition of "in depth", up to several years. What you're actually using in the terminal is called the "shell", and the default shell on pretty much every Linux and UNIX distribution is bash, so start there. Look for tutorials on bash scripting, setting up your .bashrc, what pipes are and how to use them, etc. Also, some of the most useful command line utilities are sed, awk and grep - look for tutorials on those. Learn how to compile and install software from source (most of the time, it's as easy as extracting the source, "./configure", "make", "make install", "make clean"). You may also want to learn the basics of a programming language, I'd recommend Python or Perl. People take University-level courses to learn this sort of thing, although it is possible to teach yourself (I've never taken a course besides the bullshit LOGO programming class in middle school and have been a professional Linux and Solaris sysadmin in years past), you're not going to do it in a few months.

Nthing that the way to learn this kind of stuff is by experience, not from tutorials, although tutorials can get you started. You have a problem or goal, you learn x, y, and z well enough to solve it, then learn a little more the next time you need to get something similar done, etc. You may even want to see if your local community college offers a course on UNIX basics (everything you learn in such a class will be directly applicable to Linux).

I should stress, though, that this is not something you NEED to do anymore to learn to use Linux to full potential as an end user and has not been for some time. When I started using it in 1996 or so, you had to hand-edit incredibly arcane config files in which a typo could literally break your monitor just to get a GUI working. You can do everything you need to as an end user and configure everything in Ubuntu without ever opening a terminal. All the posts so far are talking about sysadmin/server-level stuff. Here's a project you could try if you've got an old machine lying around somewhere: install Ubuntu Server on it and set it up as a file server using SAMBA or NFS. You should be able to easily find tutorials on this. Once you get that working you'll have learned several skills by experience in the process.
posted by DecemberBoy at 9:29 PM on August 28, 2008

The Linux Documentation Project (TLDP) has been a traditional reference for lots of Linux-related howtos and other information.

For culture, the Jargon File wiki is very comprehensive and details a lot of old-school UNIX hackery.
posted by kdar at 9:31 PM on August 28, 2008

Sort of seconding devilsbrigade in that Ubuntu is the operating system for you if you just want it to work and be productive, but you might want to check out some alternatives if you want to learn how the system works. I'm a Gentoo user for that very reason. If you want to stay closer to the Ubuntu family, I'd recommend giving Debian a good look. Debian is also much more oriented toward the command line, and it's less polished so you'll get more exposure to the nuts and bolts.

I also second what RustyBrooks about having a some kind of project. If you don't have any sort of goal in mind, you're likely to find that it works reasonably well, but integration with MS stuff is a pain. Learning a language is a great idea. Try programming a game or finding some open source project you'd like to contribute to. Or try building something useful, like MythTV at home.

Why do you want to learn Linux? Do you want to become a sysadmin, are you motivated by ideology, or are you just curious? This will have have an effect on what direction is best for you.
posted by Loudmax at 9:35 PM on August 28, 2008

Relatively steep, and more important if you want to actually program: Eric S. Raymond's The Art of Unix Programming.

If you don't know one already, learning a scripting language with a good unix interface, such as Perl, Python or Ruby can also be very useful. So can be learning the language Linux and most of its basic (GNU) tools are written in, C (cue Kernighan & Ritchies The C Programming Language and Steele's C: A Reference Manual)
posted by Monday, stony Monday at 10:10 PM on August 28, 2008

I usually refer back to the Rute User's Tutorial and Exposition, for Red Hat or Debian (including Ubuntu) flavors of Linux.
posted by Ritchie at 10:25 PM on August 28, 2008

Oh, and learn regular expressions early on. Many unix utils use them or have options for using them, and they're incredibly powerful.
posted by devilsbrigade at 10:31 PM on August 28, 2008

When I taught myself linux I purposly did not install any GUI. I learned strictly from the command line. If you spend two weeks using a CLI only I guarantee you will learn more than someone spending two years with a typical GUI-heavy distribution.

The less fluff the better. I suggest starting with Damn Small Linux.
posted by damn dirty ape at 10:37 PM on August 28, 2008

Scripting is your friend btw.

Also when youre ready to do a little development I highly suggest the free Think Like a Computer Scientist books. The python version is probably the easiest.
posted by damn dirty ape at 10:42 PM on August 28, 2008

This may be a little old-school...but if you're REALLY wanting to learn it in-depth, check out Linux From Scratch ..build a linux system from the ground up, with none of this fancy ubuntu stuff :)

Secondly I recommend the IBM DeveloperWorks Linux Professional Institute (LPI) Exam Prep Courses of course starting with 101 and working your way through. They are extremely detailed and well written.
posted by AltReality at 11:04 PM on August 28, 2008

and for the more lighthearted approach, if you're really serious about getting into the terminal, a fun approach is linux.com's series 'CLI Magic', often scripted (ha!) by the late, great, Joe Barr.
posted by eclectist at 12:14 AM on August 29, 2008

Response by poster: Thanks so far guys, I am a computer engineering major and i guess I want to learn the insides of linux so I can have total control of the os/know how things work so I can fix them. I am not sure what skills I really need to learn, because if I knew these i know i could just go learn them. A lot of you guys talk about learning from experience, but I really seem to need example projects. I am not learning much from booting up my computer and surfing the web/reading.
posted by Javed_Ahamed at 10:41 AM on August 29, 2008

Seconding the command-line only school of thought. I wouldn't go so far as to uninstall X (actually, being a Debian man myself, I don't even know if Ubuntu will permit that), but try this: go read some stuff until you figure out how to disable your graphical login manager (probably gdm, IIRC) and startx (not a typo) manually to the ratpoison window manager. Edit its rc file so it immediately opens an xterm running screen, and then force yourself to do everything except web browsing in that xterm. I'd say w3m for the browsing too, but I'm typing this in Firefox right now. :-/

By the way, forums, IRC channels, and mailing lists are great places to ask for help, but before you post, read Raymond's How to Ask Questions the Smart Way. Most people are nicer than he thinks, but there's always the one guy who thinks rm -rf / is a learning experience.
posted by d. z. wang at 12:26 PM on August 29, 2008

« Older PDF = Pretty Damn Funky   |   Tall ships and Flying saucers. Newer »
This thread is closed to new comments.