The Essential Guide for Aspiring DevOps Engineers

I am a software developer and technical writer. As an experienced technical writer, I enjoy crafting clear, concise content that helps users comprehend complex technology, tools, and products. Using words, illustrations, and examples, I aim to make technical information accessible and easily understood. I'm driven by my passion for continuous learning and development, always striving to hone my skills and expand my knowledge.
In becoming a proficient DevOps engineer, one quickly realizes a profound truth: to automate anything effectively, you first need to understand how to do it manually. This principle is particularly relevant regarding system administration, a critical component of the DevOps cycle.
System administration is more than just a requirement; it's the bedrock upon which the entire DevOps practice is built. It's about understanding what's going on under the hood, appreciating the scripts and commands that make automation possible, and gaining a deeper knowledge of the systems we're working with. This understanding makes us more powerful users and equips us with the skills to manage and allocate resources effectively, a crucial aspect of system administration.
However, stepping into a system administrator role, especially in a DevOps context, comes with its unique set of challenges. It demands a wide range of skills, from problem-solving and effective communication to a strong familiarity with command-line interfaces. But with these challenges come significant rewards. Mastering system administration opens up new avenues for automation, efficiency, and, ultimately, the seamless operation of the technology infrastructure we rely on.
In this article, we'll delve into system administration, focusing on Linux, a platform many DevOps engineers prefer for its flexibility and robustness. Whether you're setting up a CentOS VM with Vagrant on VirtualBox or managing server security, the skills you'll learn here will form the foundation of your journey into the rewarding field of DevOps.
Diving into Linux
Linux, an open-source, Unix-like kernel, is popular among DevOps engineers. Its design philosophy is rooted in a few core tenets, making it especially powerful and versatile.
In Linux, everything is a file. This simple concept provides a unified way to interact with devices, directories, and data. It's also built around small, purpose-built programs. Each program does one thing well but can be chained together to perform complex operations. This modularity also extends to configuration data, typically stored in text files that are easily read and edited.
But why has Linux become such a go-to for so many DevOps engineers?
Firstly, Linux is open source. This means its source code is freely available to the public, allowing anyone to view, modify, and distribute it. This openness fosters a culture of collaboration and transparency at the heart of the DevOps philosophy.
Secondly, Linux has a vibrant and supportive community. This means that help is often just a forum post away, and the wealth of shared knowledge and resources is vast.
Thirdly, Linux supports a wide variety of hardware. From old desktops to modern servers, Linux is designed to be portable and adaptable.
Fourthly, Linux is highly customizable. Whether setting up a lightweight server or a robust desktop environment, you can tailor Linux to suit your needs.
Fifthly, the majority of servers run on Linux. Its stability, security, and fine-grained control make it an ideal choice for server environments.
Last but not least, automation is easy on Linux. Its powerful command-line interface and scripting capabilities allow for efficient task automation, a key aspect of DevOps.
In the following sections, we'll explore how these features of Linux translate into practical skills and knowledge for system administration in a DevOps context.
System Administration Essentials
As a Linux System Administrator, you're the guardian of the system. Your responsibilities are manifold and crucial to the smooth operation of the technology infrastructure.
Core Responsibilities
Maintaining Systems: This involves ensuring that the system is running smoothly, updating and upgrading systems, managing system resources, and troubleshooting issues.

The process begins with monitoring system performance. If any issues are identified, they are resolved. After resolving the issues, the solution is validated to ensure it's effective.
Ensuring Server Security: This includes setting up firewalls, managing user permissions, updating software to patch security vulnerabilities, and monitoring logs for suspicious activity.

Four key components surround the "Server Security" shield:
Firewalls are network security systems that monitor and control incoming and outgoing traffic based on predetermined security rules.
User Permissions are the rights and privileges assigned to specific users, controlling their access to systems and data.
Software Updates: Regular updates are crucial for protecting the server from potential security vulnerabilities.
Log Monitoring involves collecting and analyzing log files to detect suspicious activity or incidents.
Creating Backup and Recovery Policies: Regular backups are crucial to prevent data loss. In case of system failure, a recovery policy guides restoring the system to its normal state.

