<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ashish</title>
    <description>The latest articles on Forem by Ashish (@ashish0360).</description>
    <link>https://forem.com/ashish0360</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3614006%2F5a683d3e-d0d9-4ac0-b74e-1b2528ffb045.png</url>
      <title>Forem: Ashish</title>
      <link>https://forem.com/ashish0360</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ashish0360"/>
    <language>en</language>
    <item>
      <title>Git &amp; GitHub for DevOps - The Complete Hands-On Guide (Week 4)</title>
      <dc:creator>Ashish</dc:creator>
      <pubDate>Sun, 14 Dec 2025 13:17:35 +0000</pubDate>
      <link>https://forem.com/ashish0360/git-github-for-devops-the-complete-hands-on-guide-week-4-bf1</link>
      <guid>https://forem.com/ashish0360/git-github-for-devops-the-complete-hands-on-guide-week-4-bf1</guid>
      <description>&lt;p&gt;Linkedin Profile: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git and GitHub are the backbone of modern DevOps workflows. Every CI/CD pipeline, Infrastructure-as-Code repo, GitOps setup, and production deployment relies on Git for version control and collaboration.&lt;br&gt;
This guide is written from a DevOps engineer’s perspective, not just “how Git works”, but how Git is actually used in real systems.&lt;/p&gt;

&lt;p&gt;Table of Contents&lt;br&gt;
What is Version Control &amp;amp; Why DevOps Needs It&lt;br&gt;
Git vs GitHub (Clear Difference)&lt;br&gt;
Git Core Concepts (Repo, Commit, Branch, Merge)&lt;br&gt;
Git Installation &amp;amp; Configuration&lt;br&gt;
Git Repository Lifecycle&lt;br&gt;
Working Directory, Staging Area &amp;amp; Repository&lt;br&gt;
Essential Git Commands (with definitions &amp;amp; examples)&lt;br&gt;
Branching Strategies for DevOps&lt;br&gt;
Merging &amp;amp; Conflict Resolution&lt;br&gt;
Staging &amp;amp; Stashing&lt;br&gt;
Undoing Changes (Reset, Revert, Amend, Reflog)&lt;br&gt;
Tags &amp;amp; Releases&lt;br&gt;
Git Ignore, Attributes &amp;amp; Cleanup&lt;br&gt;
GitHub Basics (Remote, SSH, Push, Pull)&lt;br&gt;
Forks, Pull Requests &amp;amp; Open-Source Flow&lt;br&gt;
Advanced Git (Rebase, Cherry-Pick, Hooks, LFS)&lt;br&gt;
Git in CI/CD &amp;amp; DevOps Pipelines&lt;br&gt;
Best Practices for DevOps Engineers&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What is Version Control?&lt;br&gt;
Definition:&lt;br&gt;
Version control is a system that tracks changes in files over time, allowing you to review history, collaborate safely, and roll back when needed.&lt;br&gt;
Why DevOps Needs Git&lt;br&gt;
Infrastructure code must be traceable&lt;br&gt;
CI/CD pipelines rely on Git events&lt;br&gt;
Rollbacks must be fast and safe&lt;br&gt;
Teams work in parallel without conflicts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git vs GitHub&lt;br&gt;
Git&lt;br&gt;
GitHub&lt;br&gt;
Distributed version control system&lt;br&gt;
Hosting platform for Git repositories&lt;br&gt;
Runs locally&lt;br&gt;
Cloud-hosted&lt;br&gt;
Tracks changes&lt;br&gt;
Enables collaboration&lt;br&gt;
CLI-based&lt;br&gt;
Web UI + APIs&lt;br&gt;
Created in 2005&lt;br&gt;
Launched in 2008&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Important:&lt;br&gt;
👉 Git works without internet&lt;br&gt;
👉 GitHub is only used for push, pull, PRs, CI/CD&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Core Git Concepts
Repository
A project folder tracked by Git.
Commit
A snapshot of changes with a unique hash.
Branch
An independent line of development.
Merge
Combining changes from one branch into another.
3.1 Understanding the Git Three-Stage Workflow (Easy Explanation)
This diagram shows how files move step-by-step inside Git, from your computer to permanent history.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A. Working Directory&lt;/p&gt;

&lt;p&gt;By Ashish - Learn-in-Public DevOps Journey (Week 4)&lt;/p&gt;

&lt;p&gt;Git and GitHub are the backbone of modern DevOps workflows. Every CI/CD pipeline, Infrastructure-as-Code repo, GitOps setup, and production deployment relies on Git for version control and collaboration.&lt;br&gt;
This guide is written from a DevOps engineer’s perspective, not just “how Git works”, but how Git is actually used in real systems.&lt;/p&gt;

&lt;p&gt;Table of Contents&lt;br&gt;
What is Version Control &amp;amp; Why DevOps Needs It&lt;br&gt;
Git vs GitHub (Clear Difference)&lt;br&gt;
Git Core Concepts (Repo, Commit, Branch, Merge)&lt;br&gt;
Git Installation &amp;amp; Configuration&lt;br&gt;
Git Repository Lifecycle&lt;br&gt;
Working Directory, Staging Area &amp;amp; Repository&lt;br&gt;
Essential Git Commands (with definitions &amp;amp; examples)&lt;br&gt;
Branching Strategies for DevOps&lt;br&gt;
Merging &amp;amp; Conflict Resolution&lt;br&gt;
Staging &amp;amp; Stashing&lt;br&gt;
Undoing Changes (Reset, Revert, Amend, Reflog)&lt;br&gt;
Tags &amp;amp; Releases&lt;br&gt;
Git Ignore, Attributes &amp;amp; Cleanup&lt;br&gt;
GitHub Basics (Remote, SSH, Push, Pull)&lt;br&gt;
Forks, Pull Requests &amp;amp; Open-Source Flow&lt;br&gt;
Advanced Git (Rebase, Cherry-Pick, Hooks, LFS)&lt;br&gt;
Git in CI/CD &amp;amp; DevOps Pipelines&lt;br&gt;
Best Practices for DevOps Engineers&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What is Version Control?&lt;br&gt;
Definition:&lt;br&gt;
Version control is a system that tracks changes in files over time, allowing you to review history, collaborate safely, and roll back when needed.&lt;br&gt;
Why DevOps Needs Git&lt;br&gt;
Infrastructure code must be traceable&lt;br&gt;
CI/CD pipelines rely on Git events&lt;br&gt;
Rollbacks must be fast and safe&lt;br&gt;
Teams work in parallel without conflicts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git vs GitHub&lt;br&gt;
Git&lt;br&gt;
GitHub&lt;br&gt;
Distributed version control system&lt;br&gt;
Hosting platform for Git repositories&lt;br&gt;
Runs locally&lt;br&gt;
Cloud-hosted&lt;br&gt;
Tracks changes&lt;br&gt;
Enables collaboration&lt;br&gt;
CLI-based&lt;br&gt;
Web UI + APIs&lt;br&gt;
Created in 2005&lt;br&gt;
Launched in 2008&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Important:&lt;br&gt;
👉 Git works without internet&lt;br&gt;
👉 GitHub is only used for push, pull, PRs, CI/CD&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Core Git Concepts
Repository
A project folder tracked by Git.
Commit
A snapshot of changes with a unique hash.
Branch
An independent line of development.
Merge
Combining changes from one branch into another.
3.1 Understanding the Git Three-Stage Workflow (Easy Explanation)
This diagram shows how files move step-by-step inside Git, from your computer to permanent history.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A. Working Directory&lt;br&gt;
This is your actual project folder on your system.&lt;br&gt;
You write code here&lt;br&gt;
You edit files here&lt;br&gt;
Git is aware of changes but hasn’t saved them yet&lt;br&gt;
Example:&lt;br&gt;
vim app.py&lt;/p&gt;

&lt;p&gt;At this stage, Git sees changes but nothing is recorded.&lt;/p&gt;

&lt;p&gt;B. Staging Area&lt;br&gt;
The staging area is like a preview or waiting room.&lt;br&gt;
You tell Git which changes you want to save&lt;br&gt;
Only selected files move forward&lt;br&gt;
Command used:&lt;br&gt;
git add app.py&lt;/p&gt;

&lt;p&gt;Now Git knows:&lt;br&gt;
“This file should be included in the next commit.”&lt;br&gt;
This gives you control over what goes into version history.&lt;/p&gt;

&lt;p&gt;C. Repository&lt;br&gt;
The repository is where Git permanently stores snapshots of your project.&lt;br&gt;
Once committed, changes become part of history&lt;br&gt;
Each commit has a unique ID (hash)&lt;br&gt;
Command used:&lt;br&gt;
git commit -m "Add initial app logic"&lt;/p&gt;

&lt;p&gt;Now the change is saved forever in Git history.&lt;/p&gt;

&lt;p&gt;D. How the Flow Works Together&lt;br&gt;
Working Directory  →  Staging Area  →  Repository&lt;br&gt;
      edit                add            commit&lt;/p&gt;

&lt;p&gt;git add moves files from working directory → staging&lt;br&gt;
git commit moves files from staging → repository&lt;br&gt;
3.2 Understanding Local vs Remote Git Workflow (Easy Explanation)&lt;br&gt;
This diagram shows how your code moves between your system (local) and GitHub (remote) using common Git commands.&lt;br&gt;
Think of it as two worlds:&lt;br&gt;
Local → Your laptop / system&lt;br&gt;
Remote → GitHub repository&lt;/p&gt;

&lt;p&gt;🔹 Local Side (Your System)&lt;br&gt;
a. Working Directory&lt;br&gt;
This is where you actually write and edit code.&lt;br&gt;
Files are modified here&lt;br&gt;
Git is aware of changes but hasn’t saved anything yet&lt;br&gt;
Example:&lt;br&gt;
vim app.py&lt;/p&gt;

&lt;p&gt;b. Staging Area&lt;br&gt;
The staging area is where you prepare changes for saving.&lt;br&gt;
Command:&lt;br&gt;
git add app.py&lt;/p&gt;

&lt;p&gt;This tells Git:&lt;br&gt;
“I want this file to be part of the next commit.”&lt;/p&gt;

&lt;p&gt;c. Local Repository&lt;br&gt;
This is Git’s local database of commits.&lt;br&gt;
Command:&lt;br&gt;
git commit -m "Add app logic"&lt;/p&gt;

&lt;p&gt;Now the change is saved permanently on your system with a commit ID.&lt;/p&gt;

&lt;p&gt;🔹 Remote Side (GitHub)&lt;br&gt;
d. Remote Repository&lt;br&gt;
This is the repository hosted on GitHub / GitLab / Bitbucket.&lt;br&gt;
It allows:&lt;br&gt;
Collaboration&lt;br&gt;
Backup&lt;br&gt;
CI/CD triggers&lt;br&gt;
Code reviews&lt;/p&gt;

&lt;p&gt;e. How Code Moves Between Local &amp;amp; Remote&lt;br&gt;
👉 Push (Local → Remote)&lt;br&gt;
git push origin main&lt;/p&gt;

&lt;p&gt;Sends your local commits to GitHub&lt;br&gt;
Makes your code visible to teammates&lt;br&gt;
Triggers pipelines (CI/CD)&lt;/p&gt;

&lt;p&gt;👈 Pull (Remote → Local)&lt;br&gt;
git pull origin main&lt;/p&gt;

&lt;p&gt;Brings latest changes from GitHub to your system&lt;br&gt;
Keeps your local code updated&lt;/p&gt;

&lt;p&gt;f. Checkout (Move Between States)&lt;br&gt;
git checkout branch-name&lt;/p&gt;

&lt;p&gt;Switches branches&lt;br&gt;
Can restore files from commits&lt;br&gt;
Moves code back into your working directory&lt;/p&gt;

&lt;p&gt;🧠 Simple Flow Summary&lt;br&gt;
Working Directory&lt;br&gt;
      ↓ git add&lt;br&gt;
Staging Area&lt;br&gt;
      ↓ git commit&lt;br&gt;
Local Repository&lt;br&gt;
      ↓ git push&lt;br&gt;
Remote Repository (GitHub)&lt;br&gt;
      ↑ git pull&lt;/p&gt;

&lt;p&gt;3.3 Understanding the Gitflow Workflow (Easy Explanation)&lt;br&gt;
This diagram shows how professional teams manage code using multiple branches instead of pushing everything directly to main / master.&lt;/p&gt;

&lt;p&gt;Gitflow is designed to:&lt;br&gt;
Keep production code stable&lt;br&gt;
Allow parallel development&lt;br&gt;
Handle releases and hotfixes safely&lt;/p&gt;

&lt;p&gt;🧠 Big Picture First&lt;br&gt;
Think of Gitflow like a road system:&lt;br&gt;
Master (Main) → Production highway&lt;br&gt;
Develop → Integration road&lt;br&gt;
Feature branches → Side streets (new work)&lt;br&gt;
Release branch → Final inspection lane&lt;br&gt;
Hotfix branch → Emergency lane&lt;/p&gt;

&lt;p&gt;A. Master Branch (Production)&lt;br&gt;
This branch always contains stable, production-ready code&lt;br&gt;
Every commit here is usually tagged with a version (e.g., v1.0, v2.2)&lt;br&gt;
No direct development happens here&lt;br&gt;
In the diagram:&lt;br&gt;
Master runs at the top&lt;br&gt;
Tags like 0.1, 0.2, 1.0 represent production releases&lt;/p&gt;

&lt;p&gt;B. Develop Branch (Main Development Line)&lt;br&gt;
This is where all completed features come together&lt;br&gt;
It represents the next release in progress&lt;br&gt;
Developers do not push features directly to master&lt;br&gt;
In the diagram:&lt;br&gt;
Develop runs below master&lt;br&gt;
Features are merged into develop first&lt;/p&gt;

&lt;p&gt;C. Feature Branches (New Work)&lt;br&gt;
Created from develop&lt;br&gt;
Used to build new features&lt;br&gt;
Once finished, merged back into develop&lt;br&gt;
Example:&lt;br&gt;
git checkout -b feature-login develop&lt;/p&gt;

&lt;p&gt;In the diagram:&lt;br&gt;
Feature branches are shown at the bottom&lt;br&gt;
They merge back into develop using:&lt;br&gt;
git merge feature-branch&lt;/p&gt;

&lt;p&gt;After merging:&lt;br&gt;
git branch -d feature-branch&lt;/p&gt;

&lt;p&gt;D. Release Branch (Preparing for Production)&lt;br&gt;
Created when the product is almost ready&lt;br&gt;
Only bug fixes, version bumps, and final testing happen here&lt;br&gt;
No new features allowed&lt;br&gt;
Example:&lt;br&gt;
git checkout -b release/1.0 develop&lt;/p&gt;

&lt;p&gt;In the diagram:&lt;br&gt;
Release branch sits between develop and master&lt;br&gt;
After testing, it is merged into:&lt;br&gt;
master (for production)&lt;br&gt;
develop (to keep history consistent)&lt;/p&gt;

&lt;p&gt;E. Hotfix Branch (Emergency Fixes)&lt;br&gt;
Used when production is broken&lt;br&gt;
Created directly from master&lt;br&gt;
Fixes critical bugs quickly&lt;br&gt;
Example:&lt;br&gt;
git checkout -b hotfix/0.2 master&lt;/p&gt;

&lt;p&gt;In the diagram:&lt;br&gt;
Hotfix branch jumps directly from master&lt;br&gt;
After fixing:&lt;br&gt;
Merged back into master&lt;br&gt;
Also merged into develop&lt;br&gt;
This ensures:&lt;br&gt;
Emergency fixes don’t get lost in future releases.&lt;/p&gt;

&lt;p&gt;F. Merge Flow Summary&lt;br&gt;
Feature → Develop&lt;br&gt;
git merge feature-x&lt;/p&gt;

&lt;p&gt;Release → Master + Develop&lt;br&gt;
git merge release&lt;/p&gt;

&lt;p&gt;Hotfix → Master + Develop&lt;br&gt;
git merge hotfix&lt;/p&gt;

&lt;p&gt;🏷️ Tags (Versions)&lt;br&gt;
Tags mark release points&lt;br&gt;
Example:&lt;br&gt;
git tag -a v1.0 -m "Production release"&lt;/p&gt;

&lt;p&gt;In the diagram:&lt;br&gt;
Tags appear on the master branch&lt;br&gt;
They represent what is deployed in production&lt;br&gt;
3.4 Understanding This Gitflow Diagram (Very Easy Explanation)&lt;br&gt;
This diagram shows how code moves over time when a team follows the Gitflow branching strategy.&lt;/p&gt;

&lt;p&gt;👉 The vertical direction represents time (top = older, bottom = newer).&lt;br&gt;
👉 Each vertical lane is a branch.&lt;br&gt;
👉 Dots are commits.&lt;br&gt;
👉 Arrows show merges between branches.&lt;/p&gt;

&lt;p&gt;a. Master Branch (Rightmost – Production)&lt;br&gt;
This is the production branch&lt;br&gt;
Whatever is here is live for users&lt;br&gt;
Every production release is tagged (e.g. 0.1, 0.2, 1.0)&lt;br&gt;
In the diagram:&lt;br&gt;
Blue dots on the right = production releases&lt;br&gt;
Tags show version numbers&lt;br&gt;
🔒 Rule:&lt;br&gt;
Never develop directly on master&lt;/p&gt;

&lt;p&gt;b. Develop Branch (Center – Integration Branch)&lt;br&gt;
This is where all completed features come together&lt;br&gt;
Represents the next upcoming release&lt;br&gt;
Always ahead of master&lt;br&gt;
In the diagram:&lt;br&gt;
Yellow dots = commits on develop&lt;br&gt;
Features and bugfixes merge into develop first&lt;br&gt;
Think of develop as:&lt;br&gt;
“What will go live in the next version”&lt;/p&gt;

&lt;p&gt;c. Feature Branches (Left Side – New Work)&lt;br&gt;
Created from develop&lt;br&gt;
Used to build new features&lt;br&gt;
Each feature is isolated so it doesn’t break others&lt;br&gt;
In the diagram:&lt;br&gt;
Pink dots = feature branch commits&lt;br&gt;
Multiple feature branches can exist at the same time&lt;br&gt;
Once a feature is done → merged into develop&lt;br&gt;
Example:&lt;br&gt;
git checkout -b feature-login develop&lt;/p&gt;

&lt;p&gt;After completion:&lt;br&gt;
git merge feature-login&lt;/p&gt;

&lt;p&gt;d. Release Branch (Green – Final Preparation)&lt;br&gt;
Created when features are complete&lt;br&gt;
Only bug fixes, version updates, and final testing&lt;br&gt;
No new features allowed here&lt;br&gt;
In the diagram:&lt;br&gt;
Green dots = release branch&lt;br&gt;
Label “Start of release branch for 1.0” marks release creation&lt;br&gt;
After testing, it is merged into:&lt;br&gt;
master → production&lt;br&gt;
develop → keep history consistent&lt;br&gt;
This ensures:&lt;br&gt;
✔ Production is stable&lt;br&gt;
✔ Develop doesn’t miss fixes&lt;/p&gt;

&lt;p&gt;e. Hotfix Branch (Emergency Fixes)&lt;br&gt;
Created directly from master&lt;br&gt;
Used when production breaks&lt;br&gt;
Fixes are urgent and small&lt;br&gt;
In the diagram:&lt;br&gt;
Red dot = hotfix&lt;br&gt;
Created after a production tag (0.1)&lt;br&gt;
After fixing:&lt;br&gt;
Merged into master&lt;br&gt;
Also merged into develop&lt;br&gt;
This avoids:&lt;br&gt;
❌ Fix existing only in production&lt;br&gt;
❌ Losing fixes in future releases&lt;/p&gt;

&lt;p&gt;f. Why Merges Go Back to Develop&lt;br&gt;
Notice arrows going back into develop.&lt;br&gt;
This is important because:&lt;br&gt;
Any fix done in release or hotfix must be included in future versions&lt;br&gt;
Develop always stays complete and updated&lt;/p&gt;

&lt;p&gt;g. Version Tags Explained&lt;br&gt;
Tags like:&lt;br&gt;
0.1&lt;br&gt;
0.2&lt;br&gt;
1.0&lt;br&gt;
Represent:&lt;br&gt;
Exact production snapshots&lt;br&gt;
Used for rollback, auditing, deployments&lt;br&gt;
Example:&lt;br&gt;
git tag -a v1.0 -m "Production release"&lt;/p&gt;

&lt;p&gt;h. Simple Flow Summary&lt;br&gt;
Feature → Develop&lt;br&gt;
Develop → Release&lt;br&gt;
Release → Master&lt;br&gt;
Hotfix → Master + Develop&lt;br&gt;
Tag → Production version&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Install &amp;amp; Configure Git&lt;br&gt;
git --version&lt;br&gt;
Purpose: Verify Git installation&lt;br&gt;
git config --global user.name "Ashish"&lt;br&gt;
git config --global user.email "&lt;a href="mailto:ashish@email.com"&gt;ashish@email.com&lt;/a&gt;"&lt;br&gt;
Purpose: Set author identity for commits&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Initialize a Repository&lt;br&gt;
git init&lt;br&gt;
Purpose: Create a new Git repository&lt;br&gt;
Creates a hidden .git/ directory&lt;br&gt;
git status&lt;br&gt;
Purpose: Shows current state of repo (tracked, staged, untracked)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Working Directory → Staging → Repository&lt;br&gt;
Stage&lt;br&gt;
Meaning&lt;br&gt;
Working Directory&lt;br&gt;
Files you edit&lt;br&gt;
Staging Area&lt;br&gt;
Files selected for commit&lt;br&gt;
Repository&lt;br&gt;
Permanent commit history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Essential Git Commands (With Definitions)&lt;br&gt;
Create Files&lt;br&gt;
touch file.txt&lt;br&gt;
Creates a new file&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stage Files&lt;br&gt;
git add file.txt&lt;br&gt;
Stages a specific file&lt;br&gt;
git add .&lt;br&gt;
Stages all changes&lt;/p&gt;

&lt;p&gt;Commit Changes&lt;br&gt;
git commit -m "Initial commit"&lt;br&gt;
Saves staged changes as a snapshot&lt;/p&gt;

&lt;p&gt;View History&lt;br&gt;
git log&lt;br&gt;
Shows full commit history&lt;br&gt;
git log --oneline&lt;br&gt;
Compact commit view&lt;br&gt;
git show &lt;br&gt;
Shows changes of a specific commit&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Branching (DevOps Critical)&lt;br&gt;
git branch&lt;br&gt;
Lists branches&lt;br&gt;
git branch feature-login&lt;br&gt;
Creates new branch&lt;br&gt;
git checkout feature-login&lt;br&gt;
Switches branch&lt;br&gt;
git checkout -b feature-api&lt;br&gt;
Create + switch branch&lt;br&gt;
git branch -d feature-login&lt;br&gt;
Deletes merged branch&lt;br&gt;
git branch -D feature-login&lt;br&gt;
Force delete branch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merging Branches&lt;br&gt;
git merge feature-login&lt;br&gt;
Merges branch into current branch&lt;br&gt;
Merge Types&lt;br&gt;
Fast-forward → No divergence&lt;br&gt;
No-ff → Always creates merge commit&lt;br&gt;
Squash → Combines commits&lt;br&gt;
git merge --abort&lt;br&gt;
Cancels a failed merge&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Staging &amp;amp; Stashing&lt;br&gt;
Stash Changes&lt;br&gt;
git stash&lt;br&gt;
Temporarily saves uncommitted work&lt;br&gt;
git stash list&lt;br&gt;
Lists stashes&lt;br&gt;
git stash apply&lt;br&gt;
Restores stash&lt;br&gt;
git stash pop&lt;br&gt;
Apply + remove stash&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Undoing Changes Safely&lt;br&gt;
Git Reset (Local Only)&lt;br&gt;
git reset --soft &lt;br&gt;
Moves HEAD, keeps staged&lt;br&gt;
git reset --mixed &lt;br&gt;
Unstages changes (default)&lt;br&gt;
git reset --hard &lt;br&gt;
Deletes changes (dangerous)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Git Revert (Safe for Public Repos)&lt;br&gt;
git revert &lt;br&gt;
Creates a new commit that undoes changes&lt;/p&gt;

&lt;p&gt;Amend Last Commit&lt;br&gt;
git commit --amend&lt;br&gt;
Edits last commit&lt;/p&gt;

&lt;p&gt;Reflog (Recovery Tool)&lt;br&gt;
git reflog&lt;br&gt;
Shows all HEAD movements — lifesaver for recovery&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Tags &amp;amp; Releases&lt;br&gt;
git tag v1.0&lt;br&gt;
Creates lightweight tag&lt;br&gt;
git tag -a v1.1 -m "Release v1.1"&lt;br&gt;
Creates annotated tag&lt;br&gt;
git show v1.1&lt;br&gt;
Shows tagged commit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ignoring &amp;amp; Cleaning Files&lt;br&gt;
.gitignore&lt;br&gt;
*.log&lt;br&gt;
node_modules/&lt;br&gt;
.env&lt;br&gt;
Prevents files from being tracked&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Clean Untracked Files&lt;br&gt;
git clean -n&lt;br&gt;
Dry run&lt;br&gt;
git clean -f&lt;br&gt;
Deletes untracked files&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GitHub Basics
Clone Repo
git clone 
Downloads full repository&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set Remote&lt;br&gt;
git remote add origin &lt;br&gt;
Links local repo to GitHub&lt;br&gt;
git remote -v&lt;br&gt;
Verifies remotes&lt;/p&gt;

&lt;p&gt;Push &amp;amp; Pull&lt;br&gt;
git push origin main&lt;br&gt;
Uploads changes&lt;br&gt;
git pull origin main&lt;br&gt;
Fetch + merge changes&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Forks &amp;amp; Pull Requests&lt;br&gt;
Fork → Personal copy of repo&lt;br&gt;
Clone → Local copy&lt;br&gt;
Pull Request → Request to merge code&lt;br&gt;
Standard Open-Source Flow:&lt;br&gt;
Fork repo&lt;br&gt;
Clone fork&lt;br&gt;
Create feature branch&lt;br&gt;
Push changes&lt;br&gt;
Open PR&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Advanced Git (DevOps Focus)&lt;br&gt;
Rebase&lt;br&gt;
git rebase main&lt;br&gt;
Rewrites history (cleaner logs)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cherry-Pick&lt;br&gt;
git cherry-pick &lt;br&gt;
Applies a specific commit&lt;/p&gt;

&lt;p&gt;Hooks&lt;br&gt;
Scripts triggered on Git events (pre-commit, post-merge)&lt;/p&gt;

&lt;p&gt;Git LFS&lt;br&gt;
Handles large files efficiently&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Git in CI/CD&lt;br&gt;
Git push triggers pipelines&lt;br&gt;
Branch rules protect production&lt;br&gt;
Tags trigger releases&lt;br&gt;
GitOps tools watch Git state&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Best Practices for DevOps Engineers&lt;br&gt;
Small, meaningful commits&lt;br&gt;
Never rewrite public history&lt;br&gt;
Protect main branch&lt;br&gt;
Use PR reviews&lt;br&gt;
Tag releases&lt;br&gt;
Automate via pipelines&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Final Note&lt;br&gt;
Git is not just a tool - it’s the control system of modern DevOps.&lt;br&gt;
Mastering Git means mastering collaboration, automation, and safe deployments.&lt;br&gt;
Thanks for following Week 4 of my Learn-in-Public DevOps journey.&lt;/p&gt;

</description>
      <category>git</category>
      <category>devops</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Networking for DevOps and SDLC(Software Development Lifecycle) — The Complete Hands-On Beginner-to-Advanced Guide (Week 3)</title>
      <dc:creator>Ashish</dc:creator>
      <pubDate>Mon, 08 Dec 2025 13:09:28 +0000</pubDate>
      <link>https://forem.com/ashish0360/networking-for-devops-and-sdlcsoftware-development-lifecycle-the-complete-hands-on-1nn3</link>
      <guid>https://forem.com/ashish0360/networking-for-devops-and-sdlcsoftware-development-lifecycle-the-complete-hands-on-1nn3</guid>
      <description>&lt;h2&gt;
  
  
  **Networking Foundations for DevOps — Part 1
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Ultra-Detailed — Definitions, Why it matters, When to use, and Practical Examples&lt;/p&gt;

&lt;p&gt;By Ashish — Learn-in-Public DevOps Journey (Week 3)&lt;/p&gt;

&lt;p&gt;Overview&lt;/p&gt;

&lt;p&gt;This part gives a rock-solid, practical foundation in networking for DevOps engineers. Every topic below contains:&lt;/p&gt;

&lt;p&gt;Definition (what it is),&lt;/p&gt;

&lt;p&gt;What it does / why it matters,&lt;/p&gt;

&lt;p&gt;When a DevOps engineer uses it,&lt;/p&gt;

&lt;p&gt;Practical command examples you can copy–paste and run,&lt;/p&gt;

&lt;p&gt;Notes / common pitfalls to watch for.&lt;/p&gt;

&lt;p&gt;Targets: system/network troubleshooting, cloud networking, container networking, observability, CI/CD connectivity issues, and on-call remediation.&lt;/p&gt;

&lt;p&gt;Table of Contents&lt;/p&gt;

&lt;p&gt;Network models: OSI vs TCP/IP&lt;/p&gt;

&lt;p&gt;Network interfaces, MAC &amp;amp; link layer&lt;/p&gt;

&lt;p&gt;IP addresses: IPv4 and IPv6 (definition + examples)&lt;/p&gt;

&lt;p&gt;Subnetting &amp;amp; CIDR (step-by-step + worked examples)&lt;/p&gt;

&lt;p&gt;Routing basics &amp;amp; default gateway&lt;/p&gt;

&lt;p&gt;ARP (Address Resolution Protocol)&lt;/p&gt;

&lt;p&gt;NAT (Network Address Translation) — definition &amp;amp; simple examples&lt;/p&gt;

&lt;p&gt;TCP vs UDP — ports, sockets &amp;amp; connection states&lt;/p&gt;

&lt;p&gt;MTU, fragmentation and common issues&lt;/p&gt;

&lt;p&gt;DNS fundamentals (what, how, tools)&lt;/p&gt;

&lt;p&gt;DHCP basics (how clients get addresses)&lt;/p&gt;

&lt;p&gt;Linux network tools &amp;amp; commands (ip, ss, netstat, traceroute, ping, curl, dig, nslookup) — with examples&lt;/p&gt;

&lt;p&gt;Firewalls basics (iptables/nftables, ufw/firewalld) — examples for DevOps&lt;/p&gt;

&lt;p&gt;Virtual networking basics (VLANs, bonding/teaming, bridges)&lt;/p&gt;

&lt;p&gt;Container &amp;amp; VM networking concepts (bridge, host, macvlan, overlay)&lt;/p&gt;

&lt;p&gt;Quick troubleshooting workflows &amp;amp; checklist&lt;/p&gt;

&lt;p&gt;1 — Network Models: OSI vs TCP/IP&lt;/p&gt;

&lt;p&gt;Definition: conceptual frameworks that describe how network communication is layered.&lt;/p&gt;

&lt;p&gt;OSI (7 layers): Physical → Data Link → Network → Transport → Session → Presentation → Application&lt;/p&gt;

&lt;p&gt;TCP/IP (4 layers): Link (Network Interface), Internet (IP), Transport (TCP/UDP), Application (HTTP, DNS, etc.)&lt;/p&gt;

&lt;p&gt;What it does / why it matters: Layers help you reason: is the problem physical (cable), link (MAC), routing (IP), transport (TCP), or application (HTTP)? DevOps troubleshooting uses layer thinking to isolate faults.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Incident triage: packet loss (link layer), unreachable IP (network layer), TCP hangs (transport), 502 errors (application).&lt;/p&gt;

&lt;p&gt;Example (diagnostic approach):&lt;/p&gt;

&lt;p&gt;Layer 1: check ip a, ethtool eth0 — link up/down, speed, duplex.&lt;/p&gt;

&lt;p&gt;Layer 2: check arp -a — MAC resolution.&lt;/p&gt;

&lt;p&gt;Layer 3: check ip route, ping — IP routing.&lt;/p&gt;

&lt;p&gt;Layer 4: check ss -tulnp or netstat — TCP/UDP sockets.&lt;/p&gt;

&lt;p&gt;Layer 7: curl -I &lt;a href="https://service" rel="noopener noreferrer"&gt;https://service&lt;/a&gt; or check application logs.&lt;/p&gt;

&lt;p&gt;Notes: You’ll jump between layers during incidents — practice mapping symptoms to layers.&lt;/p&gt;

&lt;p&gt;2 — Network Interfaces, MAC &amp;amp; Link Layer&lt;/p&gt;

&lt;p&gt;Definition: A network interface (NIC) is the OS representation of a physical or virtual network adapter. A MAC (Media Access Control) address is the hardware address at the link layer.&lt;/p&gt;

&lt;p&gt;What it does: NICs transmit/receive frames; the MAC address uniquely identifies an interface on a local link.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Identifying physical/virtual NICs, bonding multiple NICs, diagnosing cable or switch port problems.&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show interfaces and addresses
&lt;/h1&gt;

&lt;p&gt;ip link show&lt;br&gt;
ip a show eth0&lt;/p&gt;

&lt;h1&gt;
  
  
  Show MAC addresses
&lt;/h1&gt;

&lt;p&gt;ip link show eth0 | grep link/ether&lt;/p&gt;

&lt;h1&gt;
  
  
  Get low-level link info
&lt;/h1&gt;

&lt;p&gt;ethtool eth0      # (may need package install)&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Virtual interfaces (docker0, cni0, veth*) also show here.&lt;/p&gt;

&lt;p&gt;MACs are used only inside a broadcast domain — routers do not forward MACs.&lt;/p&gt;

&lt;p&gt;3 — IP Addresses: IPv4 &amp;amp; IPv6&lt;/p&gt;

&lt;p&gt;Definition:&lt;/p&gt;

&lt;p&gt;IPv4: 32-bit addresses shown as dotted decimal (e.g., 192.168.1.10).&lt;/p&gt;

&lt;p&gt;IPv6: 128-bit addresses shown hex (e.g., 2001:db8::1).&lt;/p&gt;

&lt;p&gt;What it does: Identify hosts at the network layer; routing uses IP addresses.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Assigning static IPs, configuring cloud NICs, diagnosing reachability, setting firewall rules.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show IP addresses on interfaces
&lt;/h1&gt;

&lt;p&gt;ip -4 addr show        # IPv4&lt;br&gt;
ip -6 addr show        # IPv6&lt;/p&gt;

&lt;h1&gt;
  
  
  Add a secondary IP
&lt;/h1&gt;

&lt;p&gt;sudo ip addr add 192.168.100.10/24 dev eth0&lt;/p&gt;

&lt;h1&gt;
  
  
  Remove
&lt;/h1&gt;

&lt;p&gt;sudo ip addr del 192.168.100.10/24 dev eth0&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Use IPv6 in cloud where supported; be mindful of firewall differences.&lt;/p&gt;

&lt;p&gt;Public vs private addresses: private ranges (RFC1918): 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.&lt;/p&gt;

&lt;p&gt;4 — Subnetting &amp;amp; CIDR (worked examples)&lt;/p&gt;

&lt;p&gt;Definition: Subnetting divides an IP network into smaller networks. CIDR (Classless Inter-Domain Routing) uses suffix /N to denote network prefix length (e.g., /24).&lt;/p&gt;

&lt;p&gt;What it does: Controls which hosts are in the same L3 network (subnet); determines routing and broadcast domains.&lt;/p&gt;

&lt;p&gt;Why DevOps uses it: Planning VPC subnets, assigning service subnets, calculating IP ranges for clusters, isolating environments.&lt;/p&gt;

&lt;p&gt;Quick rules:&lt;/p&gt;

&lt;p&gt;/32 = 1 host (IPv4)&lt;/p&gt;

&lt;p&gt;/31 = 2 hosts (special)&lt;/p&gt;

&lt;p&gt;/30 = 4 addresses (2 usable)&lt;/p&gt;

&lt;p&gt;/29 = 8 addresses (6 usable)&lt;/p&gt;

&lt;p&gt;/24 = 256 addresses (254 usable)&lt;/p&gt;

&lt;p&gt;Usable hosts = total addresses − network − broadcast (for IPv4)&lt;/p&gt;

&lt;p&gt;Example 1 — /24 to /26 split (step-by-step)&lt;/p&gt;

&lt;p&gt;Start: 192.168.1.0/24 (addresses 192.168.1.0–192.168.1.255)&lt;/p&gt;

&lt;p&gt;Split into four /26 subnets (each has 64 addresses, 62 usable):&lt;/p&gt;

