<?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: Vraj Bhavsar</title>
    <description>The latest articles on DEV Community by Vraj Bhavsar (@vrj_bhvsr).</description>
    <link>https://dev.to/vrj_bhvsr</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%2F3037353%2F8474f4d3-b841-4063-b918-de62ea57c5df.jpg</url>
      <title>DEV Community: Vraj Bhavsar</title>
      <link>https://dev.to/vrj_bhvsr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vrj_bhvsr"/>
    <language>en</language>
    <item>
      <title>📈From Zero to DevOps: Week 4 – Building a Strong Foundation in Linux Networking- TCP Working</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Wed, 21 May 2025 15:19:11 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-tcp-working-36ia</link>
      <guid>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-tcp-working-36ia</guid>
      <description>&lt;h2&gt;
  
  
  TCP(Transmission Control Protocol)
&lt;/h2&gt;

&lt;p&gt;TCP is a connection oriented , reliable protocol at the the transport layer of the OSI model. it ensures that data sent from one device reaches correctly and in order on the other side.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. TCP Connection: The 3-way Handshake🤝
&lt;/h3&gt;

&lt;p&gt;When a device wants to send data — like your browser opening google.com — the first step is to establish a reliable connection between your device and the server. This is done through the TCP 3-way handshake, a fundamental part of how data travels across the internet reliably.&lt;/p&gt;

&lt;p&gt;Step 1: SYN (Synchronize)&lt;br&gt;
It all begins with your device (the client) saying:&lt;br&gt;
&lt;em&gt;“Hey server, I’d like to start a connection. Here’s my Initial Sequence Number (ISN): 1000.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This message is called a &lt;strong&gt;SYN packet&lt;/strong&gt;, and it’s the client’s way of knocking on the server’s door and saying, &lt;em&gt;"Let’s sync up!"&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 What is a Sequence Number?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A sequence number is a number that uniquely identifies each byte of data sent over a TCP connection. It helps the receiver keep track of the order of the bytes and detect missing or out-of-order packets.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 2: SYN-ACK(Synchronize-Acknowledge)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The server receives the SYN packet and says:&lt;br&gt;
&lt;em&gt;“Got your request! I’m ready to talk. Here's my own Initial Sequence Number: 5000. Also, I acknowledge your sequence number 1000.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;SYN-ACK packet&lt;/strong&gt; — the server both synchronizes with its own sequence number and acknowledges the client's request.&lt;/p&gt;

&lt;p&gt;At this point, both devices are aware that the other is alive and ready to communicate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: ACK (Acknowledge)&lt;/strong&gt;&lt;br&gt;
The client receives the &lt;strong&gt;SYN-ACK&lt;/strong&gt; and responds with one final message:&lt;br&gt;
&lt;em&gt;“Thanks! I got your sequence number 5000, and I’m ready to roll!”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;ACK packet&lt;/strong&gt;. It confirms receipt of the server’s sequence number and finalizes the handshake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Connection Established!&lt;/strong&gt;&lt;br&gt;
Now, with the handshake complete, both client and server are ready to exchange data in a &lt;strong&gt;reliable, ordered, and error-checked way&lt;/strong&gt; — just what TCP promises.&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;three-step handshake&lt;/strong&gt; ensures that both ends of the connection are ready, &lt;strong&gt;no data is lost&lt;/strong&gt; at the start, and that the communication can begin &lt;strong&gt;smoothly and reliably&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Data Transmission🚚
&lt;/h3&gt;

&lt;p&gt;Now, once the connection is established between the client and the server, data transmission begins.&lt;/p&gt;

&lt;p&gt;TCP first splits the data into segments (packets). Each segment carries a unique sequence number that helps the receiver arrange the data in the correct order.&lt;/p&gt;

&lt;p&gt;As soon as the receiver gets a segment, it sends back an ACK (acknowledgment) confirming the successful receipt of that data.&lt;/p&gt;

&lt;p&gt;But what if a segment is lost during transmission?&lt;/p&gt;

&lt;p&gt;TCP is smart — if, say, Segment 2 is lost, TCP detects the missing segment and slows down the transmission, then retransmits only that segment. It ensures no data is lost, duplicated, or delivered out of order.&lt;/p&gt;

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

&lt;p&gt;Segment 1: Sequence Number = 1000, Size = 500 bytes&lt;/p&gt;

&lt;p&gt;Receiver replies with ACK 1500 → meaning: “I received everything up to byte 1499. Please send the next data from byte 1500.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This mechanism is what makes TCP a reliable protocol, perfect for tasks like web browsing, file transfers, and emails — where accurate data delivery is crucial.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. TCP Flow Control💡
&lt;/h3&gt;

&lt;p&gt;Imagine the sender is transmitting data &lt;strong&gt;very fast&lt;/strong&gt;, but the receiver is &lt;strong&gt;processing it slower&lt;/strong&gt; — like pouring water into a bottle with a narrow neck. If the sender doesn't slow down, the receiver might get overwhelmed.&lt;/p&gt;

&lt;p&gt;To handle this, TCP uses a “window size” mechanism.&lt;/p&gt;

&lt;p&gt;The receiver tells the sender:&lt;br&gt;
🗣️ &lt;em&gt;“Hey, I can accept 4096 bytes right now.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This value is called the receive window size, and it represents how much data the receiver's buffer can handle at that moment.&lt;/p&gt;

&lt;p&gt;Now, the sender must pause or slow down if it fills that window.&lt;/p&gt;

&lt;p&gt;As the receiver processes the incoming data, it updates the window size and informs the sender that it's ready to receive more. This way, both stay in sync.&lt;/p&gt;

&lt;p&gt;✅ This technique prevents buffer overflow and ensures smooth, efficient communication, even if one side is faster than the other.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. TCP Congestion Control 🌐
&lt;/h3&gt;

&lt;p&gt;Now imagine not just one sender and receiver, but hundreds of devices communicating over the same network. If everyone sends data at full speed, the network gets congested — like a traffic jam!&lt;/p&gt;

&lt;p&gt;To prevent this, TCP uses congestion control algorithms. One of the classic ones is called slow start.&lt;/p&gt;

&lt;p&gt;When a connection begins, TCP starts slow. It sends a small amount of data and waits for acknowledgments. If everything goes well, it gradually increases the sending rate — like slowly pressing the gas pedal in traffic.&lt;/p&gt;

&lt;p&gt;But the moment it notices packet loss (a sign of congestion), it immediately slows down, cuts the speed, and tries again more carefully.&lt;/p&gt;

