A reading list for the larval stage sysadmin. This list is focused on the UNIX family of OSes, mainly because that is my area of expertise.
Table of Contents
- Articles and Books to Read
- Languages
- Tools
- Blogs and Podcasts
- Online Communities
- Windows Administration
- Other Resources
So you've got your first sysadmin/sre job or internship. Congratulations, it's going to be an interesting ride.
- Clean Code - Every year, countless hours and significant resources are lost because of poorly written code. But it doesn't have to be that way. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code "on the fly" into a book that will instill within you the values of a software craftsman and make you a better programmer-but only if you work at it.
- Continuous Delivery - A book that has rapidly become the guide to planning and implementing build pipelines.
- Effective DevOps - A practical guide for creating affinity among teams and promoting efficient tool usage in your company.
- Git Magic (free ebook) - Git is a version control Swiss army knife. A reliable versatile multipurpose revision control tool whose extraordinary flexibility makes it tricky to learn, let alone master.
- Hello DNS - Every sysadmin/sre needs to know how DNS works. Start with DNS Basics is a good introduction.
- Lean Startup or Lean Enterprise - This pair describes the process surrounding implementation and use of Lean principles in Startup and Enterprise organizations. There are a number of companion pieces that extend the principles to specific fields of study and implementation, such as Lean Analytics.
- Site Reliability Engineering - How Google Runs Production Systems. This can be read online for free at Google's SRE site.
- Systems Performance: Enterprise and Cloud by Brendan Gregg, this book is an award winner and a favorite of many a sysadmin, it addresses systems performance at scale.
- The Art of Capacity Planning - John Allspaw's book is a hands-on and practical guide to planning for such growth, with many techniques and considerations to help you plan, deploy, and manage web application infrastructure.
- The Art of Monitoring - James Turnbull's book on the art of modern application and infrastructure monitoring and metrics.
- The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations - The results of a multi-user case study on DevOps and the practical-oriented sequel to The Phoenix Project
- The Goal - A foundational novel on the Theory of Constraints and many other operational concerns.
- The Phoenix Project - know why your projects are important to the business.
- The Practice of Cloud System Administration, by Tom Limoncelli. Focuses on “distributed” or “cloud” computing and brings a DevOps/SRE sensibility to the practice of system administration. Includes case studies and examples from Google, Etsy, Twitter, Facebook, Netflix, Amazon, and other industry giants are explained in practical ways that are useful to all enterprises.
- Time Management for System Administrators, by Tom Limoncelli. You're going to be pulled in a dozen different directions, if you can't manage your time you and your job performance are going to suffer.
- UNIX-Linux-System-Administration-Handbook by Evi Nemeth is a great book, this book is targeted to larger system deployments and real world large systems.
- Web Operations: Keeping the Data on Time - A collection of essays and interviews, with web veterans such as Theo Schlossnagle, Baron Schwartz, and Alistair Croll that will teach you strategies for designing your web site to scale up smoothly to web-scale load.
Bash is objectively a terrible programming language. All variables default to being globals, there is no module system built into the language, dealing with hashes is horrible, and there are other horrors based on it trying to be backward compatible with sh
.
That said, it is on every system, so every *NIX sysadmin needs to know Bash.
Here are some useful resources to help you step up your shell scripting game:
- Advancing in the Bash Shell - Sam Rowe's bash as CLI tutorial.
- Bash Pitfalls - Greg Wooledge has a great list of unpleasant surprises in Bash.
- Google's Shell Style Guide lists what Google's developers consider best practices for bash scripts.
- Learning the Bash Shell - hard to go wrong with an O'Reilly reference on anything, really.
- Pure Bash Bible - A collection of pure bash alternatives to external processes.
- Safe Ways to do Things in Bash - Excellent set of tips from the authors of shellharden
- shellcheck is a lint for bash. It'll help you find unused variables, deprecated syntax and other things that make your bash scripts less stable. You can install it with
apt-get
,brew
,cabal
, oryum
. - shellharden - is a syntax highlighter and a tool to semi-automate the rewriting of scripts to ShellCheck conformance, mainly focused on quoting.
- zshelldoc - Documentation generator for Bash & Zsh, with call-trees, comment extraction, etc.
Often you'll find yourself in a Windows enviroment, like it or not. These might come help you in those cases -
- Best Practices and Style guide
- Powershell Slack - Think of it as a virtual Powershell user's group
- PowerShell.org eBooks
- PS Cmdlets In Your Inbox lets you schedule a task to get PowerShell Cmdlets via email daily or at the command line.
Python has much better support for string manipulation and system infrastructure than Bash. In addition, there is a rich library of modules supporting various tasks you can use in your scripts that are just a pip install
away.
A couple of places to go into as training would be:
- Automate the Boring Stuff with Python, a free Book that helps you automate boring and repetitive Tasks with Python.
- Programming Python, a well-written O'Reilly book, short and concise.
- 20 Python Libraries You Aren't Using (But Should), a free Book by Caleb Hattingh published by O'Reilly (No real Email address needed.)
- Learn Python the Hard Way, a rather comprehensive tutorial covering many aspects of the language.
- The Hitchhiker's Guide to Python, a neat place to see usage and examples of Python and not only for systems administration.
- WSGI - Web Server Gateway Interface, the Python implementation of web servers.
Ruby also has a rich ecosystem of gems you can use in your programs, and like Python, much better string and data structure manipulation than Bash.
If you're in a Ruby shop, you'll want these books:
Perl has a long history of being the system administrator's friend, bringing the best of bash, sed and awk together. It is also suitable for building tools for the system administrator to utilise in their work.
- carton - A dependency management tool.
- cpanm - An alternative and very friendly tool for installing modules from CPAN. This pairs well with perlbrew.
- perlbrew - A tool for managing one or more Perl installations, without needing to modify the system-level Perl.
- pinto - A tool for managing a private CPAN repository.
- Mojolicious - A rich framework for doing all things web, from building web services and sites to building HTTP client applications.
- Plack/PSGI - The Perl implementation of WSGI, with many Plack servers available for use.
- Task::Kensho - A list of recommended modules for many purposes, including reading configuration files, connecting to databases, logging, sending email, web crawling and development, and handling XML.
- Terraform is a tool that allows you to configure your infrastructure as code, just like Chef/Puppet/etc allow you to manage the configuration of individual machines as code, with all the benefits of being able to diff, code review, etc. Terraform works with (as of this edit) AWS, Google Cloud, Microsoft Azure and many other systems.
- AWSCli provides a unified command line interface to Amazon Web Services. Wean yourself off of the webui if you want to be truly productive.
- og-aws is an excellent resource to AWS written by and for engineers who use AWS extensively.
- S3cmd is a free command line tool and client for uploading, retrieving and managing data in Amazon S3 and other cloud storage service providers that use the S3 protocol, such as Google Cloud Storage or DreamHost DreamObjects.
- Azure CLI 2.0 new preview CLI interface for Azure (written in python).
- Azure Code Samples samples of code showing how to interact with Azure.
- Azure Friday "Just two engineers, a laptop and the cloud, solving problems".
- Azure Quickstart Templates community contributed Azure Resource Manager templates for tons of things.
- Azure Xplat CLI cross platform CLI interface for Azure (written in nodejs).
- Official Azure Documentation official documentation for all Azure services.
- Introduction official introduction and an overview.
- GCP for AWS professionals list equivalents for AWS products in GCP.
- GCP for Azure professionals list equivalents for Azure products in GCP.
Quite simply, if you aren't using configuration management, you're doing it wrong.
You don't want to manually configure any servers - no matter how hard you try, they won't end up truly identical and having meat typing in commands takes far too long per server, doesn't scale, and the manual labor will discourage you from standing up new VMs for testing.
Treating your configuration as something described in text files allows you to treat it like code. You can do pull-requests, get your changes reviewed by your team and view the differences between your configuration at different times.
There are several good options:
- Ansible is designed to be minimal in nature, consistent, secure, and highly reliable. Was recently purchased by Red Hat.
- Chef is written in Ruby and Erlang and uses a Ruby DSL to describe system configuration
- Puppet makes it easy to automate the provisioning, configuration and ongoing management of your machines and the software running on them. Make rapid, repeatable changes and automatically enforce the consistency of systems and devices – across physical and virtual machines, on premise or in the cloud.
- Salt orchestrates the build and ongoing management of your infrastructure.
Docker is a tool for running and managing containers. Containers are rapidly growing in popularity for local development (as an alternative to virtual machines), and can also run software in production with tools like Kubernetes or Amazon ECS.
Follow the installation instructions for your preferred platform:
- Docker CE for Mac
- Docker CE for Linux
- Linux usually requires a separate installation of docker-compose
- Docker CE for Windows
- The Docker Book - An excellent resource for getting started with Docker. This book is quick & easy to read.
Among the many places you're going to find regexes very useful for is handling logs. When you have a multi-gigabyte logfile, it's a lot less painful to look at just the entries generated by the service that you got alerted about.
- sed and awk Pocket Reference presents a concise summary of regular expressions and pattern matching, and summaries of sed and awk and how to use them to edit files and convert data from one format to another.
No matter what source control system you use (git, hg, perforce, whatever), you're going to have to write commit messages. Make them good. Explain why you made the change, not just what you changed. And no, the diff is not an explanation. Always start with a single line that explains what you were trying to do in general, then a body that goes into more detail.
Good commit messages help the rest of your team understand what you're trying to do and make it easier for them to find logic errors in your pull requests - the code may be technically correct, but if they understand what you're trying to do, they can see when your code isn't actually doing what you say you want it to do, even if it is technically correct.
Here are a few articles that while focused on git apply to any source control system you're using:
- 5 Useful Tips for a Better Commit Message is another good article on writing commit messages.
- A Note About Git Commit Messages
- Writing Good Commit Messages is a good article on writing coherent commit messages.
Whether or not your shop uses git internally, you're going to end up needing to use it for the many useful things on GitHub.
- 19 Git Tips for Everyday Use - a good set of starter tips for using git.
- git-extra-commands - a collection of extra git helper scripts.
- git-flight-rules is Kate Hudson's guide to using Git in specific situations.
- git-tips/tips is a collection of git tips
- Pro Git by Scott Chacon and Ben Straub is a great overall resource for git.
- Why the Heck is Git so Hard? The Places Model - an article about moving from SVN/CVS to git.
- Ben Limmer's Git Skills Talk will help you understand using git (particularly with GitHub)
Testing is incredibly important and you should undertake this for your infrastructure as well as your applications.
- Test Kitchen - Test your configuration management tooling.
Don't get involved in the Editor Wars. Just. Don't. Your choice of tool does not need defending. Nor does anyone else's choice.
However, you should care about your tools. You should be able to use them efficiently.
Vim is a reality of life for SysAdmins. It is the one editor you can be sure is installed in even the most minimal install. You must be able to do at least basic edits with it. You don't need to love it, but you will have to use it.
- Damian Conway, "More Instantly Better Vim" - OSCON 2013
- vi and Vim Editors Pocket Reference, 2nd Edition
Emacs is an extremely extensible editor. In jest, it is frequently referred to as an operating system with a half-decent editor.
If you want to get a taste of what emacs can do, you can defer to Magnars and his excellent video tutorials/demos:
One of the biggest problems with Emacs is that the defaults present a fairly different experience to what people are used to. Your first stop should be learning the basics using the built-in tutorial, followed by the mini-manual from tuhdo:
- Type
ctrl-h
, followed closely byt
from within emacs to see the tutorial - http://tuhdo.github.io/index.html
Emacs can be can be made to look and act relatively modern if that's your desire:
If you're looking for emacs packages, the following online package index is the most popular, and tracks many:
There are several excellent starter kits out there, with varying delineations of wizz-bang. Roughly sorted by wizz-bang, here are the starter kits that exist, with spacemacs being the most popular:
- https://github.com/technomancy/better-defaults
- https://github.com/bbatsov/prelude
- https://github.com/hlissner/doom-emacs
- https://github.com/syl20bnr/spacemacs
Here are some emacs configurations for inspiration:
- Magnar Sveen's very interesting and original emacs config! https://github.com/magnars/.emacs.d
- Phil Hagelberg's config: https://github.com/technomancy/dotfiles/tree/master/.emacs.d
- Steve Purcell's excellent config: https://github.com/purcell/emacs.d
Use tools with which you are productive. If you want to use a GUI Text Editor or IDE, don't let anyone give you a hard time about that.
There are GUI versions of vim and emacs that have ardent followers.
- Atom is a fairly new editor with significant traction and plugin ecosystem.
- Sublime Text is another editor with an extensive plugin ecosystem and arguably one of the inspirations for Atom.
- Visual Studio Code is a cross platform editor that is gaining traction in the marketplace.
- Arrested Devops is hosted by Matt Stratton, Trevor Hess, and Bridget Kromhout. ADO is the podcast that helps you achieve understanding, develop good practices, and operate your team and organization for maximum DevOps awesomeness.
- Code as Craft is Etsy's ops blog and is full of well written examples of dealing with real-world problems at scale.
- Hey, Scripting Guy! Blog is a blog that answers common (and some uncommon) PowerShell queries.
- Julia Evans' Blog - Julia writes a great blog where she dives into interesting ops topics and explains them clearly.
- Kitchen Soap - John Alspaw is the CTO at Etsy and writes a great blog about web operations and operating at scale and other things that are interesting to ops types.
- PowerScripting Podcast is hosted by Jon Walz and Hal Rottenberg.
- DevOpsChat Slack is another community of DevOps minded folk with a diverse set of topic specific chat rooms. Home to Arrested DevOps.
- Hangops Slack is a community of DevOps minded folk with many subject focused chat rooms.
- PowerShell Slack is a community of PowerShell enthusiasts and Windows centric DevOps topics.
Help wanted here.
- awesome-sysadmin - A curated list of awesome open-source sysadmin resources.
- oncall-handbook - Alice Goldfuss' excellent oncall handbook, read this before your first oncall shift.
- sre-interview - A collection of questions to practice for interviews.
- stack-on-a-budget - A list of free/cheap tiers of services that you can use to learn the various cloud-based systems.
- sysadvent - Every year the sysadvent team publishes 24 good articles for sysadmins.
- Etsy's Debriefing Facilitation Guide is a great guide to conducting a blame-free debrief after an outage.
- Pēteris Ņikiforovs has a good blog post explaining what everything you see in top/htop output here
- Patrick McKenzie wrote a great blog post on salary negotiation. Salary negotiation is one of the few times in your life where a five minute conversation can earn you thousands of dollars - be prepared.
- Patrick also has a good podcast episode on salary negotiation - Kalzumeus Podcast Episode 12: Salary Negotiation with Josh Doody (there's a transcript too). You have to do it, it affects your life, you should do it well.
- The Holloway Guide to Equity Compensation - Stock options, RSUs, job offers, and taxes—a detailed reference, including hundreds of resources, explained from the ground up.
- What I Wish I'd Known About Equity Before Joining A Unicorn - This is an excellent summary of how to value stock options and what the tax implications are and how to minimize potential tax (in a USA-centric way). I heartily recommend reading it before you accept any offers involving stock as part of your compensation.