Before you begin, check out this man2pdf
script. Convert the man pages of the utility you want to learn about to PDF and read it on the go.
First you should start with the Linux System Administrator's Guide
. It's not all encompassing but it's a start. You should definitely learn a shell scripting language. My recommendation is Bash as it's on most *nix systems (see Bash Beginner's Guide
and Advanced Bash Guide
). You should print out (or print to PDF) the bash man page as it has a whole bunch of tips and tricks which are completely awesome and not covered in most guides. Reading the coreutils package manual
will introduce you to many often used command line utilities.
Many systems you'll be working with will likely be headless (i.e. no graphical environment). That being said you should learn a CLI text editor. I recommend you learning two. The two I recommend is nano
(which is more simple and less learning curve) and vim
Once you've learned a little bit about the Linux system, shell scripting, and cli editing you should start learning a few scripting languages (Python, Ruby, Perl, Awk). Two I highly recommend is Python and Awk. When you're scripting you should make use of option parsing libraries for handling arguments. That includes using getopt for bash scripts. You'll find as you get more experience doing terminal one liners and one off scripts that there is no end all language. Some tools are better for some jobs.
You should familiarize yourself with the standard coreutils tool set. You should get to know network tools such as tcpdump, nmap, telnet, openssl s_client, openssl x509
, netstat, and dig. You should learn about iptables firewall (the man page is a great resource) as it is used by RedHat (RHEL 5/6 use iptables and RHEL 7 will use firewalld which is a daemonized wrapper for iptables) and Ubuntu (ufw is a wrapper for iptables). Other useful utilities include vmstat, iostat, dstat (basically a combination of the previous three), ps, top, strace, lspci, dmesg, the list goes on. If you're able to master what I've mentioned then you're well on your way to being a good sysadmin. Take advantage of cron and even inode events for launching scripts. You should learn to be lazy
. Preemptive strikes are always better than putting out fires as they ignite.
I have handy little sysadmin scripts and bits in my git repository
. Check out the bin directory.
You'll likely encounter source version control at your new job as there are many different kinds (distributed vs centrally managed) and softwares for it (git, mercurial, subversion, CVS, etc.). I highly recommend learning git
(distributed source code management) and finding yourself a good workflow (I recommend gitflow
or you can mix and match with other types of workflow
). Source control can be used for more than just source code. It's useful for checking in system configurations as well.
You should familiarize yourself with real time system monitoring (e.g. Icinga/Nagios, OpenNMS, Zabbix). My recommendation is to learn Icinga. It is better than Nagios in my opinion and knowledge translates directly into Nagios since it is a fork (and Nagios dominates the monitoring market). You might also want to familiarize yourself with system trending (cacti, PNP4Nagios, munin-monitoring). It compliments real time system monitoring well.
Learn more about the logging transports in Linux (syslog, rsyslog, syslog-ng, logstash, splunk). You might also want to check out how logging can be centralized using syslog-ng and syslog/rsyslog as clients. Go a step further by having logstash eat those centralized logs. Logstash is like splunk but without having to sell your family to afford it. Splunk may be better for large setups processing large amounts of log data which need support (such as my corporate environment).
Learn about continuous integration (e.g. Jenkins/Hudson is one example). It can be used for automated deployments through your infrastructure as well. You can even get fancy and set up git hooks which automatically build and/or deploy upon each commit.
Learn about centralized configuration management (salt, puppet, chef).
Familiarize yourself with different types of storage (know most common RAID levels). Be aware of isilon, netapp, and 3par.
Learn about backups, disaster recovery, snapshot vs copy, etc. If you know C then understanding these concepts will be a no brainer.