&lt;p&gt;This adaptive behaviour helps TCP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Avoid overwhelming the network&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use available bandwidth efficiently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure fair sharing among devices&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as TCP being polite on a crowded highway — it doesn't rush, and it makes room for others.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔚 5. TCP Connection Termination (Graceful Close)
&lt;/h3&gt;

&lt;p&gt;Just like a polite conversation ends with a goodbye from both sides, a TCP connection also closes gracefully — and it does so in &lt;strong&gt;four steps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once the client finishes sending its data, it sends a FIN (Finish) message to the server, saying:&lt;br&gt;
&lt;em&gt;“I’m done, and I’d like to close the connection.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The server replies with an ACK, meaning:&lt;br&gt;
&lt;em&gt;“Okay, I’ve received your request to close.”&lt;/em&gt;&lt;br&gt;
But the server might still be sending some data of its own.&lt;/p&gt;

&lt;p&gt;When the server is also done, it sends a FIN back to the client:&lt;br&gt;
&lt;em&gt;“I’m done too. Let's wrap it up.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Finally, the client sends one last ACK, confirming:&lt;br&gt;
&lt;em&gt;“Got it. Closing on my side too.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;✅ At this point, both ends have closed the connection properly. This clean closure ensures all data is sent and acknowledged before the connection is terminated.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>networking</category>
      <category>learning</category>
      <category>devops</category>
    </item>
    <item>
      <title>📈From Zero to DevOps: Week 4 – Building a Strong Foundation in Linux Networking- DHCP Working(DORA Process)</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Wed, 21 May 2025 13:43:45 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-dhcp-workingdora-1b5i</link>
      <guid>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-dhcp-workingdora-1b5i</guid>
      <description>&lt;p&gt;In my previous blog, I documented how DNS works behind the scenes to resolve domain names into IP addresses.&lt;br&gt;
This blog dives into another essential part of networking — &lt;strong&gt;DHCP (Dynamic Host Configuration Protocol)&lt;/strong&gt; and its DORA process, which explains how devices automatically get an IP address when they connect to a network. If you’ve ever wondered how your laptop connects to Wi-Fi and just “knows” what IP to use — this blog will clear that up in a simple, story-like way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Host Configuration protocol(DHCP)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Host Configuration Protocol (DHCP)&lt;/strong&gt; is a network protocol used by a DHCP server to automatically assign IP addresses and other network settings to devices when they connect to the network.&lt;/p&gt;

&lt;h3&gt;
  
  
  The DORA process
&lt;/h3&gt;

&lt;p&gt;When a device, like your laptop or smartphone, connects to a network for the first time, it doesn’t magically know what IP address to use. This is where DHCP (Dynamic Host Configuration Protocol) steps in — it's the friendly neighborhood service that assigns IP addresses to devices on a network. And this magic happens through a four-step conversation called &lt;strong&gt;the DORA process — Discover, Offer, Request, and Acknowledge.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine your device is a new guest at a party and doesn’t know where to sit. It starts by shouting out loud: &lt;em&gt;“Hey! Is there anyone who can give me a place (IP address) to sit?”&lt;/em&gt; — this is the DHCP Discover message. It's broadcasted across the network so that any DHCP server available can hear the request.&lt;/p&gt;

&lt;p&gt;Now, the DHCP server hears the call and responds with an Offer. It's like someone at the party saying, &lt;em&gt;“Yes! I have a chair for you. Here’s a spot at Table 192.168.1.10, and you can sit here for the next 24 hours.”&lt;/em&gt; This is the DHCP Offer message, where the server suggests an IP address and other configuration info like subnet mask, default gateway, and DNS servers.&lt;/p&gt;

&lt;p&gt;The device receives this offer and replies, &lt;em&gt;“Hey, I like that seat. Can I please take it?”&lt;/em&gt; — this is the DHCP Request. It’s the device’s way of confirming that it wants to use the offered IP address. Though there might be multiple offers from different DHCP servers, the device picks one and responds to that particular server.&lt;/p&gt;

&lt;p&gt;Finally, the DHCP server responds with an Acknowledge message. It says, &lt;em&gt;“Great! That seat is officially yours. Welcome to the network.”&lt;/em&gt; And just like that, the device is now part of the network, with its own IP address, ready to communicate.&lt;/p&gt;

&lt;p&gt;This entire DORA process happens in just a &lt;strong&gt;few milliseconds&lt;/strong&gt; every time a new device connects to a network. It ensures that devices don’t collide with each other’s IP addresses and makes the process &lt;strong&gt;completely automatic&lt;/strong&gt;, saving us the trouble of manually setting network configurations.&lt;/p&gt;

&lt;p&gt;The IP address assigned by the DHCP server &lt;strong&gt;isn’t permanent&lt;/strong&gt; — it’s leased for a specific period known as the &lt;strong&gt;lease time&lt;/strong&gt;. Once this time expires, the device may need to request a new IP address. Additionally, every time you disconnect and reconnect to a network, the DHCP server might assign you a different IP address, depending on availability and the server's configuration. This dynamic system ensures efficient IP management in busy networks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>📈From Zero to DevOps: Week 4 – Building a Strong Foundation in Linux Networking- DNS Working</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Wed, 21 May 2025 11:00:18 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-dns-working-1dgm</link>
      <guid>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-dns-working-1dgm</guid>
      <description>&lt;p&gt;In my previous blog, I covered the basics of IP addressing. After that, I explored concepts like subnetting and CIDR, which I've documented in more detail on my GitHub repository. While I’ve also written about DNS in the repo, this blog is focused on understanding how DNS works behind the scenes — not just what it does, but how it actually does it. Think of this as a step-by-step story to demystify what happens when you type a website name into your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌐 Domain Name Service (DNS)
&lt;/h2&gt;

&lt;p&gt;DNS (Domain Name Service) is a distributed database that maps human-friendly domain names (like google.com) to IP addresses (like 142.250.195.206).&lt;/p&gt;

&lt;p&gt;Well, that’s the textbook definition — but in this blog, let’s go beyond that. I’ll break it down in a simple, story-like way so we truly understand how DNS works behind the scenes when you type a website into your browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Behind the Scenes: How DNS Works?
&lt;/h3&gt;

