<?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>DEV Community: Anany Dubey</title>
    <description>The latest articles on DEV Community by Anany Dubey (@anany_dubey).</description>
    <link>https://dev.to/anany_dubey</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%2F3944428%2F669c463f-9ee7-4b65-be58-b171a121e726.png</url>
      <title>DEV Community: Anany Dubey</title>
      <link>https://dev.to/anany_dubey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anany_dubey"/>
    <language>en</language>
    <item>
      <title>How I Deployed My First Project on AWS (And Didn't Break Everything)</title>
      <dc:creator>Anany Dubey</dc:creator>
      <pubDate>Sat, 30 May 2026 17:12:32 +0000</pubDate>
      <link>https://dev.to/anany_dubey/how-i-deployed-my-first-project-on-aws-and-didnt-break-everything-3add</link>
      <guid>https://dev.to/anany_dubey/how-i-deployed-my-first-project-on-aws-and-didnt-break-everything-3add</guid>
      <description>&lt;h2&gt;
  
  
  The First Time "Localhost" Isn't Enough
&lt;/h2&gt;

&lt;p&gt;There's a moment every developer hits.&lt;/p&gt;

&lt;p&gt;Your project works. It runs perfectly on your machine. You're proud of it. And then someone asks — &lt;em&gt;"Cool, can I see it?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And you realize... you have no answer. Because it only lives on your laptop.&lt;/p&gt;

&lt;p&gt;That was me not too long ago. I had a working Node.js/Express app, a GitHub repo, and zero idea how to put it on the actual internet. AWS kept coming up everywhere — tutorials, job descriptions, YouTube videos — but it felt enormous and intimidating.&lt;/p&gt;

&lt;p&gt;So I decided to just try it. Break things. Figure it out.&lt;/p&gt;

&lt;p&gt;This blog is exactly what I wish I had that day. A plain, honest, step-by-step guide to deploying your first Node.js app on AWS — from local machine to live URL.&lt;/p&gt;

&lt;p&gt;Let's go.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We're Working With
&lt;/h2&gt;

&lt;p&gt;Before we start, here's what this guide assumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have a Node.js/Express app that runs locally with &lt;code&gt;npm start&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Your project is (or will be) on GitHub&lt;/li&gt;
&lt;li&gt;You have an AWS account (free tier works perfectly for this)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. No prior cloud experience needed.&lt;/p&gt;

&lt;p&gt;Here's the full journey we'll take:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local machine → GitHub → AWS EC2 → Live on the internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 1: Test Your App Locally First
&lt;/h2&gt;

&lt;p&gt;This sounds obvious, but it matters more than you think.&lt;/p&gt;

&lt;p&gt;Before touching AWS, make sure your app runs cleanly on your machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; (or whatever port you're using) and confirm everything works. Check your routes, test your endpoints, make sure there are no crashes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; Debugging on a remote server is ten times harder than debugging locally. Fix all issues here first — it'll save you hours later.&lt;/p&gt;

&lt;p&gt;Also make sure your &lt;code&gt;package.json&lt;/code&gt; has a proper start script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node index.js"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Push Your Project to GitHub
&lt;/h2&gt;

&lt;p&gt;Your EC2 server will pull your code directly from GitHub, so this step is essential.&lt;/p&gt;

&lt;p&gt;If you haven't already:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"initial commit"&lt;/span&gt;
git remote add origin https://github.com/yourusername/your-repo.git
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; Make sure your &lt;code&gt;.env&lt;/code&gt; file is in &lt;code&gt;.gitignore&lt;/code&gt; before pushing. You never want secret keys, database passwords, or API credentials on GitHub — even in a private repo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .gitignore&lt;/span&gt;
node_modules/
.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push your code, verify it's visible on GitHub, and move to the next step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Create Your AWS EC2 Instance
&lt;/h2&gt;

&lt;p&gt;This is where the cloud part begins. EC2 is essentially a virtual computer that lives in AWS's data center — and you're about to rent one.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log into &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;AWS Console&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;EC2&lt;/strong&gt; and click &lt;strong&gt;Launch Instance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fill in the details:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; give it something meaningful like &lt;code&gt;my-first-app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AMI:&lt;/strong&gt; choose &lt;strong&gt;Ubuntu Server 22.04 LTS&lt;/strong&gt; (free tier eligible)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance type:&lt;/strong&gt; &lt;code&gt;t2.micro&lt;/code&gt; (free tier — perfect for this)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key pair:&lt;/strong&gt; Create a new key pair, name it, and download the &lt;code&gt;.pem&lt;/code&gt; file. &lt;strong&gt;Don't lose this&lt;/strong&gt; — it's the only way to SSH into your server.&lt;/li&gt;
&lt;li&gt;Leave everything else as default for now and click &lt;strong&gt;Launch Instance&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your server will be up and running in about a minute.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: SSH Into Your Server
&lt;/h2&gt;

&lt;p&gt;Now we're going to remotely connect to your EC2 instance — like opening a terminal on a computer that lives in Amazon's data center.&lt;/p&gt;

&lt;p&gt;First, find your server's &lt;strong&gt;Public IPv4 address&lt;/strong&gt; from the EC2 dashboard.&lt;/p&gt;

&lt;p&gt;Then in your local terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;400 your-key-file.pem
ssh &lt;span class="nt"&gt;-i&lt;/span&gt; your-key-file.pem ubuntu@your-public-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your-key-file.pem&lt;/code&gt; with your actual key file name and &lt;code&gt;your-public-ip&lt;/code&gt; with your EC2's IP address.&lt;/p&gt;

&lt;p&gt;If everything is set up correctly, you'll see a welcome screen from Ubuntu. You're now inside your server. 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Update the Server
&lt;/h2&gt;

&lt;p&gt;First things first — always update a fresh server before installing anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pulls the latest package lists and upgrades any outdated packages. It takes a minute or two. Let it finish.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Install Node.js and npm
&lt;/h2&gt;

&lt;p&gt;Your server is a fresh Ubuntu machine — it has nothing installed. Let's add Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
npm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see version numbers for both. If you do, you're ready to move on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Clone Your Project from GitHub
&lt;/h2&gt;

&lt;p&gt;Now let's bring your code onto the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/yourusername/your-repo.git
&lt;span class="nb"&gt;cd &lt;/span&gt;your-repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then install your project's dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This recreates your &lt;code&gt;node_modules&lt;/code&gt; folder on the server using your &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Create Your &lt;code&gt;.env&lt;/code&gt; File
&lt;/h2&gt;

&lt;p&gt;Remember how we kept &lt;code&gt;.env&lt;/code&gt; out of GitHub? Now we need to recreate it manually on the server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type out your environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PORT=3000
DATABASE_URL=your_database_url
API_KEY=your_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit: &lt;code&gt;Ctrl + X&lt;/code&gt;, then &lt;code&gt;Y&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is the correct way to handle secrets on a server — never in your repo, always added manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Start Your App
&lt;/h2&gt;

&lt;p&gt;The moment of truth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything is configured correctly, you'll see your server start up — the same output you see locally, but now it's running on AWS.&lt;/p&gt;

&lt;p&gt;Open your browser and visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://your-public-ip:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Your app is live on the internet.&lt;/strong&gt; 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10: App Running but Still Not Visible? Fix Your Security Group
&lt;/h2&gt;

&lt;p&gt;This is the most common gotcha for first-time deployments.&lt;/p&gt;

&lt;p&gt;Your app is running fine on the server — &lt;code&gt;npm start&lt;/code&gt; shows no errors — but when you open &lt;code&gt;http://your-public-ip:3000&lt;/code&gt; in the browser, it just times out or refuses to connect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix: open port 3000 in your EC2 Security Group.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS blocks all incoming traffic by default. You have to explicitly allow it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to your &lt;strong&gt;EC2 Dashboard&lt;/strong&gt; → click your instance&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Security&lt;/strong&gt; tab → click the &lt;strong&gt;Security Group&lt;/strong&gt; link&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Edit Inbound Rules&lt;/strong&gt; and add:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SSH&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;My IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;Anywhere (0.0.0.0/0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom TCP&lt;/td&gt;
&lt;td&gt;TCP&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;td&gt;Anywhere (0.0.0.0/0)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save rules&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now refresh your browser — your app should load instantly.&lt;/p&gt;

&lt;p&gt;Port 22 lets you SSH in. Port 3000 lets the world reach your app. Port 80 is for standard HTTP — useful when you later point a domain to your server.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If your app uses a different port (like 5000 or 8080), open that port instead of 3000.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  One More Thing: Keep It Running
&lt;/h2&gt;

&lt;p&gt;There's one problem with &lt;code&gt;npm start&lt;/code&gt; — the moment you close your terminal, the app stops.&lt;/p&gt;

&lt;p&gt;To keep it running even after you disconnect, install &lt;code&gt;pm2&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2
pm2 start index.js
pm2 startup
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your app will keep running in the background — even if the server restarts.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Full Deployment Checklist
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ App tested locally with npm start
✅ .env added to .gitignore
✅ Code pushed to GitHub
✅ EC2 instance launched (Ubuntu, t2.micro)
✅ Key pair downloaded safely
✅ SSH into server
✅ Server updated (apt update &amp;amp;&amp;amp; upgrade)
✅ Node.js and npm installed
✅ Repo cloned and npm install run
✅ .env file created manually on server
✅ npm start — app is running on server
✅ Security group inbound rules configured (ports 22, 80, 3000)
✅ App visible at public-ip:3000
✅ pm2 set up to keep it running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;The first deployment always feels like climbing a mountain. There are a dozen steps, a few moments of panic, and at least one "why isn't this working" that turns out to be a typo.&lt;/p&gt;

&lt;p&gt;But when that URL opens in your browser and your app loads — on a real server, accessible to anyone in the world — it's a completely different feeling from seeing it on localhost.&lt;/p&gt;

&lt;p&gt;That gap between &lt;em&gt;"it works on my machine"&lt;/em&gt; and &lt;em&gt;"it works on the internet"&lt;/em&gt; is where a lot of beginners get stuck. Hopefully this guide helps you cross it a little faster than I did.&lt;/p&gt;

&lt;p&gt;Deploy something. Break it. Fix it. That's how it works. ☁️&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions or got stuck at a specific step? Drop a comment and I'll do my best to help! 👇&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm Anany Dubey — a student documenting my learning journey one deployment at a time. Follow along for more.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>devops</category>
      <category>git</category>
    </item>
    <item>
      <title>Git Time Machine — How Version Control Can Save Your Project</title>
      <dc:creator>Anany Dubey</dc:creator>
      <pubDate>Sat, 23 May 2026 17:07:19 +0000</pubDate>
      <link>https://dev.to/anany_dubey/git-time-machine-how-version-control-can-save-your-project-5a5h</link>
      <guid>https://dev.to/anany_dubey/git-time-machine-how-version-control-can-save-your-project-5a5h</guid>
      <description>&lt;h2&gt;
  
  
  The Moment Every Developer Dreads
&lt;/h2&gt;

&lt;p&gt;Imagine this.&lt;/p&gt;

&lt;p&gt;It's 11 PM. You've been heads-down on a feature for hours. Everything was working — and then you make one small change. Just a tweak. Nothing major.&lt;/p&gt;

&lt;p&gt;And suddenly, everything breaks.&lt;/p&gt;

&lt;p&gt;The app won't run. The code looks foreign. You can't even remember what it looked like ten minutes ago. You start frantically pressing Ctrl+Z, but it's not enough.&lt;/p&gt;

&lt;p&gt;You think: &lt;em&gt;"If only I could just go back in time."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's the thing — &lt;strong&gt;you can.&lt;/strong&gt; That's not an exaggeration. That's literally what Git is built for.&lt;/p&gt;

&lt;p&gt;Most beginners think Git is just a way to upload code to GitHub. It's so much more than that. Git is a &lt;strong&gt;time machine living inside your project&lt;/strong&gt; — one that tracks every change, stores every version, and lets you jump back to any moment in your project's history.&lt;/p&gt;

&lt;p&gt;Once you start thinking about it that way, version control stops being confusing and starts feeling like a superpower.&lt;/p&gt;

&lt;p&gt;In this blog, I'll walk you through the Git commands that unlock that superpower — one time-travel metaphor at a time.&lt;/p&gt;




&lt;h2&gt;
  
  
  First: The Mental Model That Makes Everything Click
&lt;/h2&gt;

&lt;p&gt;Before we touch a single command, let's talk about &lt;em&gt;how Git actually thinks.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most tutorials skip this part. They throw 20 commands at you and wonder why you're still confused. Here's what they don't tell you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every time you run &lt;code&gt;git commit&lt;/code&gt;, Git takes a &lt;strong&gt;complete snapshot&lt;/strong&gt; of your entire project at that exact moment — every file, every line of code — and stores it permanently in a hidden timeline inside your project folder.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That timeline never disappears. It just keeps growing with every commit you make.&lt;/p&gt;

&lt;p&gt;And because every snapshot is saved forever, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jump back to any earlier version&lt;/li&gt;
&lt;li&gt;Compare two different points in time&lt;/li&gt;
&lt;li&gt;Undo something that happened three commits ago&lt;/li&gt;
&lt;li&gt;Recover work you thought was gone forever
That's the time machine. Now let's learn how to fly it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;git log&lt;/code&gt; — Reading the Timeline
&lt;/h2&gt;

&lt;p&gt;You can't navigate time if you can't read the map.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command shows you the full history of your project — every commit ever made, who made it, when, and what message they left. Each commit has a unique fingerprint called a &lt;strong&gt;hash&lt;/strong&gt; — a string like &lt;code&gt;a3f9c12b...&lt;/code&gt; — that you'll use to jump to specific points in time.&lt;/p&gt;

&lt;p&gt;The default output can feel overwhelming. Use this instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean, compact, one commit per line. Much easier to scan when you're looking for something specific.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⏱ Time travel use case:&lt;/strong&gt; Something broke, and you have no idea when. Run &lt;code&gt;git log --oneline&lt;/code&gt; and scan the commit messages. Find the last one that says something like "everything working" — that's your destination.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;code&gt;git diff&lt;/code&gt; — Spotting What Changed
&lt;/h2&gt;

&lt;p&gt;Before jumping back in time, it helps to understand &lt;em&gt;exactly&lt;/em&gt; what changed and when things went wrong.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows the difference between your current files and the last commit — line by line. Removed lines appear in red, added lines in green.&lt;/p&gt;

&lt;p&gt;Want to compare two specific commits?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff a3f9c12 e7b2d45
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste in two hashes from &lt;code&gt;git log&lt;/code&gt; and Git will show you everything that changed between those two points in time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⏱ Time travel use case:&lt;/strong&gt; Your feature was working yesterday but isn't today. Run &lt;code&gt;git diff&lt;/code&gt; to see exactly which lines changed since your last commit. The bug is almost always right there.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;git checkout&lt;/code&gt; — Stepping Into the Past
&lt;/h2&gt;

&lt;p&gt;This is where the real time travel happens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout a3f9c12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;a3f9c12&lt;/code&gt; with any commit hash, and Git will transform your entire project back to exactly what it looked like at that moment. You can open files, run the code, poke around — as if you're standing in the past.&lt;/p&gt;

&lt;p&gt;And here's the best part: &lt;strong&gt;it doesn't touch your current work.&lt;/strong&gt; It's read-only time travel.&lt;/p&gt;

&lt;p&gt;⚠️ You'll see a warning about being in a "detached HEAD" state. Don't panic — it just means you're visiting the past, not changing it. When you're done exploring, come back to the present with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⏱ Time travel use case:&lt;/strong&gt; You want to see what your project looked like before a major refactor — to copy a function, compare logic, or just remind yourself how something used to work.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;git stash&lt;/code&gt; — Hitting the Pause Button
&lt;/h2&gt;

&lt;p&gt;Here's a scenario you'll run into constantly as a developer.&lt;/p&gt;

&lt;p&gt;You're halfway through building something. Your code is messy, half-broken, definitely not ready to commit. And then — your team asks you to urgently fix a bug on a different branch.&lt;/p&gt;

&lt;p&gt;You can't commit half-finished work. But you also can't just abandon it.&lt;/p&gt;

&lt;p&gt;Enter &lt;code&gt;git stash&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git takes all your unfinished changes, bundles them up, tucks them away safely, and gives you a clean working directory — like the mess never existed. Go fix your bug, handle your emergency, do whatever you need to do.&lt;/p&gt;

&lt;p&gt;When you're ready to pick up exactly where you left off:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash pop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your changes come back exactly as you left them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⏱ Time travel use case:&lt;/strong&gt; Think of stash as a personal pause button. You're not committing to the timeline — you're just stepping out of it temporarily, with a guaranteed way back in.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;git revert&lt;/code&gt; — Undoing Without Destroying
&lt;/h2&gt;

&lt;p&gt;You pushed a commit. It broke things. You need to undo it — but you've already shared the code with others, so rewriting history isn't an option.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git revert&lt;/code&gt; is the answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert a3f9c12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of deleting the bad commit, Git creates a &lt;strong&gt;brand new commit&lt;/strong&gt; that does the exact opposite of it. The mistake is neutralized. Your history stays clean and intact. Nobody's workflow gets disrupted.&lt;/p&gt;

&lt;p&gt;This is the professional, team-safe way to undo mistakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⏱ Time travel use case:&lt;/strong&gt; You accidentally committed a bug fix that introduced a worse bug. &lt;code&gt;git revert&lt;/code&gt; lets you undo that specific commit cleanly — without touching anything else in the timeline.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;code&gt;git reflog&lt;/code&gt; — The Secret Safety Net
&lt;/h2&gt;

&lt;p&gt;This is the command most beginners never hear about — until the day they desperately need it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git reflog&lt;/code&gt; is Git's private diary. While &lt;code&gt;git log&lt;/code&gt; shows you the official commit history, &lt;code&gt;git reflog&lt;/code&gt; records &lt;strong&gt;every single movement of HEAD&lt;/strong&gt; — every checkout, reset, merge, rebase — even actions that seem to have vanished from history.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reflog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accidentally deleted a branch? Did a hard reset and lost commits? Made a mistake and can't find your way back?&lt;/p&gt;

&lt;p&gt;Check &lt;code&gt;git reflog&lt;/code&gt;. Your work is almost certainly still there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout HEAD@&lt;span class="o"&gt;{&lt;/span&gt;3&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This jumps back to where HEAD was exactly 3 moves ago — even if those moves left no trace in &lt;code&gt;git log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⏱ Time travel use case:&lt;/strong&gt; This is your last resort. When everything else fails and you think the work is gone forever — run &lt;code&gt;git reflog&lt;/code&gt; first. It has saved countless developers from rewriting code they thought was lost.&lt;/p&gt;




&lt;h2&gt;
  
  
  Putting It All Together
&lt;/h2&gt;

&lt;p&gt;Here's the full time travel workflow when something goes wrong:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;🔴 Something breaks
        ↓
git log &lt;span class="nt"&gt;--oneline&lt;/span&gt;     →  Find when it last worked
        ↓
git diff &amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;       →  See exactly what changed
        ↓
git checkout &amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;   →  Step into that working version
        ↓
git revert &amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;     →  Safely undo the bad commit
        ↓
git reflog            →  If all &lt;span class="k"&gt;else &lt;/span&gt;fails, recover lost work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each command is a tool in your time machine. Learn them one at a time, and together they make you genuinely hard to break.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Here's the mindset shift that made Git finally make sense to me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git doesn't punish you for making mistakes. It protects you from them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every commit is a save point. Every branch is an alternate timeline. And with &lt;code&gt;reflog&lt;/code&gt; watching your back, almost nothing is ever truly lost.&lt;/p&gt;

&lt;p&gt;The developers who seem fearless — who refactor boldly, experiment freely, push without panic — aren't the ones who never break things. They're the ones who know they can always go back.&lt;/p&gt;

&lt;p&gt;So commit often. Write clear messages. Break things without fear.&lt;/p&gt;

&lt;p&gt;Your time machine has your back. 🕰️&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Found this useful? Drop a comment — I'd love to know which Git command has saved you the most! 👇&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And if you're just getting comfortable with the terminal, my previous blog might help:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;📝 &lt;a href="https://dev.to/anany_dubey/10-linux-commands-that-made-the-terminal-less-scary-for-me-21j4"&gt;10 Linux Commands That Made the Terminal Less Scary for Me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm Anany Dubey — a student who learns best by breaking things and writing about what I find. If that sounds like you, follow along for more.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>10 Linux Commands That Made the Terminal Less Scary for Me</title>
      <dc:creator>Anany Dubey</dc:creator>
      <pubDate>Thu, 21 May 2026 16:16:58 +0000</pubDate>
      <link>https://dev.to/anany_dubey/10-linux-commands-that-made-the-terminal-less-scary-for-me-21j4</link>
      <guid>https://dev.to/anany_dubey/10-linux-commands-that-made-the-terminal-less-scary-for-me-21j4</guid>
      <description>&lt;p&gt;I still remember the exact moment I opened the Linux terminal for the first time.&lt;/p&gt;

&lt;p&gt;Black screen. Blinking cursor. Absolute silence.&lt;/p&gt;

&lt;p&gt;No icons, no buttons, no "click here to continue." Just this tiny blinking thing waiting for me to type something — anything — and I had absolutely no idea what to say to it.&lt;/p&gt;

&lt;p&gt;My first reaction, honestly? I closed it.&lt;/p&gt;

&lt;p&gt;Then I opened it again because I felt embarrassed closing it, even though I was alone.&lt;/p&gt;

&lt;p&gt;I ended up doing what every beginner does: copying random commands from Stack Overflow without really understanding what they did. Sometimes things worked. Sometimes I'd accidentally delete a file I needed. Once I somehow broke my entire home directory setup and had to reinstall things.&lt;/p&gt;

&lt;p&gt;But here's what I eventually figured out — Linux wasn't hard because it was complicated. It was hard because it was &lt;em&gt;unfamiliar&lt;/em&gt;. Once a few commands started making sense, the whole thing clicked differently.&lt;/p&gt;

&lt;p&gt;If you're a CS student, a beginner dev, or someone just getting into backend or DevOps, here are the 10 commands that genuinely made the terminal less terrifying for me.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, Why Does Linux Even Matter?
&lt;/h2&gt;

&lt;p&gt;Honestly, for a while I thought Linux was one of those "nice to have" skills that senior devs recommend but you can probably skip.&lt;/p&gt;

&lt;p&gt;You can't really skip it.&lt;/p&gt;

&lt;p&gt;Servers run Linux. Cloud infrastructure runs Linux. Docker, DevOps pipelines, most backend environments — Linux is just quietly everywhere. At some point it stops being optional and becomes part of your actual workflow.&lt;/p&gt;

&lt;p&gt;The good news is you don't need to learn hundreds of commands to feel comfortable. You just need a solid handful to start.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;pwd&lt;/code&gt; — "Wait, Where Am I?"
&lt;/h2&gt;

&lt;p&gt;The terminal doesn't show you where you are by default. That's confusing at first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prints your current working directory — basically your location in the file system. It stands for &lt;em&gt;print working directory&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I used this constantly when I was learning. Still use it more than I'd like to admit.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;code&gt;ls&lt;/code&gt; — See What's Around You
&lt;/h2&gt;

&lt;p&gt;Want to see what files and folders are in your current location?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want more details like file sizes and permissions?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want to also see hidden files (files that start with a dot)?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; becomes muscle memory pretty fast. You'll type it without thinking after a week.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;cd&lt;/code&gt; — Actually Move Around
&lt;/h2&gt;

&lt;p&gt;Navigation. This one's essential.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;Documents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go back one level:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jump straight to your home directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you get used to &lt;code&gt;cd&lt;/code&gt;, clicking through folders in a file manager starts feeling weirdly slow. It's one of those small things that makes the terminal feel worth it.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;mkdir&lt;/code&gt; — Create a Folder Without the Right-Click
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. New folder, done.&lt;/p&gt;

&lt;p&gt;No right-clicking, no naming dialog box, no confirmation window. Just instant. Linux really does value speed and efficiency, and &lt;code&gt;mkdir&lt;/code&gt; is a small example of that.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;touch&lt;/code&gt; — Create an Empty File
&lt;/h2&gt;

&lt;p&gt;Need a new file quickly?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It creates an empty file with that name. Nothing fancy, but when you're setting up a project structure, this saves you a surprising amount of time.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;code&gt;cp&lt;/code&gt; and &lt;code&gt;mv&lt;/code&gt; — Copy, Move, and Rename
&lt;/h2&gt;

&lt;p&gt;Copy a file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;notes.txt notes-backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move a file to a different folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;notes.txt ~/Documents/notes.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rename a file (it's the same command, just staying in the same place):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;old-name.txt new-name.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rename thing tripped me up for a bit — I kept looking for a separate rename command. Turns out &lt;code&gt;mv&lt;/code&gt; just does it.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;code&gt;rm&lt;/code&gt; — Delete Things (Carefully)
&lt;/h2&gt;

&lt;p&gt;Delete a file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete a folder and everything inside it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; foldername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important heads-up: &lt;strong&gt;Linux usually won't ask if you're sure.&lt;/strong&gt; It just deletes. No trash bin, no undo.&lt;/p&gt;

&lt;p&gt;This is how beginners learn to be careful. Usually after losing something they needed.&lt;/p&gt;

&lt;p&gt;If you want it to prompt you before deleting, you can use &lt;code&gt;rm -i&lt;/code&gt;, but honestly most people just learn the habit of double-checking before they run it.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. &lt;code&gt;cat&lt;/code&gt; — Read a File Without Opening an Editor
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;notes.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This just prints the file contents straight into your terminal. Super useful for quickly checking configs, reading log files, or just seeing what's in something without bothering to open a text editor.&lt;/p&gt;

&lt;p&gt;It's one of those commands that seems almost too simple at first, then you realize you're using it constantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. &lt;code&gt;grep&lt;/code&gt; — Search Inside Files
&lt;/h2&gt;

&lt;p&gt;This one felt like a superpower once I actually understood it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"error"&lt;/span&gt; logs.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This searches through &lt;code&gt;logs.txt&lt;/code&gt; and shows you every line that contains the word "error."&lt;/p&gt;

&lt;p&gt;Once you start debugging real applications or reading through server logs, &lt;code&gt;grep&lt;/code&gt; becomes one of your most-used tools. You can search through hundreds of lines instantly instead of scrolling through everything manually.&lt;/p&gt;

&lt;p&gt;You can also combine it with other commands using pipes, but that's a rabbit hole for another day.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. &lt;code&gt;history&lt;/code&gt; — Your Terminal Remembers Everything
&lt;/h2&gt;

&lt;p&gt;Forgot a command you typed earlier?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows your command history. Every command you've run, listed out.&lt;/p&gt;

&lt;p&gt;You can also press the &lt;strong&gt;Up arrow&lt;/strong&gt; to cycle through recent commands one by one, which I use constantly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;history&lt;/code&gt; has saved me more times than I can count — especially when I've run some complex command that worked, and then immediately forgot what I typed.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎁 Bonus: &lt;code&gt;man&lt;/code&gt; — The Manual That's Actually Built Into the Terminal
&lt;/h2&gt;

&lt;p&gt;This one I wish someone had told me about on day one.&lt;/p&gt;

&lt;p&gt;Every time I didn't understand what a command did or what flags were available, I'd go Google it. That works fine, but there's a faster option that's always right there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;man &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;man &lt;span class="nb"&gt;grep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;man&lt;/code&gt; stands for &lt;em&gt;manual&lt;/em&gt;. It opens the official documentation for whatever command you pass it — right inside the terminal, no browser needed.&lt;/p&gt;

&lt;p&gt;So instead of searching "ls command options linux," you can just type &lt;code&gt;man ls&lt;/code&gt; and get the full breakdown: what the command does, every available flag, examples, all of it.&lt;/p&gt;

&lt;p&gt;Use the arrow keys to scroll, and press &lt;code&gt;q&lt;/code&gt; to quit and go back to your terminal.&lt;/p&gt;

&lt;p&gt;Fair warning: man pages are pretty dense and not exactly written for beginners. But once you get used to the format, it's genuinely useful — especially when you're working on a remote server with no internet access and need to look something up.&lt;/p&gt;

&lt;p&gt;It's also just a good habit. Gets you comfortable reading documentation instead of always reaching for a tutorial.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Terminal Actually Teaches You
&lt;/h2&gt;

&lt;p&gt;When I started, I thought learning Linux was about memorizing commands. The more time I spent in the terminal, the more I realized it's teaching you something else.&lt;/p&gt;

&lt;p&gt;It teaches you how computers actually work. Files, permissions, processes, how things are structured under the hood. GUI applications hide all of this. The terminal just shows it to you directly.&lt;/p&gt;

&lt;p&gt;You don't need to become an expert overnight. Just open the terminal, use it a little every day, and experiment. Break things, fix them, look stuff up. It gets less intimidating pretty quickly.&lt;/p&gt;

&lt;p&gt;Everyone who looks comfortable in the terminal today was once staring at that same blinking cursor thinking, &lt;em&gt;"I have no idea what I'm doing."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The cursor was just waiting for a first command.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What was your first terminal experience like? Was there a command that finally made things click for you? Drop it in the comments — I'd love to know.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
