I'm wondering what's the best way to learn the ins-n-outs of managing servers, messing with Linux, and doing all of that kind of stuff. There seems to be no coherent course/tutorial set that covers this.
Most people who become sysadmins are simple the guys and gals who were playing around with from an early age and got good at it. This playing around led them to discover things like the concept of services, the registry 'runas' etc on Windows, and grep, init and symlinks on Linux.
This is wholly inefficient.
Tinkering is important, but structure is better. Learn the concepts behind the systems you administer, the correct way to do things, and where everything fits in and how it interacts. That transforms you from a tinkerer to a professional.
The best way to do this? Easy: Find out what the certifications are, and get the certification books. Read the books, but what you're really after is the Table of Contents - that's your syllabus. That will teach what topics are important, and what can be safely ignored.
Armed with that syllabus, you can do research on the 'Net to your hearts content, at your own pace. The beauty of the profession is that with virtual machines, you can learn the vast majority of what you need to on your own.
I've found for Linux, that RedHat / Fedora has very comprehensive documentation, that will teach you alot. There's also a Debian Handbook that I encountered a few months ago. There are a lot of sites dedicated to Windows as well, and Microsoft's own MSDN is quite good.
I agree with oz about the importance of structure and tinkering.
VMs are also going to be your bread and butter for learning most things. You can set up clusters very easily with just a couple of VMs. MSDN subscriptions will let you set up test environments for Windows, and as otherwise mentioned, CentOS is free.
I believe the best way to learn a concept is to have a running system that breaks. You'll find out a lot of new information by just trying to debug the systems. Bonus points if the computer is physically inaccessible and you manage not to lock yourself out of the box remotely.
Thanks, i think this is the best piece of advice I've gotten so far (I went on reddit and Quora before this). I'm currently working with CentOS VPS (I'm only a dev) and refer to the sysadmin a lot. And I actually like messing with, have liked it for a while so I wanted to start learning it but never really found anything as structure as there is for (for example) PHP, and web development in general. I've got a half-price books right next to my house and they actually have a ton of programming books so I'll give that a shot! :)
This really depends on what your goal is. Do you want to get a job as a sysadmin? At a startup as a DevOps guy or as a BigCo Sysadmin? Do you want to host your own website?
You'll probably hear this a lot but start by creating your own Linux VM. CentOS is a free distro and actually maps exactly to Red Hat Enterprise Linux so you can put on your resume "I know how to administer RHEL" which would actually be recognized by an interviewer. Then start doing little challenges.
Ex: Write a bash/perl script which takes a word and a number. Use curl to download number of images from flickr with the search term.
Or: Write a kickstart file which sets up an apache server and is configured to serve out a static page you created.
Or: Using ping, awk/sed, grep etc, write a bash script which emulates the tracert command
Bonus points for all of the above: write your scrips in vim/emacs.
every time you don't know what command to use, find a random script in the /etc directory and try to understand what it does. When you find a command you don't know, read the man page, then google it b/c man pages can suck a lot.
Use version control. For everything. Git gets a lot of press on HN but Subversion will be recognized by a lot more people who would interview you outside of the startup world (though this is changing slowly).
Some people recommend you get familiar with your shell/editor preference files (alias commands, change colors, change shortcuts, etc). I'd argue that effective working sysadmins can get by with the defaults in bash and vim or emacs (though i feel vim is more likely to be installed on barebones Enterprise Linux distros which happen to be the ones you actually would work on)
I don't really have a goal with it other than I like messing with it and I do want to have a VPS to host my sites in the future and develop apps. So that'd be a "not right now" for the job, and kind of a mix of "hosting your own site" and "devops guy at a startup". haha :)
I'll setup a virtualbox for it, that will probably be the easiest. :)
Thanks for the exercises! I'm having to use vim (or vi) for the little things I do on a VPS I got. Oh and, I have used SVN, Mercurial, and Git. I mainly stick with Git (or mercurial) because of the free private repos bitbucket offers.
Looks like you're off to a good start. Given your goals, the one thing I'd add is to get familiar with the Configuration Management tools like Nagios and Puppet/Chef. Nagios is a management tool ("Server X is getting slashdotted. Go check it") and you can use puppet or chef for system deployment. A working familiarity with those tools would put you in the top 5% of sysadmins and would also be very useful for being the devops guy at a startup.
1. Run your own servers. Rent a server and do stuff with it, run various services, host other people's stuff for free, have a favorite PC game? Run a server. Setup and maintain common software (MySQL, Postgres, Apache, nginx, OpenSSH, BIND, Wordpress, etc, etc). Learn the init, config, and package management systems. You can learn a ton with just one machine.
2. Get a job as a "Junior" Sysadmin somewhere. Once you know enough to be dangerous you can learn how to be great by working with great people who have more experience.
3. Learn to program. Perl/Python are probably the best choices. The better programmer you are the better syadmin you'll be. Learn how to write long running daemons, network servers, and automation software.
A lot of what you need to learn to do really interesting sysadmin stuff (like automating and controlling hundreds of servers, resource management, mass storage, fault tolerance, power, cooling, advanced networking) only comes into play when you're dealing with hundreds of thousands or millions of dollars worth of equipment. Everyone is pretty much forced to learn this stuff on the job. Even a well equippped lab couldn't do a great job at preparing you for real world
Most of all: Find useful things you want to be able to do and then figure out how to do them. Then figure out how to do them better, cleaner, faster.
Good luck. Feel free to shoot me questions. I've setup and run datacenters many times and I love this stuff.
There's a rather large number of books you would have to pick up, if you wanted to go that way.
What follows is a set of guidelines, not rules.
You want to know at least one scripting language (Perl, Python, Ruby), the Unix shell, and SQL. On the Windows side, you need to know Powershell, or equivalent scripting language.
You also need to grok logging, operating systems, and hardware to some level. (At least to be able to know when to make tradeoffs between space and access speed).
Knowing various models of IPC is useful (processes, threads, evented models).
You need to know networking (configuring a Cisco or Junpier device is a good, but not required skill). Knowing the fundamentals of routing, BGP, OSPF, IP, TCP, UDP, etc are essential.
Amongst common technologies, you need to know DNS, email, webservers, proxies, file storage and access.