&lt;p&gt;192.168.1.0/26     -&amp;gt; 192.168.1.0 - 192.168.1.63   (usable: .1 - .62)&lt;br&gt;
192.168.1.64/26    -&amp;gt; 192.168.1.64 - 192.168.1.127 (usable: .65 - .126)&lt;br&gt;
192.168.1.128/26   -&amp;gt; 192.168.1.128 - 192.168.1.191&lt;br&gt;
192.168.1.192/26   -&amp;gt; 192.168.1.192 - 192.168.1.255&lt;/p&gt;

&lt;p&gt;How to calculate binary quick trick:&lt;br&gt;
/26 means 26 ones in netmask: 11111111.11111111.11111111.11000000 -&amp;gt; 255.255.255.192 -&amp;gt; block size 64.&lt;/p&gt;

&lt;p&gt;Commands to inspect subnet info:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show routing table and connected networks
&lt;/h1&gt;

&lt;p&gt;ip route show&lt;/p&gt;

&lt;h1&gt;
  
  
  Calculate network info (using ipcalc if installed)
&lt;/h1&gt;

&lt;p&gt;ipcalc 192.168.1.10/26&lt;/p&gt;

&lt;h1&gt;
  
  
  or use 'sipcalc' if available
&lt;/h1&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Always reserve addresses for gateway (.1 or .254) and avoid .0/.255 as hosts in /24.&lt;/p&gt;

&lt;p&gt;Cloud consoles often reserve first/last IPs in a subnet — check provider docs (AWS, GCP, Azure).&lt;/p&gt;

&lt;p&gt;5 — Routing Basics &amp;amp; Default Gateway&lt;/p&gt;

&lt;p&gt;Definition: Routing chooses paths packets follow between networks. A default gateway is the router an IP host sends traffic to when the destination is not on the local subnet.&lt;/p&gt;

&lt;p&gt;What it does: Routes forward packets between subnets and to the Internet.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Troubleshooting unreachable hosts, peering VPCs, configuring NAT gateways.&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show IP routing table
&lt;/h1&gt;

&lt;p&gt;ip route show&lt;/p&gt;

&lt;h1&gt;
  
  
  Typical default route output
&lt;/h1&gt;

&lt;h1&gt;
  
  
  default via 10.0.0.1 dev eth0 proto dhcp metric 100
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Add a route (persistency differs by distro/cloud)
&lt;/h1&gt;

&lt;p&gt;sudo ip route add 10.10.20.0/24 via 192.168.1.1 dev eth0&lt;/p&gt;

&lt;h1&gt;
  
  
  Delete route
&lt;/h1&gt;

&lt;p&gt;sudo ip route del 10.10.20.0/24&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Route priority uses metric; lower metric preferred.&lt;/p&gt;

&lt;p&gt;Mistyped routes can blackhole traffic — be careful when scripting route changes.&lt;/p&gt;

&lt;p&gt;6 — ARP (Address Resolution Protocol)&lt;/p&gt;

&lt;p&gt;Definition: ARP maps IPv4 addresses to MAC addresses on the same broadcast domain.&lt;/p&gt;

&lt;p&gt;What it does: When Host A wants to reach 192.168.1.10 in its subnet but only knows the IP, it broadcasts an ARP request; the owner replies with its MAC.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Local network troubleshooting (duplicate IPs, stale ARP entries), debugging NIC problems, Docker overlay issues.&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show ARP table
&lt;/h1&gt;

&lt;p&gt;ip neigh show&lt;/p&gt;

&lt;h1&gt;
  
  
  or (older)
&lt;/h1&gt;

&lt;p&gt;arp -a&lt;/p&gt;

&lt;h1&gt;
  
  
  Example: ping to populate ARP
&lt;/h1&gt;

&lt;p&gt;ping -c 1 192.168.1.10&lt;br&gt;
ip neigh show&lt;/p&gt;

&lt;h1&gt;
  
  
  Delete an ARP entry (if stale)
&lt;/h1&gt;

&lt;p&gt;sudo ip neigh del 192.168.1.10 dev eth0&lt;/p&gt;

&lt;p&gt;Pitfalls:&lt;/p&gt;

&lt;p&gt;ARP spoofing can be a security issue.&lt;/p&gt;

&lt;p&gt;Stale ARP entries can happen with VM migration — clear table if necessary.&lt;/p&gt;

&lt;p&gt;7 — NAT (Network Address Translation)&lt;/p&gt;

&lt;p&gt;Definition: NAT rewrites IP addresses and/or ports of packets crossing a router — common types: SNAT (source NAT) for outbound, DNAT (destination NAT) for inbound.&lt;/p&gt;

&lt;p&gt;What it does: Allows multiple private hosts to share a public IP (masquerading), or forwards public traffic to internal hosts (port forwarding).&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Internet egress from private subnets, exposing services behind NAT, load balancer + reverse proxy setups.&lt;/p&gt;

&lt;p&gt;Simple Linux example (iptables):&lt;/p&gt;

&lt;h1&gt;
  
  
  Masquerade outbound traffic on eth0 (simplified)
&lt;/h1&gt;

&lt;p&gt;sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;/p&gt;

&lt;h1&gt;
  
  
  DNAT: forward port 8080 on gateway to internal 10.0.1.10:80
&lt;/h1&gt;

&lt;p&gt;sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.0.1.10:80&lt;br&gt;
sudo iptables -A FORWARD -p tcp -d 10.0.1.10 --dport 80 -j ACCEPT&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Cloud providers offer managed NAT gateways; prefer them to DIY NAT in production for reliability.&lt;/p&gt;

&lt;p&gt;NAT breaks end-to-end IP visibility; use logging and port mapping carefully.&lt;/p&gt;

&lt;p&gt;8 — TCP vs UDP — Ports, Sockets &amp;amp; Connection States&lt;/p&gt;

&lt;p&gt;Definition:&lt;/p&gt;

&lt;p&gt;TCP (Transmission Control Protocol): connection-oriented, reliable, ordered.&lt;/p&gt;

&lt;p&gt;UDP (User Datagram Protocol): connectionless, lower overhead, no guarantees.&lt;/p&gt;

&lt;p&gt;What it does: TCP for HTTP/HTTPS, SSH, database connections; UDP for DNS, syslog, some streaming.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Choose protocol suitable for service; troubleshoot socket states (SYN, ESTABLISHED, TIME_WAIT).&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show listening sockets
&lt;/h1&gt;

&lt;p&gt;ss -tuln        # t: tcp, u: udp, l: listening, n: numeric&lt;/p&gt;

&lt;h1&gt;
  
  
  Show connections
&lt;/h1&gt;

&lt;p&gt;ss -tnp         # active tcp connections with process info&lt;/p&gt;

&lt;h1&gt;
  
  
  Sample output interpretation:
&lt;/h1&gt;

&lt;h1&gt;
  
  
  LISTEN 0      128    0.0.0.0:22     0.0.0.0:*    users:(("sshd",pid=1234))
&lt;/h1&gt;

&lt;p&gt;Common socket states to know:&lt;/p&gt;

&lt;p&gt;LISTEN — waiting for incoming connections&lt;/p&gt;

&lt;p&gt;SYN_SENT / SYN_RECV — connection handshake&lt;/p&gt;

&lt;p&gt;ESTABLISHED — active connection&lt;/p&gt;

&lt;p&gt;TIME_WAIT — waiting to ensure remote side received final ACK (normal after close)&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Excessive TIME_WAIT may indicate short-lived connections; tune tcp_tw_reuse with caution.&lt;/p&gt;

&lt;p&gt;UDP is stateless — troubleshooting needs packet captures (tcpdump).&lt;/p&gt;

&lt;p&gt;9 — MTU, Fragmentation &amp;amp; Common Issues&lt;/p&gt;

&lt;p&gt;Definition: MTU (Maximum Transmission Unit) is the largest packet size that can be transmitted without fragmentation. Fragmentation occurs when a packet exceeds MTU and is split.&lt;/p&gt;

&lt;p&gt;What it does: Correct MTU avoids fragmentation; mismatched MTU causes connectivity issues, especially with VPNs and tunnels.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Troubleshooting slow connections, VPNs, overlay networks (VXLAN/Weave/Flannel), Docker overlay MTU issues.&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Show MTU
&lt;/h1&gt;

&lt;p&gt;ip link show eth0&lt;/p&gt;

&lt;h1&gt;
  
  
  Ping with specific packet size to test MTU (Linux)
&lt;/h1&gt;

&lt;p&gt;ping -M do -s 1472 8.8.8.8   # 1472 + 28 = 1500 (ICMP header = 28)&lt;/p&gt;

&lt;h1&gt;
  
  
  Change MTU (temporary)
&lt;/h1&gt;

&lt;p&gt;sudo ip link set dev eth0 mtu 1400&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Encapsulation (GRE/VXLAN) reduces usable MTU; reduce interface MTU accordingly (e.g., 1450).&lt;/p&gt;

&lt;p&gt;ICMP "Fragmentation needed" messages must reach the source for Path MTU Discovery to work — blocked ICMP breaks PMTUD.&lt;/p&gt;

&lt;p&gt;10 — DNS Fundamentals&lt;/p&gt;

&lt;p&gt;Definition: DNS maps human names (example.com) to IP addresses (A/AAAA records) and other records (CNAME, MX, TXT).&lt;/p&gt;

&lt;p&gt;What it does: Allows services to be addressed by names rather than IPs; critical for service discovery.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Configure app domains, validate DNS propagation, troubleshoot name resolution.&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Query A record
&lt;/h1&gt;

&lt;p&gt;dig +short example.com A&lt;/p&gt;

&lt;h1&gt;
  
  
  Full trace
&lt;/h1&gt;

&lt;p&gt;dig +trace example.com&lt;/p&gt;

&lt;h1&gt;
  
  
  nslookup interactive
&lt;/h1&gt;

&lt;p&gt;nslookup&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;server 8.8.8.8&lt;br&gt;
example.com&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  check TXT or MX
&lt;/h1&gt;

&lt;p&gt;dig example.com TXT&lt;br&gt;
dig example.com MX&lt;/p&gt;

&lt;p&gt;Common issues:&lt;/p&gt;

&lt;p&gt;Misconfigured TTL causes stale records.&lt;/p&gt;

&lt;p&gt;Missing records or wrong zone files cause failures.&lt;/p&gt;

&lt;p&gt;Split-horizon DNS (different answers internally vs externally) can confuse troubleshooting.&lt;/p&gt;

&lt;p&gt;11 — DHCP Basics&lt;/p&gt;

&lt;p&gt;Definition: DHCP dynamically assigns IP addresses and network configuration (gateway, DNS) to clients.&lt;/p&gt;

&lt;p&gt;What it does: Simplifies host provisioning and IP management.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Cloud VMs often use DHCP; on-prem hosts and containers may use DHCP; know how DHCP impacts bootstrapping.&lt;/p&gt;

&lt;p&gt;Commands / Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  Check lease file (example for dhclient)
&lt;/h1&gt;

&lt;p&gt;cat /var/lib/dhcp/dhclient.leases&lt;/p&gt;

&lt;h1&gt;
  
  
  Force renew (Linux)
&lt;/h1&gt;

&lt;p&gt;sudo dhclient -r eth0&lt;br&gt;
sudo dhclient eth0&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;In cloud environments, metadata services provide more than DHCP (e.g., user data).&lt;/p&gt;

&lt;p&gt;Static IPs are preferable for critical services.&lt;/p&gt;

&lt;p&gt;12 — Linux Network Tools &amp;amp; Commands (practical)&lt;/p&gt;

&lt;p&gt;This is your daily toolkit — copy these.&lt;/p&gt;

&lt;p&gt;ip (modern replacement for ifconfig/route)&lt;br&gt;
ip a               # show addresses&lt;br&gt;
ip link show       # show interfaces &amp;amp; state&lt;br&gt;
ip route show      # routing table&lt;br&gt;
ip neigh show      # ARP table&lt;/p&gt;

&lt;p&gt;ss / netstat&lt;br&gt;
ss -tuln           # listening ports&lt;br&gt;
ss -tnp            # tcp connections + processes&lt;br&gt;
netstat -tulnp     # older systems&lt;/p&gt;

&lt;p&gt;ping / traceroute / mtr&lt;br&gt;
ping -c 4 google.com&lt;br&gt;
traceroute google.com&lt;br&gt;
mtr google.com     # real-time traceroute+ping (interactive)&lt;/p&gt;

&lt;p&gt;curl / wget&lt;br&gt;
curl -I &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;   # show headers&lt;br&gt;
curl -sS &lt;a href="http://api/endpoint" rel="noopener noreferrer"&gt;http://api/endpoint&lt;/a&gt; | jq '.'&lt;br&gt;
wget &lt;a href="https://example.com/file" rel="noopener noreferrer"&gt;https://example.com/file&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DNS tools&lt;br&gt;
dig +short example.com&lt;br&gt;
nslookup example.com 8.8.8.8&lt;/p&gt;

&lt;p&gt;Packet capture&lt;br&gt;
sudo tcpdump -i eth0 port 80 -w capture.pcap&lt;/p&gt;

&lt;h1&gt;
  
  
  view live (text)
&lt;/h1&gt;

&lt;p&gt;sudo tcpdump -i eth0 -n -vv&lt;/p&gt;

&lt;p&gt;Inspect routing to a host&lt;br&gt;
ip route get 8.8.8.8&lt;/p&gt;

&lt;p&gt;L4 testing&lt;/p&gt;

&lt;h1&gt;
  
  
  test TCP connect to port
&lt;/h1&gt;

&lt;p&gt;nc -vz 10.0.0.5 443   # (netcat)&lt;/p&gt;

&lt;h1&gt;
  
  
  test UDP (less reliable)
&lt;/h1&gt;

&lt;p&gt;nc -vu 10.0.0.5 123&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Use sudo for privileged operations.&lt;/p&gt;

&lt;p&gt;tcpdump outputs can be large — filter by host/port.&lt;/p&gt;

&lt;p&gt;13 — Firewalls: iptables, nftables, ufw, firewalld&lt;/p&gt;

&lt;p&gt;Definition: Firewalls enforce policies for traffic filtering (packet/connection level).&lt;/p&gt;

&lt;p&gt;What it does: Allow/deny traffic based on IP, port, interface, state.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Control service exposure, secure nodes, implement port-forwarding.&lt;/p&gt;

&lt;p&gt;Simple examples (iptables):&lt;/p&gt;

&lt;h1&gt;
  
  
  Allow incoming SSH
&lt;/h1&gt;

&lt;p&gt;sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT&lt;/p&gt;

&lt;h1&gt;
  
  
  Allow established/related
&lt;/h1&gt;

&lt;p&gt;sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT&lt;/p&gt;

&lt;h1&gt;
  
  
  Drop everything else
&lt;/h1&gt;

&lt;p&gt;sudo iptables -P INPUT DROP&lt;/p&gt;

&lt;p&gt;nftables (modern):&lt;/p&gt;

&lt;p&gt;sudo nft list ruleset&lt;/p&gt;

&lt;h1&gt;
  
  
  add rules via nft syntax (recommended to read docs)
&lt;/h1&gt;

&lt;p&gt;UFW (Ubuntu simple firewall):&lt;/p&gt;

&lt;p&gt;sudo ufw allow 22/tcp&lt;br&gt;
sudo ufw enable&lt;br&gt;
sudo ufw status&lt;/p&gt;

&lt;p&gt;firewalld (RHEL/CentOS):&lt;/p&gt;

&lt;p&gt;sudo firewall-cmd --add-service=http --permanent&lt;br&gt;
sudo firewall-cmd --reload&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Cloud security groups are separate (AWS/GCP/Azure) — ensure both cloud and host firewall rules align.&lt;/p&gt;

&lt;p&gt;Incorrect firewall rules can lock you out of remote servers — always keep console access or temporary rules.&lt;/p&gt;

&lt;p&gt;14 — Virtual Networking: VLANs, Bonding/Teaming, Bridges&lt;/p&gt;

&lt;p&gt;Definition &amp;amp; Use:&lt;/p&gt;

&lt;p&gt;VLAN (802.1Q): logical segmentation of a physical network — multiple L2 networks on same cable.&lt;/p&gt;

&lt;p&gt;Bonding / Teaming: combine multiple NICs for redundancy or throughput aggregation.&lt;/p&gt;

&lt;p&gt;Bridge: L2 device in Linux that forwards frames between interfaces — used for VM/container networking.&lt;/p&gt;

&lt;p&gt;When DevOps uses it: Data center network segmentation, high availability NIC setup, container networks.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  create VLAN (example)
&lt;/h1&gt;

&lt;p&gt;sudo ip link add link eth0 name eth0.100 type vlan id 100&lt;br&gt;
sudo ip addr add 192.168.100.10/24 dev eth0.100&lt;br&gt;
sudo ip link set dev eth0.100 up&lt;/p&gt;

&lt;h1&gt;
  
  
  show bridges
&lt;/h1&gt;

&lt;p&gt;bridge link&lt;/p&gt;

&lt;h1&gt;
  
  
  create bridge (for VMs/containers)
&lt;/h1&gt;

&lt;p&gt;sudo ip link add name br0 type bridge&lt;br&gt;
sudo ip link set dev br0 up&lt;br&gt;
sudo ip link set dev eth0 master br0&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Bonding modes matter (active-backup vs LACP) — coordinate with switch config.&lt;/p&gt;

&lt;p&gt;Bridges are the basis for docker0 and many CNI plugins.&lt;/p&gt;

&lt;p&gt;15 — Container &amp;amp; VM Networking (core concepts)&lt;/p&gt;

&lt;p&gt;Definition: Containers and VMs use virtual networks — bridge, host, macvlan, overlay.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;p&gt;bridge: containers get private NIC on host bridge (NAT to outside).&lt;/p&gt;

&lt;p&gt;host: container uses host network namespace (no isolation).&lt;/p&gt;

&lt;p&gt;macvlan: container appears as separate L2 device on network.&lt;/p&gt;

&lt;p&gt;overlay (VXLAN/Weave): connect containers across hosts (used by Docker Swarm, older Kube CNI plugins).&lt;/p&gt;

&lt;p&gt;Why DevOps cares: Troubleshooting pod-to-pod, node-to-node connectivity, Service/Ingress behavior, MTU issues on overlays.&lt;/p&gt;

&lt;p&gt;Quick inspect examples:&lt;/p&gt;

&lt;h1&gt;
  
  
  list docker networks
&lt;/h1&gt;

&lt;p&gt;docker network ls&lt;br&gt;
docker network inspect bridge&lt;/p&gt;

&lt;h1&gt;
  
  
  check container IP
&lt;/h1&gt;

&lt;p&gt;docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name&lt;/p&gt;

&lt;p&gt;Kubernetes pointers (preview):&lt;/p&gt;

&lt;p&gt;Pods have network namespace and virtual eth0; kubectl exec + ip a inside pod helps debug.&lt;/p&gt;

&lt;p&gt;kubectl get svc, kubectl get endpoints, and kubectl describe svc are essential.&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;p&gt;Overlay networks often need reduced MTU due to encapsulation.&lt;/p&gt;

&lt;p&gt;DNS inside containers: check /etc/resolv.conf in pod/container.&lt;/p&gt;

&lt;p&gt;16 — Quick Troubleshooting Workflows &amp;amp; Checklist&lt;/p&gt;

&lt;p&gt;When a service or host is unreachable, follow a layered checklist:&lt;/p&gt;

&lt;p&gt;Is the interface up?&lt;/p&gt;

&lt;p&gt;ip link show eth0&lt;br&gt;
ip a show eth0&lt;/p&gt;

&lt;p&gt;Does host have an IP &amp;amp; route to destination?&lt;/p&gt;

&lt;p&gt;ip addr show&lt;br&gt;
ip route&lt;br&gt;
ip route get &lt;/p&gt;

&lt;p&gt;Can you resolve DNS (if name used)?&lt;/p&gt;

&lt;p&gt;dig +short service.example.com&lt;br&gt;
nslookup service.example.com&lt;/p&gt;

&lt;p&gt;Is the host reachable (ICMP)?&lt;/p&gt;

&lt;p&gt;ping -c 4 &lt;/p&gt;

&lt;p&gt;If ping fails: try traceroute / mtr.&lt;/p&gt;

&lt;p&gt;Is the port listening on the server?&lt;/p&gt;

&lt;p&gt;ss -tuln | grep :80&lt;/p&gt;

&lt;p&gt;Are firewall or security groups blocking?&lt;/p&gt;

&lt;p&gt;Check iptables/nft/ufw/firewalld and cloud security groups.&lt;/p&gt;

&lt;p&gt;Is NAT/Load Balancer translating correctly?&lt;/p&gt;

&lt;p&gt;Review NAT/DNAT rules, ELB/NLB target health.&lt;/p&gt;

&lt;p&gt;Packet level check&lt;/p&gt;

&lt;p&gt;sudo tcpdump -i eth0 host  and port &lt;/p&gt;

&lt;p&gt;Check ARP / local broadcast domain&lt;/p&gt;

&lt;p&gt;ip neigh show&lt;br&gt;
arp -a&lt;/p&gt;

&lt;p&gt;If in containers/k8s: check CNI plugin logs, node routes, kube-proxy status.&lt;/p&gt;

&lt;p&gt;Bonus: Small Useful Scripts / One-Liners&lt;/p&gt;

&lt;p&gt;Count open connections to a host:&lt;/p&gt;

&lt;p&gt;ss -tn state established '( dport = :443 or sport = :443 )' | wc -l&lt;/p&gt;

&lt;p&gt;Show top talkers by bytes (netstat variant):&lt;/p&gt;

&lt;p&gt;sudo ss -tanp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head&lt;/p&gt;

&lt;p&gt;Check for duplicate IPs (ARP)&lt;/p&gt;

&lt;p&gt;arp -a | awk '{print $2}' | sort | uniq -d&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Networking for DevOps — Part 2&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;DNS • Routing • NAT • Tools • Firewalls • Cloud Networking&lt;br&gt;
(With Definitions, Deep Explanations &amp;amp; Real DevOps Examples)&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 3)&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;DNS — Definition + Deep Explanation + Examples&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hostnames, resolv.conf &amp;amp; Name Resolution (Definitions + Examples)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Routing — Definition, Linux Routing, Cloud Routing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NAT — Definition + SNAT + DNAT + Masquerade&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Firewalls — Definition + Linux + Cloud Firewalls&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Networking Tools — Definitions + How They Work&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real DevOps Debugging Case Studies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloud Networking Summary (AWS / Azure / GCP)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1️⃣ DNS — Definition, Working &amp;amp; Practical DevOps Usage&lt;br&gt;
📌 Definition: What is DNS?&lt;/p&gt;

&lt;p&gt;DNS (Domain Name System) is a global distributed system that translates human-readable names into IP addresses.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt; → 142.250.70.14&lt;/p&gt;

&lt;p&gt;Without DNS, you would have to type IPs for every site—impossible at scale.&lt;/p&gt;

&lt;p&gt;📌 Why DNS Matters for DevOps?&lt;/p&gt;

&lt;p&gt;Because every cloud service, microservice, Kubernetes service, API, Git repo, load balancer, and CI/CD tool depends on DNS.&lt;/p&gt;

&lt;p&gt;If DNS fails:&lt;/p&gt;

&lt;p&gt;Apps fail&lt;/p&gt;

&lt;p&gt;API calls fail&lt;/p&gt;

&lt;p&gt;Load balancer health checks fail&lt;/p&gt;

&lt;p&gt;Containers can’t resolve internal services&lt;/p&gt;

&lt;p&gt;CI/CD webhooks break&lt;/p&gt;

&lt;p&gt;🔹 How DNS Works (Step-by-Step + Diagram)&lt;br&gt;
[Client] &lt;br&gt;
   ↓&lt;br&gt;
&lt;a href="//your%20ISP%20/%20/etc/resolv.conf"&gt;DNS Resolver&lt;/a&gt;&lt;br&gt;
   ↓&lt;br&gt;
&lt;a href="//."&gt;Root Servers&lt;/a&gt;&lt;br&gt;
   ↓&lt;br&gt;
&lt;a href="//.com"&gt;TLD Servers&lt;/a&gt;&lt;br&gt;
   ↓&lt;br&gt;
&lt;a href="https://dev.toCloudflare,%20Route53,%20GoDaddy"&gt;Authoritative DNS&lt;/a&gt;&lt;br&gt;
   ↓&lt;br&gt;
Final IP returned&lt;/p&gt;

&lt;p&gt;Try checking a domain:&lt;/p&gt;

&lt;p&gt;dig google.com&lt;/p&gt;

&lt;p&gt;🔹 Important DNS Records (with Definitions &amp;amp; Examples)&lt;br&gt;
Record  Definition  Example&lt;br&gt;
A   Maps hostname → IPv4  api.app.com → 54.21.11.9&lt;br&gt;
AAAA    Maps hostname → IPv6  app → 2607:f8b0...&lt;br&gt;
CNAME   Alias pointing to another domain    www → app.com&lt;br&gt;
MX  Mail routing    Gmail mail servers&lt;br&gt;
NS  Nameserver for domain   ns1.cloudflare.com&lt;br&gt;
TXT Text records (SPF, DKIM, verification)  google-verification&lt;br&gt;
SRV Service discovery   _sip._tcp.example.com&lt;br&gt;
🔥 Real DevOps Example — ALB + CNAME&lt;/p&gt;

&lt;p&gt;AWS ALB hostname:&lt;/p&gt;

&lt;p&gt;myapp-alb-988.ap-south-1.elb.amazonaws.com&lt;/p&gt;

&lt;p&gt;DNS record you create:&lt;/p&gt;

&lt;p&gt;app.example.com → ALB CNAME above&lt;/p&gt;

&lt;p&gt;If ALB changes, your app still works.&lt;/p&gt;

&lt;p&gt;🔹 DNS Tools (Definitions + Examples)&lt;br&gt;
✔ dig — Definition: DNS query tool&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;dig linkedin.com&lt;br&gt;
dig +short linkedin.com&lt;br&gt;
dig +trace google.com   # full DNS chain&lt;/p&gt;

&lt;p&gt;✔ nslookup — Definition: legacy DNS lookup tool&lt;br&gt;
nslookup api.service.com&lt;/p&gt;

&lt;p&gt;✔ host — Definition: simple reverse &amp;amp; forward DNS lookup&lt;br&gt;
host google.com&lt;/p&gt;

&lt;p&gt;2️⃣ Hostnames, resolv.conf &amp;amp; Name Resolution&lt;br&gt;
📌 Definition: Hostname&lt;/p&gt;

&lt;p&gt;A hostname is the human-readable name of a system in a network.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;hostname&lt;br&gt;
hostnamectl&lt;/p&gt;

&lt;p&gt;📌 Definition: /etc/hosts&lt;/p&gt;

&lt;p&gt;Local static DNS mapping file.&lt;/p&gt;

&lt;p&gt;Example entry:&lt;/p&gt;

&lt;p&gt;10.0.1.40   backend.internal&lt;/p&gt;

&lt;p&gt;Now you can run:&lt;/p&gt;

&lt;p&gt;curl &lt;a href="http://backend.internal:8080" rel="noopener noreferrer"&gt;http://backend.internal:8080&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 Definition: resolv.conf&lt;/p&gt;

&lt;p&gt;File that tells Linux which DNS servers to use.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;cat /etc/resolv.conf&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;nameserver 8.8.8.8&lt;br&gt;
nameserver 1.1.1.1&lt;/p&gt;

&lt;p&gt;If this file is wrong → DNS will fail.&lt;/p&gt;

&lt;p&gt;3️⃣ Routing — Definitions + Linux Routing + Cloud Routing&lt;br&gt;
📌 Definition: Routing&lt;/p&gt;

&lt;p&gt;Routing is the process of selecting which path a packet should take to reach its destination.&lt;/p&gt;

&lt;p&gt;Every Linux system has a routing table.&lt;/p&gt;

&lt;p&gt;✔ View routing table:&lt;br&gt;
ip route&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;default via 192.168.1.1 dev eth0&lt;br&gt;
10.0.0.0/24 dev eth0 proto kernel&lt;/p&gt;

&lt;p&gt;Definition: Default Route&lt;br&gt;
The path used when no specific route exists.&lt;/p&gt;

&lt;p&gt;✔ Add route manually (used in hybrid cloud)&lt;br&gt;
sudo ip route add 172.16.0.0/16 via 10.0.0.1&lt;/p&gt;

&lt;p&gt;🔥 Cloud Routing Example (AWS VPC)&lt;br&gt;
10.0.0.0/16   local&lt;br&gt;
0.0.0.0/0     igw-abc123         # internet access&lt;br&gt;
10.0.2.0/24   nat-xyz987         # private → internet&lt;/p&gt;

&lt;p&gt;Definitions:&lt;/p&gt;

&lt;p&gt;IGW: Internet Gateway&lt;/p&gt;

&lt;p&gt;NAT: Outbound internet for private subnets&lt;/p&gt;

&lt;p&gt;4️⃣ NAT — Definitions + SNAT + DNAT + Masquerade&lt;br&gt;
📌 Definition: NAT (Network Address Translation)&lt;/p&gt;

&lt;p&gt;Technique to modify IP addresses in packets.&lt;/p&gt;

&lt;p&gt;Used for:&lt;/p&gt;

&lt;p&gt;internet access&lt;/p&gt;

&lt;p&gt;load balancers&lt;/p&gt;

&lt;p&gt;proxies&lt;/p&gt;

&lt;p&gt;Kubernetes&lt;/p&gt;

&lt;p&gt;home routers&lt;/p&gt;

&lt;p&gt;🔹 SNAT — Source NAT&lt;/p&gt;

&lt;p&gt;Definition: Change source IP before sending to destination.&lt;/p&gt;

&lt;p&gt;Used by:&lt;/p&gt;

&lt;p&gt;AWS NAT Gateway&lt;/p&gt;

&lt;p&gt;GCP Cloud NAT&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Private: 10.0.1.10 → Public: 44.11.22.33&lt;/p&gt;

&lt;p&gt;🔹 DNAT — Destination NAT&lt;/p&gt;

&lt;p&gt;Definition: Change destination IP of incoming packets.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Public 44.22.13.7:443 → Private 10.0.1.25:443&lt;/p&gt;

&lt;p&gt;Used by:&lt;/p&gt;

&lt;p&gt;Reverse proxies&lt;/p&gt;

&lt;p&gt;Load balancers&lt;/p&gt;

&lt;p&gt;Ingress controllers&lt;/p&gt;

&lt;p&gt;🔹 Masquerading&lt;/p&gt;

&lt;p&gt;Definition: Dynamic SNAT on Linux.&lt;/p&gt;

&lt;p&gt;iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;/p&gt;

&lt;p&gt;5️⃣ Firewalls — Definitions + Linux + Cloud&lt;br&gt;
📌 Definition: Firewall&lt;/p&gt;

&lt;p&gt;A firewall controls which traffic is allowed or blocked.&lt;/p&gt;

&lt;p&gt;🔥 Linux Firewall Tools&lt;br&gt;
✔ iptables — packet-level filtering&lt;br&gt;
sudo iptables -L -n&lt;/p&gt;

&lt;p&gt;✔ ufw — simple firewall&lt;br&gt;
sudo ufw allow 8080&lt;/p&gt;

&lt;p&gt;🔥 Cloud Firewalls&lt;br&gt;
AWS&lt;/p&gt;

&lt;p&gt;Security Groups (SG): Stateful&lt;/p&gt;

&lt;p&gt;NACLs: Stateless&lt;/p&gt;

&lt;p&gt;Azure&lt;/p&gt;

&lt;p&gt;NSG&lt;/p&gt;

&lt;p&gt;GCP&lt;/p&gt;

&lt;p&gt;VPC firewall rules&lt;/p&gt;

&lt;p&gt;Example rule:&lt;/p&gt;

&lt;p&gt;Allow inbound TCP 22 from 103.94.x.x&lt;/p&gt;

&lt;p&gt;6️⃣ Networking Tools — Definitions + Practical Examples&lt;br&gt;
🔸 ping&lt;/p&gt;

&lt;p&gt;Definition: ICMP echo tool for basic reachability.&lt;/p&gt;

&lt;p&gt;ping google.com&lt;/p&gt;

&lt;p&gt;Checks:&lt;/p&gt;

&lt;p&gt;DNS&lt;/p&gt;

&lt;p&gt;ICMP&lt;/p&gt;

&lt;p&gt;packet loss&lt;/p&gt;

&lt;p&gt;latency&lt;/p&gt;

&lt;p&gt;🔸 traceroute&lt;/p&gt;

&lt;p&gt;Definition: Shows path packets take.&lt;/p&gt;

&lt;p&gt;traceroute youtube.com&lt;/p&gt;

&lt;p&gt;🔸 curl&lt;/p&gt;

&lt;p&gt;Definition: HTTP client to test APIs and servers.&lt;/p&gt;

&lt;p&gt;curl -I &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;&lt;br&gt;
curl -v &lt;a href="http://backend:8080/health" rel="noopener noreferrer"&gt;http://backend:8080/health&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔸 wget&lt;/p&gt;

&lt;p&gt;Definition: network downloader&lt;/p&gt;

&lt;p&gt;wget &lt;a href="https://example.com/file.zip" rel="noopener noreferrer"&gt;https://example.com/file.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔸 ss&lt;/p&gt;

&lt;p&gt;Definition: Shows open ports &amp;amp; sockets (modern netstat).&lt;/p&gt;

&lt;p&gt;ss -tulnp&lt;/p&gt;

&lt;p&gt;🔸 ip&lt;/p&gt;

&lt;p&gt;Definition: Modern replacement for ifconfig/route.&lt;/p&gt;

&lt;p&gt;ip a&lt;br&gt;
ip link&lt;br&gt;
ip route&lt;/p&gt;

&lt;p&gt;🔸 arp&lt;/p&gt;

&lt;p&gt;Definition: Maps IP ↔ MAC on local network.&lt;/p&gt;

&lt;p&gt;arp -a&lt;/p&gt;

&lt;p&gt;7️⃣ Real DevOps Debugging Scenarios&lt;br&gt;
✔ App cannot reach database&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;p&gt;1️⃣ DNS&lt;/p&gt;

&lt;p&gt;nslookup db.internal&lt;/p&gt;

&lt;p&gt;2️⃣ Connectivity&lt;/p&gt;

&lt;p&gt;ping db.internal&lt;/p&gt;

&lt;p&gt;3️⃣ Port&lt;/p&gt;

&lt;p&gt;ss -tulnp | grep 5432&lt;/p&gt;

&lt;p&gt;4️⃣ Firewall&lt;br&gt;
Check SG/NSG rules.&lt;/p&gt;

&lt;p&gt;✔ Port already in use&lt;br&gt;
ss -tulnp | grep 8080&lt;br&gt;
kill -9 &lt;/p&gt;

&lt;p&gt;✔ Pod cannot reach internet&lt;/p&gt;

&lt;p&gt;Check node DNS:&lt;/p&gt;

&lt;p&gt;cat /etc/resolv.conf&lt;/p&gt;

&lt;p&gt;Check routing:&lt;/p&gt;

&lt;p&gt;ip route&lt;/p&gt;

&lt;p&gt;8️⃣ Cloud Networking Summary&lt;br&gt;
AWS&lt;/p&gt;

&lt;p&gt;VPC&lt;/p&gt;

&lt;p&gt;Subnets&lt;/p&gt;

&lt;p&gt;Route Tables&lt;/p&gt;

&lt;p&gt;IGW&lt;/p&gt;

&lt;p&gt;NAT Gateway&lt;/p&gt;

&lt;p&gt;Security Groups&lt;/p&gt;

&lt;p&gt;NACLs&lt;/p&gt;

&lt;p&gt;ALB/NLB&lt;/p&gt;

&lt;p&gt;PrivateLink / VPC Endpoints&lt;/p&gt;

&lt;p&gt;Azure&lt;/p&gt;

&lt;p&gt;VNet&lt;/p&gt;

&lt;p&gt;Subnets&lt;/p&gt;

&lt;p&gt;NSG&lt;/p&gt;

&lt;p&gt;UDR&lt;/p&gt;

&lt;p&gt;Application Gateway&lt;/p&gt;

&lt;p&gt;Load Balancer&lt;/p&gt;

&lt;p&gt;GCP&lt;/p&gt;

&lt;p&gt;VPC&lt;/p&gt;

&lt;p&gt;Global Subnets&lt;/p&gt;

&lt;p&gt;Firewall Rules&lt;/p&gt;

&lt;p&gt;Cloud NAT&lt;/p&gt;

&lt;p&gt;Cloud Router&lt;/p&gt;