&lt;p&gt;While learning about IP addresses, one common example kept coming up: &lt;em&gt;Suppose you want to access google.com, but your computer doesn’t actually “know” what that is—it only understands IP addresses.&lt;/em&gt; That naturally raised a big question in my mind: How does the system find the IP address for a domain name like google.com?&lt;/p&gt;

&lt;p&gt;After all, we don’t type in IP addresses when we browse the web—we just write names. So how does the computer figure out which IP address belongs to the website we’re trying to reach?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enters DNS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I first heard about DNS, someone told me, "It's like the phonebook of the internet." That sounded simple, but I wanted to know what really happens behind the scenes when I type something like &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt; in the browser. So, here's how I understood DNS — step by step, as a small story.&lt;/p&gt;

&lt;p&gt;Let’s imagine you’re sending a letter, but instead of using a house address, you only know the name of the person. You’ll obviously need someone or something to find the correct address for you. That someone is the DNS (Domain Name System).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Typing the Website&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It all starts when you open a browser and type a website name, let's say &lt;code&gt;google.com&lt;/code&gt;. As we know, the computer doesn't understand that name directly-it needs IP address (something like 142.250.182.36) to connect and get the website. That's where DNS comes in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: The Local Cache&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before your computer reaches out to the internet asking, “What is the IP address of this domain?”, it first checks its DNS cache. This cache stores IP addresses of websites you've recently visited. If the IP for the requested domain is already stored there, your system uses it instantly—making the process faster and saving time.&lt;/p&gt;

&lt;p&gt;But if you're visiting a website for the first time, or the IP address is no longer in the cache, your system begins the actual DNS resolution journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Asking the Recursive Resolver&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, A recursive DNS resolver (like the one your ISP or Google provides) is the middleman between you and the actual DNS servers. Its job is to find the IP address for a domain name (like openai.com), and return it to you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It first performs step 2, checking the DNS cache.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If Not in Cache → Starts the Journey 🚶&lt;br&gt;
If the answer isn't cached, the resolver acts on your behalf as it knows where to ask for it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Root Name servers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At this stage, the DNS resolver reaches out to the Root Name Servers to find the IP address.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Resolver: "Hey, Root Server, I need the IP address for google.com."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Root Name Server: "I don’t know the exact IP, but I can tell you who manages the .com domains — you should ask the &lt;code&gt;.com&lt;/code&gt; Top-Level Domain (TLD) servers."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: TLDs server(Top Level Domain server)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here, Resolver contacts the Top-Level domain name server for &lt;code&gt;.com&lt;/code&gt; These servers manage everything that ends in &lt;code&gt;.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Resolver: "Hey, TLD Server, I need the IP address for google.com Root name server asked me to ask you."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TLD Server: "I still don’t know the full IP address of &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt;, but I know who manages it. Try the authoritative name server.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Authoritative Name Server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, the resolver reaches the authoritative name server, which has the actual IP address of &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This server replies with the final answer: "Yes! &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt; lives at 142.250.182.36."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Sending the Response back&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that the resolver has the IP, it sends it back to your computer. Your browser takes that IP address and starts communicating with Google’s web server to load the website.&lt;/p&gt;

&lt;p&gt;Your system also stores the IP in its cache, so that if you visit google.com again soon, it won’t repeat the whole process.&lt;/p&gt;

&lt;p&gt;And That’s How DNS Works!&lt;br&gt;
All of this — from typing the website to loading the page — happens in just a few milliseconds. It feels like magic, but now you know the journey your request takes. DNS is like a smart guidebook that helps computers talk to each other using names instead of confusing numbers.&lt;/p&gt;

&lt;p&gt;Please feel free to ask questions in the comment section.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/vrj_bhvsr"&gt;@vrj_bhvsr&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>networking</category>
      <category>devops</category>
      <category>learning</category>
    </item>
    <item>
      <title>📈From Zero to DevOps: Week 4 – Building a Strong Foundation in Linux Networking- IP Addressing</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Wed, 21 May 2025 09:06:44 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-ip-addressing-3494</link>
      <guid>https://dev.to/vrj_bhvsr/from-zero-to-devops-week-4-building-a-strong-foundation-in-linux-networking-ip-addressing-3494</guid>
      <description>&lt;p&gt;Welcome to Week 4 of my learning journey! This week, I’ve taken a different approach — rather than rushing through topics, I’ve decided to slow down and truly understand the core concepts of networking with clarity and calm.&lt;/p&gt;

&lt;p&gt;Networking can seem overwhelming at first, so I’m focusing on getting the fundamentals crystal clear. As I explore deeper areas, I’ll be documenting the concepts that need extra attention — and sharing them here in blog series format.&lt;/p&gt;

&lt;p&gt;In this part-wise series, you can expect topics like:&lt;/p&gt;

&lt;p&gt;📡 IP Addressing&lt;/p&gt;

&lt;p&gt;🌐 How DNS Works&lt;/p&gt;

&lt;p&gt;🔁 TCP Basics and Communication Flow&lt;br&gt;
… and more!&lt;/p&gt;

&lt;p&gt;I hope you find these insights helpful and interesting as I continue this journey. Let’s get started with the basics — one concept at a time.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✍️ Learning story
&lt;/h1&gt;

&lt;p&gt;I was already a week late in starting the networking module, and there was a lot to catch up on. So I began by researching where to start—and quickly realized that IP addressing is the foundation of networking. That’s where my journey began.&lt;/p&gt;

&lt;p&gt;To my surprise, IP addressing was relatively easy to understand. I learned about its versions, how it’s structured, and most importantly, why it’s needed. Along the way, I encountered a bunch of new terms I hadn’t heard before. Curious by nature, I started digging into every unfamiliar concept until things started making sense.&lt;/p&gt;

&lt;p&gt;I approached the topic by asking three key questions:&lt;br&gt;
&lt;strong&gt;What is IP addressing? Why do we need it? And how does it work?&lt;/strong&gt;&lt;br&gt;
The definition was pretty straightforward—just what the name suggests. But what helped me truly understand it was a simple real-world example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If I were working as a delivery person, I would need the correct address to deliver a package. In networking, the IP address is that “delivery address” where we send or receive data packets.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That analogy helped solidify the concept in my mind—and from there, the rest of networking started to click into place.&lt;/p&gt;

&lt;p&gt;When I was learning about IPv4 and IPv6, a question came to my mind:&lt;br&gt;
Does an IP address stay the same, or does it change over time?&lt;/p&gt;

