# First Steps into DevOps and Linux

## Introduction

Hello there! 👋 Last Sunday, I officially began my DevOps journey, and this past week has been an exciting deep dive into its fundamentals. I started by understanding what DevOps is, its ideology, core concepts, and terminologies. Alongside this, I ventured into the world of Linux—exploring installation methods, different Linux distributions, and, most importantly, learning essential commands. In this blog, I'll share my learnings, challenges, and how I overcame them.

## Understanding DevOps: Beyond Just a Definition

When I first asked myself, **"What is DevOps?"**, the common definition I found was:

> DevOps is a set of practices that integrates software development (Dev) and IT operations (Ops) to shorten the development lifecycle while maintaining high software quality.

However, I quickly realized that DevOps is much more than a set of practices; it is a **philosophy**. It encourages collaboration between development and operations teams, reducing friction and accelerating code deployment into production.

### **The Software Development Lifecycle (SDLC)**

I also came across the **Software Development Life Cycle (SDLC)**, a structured process to develop software efficiently. It consists of:

* **Planning** → Identifying requirements and setting goals.
    
* **Design** → Creating architecture and technical specifications.
    
* **Development** → Writing the actual code.
    
* **Testing** → Ensuring the software works as expected.
    
* **Deployment** → Releasing the software into production.
    
* **Operate & Monitor** → Maintaining performance and addressing issues.
    

![](https://media.geeksforgeeks.org/wp-content/uploads/20230412162703/DevOps-lifecycle.webp align="center")

### **Continuous Integration & Continuous Deployment (CI/CD)**

One of the most fascinating concepts I encountered was **CI/CD**:

**➡️ Continuous Integration (CI)** ensures that developers frequently merge their code into a shared repository, where it is automatically tested and built.

**➡️ Continuous Deployment (CD)** automates the process of releasing tested code, deploying it to production, and monitoring it for issues.

The main goal of CI/CD is to **reduce human intervention, speed up deployment, and enhance code quality**, thus minimizing the risk of large-scale failures.

### **Deployment Strategies**

I also learned about different strategies used in production environments:

**➡️ Rolling Deployment**: Gradually replacing the old version of an application with a new one.

**➡️ Blue/Green Deployment**: Running two identical environments—one (blue) with the existing version and another (green) with the new version. Traffic is switched once testing is successful.

Other important concepts I explored include **Virtual Machines (VMs), Containers, Linters, Log Aggregation, and Production Metrics.**

### **Resources I Used for DevOps Basics:**

* [TechWorld with Nana: What is DevOps? REALLY Understand It | DevOps vs SRE](https://www.youtube.com/watch?v=0yWAtQ6wYNM)
    
* [freeCodeCamp.org: DevOps Engineering Course for Beginners](https://www.youtube.com/watch?v=j5Zsa_eOXeY)
    
* [GeeksforGeeks: What is DevOps?](https://www.geeksforgeeks.org/introduction-to-devops/)
    

After two days of DevOps basics, I moved on to **Linux**, and honestly, I was a bit nervous to start. But here’s how it went😅.

## Getting Started with Linux

To begin my Linux journey, I first understood what Linux is:

> Linux is an open-source operating system widely used for servers, development, and personal computing due to its security, flexibility, and stability.

I came across essential Linux components:

➡️ **Kernel**: The core of the OS, managing hardware-software interactions.

➡️ **Bootloader**: Loads the operating system into memory when the computer starts.

➡️ **Shell**: An interface to interact with the OS via commands.

![](https://images.javatpoint.com/linux/images/architecture-of-linux.png align="center")

### **Running Linux on My Windows System**

Among various methods, I chose **Virtual Machines (VMs)**. I installed **VirtualBox** and configured a Linux server. Later, I explored **Vagrant**, which **automates VM creation** and makes setup much easier.

### **Essential Linux Commands I Learned**

I started with **basic navigational commands**:

➡️ `pwd`, `ls`, `cd` – for navigating the file system.

➡️ File management commands: `touch`, `echo`, `cat`, `cp`, `mv`, `rm`, `ls`.

➡️ System commands: `df`, `du`, `top`, `ps`, `fuser`, `vmstat`.

➡️ **The fascinating** `nohup` command—used to run processes even after system shutdown and store process logs.

Next, I explored **User & Group Management:**

➡️ Creating, deleting, switching users (`useradd`, `userdel`, `su`).

➡️ Managing groups (`groupadd`, `groupdel`, `usermod`).

➡️ File permissions using `chmod` and **the importance of \*\*\*\***`sudo`.

I also tackled **Network Commands**, including `ping`, `netstat`, `ip`, `traceroute`, `mtr`, `dig`, `curl`, and `wget`. These were confusing at first, but practice made them clearer.

![Linux file system](https://media.geeksforgeeks.org/wp-content/uploads/20230516105759/151.webp align="center")

### **Resources I Used for Linux:**

* [TrainWithShubham: Linux For DevOps In One Shot | Beginners to Advanced](https://www.youtube.com/watch?v=e01GGTKmtpc)
    
* [Kunal Kushwaha: Introduction to Linux & Terminal Commands - Full Course](https://www.youtube.com/watch?v=iwolPf6kN-k)
    

## Challenges I Faced & Solutions

1. **File Permission Issue in Vagrant**
    

🔹 **Problem:** Initially, I couldn’t change file permissions inside the `/vagrant` directory. I learned that Vagrant uses VirtualBox's default settings, which override permission changes.

🔹 **Solution:** `/vagrant` is a **shared folder between the host and VM**, so permission changes were overridden. I either had to modify `Vagrantfile` settings or work in `/home/vagrant`, which resolved the issue.

2. **Struggles with User & Group Management Commands**
    

🔹 **Problem:** While I could handle basic file operations, user management commands were tricky.

🔹 **Solution:** I practised more **real-world examples** and used **ChatGPT** for additional scenarios to get a deeper understanding.

3. **Network Commands Were Overwhelming**
    

🔹 **Problem:** Too many commands at once felt confusing, and many seemed to have similar outputs.

🔹 **Solution:** I took a break, revised, and executed each command sequentially to observe differences. Practice is key!

## What’s Next?

This past week has been exciting, challenging, and deeply rewarding. For the next week, I plan to:

✅ Complete advanced Linux commands (grep, awk, etc.)  
✅ Dive deeper into **Git and GitHub**  
✅ Begin learning **Networking Fundamentals**

I know the basics of Git and GitHub, but this time, I aim to go in-depth and explore real-world workflows.

### **Let’s Connect!**

If you have any **recommended resources, insights, or tips**, I’d love to hear from you! Drop them in the comments. Thank you for staying with me till the last.

---

**Have a wonderful day.**