&lt;h2&gt;
  
  
  **Networking for DevOps — Part 3
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Load Balancers, VPC Design, Subnets, Kubernetes Networking (Ultra-Detailed)&lt;/p&gt;

&lt;p&gt;By Ashish — Learn-in-Public DevOps Journey (Week 3)&lt;/p&gt;

&lt;p&gt;Overview&lt;/p&gt;

&lt;p&gt;This part covers the backbone of modern cloud networking:&lt;/p&gt;

&lt;p&gt;Load Balancers (L4 vs L7)&lt;/p&gt;

&lt;p&gt;VPCs (AWS/GCP/Azure)&lt;/p&gt;

&lt;p&gt;Subnet types (Public, Private, Database, DMZ)&lt;/p&gt;

&lt;p&gt;Routing tables, NAT gateways, Internet gateways&lt;/p&gt;

&lt;p&gt;Kubernetes cluster networking (Pod CIDR, Service CIDR, CNI, kube-proxy)&lt;/p&gt;

&lt;p&gt;Ingress Controllers (Nginx, Traefik, AWS ALB)&lt;/p&gt;

&lt;p&gt;NodePort, ClusterIP, LoadBalancer — everything explained simply&lt;/p&gt;

&lt;p&gt;Real diagrams + real DevOps troubleshooting examples&lt;/p&gt;

&lt;p&gt;This is one of the most critical parts for DevOps engineers—you’ll use this knowledge daily in cloud, containers, and microservices.&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;p&gt;Load Balancers&lt;/p&gt;

&lt;p&gt;Definition&lt;/p&gt;

&lt;p&gt;L4 vs L7&lt;/p&gt;

&lt;p&gt;Health checks&lt;/p&gt;

&lt;p&gt;Sticky sessions&lt;/p&gt;

&lt;p&gt;SSL termination&lt;/p&gt;

&lt;p&gt;Example in AWS / GCP / Azure&lt;/p&gt;

&lt;p&gt;VPC Design for DevOps&lt;/p&gt;

&lt;p&gt;What is a VPC?&lt;/p&gt;

&lt;p&gt;CIDR selection&lt;/p&gt;

&lt;p&gt;Public, private, database subnets&lt;/p&gt;

&lt;p&gt;Internet Gateway, NAT Gateway&lt;/p&gt;

&lt;p&gt;Route tables&lt;/p&gt;

&lt;p&gt;Network ACLs vs Security Groups&lt;/p&gt;

&lt;p&gt;Subnets — Deep Dive&lt;/p&gt;

&lt;p&gt;Definition&lt;/p&gt;

&lt;p&gt;Subnet CIDR design&lt;/p&gt;

&lt;p&gt;Public vs Private vs Isolated&lt;/p&gt;

&lt;p&gt;Best practices&lt;/p&gt;

&lt;p&gt;Kubernetes Networking&lt;/p&gt;

&lt;p&gt;Pod CIDR&lt;/p&gt;

&lt;p&gt;Service CIDR&lt;/p&gt;

&lt;p&gt;CNI (Calico, Flannel, Weave, Cilium)&lt;/p&gt;

&lt;p&gt;kube-proxy&lt;/p&gt;

&lt;p&gt;Types of Services&lt;/p&gt;

&lt;p&gt;ClusterIP&lt;/p&gt;

&lt;p&gt;NodePort&lt;/p&gt;

&lt;p&gt;LoadBalancer&lt;/p&gt;

&lt;p&gt;ExternalName&lt;/p&gt;

&lt;p&gt;Ingress&lt;/p&gt;

&lt;p&gt;Network Policies&lt;/p&gt;

&lt;p&gt;Real DevOps Scenarios&lt;/p&gt;

&lt;p&gt;Troubleshooting Checklist&lt;/p&gt;

&lt;p&gt;PART 3 — Detailed Content&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Load Balancers (LB) — Foundation of Modern Distributed Systems
Definition&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A Load Balancer distributes incoming traffic across multiple backend servers to ensure:&lt;/p&gt;

&lt;p&gt;High availability&lt;/p&gt;

&lt;p&gt;Fault tolerance&lt;/p&gt;

&lt;p&gt;Scalability&lt;/p&gt;

&lt;p&gt;Better performance&lt;/p&gt;

&lt;p&gt;Used heavily in microservices, cloud apps, and Kubernetes.&lt;/p&gt;

&lt;p&gt;1.1 L4 Load Balancer (Transport Layer Load Balancer)&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
Operates at Layer 4 (TCP/UDP) in the OSI model. It routes traffic only based on IP + Port.&lt;/p&gt;

&lt;p&gt;What it does:&lt;br&gt;
It doesn't inspect HTTP headers or URLs — only TCP/UDP ports.&lt;/p&gt;

&lt;p&gt;Use Cases:&lt;/p&gt;

&lt;p&gt;Database load balancing&lt;/p&gt;

&lt;p&gt;TCP services&lt;/p&gt;

&lt;p&gt;Game servers&lt;/p&gt;

&lt;p&gt;High-speed low-latency systems&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;AWS Network Load Balancer (NLB)&lt;/p&gt;

&lt;p&gt;GCP Network TCP Load Balancer&lt;/p&gt;

&lt;p&gt;Linux ipvs&lt;/p&gt;

&lt;p&gt;Example — AWS NLB:&lt;/p&gt;

&lt;p&gt;SSL termination NOT done here&lt;/p&gt;

&lt;p&gt;Super low latency&lt;/p&gt;

&lt;p&gt;Best for millions of requests per second&lt;/p&gt;

&lt;p&gt;1.2 L7 Load Balancer (Application Layer Load Balancer)&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
Operates at Layer 7 (HTTP/HTTPS). It routes traffic by:&lt;/p&gt;

&lt;p&gt;Path&lt;/p&gt;

&lt;p&gt;URL&lt;/p&gt;

&lt;p&gt;Cookies&lt;/p&gt;

&lt;p&gt;Host header&lt;/p&gt;

&lt;p&gt;HTTP method&lt;/p&gt;

&lt;p&gt;What it does:&lt;br&gt;
Understands the HTTP protocol completely.&lt;/p&gt;

&lt;p&gt;Use Cases:&lt;/p&gt;

&lt;p&gt;Microservices (ex: /api → service A)&lt;/p&gt;

&lt;p&gt;Routing based on URL path&lt;/p&gt;

&lt;p&gt;Blue/green deployments&lt;/p&gt;

&lt;p&gt;Canary releases&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;AWS ALB&lt;/p&gt;

&lt;p&gt;GCP HTTP(S) Load Balancer&lt;/p&gt;

&lt;p&gt;Nginx / Envoy / HAProxy&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;/ -&amp;gt; frontend&lt;br&gt;
/api -&amp;gt; backend&lt;br&gt;
/auth -&amp;gt; auth-service&lt;/p&gt;

&lt;p&gt;1.3 Health Checks&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
Periodic tests by LB to check if backend is healthy.&lt;/p&gt;

&lt;p&gt;Types:&lt;/p&gt;

&lt;p&gt;TCP health check&lt;/p&gt;

&lt;p&gt;HTTP health check&lt;/p&gt;

&lt;p&gt;Command-based (K8s probes)&lt;/p&gt;

&lt;p&gt;Example (HTTP check):&lt;/p&gt;

&lt;p&gt;GET /health&lt;br&gt;
200 OK → healthy&lt;br&gt;
500 / timeout → unhealthy&lt;/p&gt;

&lt;p&gt;1.4 Sticky Sessions (Session Affinity)&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
A feature where LB routes same user to same backend server.&lt;/p&gt;

&lt;p&gt;Used for:&lt;/p&gt;

&lt;p&gt;Stateful applications&lt;/p&gt;

&lt;p&gt;Legacy monoliths&lt;/p&gt;

&lt;p&gt;Disabled in modern microservices.&lt;/p&gt;

&lt;p&gt;1.5 SSL Termination&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
LB decrypts HTTPS → HTTP between LB &amp;amp; backend.&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;p&gt;Offload CPU&lt;/p&gt;

&lt;p&gt;Central certificate management&lt;/p&gt;

&lt;p&gt;Simpler backend setup&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPC Design for DevOps (Cloud Networking Core)
Definition — VPC&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A Virtual Private Cloud (VPC) is an isolated virtual network you create inside a cloud provider.&lt;/p&gt;

&lt;p&gt;Equivalent to:&lt;/p&gt;

&lt;p&gt;Your own data center&lt;/p&gt;

&lt;p&gt;Your own IP range&lt;/p&gt;

&lt;p&gt;Your own routing, firewall, NAT, internet gateway&lt;/p&gt;

&lt;p&gt;2.1 How VPC Works (Simplified Diagram)&lt;br&gt;
+------------------ VPC (10.0.0.0/16) ------------------+&lt;br&gt;
|                                                       |&lt;br&gt;
|   Public Subnet          Private Subnet               |&lt;br&gt;
|   10.0.1.0/24            10.0.2.0/24                  |&lt;br&gt;
|                                                       |&lt;br&gt;
|  [ EC2 Web ] &amp;lt;--&amp;gt; IGW      [ EC2 App ] &amp;lt;--&amp;gt; NAT GW    |&lt;br&gt;
|                                                       |&lt;br&gt;
+-------------------------------------------------------+&lt;/p&gt;

&lt;p&gt;2.2 VPC Components (Definitions + Examples)&lt;br&gt;
✔ CIDR Block&lt;/p&gt;

&lt;p&gt;IP range of the VPC&lt;br&gt;
Example:&lt;/p&gt;

&lt;p&gt;10.0.0.0/16 → 65,536 IPs&lt;/p&gt;

&lt;p&gt;✔ Subnets&lt;/p&gt;

&lt;p&gt;Divide VPC into smaller networks.&lt;/p&gt;

&lt;p&gt;✔ Route Table&lt;/p&gt;

&lt;p&gt;Decides where traffic flows.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;0.0.0.0/0 → igw-1234   (public)&lt;br&gt;
0.0.0.0/0 → nat-5678   (private)&lt;/p&gt;

&lt;p&gt;✔ Internet Gateway (IGW)&lt;/p&gt;

&lt;p&gt;Allows public internet access.&lt;/p&gt;

&lt;p&gt;✔ NAT Gateway&lt;/p&gt;

&lt;p&gt;Allows outbound internet traffic from private subnets.&lt;/p&gt;

&lt;p&gt;✔ Security Groups&lt;/p&gt;

&lt;p&gt;Stateful firewalls.&lt;/p&gt;

&lt;p&gt;✔ NACLs&lt;/p&gt;

&lt;p&gt;Stateless subnet-level firewalls.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Subnets — Deep Explanation
Definition — Subnet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A subnet is a smaller network inside a VPC created from a larger CIDR.&lt;/p&gt;

&lt;p&gt;Subnet Types&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Public Subnet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Has route to internet via IGW&lt;br&gt;
Used for:&lt;/p&gt;

&lt;p&gt;ALB&lt;/p&gt;

&lt;p&gt;Bastion host&lt;/p&gt;

&lt;p&gt;Public-facing applications&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Private Subnet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Outbound only via NAT gateway&lt;br&gt;
Used for:&lt;/p&gt;

&lt;p&gt;Application servers&lt;/p&gt;

&lt;p&gt;Containers&lt;/p&gt;

&lt;p&gt;Microservices&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Database Subnet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Isolated, no internet&lt;br&gt;
Used for:&lt;/p&gt;

&lt;p&gt;RDS&lt;/p&gt;

&lt;p&gt;MongoDB&lt;/p&gt;

&lt;p&gt;Redis&lt;/p&gt;

&lt;p&gt;Elasticsearch&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DMZ Subnet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Used in highly secure architectures.&lt;/p&gt;

&lt;p&gt;Subnet Allocation Example (AWS Best Practice)&lt;br&gt;
Purpose Subnet  Example CIDR&lt;br&gt;
Public  2 subnets   10.0.1.0/24, 10.0.2.0/24&lt;br&gt;
Private 2 subnets   10.0.3.0/24, 10.0.4.0/24&lt;br&gt;
DB  2 subnets   10.0.5.0/24, 10.0.6.0/24&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kubernetes Networking (The Heart of Cloud-Native)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kubernetes networking is where 90% DevOps engineers struggle.&lt;/p&gt;

&lt;p&gt;Let’s make it simple.&lt;/p&gt;

&lt;p&gt;4.1 Pod Networking (Pod CIDR)&lt;br&gt;
Definition&lt;/p&gt;

&lt;p&gt;Each pod gets its own IP address.&lt;/p&gt;

&lt;p&gt;Requirement&lt;/p&gt;

&lt;p&gt;Every pod must communicate with every other pod without NAT.&lt;/p&gt;

&lt;p&gt;Example Pod CIDR&lt;br&gt;
10.244.0.0/16 — Flannel&lt;br&gt;
192.168.0.0/16 — Calico&lt;/p&gt;

&lt;p&gt;Important Command:&lt;br&gt;
kubectl exec -it pod -- ip a&lt;/p&gt;

&lt;p&gt;4.2 CNI — Container Network Interface&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
Plugin responsible for creating pod networks.&lt;/p&gt;

&lt;p&gt;Popular CNIs:&lt;/p&gt;

&lt;p&gt;Flannel (simple, overlay)&lt;/p&gt;

&lt;p&gt;Calico (L3 routing + Network Policies)&lt;/p&gt;

&lt;p&gt;Weave&lt;/p&gt;

&lt;p&gt;Cilium (eBPF — fastest)&lt;/p&gt;

&lt;p&gt;4.3 Service Networking (Service CIDR)&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
Service abstracts pods behind stable virtual IPs.&lt;/p&gt;

&lt;p&gt;Example CIDR:&lt;/p&gt;

&lt;p&gt;10.96.0.0/12  (default in kubeadm)&lt;/p&gt;

&lt;p&gt;4.4 kube-proxy&lt;/p&gt;

&lt;p&gt;What it does:&lt;br&gt;
Implements service load balancing via:&lt;/p&gt;

&lt;p&gt;iptables (older)&lt;/p&gt;

&lt;p&gt;ipvs (faster, production-grade)&lt;/p&gt;

&lt;p&gt;4.5 Kubernetes Service Types&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ClusterIP (default)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only accessible inside the cluster.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;type: ClusterIP&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;NodePort&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Exposes service on each node’s port (30000–32767).&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;type: NodePort&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LoadBalancer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cloud LB creates automatically.&lt;/p&gt;

&lt;p&gt;Used in AWS/GCP/Azure.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ExternalName&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;DNS CNAME mapping.&lt;/p&gt;

&lt;p&gt;4.6 Ingress Controller&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
L7 HTTP reverse proxy inside Kubernetes.&lt;/p&gt;

&lt;p&gt;Used for:&lt;/p&gt;

&lt;p&gt;Routing /api /auth&lt;/p&gt;

&lt;p&gt;SSL termination&lt;/p&gt;

&lt;p&gt;Multi-domain hosting&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;NGINX Ingress&lt;/p&gt;

&lt;p&gt;Traefik&lt;/p&gt;

&lt;p&gt;HAProxy&lt;/p&gt;

&lt;p&gt;AWS ALB Ingress Controller&lt;/p&gt;

&lt;p&gt;4.7 Network Policies&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
Firewall for pods.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Allow only app → db&lt;br&gt;
Deny everything else&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real DevOps Scenarios
Scenario 1 — Pod can't reach Internet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Checklist:&lt;/p&gt;

&lt;p&gt;CNI → Node routing → NAT Gateway → Route Table → IGW&lt;/p&gt;

&lt;p&gt;Scenario 2 — App behind ALB returning 502&lt;/p&gt;

&lt;p&gt;Possible:&lt;/p&gt;

&lt;p&gt;Target group health check failing&lt;/p&gt;

&lt;p&gt;Wrong security group&lt;/p&gt;

&lt;p&gt;Timeout mismatch&lt;/p&gt;

&lt;p&gt;Wrong VPC subnet&lt;/p&gt;

&lt;p&gt;Scenario 3 — Microservices unable to talk&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;Network policy&lt;br&gt;
Service CIDR&lt;br&gt;
DNS resolution&lt;br&gt;
Pod-to-pod communication&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Troubleshooting Checklist
Basic:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;kubectl get svc&lt;/p&gt;

&lt;p&gt;kubectl get ep&lt;/p&gt;

&lt;p&gt;kubectl describe svc &lt;/p&gt;

&lt;p&gt;kubectl exec -it pod -- curl :&lt;/p&gt;

&lt;p&gt;ss -tulnp&lt;/p&gt;

&lt;p&gt;ip route&lt;/p&gt;

&lt;p&gt;LB Troubleshooting:&lt;/p&gt;

&lt;p&gt;Check target health&lt;/p&gt;

&lt;p&gt;Check SG/NACLs&lt;/p&gt;

&lt;p&gt;Remove stickiness&lt;/p&gt;

&lt;p&gt;Compare timeout values&lt;/p&gt;

&lt;p&gt;VPC Troubleshooting:&lt;/p&gt;

&lt;p&gt;Validate route tables&lt;/p&gt;

&lt;p&gt;Confirm NATGW/IGW attachment&lt;/p&gt;

&lt;p&gt;Check overlapping CIDRs&lt;/p&gt;

&lt;h2&gt;
  
  
  **Networking for DevOps — Part 4
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Firewalls, Security Groups, NACLs &amp;amp; Zero-Trust (Ultra Detailed, Beginner → Advanced)&lt;/p&gt;

&lt;p&gt;By Ashish — Learn-in-Public DevOps Journey (Week 3)&lt;/p&gt;

&lt;p&gt;📘 Overview&lt;/p&gt;

&lt;p&gt;This part explains the security backbone of cloud networking:&lt;/p&gt;

&lt;p&gt;What is a firewall? (simple definition + real examples)&lt;/p&gt;

&lt;p&gt;Cloud firewalls vs Linux firewalls&lt;/p&gt;

&lt;p&gt;Security Groups (AWS/GCP/Azure) &amp;amp; why they’re stateful&lt;/p&gt;

&lt;p&gt;Network ACLs (NACLs) &amp;amp; why they’re stateless&lt;/p&gt;

&lt;p&gt;SG vs NACL — clear comparison&lt;/p&gt;

&lt;p&gt;Zero-Trust Networks&lt;/p&gt;

&lt;p&gt;Bastion Hosts &amp;amp; Jumpboxes&lt;/p&gt;

&lt;p&gt;Practical DevOps scenarios&lt;/p&gt;

&lt;p&gt;Troubleshooting rules that break production&lt;/p&gt;

&lt;p&gt;This section is designed so a complete beginner can understand, AND an advanced DevOps engineer can refine their mental model.&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;p&gt;What is a Firewall? (Definition + Types + Examples)&lt;/p&gt;

&lt;p&gt;Linux Firewalls&lt;/p&gt;

&lt;p&gt;iptables&lt;/p&gt;

&lt;p&gt;nftables&lt;/p&gt;

&lt;p&gt;ufw&lt;/p&gt;

&lt;p&gt;Cloud Security Groups (AWS/GCP/Azure)&lt;/p&gt;

&lt;p&gt;Definition&lt;/p&gt;

&lt;p&gt;How they work&lt;/p&gt;

&lt;p&gt;Inbound/Outbound rules&lt;/p&gt;

&lt;p&gt;Real examples&lt;/p&gt;

&lt;p&gt;Network ACLs (NACLs)&lt;/p&gt;

&lt;p&gt;Definition&lt;/p&gt;

&lt;p&gt;Allow/Deny rules&lt;/p&gt;

&lt;p&gt;Stateless behavior&lt;/p&gt;

&lt;p&gt;SG vs NACL (Simple Comparison)&lt;/p&gt;

&lt;p&gt;Zero-Trust Networking&lt;/p&gt;

&lt;p&gt;Bastion Hosts / Jump Servers&lt;/p&gt;

&lt;p&gt;Real DevOps Scenarios&lt;/p&gt;

&lt;p&gt;Troubleshooting Security Issues Checklist&lt;/p&gt;

&lt;p&gt;PART 4 — Full Breakdown&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is a Firewall?
Definition:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A firewall is a security system that filters inbound and outbound traffic based on predefined rules.&lt;/p&gt;

&lt;p&gt;Simple explanation:&lt;/p&gt;

&lt;p&gt;A firewall decides who is allowed in, who can go out, and which ports/protocols are allowed.&lt;/p&gt;

&lt;p&gt;1.1 Types of Firewalls&lt;br&gt;
Type    Meaning Example&lt;br&gt;
Network Firewall    Protects networks   AWS NACLs, Cisco ASA&lt;br&gt;
Host Firewall   Protects a single machine   UFW, iptables&lt;br&gt;
Application Firewall    Filters HTTP apps   WAF, Cloudflare&lt;br&gt;
Cloud Firewalls Built into cloud providers  Security Groups&lt;br&gt;
1.2 Firewall Example (Real Life)&lt;/p&gt;

&lt;p&gt;Imagine a building:&lt;/p&gt;

&lt;p&gt;Security Guard = Firewall&lt;/p&gt;

&lt;p&gt;ID Check = Authentication&lt;/p&gt;

&lt;p&gt;Permission Check = Rules&lt;/p&gt;

&lt;p&gt;Servers work the same way.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Linux Firewalls (Local Machine Level)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These run inside the server itself.&lt;/p&gt;

&lt;p&gt;2.1 iptables (Legacy but widely used)&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
iptables is a Linux firewall tool that filters packets using chains and rules.&lt;/p&gt;

&lt;p&gt;Example — Allow SSH&lt;br&gt;
iptables -A INPUT -p tcp --dport 22 -j ACCEPT&lt;/p&gt;

&lt;p&gt;Block everything else:&lt;br&gt;
iptables -A INPUT -j DROP&lt;/p&gt;

&lt;p&gt;View rules:&lt;br&gt;
iptables -L -n&lt;/p&gt;

&lt;p&gt;Used heavily in:&lt;/p&gt;

&lt;p&gt;Bare-metal servers&lt;/p&gt;

&lt;p&gt;Older Kubernetes nodes&lt;/p&gt;

&lt;p&gt;Legacy deployments&lt;/p&gt;

&lt;p&gt;2.2 nftables (Modern replacement for iptables)&lt;/p&gt;

&lt;p&gt;Definition:&lt;br&gt;
A newer, faster firewall framework that replaces iptables.&lt;/p&gt;

&lt;p&gt;View rules:&lt;/p&gt;

&lt;p&gt;nft list ruleset&lt;/p&gt;

&lt;p&gt;2.3 UFW (Uncomplicated Firewall) — Ubuntu’s Easy Firewall&lt;/p&gt;

&lt;p&gt;Enable:&lt;/p&gt;

&lt;p&gt;sudo ufw enable&lt;/p&gt;

&lt;p&gt;Allow SSH:&lt;/p&gt;

&lt;p&gt;sudo ufw allow 22&lt;/p&gt;

&lt;p&gt;Allow NGINX:&lt;/p&gt;

&lt;p&gt;sudo ufw allow 'Nginx Full'&lt;/p&gt;

&lt;p&gt;Disable:&lt;/p&gt;

&lt;p&gt;sudo ufw disable&lt;/p&gt;

&lt;p&gt;Used in Ubuntu servers for quick rule setup.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cloud Security Groups (SGs)
Definition (VERY IMPORTANT):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A Security Group (SG) is a stateful firewall attached to cloud resources like:&lt;/p&gt;

&lt;p&gt;EC2 instances&lt;/p&gt;

&lt;p&gt;Load Balancers&lt;/p&gt;

&lt;p&gt;RDS databases&lt;/p&gt;

&lt;p&gt;EKS nodes&lt;/p&gt;

&lt;p&gt;Azure VMs&lt;/p&gt;

&lt;p&gt;GCP VMs&lt;/p&gt;

&lt;p&gt;Stateful = automatically allows return traffic&lt;/p&gt;

&lt;p&gt;If inbound rule allows port 80:&lt;/p&gt;

&lt;p&gt;Response traffic automatically allowed outbound&lt;/p&gt;

&lt;p&gt;No need to create reverse rule&lt;/p&gt;

&lt;p&gt;3.1 AWS Security Group Example&lt;br&gt;
Allow inbound HTTP &amp;amp; SSH&lt;br&gt;
Inbound:&lt;br&gt;
80/tcp → 0.0.0.0/0&lt;br&gt;&lt;br&gt;
22/tcp → My-IP&lt;/p&gt;

&lt;p&gt;Outbound (default allow)&lt;br&gt;
0.0.0.0/0&lt;/p&gt;

&lt;p&gt;3.2 Azure Network Security Group (NSG)&lt;/p&gt;

&lt;p&gt;Same concept as AWS SGs, different naming.&lt;/p&gt;

&lt;p&gt;3.3 GCP Firewall Rules&lt;/p&gt;

&lt;p&gt;GCP uses project-level firewall rules, not instance-level.&lt;/p&gt;

&lt;p&gt;3.4 Security Group Use Cases&lt;br&gt;
✔ Allow ALB → EC2&lt;br&gt;
SG-ALB → SG-EC2: 80&lt;/p&gt;

&lt;p&gt;✔ Allow App → Database&lt;br&gt;
SG-APP → SG-DB: 3306&lt;/p&gt;

&lt;p&gt;✔ Allow Bastion → Private EC2&lt;br&gt;
SG-BASTION → SG-PRIVATE: 22&lt;/p&gt;

&lt;p&gt;✔ Block the world, allow private communication&lt;br&gt;
10.0.0.0/16 only&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Network ACLs (NACLs) — Subnet Level Firewall
Definition:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A NACL is a stateless firewall that controls traffic at the subnet level.&lt;/p&gt;

&lt;p&gt;Stateless = NO automatic return traffic&lt;/p&gt;

&lt;p&gt;If you allow inbound 80:&lt;br&gt;
➡ You must manually allow outbound 80.&lt;/p&gt;

&lt;p&gt;4.1 NACL Example&lt;br&gt;
Allow HTTP:&lt;br&gt;
Inbound:&lt;br&gt;
80 ALLOW&lt;br&gt;&lt;br&gt;
Outbound:&lt;br&gt;
80 ALLOW  &lt;/p&gt;

&lt;p&gt;Deny everything else:&lt;br&gt;
Inbound:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DENY
Outbound:&lt;/li&gt;
&lt;li&gt;DENY&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Used for:&lt;/p&gt;

&lt;p&gt;Extra protection&lt;/p&gt;

&lt;p&gt;Secure subnets&lt;/p&gt;

&lt;p&gt;Blocking malicious CIDRs&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Security Group vs NACL (Simple Chart)
Feature SG  NACL
Level   Instance    Subnet
Stateful    ✔ Yes ✖ No
Default All deny    All allow
Best use    App-level control   Subnet-level restriction
Supports deny?  No  Yes
Complexity  Simple  More complex&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rule:&lt;/p&gt;

&lt;p&gt;Use Security Groups for 90% of cases.&lt;br&gt;
Use NACLs only when you must deny CIDRs or need subnet-wide rules.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Zero-Trust Networking — Cloud Security Standard
Definition&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Zero-Trust means:&lt;/p&gt;

&lt;p&gt;Trust no one, not even internal networks&lt;/p&gt;

&lt;p&gt;Every connection must be authenticated&lt;/p&gt;

&lt;p&gt;Least privilege access always&lt;/p&gt;

&lt;p&gt;No implicit trust even inside VPC&lt;/p&gt;

&lt;p&gt;Real applications:&lt;/p&gt;

&lt;p&gt;AWS IAM roles&lt;/p&gt;

&lt;p&gt;Pod identity in Kubernetes&lt;/p&gt;

&lt;p&gt;Service mesh (Istio, Linkerd)&lt;/p&gt;

&lt;p&gt;mTLS (mutual TLS)&lt;/p&gt;

&lt;p&gt;Zero trust is the future of cloud security.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bastion Hosts (Jump Servers)
Definition:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A server in public subnet used ONLY to SSH into private subnet servers.&lt;/p&gt;

&lt;p&gt;Diagram:&lt;/p&gt;

&lt;p&gt;Internet → Bastion Host → Private EC2&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Secure 22/tcp access&lt;/p&gt;

&lt;p&gt;No need to expose private instances to public&lt;/p&gt;

&lt;p&gt;Can restrict SSH to your IP only&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real DevOps Scenarios
✔ Scenario 1 — App not accessible on port 8080&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Troubleshooting:&lt;/p&gt;

&lt;p&gt;SG inbound 8080 open?&lt;/p&gt;

&lt;p&gt;SG outbound allowed?&lt;/p&gt;

&lt;p&gt;NACL inbound/outbound both allowed?&lt;/p&gt;

&lt;p&gt;App actually listening? (ss -tulnp)&lt;/p&gt;

&lt;p&gt;Route table correct?&lt;/p&gt;

&lt;p&gt;Service behind LB passing health checks?&lt;/p&gt;

&lt;p&gt;✔ Scenario 2 — RDS cannot be accessed from EC2&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;SG-EC2 → SG-RDS : 3306&lt;br&gt;
Same VPC?&lt;br&gt;
Correct subnet routing?&lt;br&gt;
No NACL deny rule?&lt;/p&gt;

&lt;p&gt;✔ Scenario 3 — Kubernetes LoadBalancer stuck in “Pending”&lt;/p&gt;

&lt;p&gt;Possible issues:&lt;/p&gt;

&lt;p&gt;No public subnet tagged&lt;/p&gt;

&lt;p&gt;Firewall blocking 30000–32767&lt;/p&gt;

&lt;p&gt;Missing cloud controller&lt;/p&gt;

&lt;p&gt;NACL blocking ports&lt;/p&gt;

&lt;p&gt;✔ Scenario 4 — Private subnet EC2 has no internet&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;NAT gateway exists&lt;/p&gt;

&lt;p&gt;Route table has 0.0.0.0/0 → NAT&lt;/p&gt;

&lt;p&gt;NACL outbound allow&lt;/p&gt;

&lt;p&gt;SG outbound allow&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Troubleshooting Checklist
🔍 For Security Group Issues&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check explicit inbound allow&lt;/p&gt;

&lt;p&gt;Check outbound (rare but important)&lt;/p&gt;

&lt;p&gt;Check instance-level firewall (iptables)&lt;/p&gt;

&lt;p&gt;Check if LB → target mapping exists&lt;/p&gt;

&lt;p&gt;🔍 For NACL Issues&lt;/p&gt;

&lt;p&gt;Must allow BOTH ways&lt;/p&gt;

&lt;p&gt;Look for DENY rules&lt;/p&gt;

&lt;p&gt;Confirm correct subnet association&lt;/p&gt;

&lt;p&gt;🔍 For Linux host issues&lt;br&gt;
sudo ss -tulnp&lt;br&gt;
sudo ufw status&lt;br&gt;
sudo iptables -L -n&lt;/p&gt;

&lt;p&gt;🔍 For Kubernetes issues&lt;br&gt;
kubectl describe svc&lt;br&gt;
kubectl describe ingress&lt;br&gt;
kubectl get endpoints&lt;/p&gt;

&lt;h2&gt;
  
  
  **Networking for DevOps — Part 5
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Monitoring, Observability &amp;amp; Packet Captures (tcpdump, ss, iperf, Wireshark)&lt;/p&gt;

&lt;p&gt;By Ashish — Learn-in-Public DevOps Journey (Week 3)&lt;/p&gt;

&lt;p&gt;📘 Overview&lt;/p&gt;

&lt;p&gt;In modern DevOps, “networking” isn’t just configuring subnets and IPs — it’s being able to observe, measure, debug, and trace what’s happening inside the network.&lt;/p&gt;

&lt;p&gt;This chapter covers the real debugging tools used in Cloud + Linux + Containers + Kubernetes + Production SRE environments:&lt;/p&gt;

&lt;p&gt;You will learn:&lt;/p&gt;

&lt;p&gt;What observability means in networking&lt;/p&gt;

&lt;p&gt;Key metrics: latency, throughput, jitter, RTT, packet loss&lt;/p&gt;

&lt;p&gt;Network debugging tools:&lt;/p&gt;

&lt;p&gt;ping, traceroute, mtr&lt;/p&gt;

&lt;p&gt;ss, netstat&lt;/p&gt;

&lt;p&gt;iftop, nload, iperf3&lt;/p&gt;

&lt;p&gt;Packet capture tools (tcpdump, tshark, Wireshark)&lt;/p&gt;

&lt;p&gt;Deep dive into tcpdump filters with examples&lt;/p&gt;

&lt;p&gt;Capturing packets inside containers (Docker/K8s)&lt;/p&gt;

&lt;p&gt;Real DevOps troubleshooting scenarios&lt;/p&gt;

&lt;p&gt;When to use which tool (flow diagram)&lt;/p&gt;

&lt;p&gt;This is a long chapter — but it will make you significantly better than an average DevOps engineer.&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;p&gt;What is Observability in Networking?&lt;/p&gt;

&lt;p&gt;Key Network Metrics You Must Understand&lt;/p&gt;

&lt;p&gt;Basic Network Monitoring Tools&lt;/p&gt;

&lt;p&gt;Real-Time Bandwidth Monitoring Tools&lt;/p&gt;

&lt;p&gt;Connection &amp;amp; Socket Monitoring&lt;/p&gt;

&lt;p&gt;Packet Captures with tcpdump&lt;/p&gt;

&lt;p&gt;Wireshark &amp;amp; tshark (GUI + CLI packet analysis)&lt;/p&gt;

&lt;p&gt;Packet Captures Inside Docker &amp;amp; Kubernetes&lt;/p&gt;

&lt;p&gt;Real DevOps Troubleshooting Case Studies&lt;/p&gt;

&lt;p&gt;Tool Selection Cheat-Sheet&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Observability in Networking?
Definition:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Network observability is the ability to see, measure, and understand network behavior in real-time and retroactively.&lt;/p&gt;

&lt;p&gt;Why DevOps needs it:&lt;/p&gt;

&lt;p&gt;Diagnose slow applications&lt;/p&gt;

&lt;p&gt;Debug API failures&lt;/p&gt;

&lt;p&gt;Fix DNS issues&lt;/p&gt;

&lt;p&gt;Check load balancer routing&lt;/p&gt;

&lt;p&gt;Investigate packet drops&lt;/p&gt;

&lt;p&gt;Ensure firewall/NACL rules aren’t blocking traffic&lt;/p&gt;

&lt;p&gt;Confirm microservices are communicating properly&lt;/p&gt;

&lt;p&gt;Observability tools fall into three categories:&lt;/p&gt;

&lt;p&gt;Category    Tools   Purpose&lt;br&gt;
Monitoring  ping, traceroute, netstat, ss   Check status &amp;amp; health&lt;br&gt;
Metrics iftop, nload, iperf3    Bandwidth, throughput&lt;br&gt;
Packet Capture  tcpdump, Wireshark  Deep inspection&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Key Network Metrics for DevOps/SRE&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are the fundamentals behind all networking analysis.&lt;/p&gt;

&lt;p&gt;2.1 Latency&lt;/p&gt;

&lt;p&gt;Time taken for a packet to reach the destination.&lt;/p&gt;

&lt;p&gt;Measured using:&lt;/p&gt;

&lt;p&gt;ping google.com&lt;/p&gt;

&lt;p&gt;2.2 Packet Loss&lt;/p&gt;

&lt;p&gt;% of packets that never reach the server.&lt;/p&gt;

&lt;p&gt;In mtr:&lt;/p&gt;

&lt;p&gt;Loss% column&lt;/p&gt;

&lt;p&gt;2.3 Jitter&lt;/p&gt;

&lt;p&gt;Variation in latency — extremely important for VoIP, video, real-time apps.&lt;/p&gt;

&lt;p&gt;2.4 Throughput&lt;/p&gt;

&lt;p&gt;Amount of data transferred per second.&lt;/p&gt;

&lt;p&gt;Measured using:&lt;/p&gt;

&lt;p&gt;iperf3 -s&lt;br&gt;
iperf3 -c server-ip&lt;/p&gt;

&lt;p&gt;2.5 Bandwidth&lt;/p&gt;

&lt;p&gt;Maximum theoretical data rate of a network link.&lt;/p&gt;

&lt;p&gt;2.6 RTT (Round Trip Time)&lt;/p&gt;

&lt;p&gt;Time taken for a request to go and return.&lt;/p&gt;

&lt;p&gt;Shown in ping:&lt;/p&gt;

&lt;p&gt;rtt min/avg/max/mdev&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Basic Network Monitoring Tools (Every DevOps Must Know)
3.1 ping — Latency + Reachability Test
Definition:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sends ICMP echo requests to test connection and latency.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;ping google.com&lt;/p&gt;

&lt;p&gt;Uses:&lt;/p&gt;

&lt;p&gt;DNS test&lt;/p&gt;

