I've been interested in computers for a long time and have fiddled with a lot of stuff which includes Linux. I started out with Red Hat when I was young (around 13) and lost all data, converting a FAT32 drive to something else. Later it was Knoppix which was really helpful in recovery and such. Then, it was Ubuntu. Also, I fiddled with Arch for some time, but, it breaks too often for my liking (maybe, I should have been more careful).

Anyway, currently I use Ubuntu 9.04. I want to dig deeper into the Linux world now. I want to learn how things work and use the terminal more. I am a programmer as well, so, it will help a lot.

So, the thing I wanted to ask were:

  • Good books to learn and understand Linux

  • Good habits to use Linux more efficiently.

  • Good tools about which I should know.

  • Amount of time you set aside to learn about new things each day.

  • As a programmer, how do you setup and use Linux efficiently.

Long list. I will be grateful to the answerers.

16 Answers 16


For me, the thing that I thought taught me most about Linux was performing a Gentoo installation.

For the uninitiated, Gentoo doesn't have an installer per-se, instead you download a boot image, create volumes and filesystems by hand, then start to compile lots of source code to give you a working system.

It's been a few years since I used Gentoo, assuming it hasn't changed too much, I would certainly recommend it to anyone keen to learn.

The documentation and support forums were second to none when I used it.

  • 2
    My 1st through 5th installs of Gentoo is when I really learned the inner workings of Linux and distributions. Jun 23, 2009 at 15:31
  • Hear, hear! Gentoo is great for enthusiastic learners! +1
    – wzzrd
    Jun 23, 2009 at 15:37
  1. Magazines like "Linux Format" and "Linux Journal". They can be bought at bookstores, subscribed to, or found on the internet. Old issues of Linux Format are at http://www.linuxformat.com/modules.php?op=modload&name=NewArchives&listpdfs=1, and old issues of Linux Journal are at http://www.linuxjournal.com/magazine.

  2. Get the Linux Journal/Tux Radar "Linux Starter Pack". It's 130 pages of pure win. It covers pretty much anything a migrating Windows user might want to know right off the bat. It's available at http://www.tuxradar.com/linuxstarterpack.

  3. Join a forum. Since you use Ubuntu, I'd recommend starting with http://ubuntuforums.org/. Another notable forum is www.LinuxQuestions.org. ServerFault works too. ;)

  4. Read the Rute Guide. It'll help you with the command line, as well as introduce you to other formative Linux concepts. http://rute.2038bug.com/

  5. Commands like "man program-name" and "info program-name" are invaluable.

  6. And of course, always feel free to ask questions. Having someone to help you learn an OS always makes the process easier, so find a mentor if you can.


Perhaps start at the Linux Documentation Project.

The Guides section provides some very interesting books:

  • Introduction to Linux - A Hands on Guide
  • Linux From Scratch
  • The Linux System Administrators' Guide

The HowTo sections provides some subject-specific help.


Learn how to get by in a terminal. This means learning the ropes of navigation, piping, and Unix programs like grep and sed. Ubuntu and other distros are making Linux increasingly user-friendly, but at the end of the day, the biggest boon for learning lies in its CLI roots.

This website has a handful of good shell tutorials.

  • Any books that will be helpful?
    – Strider
    Jun 23, 2009 at 11:47

I highly recommend Advanced Programming in the UNIX Environment. This is a brilliant book on general system programming for UNIX.


Use Don't repeat yourself philosophy. Do common tasks with terminal: copy, create, move, remove files, search information inside them (use grep), search files (find) and so on. Try to combine all these commands with each other plus bash scripting and awk. This will bring you to good practice and you will feel Linux power :-).

For example if you need remove some files that filename mathes any pattern, you can search every folder and delete them manualy. Here DRY comes - just combine find and rm, and you'll do this by one terminal line.

Also, as someone posted before, set up a home server. Share internet over it, run webserver, configure network printer, etc.


