<?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: Hosni Zaaraoui</title>
    <description>The latest articles on DEV Community by Hosni Zaaraoui (@hosni_zaaraoui).</description>
    <link>https://dev.to/hosni_zaaraoui</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%2F3867961%2F9de0eb71-c19d-47e4-8eb9-1b96d8a0497b.png</url>
      <title>DEV Community: Hosni Zaaraoui</title>
      <link>https://dev.to/hosni_zaaraoui</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hosni_zaaraoui"/>
    <language>en</language>
    <item>
      <title>Tech Infrastructure &amp; Security Weekly Digest</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Mon, 25 May 2026 11:50:02 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/tech-infrastructure-security-weekly-digest-34h8</link>
      <guid>https://dev.to/hosni_zaaraoui/tech-infrastructure-security-weekly-digest-34h8</guid>
      <description>&lt;p&gt;Welcome to this week's technical news analysis. This edition breaks down groundbreaking shifts in autonomous AI exploitation, the expansion of local-to-cloud native tools, and massive global investments straining our current power grids.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Dawn of Autonomous Exploitation: DARPA and Frontier AI Shake Infrastructure Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Happened
&lt;/h3&gt;

&lt;p&gt;At the latest DARPA AI bug-hunting challenge, security researchers demonstrated a fundamental shift in vulnerability discovery. AI agents autonomously identified, chained, and exploited highly complex vulnerabilities in core infrastructure software—including the &lt;strong&gt;Linux kernel&lt;/strong&gt;, the &lt;strong&gt;U-Boot boot loader&lt;/strong&gt;, and foundational &lt;strong&gt;Apache libraries&lt;/strong&gt;. Concurrently, Anthropic highlighted capabilities in frontier models (such as their &lt;em&gt;Mythos Preview&lt;/em&gt;) that autonomously achieve local privilege escalation in Linux environments by chaining multiple zero-day flaws without human intervention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters
&lt;/h3&gt;

&lt;p&gt;This marks the official transition from AI acting as a defensive assistant to AI acting as an autonomous threat actor. Security teams can no longer rely on manual patch management or standard "point-in-time" vulnerability scans. Because these autonomous agents can pivot from initial network entry to deep horizontal movement in under an hour, infrastructure administrators must pivot to automated, continuous mitigation to keep up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beginner Explanation
&lt;/h3&gt;

&lt;p&gt;Imagine your server's security is like a giant castle. Traditionally, a hacker had to manually test every single brick to find a loose one, climb up, and find another weak spot inside. It took days or weeks. Now, an "AI Agent" is like a swarm of thousands of automated inspectors that can scan the whole castle in seconds, instantly find four different minor, unrelated flaws, and figure out exactly how to combine them to open the front gates—completely on their own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Technical Insight
&lt;/h3&gt;

&lt;p&gt;The core threat vector lies in the orchestration capabilities of modern LLM architectures when paired with execution sandboxes. Instead of merely identifying isolated buffer overflows or race conditions, these agentic workflows utilize iterative execution feedback loops.&lt;/p&gt;

&lt;p&gt;For instance, an agent encounters an unpatched &lt;code&gt;io_uring&lt;/code&gt; or &lt;code&gt;netfilter&lt;/code&gt; subsystem flaw in the Linux kernel. If the initial exploit payload fails, the agent parses the kernel panic log or registers state, modifies the shellcode dynamically, and tests alternative heap-grooming techniques until successful &lt;strong&gt;Local Privilege Escalation (LPE)&lt;/strong&gt; is achieved. This makes traditional static signature detection entirely obsolete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Takeaway
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Action Item:&lt;/strong&gt; Security Operations Centers (SOCs) must transition from passive vulnerability management to &lt;strong&gt;Continuous Threat Exposure Management (CTEM)&lt;/strong&gt;. Prioritize implementing runtime security tools (like eBPF-based systems) that detect anomalous kernel behaviors rather than relying solely on post-vulnerability CVE patches.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Learning Corner: What is Local Privilege Escalation (LPE)?
&lt;/h3&gt;