&lt;p&gt;Reachability test&lt;/p&gt;

&lt;p&gt;Basic latency check&lt;/p&gt;

&lt;p&gt;3.2 traceroute — Path Trace&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Shows each hop between you and the target.&lt;/p&gt;

&lt;p&gt;traceroute google.com&lt;/p&gt;

&lt;p&gt;3.3 mtr — ping + traceroute combined (best tool)&lt;br&gt;
mtr google.com&lt;/p&gt;

&lt;p&gt;Shows:&lt;/p&gt;

&lt;p&gt;Packet loss&lt;/p&gt;

&lt;p&gt;Latency per hop&lt;/p&gt;

&lt;p&gt;Real-time route changes&lt;/p&gt;

&lt;p&gt;Most useful tool for network debugging.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time Bandwidth Monitoring Tools
4.1 iftop — Real-time bandwidth “top”
sudo iftop&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Shows:&lt;/p&gt;

&lt;p&gt;Live traffic between IPs&lt;/p&gt;

&lt;p&gt;Highest bandwidth users&lt;/p&gt;

&lt;p&gt;4.2 nload — Live incoming/outgoing traffic graph&lt;br&gt;
nload&lt;/p&gt;

&lt;p&gt;Great for:&lt;/p&gt;

&lt;p&gt;Debugging sudden spikes&lt;/p&gt;

&lt;p&gt;Monitoring server saturation&lt;/p&gt;

&lt;p&gt;4.3 iperf3 — Network speed testing&lt;/p&gt;

&lt;p&gt;Server:&lt;/p&gt;

&lt;p&gt;iperf3 -s&lt;/p&gt;

&lt;p&gt;Client:&lt;/p&gt;

&lt;p&gt;iperf3 -c &lt;/p&gt;

&lt;p&gt;Useful for:&lt;/p&gt;

&lt;p&gt;Testing between cloud regions&lt;/p&gt;

&lt;p&gt;Benchmarking VPNs&lt;/p&gt;

&lt;p&gt;Validating network throughput&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connection &amp;amp; Socket Monitoring
5.1 ss — Modern socket investigation tool&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Definition:&lt;br&gt;
Replaces netstat, faster &amp;amp; more detailed.&lt;/p&gt;

&lt;p&gt;Show listening ports:&lt;/p&gt;

&lt;p&gt;ss -tulnp&lt;/p&gt;

&lt;p&gt;Find process using port:&lt;/p&gt;

&lt;p&gt;ss -tulnp | grep 8080&lt;/p&gt;

&lt;p&gt;5.2 netstat — Legacy tool&lt;br&gt;
netstat -tulnp&lt;/p&gt;

&lt;p&gt;Still used in many old systems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Packet Captures with tcpdump (MOST IMPORTANT)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Packet capture = the only way to see exactly what is happening on the wire.&lt;/p&gt;

&lt;p&gt;Definition:&lt;/p&gt;

&lt;p&gt;tcpdump captures and displays packet-level network traffic.&lt;/p&gt;

&lt;p&gt;6.1 Basic Capture&lt;/p&gt;

&lt;p&gt;Capture all traffic:&lt;/p&gt;

&lt;p&gt;sudo tcpdump -i eth0&lt;/p&gt;

&lt;p&gt;Write to file:&lt;/p&gt;

&lt;p&gt;sudo tcpdump -i eth0 -w capture.pcap&lt;/p&gt;

&lt;p&gt;Stop after 100 packets:&lt;/p&gt;

&lt;p&gt;sudo tcpdump -c 100&lt;/p&gt;

&lt;p&gt;6.2 Filters (Critical for DevOps)&lt;br&gt;
Capture only HTTP traffic:&lt;br&gt;
sudo tcpdump -i eth0 port 80&lt;/p&gt;

&lt;p&gt;Capture only SSL/TLS (HTTPS):&lt;br&gt;
sudo tcpdump port 443&lt;/p&gt;

&lt;p&gt;Capture specific IP:&lt;br&gt;
sudo tcpdump host 10.0.1.15&lt;/p&gt;

&lt;p&gt;Capture traffic between two hosts:&lt;br&gt;
sudo tcpdump src 10.0.1.15 and dst 10.0.1.20&lt;/p&gt;

&lt;p&gt;Capture DNS traffic:&lt;br&gt;
sudo tcpdump port 53&lt;/p&gt;

&lt;p&gt;Capture only SYN packets (TCP handshake):&lt;br&gt;
tcpdump 'tcp[tcpflags] &amp;amp; tcp-syn != 0'&lt;/p&gt;

&lt;p&gt;6.3 Analyse the pcap file in Wireshark&lt;/p&gt;

&lt;p&gt;Open file:&lt;/p&gt;

&lt;p&gt;File → Open → capture.pcap&lt;/p&gt;

&lt;p&gt;Wireshark allows inspection of:&lt;/p&gt;

&lt;p&gt;HTTP requests&lt;/p&gt;

&lt;p&gt;TLS handshakes&lt;/p&gt;

&lt;p&gt;DNS queries&lt;/p&gt;

&lt;p&gt;Retransmissions&lt;/p&gt;

&lt;p&gt;Packet loss&lt;/p&gt;

&lt;p&gt;TCP window issues&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wireshark &amp;amp; tshark (GUI &amp;amp; CLI)
7.1 Wireshark (GUI)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Used for:&lt;/p&gt;

&lt;p&gt;Deep packet inspection&lt;/p&gt;

&lt;p&gt;Identifying slow backend services&lt;/p&gt;

&lt;p&gt;Seeing encrypted vs unencrypted traffic&lt;/p&gt;

&lt;p&gt;Troubleshooting TLS failures&lt;/p&gt;

&lt;p&gt;7.2 tshark (CLI version of Wireshark)&lt;/p&gt;

&lt;p&gt;Capture DNS traffic:&lt;/p&gt;

&lt;p&gt;tshark -f "port 53"&lt;/p&gt;

&lt;p&gt;List available interfaces:&lt;/p&gt;

&lt;p&gt;tshark -D&lt;/p&gt;

&lt;p&gt;Filter HTTP requests:&lt;/p&gt;

&lt;p&gt;tshark -Y http&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Packet Captures in Docker &amp;amp; Kubernetes
8.1 Capture packets in a Docker container&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Find container PID:&lt;/p&gt;

&lt;p&gt;pid=$(docker inspect -f '{{.State.Pid}}' container-name)&lt;/p&gt;

&lt;p&gt;Capture:&lt;/p&gt;

&lt;p&gt;sudo nsenter -t $pid -n tcpdump -i eth0 -w container.pcap&lt;/p&gt;

&lt;p&gt;8.2 Capture packets in Kubernetes Pod&lt;/p&gt;

&lt;p&gt;Get pod:&lt;/p&gt;

&lt;p&gt;kubectl get po -A&lt;/p&gt;

&lt;p&gt;Exec tcpdump:&lt;/p&gt;

&lt;p&gt;kubectl exec -it pod-name -- tcpdump -i eth0 -w pod.pcap&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real DevOps Troubleshooting Case Studies
Case 1: Application is slow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;mtr&lt;br&gt;
ss -tulnp&lt;br&gt;
iftop&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;Packet loss?&lt;/p&gt;

&lt;p&gt;High bandwidth consumption?&lt;/p&gt;

&lt;p&gt;Port conflict?&lt;/p&gt;

&lt;p&gt;Case 2: DNS Issues&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;tcpdump port 53&lt;br&gt;
dig +trace domain.com&lt;/p&gt;

&lt;p&gt;Symptoms:&lt;/p&gt;

&lt;p&gt;Slow API response&lt;/p&gt;

&lt;p&gt;Curl fails randomly&lt;/p&gt;

&lt;p&gt;Case 3: API unreachable from Kubernetes&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;kubectl exec -- curl&lt;br&gt;
tcpdump from node&lt;br&gt;
ss -tulnp&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;p&gt;Firewall rules&lt;/p&gt;

&lt;p&gt;Service endpoints missing&lt;/p&gt;

&lt;p&gt;Wrong DNS names&lt;/p&gt;

&lt;p&gt;Case 4: Load Balancer Health Checks Failing&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;tcpdump port 80&lt;br&gt;
curl -I localhost&lt;br&gt;
ss -tulnp&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tool Selection Cheat-Sheet
Problem Tool
Slow network    mtr, iftop
Port blocked    ss, tcpdump
API unreachable curl, tcpdump
DNS issues  dig, tcpdump
Bandwidth high  iftop, nload
TCP handshake failing   tcpdump
Kubernetes network down kubectl exec, tcpdump&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  **Networking for DevOps — Part 6
&lt;/h2&gt;

&lt;p&gt;SDLC + DevOps Architecture (Ultra-Detailed Week 3 Final Notes)**&lt;/p&gt;

&lt;p&gt;By Ashish — Learn-in-Public DevOps Journey&lt;/p&gt;

&lt;p&gt;📘 Why This Part Matters&lt;/p&gt;

&lt;p&gt;As a DevOps engineer, your entire job sits between:&lt;/p&gt;

&lt;p&gt;SDLC (Software Development Life Cycle)&lt;/p&gt;

&lt;p&gt;→ The complete process of building software from idea → production → maintenance.&lt;/p&gt;

&lt;p&gt;DevOps Architecture&lt;/p&gt;

&lt;p&gt;→ The tools, pipelines, environments, networks, and automation that turn SDLC into real deployments.&lt;/p&gt;

&lt;p&gt;To build, deploy, scale, troubleshoot, and monitor modern cloud systems, you must deeply understand:&lt;/p&gt;

&lt;p&gt;What happens in each SDLC stage&lt;/p&gt;

&lt;p&gt;Where DevOps fits&lt;/p&gt;

&lt;p&gt;How CI/CD automates the flow&lt;/p&gt;

&lt;p&gt;How networking connects everything&lt;/p&gt;

&lt;p&gt;How cloud-native architecture changes SDLC&lt;/p&gt;

&lt;p&gt;How security integrates (DevSecOps)&lt;/p&gt;

&lt;p&gt;How SRE extends DevOps in production&lt;/p&gt;

&lt;p&gt;This part connects everything from Week 1 (Linux), Week 2 (Shell Scripting), and Week 3 (Networking) into one complete architecture understanding.&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;p&gt;What is SDLC — DevOps Perspective&lt;/p&gt;

&lt;p&gt;Waterfall SDLC vs DevOps SDLC&lt;/p&gt;

&lt;p&gt;Detailed Breakdown of Each SDLC Phase&lt;/p&gt;

&lt;p&gt;DevOps Architecture: Fully Explained&lt;/p&gt;

&lt;p&gt;CI/CD Pipeline Architecture (Deep Dive)&lt;/p&gt;

&lt;p&gt;Multi-Environment Flow (Dev → Test → Stage → Prod)&lt;/p&gt;

&lt;p&gt;GitOps, IaC &amp;amp; Cloud-Native DevOps&lt;/p&gt;

&lt;p&gt;DevSecOps (Security in Every Stage)&lt;/p&gt;

&lt;p&gt;SRE vs DevOps&lt;/p&gt;

&lt;p&gt;End-to-End DevOps Architecture Diagram&lt;/p&gt;

&lt;p&gt;Real-World DevOps Pipeline Example&lt;/p&gt;

&lt;p&gt;Week 3 Summary + Completion&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SDLC (Software Development Life Cycle) — DevOps View
📌 Definition&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SDLC is the complete roadmap for building and maintaining software.&lt;br&gt;
It defines how software is:&lt;/p&gt;

&lt;p&gt;Planned&lt;/p&gt;

&lt;p&gt;Developed&lt;/p&gt;

&lt;p&gt;Tested&lt;/p&gt;

&lt;p&gt;Deployed&lt;/p&gt;

&lt;p&gt;Released&lt;/p&gt;

&lt;p&gt;Maintained&lt;/p&gt;

&lt;p&gt;Traditional SDLC was designed for older systems where deployments happened once every few months.&lt;/p&gt;

&lt;p&gt;⚠️ But DevOps changed SDLC completely.&lt;/p&gt;

&lt;p&gt;Today companies like Netflix, Amazon, Meta ship hundreds of deployments per day — possible only because SDLC evolved through DevOps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Classical SDLC vs DevOps SDLC
Waterfall SDLC (Old Model)
Requirements → Design → Coding → Testing → Deployment → Maintenance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Problems:&lt;/p&gt;

&lt;p&gt;Dev &amp;amp; Ops are separate&lt;/p&gt;

&lt;p&gt;Testing happens too late&lt;/p&gt;

&lt;p&gt;Deployments are manual&lt;/p&gt;

&lt;p&gt;Feedback comes after weeks/months&lt;/p&gt;

&lt;p&gt;No automation&lt;/p&gt;

&lt;p&gt;High risk, slow releases&lt;/p&gt;

&lt;p&gt;DevOps SDLC (Modern Model)&lt;br&gt;
PLAN → CODE → BUILD → TEST → RELEASE → DEPLOY → OPERATE → MONITOR → FEEDBACK → PLAN&lt;/p&gt;

&lt;p&gt;All stages run continuously and automatically.&lt;/p&gt;

&lt;p&gt;Key upgrades:&lt;/p&gt;

&lt;p&gt;CI/CD automates build, test, deploy&lt;/p&gt;

&lt;p&gt;Cloud infra makes deployments scalable&lt;/p&gt;

&lt;p&gt;IaC (Terraform/Ansible) automates infra&lt;/p&gt;

&lt;p&gt;Monitoring gives real-time feedback&lt;/p&gt;

&lt;p&gt;Dev &amp;amp; Ops collaborate closely&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deep Dive: Each SDLC Stage with DevOps Context&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s break down each phase the way DevOps teams work in real companies.&lt;/p&gt;

&lt;p&gt;3.1 PLAN — Product Requirements + Architecture&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;The stage where teams define what to build and how to design the system.&lt;/p&gt;

&lt;p&gt;In DevOps:&lt;/p&gt;

&lt;p&gt;DevOps teams participate to:&lt;/p&gt;

&lt;p&gt;Define infra needs&lt;/p&gt;

&lt;p&gt;Plan environments (Dev/Test/Staging/Prod)&lt;/p&gt;

&lt;p&gt;Estimate cloud resources (cost optimization)&lt;/p&gt;

&lt;p&gt;Decide CI/CD tools&lt;/p&gt;

&lt;p&gt;Decide branching strategy&lt;/p&gt;

&lt;p&gt;Plan monitoring &amp;amp; logging&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Jira&lt;/p&gt;

&lt;p&gt;Notion&lt;/p&gt;

&lt;p&gt;Confluence&lt;/p&gt;

&lt;p&gt;Lucidchart&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;A team plans a microservices-based eCommerce backend on AWS using:&lt;/p&gt;

&lt;p&gt;EC2 / ECS / Kubernetes&lt;/p&gt;

&lt;p&gt;RDS database&lt;/p&gt;

&lt;p&gt;S3 storage&lt;/p&gt;

&lt;p&gt;CloudFront CDN&lt;/p&gt;

&lt;p&gt;Terraform for IaC&lt;/p&gt;

&lt;p&gt;Jenkins + GitHub Actions for CI/CD&lt;/p&gt;

&lt;p&gt;3.2 CODE — Version Control + Collaboration&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Writing the source code + storing it in version control.&lt;/p&gt;

&lt;p&gt;DevOps Responsibilities:&lt;/p&gt;

&lt;p&gt;Set up Git repo&lt;/p&gt;

&lt;p&gt;Enforce branch protection&lt;/p&gt;

&lt;p&gt;Implement Git branching strategy&lt;/p&gt;

&lt;p&gt;GitFlow&lt;/p&gt;

&lt;p&gt;Trunk-based development&lt;/p&gt;

&lt;p&gt;Code scanning for vulnerabilities&lt;/p&gt;

&lt;p&gt;Pre-commit hooks&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Git&lt;/p&gt;

&lt;p&gt;GitHub / GitLab / Bitbucket&lt;/p&gt;

&lt;p&gt;Real example:&lt;br&gt;
feature/login-api → pull request → code review → merge → CI pipeline starts&lt;/p&gt;

&lt;p&gt;3.3 BUILD — Compilation + Packaging + Containerization&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Build takes raw code → converts into executable artifact (binary, jar, image).&lt;/p&gt;

&lt;p&gt;DevOps Tasks:&lt;/p&gt;

&lt;p&gt;Create Dockerfiles&lt;/p&gt;

&lt;p&gt;Optimize build caching&lt;/p&gt;

&lt;p&gt;Automate builds in CI&lt;/p&gt;

&lt;p&gt;Create repeatable builds&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Maven, Gradle (Java)&lt;/p&gt;

&lt;p&gt;npm/yarn (Node)&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
docker build -t webshop/auth-service:v2 .&lt;/p&gt;

&lt;p&gt;3.4 TEST — Automated Quality Gates&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Run automated tests on every code change.&lt;/p&gt;

&lt;p&gt;DevOps Tasks:&lt;/p&gt;

&lt;p&gt;Add test stages to CI&lt;/p&gt;

&lt;p&gt;Fail pipeline if tests fail&lt;/p&gt;

&lt;p&gt;Run parallel tests&lt;/p&gt;

&lt;p&gt;Add security scans&lt;/p&gt;

&lt;p&gt;Add code-quality analysis (SonarQube)&lt;/p&gt;

&lt;p&gt;Example test types:&lt;/p&gt;

&lt;p&gt;Unit Tests&lt;/p&gt;

&lt;p&gt;Integration Tests&lt;/p&gt;

&lt;p&gt;API Tests&lt;/p&gt;

&lt;p&gt;Load testing&lt;/p&gt;

&lt;p&gt;Static analysis&lt;/p&gt;

&lt;p&gt;3.5 RELEASE — Versioning + Packaging&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Preparing artifacts to be stored or deployed.&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Docker Registry&lt;/p&gt;

&lt;p&gt;Github Releases&lt;/p&gt;

&lt;p&gt;JFrog Artifactory&lt;/p&gt;

&lt;p&gt;AWS ECR / GCR / ACR&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
docker push /auth-service:v2&lt;/p&gt;

&lt;p&gt;3.6 DEPLOY — Delivering Software to Cloud/Kubernetes&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Deploying the artifact to a target environment.&lt;/p&gt;

&lt;p&gt;DevOps Responsibilities:&lt;/p&gt;

&lt;p&gt;Manage zero-downtime rollouts&lt;/p&gt;

&lt;p&gt;Implement deployment strategies&lt;/p&gt;

&lt;p&gt;Rolling&lt;/p&gt;

&lt;p&gt;Blue/Green&lt;/p&gt;

&lt;p&gt;Canary&lt;/p&gt;

&lt;p&gt;Database migrations&lt;/p&gt;

&lt;p&gt;Infrastructure provisioning&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Terraform&lt;/p&gt;

&lt;p&gt;Ansible&lt;/p&gt;

&lt;p&gt;ArgoCD&lt;/p&gt;

&lt;p&gt;Jenkins&lt;/p&gt;

&lt;p&gt;Kubernetes&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
helm upgrade --install auth-service ./helm-chart&lt;/p&gt;

&lt;p&gt;3.7 OPERATE — Running the System in Production&lt;/p&gt;

&lt;p&gt;DevOps ensures:&lt;/p&gt;

&lt;p&gt;Server uptime&lt;/p&gt;

&lt;p&gt;Container orchestration (K8s)&lt;/p&gt;

&lt;p&gt;Load balancers&lt;/p&gt;

&lt;p&gt;Firewall rules&lt;/p&gt;

&lt;p&gt;Auto-scaling&lt;/p&gt;

&lt;p&gt;Backup and DR&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;AWS EC2 / ECS / EKS&lt;/p&gt;

&lt;p&gt;Azure AKS&lt;/p&gt;

&lt;p&gt;GCP GKE&lt;/p&gt;

&lt;p&gt;3.8 MONITOR — Observability + Insights&lt;br&gt;
Definition:&lt;/p&gt;

&lt;p&gt;Collect performance data + logs + alerts.&lt;/p&gt;

&lt;p&gt;DevOps Tasks:&lt;/p&gt;

&lt;p&gt;Set SLIs/SLOs&lt;/p&gt;

&lt;p&gt;Configure dashboards&lt;/p&gt;

&lt;p&gt;Create alert rules&lt;/p&gt;

&lt;p&gt;Analyze logs&lt;/p&gt;

&lt;p&gt;Find root causes&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Prometheus&lt;/p&gt;

&lt;p&gt;Grafana&lt;/p&gt;

&lt;p&gt;Loki&lt;/p&gt;

&lt;p&gt;ELK Stack&lt;/p&gt;

&lt;p&gt;CloudWatch&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Alert if CPU &amp;gt; 85%&lt;/p&gt;

&lt;p&gt;Alert if API latency &amp;gt; 200ms&lt;/p&gt;

&lt;p&gt;Alert if pods crash repeatedly&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DevOps Architecture — Detailed Breakdown&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A complete DevOps architecture includes:&lt;/p&gt;

&lt;p&gt;Developer → Git → CI Server → Artifact Registry → CD → Cloud Infra → Monitoring → Feedback&lt;/p&gt;

&lt;p&gt;Let's break each:&lt;/p&gt;

&lt;p&gt;4.1 Source Code Management (SCM)&lt;/p&gt;

&lt;p&gt;GitHub, GitLab&lt;/p&gt;

&lt;p&gt;Branching rules&lt;/p&gt;

&lt;p&gt;Webhooks&lt;/p&gt;

&lt;p&gt;Commit checks&lt;/p&gt;

&lt;p&gt;4.2 Continuous Integration (CI)&lt;/p&gt;

&lt;p&gt;Triggered on every commit or pull request.&lt;br&gt;
Runs:&lt;/p&gt;

&lt;p&gt;Linting&lt;/p&gt;

&lt;p&gt;Unit tests&lt;/p&gt;

&lt;p&gt;Build&lt;/p&gt;

&lt;p&gt;Code scanning&lt;/p&gt;

&lt;p&gt;Security scanning&lt;/p&gt;

&lt;p&gt;4.3 Artifact Repository&lt;/p&gt;

&lt;p&gt;Stores build outputs.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;ECR (AWS)&lt;/p&gt;

&lt;p&gt;GCR (Google)&lt;/p&gt;

&lt;p&gt;ACR (Azure)&lt;/p&gt;

&lt;p&gt;Nexus&lt;/p&gt;

&lt;p&gt;DockerHub&lt;/p&gt;

&lt;p&gt;4.4 Continuous Delivery (CD)&lt;/p&gt;

&lt;p&gt;Automatically deploys the artifact to environments.&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Jenkins&lt;/p&gt;

&lt;p&gt;ArgoCD&lt;/p&gt;

&lt;p&gt;Spinnaker&lt;/p&gt;

&lt;p&gt;GitHub Actions&lt;/p&gt;

&lt;p&gt;4.5 Observability Layer&lt;/p&gt;

&lt;p&gt;Logs&lt;/p&gt;

&lt;p&gt;Metrics&lt;/p&gt;

&lt;p&gt;Traces&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;ELK&lt;/p&gt;

&lt;p&gt;Loki&lt;/p&gt;

&lt;p&gt;Prometheus&lt;/p&gt;

&lt;p&gt;Jaeger&lt;/p&gt;

&lt;p&gt;4.6 Cloud Infrastructure&lt;/p&gt;

&lt;p&gt;Compute (EC2, K8s, GKE)&lt;/p&gt;

&lt;p&gt;Network (VPC, Subnets, SG, NACL)&lt;/p&gt;

&lt;p&gt;Storage (S3/EBS)&lt;/p&gt;

&lt;p&gt;LB (ALB/NLB)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CI/CD Pipeline Architecture (Deep Explanation)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Diagram:&lt;/p&gt;

&lt;p&gt;GitHub → Jenkins → Unit Tests → Build Docker Image → Push to Registry → Deploy to K8s → Monitor&lt;/p&gt;

&lt;p&gt;Detailed Flow:&lt;/p&gt;

&lt;p&gt;Developer pushes code → main branch&lt;/p&gt;

&lt;p&gt;Webhook triggers Jenkins&lt;/p&gt;

&lt;p&gt;Jenkins pipeline starts&lt;/p&gt;

&lt;p&gt;Pipeline stages:&lt;/p&gt;

&lt;p&gt;Checkout code&lt;/p&gt;

&lt;p&gt;Install dependencies&lt;/p&gt;

&lt;p&gt;Unit tests&lt;/p&gt;

&lt;p&gt;Build&lt;/p&gt;

&lt;p&gt;Security scan&lt;/p&gt;

&lt;p&gt;Docker build&lt;/p&gt;

&lt;p&gt;Push to ECR&lt;/p&gt;

&lt;p&gt;Deploy to K8s via Helm&lt;/p&gt;

&lt;p&gt;Notify Slack&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Environments Lifecycle: Dev → Test → Staging → Prod&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each environment serves a different purpose.&lt;/p&gt;

&lt;p&gt;Dev → Test → Staging → Production&lt;/p&gt;

&lt;p&gt;Dev:&lt;/p&gt;

&lt;p&gt;Developers experiment.&lt;/p&gt;

&lt;p&gt;Test:&lt;/p&gt;

&lt;p&gt;QA tests feature behavior.&lt;/p&gt;

&lt;p&gt;Staging:&lt;/p&gt;

&lt;p&gt;Production replica.&lt;/p&gt;

&lt;p&gt;Production:&lt;/p&gt;

&lt;p&gt;Real users.&lt;/p&gt;

&lt;p&gt;DevOps Responsibilities:&lt;/p&gt;

&lt;p&gt;Maintain infra differences&lt;/p&gt;

&lt;p&gt;Manage secrets per environment&lt;/p&gt;

&lt;p&gt;Control release promotion&lt;/p&gt;

&lt;p&gt;Enable rollback&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GitOps + IaC + Cloud-Native DevOps
7.1 GitOps&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Git is the single source of truth.&lt;br&gt;
Tools:&lt;/p&gt;

&lt;p&gt;ArgoCD&lt;/p&gt;

&lt;p&gt;Flux&lt;/p&gt;

&lt;p&gt;7.2 IaC (Infrastructure as Code)&lt;/p&gt;

&lt;p&gt;Everything is code:&lt;/p&gt;

&lt;p&gt;VPC&lt;/p&gt;

&lt;p&gt;Subnets&lt;/p&gt;

&lt;p&gt;EC2&lt;/p&gt;

&lt;p&gt;LB&lt;/p&gt;

&lt;p&gt;Security groups&lt;/p&gt;

&lt;p&gt;K8s clusters&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;p&gt;Terraform&lt;/p&gt;

&lt;p&gt;CloudFormation&lt;/p&gt;

&lt;p&gt;Pulumi&lt;/p&gt;

&lt;p&gt;7.3 Cloud-Native DevOps&lt;/p&gt;

&lt;p&gt;Built around:&lt;/p&gt;

&lt;p&gt;Containers&lt;/p&gt;

&lt;p&gt;Kubernetes&lt;/p&gt;

&lt;p&gt;Service Mesh&lt;/p&gt;

&lt;p&gt;Observability&lt;/p&gt;

&lt;p&gt;Auto-scaling&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DevSecOps — Security Integrated Everywhere&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Security now runs inside CI/CD.&lt;/p&gt;

&lt;p&gt;SAST — Static Code Scans&lt;br&gt;
DAST — Runtime Testing&lt;br&gt;
Container Image Scanning&lt;br&gt;
Dependency Scanning&lt;br&gt;
Secrets Scanning&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;trivy image backend:v1&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SRE (Site Reliability Engineering) vs DevOps
DevOps  SRE
Builds automation   Ensures reliability
Pipelines, IaC  Uptime, Error Budgets
Improves speed  Improves stability
Deployments Incident response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SRE = advanced operational reliability layer on top of DevOps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;End-to-End DevOps Architecture Diagram&lt;br&gt;
            PLAN&lt;br&gt;
     +---------------+&lt;br&gt;
     | Jira/Confluence|&lt;br&gt;
     +---------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
            CODE&lt;br&gt;
     +---------------+&lt;br&gt;
     | GitHub/GitLab |&lt;br&gt;
     +---------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
           BUILD&lt;br&gt;
     +---------------+&lt;br&gt;
     | Jenkins/GHA    |&lt;br&gt;
     +---------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
           TEST&lt;br&gt;
     +----------------+&lt;br&gt;
     | Unit/Integration|&lt;br&gt;
     +----------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
         RELEASE&lt;br&gt;
     +-----------------+&lt;br&gt;
     | Docker Registry |&lt;br&gt;
     +-----------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
          DEPLOY&lt;br&gt;
     +----------------+&lt;br&gt;
     | Terraform/Helm |&lt;br&gt;
     +----------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
          OPERATE&lt;br&gt;
     +-----------------+&lt;br&gt;
     | AWS/K8s/LoadBal |&lt;br&gt;
     +-----------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
         MONITOR&lt;br&gt;
     +-----------------+&lt;br&gt;
     | Grafana/ELK     |&lt;br&gt;
     +-----------------+&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
       FEEDBACK → PLAN&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-World DevOps Pipeline Example (Production Grade)&lt;br&gt;
E-Commerce Backend Deployment (AWS Example)&lt;br&gt;
GitHub → Jenkins Pipeline → Docker Build → Push to ECR →&lt;br&gt;
Terraform deploys infra → ECS Fargate → ALB → RDS →&lt;br&gt;
CloudWatch Monitoring → PagerDuty Alerts&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What DevOps Would Debug:&lt;/p&gt;

&lt;p&gt;AWS networking issues → mtr, ss, dig&lt;/p&gt;

&lt;p&gt;Container crashes → docker logs, kubectl logs&lt;/p&gt;

&lt;p&gt;High latency → check ALB target health, CloudWatch metrics&lt;/p&gt;

&lt;p&gt;Autoscaling → HPA or ASG mismatches&lt;/p&gt;

&lt;p&gt;DNS failures → Route53 health checks&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Shell Scripting for DevOps (Week 2)</title>
      <dc:creator>Ashish</dc:creator>
      <pubDate>Sun, 23 Nov 2025 06:09:24 +0000</pubDate>
      <link>https://forem.com/ashish0360/shell-scripting-for-devops-week-2-5ble</link>
      <guid>https://forem.com/ashish0360/shell-scripting-for-devops-week-2-5ble</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Part 1 - The Essentials: Shebang, Shell Types, Basic Syntax, Variables &amp;amp; User Input&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;br&gt;
Github: &lt;a href="https://github.com/ashish0360/devops-learn-in-public/tree/main/shell-scripting-for-devops" rel="noopener noreferrer"&gt;https://github.com/ashish0360/devops-learn-in-public/tree/main/shell-scripting-for-devops&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why Shell Scripting Matters in DevOps&lt;/li&gt;
&lt;li&gt;What is a Shell? (bash, sh, dash)&lt;/li&gt;
&lt;li&gt;The Shebang (#!)&lt;/li&gt;
&lt;li&gt;Running a Shell Script&lt;/li&gt;
&lt;li&gt;Basic Syntax: echo, comments, variables&lt;/li&gt;
&lt;li&gt;Reading User Input (read)&lt;/li&gt;
&lt;li&gt;Script Arguments ($0, $1, $2)&lt;/li&gt;
&lt;li&gt;Debugging &amp;amp; Error Handling (set -x, set -e, set -o pipefail)&lt;/li&gt;
&lt;li&gt;Essential Commands You’ll Use Daily&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Summary &amp;amp; What’s Next (Part 2 Preview)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 Why Shell Scripting Matters in DevOps&lt;br&gt;
Shell scripting is the foundation of DevOps automation.&lt;br&gt;
Every time you:&lt;br&gt;
Deploy an application&lt;br&gt;
Configure a server&lt;br&gt;
Build a container&lt;br&gt;
Parse logs&lt;br&gt;
Create CI/CD pipelines&lt;br&gt;
Automate infrastructure&lt;br&gt;
Trigger AWS CLI, Azure CLI, or gcloud&lt;br&gt;
Write Kubernetes helpers&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;…you are essentially writing or using shell scripts.&lt;br&gt;
If you master shell scripting → you unlock real automation power.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧠 What Is a Shell? (bash vs sh vs dash)
A shell executes your commands.
Common shells:
Shell
Path
Notes
bash
/bin/bash
Default for Linux servers, DevOps standard
sh
/bin/sh
Lightweight shell, usually a link to dash
dash
/bin/dash
Very fast, used in system-level scripts
zsh/fish
optional
For interactive use&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;➡️ DevOps uses bash the most.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔥 The Shebang (#!)
The first line of every script defines which shell should run it.
Most common:
#!/bin/bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;System-level (mapped to dash on many systems):&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/sh
&lt;/h1&gt;

&lt;p&gt;Why it matters:&lt;br&gt;
bash has more features than sh/dash&lt;br&gt;
Some expressions don’t work in dash&lt;br&gt;
CI pipelines may break if the wrong shebang is used&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;▶️ How to Run a Shell Script
Step 1 — Create a script
touch script.sh&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 2 — Add a shebang&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;Step 3 — Give execute permission&lt;br&gt;
chmod +x script.sh&lt;/p&gt;

&lt;p&gt;Step 4 — Run&lt;br&gt;
./script.sh&lt;/p&gt;

&lt;p&gt;Or:&lt;br&gt;
bash script.sh&lt;br&gt;
sh script.sh     # if POSIX compatible&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;📝 Basic Syntax Every DevOps Engineer Must Know
echo — print output
echo "Hello DevOps"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Comments&lt;/p&gt;

&lt;h1&gt;
  
  
  single-line comment
&lt;/h1&gt;

&lt;p&gt;Block comments:&lt;br&gt;
&amp;lt;&amp;lt;comment&lt;br&gt;
This is a block comment&lt;br&gt;
comment&lt;/p&gt;

&lt;p&gt;Variables&lt;br&gt;
User-defined:&lt;br&gt;
name="Ashish"&lt;br&gt;
echo "Hello $name"&lt;/p&gt;

&lt;p&gt;System variables:&lt;br&gt;
echo $HOME&lt;br&gt;
echo $PATH&lt;br&gt;
echo $USER&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔡 Reading User Input (read)
read -p "Enter your name: " username
echo "Welcome $username"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;read -p "Enter your age: " age&lt;br&gt;
echo "You entered $age"&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
interactive scripts&lt;/p&gt;

&lt;p&gt;validation&lt;/p&gt;

&lt;p&gt;server setup tools&lt;/p&gt;

&lt;p&gt;menu-based scripts&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧩 Script Arguments ($0, $1, $2 …)
When running:
./deploy.sh prod v2&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Inside script:&lt;br&gt;
echo "Script name: $0"&lt;br&gt;
echo "Environment: $1"&lt;br&gt;
echo "Version: $2"&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
dynamic deployments&lt;br&gt;
folder creation&lt;br&gt;
automation scripts&lt;br&gt;
CI/CD parameter passing&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔍 Debugging &amp;amp; Error Handling Essentials
set -x — debug mode (prints commands)
set -x&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;set -e — exit when a command fails&lt;br&gt;
set -e&lt;/p&gt;

&lt;p&gt;set -o pipefail — stop when any pipe command fails&lt;br&gt;
set -o pipefail&lt;/p&gt;

&lt;p&gt;Most common DevOps combo&lt;br&gt;
set -exo pipefail&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🛠 Essential Shell Commands DevOps Engineers Use Daily
Process management
ps -ef
ps -ef | grep nginx
ps -ef | grep python | wc -l
ps -ef | grep python | awk -F" " '{print $2}'&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;curl vs wget&lt;br&gt;
curl &lt;a href="https://api.com/data" rel="noopener noreferrer"&gt;https://api.com/data&lt;/a&gt;       # fetch data&lt;br&gt;
wget &lt;a href="https://example.com/file" rel="noopener noreferrer"&gt;https://example.com/file&lt;/a&gt;   # download file&lt;/p&gt;

&lt;p&gt;find&lt;br&gt;
find / -name app.log&lt;/p&gt;

&lt;p&gt;These commands become the backbone of automation scripts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎯 Part 1 Completed
You now understand:
What shells DevOps engineers use
bash vs sh differences
The importance of the shebang
How to create and run scripts
Variables, input, arguments
Debugging with set flags
Essential shell commands
This is the foundation needed to automate real systems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;=================================================================&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Part 2 - Conditions, Expressions, If/Else, Case, Loops (for/while/until) — The Logic Layer of Automation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why Logic Matters in DevOps Automation&lt;/li&gt;
&lt;li&gt;Expressions &amp;amp; Operators (-gt, -eq, -lt…)&lt;/li&gt;
&lt;li&gt;If/Else — The Backbone of Script Decisions&lt;/li&gt;
&lt;li&gt;Nested Conditions&lt;/li&gt;
&lt;li&gt;Case Statement (Menu-Based Scripts)&lt;/li&gt;
&lt;li&gt;For Loops — Iteration for Automation&lt;/li&gt;
&lt;li&gt;While Loops — Event-Based Automation&lt;/li&gt;
&lt;li&gt;Until Loops — Run Until Condition Becomes True&lt;/li&gt;
&lt;li&gt;Practical DevOps Examples&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Summary &amp;amp; Next Part Preview&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 Why Logic Matters in DevOps Automation&lt;br&gt;
Every meaningful DevOps script makes decisions.&lt;br&gt;
For example:&lt;br&gt;
“Is Nginx running? If not, restart it.”&lt;br&gt;
“If the age is &amp;gt;= 18, allow access.”&lt;br&gt;
“If the directory already exists, exit the script.”&lt;br&gt;
“Loop through 100 log files and clean them.”&lt;br&gt;
“Run this until the server becomes healthy.”&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without if, loops, conditions, comparisons, shell scripting is basically just a list of commands.&lt;/p&gt;

&lt;p&gt;This section gives you the logic power needed for real automation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧠 Understanding Expressions &amp;amp; Operators&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Shell scripts don't use normal symbols like &amp;gt; or &amp;lt;.&lt;br&gt;
They use operators inside [[ ]].&lt;/p&gt;

&lt;p&gt;🔹 Common numeric operators:&lt;br&gt;
Operator    Meaning&lt;br&gt;
-gt greater than&lt;br&gt;
-lt less than&lt;br&gt;
-eq equal&lt;br&gt;
-ne not equal&lt;br&gt;
-ge greater or equal&lt;br&gt;
-le less or equal&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;if [[ $age -ge 18 ]]; then&lt;br&gt;
    echo "Adult"&lt;br&gt;
fi&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧩 If / Else — Decision Making in Scripts
Basic structure:
if [[ condition ]]; then
# code
elif [[ another_condition ]]; then
# code
else
# fallback
fi&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
a=10&lt;br&gt;
b=5&lt;/p&gt;

&lt;p&gt;if [[ $a -gt $b ]]; then&lt;br&gt;
    echo "a is greater than b"&lt;br&gt;
else&lt;br&gt;
    echo "a is smaller than b"&lt;br&gt;
fi&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎯 Practical Example — Voting Eligibility Script
#!/bin/bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;read -p "Enter your age: " age&lt;br&gt;
read -p "Are you Indian? yes/no: " nation&lt;/p&gt;

&lt;p&gt;if [[ $age -ge 18 ]]; then&lt;br&gt;
    echo "You can vote because you are $age"&lt;br&gt;
elif [[ $nation == "yes" ]]; then&lt;br&gt;
    echo "You are Indian, you can vote"&lt;br&gt;
else&lt;br&gt;
    echo "You cannot vote because you are $age"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;✔ Demonstrates numeric + string evaluations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔄 Case Statement — Build Menu-Based Tools&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Case is perfect for DevOps automation menus.&lt;/p&gt;

&lt;p&gt;read -p "Choose option: " choice&lt;/p&gt;

&lt;p&gt;case $choice in&lt;br&gt;
    1) echo "Start service" ;;&lt;br&gt;
    2) echo "Stop service" ;;&lt;br&gt;
    3) echo "Check status" ;;&lt;br&gt;
    *) echo "Invalid option" ;;&lt;br&gt;
