Surviving Week 1: Mastering Linux, Git, and My First Bash CLI App

Shaurya DhingraShaurya Dhingra
5 min read

Cloud & DevOps Journey — Blog 1


What Actually Went Down This Week

I jumped headfirst into Linux and Git, trying not to break my AWS EC2 Ubuntu server or lose my mind.

By the end of the week, I barely had:

  • A live Ubuntu server running on AWS without frying my free tier

  • Some idea of how to use Linux’s built-in docs without rage-quitting (man, tldr, --help)

  • Managed to safely poke around the filesystem with sudo without deleting everything

  • Installed and removed software (and yes, broke a few dependencies along the way)

  • Set up Git, connected to GitHub — after some painful SSH key failures

  • Built a simple Bash CLI To-Do list that actually works (mostly)


Why I Had to Start Here (And Why It Sucked at First)

Linux is the backbone of almost everything DevOps. If I can’t move around the terminal confidently, I’m just a clueless kid pretending. Git is the version control glue—mess it up, and your code’s history is a disaster waiting to happen.

This week, I realized I was a complete noob at both. But no way around it, had to get my hands dirty.


Linux — The Good, The Bad, The WTF Moments

01 — Setting Up EC2

  • Spent way too long figuring out AWS billing alerts — don’t wanna get charged accidentally.

  • Launched a t2.micro Ubuntu server on AWS Elastic Cloud Compute (EC2) and immediately struggled with SSH keys.

  • Learned the hard way: chmod 400 my-key.pem is not optional. Otherwise, connection just fails silently.

  • Basic commands like whoami, uname -a, and uptime actually helped me feel less lost.

02 — RTFM, MAN, TLDR, HELP — The Docs I Almost Ignored

  • man ls and tldr chmod saved me tons of Googling.

  • But honestly, sometimes these docs feel like they’re written by aliens. Had to try commands myself a hundred times to understand them.

  • Still confused about some options — but that’s fine. Learning takes time.

03 — File System & Superuser — Walking the Minefield

  • Navigated /, /home, /etc, /var like a tourist lost in a big city.

  • Used cat, less, and tail -f to peek inside files — felt like a hacker watching logs.

  • sudo made me nervous. Almost deleted an important file because I didn’t fully understand the command. Almost panicked, but caught myself.

  • Checked /var/log/auth.log just to know what’s happening behind the scenes.

04 — Package Management — Installing, Breaking, Fixing

  • Ran sudo apt update and install nginx — it worked, but then I broke something by removing a package I didn’t fully understand.

  • Had to fix broken dependencies — Linux isn’t always friendly.

  • Tried midnight commander (mc) — surprisingly handy for visual navigation, but still felt clunky.


Git — Fighting With Version Control

Installing & Configuring Git

sudo apt install git
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Connecting to GitHub — The SSH Hell Generating SSH keys was simple, but adding them to GitHub and actually connecting took multiple tries.

I kept getting “Permission denied (publickey)” errors and spent quite some time debugging permissions and SSH agent issues.

Eventually figured it out and it works, for now at least.

Commands I Used

git init
git clone <repo-url>
git status
git add <file>
git commit -m "message"
git push origin main
git pull origin main
git revert
git reset
git cherry-pick
git rebase

Deliberately broke stuff in my own repo to create merge and rebase conflicts, then fixed them and got everything back up and running.


Project — My Ugly but Working Bash CLI To-Do List

This week’s project was a basic Bash CLI-based To-Do List

What It Does

  • Add, list, mark done, and delete tasks

  • Saves everything in plain text files (tasklist.txt, taskdone.txt) — super basic but functional

How To Run It

chmod +x todo-list.sh
./todo-list.sh

Menu Options:
- 1 Add Task
- 2 List Pending
- 3 Mark Done
- 4 List Done
- 5 Delete Task
- 6 Exit

What I Learned the Hard Way

  • Bash control flow sucks until it doesn’t — loops and case statements’ syntax took me a while to wrap my head around.

  • File I/O with grep, sed, and nl felt like black magic. Broke my script multiple times trying to parse lines correctly.

  • Tried Vim editing for the first time, it was painful but necessary.

  • Git commits and pushes: don’t skip committing often or you’ll regret it.

  • Input validation and retry loops made the script less crash-prone — but it still crashes sometimes. Whatever, I’ll fix it later.



GitHub Repos Where I Dumped My Madness


What’s Next — The Stuff I Know I Need to Stop Avoiding

  • File permissions & ownership (chmod, chown) — scares the hell out of me

  • Process management (ps, kill, htop) — want to stop killing random processes accidentally

  • Advanced Git workflows — because right now, I’m basically a Git caveman

  • Shell scripting beyond the basics — want to write stuff that doesn’t break after 2 minutes


Follow Along

0
Subscribe to my newsletter

Read articles from Shaurya Dhingra directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Shaurya Dhingra
Shaurya Dhingra

DevOps & Cloud learner, currently in the deep end with Linux, Git, and AWS. BTech CSE student breaking things on purpose (and learning how to fix them). Exploring real infrastructure, automation, and the tools that keep modern systems running.