&lt;p&gt;Local Privilege Escalation occurs when an attacker who already has restricted, low-level access to a system (such as a standard user account or a compromised service container) exploits a flaw in the operating system kernel or a root-running daemon to grant themselves full system administrative rights (&lt;code&gt;root&lt;/code&gt; or &lt;code&gt;SYSTEM&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Red Hat Bridges Local Dev and Cloud Infrastructure for Agentic Workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Happened
&lt;/h3&gt;

&lt;p&gt;At the recent Red Hat Summit, Red Hat announced the general availability of &lt;strong&gt;Red Hat Desktop&lt;/strong&gt; alongside massive upgrades to its &lt;strong&gt;Advanced Developer Suite&lt;/strong&gt;. The release specifically focuses on bridging the gap between an engineer’s local workstation and complex hybrid cloud targets, focusing heavily on building and deploying containerized, "agentic" AI applications seamlessly across Kubernetes and OpenShift environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters
&lt;/h3&gt;

&lt;p&gt;DevOps engineers often face a painful friction point: code works flawlessly on a local machine but fails due to networking, storage, or permission mismatches when pushed to cloud environments. By unifying local containers with enterprise cloud fabrics, Red Hat is standardizing the pipeline for the next generation of automation tools, significantly reducing time-to-production for engineering teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beginner Explanation
&lt;/h3&gt;

&lt;p&gt;When developers build software, they usually write and test it on their personal laptops. But when it goes live, it runs on massive networks of cloud servers. This often leads to the classic developer excuse: &lt;em&gt;"Well, it worked on my machine!"&lt;/em&gt; Red Hat's new tools essentially clone the exact environment of the giant cloud system and shrink it down into the developer's laptop, ensuring that whatever works locally will work perfectly in the cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Technical Insight
&lt;/h3&gt;

&lt;p&gt;The underlying integration heavily optimizes local container runtimes (via &lt;code&gt;Podman&lt;/code&gt;) to mirror enterprise &lt;strong&gt;Kubernetes/OpenShift&lt;/strong&gt; constructs. This features native manifests, local ingress routing simulation, and identical security context constraints (SCCs).&lt;/p&gt;

&lt;p&gt;For engineers building AI-native apps, it allows local testing of persistent data stores and microservices, mapping hardware execution directly from local developer GPUs (using NVIDIA CUDA runtimes) straight into production-ready OpenShift deployment templates without rewriting configuration file definitions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Takeaway
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Action Item:&lt;/strong&gt; DevOps and platform engineers should download and evaluate the new Red Hat Advanced Developer Suite to build out unified local-to-cloud workflows, focusing specifically on containerizing applications using &lt;strong&gt;Podman&lt;/strong&gt; to eliminate runtime drift.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Learning Corner: Podman vs. Docker
&lt;/h3&gt;

&lt;p&gt;While Docker uses a centralized background service (a background daemon running as root) to manage containers, &lt;strong&gt;Podman&lt;/strong&gt; is architecture-rootless and daemonless by default. This means Podman launches containers as direct child processes of the user who called them, drastically lowering the system's attack surface and making local development significantly more secure.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Hyper-Scale Strain: AI Data Center Demands Trigger Search for Sustainable Infrastructure
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Happened
&lt;/h3&gt;

&lt;p&gt;Global technology market forecasts from Gartner highlighted that worldwide spending on AI infrastructure is climbing over 47% year-over-year, driven heavily by AI-optimized servers, network fabrics, and specialized cloud environments. This unprecedented hyper-scale expansion is putting severe pressure on global energy grids, prompting hyperscalers to venture into alternative energy markets—including the successful IPO debut of geothermal energy startups like Fervo Energy, backed heavily by data center demand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters
&lt;/h3&gt;

&lt;p&gt;For systems architects and cloud engineers, infrastructure is no longer just a software configuration problem; it is a physical and environmental constraint. The massive power draw of modern high-density compute clusters means that availability zones, region selections, and cloud expenditures will increasingly be dictated by green energy access and thermal efficiency constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beginner Explanation
&lt;/h3&gt;

&lt;p&gt;Every time you ask an advanced AI to generate text, code, or images, a massive cluster of high-tech computers in a remote data center has to do incredibly heavy math. These computers run so hot and pull so much electricity that our normal power grids are struggling to keep up. Because of this, tech giants are now funding alternative energy sources, like tapping into the natural heat from deep inside the Earth (geothermal energy), just to keep their data servers running.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Technical Insight
&lt;/h3&gt;

&lt;p&gt;Modern AI clusters utilizing high-performance server blocks demand staggering levels of &lt;strong&gt;Power Usage Effectiveness (PUE)&lt;/strong&gt; and altered data center architectures. Traditional data centers were engineered for low-density racks (averaging 5kW to 15kW per rack).&lt;/p&gt;

&lt;p&gt;Next-generation AI server deployments demand upwards of 40kW to 100kW+ per rack. This shift forces a massive infrastructure migration away from traditional air cooling toward closed-loop liquid cooling architectures and direct grid ties to carbon-free base-load energy providers like enhanced geothermal systems (EGS) or Small Modular Reactors (SMRs).&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical Takeaway
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Action Item:&lt;/strong&gt; Cloud architects should prioritize studying &lt;strong&gt;FinOps&lt;/strong&gt; frameworks and green computing patterns. When designing massive pipeline workloads, evaluate multi-region deployment topologies that dynamically target cloud regions optimized for low-carbon footprints and higher power efficiencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Learning Corner: What is PUE?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Power Usage Effectiveness (PUE)&lt;/strong&gt; is a standard metric used to determine how efficiently a computer data center uses energy. It is calculated using the following formula:&lt;/p&gt;

&lt;p&gt;$$\text{PUE} = \frac{\text{Total Facility Energy}}{\text{IT Equipment Energy}}$$&lt;/p&gt;

&lt;p&gt;An ideal PUE is $1.0$, meaning every single watt of power entering the facility goes directly into powering the actual computing servers, rather than being wasted on cooling systems or lighting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Trends This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rise of Agentic Architectures:&lt;/strong&gt; AI is rapidly evolving from a passive text chatbot into persistent, multi-step autonomous software agents capable of executing complex code pipelines and network probing independently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Death of Periodic Monitoring:&lt;/strong&gt; The speed at which autonomous exploits can occur is forcing enterprises to ditch daily/weekly vulnerability scans in favor of live, continuous runtime analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Density Shift in the Cloud:&lt;/strong&gt; Cloud data centers are shifting dramatically from general-purpose CPUs to high-density compute environments, reshaping the physical layout, cooling requirements, and energy reliance of the cloud.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>ai</category>
      <category>agents</category>
      <category>linux</category>
    </item>
    <item>
      <title>When Ping Doesn't Quite Work as Expected</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Sun, 17 May 2026 12:08:11 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/when-ping-doesnt-quite-work-as-expected-3dpg</link>
      <guid>https://dev.to/hosni_zaaraoui/when-ping-doesnt-quite-work-as-expected-3dpg</guid>
      <description>&lt;p&gt;I was trying to troubleshoot a network issue the other day and I found myself staring at a ping command that just wouldn't work. &lt;/p&gt;

&lt;p&gt;I was trying to ping a website, but it kept saying 'unknown host'. I was confused - I knew the website was up and running, so why couldn't I ping it? &lt;/p&gt;

&lt;p&gt;It turns out, the issue was with the DNS resolution. The ping command relies on the DNS to resolve the hostname to an IP address.&lt;/p&gt;

&lt;p&gt;If the DNS can't resolve the hostname, the ping command will fail.&lt;/p&gt;

&lt;p&gt;To fix the issue, I used the 'dig' command to check the DNS resolution. &lt;/p&gt;

&lt;p&gt;I realized that the DNS server I was using wasn't able to resolve the hostname. I switched to a different DNS server and voila! The ping command started working. &lt;/p&gt;

&lt;p&gt;The takeaway from this experience is that networking issues can often be complex and multi-layered. &lt;br&gt;
It's not always just a simple matter of 'it works' or 'it doesn't work'. &lt;br&gt;
Sometimes, you need to dig deeper (pun intended) to understand what's really going on. &lt;/p&gt;

&lt;p&gt;What's your go-to command for troubleshooting network issues?&lt;/p&gt;

</description>
      <category>linuxtips</category>
      <category>networkingbasics</category>
      <category>troubleshooting</category>
    </item>
    <item>
      <title>Unraveling the Mystery of SSH Connection Refusals</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Thu, 14 May 2026 09:08:56 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/unraveling-the-mystery-of-ssh-connection-refusals-4pka</link>
      <guid>https://dev.to/hosni_zaaraoui/unraveling-the-mystery-of-ssh-connection-refusals-4pka</guid>
      <description>&lt;p&gt;I was trying to set up a new homelab server the other day, and I stumbled upon this frustrating issue. &lt;/p&gt;

&lt;p&gt;At first, I thought it was a firewall problem, but after checking the rules, I realized that wasn't the case. &lt;/p&gt;

&lt;p&gt;After some digging, I discovered that the issue was due to the SSH service not being enabled on the server. &lt;br&gt;
I know, I know, it sounds like a rookie mistake! &lt;/p&gt;

&lt;p&gt;But here's the thing: I had enabled the service, but I hadn't restarted it after making some configuration changes. &lt;/p&gt;

&lt;p&gt;The command 'sudo systemctl restart sshd' saved the day. &lt;/p&gt;

&lt;p&gt;It got me thinking, though - what other services might be in a similar state? &lt;/p&gt;

&lt;p&gt;I started checking the status of other services, and sure enough, I found a few that needed a restart. &lt;/p&gt;

&lt;p&gt;Moral of the story: always double-check the service status after making changes, and don't be afraid to restart when necessary.&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>My Linux Permissions Epiphany</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Sun, 10 May 2026 12:00:26 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/my-linux-permissions-epiphany-246c</link>
      <guid>https://dev.to/hosni_zaaraoui/my-linux-permissions-epiphany-246c</guid>
      <description>&lt;p&gt;I was trying to delete a file in my homelab the other day, but I kept getting a permission denied error, even though I was logged in as root. I was confused - I thought being root meant I had unlimited power over the system.&lt;/p&gt;

&lt;p&gt;It turns out, I was misunderstanding how Linux permissions work.&lt;/p&gt;

&lt;p&gt;The root user can't necessarily overwrite any file, especially if it's owned by a different user or has specific permissions set.&lt;/p&gt;

&lt;p&gt;I learned that the 'chmod' command can be used to change the permissions of a file, and the 'chown' command can be used to change the owner of a file. &lt;br&gt;
For example, to change the permissions of a file to allow the owner to read, write, and execute, you can use the command: chmod 700 filename.&lt;/p&gt;

&lt;p&gt;My takeaway from this experience is that understanding Linux permissions is crucial for any system administrator. &lt;br&gt;
It's not just about being the root user, but about understanding how the system is configured and how to work within those constraints.&lt;/p&gt;

&lt;p&gt;What's your most memorable Linux permissions lesson?&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>Debugging a Mysterious Docker Issue</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Sat, 09 May 2026 09:22:21 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/debugging-a-mysterious-docker-issue-3o9e</link>
      <guid>https://dev.to/hosni_zaaraoui/debugging-a-mysterious-docker-issue-3o9e</guid>
      <description>&lt;p&gt;I recently encountered a weird issue with my Docker container where it would start, run for a few seconds, and then exit with a non-zero status code. &lt;/p&gt;

&lt;p&gt;I checked the logs, but there were no obvious errors. &lt;/p&gt;

&lt;p&gt;I spent hours trying to figure out what was going on, trying different Docker commands and searching online for solutions. &lt;/p&gt;

&lt;p&gt;It wasn't until I used the 'docker logs -f' command to view the container's logs in real-time that I saw the issue. &lt;/p&gt;

&lt;p&gt;The problem was that my container was trying to connect to a database that wasn't available yet. &lt;/p&gt;

&lt;p&gt;I realized that I needed to add a dependency to my Docker Compose file to ensure that the database was up and running before my container started. &lt;/p&gt;

&lt;p&gt;The fix was simple, but it took me a while to get there. &lt;/p&gt;

&lt;p&gt;Has anyone else ever encountered a similar issue? What was your solution?&lt;/p&gt;

</description>
      <category>docker</category>
      <category>linux</category>
    </item>
    <item>
      <title>The day I realized the shebang matters</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Sat, 09 May 2026 08:50:14 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/the-day-i-realized-the-shebang-matters-3j1h</link>
      <guid>https://dev.to/hosni_zaaraoui/the-day-i-realized-the-shebang-matters-3j1h</guid>
      <description>&lt;p&gt;First I ran:&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; +x hello.py
./hello.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and got:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Permission denied

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

&lt;/div&gt;



&lt;p&gt;I thought the 755 bit was enough, but the real issue was the shebang line.&lt;/p&gt;

&lt;p&gt;If the first line of a script doesn't point to a valid interpreter, the kernel tries to execute the file directly and fails with permission denied.&lt;/p&gt;

&lt;p&gt;The fix? Add a proper shebang:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/usr/bin/env python3
&lt;/h1&gt;

&lt;p&gt;or point to the exact path:&lt;/p&gt;

&lt;h1&gt;
  
  
  !/usr/bin/python3
&lt;/h1&gt;

&lt;p&gt;Then run chmod +x hello.py again.&lt;/p&gt;

&lt;p&gt;Now it works.&lt;br&gt;
Lesson: Always double-check the shebang, especially when moving scripts between machines.&lt;/p&gt;

&lt;p&gt;Have you run into this before?&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>Welcoming My DEV.to Content Generator Agent</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Sat, 09 May 2026 08:36:23 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/wlcoming-my-devto-content-generator-agent-1iod</link>
      <guid>https://dev.to/hosni_zaaraoui/wlcoming-my-devto-content-generator-agent-1iod</guid>
      <description>&lt;p&gt;While experimenting with automation using n8n, I built a DEV.to content generator that creates and publishes technical posts automatically 🚀&lt;/p&gt;

&lt;p&gt;It’s still a work in progress and I’m continuously improving it, but from now on some of the posts published here will be generated through this system.&lt;/p&gt;

&lt;p&gt;Mainly focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;Cybersecurity&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;SysAdmin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A fun mix of automation, AI, and technical content creation 👨‍💻⚡&lt;/p&gt;

</description>
      <category>ai</category>
      <category>linux</category>
    </item>
    <item>
      <title>Linux sysadmin tips &amp; shortcuts</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Tue, 05 May 2026 17:19:30 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/linux-sysadmin-tips-shortcuts-297g</link>
      <guid>https://dev.to/hosni_zaaraoui/linux-sysadmin-tips-shortcuts-297g</guid>
      <description>&lt;h2&gt;
  
  
  Process &amp;amp; Port Management
&lt;/h2&gt;

&lt;p&gt;Find what’s using a port:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ss -tulnp | grep :8080&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Kill process by port:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kill -9 $(lsof -t -i:8080)&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Top processes (better than top):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;btop&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Show process tree:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ps auxf&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  File &amp;amp; Disk Tricks
&lt;/h2&gt;

&lt;p&gt;Human-readable disk usage:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;df -h&lt;br&gt;
du -sh *&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Find large files:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;find / -type f -size +500M 2&amp;gt;/dev/null&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Quickly clean logs:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;truncate -s 0 /var/log/syslog&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Search Like a Pro
&lt;/h2&gt;

&lt;p&gt;Grep with line numbers + ignore case:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;grep -in "error" file.log&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Recursive search:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;grep -r "password" /etc&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Use less smarter:&lt;br&gt;
/pattern → search&lt;br&gt;
Shift+G → go to end&lt;/p&gt;

&lt;h2&gt;
  
  
  Networking Essentials
&lt;/h2&gt;

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

&lt;p&gt;&lt;code&gt;ss -tuln&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Test connectivity:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nc -zv 192.168.1.10 80&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Show IPs:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ip a&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Live traffic sniff:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tcpdump -i eth0&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Services &amp;amp; Systemd
&lt;/h2&gt;

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

&lt;p&gt;&lt;code&gt;systemctl status nginx&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Restart service:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;systemctl restart nginx&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
View logs:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;journalctl -u nginx -f&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory &amp;amp; Performance
&lt;/h2&gt;

&lt;p&gt;Memory usage:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;free -h&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
CPU + memory snapshot:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;top&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
IO stats:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;iostat&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminal Shortcuts (Huge Time Savers)
&lt;/h2&gt;

&lt;p&gt;Ctrl + C → kill command&lt;br&gt;
Ctrl + Z → pause (background it)&lt;br&gt;
fg → bring back&lt;br&gt;
Ctrl + A → start of line&lt;br&gt;
Ctrl + E → end of line&lt;br&gt;
Ctrl + R → search history 🔥&lt;/p&gt;

&lt;h2&gt;
  
  
  History &amp;amp; Productivity
&lt;/h2&gt;

&lt;p&gt;Show history:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;history&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Re-run last command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;!!&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Re-run command with sudo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo !!&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Permissions &amp;amp; Ownership
&lt;/h2&gt;

&lt;p&gt;Change ownership:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chown user:user file&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Change permissions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chmod 755 script.sh&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Package Management (Debian/Ubuntu)
&lt;/h2&gt;

&lt;p&gt;Update &amp;amp; upgrade:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade -y&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Find package:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apt search nginx&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Remove package:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apt remove nginx&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging &amp;amp; Logs
&lt;/h2&gt;

&lt;p&gt;Follow logs live:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tail -f /var/log/syslog&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Last 100 lines:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tail -n 100 file.log&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Watch command output:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;watch -n 2 "df -h"&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pro-Level Tricks
&lt;/h2&gt;

&lt;p&gt;Run command in background:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nohup command &amp;amp;&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Run multiple commands safely:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;command1 &amp;amp;&amp;amp; command2&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Pipe like a wizard:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cat file | grep error | sort | uniq&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Temporary Python web server:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python3 -m http.server 8000&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus (Sysadmin Mindset)
&lt;/h2&gt;

&lt;p&gt;Always check logs first (/var/log or journalctl)&lt;br&gt;
If something uses a port → ss + lsof → kill&lt;br&gt;
If service fails → systemctl status + journalctl&lt;br&gt;
If server slow → top + iostat + free&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>Stdout vs stderr vs stdin</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Fri, 24 Apr 2026 14:29:56 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/stdout-vs-stderr-vs-stdin-2fkc</link>
      <guid>https://dev.to/hosni_zaaraoui/stdout-vs-stderr-vs-stdin-2fkc</guid>
      <description>&lt;p&gt;One of the most useful Linux concepts for beginners is understanding the 3 standard streams:&lt;br&gt;
·  stdin for input&lt;br&gt;
·  stdout for normal output&lt;br&gt;
·  stderr for errors&lt;br&gt;
Once this clicks, redirection and pipes make a lot more sense.&lt;br&gt;
I made this one-image cheat sheet to simplify it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ai5cp29ayc2uv734bce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ai5cp29ayc2uv734bce.png" alt="Stdout vs stderr vs stdin" width="800" height="1194"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>learning</category>
      <category>bash</category>
    </item>
    <item>
      <title>Signals in Linux explained visually</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Fri, 24 Apr 2026 14:28:28 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/signals-in-linux-explained-visually-39bc</link>
      <guid>https://dev.to/hosni_zaaraoui/signals-in-linux-explained-visually-39bc</guid>
      <description>&lt;p&gt;Stopping a process in Linux isn’t just “kill it.”&lt;br&gt;
Signals are how Linux communicates with running processes:&lt;br&gt;
·  some ask nicely&lt;br&gt;
·  some interrupt&lt;br&gt;
·  some pause&lt;br&gt;
·  and some force termination&lt;br&gt;
This one-image visual explains the most common Linux signals and when to use them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoygp2qe69uahu5g6rcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoygp2qe69uahu5g6rcf.png" alt="Linux Signals" width="800" height="1183"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Linux Basics That Actually Matter (Files, Editing &amp; Permissions)</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Sun, 12 Apr 2026 12:02:24 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/linux-basics-that-actually-matter-files-editing-permissions-18pc</link>
      <guid>https://dev.to/hosni_zaaraoui/linux-basics-that-actually-matter-files-editing-permissions-18pc</guid>
      <description>&lt;p&gt;Most beginner Linux posts say:&lt;br&gt;
“Use &lt;code&gt;touch&lt;/code&gt;, use &lt;code&gt;nano&lt;/code&gt;, use &lt;code&gt;chmod&lt;/code&gt;…”&lt;/p&gt;

&lt;p&gt;But they don’t explain &lt;em&gt;why things work the way they do&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Let’s fix that.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. File Creation — It’s Not Just “touch”
&lt;/h2&gt;

&lt;p&gt;Yes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;touch file.txt&lt;/code&gt; creates a file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mkdir dir/&lt;/code&gt; creates a directory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s what matters:&lt;/p&gt;

&lt;p&gt;Linux is a &lt;strong&gt;hierarchical filesystem&lt;/strong&gt;&lt;br&gt;
Everything starts from &lt;code&gt;/&lt;/code&gt; (root), and every file has a purpose.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/etc/&lt;/code&gt; → configuration files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/var/log/&lt;/code&gt; → logs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/home/user/&lt;/code&gt; → user data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Insight:&lt;br&gt;
Where you create a file matters more than how.&lt;/p&gt;

&lt;p&gt;Creating a script in &lt;code&gt;/tmp&lt;/code&gt; vs &lt;code&gt;/usr/local/bin&lt;/code&gt; changes its &lt;em&gt;lifecycle and usage&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Editing Files — Understanding the Workflow
&lt;/h2&gt;

&lt;p&gt;Editors are not just tools, they define how you work.&lt;/p&gt;

&lt;p&gt;🔹 &lt;code&gt;nano&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple, visible shortcuts&lt;/li&gt;
&lt;li&gt;Good for quick edits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔹 &lt;code&gt;vim&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modes (insert / normal / command)&lt;/li&gt;
&lt;li&gt;Extremely fast once mastered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s the key point:&lt;/p&gt;

&lt;p&gt;In Linux, editing often means modifying &lt;strong&gt;system-critical files&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Editing &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; affects remote access&lt;/li&gt;
&lt;li&gt;Editing &lt;code&gt;/etc/fstab&lt;/code&gt; can break boot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Insight:&lt;br&gt;
Always know &lt;em&gt;what file you are editing&lt;/em&gt;, not just &lt;em&gt;how&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Permissions — The Core of Linux Security
&lt;/h2&gt;

&lt;p&gt;Every file has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owner (user)&lt;/li&gt;
&lt;li&gt;Group&lt;/li&gt;
&lt;li&gt;Others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And 3 permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read (r)&lt;/li&gt;
&lt;li&gt;Write (w)&lt;/li&gt;
&lt;li&gt;Execute (x)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;code&gt;-rwxr-x---&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Meaning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owner → full access&lt;/li&gt;
&lt;li&gt;Group → read &amp;amp; execute&lt;/li&gt;
&lt;li&gt;Others → no access&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chmod&lt;/code&gt; → change permissions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chown&lt;/code&gt; → change owner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real insight:&lt;br&gt;
Permissions are not just protection — they define behavior.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A script without &lt;code&gt;x&lt;/code&gt; won’t run&lt;/li&gt;
&lt;li&gt;A service without read access won’t start&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. GUI Tools — Useful, But Limited
&lt;/h2&gt;

&lt;p&gt;File managers like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thunar&lt;/li&gt;
&lt;li&gt;Dolphin&lt;/li&gt;
&lt;li&gt;Files (GNOME)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visualize permissions&lt;/li&gt;
&lt;li&gt;Move files quickly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;p&gt;They hide complexity.&lt;/p&gt;

&lt;p&gt;You won’t see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recursive permission changes&lt;/li&gt;
&lt;li&gt;Hidden system behavior&lt;/li&gt;
&lt;li&gt;Ownership logic clearly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Best approach:&lt;br&gt;
Use GUI to explore&lt;br&gt;
Use CLI to understand and control&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Linux becomes easy when you stop memorizing commands and start understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why files are placed somewhere&lt;/li&gt;
&lt;li&gt;What happens when you edit them&lt;/li&gt;
&lt;li&gt;How permissions affect execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the difference between a beginner… and someone who actually knows Linux.&lt;/p&gt;




&lt;p&gt;💬 What broke your system the first time?&lt;/p&gt;

&lt;p&gt;Next: Real-world mistakes + how I debugged them in my labs.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>opensource</category>
      <category>learning</category>
    </item>
    <item>
      <title>🐧 “Linux is Hard” — Until You Actually Use It</title>
      <dc:creator>Hosni Zaaraoui</dc:creator>
      <pubDate>Wed, 08 Apr 2026 14:35:49 +0000</pubDate>
      <link>https://dev.to/hosni_zaaraoui/linux-is-hard-until-you-actually-use-it-1cb8</link>
      <guid>https://dev.to/hosni_zaaraoui/linux-is-hard-until-you-actually-use-it-1cb8</guid>
      <description>&lt;p&gt;For a long time, I thought Linux wasn’t for normal people.&lt;/p&gt;

&lt;p&gt;It looked complicated.&lt;br&gt;
Terminal everywhere.&lt;br&gt;
Strange commands.&lt;br&gt;
Things breaking for no reason.&lt;/p&gt;

&lt;p&gt;So I did what most people do:&lt;/p&gt;

&lt;p&gt;I installed Linux… in a VM.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Illusion of “Trying Linux”
&lt;/h2&gt;

&lt;p&gt;Using Linux in a virtual machine feels like you’re learning it.&lt;/p&gt;

&lt;p&gt;But you’re not really living with it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t customize it&lt;/li&gt;
&lt;li&gt;You don’t rely on it&lt;/li&gt;
&lt;li&gt;You don’t fix real problems&lt;/li&gt;
&lt;li&gt;You just test things… and leave&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something breaks?&lt;/p&gt;

&lt;p&gt;You close it. Done.&lt;/p&gt;

&lt;p&gt;That’s why Linux feels unusable at this stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Linux Feels “Not Ready”
&lt;/h2&gt;

&lt;p&gt;From the outside, Linux seems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too technical&lt;/li&gt;
&lt;li&gt;Not user-friendly&lt;/li&gt;
&lt;li&gt;Missing “basic” features&lt;/li&gt;
&lt;li&gt;Hard to fix when something goes wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And honestly, at the beginning… it does feel that way.&lt;/p&gt;

&lt;p&gt;Because you don’t yet know your options.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed When I Switched
&lt;/h2&gt;

&lt;p&gt;Everything changed when I made Linux my main OS.&lt;/p&gt;

&lt;p&gt;Not because it suddenly became easier…&lt;/p&gt;

&lt;p&gt;But because I started learning how it actually works.&lt;/p&gt;

&lt;p&gt;I discovered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There’s always more than one way to do something&lt;/li&gt;
&lt;li&gt;Most problems have simple fixes (once you know where to look)&lt;/li&gt;
&lt;li&gt;You can shape the system to fit you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of adapting to the OS…&lt;br&gt;
The OS adapts to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The “Aha” Moment
&lt;/h2&gt;

&lt;p&gt;The biggest realization was this:&lt;/p&gt;

&lt;p&gt;Linux isn’t hard.&lt;/p&gt;

&lt;p&gt;It’s just different.&lt;/p&gt;

&lt;p&gt;And once you understand a few core ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reading logs&lt;/li&gt;
&lt;li&gt;using the terminal&lt;/li&gt;
&lt;li&gt;knowing where things live&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It stops feeling broken… and starts feeling powerful.&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s Not About Being an Expert
&lt;/h2&gt;

&lt;p&gt;You don’t need to know everything.&lt;/p&gt;

&lt;p&gt;You just need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google errors&lt;/li&gt;
&lt;li&gt;Try small fixes&lt;/li&gt;
&lt;li&gt;Learn one thing at a time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;And over time, things that looked impossible become simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I’m Starting This Series
&lt;/h2&gt;

&lt;p&gt;I’m documenting my journey of using Linux as a daily driver.&lt;/p&gt;

&lt;p&gt;Not as an expert—but as someone figuring things out step by step.&lt;/p&gt;

&lt;p&gt;I’ll share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple tips that actually help&lt;/li&gt;
&lt;li&gt;Fixes to real problems I run into&lt;/li&gt;
&lt;li&gt;Small tweaks that improve daily usage&lt;/li&gt;
&lt;li&gt;Things I wish I knew earlier&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If You’re Hesitating
&lt;/h2&gt;

&lt;p&gt;If you think:&lt;/p&gt;

&lt;p&gt;“Linux isn’t for me”&lt;/p&gt;

&lt;p&gt;You’re probably at the same stage I was.&lt;/p&gt;

&lt;p&gt;Using it without really using it.&lt;/p&gt;

&lt;p&gt;The real experience starts when you commit to it.&lt;/p&gt;

&lt;p&gt;Linux isn’t unusable.&lt;/p&gt;

&lt;p&gt;It just doesn’t try to hide how things work.&lt;/p&gt;

&lt;p&gt;And once you understand that… everything changes.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>beginners</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