esac&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
deployment menus&lt;br&gt;
CI/CD utility scripts&lt;br&gt;
service management tools&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔁 For Loop — Iterate Through Numbers, Files, Commands
Example 1 — Simple counter:
for ((i=1; i&amp;lt;=10; i++)); do
echo "Number: $i"
done&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example 2 — Create multiple folders:&lt;br&gt;
for (( num=$1 ; num&amp;lt;=$2 ; num++ )); do&lt;br&gt;
    mkdir "$3$num"&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;./folder.sh 1 50 project&lt;/p&gt;

&lt;p&gt;Creates:&lt;br&gt;
project1, project2, ..., project50&lt;br&gt;
Perfect for:&lt;br&gt;
log directories&lt;br&gt;
batch processing&lt;br&gt;
repeating commands over files&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⏳ While Loop — Run While Condition Is True
Example:
read -p "Enter a number between 1-8: " num&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;while [[ $(( num%2 )) -eq 0 &amp;amp;&amp;amp; $num -le 10 ]]; do&lt;br&gt;
    echo "$num"&lt;br&gt;
    num=$(( num+2 ))&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;Useful for:&lt;br&gt;
monitors&lt;br&gt;
waiting loops&lt;br&gt;
retry logic&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔁 Until Loop — Opposite of While&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Runs until the condition becomes true.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;n=1&lt;/p&gt;

&lt;p&gt;until [[ $n -gt 5 ]]; do&lt;br&gt;
    echo "n = $n"&lt;br&gt;
    n=$((n+1))&lt;br&gt;
done&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;🧰 FUNCTIONS (Logic + Reusability)&lt;br&gt;
function vote() {&lt;br&gt;
read -p "Enter your age: " age&lt;br&gt;
read -p "Are you Indian? yes/no: " nation&lt;/p&gt;

&lt;p&gt;if [[ $age -ge 18 ]]; then&lt;br&gt;
    echo "You can vote"&lt;br&gt;
elif [[ $nation == "yes" ]]; then&lt;br&gt;
    echo "You can vote"&lt;br&gt;
else&lt;br&gt;
    echo "You cannot vote"&lt;br&gt;
fi&lt;br&gt;
}&lt;br&gt;
vote&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Functions are essential in DevOps for:&lt;br&gt;
deployments&lt;br&gt;
checks&lt;br&gt;
re-used scripts&lt;br&gt;
AWS CLI automation&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🛠 Real DevOps Use Case — Create Folder via Script
#!/bin/bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;create_directory(){&lt;br&gt;
    mkdir test&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;if ! create_directory; then&lt;br&gt;
    echo "Directory already exists — exiting."&lt;br&gt;
    exit 1&lt;br&gt;
fi&lt;br&gt;
echo "Directory created successfully"&lt;/p&gt;

&lt;p&gt;✔ Demonstrates if-condition&lt;br&gt;
✔ Demonstrates error handling&lt;br&gt;
✔ Demonstrates function use&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎯 Real DevOps Logic Example — Process Counting
ps -ef | grep python | wc -l&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Add logic:&lt;/p&gt;

&lt;p&gt;count=$(ps -ef | grep python | wc -l)&lt;/p&gt;

&lt;p&gt;if [[ $count -gt 1 ]]; then&lt;br&gt;
    echo "Python service is running"&lt;br&gt;
else&lt;br&gt;
    echo "Python service is DOWN!"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;These checks form the basis of:&lt;br&gt;
monitoring&lt;br&gt;
health checks&lt;br&gt;
auto-restarts&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;📌 Part 2 Complete&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now understand the full logic system in shell scripting:&lt;/p&gt;

&lt;p&gt;✔ Numeric &amp;amp; string comparisons&lt;br&gt;
✔ if / else / elif&lt;br&gt;
✔ case (menu-driven automation)&lt;br&gt;
✔ for, while, until loops&lt;br&gt;
✔ functions for reusable automation&lt;/p&gt;

&lt;p&gt;You now have the building blocks for real-world DevOps scripts.&lt;/p&gt;

&lt;p&gt;=================================================================&lt;/p&gt;

&lt;h2&gt;
  
  
  **Part 3 - Error Handling, Debugging Flags, Exit Codes &amp;amp; Real DevOps Automation Scripts
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why Error Handling Matters in DevOps&lt;/li&gt;
&lt;li&gt;Exit Codes (0, non-zero, $? usage)&lt;/li&gt;
&lt;li&gt;set -e, set -x, set -o pipefail, set -exo&lt;/li&gt;
&lt;li&gt;Error Handling Patterns&lt;/li&gt;
&lt;li&gt;Debugging Shell Scripts&lt;/li&gt;
&lt;li&gt;Writing Safe &amp;amp; Reliable DevOps Scripts&lt;/li&gt;
&lt;li&gt;Practical DevOps Examples&lt;/li&gt;
&lt;li&gt;Directory creation with error handling&lt;/li&gt;
&lt;li&gt;Process validation&lt;/li&gt;
&lt;li&gt;Automated deployment script&lt;/li&gt;
&lt;li&gt;Django Notes App deployment&lt;/li&gt;
&lt;li&gt;AWS EC2 creation through script&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Summary &amp;amp; Next Part Preview&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚨 Why Error Handling Is Critical in DevOps&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;DevOps engineers write scripts that automate:&lt;br&gt;
deployments&lt;br&gt;
backups&lt;br&gt;
AWS/GCP/Azure infra creation&lt;br&gt;
CI/CD steps&lt;br&gt;
service monitoring&lt;br&gt;
log processing&lt;br&gt;
A single silent error can:&lt;br&gt;
break deployments&lt;br&gt;
corrupt environments&lt;br&gt;
delete production data&lt;br&gt;
take servers offline&lt;br&gt;
So DevOps scripts must never fail silently.&lt;br&gt;
That’s why error handling and debugging flags matter.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧯 Understanding Exit Codes
Every command in Linux returns an exit code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✔ Exit Code Meaning:&lt;br&gt;
Code    Meaning&lt;br&gt;
0   Success&lt;br&gt;
1-255   Error / Failure&lt;br&gt;
Check exit code:&lt;br&gt;
echo $?&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
ls /not_found&lt;br&gt;
echo $?   # 2 → means failure&lt;/p&gt;

&lt;p&gt;As a DevOps engineer, you must use exit codes to stop scripts when something breaks.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🛑 set Flags — Your Safety Net in Shell Scripts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are critical for production-grade scripts.&lt;/p&gt;

&lt;p&gt;3.1 set -e → Exit Immediately on Error&lt;/p&gt;

&lt;p&gt;If any command fails, the script stops.&lt;br&gt;
set -e&lt;br&gt;
mkdir test&lt;br&gt;
cp abc.txt xyz.txt  # if this fails → script stops&lt;br&gt;
echo "Will NOT run"&lt;/p&gt;

&lt;p&gt;When DevOps uses it:&lt;br&gt;
CI/CD pipelines&lt;br&gt;
AWS provisioning&lt;br&gt;
Database backup scripts&lt;br&gt;
Deployment scripts&lt;/p&gt;

&lt;p&gt;3.2 set -x → Show Commands as They Execute (Debugging)&lt;br&gt;
set -x&lt;br&gt;
echo "Hello"&lt;br&gt;
ls -l&lt;/p&gt;

&lt;p&gt;Output looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;echo Hello&lt;/li&gt;
&lt;li&gt;ls -l
Helps debug scripts line-by-line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.3 set -o pipefail → Fail If Any Command in a Pipeline Fails&lt;br&gt;
Without this:&lt;br&gt;
command1 | command2 | command3&lt;/p&gt;

&lt;p&gt;❌ Only command3 exit code is checked&lt;br&gt;
✔ Earlier failures are ignored silently&lt;/p&gt;

&lt;p&gt;With pipefail:&lt;/p&gt;

&lt;p&gt;set -o pipefail&lt;/p&gt;

&lt;p&gt;Pipeline fails if any command fails — perfect for DevOps pipelines.&lt;/p&gt;

&lt;p&gt;3.4 set -exo — The DevOps Gold Standard&lt;br&gt;
set -euo pipefail&lt;/p&gt;

