• We should now be fully online following an overnight outage. Apologies for any inconvenience, we do not expect there to be any further issues.

What can I do to become more proficient in Linux?

Page 2 - Seeking answers? Join the AnandTech community: where nearly half-a-million members share solutions and discuss the latest tech.

Nothinman

Elite Member
Sep 14, 2001
30,672
0
0
Just to clear something up, the jobs I'm looking at are development positions, not server admin. Some really good suggestions so far, thanks guys. Keep 'em coming :D

Yea, that's different. You can get by doing development without much knowledge of the underlying OS, although it does help immensely. Understanding how Linux filesystem permissions, where different types of files go (i.e. not in /opt...), etc will make whatever you're developing work better and look a lot more professional to those of us that understand it too.

If you're developing something that will be distributed via a normal Linux package manager you'll want to know how to create a package with the correct dependencies and probably how to maintain a repository for your target distributions.

And source control, since you're mostly on Windows you probably haven't used git much but it's getting pretty popular on the Linux side.
 

Brazen

Diamond Member
Jul 14, 2000
4,259
0
0
Yea, that's why I say use it for a few months. Because the first time you try to do something LFS doesn't cover, or patch the system you hit a very steep learning cycle.

But if the OP is only going to use this to get into development. I suggest installing ubuntu and writing programs.

Yeah, if he's looking to do development, that changes things. This is probably what I would say, but I don't really know much about being a developer. Just install Ubuntu and start coding. Installing Ubuntu and forcing yourself to use it exclusively would probably be pretty helpful here, too, as it will give you a comfort and familiarity with the system.
 

slashbinslashbash

Golden Member
Feb 29, 2004
1,945
8
81
Buy some leading-edge or poorly supported hardware where the drivers are far from being included in normal distros. You'll learn darn quick how crazy things can get with links here and there, installing this library so that you can link to it to compile the drivers, blah blah blah. In ~2004 I had the craziest time installing an Atheros chipset wireless PCI card in Mandrake 10.0. This was while the drivers were working but not finalized enough to make it into the RPM's. My office had bought like 7 of these cards, and I needed to make them work. It took me like a week of research (it seems nobody had done it before, with Mandrake 10 and that version of the drivers -- or if they did, they didn't take the time to explain it anywhere on the 'Net) and tons of trial and error. I could look at how people did it for Red Hat or Debian, but it wasn't directly applicable. I had to download and install the kernel source so that the driver could link to the kernel source while compiling, and the versions had to be just right, and I had to create symlinks in a couple of places because the driver would look for stuff in places where Mandrake didn't put it, and blah blah blah... wow it was a mess.

So yeah. Go buy some bleeding-edge networking or graphics card and get it to work on your distro of choice. That will be a trial by fire.

Or try keeping up with the current branch of the kernel. Install the latest kernel and see what breaks on your system. Keep hacking at it until you can get it to work.

You definitely need to be running Linux on dedicated hardware so that you can keep it running all the time, and so that you can use another machine to Google for error messages when the Linux machine crashed because of the drivers you're trying to install. It doesn't have to be nice -- it can be an old P3 that somebody's throwing away.