&lt;p&gt;That’s when I discovered that there are actually &lt;strong&gt;two types of IP addresses&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Dynamic IP Address&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Static IP Address&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I learned that &lt;strong&gt;dynamic IPs&lt;/strong&gt; are assigned by the network automatically and can change frequently—like each time you reconnect to Wi-Fi or restart your router. So, in most cases, the IP address is not permanent.&lt;/p&gt;

&lt;p&gt;On the other hand, a &lt;strong&gt;static IP address&lt;/strong&gt; remains the same every time, unless it is manually changed. For example, a web server usually uses a static IP so that it can be reliably reached by users across the internet.&lt;/p&gt;

&lt;p&gt;While exploring further, I also came across private IPs and public IPs:&lt;/p&gt;

&lt;p&gt;The host portion of an IP address within a local network is called a private IP. This is what your router or local devices see.&lt;/p&gt;

&lt;p&gt;A public IP address is what the internet sees, and it is assigned to your network by your Internet Service Provider (ISP).&lt;/p&gt;

&lt;p&gt;Understanding these concepts helped me grasp how communication works between devices on a local network and across the internet.&lt;/p&gt;

&lt;p&gt;While learning about how devices communicate over networks, I also came across a few new terms like &lt;strong&gt;NAT (Network Address Translation)&lt;/strong&gt; and &lt;strong&gt;DHCP (Dynamic Host Configuration Protocol)&lt;/strong&gt;. These concepts helped me understand how a private IP is translated to a public IP when sending or receiving data over the internet.&lt;/p&gt;

&lt;p&gt;However, I realized that these topics dive a bit deeper into the workings of networking. So, I’ve decided to cover them in a separate section or future post.&lt;/p&gt;

&lt;p&gt;Later, I began to understand how these IP addresses are structured. &lt;strong&gt;IPv4 was pretty easy&lt;/strong&gt; to grasp—simple numbers separated by dots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IPv6 was also understandable&lt;/strong&gt;, but it introduced some new concepts that I hadn’t seen before. One interesting thing I learned was that IPv6 addresses can be &lt;strong&gt;shortened&lt;/strong&gt; to make them more readable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can remove leading zeros in each group.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can also collapse consecutive blocks of zeros using a double colon ::, but only once in an address.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ Example:&lt;br&gt;
Full IPv6: 2001:0db8:0000:0000:0000:0000:1428:57ab&lt;br&gt;
Shortened: 2001:db8::1428:57ab&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These little tricks helped me see that IPv6, though longer, is actually designed to be efficient and flexible.&lt;/p&gt;

&lt;p&gt;Afterward, I came across something quite surprising—in IPv6, the Interface ID (which is like the host portion of the address) is often automatically generated from the device’s MAC address. This is done using a process called &lt;strong&gt;EUI-64 (Extended Unique Identifier)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I found it interesting (and a bit unexpected!) that the hardware address of a device plays a role in forming its IP address. It made me realize how smart and automated networking protocols are becoming.&lt;/p&gt;

&lt;p&gt;But I decided not to go too deep into this topic for now—I’m guessing it will come up again in later chapters 😄. So I’m parking it here as a “to-explore-later” concept.&lt;/p&gt;

&lt;p&gt;📝 Note: I’ve documented more detailed insights on IP Addressing in my &lt;a href="https://github.com/vrjbhvsr/linux_for_DevOps_Practice/blob/main/Week_4/Readme.md#1-ip-adressing" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. Feel free to check it out — it’s written in a beginner-friendly way, based on my own understanding and learning experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  NAT (Network Address Translation)
&lt;/h2&gt;

&lt;p&gt;All the devices in our home — our phones, laptops, smart TVs — seem to connect to the internet, but our ISP (Internet Service Provider) provides only &lt;strong&gt;one public IP&lt;/strong&gt; address. So how do all these devices communicate with the internet through that single IP? That’s where I discovered &lt;strong&gt;NAT — Network Address Translation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NAT is like a receptionist at a large company. Imagine you walk into a huge office building with hundreds of employees, but there's only one official phone number for the entire building. When someone calls that number and asks for a specific employee, the receptionist knows which desk to forward the call to. Similarly, when a device inside your private network (say, your phone) makes a request to access a website, the router (acting as the NAT device) takes your phone's &lt;strong&gt;private IP address&lt;/strong&gt; and &lt;strong&gt;replaces&lt;/strong&gt; it with the &lt;strong&gt;public IP address&lt;/strong&gt; of your network. It then keeps track of which internal device made which request using &lt;strong&gt;port numbers&lt;/strong&gt;. So when a response comes back, the router knows exactly which device to send the data to.&lt;/p&gt;

&lt;p&gt;This clever trick allows hundreds of devices to share a single public IP without conflicts. It also adds a layer of security because devices inside the network are not directly exposed to the public internet. I found this mechanism fascinating — it’s a hidden but essential bridge between our private home networks and the vast internet outside.&lt;/p&gt;

&lt;p&gt;For now, I think this much information gives a solid foundation to understand IP addressing—what it is, why it matters, and how it works.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>networking</category>
      <category>ubuntu</category>
      <category>learning</category>
    </item>
    <item>
      <title>📑 Week 3 with Linux: Handling Files, Processes &amp; Services the DevOps Way 🐧</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Tue, 13 May 2025 08:33:24 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/week-3-with-linux-handling-files-processes-services-the-devops-way-3po5</link>
      <guid>https://dev.to/vrj_bhvsr/week-3-with-linux-handling-files-processes-services-the-devops-way-3po5</guid>
      <description>&lt;p&gt;Welcome back to my DevOps journey! This is my third week, and this week, I dived into some practical, engaging, and crucial Linux concepts, especially for DevOps Engineers. From bundling files and directories to understanding the workings of different services and processes, this week laid down the foundational knowledge that every DevOps professional should master.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(Optional intro note)&lt;br&gt;
Note: Life got a bit busy, so this blog is arriving a week later than planned—but the learning never stopped! Here's a full recap of what I explored during Week 3 of my Linux journey. 🚀&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📖 What I Learned This Week
&lt;/h2&gt;

&lt;p&gt;📦 Archiving, Compressing, and Backup&lt;/p&gt;

&lt;p&gt;Understood what tar and gunzip commands are for archiving and compressing files. These commands are essential for transferring and backing up the data effectively.&lt;/p&gt;

&lt;p&gt;🧠 Process Management&lt;/p&gt;

&lt;p&gt;Learned what a process is, how to start, and control a process, Signal, and process termination. Understood parent, child, orphan, and zombie processes. &lt;/p&gt;