The process starts with creating backups. These backups are then stored safely. When needed, these stored backups are used for recovery. After the recovery, the cycle goes back to creating backups. This ensures a continuous cycle of data protection and recovery.
Key Skills
Problem-Solving: As a system administrator, you'll often need to identify and resolve issues, requiring a proficient problem-solving ability.
Communication: You'll need to communicate effectively with other team members, report issues, and document your work clearly.
Familiarity with Linux Command Line: The command line is a powerful tool in Linux. Being comfortable with it is essential for navigating the filesystem, managing processes, and automating tasks.

Navigating the Linux Landscape: Essential Commands and Concepts
As a DevOps engineer, your journey into Linux starts with understanding the command line. A command line is a powerful tool that allows you to perform tasks from basic file operations to advanced system management tasks. This section will explore the essential commands and concepts that form the backbone of any DevOps engineer's toolkit.
Understanding Linux Command Syntax: Command Options and Arguments
Linux commands typically follow a specific syntax: the command is followed by options (which modify the behavior of the command) and arguments (the items upon which the command acts).
For instance, in the command ls -l /home ; ls is the command, -l is an option that tells ls to display detailed information, and /home is the argument specifying the directory to list.
With a firm grasp of Linux command syntax, you're ready to dive deeper into Linux commands. Let's move on to understanding the Linux directory structure.
Linux Directory Structure
The Linux directory structure is organized in a hierarchical tree structure. Some of the key directories include:
/rootand/home/username: These are the home directories for the root user and other users./bin,/usr/bin,/usr/local/bin: These directories contain user executables./sbin,/usr/sbin,/usr/local/sbin: These directories contain system executables./mediaand/mnt: These are mount points for removable media and temporary file systems./etc: This directory contains system-wide configuration files./tmp: This is a temporary space for file storage./boot: This directory contains the kernels and bootloader./varand/srv: These directories contain variable data and data for services provided by the system./procand/sys: These directories contain system information.
Basic Linux commands
These are some of the basic commands that you'll use frequently in Linux:
ls: Lists the contents of a directory. Usels -lfor a long listing format that shows additional information (permissions, number of links, owner, group, size, and time of last modification) andls -ato show hidden files.cd: Changes the current directory. Usecd ..to move up one directory level, orcdwith no argument to return to your home directory.mv: Moves or renames files and directories. To rename a file, usemv oldname newname. To move a file into a directory, usemv filename directoryname.cp: Copies files and directories. The basic syntax iscp source destination. Usecp -rto copy a directory recursively.rm: Removes files and directories. Userm filenameto remove a file, orrm -r directorynameto remove a directory and its contents recursively. Be careful with this command, as it deletes files permanently.mkdir: Creates a new directory. Usemkdir directoryname.rmdir: Removes an empty directory. If the directory is not empty, you'll need to userm -r directoryname.man: Displays the manual page for a command. Useman commandnameto view detailed information about how to use a command.sudo: Executes a command with root privileges. This is often necessary for commands that change system settings. Always be cautious when usingsudo, as it gives the command full system permissions.
To better understand a command and its usage, append the -h or --help argument. For example, ls --help will provide a detailed explanation and options for the ls command.
Text Editing with vim, Including Basic Operations Like Cut, Copy, and Paste
Vim is a highly configurable text editor built to enable efficient text editing. It's an improved version of the vi editor distributed with most UNIX systems. Here are some basic operations:
To open or create a file, use
vim filename.To enter insert mode, where you can write text, press
i.To save changes and stay in the file, press
Escto return to command mode, then type:w.To save changes and exit, type
:wq.To exit without saving changes, type
:q!.To copy a line, press
yyin command mode.To paste a line, press
pin command mode.To cut a line, press
ddin command mode.To undo an action, press
uin command mode.To search within the file, press
/followed by your search term.
Understanding Different File Types and Their Permissions
In Linux, there are several types of files: regular files, directories, symbolic links, character devices, block devices, and sockets. You can use the file command followed by the file path to determine a file's type.
File permissions determine who can read, write, and execute a file. They are defined for the file owner, the group owner, and others. Use ls -l to view file permissions.
The chmod command changes the permissions of a file or directory. For example, chmod 755 filename sets read, write, and execute permissions for the owner, and read and execute permissions for the group and others.
The chown command changes the owner and group of a file or directory. For example, chown user:group filename changes the owner of the file to 'user' and the group to 'group'.
Using Filters and Redirections to Manipulate Command Output
Filters in Linux are commands that take input data, transform it, and output the result. Here are some commonly used filters:
grep: Searches for a pattern in a file or input. For example,grep 'pattern' filenamewill display lines in the file that contain the pattern.sort: Sorts the lines in a file. For example,sort filenamewill sort the lines in the file in ascending order.awk: A powerful tool for processing text, often used for data extraction and reporting. For example,awk '{print $1}' filenamewill print the first field of each line in the file.
Redirection in Linux is a way of directing data from one output to another. Here are the basic redirection commands:
>: Redirects output to a file, overwriting the file. For example,ls > file.txtwill write the output oflstofile.txt, overwriting any existing content.>>: Redirects output to a file, appending to the file. For example,ls >> file.txtwill append the output oflstofile.txt.<: Takes input from a file. For example,sort < file.txtwill sort the lines infile.txt.
Managing Software with Package Management Tools Like yum and apt
Package managers in Linux are tools that automate the process of installing, upgrading, configuring, and removing software packages in a consistent manner. yum and apt are two of the most popular package managers.
yum: The default package manager for Red Hat-based distributions like CentOS. Here are some basicyumcommands:yum install package_name: Installs a package.yum remove package_name: Removes a package.yum update: Updates all installed packages.yum search keyword: Searches for a package.
apt: The default package manager for Debian-based distributions like Ubuntu. Here are some basicaptcommands:apt install package_name: Installs a package.apt remove package_name: Removes a package.apt update: Updates the list of available packages.apt upgrade: Upgrades all installed packages.apt search keyword: Searches for a package.
Controlling System Services with systemctl
systemctl is a command-line tool used to interact with the systemd system and service manager. systemd is an init system used to bootstrap the user space and manage all processes subsequently, instead of the shell scripts used by different Linux distributions.
With systemctl, you can manage services, also known as daemons, as well as other system resources. A service is an application run in the background, waiting to be used, or carrying out essential tasks. For example, httpd the Apache HTTP Server, which waits for incoming network requests, or sshd which waits for incoming SSH connections.
Here are some basic systemctl commands:
systemctl start service_name: Starts a service. If the service is configured to start automatically at boot, this command will start it manually.systemctl stop service_name: Stops a running service. This can be useful if you need to make configuration changes that require the service to be restarted.systemctl restart service_name: Restarts a service. This is equivalent to stopping and then starting the service.systemctl status service_name: Checks the status of a service. This will tell you whether the service is currently running, stopped, or in a failed state.systemctl enable service_name: Enables a service to start at boot. This is useful for services that should always be available, like network services.systemctl disable service_name: Disables a service from starting at boot. This can be useful if you want to prevent a service from starting automatically but still want to be able to start it manually.
Archiving and Compressing Files
Archiving tools like tar, gzip, and zip are essential for managing files on Linux. They allow you to bundle multiple files into one, which can be useful for backup, distribution, or storage. These tools also provide compression functionality, which reduces the size of files and frees up storage space.
tar: Thetarcommand stands for tape archive. It's used to create or extract.tararchives. Thecoption creates an archive,vgives a verbose output (i.e., it shows the progress in the terminal), andfallows you to specify the name of the archive. For example,tar -cvf archive.tar file1 file2creates an archive namedarchive.tarcontainingfile1andfile2. To extract the files from the archive,xis used for extraction, and the rest of the options remain the same. So,tar -xvf archive.tarextracts the files from the archive.gzip: Thegzipcommand is used to compress files. For example,gzip file1compressesfile1intofile1.gz. To decompress the file,gzip -d file1.gzis used. Thedoption stands for decompress.zip: Thezipcommand is used to create.ziparchives. For example,ziparchive.zipfile1 file2creates a.ziparchive namedarchive.zipcontainingfile1andfile2. To extract the files from the archive,unziparchive.zipis used.
Monitoring and Managing System Processes
In Linux, a process is an instance of a running program. Linux provides several commands to monitor and manage system processes:
ps: Thepscommand displays information about a selection of active processes. For example,ps auxdisplays all the running processes.top: Thetopcommand provides a real-time, dynamic view of the processes running on a system. It's a great tool for monitoring the performance of a Linux system in real-time.htop: Thehtopcommand is an interactive process viewer, similar totop, but with a more user-friendly interface.kill: Thekillcommand sends a signal to a process, which can often result in terminating the process. For example,kill -9 PIDsends theSIGKILLsignal to the process with the specified PID, forcing it to terminate immediately.pkill: Thepkillcommand sends a signal to a process, similar tokill, but it allows you to specify the process by name instead of PID.free: Thefreecommand displays the total amount of free and used physical and swap memory in the system and the buffers and caches used by the kernel.df: Thedfcommand reports the amount of disk space used and available on filesystems.du: Theducommand estimates file and directory space usage.
Let's say we've been working with the nano text editor, but it's become unresponsive. We'll start by using ps aux | grep nano to check if nano is running. This command lists all running processes and filters for nano.
Next, we'll use top to monitor our system in real time. If we see nano using too many resources, we might decide to stop it.
Now, let's say nano is not responding to normal exit commands. We can use kill to terminate it. We'll need the process ID (PID) for this, which we can find from our ps command earlier. Once we have the PID, we can use kill -9 PID to force nano to terminate immediately.
If we didn't know the PID, or if there were multiple nano processes running, we could use pkill nano to terminate all nano processes at once.
Remember, monitoring and managing system processes as part of Linux system administration is important. Tools like ps, top, kill, and pkill make this task manageable.
Practical Use Cases in DevOps
This section explores real-world scenarios showing how Linux System Administration skills can be applied in DevOps.
Harnessing Linux for Automation Tasks
In DevOps, automation is king. It's all about making software development, testing, and deployment faster and more efficient. With its flexibility and powerful command-line interface, Linux is a fantastic tool for automation tasks.
Understanding Linux allows you to write scripts that can automate repetitive tasks, saving time and reducing the chance of human error. For example, you are tasked with writing a script that automatically backs up certain files every day or a script that monitors system logs and sends an alert if it detects a problem.
Moreover, many automation tools popular in DevOps, like Ansible, Puppet, and Chef, are designed to work with Linux. Nonetheless, having a solid grasp of Linux can help you get the most out of these tools.
Leveraging Linux for Continuous Integration
Continuous Integration (CI) is a development practice where developers integrate code into a shared repository frequently, preferably several times daily. An automated build and automated tests can then verify each integration.
Linux plays a crucial role in CI. Most CI tools run on Linux servers like Jenkins, Travis CI, and CircleCI. Understanding Linux can help you set up and manage these tools more effectively.
Additionally, Linux's strong support for scripting and automation can help you create more efficient build processes. For example, you might be tasked with writing a script that automatically builds your project, runs tests, and reports any errors whenever new code is pushed to your repository.
Closing the curtains
As we've explored throughout this guide, Linux is more than just an operating system; it's a powerful tool that can significantly enhance your effectiveness in a DevOps environment. From understanding the command syntax and directory structure to mastering essential commands and concepts, Linux offers many features that can aid in automation, rapid deployment, and continuous integration tasks.
But remember, like any tool, Linux is only as effective as the person wielding it. It requires time, practice, and a willingness to dive deep and get your hands dirty. But the rewards - increased efficiency, deeper understanding of your systems, and the ability to solve complex problems - are well worth the effort.
So, whether you're a budding DevOps engineer or a seasoned professional looking to improve your skills, I hope this guide has provided valuable insights and practical knowledge that you can apply in your day-to-day work.
The learning never stops in DevOps, and every new command, concept, or technique you learn is another step towards becoming a more effective engineer.
Further Learning
Here are some resources to help you learn more about Linux and System administration.
Linux Documentation Project: A comprehensive resource with documentation, guides, and tutorials covering various aspects of Linux system administration. Website
Linux Journey: An interactive online tutorial that covers Linux essentials, command-line usage, system administration, and more. Website
Red Hat Enterprise Linux Documentation: The official documentation from Red Hat, providing in-depth information on managing and administering Red Hat Enterprise Linux. Website
Ubuntu Documentation: The official documentation for Ubuntu, offering guides, tutorials, and troubleshooting tips for Ubuntu users and system administrators. Website
Linux Academy: A popular online learning platform that offers a wide range of Linux courses, including Linux system administration, DevOps, and cloud technologies. Youtube
The Linux Command Line by William Shotts: A comprehensive book that covers the fundamentals of the Linux command line, providing practical examples and explanations. Book
Linux System Administration by Tom Adelstein and Bill Lubanovic: This book offers practical guidance on Linux system administration, covering topics such as managing users and groups, system security, networking, and more. Book