&lt;p&gt;Meaning:&lt;br&gt;
-e → Exit on errors&lt;br&gt;
-u → Undefined variables cause errors&lt;br&gt;
-o pipefail → Pipelines must succeed&lt;br&gt;
This is the correct way to write most DevOps automation scripts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⚙️ Error Handling Patterns (Must Learn)
Pattern 1 — Use || for Manual Error Catching
mkdir demo || {
echo "Failed to create directory"
exit 1
}&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pattern 2 — Use a Function and Catch Its Error&lt;br&gt;
create_directory() {&lt;br&gt;
    mkdir demo&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;if ! create_directory; then&lt;br&gt;
    echo "Directory already exists"&lt;br&gt;
    exit 1&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;Pattern 3 — Use Combined Flags&lt;br&gt;
set -euo pipefail&lt;/p&gt;

&lt;p&gt;deploy() {&lt;br&gt;
    echo "Deploying..."&lt;br&gt;
    cp app.conf /etc/app/&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;deploy || {&lt;br&gt;
    echo "Deployment failed"&lt;br&gt;
    exit 1&lt;br&gt;
}&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🐞 Debugging Your Script (DevOps Way)
Use set -x during debugging:
set -x&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or wrap only the part you want to debug:&lt;br&gt;
set -x&lt;br&gt;
command1&lt;br&gt;
command2&lt;br&gt;
set +x&lt;/p&gt;

&lt;p&gt;Print variables to trace execution:&lt;br&gt;
echo "User: $USER"&lt;br&gt;
echo "Directory: $PWD"&lt;/p&gt;

&lt;p&gt;Debugging is a non-negotiable DevOps skill.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔥 Real DevOps Scripts with Error Handling
Below are real scripts you wrote with me—now rewritten cleanly, documented, and production-ready.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✔ Example 1 — Safe Directory Creation Script&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;create_directory() {&lt;br&gt;
    mkdir test&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;if ! create_directory; then&lt;br&gt;
    echo "Directory already exists — exiting."&lt;br&gt;
    exit 1&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;echo "Directory created successfully."&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
log directories&lt;br&gt;
deployment folders&lt;/p&gt;

&lt;p&gt;✔ Example 2 — Count Running Processes&lt;br&gt;
count=$(ps -ef | grep python | wc -l)&lt;/p&gt;

&lt;p&gt;if [[ $count -gt 1 ]]; then&lt;br&gt;
    echo "Python service is running"&lt;br&gt;
else&lt;br&gt;
    echo "Python service is DOWN!"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;Used in:&lt;br&gt;
service monitors&lt;br&gt;
cron jobs&lt;br&gt;
health checks&lt;/p&gt;

&lt;p&gt;✔ Example 3 — Django Notes App Deployment (Full Script)&lt;br&gt;
Your complete script, now cleaned and formatted:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;echo "********** DEPLOYMENT STARTED *********"&lt;br&gt;
code_clone() {&lt;br&gt;
    echo "Cloning Django app..."&lt;br&gt;
    if [ -d "django-notes-app" ]; then&lt;br&gt;
        echo "Directory exists, skipping clone."&lt;br&gt;
    else&lt;br&gt;
        git clone &lt;a href="https://github.com/LondheShubham153/django-notes-app.git" rel="noopener noreferrer"&gt;https://github.com/LondheShubham153/django-notes-app.git&lt;/a&gt; || {&lt;br&gt;
            echo "Clone failed"; return 1;&lt;br&gt;
        }&lt;br&gt;
    fi&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;install_requirements() {&lt;br&gt;
    echo "Installing dependencies..."&lt;br&gt;
    sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install -y docker.io nginx docker-compose || {&lt;br&gt;
        echo "Dependency installation failed"; return 1;&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;required_restarts() {&lt;br&gt;
    echo "Performing restarts..."&lt;br&gt;
    sudo chown "$USER" /var/run/docker.sock || {&lt;br&gt;
        echo "Failed to change docker.sock ownership"; return 1;&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;deploy() {&lt;br&gt;
    echo "Building and deploying the app..."&lt;br&gt;
    docker build -t notes-app . &amp;amp;&amp;amp; docker-compose up -d || {&lt;br&gt;
        echo "Deployment failed"; return 1;&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;if ! code_clone; then cd django-notes-app || exit 1; fi&lt;br&gt;
if ! install_requirements; then exit 1; fi&lt;br&gt;
if ! required_restarts; then exit 1; fi&lt;br&gt;
if ! deploy; then&lt;br&gt;
    echo "Deployment failed — notifying admin..."&lt;br&gt;
    exit 1&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;echo "********** DEPLOYMENT DONE *********"&lt;/p&gt;

&lt;p&gt;This is real DevOps-grade code.&lt;/p&gt;

&lt;p&gt;✔ Example 4 — AWS EC2 Creation Script (Professional Version)&lt;/p&gt;

&lt;p&gt;Your script, polished for publication:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;set -euo pipefail&lt;/p&gt;

&lt;p&gt;check_awscli() {&lt;br&gt;
    if ! command -v aws &amp;amp;&amp;gt;/dev/null; then&lt;br&gt;
        echo "AWS CLI is not installed."&lt;br&gt;
        exit 1&lt;br&gt;
    fi&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;install_awscli() {&lt;br&gt;
    echo "Installing AWS CLI v2..."&lt;br&gt;
    curl -s "&lt;a href="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" rel="noopener noreferrer"&gt;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&lt;/a&gt;" -o awscliv2.zip&lt;br&gt;
    sudo apt-get install -y unzip&lt;br&gt;
    unzip awscliv2.zip&lt;br&gt;
    sudo ./aws/install&lt;br&gt;
    rm -rf aws awscliv2.zip&lt;br&gt;
    aws --version&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;wait_for_instance() {&lt;br&gt;
    local instance_id="$1"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "Waiting for EC2 instance..."
while true; do
    state=$(aws ec2 describe-instances \
        --instance-ids "$instance_id" \
        --query 'Reservations[0].Instances[0].State.Name' \
        --output text)

    [[ "$state" == "running" ]] &amp;amp;&amp;amp; break
    sleep 10
done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;create_ec2_instance() {&lt;br&gt;
    instance_id=$(aws ec2 run-instances \&lt;br&gt;
        --image-id "$1" \&lt;br&gt;
        --instance-type "$2" \&lt;br&gt;
        --key-name "$3" \&lt;br&gt;
        --subnet-id "$4" \&lt;br&gt;
        --security-group-ids "$5" \&lt;br&gt;
        --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$6}]" \&lt;br&gt;
        --query 'Instances[0].InstanceId' \&lt;br&gt;
        --output text)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "Created instance: $instance_id"
wait_for_instance "$instance_id"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;main() {&lt;br&gt;
    check_awscli&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AMI_ID=""
INSTANCE_TYPE="t2.micro"
KEY_NAME=""
SUBNET_ID=""
SECURITY_GROUP_IDS=""
INSTANCE_NAME="Shell-Script-EC2-Demo"

create_ec2_instance "$AMI_ID" "$INSTANCE_TYPE" "$KEY_NAME" "$SUBNET_ID" "$SECURITY_GROUP_IDS" "$INSTANCE_NAME"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;main "$@"&lt;/p&gt;

&lt;p&gt;Used in:&lt;br&gt;
DevOps automation&lt;br&gt;
Infrastructure creation&lt;br&gt;
AWS provisioning&lt;br&gt;
Demo/testing environments&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧾 Part 3 Complete
You now understand:
✔ Exit codes
✔ Error handling (||, functions, manual checks)
✔ set -e, set -x, set -o pipefail, set -exo
✔ Debugging shell scripts
✔ Crafting production-grade automation
✔ Real-world scripts for EC2, deployments, directories, processes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the level of scripting expected from a DevOps engineer.&lt;/p&gt;

&lt;p&gt;=================================================================&lt;/p&gt;

&lt;p&gt;Trap, Signals, Cron Jobs &amp;amp; Background Automation (Professional DevOps Guide)&lt;/p&gt;

&lt;p&gt;By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding Signals in Linux&lt;/li&gt;
&lt;li&gt;trap — The DevOps Lifesaver&lt;/li&gt;
&lt;li&gt;Common Signals Every DevOps Engineer Must Know&lt;/li&gt;
&lt;li&gt;Automating Cleanup with trap&lt;/li&gt;
&lt;li&gt;Running Background Processes&lt;/li&gt;
&lt;li&gt;nohup for long-running jobs&lt;/li&gt;
&lt;li&gt;Scheduling with Cron (Beginner → Advanced)&lt;/li&gt;
&lt;li&gt;Practical DevOps Automation Examples&lt;/li&gt;
&lt;li&gt;Production-Grade Script Templates&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Summary &amp;amp; What’s Coming in Part 5&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚠️ Understanding Linux Signals (Critical DevOps Concept)&lt;br&gt;
Linux processes constantly interact with signals — notifications sent by users, other programs, the kernel, or system events.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most commonly used signals:&lt;br&gt;
Signal  Code    Meaning&lt;br&gt;
SIGINT  2   Interrupt (Ctrl + C)&lt;br&gt;
SIGTERM 15  Request to terminate&lt;br&gt;
SIGKILL 9   Force kill (cannot be trapped)&lt;br&gt;
SIGHUP  1   Hangup (restart daemons)&lt;br&gt;
SIGQUIT 3   Quit &amp;amp; dump core&lt;br&gt;
SIGUSR1/2   — Custom signals&lt;/p&gt;

&lt;p&gt;As a DevOps engineer, you MUST handle signals safely because:&lt;br&gt;
Deployments shouldn’t quit mid-way&lt;br&gt;
Cleanup must always run&lt;br&gt;
Temporary files must be removed&lt;br&gt;
Background tasks must be reliable&lt;br&gt;
That’s where… 👇&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔗 trap — The Most Underrated DevOps Tool
trap executes a command when a signal is received.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Syntax:&lt;br&gt;
trap "commands" SIGNALS&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧹 Example 1 — Cleanup Temporary Files on Exit
#!/bin/bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;tmp_file="/tmp/myapp.log"&lt;/p&gt;

&lt;p&gt;trap "echo 'Cleaning...'; rm -f $tmp_file" EXIT&lt;/p&gt;

&lt;p&gt;echo "Working..."&lt;br&gt;
touch $tmp_file&lt;br&gt;
sleep 5&lt;/p&gt;

&lt;p&gt;echo "Done."&lt;/p&gt;

&lt;p&gt;What it does:&lt;br&gt;
Creates temp file&lt;br&gt;
Removes it even if you press Ctrl+C&lt;br&gt;
Ensures the script never leaves junk behind&lt;br&gt;
This is production-safe scripting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;❗ Example 2 — Trap SIGINT (Ctrl + C)
trap "echo 'Ctrl+C detected. Stopping safely...'; exit" SIGINT&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;while true; do&lt;br&gt;
    echo "Running..."&lt;br&gt;
    sleep 2&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;Useful for:&lt;br&gt;
long-running operations&lt;br&gt;
loops&lt;br&gt;
automation tasks&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🛑 Example 3 — Prevent Script from Dying Unexpectedly
trap "echo 'Script terminated unexpectedly'; exit 1" SIGTERM&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Used in:&lt;br&gt;
CI/CD pipelines&lt;br&gt;
systemd scripts&lt;br&gt;
deployment hooks&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🪝 Example 4 — Multiple Signals at Once
trap "cleanup" SIGINT SIGTERM EXIT&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;cleanup() {&lt;br&gt;
    echo "Cleaning up resources..."&lt;br&gt;
    rm -rf /tmp/&lt;em&gt;deploy&lt;/em&gt;&lt;br&gt;
}&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⚙️ Background Jobs (Essential for DevOps)
You learned loops, conditions, debugging…
Now let’s add background jobs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;7.1 Run Command in Background&lt;br&gt;
command &amp;amp;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;python server.py &amp;amp;&lt;/p&gt;

&lt;p&gt;Check jobs:&lt;br&gt;
jobs&lt;/p&gt;

&lt;p&gt;Resume background job:&lt;br&gt;
bg %1&lt;/p&gt;

&lt;p&gt;Bring to foreground:&lt;br&gt;
fg %1&lt;/p&gt;

&lt;p&gt;7.2 nohup — Keep Process Alive After Logout&lt;/p&gt;

&lt;p&gt;Used heavily in servers, SSH sessions, and EC2 instances.&lt;br&gt;
nohup python app.py &amp;amp;&lt;/p&gt;

&lt;p&gt;You close the terminal → the process still runs.&lt;br&gt;
Output saved to:&lt;br&gt;
nohup.out&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⏰ Cron Jobs — Scheduling in Linux (DevOps Mandatory Skill)
Cron = Scheduler for Linux automation.
Open cron:
crontab -e&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;8.1 Cron Syntax&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;* * * * command
| | | | |
| | | | └── day of week (0–6)
| | | └──── month (1–12)
| | └────── day of month (1–31)
| └──────── hour (0–23)
└────────── minute (0–59)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;8.2 Examples DevOps Engineers Use Daily&lt;br&gt;
Run backup every night:&lt;br&gt;
0 0 * * * /home/ashish/backup.sh&lt;/p&gt;

&lt;p&gt;Run a health check every 5 minutes:&lt;br&gt;
*/5 * * * * /home/ashish/check_service.sh&lt;/p&gt;

&lt;p&gt;Clear logs weekly:&lt;br&gt;
0 0 * * 0 rm -rf /var/log/*.gz&lt;/p&gt;

&lt;p&gt;8.3 Example — Cron + Error Handling&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;set -euo pipefail&lt;/p&gt;

&lt;p&gt;logfile="/var/log/health.log"&lt;/p&gt;

&lt;p&gt;if ! systemctl is-active --quiet nginx; then&lt;br&gt;
    echo "$(date) — Nginx DOWN" &amp;gt;&amp;gt; $logfile&lt;br&gt;
    systemctl restart nginx&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;Cron entry:&lt;br&gt;
*/2 * * * * /home/ashish/health.sh&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⚡ Real-World DevOps Automation Examples
✔ Example: Kill Hanging Process &amp;amp; Log the Event
#!/bin/bash
trap "echo 'Terminated!' &amp;gt;&amp;gt; /var/log/proc.log" SIGTERM&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;pid=$(pgrep python)&lt;/p&gt;

&lt;p&gt;if [[ -z "$pid" ]]; then&lt;br&gt;
    echo "No python process running"&lt;br&gt;
else&lt;br&gt;
    kill -9 $pid&lt;br&gt;
    echo "Killed python process $pid"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;✔ Example: Auto-Restart Docker on Failure&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;trap "echo 'Docker restarted due to failure'" EXIT&lt;/p&gt;

&lt;p&gt;if ! docker ps &amp;gt;/dev/null; then&lt;br&gt;
    systemctl restart docker&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;✔ Example: Cleanup Docker Resources Automatically&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;set -e&lt;/p&gt;

&lt;p&gt;trap "docker system prune -f" EXIT&lt;/p&gt;

&lt;p&gt;echo "Running build..."&lt;br&gt;
docker build -t webapp .&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;📦 Production Template — “Safe DevOps Script”
Use this for all future scripts:&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;set -euo pipefail&lt;/p&gt;

&lt;p&gt;trap "echo 'Script exited unexpectedly'; cleanup" EXIT&lt;/p&gt;

&lt;p&gt;cleanup() {&lt;br&gt;
    echo "Performing cleanup..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;main() {&lt;br&gt;
    echo "Starting task..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;main "$@"&lt;/p&gt;

&lt;p&gt;This template = best practice.&lt;/p&gt;

&lt;p&gt;🎉 Part 4 Complete&lt;br&gt;
You now understand advanced automation fundamentals:&lt;br&gt;
trap&lt;br&gt;
Signal handling&lt;br&gt;
Background tasks&lt;br&gt;
nohup&lt;br&gt;
Cron jobs&lt;br&gt;
Cleanup automation&lt;br&gt;
Production-safe scripting patterns&lt;br&gt;
This is the professional level expected in DevOps interviews &amp;amp; real jobs.&lt;/p&gt;

&lt;p&gt;=================================================================&lt;/p&gt;

&lt;h2&gt;
  
  
  **File Operations, find, grep, awk, sed, Automation Scripts
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;File Operations in Shell Scripting (Beginner → Pro)&lt;/li&gt;
&lt;li&gt;Reading/Writing Files in Bash&lt;/li&gt;
&lt;li&gt;Using find like a DevOps Engineer&lt;/li&gt;
&lt;li&gt;DevOps-Grade grep, sed, awk Integration&lt;/li&gt;
&lt;li&gt;File Permissions Automation&lt;/li&gt;
&lt;li&gt;Bulk Folder Creation &amp;amp; Organization&lt;/li&gt;
&lt;li&gt;Building Real DevOps Automation Scripts&lt;/li&gt;
&lt;li&gt;Log Automation, Cleanup Scripts, CI/CD Helpers&lt;/li&gt;
&lt;li&gt;Production Template — File-Handling Script&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Summary &amp;amp; Next Steps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;📁 File Operations in Shell Scripting (Practical Guide)&lt;br&gt;
File handling is at the core of DevOps:&lt;br&gt;
Editing configs&lt;br&gt;
Cleaning logs&lt;br&gt;
Managing backups&lt;br&gt;
Processing monitoring data&lt;br&gt;
Updating YAML/JSON&lt;br&gt;
Generating environment files&lt;br&gt;
Here are the must-know techniques.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1.1 Create a File&lt;br&gt;
touch filename.txt&lt;/p&gt;

&lt;p&gt;Inside script:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;touch report.log&lt;/p&gt;

&lt;p&gt;1.2 Write to a File&lt;br&gt;
echo "Hello DevOps" &amp;gt; file.txt&lt;/p&gt;

&lt;p&gt;Overwrite? → yes.&lt;/p&gt;

&lt;p&gt;Append instead:&lt;br&gt;
echo "New entry" &amp;gt;&amp;gt; file.txt&lt;/p&gt;

&lt;p&gt;1.3 Read a File Line-by-Line&lt;br&gt;
while read line; do&lt;br&gt;
    echo "Line: $line"&lt;br&gt;
done &amp;lt; file.txt&lt;/p&gt;

&lt;p&gt;Use-case:&lt;br&gt;
processing logs, configs, CSVs, access logs&lt;/p&gt;

&lt;p&gt;1.4 Read a specific line number&lt;br&gt;
sed -n '5p' file.txt&lt;/p&gt;

&lt;p&gt;1.5 Replace text in a file&lt;br&gt;
sed -i 's/old/new/g' config.yaml&lt;/p&gt;

&lt;p&gt;Used in:&lt;br&gt;
CI/CD variable changes&lt;br&gt;
Environment promotion (dev → prod)&lt;br&gt;
Auto-fixing broken configs&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔍 find — The Most Important DevOps File Tool
find is used everywhere:
troubleshoot disk usage
locate configs
find failing scripts
cleanup logs
manage permissions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.1 Find file by name&lt;br&gt;
find / -name "nginx.conf"&lt;/p&gt;

&lt;p&gt;2.2 Find directories&lt;br&gt;
find /var -type d -name "log*"&lt;/p&gt;

&lt;p&gt;2.3 Find files modified recently&lt;/p&gt;

&lt;p&gt;Last 24 hours:&lt;br&gt;
find /var/log -mtime -1&lt;/p&gt;

&lt;p&gt;2.4 Delete files older than X days&lt;/p&gt;

&lt;p&gt;Critical DevOps script:&lt;br&gt;
find /var/log -type f -mtime +7 -delete&lt;/p&gt;

&lt;p&gt;Use this for:&lt;br&gt;
disk pressure issues&lt;br&gt;
log rotation&lt;/p&gt;

&lt;p&gt;CI runners storing artifacts&lt;/p&gt;

&lt;p&gt;2.5 Find files &amp;gt; 100MB&lt;br&gt;
find / -type f -size +100M&lt;/p&gt;

&lt;p&gt;2.6 Find and execute a command (🔥 powerful)&lt;br&gt;
find /tmp -type f -name "*.log" -exec rm -f {} \;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎯 Integrating grep + sed + awk (DevOps-Level)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These 3 tools together =&lt;br&gt;
90% of DevOps text processing automation.&lt;/p&gt;

&lt;p&gt;3.1 grep → find matching lines&lt;/p&gt;

&lt;p&gt;Extract errors from logs:&lt;br&gt;
grep -i "error" app.log&lt;/p&gt;

&lt;p&gt;3.2 sed → modify lines&lt;/p&gt;

&lt;p&gt;Bulk edit config values:&lt;br&gt;
sed -i 's/ENV=dev/ENV=prod/g' .env&lt;/p&gt;

&lt;p&gt;3.3 awk → extract fields/reports&lt;/p&gt;

&lt;p&gt;Extract IP &amp;amp; status:&lt;br&gt;
awk '{print $1, $9}' access.log&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🗄 Automating File Permissions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fix “permission denied” errors:&lt;br&gt;
sudo chown -R $USER:$USER /path&lt;/p&gt;

&lt;p&gt;Change permission in script:&lt;br&gt;
chmod +x deploy.sh&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧬 Bulk Folder &amp;amp; File Creation
5.1 Create 100 folders automatically
for i in {1..100}; do
mkdir "folder$i"
done&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;5.2 Create folders using arguments&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;for (( i=$1 ; i&amp;lt;=$2 ; i++ ))&lt;br&gt;
do&lt;br&gt;
   mkdir "$3$i"&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;./create.sh 1 50 week&lt;/p&gt;

&lt;p&gt;5.3 Create multiple files based on list&lt;br&gt;
for f in $(cat list.txt); do&lt;br&gt;
    touch "$f.txt"&lt;br&gt;
done&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⚡Real DevOps Automation Scripts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are the scripts DevOps engineers actually use daily.&lt;/p&gt;

&lt;p&gt;6.1 Cleanup Logs Older Than X Days&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;LOG_DIR="/var/log"&lt;br&gt;
DAYS=7&lt;/p&gt;

&lt;p&gt;find $LOG_DIR -type f -mtime +$DAYS -delete&lt;/p&gt;

&lt;p&gt;echo "Old logs cleaned."&lt;/p&gt;

&lt;p&gt;6.2 Disk Pressure Emergency Script&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;du -sh /* | sort -h | tail&lt;br&gt;
df -h&lt;/p&gt;

&lt;p&gt;6.3 Find top 10 IPs hitting your server&lt;br&gt;
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head&lt;/p&gt;

&lt;p&gt;6.4 Auto-Restart Service When It Goes Down&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;if ! systemctl is-active --quiet nginx; then&lt;br&gt;
    echo "Nginx down! Restarting..."&lt;br&gt;
    systemctl restart nginx&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;6.5 Check all Python Processes&lt;br&gt;
ps -ef | grep python | awk '{print $2}'&lt;/p&gt;

&lt;p&gt;6.6 Delete specific type of files safely&lt;br&gt;
find . -name "*.tmp" -exec rm -f {} \;&lt;/p&gt;

&lt;p&gt;6.7 Backup a directory&lt;br&gt;
tar -cvzf backup.tar.gz /etc&lt;/p&gt;

&lt;p&gt;6.8 Parse AWS EC2 instance data&lt;br&gt;
aws ec2 describe-instances | jq '.Reservations[].Instances[].InstanceId'&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🏗 Production-Grade File Automation Script Template
#!/bin/bash
set -euo pipefail&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;trap "echo 'Exiting safely'; cleanup" EXIT&lt;/p&gt;

&lt;p&gt;cleanup() {&lt;br&gt;
    echo "Performing cleanup..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;log() {&lt;br&gt;
    echo "$(date) — $1"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;process_files() {&lt;br&gt;
    for file in *.log; do&lt;br&gt;
        log "Processing $file"&lt;br&gt;
        grep -i "error" "$file" &amp;gt;&amp;gt; errors.txt&lt;br&gt;
    done&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;main() {&lt;br&gt;
    log "Script started"&lt;br&gt;
    process_files&lt;br&gt;
    log "Script completed"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;main "$@"&lt;/p&gt;

&lt;p&gt;This is the structure companies expect.&lt;/p&gt;

&lt;p&gt;🎉 Part 5 Complete - Advanced Automation Unlocked&lt;br&gt;
You now know:&lt;br&gt;
Full file operations&lt;br&gt;
find for DevOps scenarios&lt;br&gt;
Combining grep + awk + sed&lt;br&gt;
Bulk file &amp;amp; folder creation&lt;br&gt;
Cleanup, backup, monitoring scripts&lt;br&gt;
Production-safe file automation templates&lt;br&gt;
This is professional-grade shell scripting, not beginner-level theory.&lt;/p&gt;

&lt;p&gt;=================================================================&lt;/p&gt;

&lt;h2&gt;
  
  
  **Part 6 - DevOps Project Scripts, AWS Automation, Error Handling &amp;amp; Deployment
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;p&gt;Why DevOps Engineers Automate Cloud Tasks&lt;br&gt;
Understanding AWS CLI for Automation&lt;br&gt;
Installing AWS CLI via Shell Script&lt;br&gt;
AWS EC2 Creation Script (Deep-Dive)&lt;br&gt;
AWS Instance Waiters (Production-Grade)&lt;br&gt;
Error Handling, Logging &amp;amp; Exit Codes&lt;br&gt;
Automating Docker + Nginx Deployment&lt;br&gt;
Django App Deployment Script (Your Notes Included)&lt;br&gt;
Real DevOps Cloud Automation Examples&lt;br&gt;
CI/CD Integration Patterns&lt;br&gt;
Summary &amp;amp; Next Part&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🚀 Why DevOps Engineers Automate Cloud Tasks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Modern DevOps is automation-first.&lt;br&gt;
A DevOps engineer must be able to:&lt;br&gt;
spin up servers&lt;br&gt;
install dependencies&lt;br&gt;
run deployments&lt;br&gt;
debug errors&lt;br&gt;
restart services&lt;br&gt;
scale infra&lt;br&gt;
perform health checks&lt;br&gt;
all using shell scripting, not just clicking on AWS Console.&lt;/p&gt;

&lt;p&gt;Your Week-2 work (EC2 script, error handling, Django deploy script) reflects exactly what real engineers do.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⚙️ Understanding AWS CLI for Automation
To automate AWS from your shell scripts, AWS CLI must be:
installed
configured
authenticated
tested with simple commands&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check if installed:&lt;br&gt;
aws --version&lt;/p&gt;

&lt;p&gt;If output is missing → install inside the script.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧰 Script: Install AWS CLI Automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the improved, production-level version of your script.&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;set -euo pipefail&lt;/p&gt;

&lt;p&gt;install_aws_cli() {&lt;br&gt;
    echo "Installing AWS CLI v2..."&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt-get install -y unzip &amp;amp;&amp;gt;/dev/null
unzip -q awscliv2.zip

sudo ./aws/install
aws --version

rm -rf aws awscliv2.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;check_aws() {&lt;br&gt;
    if ! command -v aws &amp;amp;&amp;gt;/dev/null; then&lt;br&gt;
        install_aws_cli&lt;br&gt;
    else&lt;br&gt;
        echo "AWS CLI already installed."&lt;br&gt;
    fi&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;set -euo pipefail is essential in DevOps:&lt;br&gt;
-e → exit on error&lt;br&gt;
-u → undefined variables error&lt;br&gt;
-o pipefail → detect pipeline failures&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🖥️ EC2 Instance Creation Script (Full Breakdown)
This is the exact version DevOps teams use — simple, readable, powerful.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;create_ec2_instance() {&lt;br&gt;
    local ami_id="$1"&lt;br&gt;
    local instance_type="$2"&lt;br&gt;
    local key_name="$3"&lt;br&gt;
    local subnet_id="$4"&lt;br&gt;
    local sg_id="$5"&lt;br&gt;
    local name="$6"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;instance_id=$(aws ec2 run-instances \
    --image-id "$ami_id" \
    --instance-type "$instance_type" \
    --key-name "$key_name" \
    --subnet-id "$subnet_id" \
    --security-group-ids "$sg_id" \
    --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$name}]" \
    --query 'Instances[0].InstanceId' \
    --output text)

if [[ -z "$instance_id" ]]; then
    echo "ERROR: Instance not created!"
    exit 1
fi

echo "Instance created: $instance_id"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⏳ EC2 Waiters — Wait Until Instance Becomes Running&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is pro-level — prevents CI/CD failures due to boot delay.&lt;/p&gt;

&lt;p&gt;wait_for_instance() {&lt;br&gt;
    local instance_id="$1"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "Waiting for instance $instance_id to enter 'running' state..."

while true; do
    state=$(aws ec2 describe-instances \
            --instance-ids "$instance_id" \
            --query 'Reservations[0].Instances[0].State.Name' --output text)

    if [[ "$state" == "running" ]]; then
        echo "Instance is now running."
        break
    fi

    sleep 10
done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🐳 Docker + Django Deployment Script (Your Notes → Polished Version)
Here is the polished, production-grade version of the Django deployment script you captured in your notes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;set -euo pipefail&lt;/p&gt;

&lt;p&gt;repo="&lt;a href="https://github.com/LondheShubham153/django-notes-app.git" rel="noopener noreferrer"&gt;https://github.com/LondheShubham153/django-notes-app.git&lt;/a&gt;"&lt;/p&gt;

&lt;p&gt;log() {&lt;br&gt;
    echo "$(date) - $1"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;code_clone() {&lt;br&gt;
    log "Checking code directory..."&lt;br&gt;
    if [[ ! -d django-notes-app ]]; then&lt;br&gt;
        log "Cloning repository..."&lt;br&gt;
        git clone "$repo" || return 1&lt;br&gt;
    else&lt;br&gt;
        log "Repo already exists. Skipping clone."&lt;br&gt;
    fi&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;install_requirements() {&lt;br&gt;
    log "Installing dependencies..."&lt;br&gt;
    sudo apt-get update&lt;br&gt;
    sudo apt-get install -y docker.io docker-compose nginx || return 1&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;configure_docker() {&lt;br&gt;
    log "Configuring Docker..."&lt;br&gt;
    sudo chown "$USER" /var/run/docker.sock || return 1&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;deploy() {&lt;br&gt;
    log "Deploying Django app..."&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t notes-app . || return 1
docker-compose up -d || return 1

log "Application deployed successfully."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;main() {&lt;br&gt;
    log "Deployment started."&lt;br&gt;
    code_clone || cd django-notes-app&lt;br&gt;
    install_requirements&lt;br&gt;
    configure_docker&lt;br&gt;
    deploy&lt;br&gt;
    log "Deployment finished."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;main "$@"&lt;/p&gt;

&lt;p&gt;This is a superb Week-2 DevOps script — you should be proud.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧨 Error Handling in DevOps Scripts (Industry Level)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use the pattern:&lt;/p&gt;

&lt;p&gt;if ! command; then&lt;br&gt;
   echo "Error occurred"&lt;br&gt;
   exit 1&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;if ! mkdir demo; then&lt;br&gt;
    echo "Directory exists! Exiting..."&lt;br&gt;
    exit 1&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;This prevents:&lt;br&gt;
partial deployment&lt;br&gt;
corrupted services&lt;br&gt;
half-created resources&lt;br&gt;
CI/CD failures&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🛠 Real DevOps Cloud Automation Examples&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are practical, real-world scripts DevOps engineers write constantly.&lt;/p&gt;

&lt;p&gt;8.1 Backup your EC2 metadata&lt;br&gt;
aws ec2 describe-instances &amp;gt; instances.json&lt;/p&gt;

&lt;p&gt;8.2 Restart EC2 instance using script&lt;br&gt;
aws ec2 reboot-instances --instance-ids i-123456&lt;/p&gt;

&lt;p&gt;8.3 Get EC2 public IP automatically&lt;br&gt;
aws ec2 describe-instances \&lt;br&gt;
    --instance-ids i-123 \&lt;br&gt;
    --query 'Reservations[0].Instances[0].PublicIpAddress' \&lt;br&gt;
    --output text&lt;/p&gt;

&lt;p&gt;8.4 Upload files to S3 automatically&lt;br&gt;
aws s3 cp backup.tar.gz s3://mybucket/&lt;/p&gt;

&lt;p&gt;8.5 Check if AWS credentials are expired&lt;br&gt;
aws sts get-caller-identity || echo "AWS credentials expired!"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧩 CI/CD Integration — Best Practices
You’ll use your scripts in:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GitHub Actions&lt;br&gt;
Jenkins&lt;br&gt;
GitLab CI&lt;br&gt;
Bitbucket Pipelines&lt;br&gt;
AWS CodePipeline&lt;/p&gt;

&lt;p&gt;Checklist:&lt;br&gt;
✔ All scripts must return correct exit codes&lt;br&gt;
✔ Avoid echoing secrets&lt;br&gt;
✔ Never hardcode AWS keys&lt;br&gt;
✔ Use IAM role-based credentials&lt;br&gt;
✔ Scripts must work in non-interactive mode&lt;br&gt;
✔ Include retries &amp;amp; timeouts&lt;/p&gt;

&lt;p&gt;🎉 Part 6 Complete — AWS + DevOps Automation Achieved&lt;br&gt;
You now know how to:&lt;br&gt;
✔ Create, manage, and automate AWS EC2&lt;br&gt;
✔ Build error-proof deployment scripts&lt;br&gt;
✔ Integrate Docker + Nginx automation&lt;br&gt;
✔ Apply real-world debugging&lt;br&gt;
✔ Use production-grade error handling&lt;br&gt;
✔ Follow DevOps scripting best practices&lt;/p&gt;

&lt;p&gt;This Part brings your skill to junior → mid-level DevOps engineer level.&lt;/p&gt;

&lt;p&gt;=================================================================&lt;/p&gt;

&lt;h2&gt;
  
  
  **Part 7 - Real-World DevOps Projects, Interview-Grade Tasks &amp;amp; Advanced Shell Scripting Patterns
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
By Ashish — Learn in Public DevOps Journey (Week 2)&lt;br&gt;
🔗 LinkedIn: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📘 Table of Contents&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why Real-World Shell Scripting Matters for DevOps&lt;/li&gt;
&lt;li&gt;Practical DevOps Project Scenarios (Beginner → Advanced)&lt;/li&gt;
&lt;li&gt;File Automation &amp;amp; Log Processing Scripts&lt;/li&gt;
&lt;li&gt;System Health, Monitoring &amp;amp; Alert Automation&lt;/li&gt;
&lt;li&gt;Networking, Ports &amp;amp; Service Debug Scripts&lt;/li&gt;
&lt;li&gt;Infrastructure Automation (AWS, Docker, Nginx)&lt;/li&gt;
&lt;li&gt;CI/CD Pipeline Shell Tasks&lt;/li&gt;
&lt;li&gt;Interview-Grade Shell Scripting Problems&lt;/li&gt;
&lt;li&gt;Optimization, Best Practices &amp;amp; Production Standards&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Final Summary + Week-2 Completion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🚀 Why Real-World Shell Scripting Matters in DevOps&lt;br&gt;
Shell scripting is not about writing “scripts”;&lt;br&gt;
it’s about automating infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In real DevOps jobs, shell scripts are used to automate:&lt;br&gt;
✔ deployments&lt;br&gt;
✔ server provisioning&lt;br&gt;
✔ log parsing&lt;br&gt;
✔ monitoring&lt;br&gt;
✔ backups&lt;br&gt;
✔ docker builds&lt;br&gt;
✔ pipeline steps&lt;br&gt;
✔ cloud tasks&lt;br&gt;
✔ alerts&lt;/p&gt;

&lt;p&gt;This chapter focuses on everything interviewers expect AND everything real DevOps teams use daily.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧩 Practical DevOps Project Scenarios&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(Beginner → Intermediate → Advanced)&lt;/p&gt;

&lt;p&gt;✅ Scenario 1 — Rotate &amp;amp; Archive Logs Daily (Cron + Shell)&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;log_dir="/var/log/nginx"&lt;br&gt;
backup_dir="/backup/nginx"&lt;/p&gt;

&lt;p&gt;timestamp=$(date +%F-%H-%M)&lt;br&gt;
mkdir -p $backup_dir&lt;/p&gt;

&lt;p&gt;tar -czf "$backup_dir/nginx-$timestamp.tar.gz" $log_dir/*&lt;/p&gt;

&lt;p&gt;echo "Log backup completed: $timestamp"&lt;/p&gt;

&lt;p&gt;Add cronjob:&lt;/p&gt;

&lt;p&gt;0 1 * * * /home/ashish/rotate_logs.sh&lt;/p&gt;

&lt;p&gt;✅ Scenario 2 — Clean Old System Logs Automatically&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;find /var/log -type f -mtime +7 -delete&lt;/p&gt;

&lt;p&gt;Interviewers LOVE this one.&lt;/p&gt;

&lt;p&gt;✅ Scenario 3 — Find Top CPU/Memory Processes &amp;amp; Alert&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;cpu_limit=80&lt;/p&gt;

&lt;p&gt;ps aux --sort=-%cpu | awk -v limit=$cpu_limit '&lt;br&gt;
NR&amp;gt;1 &amp;amp;&amp;amp; $3 &amp;gt; limit {print "HIGH CPU:", $2, $3"%", $11}'&lt;/p&gt;

&lt;p&gt;✅ Scenario 4 — Backup Database Daily&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;mysqldump -u root -pPASSWORD dbname &amp;gt; backup_$(date +%F).sql&lt;/p&gt;

&lt;p&gt;With cron:&lt;br&gt;
0 2 * * * /home/ashish/db_backup.sh&lt;/p&gt;

&lt;p&gt;✅ Scenario 5 — Restart a Service if It’s Down&lt;br&gt;
This script can literally SAVE a production outage:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;service="nginx"&lt;/p&gt;

&lt;p&gt;if ! systemctl is-active --quiet $service; then&lt;br&gt;
    echo "$(date): $service DOWN — restarting"&lt;br&gt;
    systemctl restart $service&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;✅ Scenario 6 — Auto-Deploy Build Artifacts (CI/CD Ready)&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;rsync -avz ./build/ user@server:/var/www/app/&lt;br&gt;
systemctl restart nginx&lt;/p&gt;

&lt;p&gt;Perfect for GitHub Actions, Jenkins, GitLab CI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧪 File Automation &amp;amp; Log Processing Scripts
🔍 Extract all unique IPs from Nginx logs
awk '{print $1}' access.log | sort | uniq&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🛠 Count HTTP 500 errors&lt;br&gt;
grep " 500 " access.log | wc -l&lt;/p&gt;

&lt;p&gt;📂 Find largest files on server (production debugging)&lt;br&gt;
find / -type f -exec du -Sh {} + | sort -rh | head -n 20&lt;/p&gt;

&lt;p&gt;🧹 Delete files older than X days&lt;br&gt;
find /tmp -type f -mtime +3 -delete&lt;/p&gt;

&lt;p&gt;Very common DevOps interview question.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🖥 System Health, Monitoring &amp;amp; Alerts
Memory alert script (interview favorite)
#!/bin/bash
threshold=80&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;used=$(free | awk '/Mem/ {print int($3/$2 * 100)}')&lt;/p&gt;

&lt;p&gt;if [[ $used -gt $threshold ]]; then&lt;br&gt;
    echo "WARNING: RAM usage is ${used}%"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;Disk space alert&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;df -h | awk '$5+0 &amp;gt; 85 {print "HIGH DISK USAGE:", $0}'&lt;/p&gt;

&lt;p&gt;CPU alert&lt;br&gt;
top -bn1 | grep "Cpu(s)"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🌐 Networking, Ports &amp;amp; Service Debug Scripts
Check if a port is open
nc -zv localhost 8080&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Find which process is using a port&lt;br&gt;
sudo lsof -i :8080&lt;/p&gt;

&lt;p&gt;Check DNS resolution in script&lt;br&gt;
nslookup google.com&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;☁️ AWS Automation Scripts (Real DevOps Work)
🔸 Create EC2
🔸 Wait until ready
🔸 Deploy Docker app
🔸 Restart on failure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You already wrote EC2 creation in Part 6.&lt;br&gt;
Here are two more production scripts:&lt;/p&gt;

&lt;p&gt;🛢 Get EC2 instance public IP&lt;br&gt;
aws ec2 describe-instances \&lt;br&gt;
  --instance-ids "$1" \&lt;br&gt;
  --query "Reservations[0].Instances[0].PublicIpAddress" \&lt;br&gt;
  --output text&lt;/p&gt;

&lt;p&gt;🧹 Clean unused EBS snapshots (AWS cost savings)&lt;br&gt;
aws ec2 describe-snapshots --owner self \&lt;br&gt;
 | jq -r '.Snapshots[] | select(.StartTime &amp;lt; "2024-01-01") | .SnapshotId' \&lt;br&gt;
 | xargs -I {} aws ec2 delete-snapshot --snapshot-id {}&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔁 CI/CD Pipeline Shell Scripting Patterns&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Almost every CI/CD pipeline uses:&lt;/p&gt;

&lt;p&gt;✔ mkdir&lt;br&gt;
✔ cp, rsync&lt;br&gt;
✔ sed for config editing&lt;br&gt;
✔ grep/log parsing&lt;br&gt;
✔ exit codes&lt;br&gt;
✔ if conditions&lt;br&gt;
✔ docker build &amp;amp; run&lt;/p&gt;

&lt;p&gt;Example: extract version from package.json&lt;/p&gt;

&lt;p&gt;version=$(grep version package.json | cut -d '"' -f4)&lt;br&gt;
echo "Deploying version: $version"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎯 Interview-Grade Shell Scripting Questions (Your Week 2 Version)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here are the exact problems companies ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Print Fibonacci series up to N&lt;/li&gt;
&lt;li&gt;Reverse a file content&lt;/li&gt;
&lt;li&gt;Find the largest of 3 numbers&lt;/li&gt;
&lt;li&gt;Monitor a log file for a keyword and alert&lt;/li&gt;
&lt;li&gt;Parse CSV and print a column&lt;/li&gt;
&lt;li&gt;Archive and rotate logs&lt;/li&gt;
&lt;li&gt;Validate if a service is running&lt;/li&gt;
&lt;li&gt;Extract IP address from logs&lt;/li&gt;
&lt;li&gt;Write your own “ls” command using shell&lt;/li&gt;
&lt;li&gt;Automate daily backups&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want, I can generate solutions to all 10 (optional).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;📝 Optimization, Best Practices &amp;amp; Production Standards
✔ Use set -euo pipefail
✔ Use functions
✔ Use clear naming
✔ Modular scripts
✔ Avoid hardcoding secrets
✔ Validate inputs
✔ Use logging function
✔ Test scripts with shellcheck&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;log() {&lt;br&gt;
    echo "$(date) — $1"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;🎉 Part 7 Complete — You’ve Reached DevOps-Ready Shell Scripting Level&lt;/p&gt;

&lt;p&gt;By completing Part 7, you’ve achieved:&lt;/p&gt;

&lt;p&gt;✔ Hands-on DevOps automation skills&lt;br&gt;
✔ Cloud scripting knowledge&lt;br&gt;
✔ Error-safe, production-grade syntax&lt;br&gt;
✔ Ability to write monitoring &amp;amp; alerting scripts&lt;br&gt;
✔ Confidence for interviews&lt;br&gt;
✔ CI/CD scripting proficiency&lt;br&gt;
✔ AWS automation capability&lt;br&gt;
✔ Understanding real infrastructure problems&lt;/p&gt;

&lt;p&gt;This completes Week 2 of your Learn-in-Public DevOps Journey.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>bash</category>
      <category>linux</category>
      <category>automation</category>
    </item>
    <item>
      <title>Linux for DevOps - The Complete Hands-On Beginner-to-Advanced Guide (Week 1 Series)</title>
      <dc:creator>Ashish</dc:creator>
      <pubDate>Sun, 16 Nov 2025 20:17:13 +0000</pubDate>
      <link>https://forem.com/ashish0360/linux-for-devops-the-complete-hands-on-beginner-to-advanced-guide-week-1-series-1a68</link>
      <guid>https://forem.com/ashish0360/linux-for-devops-the-complete-hands-on-beginner-to-advanced-guide-week-1-series-1a68</guid>
      <description>&lt;p&gt;Linux for DevOps — Part 1&lt;br&gt;
Linkedin Profile: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;br&gt;
Hashnode Link: &lt;a href="https://devopswithashish.hashnode.dev/linux-for-devops-the-complete-hands-on-beginner-to-advanced-guide-week-1-series" rel="noopener noreferrer"&gt;https://devopswithashish.hashnode.dev/linux-for-devops-the-complete-hands-on-beginner-to-advanced-guide-week-1-series&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introduction + Filesystem &amp;amp; Directory Commands&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
Why Linux Matters in DevOps&lt;br&gt;
Linux System Architecture&lt;br&gt;
Linux Distributions&lt;br&gt;
Setting Up Linux (Windows/Mac/Linux)&lt;br&gt;
Package Managers Explained&lt;br&gt;
Filesystem &amp;amp; Directory Commands (Full Deep Dive)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🚀Why Linux Matters in DevOps
The more I explored Linux this week, the clearer it became why every DevOps engineer, cloud engineer, SRE, and backend developer depends on Linux daily.
Linux is the foundation of DevOps, because it is:
🟦 Cost-Effective
Free and open-source
No licensing fees
Low maintenance and predictable performance
🟦 High Performance
Lightweight and fast
Works on everything from Raspberry Pi to enterprise servers
Efficient memory and process management
🟦 Secure &amp;amp; Reliable
Strong permission system
Very limited malware exposure
Systems can run for years without reboot
Every cloud provider (AWS, GCP, Azure), container runtime (Docker), orchestration system (Kubernetes), infrastructure tool (Terraform), and automation platform (Ansible) runs on Linux.
If you want to be a DevOps engineer, you must master Linux deeply.&lt;/li&gt;
&lt;li&gt;🔧Linux System Architecture (Simple Diagram)
+----------------------------------------------------+
| User Applications (Docker, Vim, Git, Apache, etc.) |
+----------------------------------------------------+
| Shell (Bash, Zsh, Fish, etc.)                      |
+----------------------------------------------------+
| System Libraries (glibc, libc6, OpenSSL, etc.)     |
+----------------------------------------------------+
| System Utilities (ls, grep, ps, systemctl, etc.)   |
+----------------------------------------------------+
| Linux Kernel (Processes, Memory, FS, Network)      |
+----------------------------------------------------+
| Hardware (CPU, RAM, Disk, NICs, Peripherals)       |
+----------------------------------------------------+&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✔ Hardware Layer&lt;br&gt;
Physical components: CPU, RAM, storage, network cards.&lt;br&gt;
✔ Kernel&lt;br&gt;
The brain of Linux.&lt;br&gt;
 Handles:&lt;br&gt;
process scheduling&lt;br&gt;
memory allocation&lt;br&gt;
file systems&lt;br&gt;
networks&lt;br&gt;
drivers&lt;br&gt;
system calls&lt;br&gt;
✔ Shell&lt;br&gt;
Interface between user &amp;amp; kernel.&lt;br&gt;
 Examples: Bash, Zsh, Fish, Ksh.&lt;br&gt;
✔ User Applications&lt;br&gt;
Tools like Docker, Git, Terraform, Jenkins, Nginx, etc.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🐧Linux Distributions (Distros)
Different distros package the Linux kernel with tools and package managers.
⭐ Best distros for DevOps:
Ubuntu (most popular &amp;amp; beginner-friendly)
Debian (stable, reliable)
Fedora (cutting-edge)
AlmaLinux / Rocky Linux (RHEL-based, enterprise)
Arch Linux (advanced users)
Alpine Linux (super lightweight, perfect for Docker)
Kernel source:
&lt;a href="https://git.kernel.org" rel="noopener noreferrer"&gt;https://git.kernel.org&lt;/a&gt;
&lt;a href="https://github.com/torvalds/linux" rel="noopener noreferrer"&gt;https://github.com/torvalds/linux&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🖥️Setting Up Linux (Windows &amp;amp; Mac)
✔ Best Method: Use Docker
Fast, safe, sandboxed environment for DevOps practice.
I won’t repeat commands here — they’re already in your notes above.
(This article will stay focused on filesystem commands.)&lt;/li&gt;
&lt;li&gt;📦Package Managers (Quick Summary)
Distro
Package Manager
Example
Ubuntu/Debian
apt
sudo apt install nginx
RHEL/CentOS
dnf / yum
sudo dnf install nginx
Arch Linux
pacman
sudo pacman -S nginx
OpenSUSE
zypper
sudo zypper install nginx&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Commands:&lt;br&gt;
sudo apt update&lt;br&gt;
sudo apt upgrade -y&lt;br&gt;
sudo apt install nginx&lt;br&gt;
sudo apt remove nginx&lt;br&gt;
sudo apt autoremove&lt;br&gt;
⭐6. FILESYSTEM &amp;amp; DIRECTORY COMMANDS (FULL DETAILED VERSION)&lt;br&gt;
This is where Part 1 becomes extremely valuable.&lt;br&gt;
 Every command below includes:&lt;br&gt;
Definition&lt;br&gt;
What it does&lt;br&gt;
Why DevOps uses it&lt;br&gt;
Practical example&lt;br&gt;
Variations&lt;br&gt;
Notes (dangerous flags highlighted)&lt;br&gt;
6.1 ls — List Files&lt;br&gt;
Definition:&lt;br&gt;
Lists files and directories.&lt;br&gt;
What it does:&lt;br&gt;
Shows names, sizes, permissions, timestamps, and ownership.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Checking log files&lt;br&gt;
Checking deployment directories&lt;br&gt;
Debugging incorrect paths&lt;br&gt;
Inspecting mounted volumes in Docker/K8s&lt;br&gt;
Example:&lt;br&gt;
ls -ltr&lt;br&gt;
l = long format&lt;br&gt;
t = sort by latest&lt;br&gt;
r = reverse order&lt;br&gt;
Variations:&lt;br&gt;
ls -a     # show hidden files&lt;br&gt;
ls -lh    # human readable sizes&lt;br&gt;
ls -R     # recursive&lt;/p&gt;

&lt;p&gt;6.2 pwd — Print Working Directory&lt;br&gt;
Definition:&lt;br&gt;
Displays the absolute path of the current directory.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Confirm before deleting&lt;br&gt;
Confirm before copying files&lt;br&gt;
Debug script working directories&lt;br&gt;
Example:&lt;br&gt;
pwd&lt;/p&gt;

&lt;h1&gt;
  
  
  /var/www/app
&lt;/h1&gt;

&lt;p&gt;6.3 cd — Change Directory&lt;br&gt;
Definition:&lt;br&gt;
Navigates between directories.&lt;br&gt;
Examples:&lt;br&gt;
cd /etc/nginx&lt;br&gt;
cd ~&lt;br&gt;
cd ..&lt;br&gt;
cd -&lt;/p&gt;

&lt;p&gt;Notes:&lt;br&gt;
cd - returns to the previous directory.&lt;br&gt;
6.4 touch — Create Empty File&lt;br&gt;
Definition:&lt;br&gt;
Creates a new file or updates timestamp.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Create placeholders&lt;br&gt;
Trigger builds watching timestamps&lt;br&gt;
Create test logs&lt;br&gt;
Example:&lt;br&gt;
touch app.log&lt;/p&gt;

&lt;p&gt;6.5 mkdir — Create Directory&lt;br&gt;
Example:&lt;br&gt;
mkdir logs&lt;br&gt;
Create nested directories:&lt;br&gt;
mkdir -p /opt/app/logs&lt;/p&gt;

&lt;p&gt;6.6 rmdir — Remove Empty Directory&lt;br&gt;
Example:&lt;br&gt;
rmdir oldfolder&lt;/p&gt;

&lt;p&gt;⚠️ Only works if directory is empty.&lt;br&gt;
6.7 rm — Remove Files or Directories&lt;br&gt;
Definition:&lt;br&gt;
Deletes files/folders.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Delete artifacts/logs&lt;br&gt;
Clean build folders&lt;br&gt;
Examples:&lt;br&gt;
rm file.txt&lt;br&gt;
rm -r folder/&lt;br&gt;
rm -rf /tmp/data&lt;br&gt;
⚠️ Danger: Never run rm -rf /.&lt;br&gt;
6.8 cp — Copy Files&lt;br&gt;
Examples:&lt;br&gt;
cp a.txt b.txt&lt;br&gt;
cp -r /var/www /backup&lt;/p&gt;

&lt;p&gt;6.9 mv — Move or Rename&lt;br&gt;
Example:&lt;br&gt;
mv config.old config.yaml&lt;br&gt;
6.10 cat — Show File Content&lt;br&gt;
Example:&lt;br&gt;
cat /etc/hostname&lt;/p&gt;

&lt;p&gt;6.11 tac — Show File in Reverse&lt;br&gt;
Example:&lt;br&gt;
tac server.log&lt;/p&gt;

&lt;p&gt;6.12 head — First Lines&lt;br&gt;
head -n 20 file.txt&lt;/p&gt;

&lt;p&gt;6.13 tail — Last Lines&lt;br&gt;
tail -n 20 access.log&lt;/p&gt;

&lt;p&gt;Live logs:&lt;br&gt;
tail -f /var/log/syslog&lt;/p&gt;

&lt;p&gt;6.14 wc — Word Count&lt;br&gt;
wc -l app.log&lt;/p&gt;

&lt;p&gt;6.15 echo — Print / Write Content&lt;br&gt;
echo "Hello World"&lt;br&gt;
echo "PORT=8080" &amp;gt; app.env&lt;/p&gt;

&lt;p&gt;6.16 cut — Extract Columns&lt;br&gt;
cut -d',' -f2 users.csv&lt;br&gt;
6.17 diff — Compare Files&lt;br&gt;
diff old.conf new.conf&lt;/p&gt;

&lt;p&gt;6.18 ln — Create Links&lt;br&gt;
Soft link:&lt;br&gt;
ln -s /var/www/html index&lt;br&gt;
Hard link:&lt;br&gt;
ln file1 file2&lt;/p&gt;

&lt;p&gt;6.19 zcat — View Compressed Files&lt;br&gt;
zcat logs.gz&lt;/p&gt;

&lt;p&gt;6.20 which — Locate Executable Path&lt;br&gt;
which python3&lt;/p&gt;

&lt;p&gt;6.21 file — Identify File Type&lt;br&gt;
file script.sh&lt;/p&gt;

&lt;p&gt;Linux for DevOps — Part 2&lt;br&gt;
Viewers, Editors &amp;amp; File Inspection Commands&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
This is one of the most important sections because DevOps engineers read logs, inspect configs, debug deployments, and modify system files daily.&lt;br&gt;
📘 Table of Contents&lt;br&gt;
File Viewing Tools&lt;br&gt;
cat, tac, more, less, head, tail, tail -f, nl, od, strings, zcat&lt;br&gt;
Redirection &amp;amp; Output Tools&lt;br&gt;
Tee, echo&lt;br&gt;
Editors&lt;br&gt;
nano, vi / vim&lt;br&gt;
Using Editors in DevOps Tasks&lt;br&gt;
Summary &amp;amp; Next Section&lt;/p&gt;

&lt;p&gt;⭐ 1. File Viewing Tools&lt;br&gt;
These commands help you inspect file contents, logs, configs, and scripts, the daily life of a DevOps engineer.&lt;br&gt;
1.1 cat — Display File Content&lt;br&gt;
Definition: &lt;br&gt;
Concatenates and prints file content to the terminal.&lt;br&gt;
What it does:&lt;br&gt;
Shows the entire content, useful for small/medium-sized files.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Inspect environment files&lt;br&gt;
View configs (nginx.conf, .env)&lt;br&gt;
Check last updated logs&lt;br&gt;
Example:&lt;br&gt;
cat /etc/os-release&lt;br&gt;
Variation:&lt;br&gt;
cat file1 file2 &amp;gt; merged.txt&lt;/p&gt;

&lt;p&gt;1.2 tac — Display File Content in Reverse Order&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
Logs append new entries at the bottom.&lt;br&gt;
 tac helps examine the latest entries first.&lt;br&gt;
Example:&lt;br&gt;
tac application.log&lt;/p&gt;

&lt;p&gt;1.3 more — Page Through File&lt;br&gt;
Definition:&lt;br&gt;
Displays file one page at a time.&lt;br&gt;
Example:&lt;br&gt;
more /var/log/syslog&lt;/p&gt;

&lt;p&gt;Note:&lt;br&gt;
Only supports forward movement.&lt;br&gt;
1.4 less — Advanced File Viewer (Better than more)&lt;br&gt;
Definition:&lt;br&gt;
Interactive file viewer with scrolling.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Inspect huge log files&lt;br&gt;
Search inside configs&lt;br&gt;
Scroll back-and-forth easily&lt;br&gt;
Example:&lt;br&gt;
less /var/log/auth.log&lt;br&gt;
Navigation:&lt;br&gt;
Up/Down arrows → scroll&lt;br&gt;
G → go to end&lt;br&gt;
1G → go to top&lt;br&gt;
/keyword → search&lt;br&gt;
1.5 head — Show First Lines&lt;br&gt;
Example:&lt;br&gt;
head -n 20 nginx.conf&lt;/p&gt;

&lt;p&gt;1.6 tail — Show Last Lines&lt;br&gt;
Example:&lt;br&gt;
tail -n 20 access.log&lt;/p&gt;

&lt;p&gt;1.7 tail -f — Live Log Monitoring&lt;br&gt;
Definition:&lt;br&gt;
Follow file changes in real-time.&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
💡 This is one of the MOST used DevOps commands.&lt;br&gt;
Monitor services&lt;br&gt;
Watch logs during deployment&lt;br&gt;
Debug CI/CD issues&lt;br&gt;
Observe API requests in real time&lt;br&gt;
Example:&lt;br&gt;
tail -f /var/log/syslog&lt;/p&gt;

&lt;p&gt;1.8 nl — Add Line Numbers to Output&lt;br&gt;
Definition: Prints file with numbered lines.&lt;br&gt;
Example: nl index.html&lt;br&gt;
Useful when:&lt;br&gt;
Debugging long config files&lt;br&gt;
Reviewing scripts with errors&lt;br&gt;
1.9 od — View File in Octal/Hex Format&lt;br&gt;
Definition: Displays binary files in readable form.&lt;br&gt;
Example: od -c myfile.bin&lt;br&gt;
Use-cases for DevOps:&lt;br&gt;
Inspect corrupted config&lt;br&gt;
Debug unusual characters&lt;br&gt;
1.10 strings — Extract Text from Binary&lt;br&gt;
Definition: Prints readable text from binary files.&lt;br&gt;
Example: strings /usr/bin/ssh&lt;/p&gt;

&lt;p&gt;1.11 zcat — View GZipped Files&lt;br&gt;
Definition:&lt;br&gt;
Read .gz compressed files without decompressing.&lt;br&gt;
Example:&lt;br&gt;
zcat nginx-access.log.gz&lt;br&gt;
⭐ 2. Redirection &amp;amp; Output Tools&lt;br&gt;
2.1 echo — Print or Write Text&lt;br&gt;
Examples:&lt;br&gt;
echo "Hello World"&lt;br&gt;
echo "ENV=prod" &amp;gt; app.env&lt;br&gt;
echo "PORT=8080" &amp;gt;&amp;gt; app.env&lt;/p&gt;

&lt;p&gt;Uses for DevOps:&lt;br&gt;
Append environment variables&lt;br&gt;
Create config files dynamically&lt;br&gt;
Print messages inside scripts&lt;br&gt;
2.2 tee — Write Output to File + Display&lt;br&gt;
Definition: Sends output to terminal and saves it to file.&lt;br&gt;
Example: echo "server restarted" | tee /var/log/restart.log&lt;/p&gt;

&lt;p&gt;Use-case: Logging automation scripts.&lt;/p&gt;

&lt;p&gt;⭐ 3. Editors&lt;br&gt;
3.1 nano — Simple Text Editor&lt;br&gt;
Definition: Beginner-friendly terminal editor.&lt;br&gt;
Example: nano config.yaml&lt;/p&gt;

&lt;p&gt;Common Shortcuts:&lt;br&gt;
Ctrl + O → Save&lt;br&gt;
Ctrl + X → Exit&lt;br&gt;
Ctrl + K → Cut line&lt;br&gt;
Ctrl + U → Paste&lt;br&gt;
3.2 vi / vim — Advanced Text Editor&lt;br&gt;
Definition: Powerful modal editor used heavily in DevOps/SRE work.&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
Edit configs in servers&lt;br&gt;
Edit YAML, scripts, Dockerfiles&lt;br&gt;
Works in all environments (SSH, containers, recovery mode)&lt;/p&gt;

&lt;p&gt;⭐ VIM MODES&lt;br&gt;
Mode&lt;br&gt;
Purpose&lt;br&gt;
Normal&lt;br&gt;
Navigation &amp;amp; commands&lt;br&gt;
Insert&lt;br&gt;
Editing text&lt;br&gt;
Command&lt;br&gt;
Save, quit, search&lt;/p&gt;

&lt;p&gt;Switching:&lt;br&gt;
i → insert&lt;br&gt;
Esc → normal&lt;br&gt;
: → command mode&lt;br&gt;
⭐ Most Used VIM Commands&lt;br&gt;
Save &amp;amp; Quit&lt;br&gt;
:w       # save&lt;br&gt;
:wq      # save &amp;amp; quit&lt;br&gt;
:q!      # quit without saving&lt;br&gt;
Navigation&lt;br&gt;
h j k l         # left, down, up, right&lt;br&gt;
0               # start of line&lt;br&gt;
$               # end of line&lt;br&gt;
gg              # start of file&lt;br&gt;
G               # end of file&lt;br&gt;
:n              # go to line n&lt;/p&gt;

&lt;p&gt;Editing&lt;br&gt;
x       # delete char&lt;br&gt;
dd      # delete line&lt;br&gt;
yy      # copy (yank)&lt;br&gt;
p       # paste&lt;br&gt;
u       # undo&lt;br&gt;
Ctrl+r  # redo&lt;/p&gt;

&lt;p&gt;Search&lt;br&gt;
/pattern&lt;br&gt;
n&lt;br&gt;
N&lt;/p&gt;

&lt;p&gt;⭐ 4. Using Editors in DevOps&lt;br&gt;
Use-cases:&lt;br&gt;
Edit nginx/apache configs&lt;br&gt;
Update environment variable files (.env)&lt;br&gt;
Modify system configs in /etc/&lt;br&gt;
Fix shell scripts&lt;br&gt;
Edit Dockerfiles, Jenkinsfiles&lt;br&gt;
Make changes inside Linux containers&lt;br&gt;
Every DevOps engineer uses vim daily — especially over SSH.&lt;/p&gt;

&lt;p&gt;Linux for DevOps — Part 3&lt;br&gt;
Text Processing: grep, awk, sed&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Introduction — Why Text Processing Matters in DevOps&lt;br&gt;
✔ grep — Pattern Searching (Basic → Advanced)&lt;br&gt;
✔ sed — Stream Editing (Line Edits, Replacements, Filters)&lt;br&gt;
✔ awk — Text Extraction, Filters, Reports&lt;br&gt;
✔ Practical DevOps Log Examples&lt;br&gt;
✔ Real-World Automation One-Liners&lt;br&gt;
✔ Summary &amp;amp; Next Part&lt;br&gt;
⭐ 1. Why Text Processing Is Critical for DevOps&lt;br&gt;
As a DevOps engineer, your entire workflow revolves around:&lt;br&gt;
Logs&lt;br&gt;
Configs&lt;br&gt;
YAML/JSON files&lt;br&gt;
System metrics&lt;br&gt;
CI/CD output&lt;br&gt;
Kubernetes events&lt;br&gt;
Network traces&lt;br&gt;
Monitoring alerts&lt;/p&gt;

&lt;p&gt;And the three tools that dominate every Linux-based DevOps environment are:&lt;br&gt;
👉 grep — find patterns&lt;br&gt;
👉 sed — modify text&lt;br&gt;
👉 awk — extract, manipulate &amp;amp; report text&lt;br&gt;
Every DevOps/sre uses these commands daily.&lt;br&gt;
⭐ 2. grep — Global Regular Expression Print&lt;br&gt;
Definition: Searches for patterns inside files or command outputs.&lt;br&gt;
What it does: Finds matching text, filters lines, highlights patterns.&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
Debug errors in logs&lt;br&gt;
Extract warning or failure messages&lt;br&gt;
Filter Kubernetes logs&lt;br&gt;
Analyze API access logs&lt;br&gt;
Search configs during outages&lt;br&gt;
Validate environment variables&lt;br&gt;
🔹 2.1 Basic grep Usage&lt;br&gt;
Example — Search for “error” inside a log:&lt;br&gt;
grep "error" app.log&lt;br&gt;
Case-insensitive search:&lt;br&gt;
grep -i "error" app.log&lt;br&gt;
🔹 2.2 Search recursively (folders)&lt;br&gt;
grep -r "timeout" /var/log/&lt;br&gt;
Use-case:&lt;br&gt;
 Search entire server logs for an error.&lt;br&gt;
🔹 2.3 Count how many times a pattern appears&lt;br&gt;
grep -c "404" access.log&lt;br&gt;
🔹 2.4 Show line numbers&lt;br&gt;
grep -n "invalid" /var/log/auth.log&lt;br&gt;
🔹 2.5 Invert match (show NON-matching lines)&lt;br&gt;
grep -v "200" access.log&lt;br&gt;
Useful for finding errors in successful requests.&lt;br&gt;
🔹 2.6 Highlight matches&lt;br&gt;
grep --color=auto "failed" /var/log/secure&lt;br&gt;
🔹 2.7 Filter processes&lt;br&gt;
ps aux | grep nginx&lt;br&gt;
This command is used by DevOps engineers hundreds of times.&lt;br&gt;
🔹 2.8 Regex Search&lt;br&gt;
End with .log:&lt;br&gt;
ls | grep ".log$"&lt;br&gt;
Match numbers:&lt;br&gt;
grep -E "[0-9]+" file.txt&lt;br&gt;
⭐ 3. sed — Stream Editor&lt;br&gt;
Definition:&lt;br&gt;
Edits text in a stream (file or pipeline) without opening an editor.&lt;br&gt;
What it does:&lt;br&gt;
Replace text&lt;br&gt;
Delete lines&lt;br&gt;
Extract lines&lt;br&gt;
Insert content&lt;br&gt;
Modify config files automatically&lt;br&gt;
Why DevOps uses sed:&lt;br&gt;
Automate config editing&lt;br&gt;
Mass update parameters&lt;br&gt;
Modify YAML/JSON in CI/CD&lt;br&gt;
Fix logs in pipelines&lt;br&gt;
Edit environment files&lt;br&gt;
🔹 3.1 Replace Text (Global Replace)&lt;br&gt;
Replace “error” with “failed”:&lt;br&gt;
sed 's/error/failed/g' app.log&lt;br&gt;
Case-insensitive:&lt;br&gt;
sed 's/error/failed/gi' app.log&lt;br&gt;
🔹 3.2 Replace text in a specific line range&lt;br&gt;
sed '1,5 s/debug/info/g' log.txt&lt;br&gt;
🔹 3.3 Print only matching lines&lt;br&gt;
sed -n '/timeout/p' server.log&lt;br&gt;
Equivalent to:&lt;br&gt;
grep "timeout" server.log&lt;br&gt;
🔹 3.4 Show line numbers where pattern matches&lt;br&gt;
sed -n -e '/error/=' server.log&lt;br&gt;
🔹 3.5 Combine multiple sed operations&lt;br&gt;
sed -n -e '/error/=' -e '/error/p' logfile&lt;br&gt;
🔹 3.6 Delete lines matching a pattern&lt;br&gt;
sed '/DEBUG/d' app.log&lt;br&gt;
🔹 3.7 Insert a line before a match&lt;br&gt;
sed '/server {/i # Managed by DevOps' nginx.conf&lt;br&gt;
🔹 3.8 Inline editing (overwrite original file)&lt;br&gt;
sed -i 's/old/new/g' config.yaml&lt;br&gt;
⚠ Use with care — this modifies the file permanently.&lt;br&gt;
⭐ 4. awk — Text Processing &amp;amp; Reporting Language&lt;br&gt;
Definition:&lt;br&gt;
A powerful pattern-based text processing tool.&lt;br&gt;
What it does:&lt;br&gt;
Extracts columns&lt;br&gt;
Filters rows&lt;br&gt;
Performs calculations&lt;br&gt;
Formats reports&lt;br&gt;
Processes logs&lt;br&gt;
Processes CSV/TSV&lt;br&gt;
Why DevOps uses awk:&lt;br&gt;
Analyze log fields&lt;br&gt;
Extract IPs&lt;br&gt;
Process CPU/memory data&lt;br&gt;
parse API responses&lt;br&gt;
Generate metrics&lt;br&gt;
Extract from kubectl outputs&lt;/p&gt;

&lt;p&gt;🔹 4.1 Print specific columns&lt;br&gt;
awk '{print $1, $3}' file.txt&lt;br&gt;
$1 = first column&lt;br&gt;
 $3 = third column&lt;br&gt;
🔹 4.2 Filter by pattern and print fields&lt;br&gt;
awk '/error/ {print $2, $5}' app.log&lt;br&gt;
🔹 4.3 Count lines matching condition&lt;br&gt;
awk '/404/ {count++} END {print count}' access.log&lt;br&gt;
🔹 4.4 Use numerical conditions&lt;br&gt;
Print IPs in a specific range:&lt;br&gt;
awk '$2 &amp;gt;= "10.10.11.14" &amp;amp;&amp;amp; $2 &amp;lt;= "10.10.11.51" {print $2}' file&lt;br&gt;
🔹 4.5 Print lines with &amp;gt; X response time&lt;br&gt;
awk '$5 &amp;gt; 500 {print $0}' api.log&lt;br&gt;
🔹 4.6 awk as a CSV processor&lt;br&gt;
awk -F',' '{print $1,$3}' users.csv&lt;br&gt;
-F sets delimiter.&lt;br&gt;
🔹 4.7 Sum values (analytics)&lt;br&gt;
Example: sum total bytes from access logs:&lt;br&gt;
awk '{sum += $10} END {print sum}' access.log&lt;br&gt;
⭐ 5. Practical DevOps Examples&lt;br&gt;
These are commands you’ll use daily as a DevOps engineer.&lt;br&gt;
➡️ 5.1 Check how many 500 errors occurred today&lt;br&gt;
grep " 500 " access.log | wc -l&lt;br&gt;
➡️ 5.2 Extract all unique IPs&lt;br&gt;
awk '{print $1}' access.log | sort | uniq&lt;br&gt;
➡️ 5.3 Monitor logs for timeouts&lt;br&gt;
grep -i "timeout" -r /var/log/&lt;br&gt;
➡️ 5.4 Replace environment variable in CI&lt;br&gt;
sed -i 's/ENV=dev/ENV=prod/g' .env&lt;br&gt;
➡️ 5.5 Analyze API response times&lt;br&gt;
awk '$9 &amp;gt; 400 {print $1, $9}' access.log&lt;br&gt;
➡️ 5.6 Extract disk usage from df -h&lt;br&gt;
df -h | awk 'NR&amp;gt;1 {print $1, $5}'&lt;br&gt;
⭐ 6. DevOps One-Liner Automations&lt;br&gt;
✔ Restart service if memory crosses threshold&lt;br&gt;
free -m | awk '/Mem/ {if($3/$2*100 &amp;gt; 90) print "Restart needed!"}'&lt;br&gt;
✔ Detect high CPU processes&lt;br&gt;
ps aux | awk '$3 &amp;gt; 50 {print $0}'&lt;br&gt;
✔ Validate YAML indentation in CI/CD&lt;br&gt;
sed -n '/^[[:space:]]{2}[^ ]/p' file.yaml&lt;br&gt;
✔ Extract container IDs using grep + awk&lt;br&gt;
docker ps | grep nginx | awk '{print $1}'&lt;/p&gt;

&lt;p&gt;📝 Linux for DevOps — Part 4&lt;br&gt;
User, Group &amp;amp; Permission Management&lt;br&gt;
By Ashish — Learn in Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Users &amp;amp; User Accounts&lt;br&gt;
useradd, adduser, userdel, passwd, su, Id, who / whoami&lt;br&gt;
✔ Groups &amp;amp; Group Management&lt;br&gt;
groupadd, groupdel, gpasswd, usermod (group membership)&lt;br&gt;
✔ Permissions (rwx)&lt;br&gt;
chmod, chown, chgrp, umask, special bits (SUID, SGID, Sticky Bit)&lt;br&gt;
✔ Understanding Permission Structure&lt;br&gt;
✔ Practical DevOps Scenarios&lt;br&gt;
✔ Security Best Practices&lt;br&gt;
✔ Summary &amp;amp; Next Part&lt;/p&gt;

&lt;p&gt;⭐ 1. What Are Users &amp;amp; Groups in Linux?&lt;br&gt;
Linux has a powerful permission model based on:&lt;br&gt;
User (owner) — who created the file&lt;br&gt;
Group — team members&lt;br&gt;
Others — everyone else&lt;br&gt;
Every resource (file, folder, process, service) has ownership + permissions.&lt;br&gt;
This is why as a DevOps engineer you MUST understand:&lt;br&gt;
Who can run a script?&lt;br&gt;
Who can read logs?&lt;br&gt;
Who can restart services?&lt;br&gt;
Who can modify CI/CD configs?&lt;br&gt;
Who can access production servers?&lt;br&gt;
Now let’s go one by one.&lt;br&gt;
⭐ 2. User Management Commands&lt;br&gt;
2.1 useradd — Create a New User (Low-Level)&lt;br&gt;
Definition:&lt;br&gt;
Creates a new user account.&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
Create service accounts&lt;br&gt;
Create users for automation&lt;br&gt;
Create test users inside containers&lt;br&gt;
Add temporary developers/engineers&lt;br&gt;
Example:&lt;br&gt;
sudo useradd -m ashish&lt;br&gt;
-m creates a home directory (/home/ashish)&lt;br&gt;
Common flags:&lt;br&gt;
useradd -s /bin/bash ashish   # set default shell&lt;br&gt;
useradd -d /data ashish       # custom home directory&lt;br&gt;
useradd -u 1050 ashish        # specify UID&lt;/p&gt;

&lt;p&gt;2.2 adduser — High-Level User Creation (Recommended)&lt;br&gt;
Definition: Interactive wrapper for useradd.&lt;br&gt;
Example: sudo adduser devopsuser&lt;br&gt;
Prompts for:&lt;br&gt;
password&lt;br&gt;
full name&lt;br&gt;
phone&lt;br&gt;
room, etc.&lt;br&gt;
Use-case:&lt;br&gt;
Best for human users (developers, admins).&lt;br&gt;
2.3 passwd — Set or Change User Password&lt;br&gt;
Example:&lt;br&gt;
sudo passwd ashish&lt;/p&gt;

&lt;p&gt;Why DevOps uses it:&lt;br&gt;
Reset developer access&lt;br&gt;
Set passwords for test accounts&lt;br&gt;
Update service account credentials&lt;br&gt;
2.4 userdel — Delete User&lt;br&gt;
Example:&lt;br&gt;
sudo userdel ashish&lt;br&gt;
Delete home directory too:&lt;br&gt;
sudo userdel -r ashish&lt;/p&gt;

&lt;p&gt;2.5 su — Switch User&lt;br&gt;
Example:&lt;br&gt;
su ashish&lt;br&gt;
Switch to root:&lt;br&gt;
su -&lt;/p&gt;

&lt;p&gt;2.6 who — List Logged-In Users&lt;br&gt;
who&lt;br&gt;
Useful for multi-admin servers.&lt;br&gt;
2.7 whoami — Current User&lt;br&gt;
whoami&lt;/p&gt;

&lt;p&gt;2.8 id — Show User Identity&lt;br&gt;
Displays UID, GID, and group memberships.&lt;br&gt;
Example:&lt;br&gt;
id ashish&lt;/p&gt;

&lt;p&gt;⭐ 3. Group Management&lt;br&gt;
3.1 groupadd — Create Group&lt;br&gt;
sudo groupadd devops&lt;br&gt;
Used to group users by role.&lt;br&gt;
3.2 gpasswd — Manage Group Membership&lt;br&gt;
Add user to group:&lt;br&gt;
sudo gpasswd -a ashish devops&lt;br&gt;
Remove user:&lt;br&gt;
sudo gpasswd -d ashish devops&lt;br&gt;
Set multiple users:&lt;br&gt;
sudo gpasswd -m user1,user2 devops&lt;/p&gt;

&lt;p&gt;3.3 groupdel — Delete Group&lt;br&gt;
sudo groupdel devops&lt;/p&gt;

&lt;p&gt;⭐ 4. Permission Bits (rwx)&lt;br&gt;
Linux permissions are shown like:&lt;br&gt;
-rwxr-xr--&lt;/p&gt;

&lt;p&gt;Breakdown:&lt;br&gt;
Position&lt;br&gt;
Meaning&lt;br&gt;
1&lt;br&gt;
file type (-, d, l)&lt;br&gt;
2–4&lt;br&gt;
owner permissions&lt;br&gt;
5–7&lt;br&gt;
group permissions&lt;br&gt;
8–10&lt;br&gt;
others permissions&lt;/p&gt;

&lt;p&gt;rwx = read, write, execute&lt;/p&gt;

&lt;p&gt;⭐ 5. chmod — Change Permissions&lt;br&gt;
Definition:&lt;br&gt;
Sets read/write/execute permissions.&lt;br&gt;
5.1 Numeric (Octal) Notation&lt;br&gt;
Value&lt;br&gt;
Permission&lt;br&gt;
4&lt;br&gt;
read&lt;br&gt;
2&lt;br&gt;
write&lt;br&gt;
1&lt;br&gt;
execute&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
chmod 755 script.sh&lt;br&gt;
chmod 644 config.yaml&lt;br&gt;
chmod 700 id_rsa&lt;/p&gt;

&lt;p&gt;5.2 Symbolic Notation&lt;br&gt;
chmod u+x script.sh&lt;br&gt;
chmod g-w config.yaml&lt;br&gt;
chmod o=r file&lt;/p&gt;

&lt;p&gt;⭐ 6. chown — Change Owner&lt;br&gt;
Example:&lt;br&gt;
sudo chown ashish:devops file.txt&lt;br&gt;
Only change user:&lt;br&gt;
sudo chown ashish file.txt&lt;br&gt;
Only change group:&lt;br&gt;
sudo chown :devops file.txt&lt;/p&gt;

&lt;p&gt;⭐ 7. chgrp — Change Group&lt;br&gt;
sudo chgrp devops file.txt&lt;/p&gt;

&lt;p&gt;⭐ 8. umask — Default Permissions&lt;br&gt;
Definition: Controls default permissions for new files.&lt;br&gt;
Example: umask 022&lt;/p&gt;

&lt;p&gt;⭐ 9. Special Permissions (Advanced &amp;amp; Important)&lt;br&gt;
These are used heavily in servers.&lt;br&gt;
9.1 SUID (Set User ID)&lt;br&gt;
Runs file with owner’s permissions.&lt;br&gt;
chmod u+s /usr/bin/passwd&lt;/p&gt;

&lt;p&gt;Used so normal users can change passwords.&lt;br&gt;
9.2 SGID (Set Group ID)&lt;br&gt;
Runs file with group’s permissions OR inherited group for directories.&lt;br&gt;
chmod g+s /shared&lt;/p&gt;

&lt;p&gt;Team shared folders use this.&lt;br&gt;
9.3 Sticky Bit&lt;br&gt;
Only file owner can delete files in a directory.&lt;br&gt;
Used in /tmp.&lt;br&gt;
chmod +t /tmp&lt;/p&gt;

&lt;p&gt;⭐ 10. DevOps Use-Cases &amp;amp; Real Scenarios&lt;br&gt;
➡️ 10.1 Shared Deployment Folder&lt;br&gt;
sudo mkdir /var/www/app&lt;br&gt;
sudo chown -R deploy:devops /var/www/app&lt;br&gt;
sudo chmod -R 775 /var/www/app&lt;/p&gt;

&lt;p&gt;➡️ 10.2 CI/CD Needs Permission to Restart Services&lt;br&gt;
sudo usermod -aG systemd-cgls jenkins&lt;/p&gt;

&lt;p&gt;➡️ 10.3 Give script execution permission&lt;br&gt;
chmod +x deploy.sh&lt;/p&gt;

&lt;p&gt;➡️ 10.4 Docker volume permission fix&lt;br&gt;
sudo chown -R $USER:$USER /var/lib/docker/volumes&lt;/p&gt;

&lt;p&gt;➡️ 10.5 Prevent developers from deleting each other's files&lt;br&gt;
chmod +t /project/shared&lt;/p&gt;

&lt;p&gt;📝 Linux for DevOps — Part 5&lt;br&gt;
Process, Job &amp;amp; Service Management&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Understanding Linux Processes&lt;br&gt;
✔ ps — View Processes&lt;br&gt;
✔ top / htop — Real-Time Monitoring&lt;br&gt;
✔ pgrep / pidof — Find Processes&lt;br&gt;
✔ kill / pkill / killall — Terminate Processes&lt;br&gt;
✔ nice &amp;amp; renice — CPU Priority Control&lt;br&gt;
✔ jobs / bg / fg — Background &amp;amp; Foreground Jobs&lt;br&gt;
✔ nohup — Run Commands After Logout&lt;br&gt;
✔ systemctl — Manage Services (Super Important)&lt;br&gt;
✔ Practical DevOps Scenarios&lt;br&gt;
✔ Troubleshooting One-Liners&lt;/p&gt;

&lt;p&gt;⭐ 1. What is a Process?&lt;br&gt;
A process is a running program.&lt;br&gt;
 Every process has:&lt;br&gt;
PID (Process ID)&lt;br&gt;
PPID (Parent Process ID)&lt;br&gt;
UID (User who started it)&lt;br&gt;
State: running, sleeping, stopped, zombie&lt;br&gt;
CPU &amp;amp; memory usage&lt;br&gt;
Start time / elapsed time&lt;/p&gt;

&lt;p&gt;Linux uses a hierarchical process tree:&lt;br&gt;
systemd → parent for everything&lt;br&gt;
 ├─ sshd&lt;br&gt;
 ├─ nginx&lt;br&gt;
 ├─ docker&lt;br&gt;
 └─ kubelet&lt;br&gt;
Understanding processes is critical during:&lt;br&gt;
Outages&lt;br&gt;
High CPU/memory alerts&lt;br&gt;
Crashes&lt;br&gt;
Deployment issues&lt;br&gt;
Network failures&lt;br&gt;
Resource bottlenecks&lt;br&gt;
⭐ 2. ps — View Running Processes&lt;br&gt;
Definition:&lt;br&gt;
Displays process information.&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
Investigate memory leaks&lt;br&gt;
Check running apps&lt;br&gt;
Debug crashes&lt;br&gt;
Search for failed processes&lt;br&gt;
Audit whether a service is running&lt;br&gt;
2.1 Basic process list&lt;br&gt;
ps&lt;/p&gt;

&lt;p&gt;2.2 Full process list&lt;br&gt;
ps -ef&lt;br&gt;
Shows:&lt;br&gt;
PID&lt;br&gt;
Parent PID&lt;br&gt;
Start time&lt;br&gt;
Command&lt;br&gt;
2.3 Detailed metrics (CPU/MEM)&lt;br&gt;
ps aux&lt;br&gt;
Output includes:&lt;br&gt;
%CPU&lt;br&gt;
%MEM&lt;br&gt;
TTY&lt;br&gt;
COMMAND&lt;br&gt;
2.4 Filter by process name&lt;br&gt;
ps aux | grep nginx&lt;br&gt;
DevOps uses this daily.&lt;br&gt;
⭐ 3. top — Live Process Monitoring&lt;br&gt;
Definition: Interactive real-time process viewer.&lt;br&gt;
Use-Cases: &lt;br&gt;
High CPU investigation&lt;br&gt;
Memory inspection&lt;br&gt;
Identify hung/stuck processes&lt;br&gt;
Live debugging during traffic spikes&lt;br&gt;
Run top:&lt;br&gt;
top&lt;br&gt;
Useful keys:&lt;br&gt;
k → kill a process&lt;br&gt;
r → renice&lt;br&gt;
P → sort by CPU&lt;br&gt;
M → sort by memory&lt;br&gt;
q → quit&lt;br&gt;
⭐ 4. htop — Enhanced top&lt;br&gt;
Better UI, colors, CPU graphs.&lt;br&gt;
htop&lt;/p&gt;

&lt;p&gt;Why DevOps loves it:&lt;br&gt;
Mouse support&lt;br&gt;
Easy process killing&lt;br&gt;
Clear CPU/memory visualization&lt;/p&gt;

&lt;p&gt;(May require installation)&lt;br&gt;
sudo apt install htop&lt;br&gt;
⭐ 5. pgrep — Find PIDs by Name&lt;br&gt;
Definition: Search for a process by name.&lt;br&gt;
Example: pgrep nginx&lt;/p&gt;

&lt;p&gt;Return:&lt;br&gt;
List of PIDs running nginx.&lt;br&gt;
⭐ 6. pidof — Return PID of Program&lt;br&gt;
pidof sshd&lt;/p&gt;

&lt;p&gt;Useful for automation scripts.&lt;br&gt;
⭐ 7. kill — Terminate Process by PID&lt;br&gt;
Definition: Sends signal to a process.&lt;br&gt;
Graceful stop:&lt;br&gt;
kill PID&lt;br&gt;
Force kill (dangerous):&lt;br&gt;
kill -9 PID&lt;br&gt;
Used when:&lt;br&gt;
Program hangs&lt;br&gt;
Container stuck&lt;br&gt;
Service unresponsive&lt;br&gt;
⭐ 8. pkill — Kill by Process Name&lt;br&gt;
Example:&lt;br&gt;
pkill nginx&lt;br&gt;
Kills all nginx processes.&lt;br&gt;
⭐ 9. killall — Kill All Processes of a Specific Command&lt;br&gt;
killall python&lt;/p&gt;

&lt;p&gt;⭐ 10. nice — Start Process with Priority&lt;br&gt;
Linux priorities range:&lt;br&gt;
-20 = highest priority&lt;br&gt;
0 = default&lt;br&gt;
+19 = lowest priority&lt;/p&gt;

&lt;p&gt;Start with low priority:&lt;br&gt;
nice -n 10 python script.py&lt;/p&gt;

&lt;p&gt;Useful for background tasks that shouldn’t slow the server.&lt;br&gt;
⭐ 11. renice — Change Priority of Running Process&lt;br&gt;
Example:&lt;br&gt;
renice -n -5 -p 1234&lt;br&gt;
Requires root for negative values&lt;br&gt;
Used when a production process needs more CPU&lt;br&gt;
⭐ 12. jobs — List Background Jobs&lt;br&gt;
jobs&lt;/p&gt;

&lt;p&gt;⭐ 13. bg — Resume Job in Background&lt;br&gt;
bg %1&lt;br&gt;
⭐ 14. fg — Bring Job to Foreground&lt;br&gt;
fg %1&lt;/p&gt;

&lt;p&gt;⭐ 15. nohup — Run Command After Logout&lt;br&gt;
Definition:Runs command immune to terminal hangups.&lt;br&gt;
 Output saved to nohup.out.&lt;br&gt;
Example:&lt;br&gt;
nohup python server.py &amp;amp;&lt;br&gt;
Case:&lt;br&gt;
 Running a process through SSH and you don't want it to stop when the connection closes.&lt;br&gt;
⭐ 16. systemctl — Control System Services&lt;br&gt;
(Most important command for DevOps)&lt;br&gt;
Definition: Manages systemd services.&lt;/p&gt;

&lt;p&gt;16.1 Start service&lt;br&gt;
sudo systemctl start nginx&lt;/p&gt;

&lt;p&gt;16.2 Stop service&lt;br&gt;
sudo systemctl stop nginx&lt;/p&gt;

&lt;p&gt;16.3 Restart service&lt;br&gt;
sudo systemctl restart nginx&lt;/p&gt;

&lt;p&gt;16.4 Check status&lt;br&gt;
sudo systemctl status nginx&lt;/p&gt;

&lt;p&gt;16.5 Enable service on boot&lt;br&gt;
sudo systemctl enable docker&lt;/p&gt;

&lt;p&gt;16.6 Disable service&lt;br&gt;
sudo systemctl disable docker&lt;/p&gt;

&lt;p&gt;⭐ 17. Troubleshooting One-Liners (Real DevOps Commands)&lt;br&gt;
➡️ Find top CPU processes:&lt;br&gt;
ps aux --sort=-%cpu | head&lt;/p&gt;

&lt;p&gt;➡️ Find memory hogs:&lt;br&gt;
ps aux --sort=-%mem | head&lt;/p&gt;

&lt;p&gt;➡️ Kill all processes of a user:&lt;br&gt;
pkill -u username&lt;/p&gt;

&lt;p&gt;➡️ Check which process is using a port:&lt;br&gt;
sudo lsof -i :8080&lt;/p&gt;

&lt;p&gt;➡️ Restart service if it's down (manual check):&lt;br&gt;
! systemctl is-active --quiet nginx &amp;amp;&amp;amp; systemctl restart nginx&lt;/p&gt;

&lt;p&gt;➡️ Find zombie processes:&lt;br&gt;
ps aux | grep Z&lt;/p&gt;

&lt;p&gt;➡️ Check uptime + load:&lt;br&gt;
uptime&lt;/p&gt;

&lt;p&gt;📝 Linux for DevOps — Part 6&lt;br&gt;
System Monitoring &amp;amp; Performance Tools&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Disk Monitoring&lt;br&gt;
df, du, lsblk, fdisk, mount, umount&lt;/p&gt;

&lt;p&gt;✔ Memory Monitoring&lt;br&gt;
free, vmstat,top (already covered), /proc/meminfo&lt;br&gt;
✔ CPU &amp;amp; System Performance&lt;br&gt;
uptime, vmstat, mpstat, iostat&lt;br&gt;
✔ Kernel &amp;amp; Logs&lt;br&gt;
dmesg, journalctl&lt;br&gt;
✔ System Diagnostics&lt;br&gt;
watch, nproc&lt;br&gt;
✔ Real DevOps Scenarios&lt;br&gt;
✔ Troubleshooting One-Liners&lt;br&gt;
⭐ 1. Disk Monitoring Tools&lt;br&gt;
1.1 df — Disk Free Space&lt;br&gt;
Definition:&lt;br&gt;
Shows filesystem disk usage.&lt;br&gt;
Example:&lt;br&gt;
df -h&lt;br&gt;
Output includes:&lt;br&gt;
Filesystem&lt;br&gt;
Size&lt;br&gt;
Used space&lt;br&gt;
Available space&lt;br&gt;
Mounted on&lt;br&gt;
Flags:&lt;br&gt;
-h   # human readable&lt;br&gt;
-T   # show filesystem types&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Debug “No space left on device” errors&lt;br&gt;
Check container volume usage&lt;br&gt;
Monitor production servers&lt;br&gt;
1.2 du — Directory Space Usage&lt;br&gt;
Definition:&lt;br&gt;
Shows how much space a directory is using.&lt;br&gt;
Example:&lt;br&gt;
du -sh /var/log&lt;br&gt;
Flags:&lt;br&gt;
-s   # summary&lt;br&gt;
-h   # human readable&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Identify log-heavy folders&lt;br&gt;
Clean up container image build folders&lt;br&gt;
Debug sudden disk usage spikes&lt;br&gt;
1.3 lsblk — List Block Devices&lt;br&gt;
Definition:&lt;br&gt;
Shows attached disks, partitions &amp;amp; mount points.&lt;br&gt;
Example:&lt;br&gt;
lsblk&lt;/p&gt;

&lt;p&gt;Output shows:&lt;br&gt;
Disk names&lt;br&gt;
Size&lt;br&gt;
Mount points&lt;br&gt;
LVM volumes&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Identify EBS volumes&lt;br&gt;
Identify newly attached cloud disks&lt;br&gt;
Read storage layout on nodes&lt;br&gt;
1.4 fdisk -l — Disk Partition Table&lt;br&gt;
Definition:&lt;br&gt;
Displays partition details of disks.&lt;br&gt;
Example:&lt;br&gt;
sudo fdisk -l&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Check disk type (MBR/GPT)&lt;br&gt;
Validate attached volume from AWS/Azure/GCP&lt;br&gt;
Prepare disk for formatting&lt;br&gt;
1.5 mount — Mount Filesystem&lt;br&gt;
Example:&lt;br&gt;
sudo mount /dev/sdb1 /mnt&lt;/p&gt;

&lt;p&gt;DevOps Use-Cases:&lt;br&gt;
Mount ephemeral disks&lt;br&gt;
Mount EBS or Azure disks&lt;br&gt;
Mount Docker volumes&lt;br&gt;
Mount NFS shared drives&lt;br&gt;
1.6 umount — Unmount Filesystem&lt;br&gt;
Example:&lt;br&gt;
sudo umount /mnt&lt;/p&gt;

&lt;p&gt;Notes:&lt;br&gt;
Cannot unmount if directory is in use.&lt;br&gt;
⭐ 2. Memory Monitoring Tools&lt;br&gt;
2.1 free — System Memory Usage&lt;br&gt;
Example:&lt;br&gt;
free -h&lt;br&gt;
Shows:&lt;br&gt;
Total memory&lt;br&gt;
Used / free&lt;br&gt;
Buffer/cache&lt;br&gt;
Swap&lt;br&gt;
2.2 /proc/meminfo — Detailed Memory Stats&lt;br&gt;
cat /proc/meminfo&lt;br&gt;
Useful for Kubernetes node debugging.&lt;br&gt;
2.3 vmstat — Virtual Memory Statistics&lt;br&gt;
Example:&lt;br&gt;
vmstat 1 5&lt;br&gt;
Columns include:&lt;br&gt;
Procs&lt;br&gt;
Memory&lt;br&gt;
Swap&lt;br&gt;
IO&lt;br&gt;
System&lt;br&gt;
CPU&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Investigate memory leaks&lt;br&gt;
Analyze CPU wait time&lt;br&gt;
Troubleshoot slow disk performance&lt;br&gt;
⭐ 3. CPU &amp;amp; System Performance Tools&lt;br&gt;
3.1 uptime — Load Average&lt;br&gt;
Example:&lt;br&gt;
uptime&lt;br&gt;
Output:&lt;br&gt;
21:10:21 up 10 days,  2:32,  2 users,  load average: 0.45, 0.30, 0.25&lt;br&gt;
Load average values represent:&lt;br&gt;
last 1 minute&lt;br&gt;
last 5 minutes&lt;br&gt;
last 15 minutes&lt;br&gt;
3.2 mpstat — CPU Usage Per Core&lt;br&gt;
mpstat -P ALL 1&lt;br&gt;
(Install via: sudo apt install sysstat)&lt;br&gt;
Useful for:&lt;br&gt;
Debugging CPU throttling&lt;br&gt;
Multi-core performance issues&lt;br&gt;
3.3 iostat — Disk IO Statistics&lt;br&gt;
iostat -xz 1&lt;br&gt;
Shows:&lt;br&gt;
Disk read/write&lt;br&gt;
IO wait&lt;br&gt;
Utilization&lt;br&gt;
⭐ 4. Kernel Logs &amp;amp; System Logs&lt;br&gt;
4.1 dmesg — Kernel Messages&lt;br&gt;
Example:&lt;br&gt;
dmesg | tail&lt;br&gt;
Use-Cases:&lt;br&gt;
Disk attachment logs&lt;br&gt;
USB failure logs&lt;br&gt;
Kernel crashes&lt;br&gt;
OOM (out of memory) events&lt;br&gt;
4.2 journalctl — Systemd Logs&lt;br&gt;
Example:&lt;br&gt;
journalctl -u nginx&lt;br&gt;
Flags:&lt;br&gt;
-f   # follow logs&lt;br&gt;
-x   # detailed info&lt;br&gt;
DevOps Use-Cases:&lt;br&gt;
Service boots&lt;br&gt;
Service crashes&lt;br&gt;
Authentication failures&lt;br&gt;
Systemd service debugging&lt;/p&gt;

&lt;p&gt;⭐ 5. Diagnostics &amp;amp; Utility Tools&lt;br&gt;
5.1 watch — Repeat Command Continuously&lt;br&gt;
Example:&lt;br&gt;
watch -n 3 df -h&lt;br&gt;
Updates every 3 seconds.&lt;br&gt;
5.2 nproc — Number of CPU Cores&lt;br&gt;
nproc&lt;br&gt;
Used for:&lt;br&gt;
Optimizing nginx workers&lt;br&gt;
Docker resource tuning&lt;br&gt;
CI/CD parallel jobs&lt;br&gt;
⭐ 6. Real DevOps Scenarios (Critical)&lt;br&gt;
➡️ 6.1 Disk is full — identify culprit&lt;br&gt;
df -h&lt;br&gt;
du -sh /* | sort -h&lt;br&gt;
du -sh /var/* | sort -h&lt;/p&gt;

&lt;p&gt;➡️ 6.2 High CPU — find top processes&lt;br&gt;
ps aux --sort=-%cpu | head&lt;/p&gt;

&lt;p&gt;➡️ 6.3 Memory leak — monitor live&lt;br&gt;
watch -n 1 free -h&lt;/p&gt;

&lt;p&gt;➡️ 6.4 Identify high IO usage&lt;br&gt;
iostat -xz 1&lt;/p&gt;

&lt;p&gt;➡️ 6.5 Kernel-level disk errors&lt;br&gt;
dmesg | grep -i error&lt;/p&gt;

&lt;p&gt;➡️ 6.6 Service troubleshooting&lt;br&gt;
systemctl status nginx&lt;br&gt;
journalctl -u nginx -f&lt;/p&gt;

&lt;p&gt;⭐ 7. Troubleshooting One-Liners&lt;br&gt;
Check uptime + load:&lt;br&gt;
uptime&lt;/p&gt;

&lt;p&gt;Find failed systemd services:&lt;br&gt;
systemctl --failed&lt;/p&gt;

&lt;p&gt;Identify biggest folders:&lt;br&gt;
du -ah / | sort -h | tail&lt;/p&gt;

&lt;p&gt;Check disk type:&lt;br&gt;
lsblk -f&lt;/p&gt;

&lt;p&gt;Find swap usage:&lt;br&gt;
free -m | grep Swap&lt;/p&gt;

&lt;p&gt;This is a critical article for your Hashnode audience, especially SRE &amp;amp; DevOps learners.&lt;/p&gt;

&lt;p&gt;📝 Linux for DevOps — Part 7&lt;br&gt;
Networking Commands (Complete Practical Guide + Real DevOps Debugging)&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Basics&lt;br&gt;
Hostname, hostnamectl, ip, ifconfig, iwconfig,mac address&lt;br&gt;
✔ Connectivity Tests&lt;br&gt;
ping, traceroute, tracepath, mtr, curl, wget, telnet, nc&lt;br&gt;
✔ Ports, Sockets, and Firewalls&lt;br&gt;
ss, netstat, nmap, iptables, route, arp&lt;br&gt;
✔ DNS Tools&lt;br&gt;
dig, nslookup, host, whois&lt;br&gt;
✔ Network Interface &amp;amp; IP Management&lt;br&gt;
ip a, ip r, ip link, ifplugstatus&lt;br&gt;
✔ Real DevOps Scenarios&lt;br&gt;
✔ Troubleshooting One-Liners (Production-Grade)&lt;br&gt;
⭐ 1. Host &amp;amp; Interface Identification&lt;br&gt;
1.1 hostname — Show Hostname&lt;br&gt;
Example:&lt;br&gt;
hostname&lt;br&gt;
Set hostname:&lt;br&gt;
sudo hostname server-01&lt;/p&gt;

&lt;p&gt;1.2 hostnamectl — Detailed System Identity&lt;br&gt;
hostnamectl&lt;/p&gt;

&lt;p&gt;Shows:&lt;br&gt;
OS version&lt;br&gt;
Kernel&lt;br&gt;
Architecture&lt;br&gt;
Machine name&lt;br&gt;
⭐ 2. Interface &amp;amp; IP Address Commands&lt;br&gt;
2.1 ip a — Show All Network Interfaces (Modern tool)&lt;br&gt;
Example:&lt;br&gt;
ip a&lt;/p&gt;

&lt;p&gt;Shows:&lt;br&gt;
All interfaces&lt;br&gt;
IP addresses&lt;br&gt;
MAC addresses&lt;br&gt;
Operational state&lt;br&gt;
Used 100x more than ifconfig in modern systems.&lt;br&gt;
2.2 ifconfig — Legacy Interface Tool&lt;br&gt;
ifconfig&lt;/p&gt;

&lt;p&gt;Still used in:&lt;br&gt;
Older servers&lt;br&gt;
Some Docker containers&lt;br&gt;
Network debugging tools&lt;br&gt;
2.3 iwconfig — Wireless Config&lt;br&gt;
iwconfig&lt;br&gt;
Useful for laptops but not needed on cloud servers.&lt;br&gt;
⭐ 3. Connectivity Testing Tools (Super Critical)&lt;br&gt;
3.1 ping — Test Server Reachability&lt;br&gt;
Example:&lt;br&gt;
ping google.com&lt;br&gt;
Use-Cases:&lt;br&gt;
DNS working?&lt;br&gt;
Server reachable?&lt;br&gt;
Packet loss?&lt;br&gt;
Latency check?&lt;br&gt;
3.2 traceroute — Trace Hops to Destination&lt;br&gt;
Example:&lt;br&gt;
traceroute google.com&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
Network path debugging&lt;br&gt;
CDN routing issues&lt;br&gt;
Cloud region traffic debugging&lt;br&gt;
3.3 tracepath — Trace Without Root Privileges&lt;br&gt;
tracepath google.com&lt;br&gt;
Safer alternative.&lt;br&gt;
3.4 mtr — Real-Time Traceroute + Ping (Combined)&lt;br&gt;
mtr google.com&lt;/p&gt;

&lt;p&gt;This is used heavily for debugging:&lt;br&gt;
packet loss&lt;br&gt;
network jitter&lt;br&gt;
unstable cloud paths&lt;br&gt;
⭐ 4. DNS Tools&lt;br&gt;
4.1 dig — DNS Queries (Most Powerful)&lt;br&gt;
Example:&lt;br&gt;
dig google.com&lt;/p&gt;

&lt;p&gt;Check full DNS chain:&lt;br&gt;
dig +trace google.com&lt;/p&gt;

&lt;p&gt;Check specific record:&lt;br&gt;
dig A google.com&lt;br&gt;
dig MX gmail.com&lt;br&gt;
dig TXT domain.com&lt;/p&gt;

&lt;p&gt;4.2 nslookup — Query DNS Records&lt;br&gt;
nslookup google.com&lt;/p&gt;

&lt;p&gt;4.3 whois — Domain Ownership Info&lt;br&gt;
whois google.com&lt;/p&gt;

&lt;p&gt;Useful for:&lt;br&gt;
domain expirations&lt;br&gt;
registrar details&lt;br&gt;
⭐ 5. Ports, Sockets &amp;amp; Connections&lt;br&gt;
5.1 ss — Socket Statistics (Modern &amp;amp; Fast)&lt;br&gt;
Better than netstat.&lt;br&gt;
Example:&lt;br&gt;
ss -tulnp&lt;br&gt;
Flags:&lt;br&gt;
t → TCP&lt;br&gt;
u → UDP&lt;br&gt;
l → listening&lt;br&gt;
n → numeric&lt;br&gt;
p → process&lt;br&gt;
Use-Cases:&lt;br&gt;
Check if service is listening&lt;br&gt;
Troubleshoot “port already in use”&lt;br&gt;
Identify rogue processes&lt;/p&gt;

&lt;p&gt;5.2 netstat — Legacy Socket Tool&lt;br&gt;
netstat -tulnp&lt;/p&gt;

&lt;p&gt;Still useful on older Linux.&lt;br&gt;
5.3 nmap — Port Scanner&lt;br&gt;
nmap &lt;br&gt;
Use-cases:&lt;br&gt;
Check open ports&lt;br&gt;
Verify firewall rules&lt;br&gt;
Security scanning&lt;br&gt;
⭐ 6. HTTP/HTTPS &amp;amp; API Tools&lt;br&gt;
6.1 curl — API &amp;amp; Endpoint Testing&lt;br&gt;
Examples:&lt;br&gt;
curl google.com&lt;br&gt;
curl -I &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;&lt;br&gt;
curl -X POST -d "a=1" &lt;a href="https://api.com" rel="noopener noreferrer"&gt;https://api.com&lt;/a&gt;&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
Test API health&lt;br&gt;
Debug load balancers&lt;br&gt;
Check SSL certificates&lt;br&gt;
Validate domain routing&lt;br&gt;
6.2 wget — File Download Tool&lt;br&gt;
wget &lt;a href="https://example.com/file.zip" rel="noopener noreferrer"&gt;https://example.com/file.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ 7. Debugging TCP/UDP &amp;amp; Connectivity&lt;br&gt;
7.1 telnet — Check Port Connectivity (Old but Used)&lt;br&gt;
telnet server 443&lt;br&gt;
If it connects → port open.&lt;br&gt;
7.2 nc (netcat) — Swiss Army Knife of Networking&lt;br&gt;
Check if port open:&lt;br&gt;
nc -zv server 22&lt;br&gt;
Create simple server:&lt;br&gt;
nc -l 8080&lt;br&gt;
Transfer files:&lt;br&gt;
nc -l 1234 &amp;gt; file.txt&lt;/p&gt;

&lt;p&gt;⭐ 8. Routing &amp;amp; ARP Tables&lt;br&gt;
8.1 route — Show Routing Table&lt;br&gt;
route -n&lt;/p&gt;

&lt;p&gt;8.2 ip r — Modern Routing Command&lt;br&gt;
ip route&lt;br&gt;
8.3 arp — MAC → IP Mapping&lt;br&gt;
arp -a&lt;br&gt;
Used to debug:&lt;br&gt;
Local network&lt;br&gt;
Duplicate IP issues&lt;br&gt;
ARP poisoning checks&lt;br&gt;
⭐ 9. Network Status &amp;amp; Interface Health&lt;br&gt;
9.1 ifplugstatus — Cable Plug Status&lt;br&gt;
ifplugstatus&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
Bare metal servers&lt;br&gt;
On-prem deployments&lt;br&gt;
PXE boot debugging&lt;br&gt;
⭐ 10. REAL-WORLD DEVOPS SCENARIOS&lt;br&gt;
➡️ 10.1 Check if backend API reachable&lt;br&gt;
curl -I &lt;a href="http://backend:8080/health" rel="noopener noreferrer"&gt;http://backend:8080/health&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;➡️ 10.2 Debug Kubernetes Pod Networking&lt;br&gt;
Inside pod:&lt;br&gt;
curl &lt;a href="http://service-name:8080" rel="noopener noreferrer"&gt;http://service-name:8080&lt;/a&gt;&lt;br&gt;
nslookup service-name&lt;/p&gt;

&lt;p&gt;➡️ 10.3 Identify which process blocked a port&lt;br&gt;
ss -tulnp | grep 8080&lt;/p&gt;

&lt;p&gt;➡️ 10.4 Validate DNS routing&lt;br&gt;
dig +trace domain.com&lt;/p&gt;

&lt;p&gt;➡️ 10.5 Verify firewall allowing traffic&lt;br&gt;
nc -zv server 443&lt;/p&gt;

&lt;p&gt;➡️ 10.6 Check latency issues&lt;br&gt;
mtr google.com&lt;/p&gt;

&lt;p&gt;⭐ 11. TROUBLESHOOTING ONE-LINERS&lt;br&gt;
Check open ports:&lt;br&gt;
ss -tulnp&lt;/p&gt;

&lt;p&gt;Check DNS poison:&lt;br&gt;
dig domain.com @8.8.8.8&lt;/p&gt;

&lt;p&gt;Check if port blocked by firewall:&lt;br&gt;
iptables -L -n | grep 22&lt;/p&gt;

&lt;p&gt;List all IPs of system:&lt;br&gt;
ip -o -4 addr show | awk '{print $4}'&lt;/p&gt;

&lt;p&gt;Test HTTPS certificate expiry:&lt;br&gt;
echo | openssl s_client -servername domain.com -connect domain.com:443 | openssl x509 -noout -dates&lt;/p&gt;

&lt;p&gt;📝 Linux for DevOps — Part 8&lt;br&gt;
Disk, Filesystem &amp;amp; LVM Management (Complete Guide)&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Understanding Linux Storage Architecture&lt;br&gt;
✔ Disk Information Commands&lt;br&gt;
lsblk, fdisk, blkid, file, df, du&lt;br&gt;
✔ Partitioning &amp;amp; Filesystems&lt;br&gt;
fdisk, parted,mkfs, mount, umount&lt;br&gt;
✔ LVM (Logical Volume Manager)&lt;br&gt;
pvcreate, vgcreate, lvcreate, lvs / pvs / vgs, extend LV &amp;amp; Filesystem&lt;br&gt;
✔ Swap Management&lt;br&gt;
mkswap, swapon / swapoff&lt;br&gt;
✔ Real DevOps Scenarios&lt;br&gt;
✔ Troubleshooting One-Liners&lt;br&gt;
⭐ 1. Understanding Linux Storage Architecture&lt;br&gt;
Linux storage layers:&lt;br&gt;
+----------------------------+&lt;br&gt;
| Application (Nginx, DBs)  |&lt;br&gt;
+----------------------------+&lt;br&gt;
| Filesystem (ext4, xfs)    |&lt;br&gt;
+----------------------------+&lt;br&gt;
| Logical Volume (LV)       |&lt;br&gt;
+----------------------------+&lt;br&gt;
| Volume Group (VG)         |&lt;br&gt;
+----------------------------+&lt;br&gt;
| Physical Volume (PV)      |&lt;br&gt;
+----------------------------+&lt;br&gt;
| Disk / Cloud Volume       |&lt;br&gt;
+----------------------------+&lt;/p&gt;

&lt;p&gt;Cloud mapping:&lt;br&gt;
Provider&lt;br&gt;
Storage&lt;br&gt;
AWS&lt;br&gt;
EBS volumes&lt;br&gt;
Azure&lt;br&gt;
Managed Disks&lt;br&gt;
GCP&lt;br&gt;
Persistent Disks&lt;br&gt;
K8s&lt;br&gt;
PV/PVC&lt;/p&gt;

&lt;p&gt;⭐ 2. Disk Information Commands&lt;br&gt;
2.1 lsblk — List Block Devices&lt;br&gt;
Definition:&lt;br&gt;
Shows all disks, partitions, and LVM structures.&lt;br&gt;
Example:&lt;br&gt;
lsblk&lt;/p&gt;

&lt;p&gt;Shows:&lt;br&gt;
Disk name&lt;br&gt;
Size&lt;br&gt;
Type (disk/part/lvm)&lt;br&gt;
Mount point&lt;br&gt;
Why DevOps uses it:&lt;br&gt;
After attaching EBS/Azure disks&lt;br&gt;
Identify disk names (/dev/sda, /dev/nvme1n1)&lt;br&gt;
Validate LVM structure&lt;br&gt;
2.2 fdisk -l — List Partition Tables&lt;br&gt;
sudo fdisk -l&lt;br&gt;
Useful for:&lt;br&gt;
Check if disk is formatted&lt;br&gt;
Identify GPT or MBR&lt;br&gt;
Inspect partition alignment&lt;br&gt;
2.3 blkid — Show UUIDs &amp;amp; Filesystem Types&lt;br&gt;
blkid&lt;/p&gt;

&lt;p&gt;Used for:&lt;br&gt;
/etc/fstab configuration&lt;br&gt;
Mounting disks by UUID&lt;br&gt;
Identifying filesystem: ext4/xfs/btrfs&lt;br&gt;
2.4 file — Check File Type&lt;br&gt;
file /dev/sdb&lt;br&gt;
Can detect special block files.&lt;br&gt;
2.5 df -h — Filesystem Disk Usage&lt;br&gt;
df -h&lt;br&gt;
Used for:&lt;br&gt;
Out-of-disk emergencies&lt;br&gt;
CI/CD cache filling&lt;br&gt;
K8s node disk pressure&lt;br&gt;
2.6 du -sh — Directory Space Usage&lt;br&gt;
du -sh /var/log&lt;/p&gt;

&lt;p&gt;Used to find large folders.&lt;br&gt;
⭐ 3. Partitioning &amp;amp; Formatting Disks&lt;br&gt;
3.1 Creating Partition using fdisk&lt;br&gt;
Step-by-step:&lt;br&gt;
sudo fdisk /dev/sdb&lt;/p&gt;

&lt;p&gt;Inside fdisk:&lt;br&gt;
Key&lt;br&gt;
Meaning&lt;br&gt;
n&lt;br&gt;
create partition&lt;br&gt;
p&lt;br&gt;
print table&lt;br&gt;
d&lt;br&gt;
delete partition&lt;br&gt;
w&lt;br&gt;
write changes&lt;br&gt;
q&lt;br&gt;
quit&lt;/p&gt;

&lt;p&gt;After partition:&lt;br&gt;
lsblk&lt;/p&gt;

&lt;p&gt;3.2 Formatting the Partition (mkfs)&lt;br&gt;
Format as ext4:&lt;br&gt;
sudo mkfs.ext4 /dev/sdb1&lt;/p&gt;

&lt;p&gt;Format as XFS:&lt;br&gt;
sudo mkfs.xfs /dev/sdb1&lt;/p&gt;

&lt;p&gt;3.3 Mounting Filesystems&lt;br&gt;
Temporary mount:&lt;br&gt;
sudo mount /dev/sdb1 /mnt&lt;/p&gt;

&lt;p&gt;Check:&lt;br&gt;
df -h | grep /mnt&lt;/p&gt;

&lt;p&gt;3.4 Unmounting&lt;br&gt;
sudo umount /mnt&lt;/p&gt;

&lt;p&gt;3.5 Persistent Mount (Permanent)&lt;br&gt;
Add to /etc/fstab:&lt;br&gt;
UUID=   /data    ext4    defaults    0 2&lt;/p&gt;

&lt;p&gt;Get UUID:&lt;br&gt;
blkid&lt;/p&gt;

&lt;p&gt;⭐ 4. LVM — Logical Volume Manager (Production Standard)&lt;br&gt;
LVM allows:&lt;br&gt;
Resize disks without downtime&lt;br&gt;
Combine multiple disks&lt;br&gt;
Create flexible storage pools&lt;br&gt;
⭐ 4.1 Step 1 — Create Physical Volume (PV)&lt;br&gt;
sudo pvcreate /dev/sdb&lt;br&gt;
Check:&lt;br&gt;
pvs&lt;/p&gt;

&lt;p&gt;⭐ 4.2 Step 2 — Create Volume Group (VG)&lt;br&gt;
sudo vgcreate vg_data /dev/sdb&lt;br&gt;
Check:&lt;br&gt;
vgs&lt;/p&gt;

&lt;p&gt;⭐ 4.3 Step 3 — Create Logical Volume (LV)&lt;br&gt;
sudo lvcreate -L 10G -n lv_storage vg_data&lt;/p&gt;

&lt;p&gt;Check:&lt;br&gt;
lvs&lt;br&gt;
⭐ 4.4 Step 4 — Create Filesystem on LV&lt;br&gt;
sudo mkfs.ext4 /dev/vg_data/lv_storage&lt;/p&gt;

&lt;p&gt;⭐ 4.5 Step 5 — Mount LV&lt;br&gt;
sudo mount /dev/vg_data/lv_storage /mnt&lt;/p&gt;

&lt;p&gt;⭐ 4.6 Extend Logical Volume (VERY IMPORTANT)&lt;br&gt;
Extend LV:&lt;br&gt;
sudo lvextend -L +5G /dev/vg_data/lv_storage&lt;br&gt;
Resize filesystem (ext4):&lt;br&gt;
sudo resize2fs /dev/vg_data/lv_storage&lt;br&gt;
For XFS:&lt;br&gt;
sudo xfs_growfs /mnt&lt;/p&gt;

&lt;p&gt;⭐ 5. Swap Management&lt;br&gt;
5.1 Create Swap&lt;br&gt;
sudo mkswap /dev/sdb2&lt;/p&gt;

&lt;p&gt;5.2 Enable Swap&lt;br&gt;
sudo swapon /dev/sdb2&lt;/p&gt;

&lt;p&gt;5.3 Disable Swap&lt;br&gt;
sudo swapoff /dev/sdb2&lt;br&gt;
Used during Kubernetes node tuning.&lt;br&gt;
⭐ 6. Real DevOps Scenarios&lt;br&gt;
➡️ 6.1 Attach &amp;amp; Configure AWS EBS Volume&lt;br&gt;
lsblk&lt;br&gt;
fdisk /dev/nvme1n1&lt;br&gt;
mkfs.ext4 /dev/nvme1n1p1&lt;br&gt;
mount /dev/nvme1n1p1 /data&lt;br&gt;
➡️ 6.2 Expand disk on running server&lt;br&gt;
AWS/GCP:&lt;br&gt;
Increase disk size in console&lt;br&gt;
Then on Linux:&lt;br&gt;
sudo growpart /dev/sda 1&lt;br&gt;
sudo resize2fs /dev/sda1&lt;/p&gt;

&lt;p&gt;➡️ 6.3 LVM Expand live volume&lt;br&gt;
pvcreate /dev/sdc&lt;br&gt;
vgextend vg_data /dev/sdc&lt;br&gt;
lvextend -l +100%FREE /dev/vg_data/lv_storage&lt;br&gt;
resize2fs /dev/vg_data/lv_storage&lt;/p&gt;

&lt;p&gt;➡️ 6.4 Find which folder filled the disk&lt;br&gt;
du -sh /* | sort -h&lt;/p&gt;

&lt;p&gt;➡️ 6.5 Unmount busy filesystem&lt;br&gt;
lsof | grep /mnt&lt;/p&gt;

&lt;p&gt;⭐ 7. Troubleshooting One-Liners&lt;br&gt;
Check disk health:&lt;br&gt;
dmesg | grep sdb&lt;/p&gt;

&lt;p&gt;Show only mounted filesystems:&lt;br&gt;
df -h | grep -v tmpfs&lt;/p&gt;

&lt;p&gt;Check disk type:&lt;br&gt;
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT&lt;/p&gt;

&lt;p&gt;Check sector size:&lt;br&gt;
sudo blockdev --getbsz /dev/sdb&lt;/p&gt;

&lt;p&gt;Check IO wait:&lt;br&gt;
iostat -xz 1&lt;/p&gt;

&lt;p&gt;📝 Linux for DevOps — Part 9&lt;br&gt;
Editors, Shell Scripting &amp;amp; Automation&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ Editors&lt;br&gt;
nano, vim (full cheatsheet)&lt;br&gt;
✔ Shell Scripting Basics&lt;br&gt;
What is a shell script?&lt;br&gt;
Basic syntax&lt;br&gt;
Comments&lt;br&gt;
Variables&lt;br&gt;
Input/output&lt;br&gt;
Redirections&lt;br&gt;
✔ Control Flow&lt;br&gt;
if/else, case, loops (for / while / until)&lt;br&gt;
✔ Functions&lt;br&gt;
✔ Exit codes&lt;br&gt;
✔ Error handling (set -e, set -x)&lt;br&gt;
✔ Cron jobs&lt;br&gt;
✔ Real DevOps Automation Examples&lt;/p&gt;

&lt;p&gt;⭐ 1. Editors for DevOps&lt;br&gt;
1.1 nano — Simple Editor&lt;br&gt;
Definition: Beginner-friendly editor for modifying small config files.&lt;br&gt;
Example:&lt;br&gt;
nano app.conf&lt;/p&gt;

&lt;p&gt;Common shortcuts:&lt;br&gt;
Ctrl + O → save&lt;br&gt;
Ctrl + X → exit&lt;br&gt;
Ctrl + K → cut line&lt;br&gt;
Ctrl + U → paste&lt;/p&gt;

&lt;p&gt;DevOps Use:&lt;br&gt;
Quick edits inside containers&lt;br&gt;
Modifying environment files&lt;br&gt;
Editing config files on SSH&lt;br&gt;
1.2 vim — Most Important DevOps Editor&lt;br&gt;
Vim is lightweight, always available, and perfect for editing files through SSH.&lt;br&gt;
Modes:&lt;br&gt;
Mode&lt;br&gt;
Purpose&lt;br&gt;
Normal&lt;br&gt;
navigation + commands&lt;br&gt;
Insert&lt;br&gt;
editing text&lt;br&gt;
Command&lt;br&gt;
saving, quitting, search&lt;/p&gt;

&lt;p&gt;Switch modes:&lt;br&gt;
i → insert&lt;br&gt;
Esc → normal&lt;br&gt;
: → command&lt;br&gt;
⭐ VIM COMMAND CHEATSHEET&lt;br&gt;
Save &amp;amp; Quit:&lt;br&gt;
:w&lt;br&gt;
:wq&lt;br&gt;
:q!&lt;br&gt;
Navigation:&lt;br&gt;
h j k l    # left, down, up, right&lt;br&gt;
0          # start of line&lt;br&gt;
$          # end of line&lt;br&gt;
gg         # beginning of file&lt;br&gt;
G          # end of file&lt;br&gt;
:n         # go to line n&lt;/p&gt;

&lt;p&gt;Editing:&lt;br&gt;
x          # delete char&lt;br&gt;
dd         # delete line&lt;br&gt;
yy         # copy&lt;br&gt;
p          # paste&lt;br&gt;
u          # undo&lt;br&gt;
Ctrl+r     # redo&lt;/p&gt;

&lt;p&gt;Search:&lt;br&gt;
/pattern&lt;br&gt;
n&lt;br&gt;
N&lt;/p&gt;

&lt;p&gt;Replace:&lt;br&gt;
:%s/old/new/g&lt;br&gt;
Vim mastery = DevOps mastery.&lt;br&gt;
⭐ 2. Shell Scripting Fundamentals&lt;br&gt;
A shell script = a sequence of commands in a file executed by the Bash shell.&lt;br&gt;
2.1 Create Script File&lt;br&gt;
touch script.sh&lt;br&gt;
chmod +x script.sh&lt;br&gt;
nano script.sh&lt;/p&gt;

&lt;p&gt;2.2 Basic Script Structure&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;echo "Hello from DevOps"&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash → interpreter
&lt;/h1&gt;

&lt;p&gt;Commands run line by line&lt;br&gt;
Run it:&lt;br&gt;
./script.sh&lt;/p&gt;

&lt;p&gt;⭐ 3. Comments&lt;/p&gt;

&lt;h1&gt;
  
  
  This is a comment
&lt;/h1&gt;

&lt;p&gt;⭐ 4. Variables&lt;br&gt;
User-defined:&lt;br&gt;
name="Ashish"&lt;br&gt;
echo "Hello $name"&lt;br&gt;
System variables:&lt;br&gt;
echo $HOME&lt;br&gt;
echo $USER&lt;br&gt;
echo $PATH&lt;/p&gt;

&lt;p&gt;⭐ 5. Input from User&lt;br&gt;
read -p "Enter your name: " username&lt;br&gt;
echo "Welcome $username"&lt;/p&gt;

&lt;p&gt;⭐ 6. Output Redirection&lt;br&gt;
echo "log entry" &amp;gt; file.txt    # overwrite&lt;br&gt;
echo "append entry" &amp;gt;&amp;gt; file.txt # append&lt;/p&gt;

&lt;p&gt;⭐ 7. If-Else Conditions&lt;br&gt;
if [ $age -ge 18 ]; then&lt;br&gt;
   echo "Adult"&lt;br&gt;
else&lt;br&gt;
   echo "Minor"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;File checks:&lt;br&gt;
if [ -f file.txt ]; then&lt;br&gt;
   echo "File exists"&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;⭐ 8. Case Statement&lt;br&gt;
read -p "Choose option: " opt&lt;/p&gt;

&lt;p&gt;case $opt in&lt;br&gt;
  1) echo "Start service" ;;&lt;br&gt;
  2) echo "Stop service" ;;&lt;br&gt;
  *) echo "Invalid" ;;&lt;br&gt;
esac&lt;/p&gt;

&lt;p&gt;⭐ 9. Loops&lt;br&gt;
9.1 For Loop&lt;br&gt;
for i in {1..5}&lt;br&gt;
do&lt;br&gt;
  echo "Number: $i"&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;9.2 While Loop&lt;br&gt;
count=1&lt;br&gt;
while [ $count -le 5 ]&lt;br&gt;
do&lt;br&gt;
  echo "Loop $count"&lt;br&gt;
  count=$((count+1))&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;9.3 Until Loop&lt;br&gt;
until [ $n -gt 5 ]&lt;br&gt;
do&lt;br&gt;
  echo "n = $n"&lt;br&gt;
  n=$((n+1))&lt;br&gt;
done&lt;/p&gt;

&lt;p&gt;⭐ 10. Functions&lt;br&gt;
deploy_app() {&lt;br&gt;
    echo "Deploying application..."&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;deploy_app&lt;/p&gt;

&lt;p&gt;⭐ 11. Exit Codes&lt;br&gt;
echo $?   # shows exit code of last command&lt;/p&gt;

&lt;p&gt;0 = success&lt;br&gt;
 Non-zero = error&lt;br&gt;
⭐ 12. Script Debugging&lt;br&gt;
Print each command:&lt;br&gt;
set -x&lt;br&gt;
Exit on error:&lt;br&gt;
set -e&lt;br&gt;
Combine:&lt;br&gt;
set -xe&lt;br&gt;
Used in CI/CD pipelines.&lt;br&gt;
⭐ 13. Cron Jobs (Automation)&lt;br&gt;
Edit cron tab:&lt;br&gt;
crontab -e&lt;br&gt;
Run script daily at midnight:&lt;br&gt;
0 0 * * * /home/ashish/backup.sh&lt;/p&gt;

&lt;p&gt;⭐ 14. REAL DEVOPS AUTOMATION SCRIPTS&lt;br&gt;
➡️ 14.1 Cleanup old logs&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;find /var/log -type f -mtime +7 -delete&lt;/p&gt;

&lt;p&gt;➡️ 14.2 Restart service on failure&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;if ! systemctl is-active --quiet nginx; then&lt;br&gt;
  systemctl restart nginx&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;➡️ 14.3 Create user automatically&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;user=$1&lt;br&gt;
sudo useradd -m $user&lt;br&gt;
echo "$user created"&lt;/p&gt;

&lt;p&gt;➡️ 14.4 Copy files to server (CI/CD)&lt;br&gt;
rsync -avz build/ user@server:/var/www/app/&lt;/p&gt;

&lt;p&gt;➡️ 14.5 Backup database&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;mysqldump -u root -p dbname &amp;gt; backup.sql&lt;/p&gt;

&lt;p&gt;DevOps Quick Recipes &amp;amp; Troubleshooting Toolkit (Ultimate Guide)&lt;br&gt;
By Ashish — Learn-in-Public DevOps Journey (Week 1)&lt;br&gt;
📘 Table of Contents&lt;br&gt;
✔ On-Call Survival Commands&lt;br&gt;
✔ Log Debugging&lt;br&gt;
✔ Disk Pressure &amp;amp; Out-of-Disk Errors&lt;br&gt;
✔ Network Trouble Commands&lt;br&gt;
✔ CPU/Memory Debugging&lt;br&gt;
✔ Permission Issues&lt;br&gt;
✔ Deployment &amp;amp; CI/CD Helpers&lt;br&gt;
✔ SSH &amp;amp; Connectivity&lt;br&gt;
✔ Docker / Container Debugging&lt;br&gt;
✔ Must-Know One-Liners&lt;br&gt;
⭐ 1. On-Call Survival Commands&lt;br&gt;
These are the commands you will use when something breaks in production.&lt;br&gt;
➡️ Check system load&lt;br&gt;
uptime&lt;/p&gt;

&lt;p&gt;➡️ Check which processes are eating CPU&lt;br&gt;
ps aux --sort=-%cpu | head&lt;/p&gt;

&lt;p&gt;➡️ Check which processes are eating RAM&lt;br&gt;
ps aux --sort=-%mem | head&lt;/p&gt;

&lt;p&gt;➡️ Check available memory&lt;br&gt;
free -h&lt;/p&gt;

&lt;p&gt;➡️ Live memory monitoring&lt;br&gt;
watch -n 1 free -h&lt;/p&gt;

&lt;p&gt;⭐ 2. Log Debugging (MOST IMPORTANT)&lt;br&gt;
➡️ Tail logs live:&lt;br&gt;
tail -f /var/log/syslog&lt;/p&gt;

&lt;p&gt;➡️ Filter errors:&lt;br&gt;
grep -i "error" /var/log/syslog&lt;/p&gt;

&lt;p&gt;➡️ Filter warnings:&lt;br&gt;
grep -i "warn" app.log&lt;/p&gt;

&lt;p&gt;➡️ Watch Nginx access logs:&lt;br&gt;
tail -f /var/log/nginx/access.log&lt;/p&gt;

&lt;p&gt;➡️ Watch only failed nginx responses:&lt;br&gt;
grep " 500 " access.log&lt;/p&gt;

&lt;p&gt;⭐ 3. Disk Space &amp;amp; “No space left on device” Troubleshooting&lt;br&gt;
➡️ Check disk usage:&lt;br&gt;
df -h&lt;/p&gt;

&lt;p&gt;➡️ Find biggest directories:&lt;br&gt;
du -sh /* | sort -h | tail&lt;/p&gt;

&lt;p&gt;➡️ Check /var/log size:&lt;br&gt;
du -sh /var/log/*&lt;/p&gt;

&lt;p&gt;➡️ Find largest files:&lt;br&gt;
find / -type f -exec du -Sh {} + | sort -rh | head -n 20&lt;/p&gt;

&lt;p&gt;➡️ Clear apt cache:&lt;br&gt;
sudo apt autoremove&lt;br&gt;
sudo apt clean&lt;/p&gt;

&lt;p&gt;⭐ 4. Network Troubleshooting&lt;br&gt;
➡️ Check connectivity:&lt;br&gt;
ping google.com&lt;/p&gt;

&lt;p&gt;➡️ Show local IPs:&lt;br&gt;
ip a&lt;/p&gt;

&lt;p&gt;➡️ Check DNS resolution:&lt;br&gt;
dig google.com&lt;br&gt;
nslookup google.com&lt;/p&gt;

&lt;p&gt;➡️ Check which process is using port 80:&lt;br&gt;
ss -tulnp | grep :80&lt;/p&gt;

&lt;p&gt;➡️ Check routing table:&lt;br&gt;
ip route&lt;/p&gt;

&lt;p&gt;⭐ 5. CPU &amp;amp; Memory Troubleshooting&lt;br&gt;
➡️ Check CPU usage live:&lt;br&gt;
top&lt;/p&gt;

&lt;p&gt;➡️ Check multi-core CPU usage:&lt;br&gt;
mpstat -P ALL 1&lt;/p&gt;

&lt;p&gt;➡️ Check disk IO pressure:&lt;br&gt;
iostat -xz 1&lt;/p&gt;

&lt;p&gt;⭐ 6. Permission Issues&lt;br&gt;
➡️ Fix permission denied:&lt;br&gt;
sudo chown -R $USER:$USER /path&lt;/p&gt;

&lt;p&gt;➡️ Give execution permission:&lt;br&gt;
chmod +x script.sh&lt;/p&gt;

&lt;p&gt;➡️ Check file permissions:&lt;br&gt;
ls -l file.txt&lt;/p&gt;

&lt;p&gt;⭐ 7. Deployment &amp;amp; CI/CD Helpers&lt;br&gt;
➡️ Sync build folder to server:&lt;br&gt;
rsync -avz build/ user@server:/var/www/app/&lt;br&gt;
➡️ Copy file to server:&lt;br&gt;
scp -i key.pem file user@server:/path/&lt;br&gt;
➡️ Restart service:&lt;br&gt;
sudo systemctl restart nginx&lt;br&gt;
➡️ Check service logs:&lt;br&gt;
journalctl -u nginx -f&lt;br&gt;
⭐ 8. SSH &amp;amp; Server Connectivity&lt;br&gt;
➡️ Login into server:&lt;br&gt;
ssh -i key.pem user@server&lt;br&gt;
➡️ Test open port via nc:&lt;br&gt;
nc -zv server 443&lt;br&gt;
➡️ Keep process alive after logout:&lt;br&gt;
nohup command &amp;amp;&lt;br&gt;
⭐ 9. Docker/Container Troubleshooting&lt;br&gt;
➡️ Check container logs:&lt;br&gt;
docker logs container&lt;br&gt;
➡️ Exec into container:&lt;br&gt;
docker exec -it container bash&lt;br&gt;
➡️ Check container IP:&lt;br&gt;
docker inspect -f '{{ .NetworkSettings.IPAddress }}' container&lt;br&gt;
➡️ Clean dangling images:&lt;br&gt;
docker image prune -f&lt;br&gt;
⭐ 10. Kubernetes-Specific Handy Commands (Bonus)&lt;br&gt;
➡️ Check pod logs:&lt;br&gt;
kubectl logs pod-name&lt;br&gt;
➡️ Exec into pod:&lt;br&gt;
kubectl exec -it pod -- bash&lt;br&gt;
➡️ Check service endpoints:&lt;br&gt;
kubectl get endpoints service&lt;br&gt;
➡️ Debug DNS inside pod:&lt;br&gt;
kubectl exec -it pod -- nslookup google.com&lt;br&gt;
➡️ Check node resource usage:&lt;br&gt;
kubectl top node&lt;br&gt;
⭐ 11. Ultimate DevOps One-Liners&lt;br&gt;
➡️ Restart crashed service:&lt;br&gt;
! systemctl is-active --quiet app &amp;amp;&amp;amp; systemctl restart app&lt;br&gt;
➡️ Send alert if disk is &amp;gt; 90%:&lt;br&gt;
df -h | awk '$5+0 &amp;gt; 90 {print $0}'&lt;br&gt;
➡️ Extract top 10 IPs hitting server:&lt;br&gt;
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head&lt;br&gt;
➡️ Check memory hogs:&lt;br&gt;
ps aux --sort -rss | head&lt;br&gt;
➡️ Find configs containing secret word:&lt;br&gt;
grep -r "password" /etc&lt;/p&gt;

&lt;p&gt;Thanks for Reading, Join Me on This DevOps Journey&lt;br&gt;
Thank you for reading Linux for DevOps of my Learn-in-Public DevOps Series.&lt;br&gt;
 If you’re just starting your DevOps journey, or restarting it like I am, I hope these notes give you clarity, direction, and confidence.&lt;br&gt;
I’m documenting everything openly so we can grow together, step by step.&lt;br&gt;
If this helped you, follow along — I’ll publish the next part soon.&lt;br&gt;
Let’s build a strong DevOps foundation, one skill at a time.&lt;br&gt;
Linkedin Profile: &lt;a href="https://www.linkedin.com/in/ashish360/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ashish360/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