&lt;p&gt;⚙️ Service Management&lt;/p&gt;

&lt;p&gt;Services (daemons) are background processes that keep critical functions running.&lt;br&gt;
In this section, I explored what service is, systemd basics, systemctl command, ts functions and journalctl for logging.&lt;/p&gt;

&lt;p&gt;✂️ Text Processing with awk&lt;br&gt;
The awk command is super powerful for text processing and reporting. I practised filtering logs and extracting columns from the output. I'm still exploring more text processing tools like sed, which I plan to cover in next week's blog.&lt;/p&gt;
&lt;h2&gt;
  
  
  📂 GitHub Repository
&lt;/h2&gt;

&lt;p&gt;Check out my GitHub repo for a detailed view of my learning. &lt;a href="https://github.com/vrjbhvsr/linux_for_DevOps_Practice.git" rel="noopener noreferrer"&gt;🔗 Linux_for DevOps&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ✍️ Learning story
&lt;/h2&gt;

&lt;p&gt;After completing my blog and LinkedIn post last week, I thought I’d dive right into the next set of topics the very next day. But luckily, I didn’t. Giving myself that short break helped me reset and start the week with better focus and energy.&lt;/p&gt;
&lt;h3&gt;
  
  
  📦 Archiving, Compressing, and Backup
&lt;/h3&gt;

&lt;p&gt;It took me a solid 4–5 hours to truly understand archiving, compression, and backup tasks. Surprisingly, getting familiar with the tar command and its operations was quite smooth. Learning about flags like &lt;code&gt;-c&lt;/code&gt; for creating a bundle and &lt;code&gt;-x&lt;/code&gt; for extracting it made me feel like the most intelligent person on earth for a moment—until I realized that was just a little delusion I was living in 😄 (jokes apart!).&lt;/p&gt;

&lt;p&gt;One real challenge I faced was when I tried to create an incremental backup. That part wasn’t as straightforward and pushed me to dig deeper into how tar handles snapshots and timestamps.&lt;/p&gt;

&lt;p&gt;When learning about backup, I created an archive and compressed it. I have also used the &lt;code&gt;-v&lt;/code&gt; verbose flag at first, and it gives me a long list of files and that are being archived. I was wondering there are only few files are there why it's showing so many files? &lt;/p&gt;

&lt;p&gt;As I walked through the output carefully, I realized it was because of the hidden .git folder inside my directory. Since .git contains many internal files and subdirectories, it ended up being included in the backup too.&lt;/p&gt;

&lt;p&gt;That’s when I discovered the --exclude= flag in tar. Using this, I was able to exclude the .git folder from the archive, keeping my backup clean and lightweight.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tar --exclude='*.git' --exclude='.webp' -czvf ubuntubackup.tar.gz /home/ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Incremental backup was another interesting part of the backup process. At first, I assumed that we could create an initial backup with the same &lt;code&gt;tar&lt;/code&gt; command above, but that was not the case. &lt;/p&gt;

&lt;p&gt;We have to create an incremental backup with &lt;code&gt;--listed-incremental=&lt;/code&gt;. This requires creating a tracking file, which can be &lt;code&gt;snapshot.snar&lt;/code&gt;, and using the same file for the next backup.&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;# ✅ Step 1: Create the full backup (with snapshot tracking)&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;--listed-incremental&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;snapshot.snar &lt;span class="nt"&gt;-czvf&lt;/span&gt; full_backup.tar.gz /home/vraj

&lt;span class="c"&gt;# ✅ Step 2: Later, create the incremental backup (with same snapshot file)&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;--listed-incremental&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;snapshot.snar &lt;span class="nt"&gt;-czvf&lt;/span&gt; incremental-backup.tar.gz /home/vraj
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This process is beneficial when you want to save space and time by backing up only the files that have changed.&lt;/p&gt;

&lt;p&gt;A deeper level of understanding clicked into place here, realising how efficient backups can be when done right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cron Jobs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This topic was extremely easy-at least from what I have understood so far. To schedule a task, we use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crontab -e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This opens the cron job editor, where we can add commands using cron syntax to automate tasks at specific times or intervals.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 3 * * * sudo tar --listed-incremental=snapshot.snar -czvf /home/vraj/$(date +\%F)-backup.tar.gz /home/ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧠 Process Management
&lt;/h3&gt;

&lt;p&gt;This part of the week took me 2–3 days to understand properly, but it was totally worth it. I decided to go in-depth with process-related concepts, which are crucial for system monitoring and debugging.&lt;/p&gt;

&lt;p&gt;I started with the ps command and explored its various flags like ps aux, ps -ef, and what each column in the output actually means—PID, TTY, TIME, CMD, etc.&lt;/p&gt;

&lt;p&gt;From there, I moved on to understanding different process states such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;R&lt;/code&gt; – Running&lt;/p&gt;

&lt;p&gt;&lt;code&gt;S&lt;/code&gt; – Sleeping&lt;/p&gt;

&lt;p&gt;&lt;code&gt;T&lt;/code&gt; – Stopped&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Z&lt;/code&gt; – Zombie&lt;/p&gt;

&lt;p&gt;&lt;code&gt;D&lt;/code&gt; – Uninterruptible sleep&lt;/p&gt;

&lt;p&gt;I also learned that additional flags or symbols can be appended to these states to provide further insights into process behaviour (like &amp;lt;, N, L).&lt;/p&gt;

&lt;p&gt;This topic was a bit heavy at first, but taking the time to explore it deeply gave me a much better grip on how Linux manages running applications.&lt;/p&gt;

&lt;p&gt;Next, I explored &lt;strong&gt;foreground and background processes&lt;/strong&gt;. I learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use fg to bring a process to the foreground&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use bg to resume a process in the background&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run commands directly in the background using &lt;code&gt;command &amp;amp;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then came &lt;strong&gt;daemon processes&lt;/strong&gt;—these are long-running background processes that typically start at boot time and don't interact directly with the user (like system services).&lt;/p&gt;

&lt;p&gt;To work more effectively with processes, I also learned how to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;pidof – to find the process ID of a specific running program&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;pgrep – to search for processes by name or other attributes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding these tools gave me more control and visibility over what's running on my system.&lt;/p&gt;

&lt;p&gt;It was a mixture of theory and hands-on commands throughout this topic. But honestly, once I understood the theory behind how Linux handles processes, all the commands started making sense and clicked together nicely.&lt;/p&gt;