ls /bin, /usr/bin, /sbin and /usr/sbin. Then scan/read the man pages for every command you see. You won't remember it all unless you are some kind of prodigy. However it will expose you to most of the commands on your system and you'll have a vague idea of what they do. Then when you need to do something you will hopefully remember commands that might be relevant.

You'll also want to read the other man pages eventually, which you'll find where ever your MANPATH points, but I'd just start out with the commands first.

This is what I used to do when I was on helpdesk but there were no calls coming in and I found it immensely useful.


A bit of a sidebar tip, but I use Mnemosyne (apt-get install mnemosyne) to create flash cards of useful Linux commands and tips I come across. A couple times a week, I flip through several of the flash cards and try to keep them fresh in my mind.

Your mileage may vary, but I've found this to be a good way of retaining commands that I may not use on a daily basis so I can quickly recall them when I do need them (or at least know what man pages to peruse).

I do this for other things too, such as Vim keystrokes, Python APIs, etc.


A good way to get into Linux is basically using it.

The power of Linux is in the command-line. When you use Linux a lot you will probably get into the command-line pretty soon. Doing repetitive tasks in the GUI gets you wondering if there might be better way to do things. That way you slowly get more on more comfortable using the command-line interface.

When I was taught C in school we wrote programs in Emacs and compiled them on the command-line. That got me more comfortable working on the command-line and I learnt new tricks as we advanced. Also if you learn C you can get really deep in how Linux is built and how it works as it is written mostly in C.


A good general book is "The Art of Unix Programming." Unix and Linux share the same philosophies, even though they are slightly different.

Other than that, I would recommend learning a shell (like bash), and learning a scripting language like Perl or Python. To learn a shell, I would start with the man pages, and maybe pick up a book (O'Reilly books are good).


The Linux Documentation Project consists of lots of resources for learning.


You asked about using Linux efficiently as a programmer - in this case I would have thought shell scripting would be essential (whether it be knowing how to pass parameters in or out, or to avoid writing code to accomplish something that can already be done by existing commamnds). Try the O'Reilly reference "Classic Shell Scripting".


Linux user

Programmer would find useful many Linux command line tools. A few of them are:

  • ls -lrt
  • find - too long to read it all. Use as reference.
  • xargs
  • bash - too long to read it all. Use as reference.
  • wc
  • crontab

The are many books for intermediate Linux users and there are no good books for advanced ones. I used the following practice to get into Linux:

  • First you take a course or read a book for beginners. No GUI should be studied in process.
  • Practice is needed on the next step. Use your PC or server and look through the manuals for the commands that are needed to perform daily tasks. If you don't know which command does what you need, ask your competent friend or community.
  • Third comes shell scripting. Not only it gives a good opportunity to automate daily tasks, but also give experience needed to use interactive shell efficiently.

Linux administration and configuration is done in the same way but tends to have more googling.


I started out with SuSE when I was young. Later it was Knoppix for me as well. Then, it was Ubuntu and currently I use Ubuntu 9.04.

I learnt nearly everything I know about linux from the internet and from friends.

The only book that helped me to learn and understand linux better is Andrew S. Tanenbaums Modern Operating Systems.


A good way to get to know Linux is to do things with it. You could try setting up a Linux box on your internet connection at home, or in a virtual machine.

Try setting up a few server applications:

  • webserver (e.g. apache)
  • content management system (e.g. drupal)
  • database (e.g. mysql)
  • mailserver (e.g. courier) with a spam filter (e.g. spamassassin)

This will help get you familiar with common Linux tools and practices.


Books can be good, but try and find yourself a human mentor. When i was younger i was lucky enough to have a unix systems administrator show me the ropes, after a couple of years of working under them, i even surpassed their knowledge.

Unix is a strange beast, you can ask 10 unix administrators to perform an action , and you'll probably get 10 different answers. Possible none of the answers will be incorrect, it's because the tool is so flexible it can do things more than one way.

it's definitively not the 'one microsoft way' of doing things :-)

Sometimes the freenode irc channels can be a great help if you get stuck with concepts when reading. Check them out, they are friendly, if you are friendly.

Not the answer you're looking for? Browse other questions tagged .