5

I want to learn Unix or Linux as a serious student, and specifically want to learn the basics well so that I can have proper understanding and so I can move between platforms and distributions without unlearning unusual habits.

What should I be looking for in a standard distribution? Does it really matter? Many distributions seem to be POSIX-compliant - is that the most important consideration?

2

3 Answers 3

9

Picking a distro

*nix isn't something you really sit down and learn. I would pick a distro such as one of following:

POSIX

There are obviously others which you can see on distrowatch.com. I selected these 5 since they really represent pretty much every *nix that matters, outside of Solaris or HP-UX.

POSIX-compliance is important but not hyper-critical, especially if you stay within Bash, awk, sed type of scripting. There will doubtlessly be variances so if you're inclined to stay on the POSIX path it will save you time in the long run, especially if you distro hop and/or move from one family of *nix to another.

Most distros aren't POSIX compliant, see the wikipedia page on POSIX for the gory details.

LSB

LSB or Linux Standard Base is a project/workgroup started by The Linux Foundation as an attempt to standardize APIs, tooling, etc. across the various *nix distros. It's very similar in it's goals as POSIX.

man & info pages

Most of the applications typically provide detailed information how to use them in one of 3 locations on a *nix system.

  1. man pages - Most commands provide man pages which is short for manual pages. These are your best friend when trying to figure out how the commands on *nix work. They're accessible using the command: man <command>.

         $ man less
         LESS(1)                                                                                                                  LESS(1)
    
         NAME
                less - opposite of more
    
         SYNOPSIS
                less -?
                less --help
                less -V
                less --version
                less [-[+]aBcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
                     [-b space] [-h lines] [-j line] [-k keyfile]
                     [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
                     [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
                     [-# shift] [+[+]cmd] [--] [filename]...
               (See the OPTIONS section for alternate option syntax with long option names.)
    
  2. info pages - info pages are similar to man pages. Most GNU tools provide them and they're accessible using the command info <command>.

        $ info less
        File: *manpages*,  Node: less,  Up: (dir)
    
        LESS(1)                                                                LESS(1)
    
    
    
        NAME
               less - opposite of more
    
        SYNOPSIS
               less -?
               less --help
               less -V
               less --version
               less [-[+]aBcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
                    [-b space] [-h lines] [-j line] [-k keyfile]
                    [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
                    [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
                    [-# shift] [+[+]cmd] [--] [filename]...
               (See  the  OPTIONS section for alternate option syntax with long option
               names.)
    
  3. --help** - Most tools provide some form of help backed into the program itself. It's usually accessible by passing the argument --help to the command, <command> --help.

              $ less --help
    
                           SUMMARY OF LESS COMMANDS
    
              Commands marked with * may be preceded by a number, N.
              Notes in parentheses indicate the behavior if N is given.
    
          h  H                 Display this help.
          q  :q  Q  :Q  ZZ     Exit.
         ---------------------------------------------------------------------------
    
                                   MOVING
    
          e  ^E  j  ^N  CR  *  Forward  one line   (or N lines).
          y  ^Y  k  ^K  ^P  *  Backward one line   (or N lines).
          f  ^F  ^V  SPACE  *  Forward  one window (or N lines).
          b  ^B  ESC-v      *  Backward one window (or N lines).
          z                 *  Forward  one window (and set window to N).
          w                 *  Backward one window (and set window to N).
    

What to look for

For starters you'll want a distro that comes with [gcc] (compiler), a package manager, sed, awk, Perl, Bash, and all the other sorts or GNU Coreutils such as:

The list goes on and on and that's pretty much why I think most of us hang out on this stackexchange site 8-).

I would think of learning *nix as a craft, much like wood working or carpentry. Getting started is pretty easy, but mastering the tools can take a lifetime.

EDIT #1

Touching on some points from the comments. I'm moving a good line of questioning that @JoelDavis brought up into the answer just so that it's more visible to would-be readers.

Q: Why no mention of Fedora/Ubuntu? The selection of FreeBSD over one of those seems like you're throwing them in the deep end of the pool.

A: CentOS covers Red Hat, FreeBSD covers the BSDs. For a beginner learning *nix, I would push to CentOS over Fedora to start, since we're teaching fundamentals. CentOS (BSD, Debian, and SUSE for that matter) are going to arguably be a better fit if you're going out to find a job, rather than Fedora/Ubuntu.

I would also mention this to any up and coming *nix person: "learn howto manage *nix as a server OS first, desktop OS second)". In ~80% of the questions I answer on the SE sites, I typically see users that don't have a good fundamental understanding of how to either manage a *nix server or don't understand how to develop/operate within one.

See this zdnet article if you need further proof: Linux servers keep growing, Windows & Unix keep shrinking. Servers is where most of us are going to need to deal with *nix.

Don't read the above as me dismissing *nix desktop skills or *nix's capabilities on desktops in any kind of way. My primary daily OS for 10+ years has been either Fedora or CentOS. I'm just putting the focus of learning *nix as a server OS.

7
  • No mention of Fedora or Ubuntu? For shame.
    – Bratchley
    Commented May 27, 2013 at 5:39
  • I only mention those because the OP's still pretty new, so FreeBSD might blow their minds a little bit whereas Fedora and Ubuntu have a "choose your level of involvement" feel to them.
    – Bratchley
    Commented May 27, 2013 at 5:40
  • 3
    I think @slm has done right to not to mention Fedora or Ubuntu. While both of these distros are good for regular desktop use, Debian or Arch or CentOS can teach you much more about *nix than Fedora or Ubuntu. Commented May 27, 2013 at 6:55
  • 1
    @AdityaPatawari Additionally, Fedora is similar to RedHat which is similar to CentOS, and Ubuntu is similar to Debian. So the two are kinda-sorta in that list anyway. Mentioning FreeBSD is actually good IMO, because it's a *nix but not a thoroughly GNU-based system. (Caveat: it's been a while since I dabbled seriously with the BSDs.)
    – user
    Commented May 27, 2013 at 12:50
  • 1
    If your aim is securing a job (and it sounds like it is), for others of the same mind who stumble upon this question, I emphasize Red Hat distros (CentOS and RHEL are preferred, but Fedora if you must). They are not the easiest IMO, I think Ubuntu is easiest, but they are still one of my top picks. To boot, RHEL is what I run into most often as a software engineer.
    – Garland
    Commented Apr 24, 2015 at 23:23
3

Hmm... A bit of a tall order, actually. The everyday commands (eg. cp, ps, rm) and utilities (eg. vi, top) are pretty much the same for all Unix-like systems (including Linux) - although the options varies (both available and the letter-switch to use them.

For system-administration on the other hand, they differ widely - from handling printers, adding users and installing packages... even among different Linux-distros, there will be variations here. Further more, the name of devices - especially harddisks, partitions, "slices" - varies. The configuration-files and how services are handled, also differ quite much.

Also the more underlying system - how the disks are set-up (eg. logical volumes or software RAID), how system users and groups are used (eg. Solaris with it's "roles"), and so on - varies much.

As for GUI-programs under X - the "windows" system under Unix/Linux - it will look and feel very differently depending on which WindowManager (provides the shape of windows and buttons and so on) or which DesktopEnviroment (basically a more complex WM with additional programs - editors, mail-client, file-browser and so on - with the same "look", integrated to it) you use - as well as the "theme", as many are themable both for "look" and "feel" (which buttons and how the mouse work). Different Unix-systems or Linux-distros have different default WM/DE (although it's usually simple to switch to another).

Of course when it comes to "daily use", the using of applications - spreadsheets, wordprocessors, image-editing software - the same application will work the same way - especially since even "commercial" Unix-systems now often use open-source software too.

The internals of different Unix-like or Linux systems are similar, but not identical. I wouldn't dive into kernel-internals at once, but if you do, remember they're somewhat similar, but far from identical.

+++

So any Unix-system or Linux-distro should let you learn the everyday commands and let you run (most) applications (runs on the OS, but not part of it - although Linux-distros often bundles both together), and this should pretty much work the same on any other system too. When it comes to system-administration however, although all have basically the same set of tools available, their name and usage will differ between each. Basically, you can learn good admin-routines (eg. taking backups) on any, but the actual commands and config-files must be learned specific for each operating-system.

For a newbie, I would suggest using a Linux-distro - it's similar enough to all Unix-system for the normal stuff, and not more dissimilar for the admin-stuff than any other. It's free and much used, so you will easily find help online. I would suggest you go for one of the three big Ubuntu-distros - Ubuntu, Kubuntu or Xbuntu - as they're much used, have many packages and simple to admin... LinuxMint is also very simple, and is forked from Ubuntu.

When you've learned the basic, you can try the SlacwareLinux, as it's more "hands on" than other distros. There is also GentooLinux, where you build everything from source and "boot-strap" your system while following a book - this process will teach you lots about the system. Finally there is LinuxFromScratch, where you build "your own" Linxu-system (without partial automation like for Gentoo), following a book - this will really teach you how different parts of Linux fits into each other. Compiling a couple of Linux-kernels and looking at the source-code of the kernel and other parts, will also teach you much.

FreeBSD is an open-source free non-Linux alternative, based on one of the "original" Unix-systems (BSD). Solaris is not open-source, but can be downloaded (although updates and support costs) - it's another "original", and has some rather interesting features regarding users (eg. "roles") and disk-handling. Minix is a "teaching Unix", originally companion to a textbook about operatingsystems. Debian/Hurd is a work-in-progress using a very "modern" kernel.

To be allowed to call a OS "Unix", it must be certified... as this cost much money, most Linux and other free OSes (like FreeBSD) are not certified, although most Linux-distros probably could've been. POSIX is another certification-standard, specifying a Unix-like "dream OS". Few (non?) actually follow this standard completely or implements all parts, but many Unix-like OSes are more or less compatible. Again certification costs, so many free project are not certified although they implement the standard equally well as commercial POSIX-certified OSes (eg. the Linux-kernel follows it quite well). Unless you're setting-up a system for the US Government or similar (which may require certification, eg. because of security and encryption concern), I wouldn't worry too much - most of the commands on a Linux-system, is actually follows the POSIX-standard.

2

If I were in your boat, I'd pick something fairly user friendly and probably similar to the OS's you've used in the past. With Linux the top two contenders for desktop users are Fedora and Ubuntu. Fedora is the community edition (essentially) of Red Hat Enterprise Linux which is the most popular distribution used in the enterprise/government. A lot of people say they like Ubuntu though, I haven't used it to much to come to an opinion either way. Just pick something desktop-oriented like that, so that you can live your normal life and just go down to the command line or use some tool when you have a particular self-imposed homework assignment you want to finish.

POSIX is something for software developers and enterprise systems administrators to worry about, not someone just starting out. Most POSIX drafts standardize things like the options command line tools offer and API definitions. Occasionally, a POSIX standard will set some operational requirements for a system, but even then, that's too fine a point to worry about at your level of knowledge. The skills you're learning will be largely transferable outside of Linux (not completely, though). Even with POSIX, by design it only defines a certain subset of OS functionality, there are things (like diagnostic utilities, volume management, log formats and locations, package management, firewall implementations, etc) that exist outside of any POSIX standard that you'll have to interact with on the regular. Even the stuff that is standardized will often have language like "Whether X and Y will be left to implementation." And that's supposing the given vendor hasn't made the conscious choice to deviate from POSIX (as GNU/Linux does from time to time).

No matter what other people may say or how much stock they put in POSIX, all POSIX does is keep certain key features of the OS consistent across vendors. There will always be a substantial learning curve when moving to a different OS. You actually want it that way though. If things didn't change, then vendor solutions would be limited to the exact features that the working group was able to support (given how slow IEEE moves sometimes, that list of features would be small and slow to be filled out). You want vendor choice because having multiple ways of solving the same problem is a good thing.

You must log in to answer this question.

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