&lt;p&gt;Everything was going smoothly... until I hit the wall with &lt;strong&gt;nohup&lt;/strong&gt; and &lt;strong&gt;disown&lt;/strong&gt;. These two threw me off at first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;nohup&lt;/code&gt; is used to run a command immune to hangups, meaning it keeps running even if you log out of the terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;disown&lt;/code&gt; removes a job from the shell’s job table so that it won’t be sent a SIGHUP signal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It took some experimenting (and a few "why isn't this working?" moments 😅) to wrap my head around these, especially how they behave differently when combined with background processes and terminal sessions.&lt;/p&gt;

&lt;p&gt;But in the end, understanding these helped me appreciate how powerful and flexible Linux process management really is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process Priorities &amp;amp; Scheduling&lt;/strong&gt;&lt;br&gt;
This part of Linux was like opening a whole new chapter. As soon as I heard &lt;em&gt;“we can change process priorities from user space,” my brain went: Wait... can we really influence how the CPU schedules things? 😯&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I started with nice and renice, and while they seemed simple at first, I couldn't help but ask:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“If I’m just a user, how am I deciding what the CPU should prioritize?”&lt;br&gt;
“Is the kernel really listening to my commands?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Turns out—yes and no. We’re only making a request. The actual scheduling still happens in kernel space, and we’re just nudging it politely.&lt;/p&gt;

&lt;p&gt;Then came the big topic: &lt;strong&gt;CPU Scheduling&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“How does Linux even choose what to run next?”&lt;br&gt;
“Why doesn’t one heavy process block everything else?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Enter the CFS (Completely Fair Scheduler)—a beautifully balanced mechanism that uses weights from nice values to give everyone a fair share of CPU time. It made me appreciate how Linux handles both my casual script and a resource-hungry service without crashing.&lt;/p&gt;

&lt;p&gt;Then I met the real-time scheduling policies: &lt;code&gt;SCHED_FIFO&lt;/code&gt; and &lt;code&gt;SCHED_RR&lt;/code&gt;. That’s when things got serious.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“So, a high-priority real-time process can literally block others?”&lt;br&gt;
“What if I accidentally lock out important services?” 😨&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Learning &lt;code&gt;chrt&lt;/code&gt;, how &lt;strong&gt;SCHED_FIFO&lt;/strong&gt; just runs until it’s done (rude but efficient 😅), and how &lt;strong&gt;SCHED_RR&lt;/strong&gt; slices time to share among processes—it all made sense when I thought about critical systems like robotics or media players.&lt;/p&gt;

&lt;p&gt;And just when I thought I was done, I stumbled into the world of parent-child processes. I always saw them in ps output but never knew how they were actually created.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“What’s this mysterious &lt;code&gt;fork()&lt;/code&gt; I keep hearing about?”&lt;br&gt;
“And why does everyone pair it with &lt;code&gt;exec()&lt;/code&gt;?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I finally understood it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;fork()&lt;/code&gt; duplicates the current process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;exec()&lt;/code&gt; replaces it with a new one.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s like cloning yourself, and then your clone decides to go become something else entirely.&lt;/p&gt;

&lt;p&gt;This section was filled with &lt;strong&gt;"aha!" moments&lt;/strong&gt; and just as many &lt;strong&gt;"wait, what?"&lt;/strong&gt; questions. But that’s what made it so memorable. Linux doesn’t just run stuff—it orchestrates a smart, layered system of priorities and fairness, and I feel like I finally got a peek behind the curtain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Service Management&lt;/strong&gt;&lt;br&gt;
This part of my Linux journey felt like stepping behind the scenes of a live show—where services were the backstage crew making everything work smoothly.&lt;/p&gt;

&lt;p&gt;At first, I kept seeing strange names ending with “d” like sshd, cron, and mysqld, and I wondered what all of them were doing quietly in the background. Once I realized these were daemons—background programs that manage system-level tasks—it all clicked! I started seeing my Linux machine like a team of silent workers, each focused on a job.&lt;/p&gt;

&lt;p&gt;Then came &lt;strong&gt;systemd&lt;/strong&gt;. I had heard that it’s the first process that boots up your system, but when I found that PID 1 is always systemd, something about it felt profound—like meeting the captain of a ship. Digging deeper into units, I was fascinated by how everything was structured so logically: &lt;code&gt;.service&lt;/code&gt; files to manage services, &lt;code&gt;.socket&lt;/code&gt; files to wait for requests, &lt;code&gt;.target&lt;/code&gt; to group services—it was like Linux had its own smart task manager.&lt;/p&gt;

&lt;p&gt;🧠 I especially loved the idea of &lt;code&gt;.socket&lt;/code&gt; units starting &lt;code&gt;.service&lt;/code&gt; units only when needed—like on-demand employees showing up just in time for their tasks.&lt;/p&gt;

&lt;p&gt;Then I met &lt;code&gt;systemctl&lt;/code&gt;. It became my remote control for all services. Whether I wanted to start, stop, restart, or even enable a service to run on every boot, systemctl was there. And when I made a mistake? No worries—&lt;code&gt;systemctl status &amp;lt;service&amp;gt;&lt;/code&gt; helped me debug it.&lt;/p&gt;

&lt;p&gt;One of the coolest parts was learning how to track logs with journalctl. At first, logs felt overwhelming—like endless streams of tech gibberish—but using flags like &lt;code&gt;-u&lt;/code&gt;, &lt;code&gt;-b&lt;/code&gt;, or even &lt;code&gt;--since&lt;/code&gt; &lt;code&gt;"1 hour ago"&lt;/code&gt; helped me filter and understand exactly what happened and when.&lt;/p&gt;

&lt;p&gt;By the end of this section, I felt like I had unlocked the admin dashboard of Linux. Now I could control what runs, when it runs, and how it behaves—even troubleshoot when things go wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Resources I Used
&lt;/h2&gt;

&lt;p&gt;Learning Linux the DevOps way can be intense, but these resources made it much more approachable and enjoyable:&lt;/p&gt;

&lt;p&gt;🎥 YouTube Channels&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=29eDuMjsEF8&amp;amp;t=0s" rel="noopener noreferrer"&gt;Abishek Veermala&lt;/a&gt;,&lt;a href="https://www.youtube.com/watch?v=SJTJVb5w45E&amp;amp;t=0s" rel="noopener noreferrer"&gt;Shubham Londhe&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=kmk3_kEiJvk&amp;amp;t=0s" rel="noopener noreferrer"&gt;M Prashant&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🤖 ChatGPT&lt;br&gt;
Whenever I had doubts, needed real-world analogies, or just wanted to understand the “why” behind a command or concept, ChatGPT was my go-to support system. It didn’t just give me answers—it helped me build clarity, reinforce my understanding, and apply concepts more effectively in real scenarios.&lt;/p&gt;