I would stay away from the more user-friendly distros like Ubuntu. If you want to learn Linux, you've got to do some stuff on your own. Try installing the barest system, then installing X11 from source. If you use GUI tools for your install, you're not really learning anything, are you? Install Apache, and PHP, and MySQL (that one's tough) from source. You'll learn all about dependency hell so you'll know what to do when your distro's package management system chokes on something.

For a good change of pace, try FreeBSD. I'm not sure if they're still using an ncurses-based setup tool, but if they are, it'll be good for your soul.
 

Scarpozzi

Lifer
Jun 13, 2000
26,392
1,780
126
CentOS is free and is basically Red Hat source. I would download CentOS 4 and CentOS 5. Install them both and notice the differences.

You should know how to do most things without a GUI. The reason it's important to know how to do things without the GUI is because all the GUI does is edit files for you. You have more control and understanding if you can do it without filling in the blank or checking a box.

When setting up a server, you should understand these basic things without using a GUI.

How to install the OS. (will use a wizard, but that's ok)
How to network the System (know where eth0 is configured, resolv.conf, etc..)
How to configure iptables (firewall to open ports for specific hosts/ip ranges)
How to start and stop services, recognize which ports they use, and make them start automatically when the system boots (chkconfig)
How to update the system and configure auto updates via cron.
Know the vi editor and its commands.

Edit: You may not want to be a server admin, but it's important to understand a few things from the development side that will save you time and headaches.
A lot of shared libraries and packages are not typically installed by default. This means, when you start working with databases and applications that are not typical, you or an admin may be required to install different dependecies. The more you know, the more you'll be able to do or guide the admin to do. The other thing that's important is to know the networking side of things...particularly in the name of security. Many admins don't follow good practices and it's a good idea to know iptables well...it's fairly simple after you work with it a while and is easier to manage if you have segmented networks to work with. The more you can learn about this stuff, the better off you'll be in the long run. The worst is when you have to jump through hoops to figure out why you can't get connected to the server due to network or security related settings. SELinux(RH/CentOS) and AppArmor (SuSE) are both picky when it comes to network/disk access and can really wreck your world if you have them enabled and not set right.
 
Last edited:

VinylxScratches

Golden Member
Feb 2, 2009
1,666
0
0
This is how I've been learning.

I wanted to build a media server... the choice was either get Win2008 installed or use Linux. I found a neat app called Twonky Media Server.

http://www.twonkyvision.de/

It had a package for Debian so I installed it. Found out it doesn't automatically start, so I learned how to get it to boot at startup.... then I wanted to sync my Music to the Debian server so I learned RSync. Then I wanted to backup to a USB drive so I learned how to Rsync to a external drive etc. Try get something useful out of the server and you will learn a lot.
 

MrColin

Platinum Member
May 21, 2003
2,403
3
81
For development, in addition to what Nothinman said, I suggest you set up your own project management system on a server and learn to use/administer it. Something like subversion or git, etc. From there I think it would help you to get aquainted with some of the more common libraries you might hope to write code that links to them. It sounds like you're already aquainted with C/C++ , start pulling down some source tarballs from sourceforge and tweaking around with them and compiling/installing them.

Using VMs, and using snapshots to save and restore your working environment will help a lot. CentOS and Debian would probably be the most rewarding for you to be familiar with. CentOS is basically RHEL sans the branding, and Debian is just a really great OS.
 

ultimatebob

Lifer
Jul 1, 2001
25,134
2,450
126
I have set up several web servers (LAMP stack) before, that wasn't difficult. Is this the kind of thing they're talking about when they say "Linux experience"? I'm thinking I need to learn some real Bash scripting and the like. I've seen guys do some crazy stuff with grep and related programs, I would like to learn that kind of stuff.

I know SSH very well, never heard of screen.

Unfortunately I can't use Linux as my primary OS on either of my PCs as I have too much Windows software I need to run (in particular Visual Studio, Office and Photoshop, and OOo and Gimp don't even come close to replacing the latter two).

If you REALLY want to become proficient in Linux, you might want to stop using Windows as your primary OS for awhile and force yourself to find ways around the shortcomings of the OS.

For example, screwing with WINE to get your favorite Windows game running on Linux will teach you far more than just dual booting into Windows to play it.

At a minimum, try booting into Linux and running Windows in a VM when you need it instead of the other way around.
 
Last edited:
Oct 27, 2007
17,009
5
0
If you REALLY want to become proficient in Linux, you might want to stop using Windows as your primary OS for awhile and force yourself to find ways around the shortcomings of the OS.

For example, screwing with WINE to get your favorite Windows game running on Linux will teach you far more than just dual booting into Windows to play it.

At a minimum, try booting into Linux and running Windows in a VM when you need it instead of the other way around.
Not going to happen. I have too much important stuff going on in my life to drop my OS and starting screwing around in Windows VMs.
 

Fallen Kell

Diamond Member
Oct 9, 1999
6,211
537
126
If you come across a server administrator job that requires these particular skills, I would run. It would be torture working in a server environmet that uses manually compiled kernels, windows managers, and non-standard shells on the servers. Manually installing software may be a usefull skill to have, but anything that goes on a production server should be well-written enough to only require "./configure && make && sudo make install".

Trying out a manual kernel install may be ok just to see what it entails, but I wouldn't fret if you don't get all the way through. Other than having to compile kernels for a college class, in 8 years of server admnistration, I've never come across a situation where manually compiling a kernel for a server was an even remotely-good idea (although I'm sure there is some case where it might be a good idea, but that's rare). You should normally just use what is provided in the software repos.

I guess someone never had to deal with real time kernel or need to enable kernel based auditing...