&lt;p&gt;Also, while writing this blog, it helped me refine my thoughts and structure my words—making it easier to share my journey in a clearer and more engaging way.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Wrapping Up Week 3 – Ready for What’s Next?
&lt;/h2&gt;

&lt;p&gt;This week was a deep dive into the inner workings of Linux—from backing up data smartly, understanding process scheduling, to mastering service management like a pro. Every topic helped me see Linux not just as an OS, but as a finely tuned system where every process, priority, and service has its own rhythm and reason.&lt;/p&gt;

&lt;p&gt;If you've been following along and exploring these concepts with me, you’ve already taken a big leap toward becoming comfortable with system-level operations—something that once felt intimidating.&lt;/p&gt;

&lt;p&gt;But we’re not stopping here.&lt;/p&gt;

&lt;p&gt;In Week 4, we’re stepping into the world of networking and security—how Linux connects, communicates, and protects itself. From firewalls to SSH hardening, from managing ports to monitoring network traffic… it's going to be packed with real-world, hands-on skills.&lt;/p&gt;

&lt;p&gt;Stay tuned—Week 4 is where we start thinking like system administrators and security-minded professionals.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>100daysofcode</category>
      <category>100daysofdevops</category>
    </item>
    <item>
      <title>📈From Zero to DevOps: My Week 2 with Linux Commands🐧</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Sun, 27 Apr 2025 20:01:31 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/from-zero-to-devops-my-week-2-with-linux-commands-4b3e</link>
      <guid>https://dev.to/vrj_bhvsr/from-zero-to-devops-my-week-2-with-linux-commands-4b3e</guid>
      <description>&lt;p&gt;In my second week, I dove into more advanced topics, focusing on user management, file permissions, and file systems. Here’s what I learned:&lt;/p&gt;

&lt;h2&gt;
  
  
  💪 What I Learned This Week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. User Account Management👥&lt;/strong&gt;&lt;br&gt;
I have learned how to switch between the users, how to create and manage users and groups using: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sudo -i&lt;/code&gt; to switch to root user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;su - username&lt;/code&gt; to switch to another user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useradd&lt;/code&gt; and related flags to create users&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;usermod&lt;/code&gt; to modify user attributes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;groupadd&lt;/code&gt; to create groups&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;passwd&lt;/code&gt; to set the password for the users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Linux File System📂&lt;/strong&gt;&lt;br&gt;
I took a deeper dive into Linux file systems, focusing on the structure and organisation of files on disk. I explored:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The differences between ext4, XFS and other file systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How inode works in managing file metadata&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The importance of block storage and its role in organizing file data&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding Linux file systems gave me insight into how data is stored and retrieved on disk, which is essential when working with larger systems or setting up new environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Linux File Structure📂&lt;/strong&gt;&lt;br&gt;
I explored the hierarchical layout of the Linux root directory (/).&lt;br&gt;
I learned what each central directory is responsible for, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;/bin – Essential command binaries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/sbin – System binaries for administrative tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/usr – User programs and data (Unix System Resources)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/etc – Configuration files for the system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/home – Home directories for all users&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/var – Variable files like logs, spool files, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/tmp – Temporary files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;/dev, /proc, /sys – Special directories for device files and kernel information&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding the file structure helped me navigate the system more confidently and organise my work better as a DevOps learner!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Types of Files 📚&lt;/strong&gt;&lt;br&gt;
I understand the various file types in the Linux system and their uses.&lt;br&gt;
The file types are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regular Files (-)&lt;/li&gt;
&lt;li&gt;Directory (d)&lt;/li&gt;
&lt;li&gt;Symbolic link (l)&lt;/li&gt;
&lt;li&gt;Character Device files (c)&lt;/li&gt;
&lt;li&gt;Block Device Files (b)&lt;/li&gt;
&lt;li&gt;Named pipe or FIFO files (p)&lt;/li&gt;
&lt;li&gt;Socket Files (s)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. File Permissions🔐&lt;/strong&gt;&lt;br&gt;
I learned about the importance of file permissions in Linux and how they control who can access and modify files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The reason to change the permissions:  Security 🛡️, Access Control 👨‍💻, Team collaborations 🤝,  Functionality ⚙️&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;r (read), w (write), and x (execute) permissions for user, group, and others&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using chmod to change file permissions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Symbols like (+) to add and (-) to remove and (a) allow all(everyone) permissions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding file permissions was crucial to managing file access in a multi-user system and protecting sensitive data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. User Permissions🧑‍💻&lt;/strong&gt;&lt;br&gt;
I learned how to manage file and directory permissions for different users and groups.&lt;br&gt;
Specifically, I practiced using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;chown&lt;/code&gt; – to change the owner of a file or directory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;chgrp&lt;/code&gt; – to change the group ownership of a file or directory.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This knowledge is crucial in a multi-user environment to control access, maintain security, and manage collaboration across different teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Access Control List🛡️&lt;/strong&gt;&lt;br&gt;
I explored Access Control Lists (ACLs), which provide more granular control over file permissions. I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;getfacl to view the ACLs of files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;setfacl to set permissions for specific users or groups&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was a great way to control permissions beyond the basic user/group/others model.&lt;/p&gt;

&lt;h2&gt;
  
  
  📂 GitHub Repository
&lt;/h2&gt;

&lt;p&gt;I have created a GitHub repository to upload all my scripts and practice exercises.  &lt;a href="https://github.com/vrjbhvsr/linux_for_DevOps_Practice.git" rel="noopener noreferrer"&gt;🔗 Linux_for DevOps&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next on the Journey?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Next Steps 🚀
&lt;/h3&gt;

&lt;p&gt;Now that I’ve covered the basics of file permissions, user management, and file systems, I’m ready to dive deeper into the following topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Working with .tar files and compressed archives&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mastering regular expressions for efficient text processing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Understanding system processes, logs, and service management&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exploring Linux networking for DevOps tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuing with hands-on practice on AWS EC2 instances&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;My Learning Journey is just beginning, and I’m excited to see where this path takes me as I gain more experience in DevOps.&lt;/p&gt;

&lt;p&gt;If you're on a similar journey, let’s learn together. 😊&lt;br&gt;
Thanks for reading!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>learninginpublic</category>
      <category>100daysofdevops</category>
    </item>
    <item>
      <title>📈From Zero to DevOps: My First Week with Linux Commands🐧</title>
      <dc:creator>Vraj Bhavsar</dc:creator>
      <pubDate>Wed, 16 Apr 2025 10:30:08 +0000</pubDate>
      <link>https://dev.to/vrj_bhvsr/from-zero-to-devops-my-first-week-with-linux-commands-b0h</link>
      <guid>https://dev.to/vrj_bhvsr/from-zero-to-devops-my-first-week-with-linux-commands-b0h</guid>
      <description>&lt;p&gt;Hey everyone!👋&lt;br&gt;
I am starting my DevOps journey and decided to document my weekly progress here on dev.to. This week, I focused on Linux basics, how to handle files and directories, and the basics of writing .sh files using the command line📑.&lt;/p&gt;
&lt;h2&gt;
  
  
  💪 What I Learned This Week
&lt;/h2&gt;

&lt;p&gt;This week, I focused on building a strong foundation in Linux as part of my DevOps learning journey. Here’s what I covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧭 Navigating the filesystem with commands like &lt;code&gt;pwd&lt;/code&gt;, &lt;code&gt;cd&lt;/code&gt;, and &lt;code&gt;ls&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📁 Creating and removing files and directories using &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;mkdir&lt;/code&gt;, and &lt;code&gt;rm&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📄 Viewing file contents using &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;less&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;more&lt;/code&gt;, and &lt;code&gt;tail&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🧹 Text processing using filter commands like &lt;code&gt;grep&lt;/code&gt; and &lt;code&gt;sort&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🛠️ Installing and using the &lt;code&gt;vim&lt;/code&gt; text editor&lt;/li&gt;
&lt;li&gt;📝 Writing shell scripts and making them executable using:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#!/bin/bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chmod +x filename&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Example bash Script📝
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello world! I am excited to start my DevOps journey."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Saved this script as hello_world.sh.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  📂 GitHub Repository
&lt;/h2&gt;

&lt;p&gt;I have created a GitHub repository where I am uploading all my scripts and practice exercises.&lt;br&gt;
&lt;a href="https://github.com/vrjbhvsr/linux_for_DevOps_Practice.git" rel="noopener noreferrer"&gt;🔗 Linux_for DevOps&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This repo includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All the scripts(.sh files)&lt;/li&gt;
&lt;li&gt;Structured Readme.md files&lt;/li&gt;
&lt;li&gt;Screenshots for example, scripts and their output&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  😱 Challenges I Faced During Learning
&lt;/h2&gt;

&lt;p&gt;The first challenge that every beginner runs into is: &lt;strong&gt;"Where do I start?"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
There are so many resources out there that it can feel overwhelming. I was confused about which platforms to trust and whether I needed to pay for a course. After exploring a few options, I decided to stick with &lt;strong&gt;free YouTube tutorials&lt;/strong&gt; — and that turned out to be a good decision for me.&lt;/p&gt;

&lt;p&gt;The next hurdle was figuring out: &lt;strong&gt;"Where should I actually practice Linux commands?"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Should I go with Oracle VirtualBox? Or maybe spin up an AWS EC2 instance? 🤔&lt;br&gt;&lt;br&gt;
I started with VirtualBox and installed the Ubuntu ISO, and just got my hands dirty! 💻&lt;/p&gt;

&lt;p&gt;I actually found it &lt;strong&gt;super simple&lt;/strong&gt; when I first started learning basic Linux commands.&lt;br&gt;&lt;br&gt;
But confusion hit me pretty early — especially with the &lt;code&gt;cd&lt;/code&gt; command.&lt;br&gt;&lt;br&gt;
I wasn’t sure what the difference was between &lt;code&gt;cd ~&lt;/code&gt; and &lt;code&gt;cd /&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
Later, I figured out that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cd ~&lt;/code&gt; takes you to your &lt;strong&gt;home directory&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd /&lt;/code&gt; takes you to the &lt;strong&gt;root directory&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I stumbled while using the &lt;code&gt;cat&lt;/code&gt; command.&lt;br&gt;&lt;br&gt;
I wanted to write a message into a file and did something like:&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;cat&lt;/span&gt; &lt;span class="s2"&gt;"This is my message"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That didn’t work the way I expected. I was mixing it up with how we use echo.&lt;br&gt;
Eventually, I learned the right way to use cat for creating and writing into files is:&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;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later, I ran into another hiccup when I tried using the rmdir command to delete a directory.&lt;br&gt;
It kept showing the error: "Directory not empty".&lt;br&gt;
After some trial and error, I learned that if a directory isn’t empty, you need to use:&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; directory_name

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I ran into issues when I tried uploading my files to GitHub.&lt;br&gt;&lt;br&gt;
Even though I entered the correct username and password, Git kept throwing authentication errors. 😤&lt;br&gt;&lt;br&gt;
I spent a few hours trying to fix it, and eventually decided to switch over to an &lt;strong&gt;AWS EC2 instance&lt;/strong&gt; instead of using VirtualBox.&lt;/p&gt;

&lt;p&gt;To my surprise, it was much &lt;strong&gt;simpler and smoother&lt;/strong&gt; to work with Git on EC2. Everything just clicked into place! ⚡&lt;/p&gt;

&lt;h2&gt;
  
  
  ⏭️ What’s Next?
&lt;/h2&gt;

&lt;p&gt;In week 2, I will be diving deeper into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧑‍💻 User &amp;amp; file permissions
&lt;/li&gt;
&lt;li&gt;📦 Working with &lt;code&gt;.tar&lt;/code&gt; and compressed files
&lt;/li&gt;
&lt;li&gt;🔍 Regular Expressions (grep, sed, etc.)
&lt;/li&gt;
&lt;li&gt;⏳ Additional topics depending on time availability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I'm enjoying the process so far. Linux is super powerful, and even small scripts can save a lot of time. I'm still learning and open to feedback or suggestions from the community.&lt;/p&gt;

&lt;p&gt;If you're also on a DevOps or Linux journey, let’s connect! 🚀&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/vrj_bhvsr"&gt;@vrj_bhvsr&lt;/a&gt; &lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>learninginpublic</category>
      <category>100daysofdevops</category>
    </item>
  </channel>
</rss>
