<?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: Asep Sayyad</title>
    <description>The latest articles on DEV Community by Asep Sayyad (@asepsayyad007).</description>
    <link>https://dev.to/asepsayyad007</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4040651%2F27efd4cc-21e5-4a44-8c67-7215c207c005.png</url>
      <title>DEV Community: Asep Sayyad</title>
      <link>https://dev.to/asepsayyad007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asepsayyad007"/>
    <language>en</language>
    <item>
      <title>How to Search Anything in Linux: The Complete Terminal Survival Guide</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Fri, 14 Aug 2026 14:15:41 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/how-to-search-anything-in-linux-the-complete-terminal-survival-guide-38j</link>
      <guid>https://dev.to/asepsayyad007/how-to-search-anything-in-linux-the-complete-terminal-survival-guide-38j</guid>
      <description>&lt;p&gt;Whether you are managing cloud servers, debugging local applications, or building open-source projects, searching is the most essential skill in your terminal toolkit. Linux stores everything as a file, process, or network socket. If you know the right tools, you can search across millions of files, system logs, processes, and active ports in seconds.&lt;/p&gt;

&lt;p&gt;Here is a practical, step-by-step guide to searching anything in Linux.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Finding Files and Directories by Name, Size, and Date
&lt;/h2&gt;

&lt;p&gt;When you know a file exists but forgot where it lives, file search tools are your first line of defense.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Classic find Tool
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;find&lt;/code&gt; utility is built into every Linux distribution. It searches live directory trees based on real-time filesystem checks.&lt;/p&gt;

&lt;p&gt;Search for a file by exact name in the current directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"config.yaml"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search case-insensitively for any file ending in &lt;code&gt;.log&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /var/log &lt;span class="nt"&gt;-iname&lt;/span&gt; &lt;span class="s2"&gt;"*.log"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filter specifically for files or directories only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /srv/app &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.json"&lt;/span&gt;
find /srv/app &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"cache"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Searching by File Size
&lt;/h3&gt;

&lt;p&gt;When disk space runs out, finding large files fast is vital. Use the &lt;code&gt;-size&lt;/code&gt; flag to isolate files over a certain threshold:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /var &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-size&lt;/span&gt; +100M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command scans &lt;code&gt;/var&lt;/code&gt; for regular files larger than 100 megabytes. You can use &lt;code&gt;k&lt;/code&gt; for kilobytes, &lt;code&gt;M&lt;/code&gt; for megabytes, and &lt;code&gt;G&lt;/code&gt; for gigabytes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching by Modification Time
&lt;/h3&gt;

&lt;p&gt;If an incident started twenty minutes ago, look for files created or modified within that window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /etc &lt;span class="nt"&gt;-mmin&lt;/span&gt; &lt;span class="nt"&gt;-30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To search for files modified more than 7 days ago:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /tmp &lt;span class="nt"&gt;-mtime&lt;/span&gt; +7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Executing Actions on Found Files
&lt;/h3&gt;

&lt;p&gt;Instead of passing file lists manually, &lt;code&gt;find&lt;/code&gt; lets you execute actions directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /tmp &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.tmp"&lt;/span&gt; &lt;span class="nt"&gt;-delete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or pass results to another command safely using &lt;code&gt;-exec&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /var/log &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.old"&lt;/span&gt; &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fast Modern Alternative: fd
&lt;/h3&gt;

&lt;p&gt;While &lt;code&gt;find&lt;/code&gt; is universal, its syntax can be verbose. A fast, modern replacement written in Rust is &lt;code&gt;fd&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Install &lt;code&gt;fd&lt;/code&gt; on Ubuntu or Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;fd-find
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;fd&lt;/code&gt; simplifies syntax, runs multi-threaded searches, colors output, and ignores hidden files and &lt;code&gt;.gitignore&lt;/code&gt; rules by default.&lt;/p&gt;

&lt;p&gt;Search for any file containing "nginx" in its name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fd nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search for a specific extension in a target directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fd &lt;span class="nt"&gt;-e&lt;/span&gt; md &lt;span class="nt"&gt;-e&lt;/span&gt; txt &lt;span class="nb"&gt;.&lt;/span&gt; /home/user/docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Include hidden files and gitignored paths when needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fd &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="nt"&gt;-I&lt;/span&gt; &lt;span class="s2"&gt;"secret"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Instant Filesystem-Wide Search with locate and plocate
&lt;/h2&gt;

&lt;p&gt;Running &lt;code&gt;find&lt;/code&gt; across the entire root directory &lt;code&gt;/&lt;/code&gt; can take time because it hits the disk for every directory traversal. When you need instant results across the whole system, use &lt;code&gt;locate&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How locate Works
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;locate&lt;/code&gt; does not scan your hard drive live. Instead, it reads a pre-built database index file (&lt;code&gt;/var/lib/mlocate/mlocate.db&lt;/code&gt; or &lt;code&gt;/var/lib/plocate/plocate.db&lt;/code&gt;). &lt;/p&gt;

&lt;p&gt;Search for any file or path containing "ssl":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;locate nginx.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output returns instantly, even on systems with millions of files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the Search Database
&lt;/h3&gt;

&lt;p&gt;Because &lt;code&gt;locate&lt;/code&gt; reads a database, newly created files won't show up right away. Update the index manually before searching:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;On modern distributions like Ubuntu 22.04+, &lt;code&gt;plocate&lt;/code&gt; has replaced traditional &lt;code&gt;mlocate&lt;/code&gt;. &lt;code&gt;plocate&lt;/code&gt; uses &lt;code&gt;io_uring&lt;/code&gt; and index posting lists, making searches up to 10 times faster while using a much smaller database.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Searching Text Inside Files with grep and ripgrep
&lt;/h2&gt;

&lt;p&gt;Finding a file by name is useful, but often you need to search for text &lt;em&gt;inside&lt;/em&gt; code, configuration files, or logs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Classic grep Command
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; (Global Regular Expression Print) searches text patterns line by line.&lt;/p&gt;

&lt;p&gt;Basic search for a string in a file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"DATABASE_URL"&lt;/span&gt; /srv/app/.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search recursively inside a directory and display line numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="s2"&gt;"error_log"&lt;/span&gt; /etc/nginx/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key flags to remember:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-r or -R:&lt;/strong&gt; Search directories recursively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-n:&lt;/strong&gt; Show line numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-i:&lt;/strong&gt; Case-insensitive search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-w:&lt;/strong&gt; Match whole words only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-c:&lt;/strong&gt; Count total matching lines instead of printing them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exclude noisy directories like &lt;code&gt;node_modules&lt;/code&gt; or &lt;code&gt;.git&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; &lt;span class="nt"&gt;--exclude-dir&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;node_modules,.git,dist&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="s2"&gt;"PORT"&lt;/span&gt; ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Show context lines before and after matches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; 3 &lt;span class="s2"&gt;"FATAL"&lt;/span&gt; /var/log/syslog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-C 3&lt;/code&gt; flag shows 3 lines above and 3 lines below each match, giving you immediate context around errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lightning Fast Search: ripgrep (rg)
&lt;/h3&gt;

&lt;p&gt;When searching large source code repositories or massive log folders, standard &lt;code&gt;grep&lt;/code&gt; can be slow. &lt;code&gt;ripgrep&lt;/code&gt; (command name &lt;code&gt;rg&lt;/code&gt;) is the fastest line-oriented search tool available.&lt;/p&gt;

&lt;p&gt;Install &lt;code&gt;ripgrep&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Search for a pattern in the current directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rg &lt;span class="s2"&gt;"connectTimeout"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why &lt;code&gt;ripgrep&lt;/code&gt; is superior for developers and sysadmins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It respects your &lt;code&gt;.gitignore&lt;/code&gt; and &lt;code&gt;.ignore&lt;/code&gt; files automatically.&lt;/li&gt;
&lt;li&gt;It skips binary files and hidden files by default.&lt;/li&gt;
&lt;li&gt;It uses multi-threading and SIMD CPU instructions to scan gigabytes per second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Search inside compressed &lt;code&gt;.gz&lt;/code&gt; log files without extracting them first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rg &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"500 Internal Server Error"&lt;/span&gt; /var/log/nginx/access.log&lt;span class="k"&gt;*&lt;/span&gt;.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Real Production Scenario
&lt;/h3&gt;

&lt;p&gt;When I was building AiroShare, a local DLNA media server, I had to search across thousands of lines of JavaScript and Node.js files to find every location where a custom SSDP multicast listener was registered. Running &lt;code&gt;rg "ssdp:discover"&lt;/code&gt; instantly gave me every file, function, and line number in under 10 milliseconds without dragging in unwanted build artifacts.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Searching System Logs and Kernel Events
&lt;/h2&gt;

&lt;p&gt;When an application crashes, an IP gets blocked, or a service fails on boot, your answers live inside system logs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching systemd Logs with journalctl
&lt;/h3&gt;

&lt;p&gt;Modern Linux distributions use &lt;code&gt;systemd&lt;/code&gt; to manage services and record binary logs. The &lt;code&gt;journalctl&lt;/code&gt; command lets you search these logs with precision.&lt;/p&gt;

&lt;p&gt;View logs for a specific service unit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; nginx.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filter log output by priority (errors, warnings, or critical events):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; app.service &lt;span class="nt"&gt;-p&lt;/span&gt; err
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Priority levels include &lt;code&gt;emerg&lt;/code&gt;, &lt;code&gt;alert&lt;/code&gt;, &lt;code&gt;crit&lt;/code&gt;, &lt;code&gt;err&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;notice&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, and &lt;code&gt;debug&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Search logs within a specific time window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;--since&lt;/span&gt; &lt;span class="s2"&gt;"2026-08-14 14:00:00"&lt;/span&gt; &lt;span class="nt"&gt;--until&lt;/span&gt; &lt;span class="s2"&gt;"2026-08-14 15:30:00"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or view entries from the last two hours:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;--since&lt;/span&gt; &lt;span class="s2"&gt;"2 hours ago"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search log messages matching a specific keyword:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-g&lt;/span&gt; &lt;span class="s2"&gt;"out of memory"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow live log output as new entries arrive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; docker.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Searching Kernel Messages with dmesg
&lt;/h3&gt;

&lt;p&gt;If a hardware device disconnects, a network interface drops, or the Out-Of-Memory (OOM) killer kills a process, check the kernel ring buffer using &lt;code&gt;dmesg&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Search for kernel OOM events:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dmesg &lt;span class="nt"&gt;-T&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"oom"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-T&lt;/code&gt; flag converts raw kernel timestamps into human-readable date and time formats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching Rotated Log Files
&lt;/h3&gt;

&lt;p&gt;Older log files in &lt;code&gt;/var/log&lt;/code&gt; are often compressed into &lt;code&gt;.gz&lt;/code&gt; format by &lt;code&gt;logrotate&lt;/code&gt;. Standard text tools cannot read them directly. Use &lt;code&gt;zgrep&lt;/code&gt; or &lt;code&gt;zless&lt;/code&gt; instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zgrep &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"failed password"&lt;/span&gt; /var/log/auth.log&lt;span class="k"&gt;*&lt;/span&gt;.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Searching Command History Like a Master
&lt;/h2&gt;

&lt;p&gt;How many times have you typed a complex 80-character &lt;code&gt;docker&lt;/code&gt; or &lt;code&gt;kubectl&lt;/code&gt; command, only to forget it three days later? Stop hitting the Up arrow key fifty times.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built-in Reverse Search: Ctrl+R
&lt;/h3&gt;

&lt;p&gt;Press &lt;code&gt;Ctrl+R&lt;/code&gt; in your terminal and start typing any fragment of the past command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(reverse-i-search)`ssh`: ssh -i ~/.ssh/prod_key.pem admin@10.0.4.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press &lt;code&gt;Ctrl+R&lt;/code&gt; repeatedly to cycle backward through matching historical commands. Hit &lt;code&gt;Enter&lt;/code&gt; to run it, or &lt;code&gt;Right Arrow&lt;/code&gt; to edit it on your prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching History with Grep
&lt;/h3&gt;

&lt;p&gt;View your command history and filter it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;history&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"docker run"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To see exact timestamps alongside history entries, set &lt;code&gt;HISTTIMEFORMAT&lt;/code&gt; in your &lt;code&gt;~/.bashrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;HISTTIMEFORMAT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%F %T "&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Interactive Fuzzy Search: fzf
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;fzf&lt;/code&gt; is a command-line fuzzy finder that turns search into an interactive experience.&lt;/p&gt;

&lt;p&gt;Install &lt;code&gt;fzf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Once installed, press &lt;code&gt;Ctrl+R&lt;/code&gt; in your shell. &lt;code&gt;fzf&lt;/code&gt; opens an interactive dropdown list of your entire command history. As you type letters, it filters candidates in real time.&lt;/p&gt;

&lt;p&gt;You can also pipe any command output into &lt;code&gt;fzf&lt;/code&gt;. For instance, search for a running container interactively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps | fzf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or search for a file and open it in &lt;code&gt;vim&lt;/code&gt; with a single keypress:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim &lt;span class="si"&gt;$(&lt;/span&gt;fd &lt;span class="nt"&gt;-type&lt;/span&gt; f | fzf&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Searching Processes, Open Files, and Listening Ports
&lt;/h2&gt;

&lt;p&gt;Sometimes what you need to find is not text on disk, but an active process or network port in memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching Running Processes
&lt;/h3&gt;

&lt;p&gt;When a process is consuming CPU or hanging, find its Process ID (PID) using &lt;code&gt;ps&lt;/code&gt; or &lt;code&gt;pgrep&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Search processes with &lt;code&gt;ps&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search processes directly with &lt;code&gt;pgrep&lt;/code&gt; to get PIDs and full command lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pgrep &lt;span class="nt"&gt;-a&lt;/span&gt; python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To kill a process by searching its name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkill &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"test_server.py"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Searching Which Process Holds a File
&lt;/h3&gt;

&lt;p&gt;Have you ever tried to unmount a disk partition or delete a folder, only to get an error saying &lt;code&gt;Device or resource busy&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;lsof&lt;/code&gt; (List Open Files) or &lt;code&gt;fuser&lt;/code&gt; to find the process locking the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;lsof /mnt/storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use &lt;code&gt;fuser&lt;/code&gt; to see PIDs and kill them directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fuser &lt;span class="nt"&gt;-v&lt;/span&gt; /var/log/app.log
&lt;span class="nb"&gt;sudo &lt;/span&gt;fuser &lt;span class="nt"&gt;-k&lt;/span&gt; /var/log/app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Searching Network Ports and Sockets
&lt;/h3&gt;

&lt;p&gt;When starting a web server or backend service, a common error is &lt;code&gt;address already in use&lt;/code&gt;. You need to find which process is bound to that port.&lt;/p&gt;

&lt;p&gt;Find what is listening on port 8080 using &lt;code&gt;lsof&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    14209 asep    23u  IPv4  89201      0t0  TCP *:8080 (LISTEN)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find open ports using &lt;code&gt;ss&lt;/code&gt; (Socket Statistics):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ss &lt;span class="nt"&gt;-tulpn&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flags explained:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;-t:&lt;/strong&gt; TCP sockets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-u:&lt;/strong&gt; UDP sockets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-l:&lt;/strong&gt; Listening sockets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p:&lt;/strong&gt; Show process name and PID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-n:&lt;/strong&gt; Display numeric port numbers instead of service names.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real Production Scenario
&lt;/h3&gt;

&lt;p&gt;When I was developing AiroShare, a high-performance local media streaming engine, pre-launch port conflict resolution was a critical requirement. If port 9900 (DLNA HTTP media server) or port 2121 (FTP media engine) was already taken by another background service, AiroShare automatically scanned socket states using lightweight port checks to locate available ports before binding. Understanding how Linux exposes socket states made building that auto-resolution feature smooth and reliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Searching Executables, Libraries, and Package Owners
&lt;/h2&gt;

&lt;p&gt;When you type a command in your shell, how do you find where the binary file is actually located?&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding Command Paths
&lt;/h3&gt;

&lt;p&gt;Locate the absolute path of an executable using &lt;code&gt;which&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;which python3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Locate binaries, manual pages, and source files using &lt;code&gt;whereis&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whereis nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Identify how shell commands are interpreted using &lt;code&gt;type&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;type&lt;/code&gt; tells you whether a command is a shell built-in (&lt;code&gt;cd&lt;/code&gt;), an alias (&lt;code&gt;ll&lt;/code&gt;), a function, or a disk binary (&lt;code&gt;grep&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding Which Installed Package Owns a File
&lt;/h3&gt;

&lt;p&gt;If you find a random binary or configuration file on a server and want to know which software package installed it, query your package manager.&lt;/p&gt;

&lt;p&gt;On Ubuntu or Debian (&lt;code&gt;dpkg&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dpkg &lt;span class="nt"&gt;-S&lt;/span&gt; /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On RHEL, CentOS, or Fedora (&lt;code&gt;rpm&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rpm &lt;span class="nt"&gt;-qf&lt;/span&gt; /etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a binary is missing and you want to find which package provides it before installing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;apt-file
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-file update
apt-file search bin/netstat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Searching Kernel Parameters and Hardware Information
&lt;/h2&gt;

&lt;p&gt;Linux exposes live kernel variables and attributes through pseudo-filesystems like &lt;code&gt;/proc&lt;/code&gt; and &lt;code&gt;/sys&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching Active Kernel Variables with sysctl
&lt;/h3&gt;

&lt;p&gt;Search all active kernel settings for network or memory parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sysctl &lt;span class="nt"&gt;-a&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"ip_forward"&lt;/span&gt;
sysctl &lt;span class="nt"&gt;-a&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"swappiness"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can change these values temporarily at runtime or lock them permanently inside &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Searching Hardware Attributes in /proc
&lt;/h3&gt;

&lt;p&gt;Search system CPU information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"model name"&lt;/span&gt; /proc/cpuinfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search system memory details:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"memtotal"&lt;/span&gt; /proc/meminfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search network traffic statistics per interface:&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; /proc/net/dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. An Interesting Historical Fact About Linux Search
&lt;/h2&gt;

&lt;p&gt;Did you know where the name &lt;code&gt;grep&lt;/code&gt; came from?&lt;/p&gt;

&lt;p&gt;Back in the early 1970s at Bell Labs, Unix co-creator Ken Thompson was working on the &lt;code&gt;ed&lt;/code&gt; line editor. When users wanted to search an entire file for a regular expression and print matching lines, they typed a specific editor command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g/re/p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This stood for &lt;strong&gt;g&lt;/strong&gt;lobal / &lt;strong&gt;r&lt;/strong&gt;egular &lt;strong&gt;e&lt;/strong&gt;xpression / &lt;strong&gt;p&lt;/strong&gt;rint.&lt;/p&gt;

&lt;p&gt;Ken Thompson realized that searching text files was such a frequent necessity that he wrote a small, standalone command-line tool over a single night to do it outside the editor. He named that tool &lt;code&gt;grep&lt;/code&gt;. More than fifty years later, &lt;code&gt;grep&lt;/code&gt; remains one of the most widely used commands in software engineering.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Summary Cheat Sheet
&lt;/h2&gt;

&lt;p&gt;Here is a quick reference guide for your daily terminal search needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Find files by name:&lt;/strong&gt; &lt;code&gt;find . -name "*.conf"&lt;/code&gt; or &lt;code&gt;fd conf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find files by size:&lt;/strong&gt; &lt;code&gt;find /var -type f -size +100M&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search text in files:&lt;/strong&gt; &lt;code&gt;grep -rn "pattern" ./&lt;/code&gt; or &lt;code&gt;rg "pattern"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search text in gz logs:&lt;/strong&gt; &lt;code&gt;rg -z "pattern" /var/log/*.gz&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search systemd logs:&lt;/strong&gt; &lt;code&gt;journalctl -u app -p err --since "1 hour ago"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search command history:&lt;/strong&gt; &lt;code&gt;Ctrl+R&lt;/code&gt; or &lt;code&gt;history | grep "command"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search listening ports:&lt;/strong&gt; &lt;code&gt;sudo lsof -i :8080&lt;/code&gt; or &lt;code&gt;sudo ss -tulpn | grep 8080&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search running processes:&lt;/strong&gt; &lt;code&gt;pgrep -a process_name&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search package owner:&lt;/strong&gt; &lt;code&gt;dpkg -S /path/to/file&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Is Your Go-To Search Tool?
&lt;/h2&gt;

&lt;p&gt;When a production incident hits or a build breaks, which command do you reach for first? Are you sticking with classic tools like &lt;code&gt;find&lt;/code&gt; and &lt;code&gt;grep&lt;/code&gt;, or have modern tools like &lt;code&gt;fd&lt;/code&gt;, &lt;code&gt;ripgrep&lt;/code&gt;, and &lt;code&gt;fzf&lt;/code&gt; completely replaced them in your workflow? Let me know in the comments below!&lt;/p&gt;




&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;Asep Sayyad is a Linux and DevOps engineer passionate about Linux administration, automation, cloud technologies, containers, and open-source software. He enjoys solving real-world infrastructure challenges and sharing practical knowledge through in-depth technical articles, tutorials, and hands-on guides.&lt;/p&gt;

&lt;p&gt;His goal is to help aspiring and experienced engineers build stronger Linux and DevOps skills with content focused on real production scenarios rather than theory alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect with Me
&lt;/h3&gt;

&lt;p&gt;Portfolio: &lt;a href="https://asepsayyad007.in" rel="noopener noreferrer"&gt;https://asepsayyad007.in&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/asepsayyad007" rel="noopener noreferrer"&gt;https://github.com/asepsayyad007&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/asepsayyad" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/asepsayyad&lt;/a&gt;&lt;br&gt;
Medium: &lt;a href="https://asepsayyad007.medium.com" rel="noopener noreferrer"&gt;https://asepsayyad007.medium.com&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Enjoyed this article?
&lt;/h3&gt;

&lt;p&gt;If you found this guide helpful, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starring my open-source projects on GitHub.&lt;/li&gt;
&lt;li&gt;Sharing this article with fellow Linux and DevOps engineers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also follow me for more practical content on Linux, DevOps, Cloud, Containers, Automation, and Open Source. Thanks for reading, and enjoy your learning!&lt;/p&gt;

&lt;p&gt;© 2026 Asep Sayyad&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ubuntu</category>
      <category>devops</category>
      <category>cli</category>
    </item>
    <item>
      <title>8 Linux Myths Even Senior Engineers Still Fall For (And How They Hurt Production)</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Wed, 12 Aug 2026 16:39:23 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/8-linux-myths-even-senior-engineers-still-fall-for-and-how-they-hurt-production-1o01</link>
      <guid>https://dev.to/asepsayyad007/8-linux-myths-even-senior-engineers-still-fall-for-and-how-they-hurt-production-1o01</guid>
      <description>&lt;h4&gt;
  
  
  Think years of experience make you immune to Linux misconceptions? Here are the bad habits, outdated knowledge, and deep technical myths that trap seasoned sysadmins and DevOps engineers.
&lt;/h4&gt;

&lt;p&gt;Back in 2021, I worked alongside a systems engineer with over fifteen years of Unix and Linux experience. He could write complex AWK one-liners from memory and managed dozens of bare-metal database servers. &lt;/p&gt;

&lt;p&gt;One Friday afternoon, our monitoring alerts triggered. A primary database node showed only 300 MB of free memory in the dashboard.&lt;/p&gt;

&lt;p&gt;Without checking what that memory was doing, he logged into the server and ran a command to drop cached memory directly in production:&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;echo &lt;/span&gt;3 &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /proc/sys/vm/drop_caches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within milliseconds, disk read activity hit 100 percent. Active database queries that normally took 2 milliseconds began timing out after 30 seconds. The entire web application stalled for five minutes while the kernel frantically re-read essential files from disk back into RAM.&lt;/p&gt;

&lt;p&gt;That event taught me something important. Experience alone does not prevent bad assumptions. Linux has changed heavily over the past two decades. Memory management, process scheduling, cgroup limits, and container isolation work very differently today than they did years ago.&lt;/p&gt;

&lt;p&gt;Over my 3+ years of working directly with Linux administration, cloud infrastructure, and building open-source server tools, I have seen these same misconceptions pop up across many teams.&lt;/p&gt;

&lt;p&gt;Here are eight dangerous Linux myths that experienced engineers still believe, along with the actual kernel mechanics behind them.&lt;/p&gt;




&lt;h4&gt;
  
  
  1. Low Free RAM Means Your Server Is Running Out of Memory
&lt;/h4&gt;

&lt;p&gt;This is one of the most common myths in systems administration. An engineer opens &lt;code&gt;top&lt;/code&gt; or runs &lt;code&gt;free -h&lt;/code&gt;, sees 400 MB in the &lt;code&gt;free&lt;/code&gt; column on a machine with 64 GB of RAM, and assumes the server is about to crash.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;               total        used        free      shared  buff/cache   available
Mem:            62Gi        48Gi       412Mi       1.2Gi        13Gi        12Gi
Swap:          8.0Gi       120Mi       7.9Gi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;In simple desktop operating systems from thirty years ago, unused RAM was viewed as a safe buffer. Many people still think empty RAM is good RAM.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;Unused RAM is wasted RAM. The Linux kernel uses idle memory for the Page Cache and file buffers. When your application reads a file from disk, the kernel keeps a copy of those disk blocks in RAM. If the application asks for that same data again, Linux serves it directly from memory at sub-millisecond speed instead of reading slow disk storage.&lt;/p&gt;

&lt;p&gt;The key column to watch in modern Linux systems is available, not free:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free RAM:&lt;/strong&gt; Memory that contains absolutely nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Available RAM:&lt;/strong&gt; An estimate of how much memory can be given to new applications without causing system slowdowns. This includes free RAM plus cached memory that can be reclaimed instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;When engineers panic and manually run &lt;code&gt;echo 3 &amp;gt; /proc/sys/vm/drop_caches&lt;/code&gt;, they wipe out the filesystem cache. The kernel is forced to fetch every binary, library, and data file back from disk storage. This triggers massive disk I/O spikes, increases CPU wait times, and causes database queries to time out.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Never judge system memory health by the &lt;code&gt;free&lt;/code&gt; metric. Monitor the &lt;code&gt;available&lt;/code&gt; metric and check for active swapping activity using tools like &lt;code&gt;vmstat 1&lt;/code&gt; or &lt;code&gt;sar -B&lt;/code&gt;.&lt;/p&gt;




&lt;h4&gt;
  
  
  2. Setting Swappiness to 0 Disables Swap Completely
&lt;/h4&gt;

&lt;p&gt;Many deployment scripts and performance tuning guides recommend setting &lt;code&gt;vm.swappiness = 0&lt;/code&gt; in &lt;code&gt;/etc/sysctl.conf&lt;/code&gt; to prevent servers from using swap space.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl vm.swappiness&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;On older Linux kernels (before version 3.5), setting &lt;code&gt;swappiness&lt;/code&gt; to 0 told the system to avoid swapping until absolutely necessary. Engineers assumed 0 meant "never swap under any circumstance."&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;Since Linux kernel 3.5, setting &lt;code&gt;vm.swappiness = 0&lt;/code&gt; does not disable swap. Instead, it instructs the memory manager to avoid swapping anonymous memory (like process heap and stack) unless the system is on the verge of an Out-Of-Memory (OOM) event.&lt;/p&gt;

&lt;p&gt;However, the kernel will still evict file-backed pages (page cache) to keep memory free.&lt;/p&gt;

&lt;p&gt;If your system runs out of memory and has no swap configured, Linux cannot swap out inactive memory blocks. It has only one choice left: invoke the OOM Killer (&lt;code&gt;mm/oom_kill.c&lt;/code&gt;) to terminate heavy processes like PostgreSQL, MySQL, or Java applications.&lt;/p&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;Disabling swap entirely or relying on &lt;code&gt;swappiness = 0&lt;/code&gt; removes an early warning buffer. Without swap, your system moves straight from normal memory usage to instant OOM process terminations without giving monitoring tools time to alert you.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Set &lt;code&gt;vm.swappiness&lt;/code&gt; to a low value like &lt;code&gt;10&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; rather than completely turning off swap. Keep a small swap file (1 GB to 2 GB) even on large cloud instances so the kernel can move stale, unread memory pages out of RAM safely.&lt;/p&gt;




&lt;h4&gt;
  
  
  3. High Load Average Always Means High CPU Usage
&lt;/h4&gt;

&lt;p&gt;You get a high-priority alert: Server Load Average is 42.0 on an 8-core CPU! You quickly log in, open &lt;code&gt;top&lt;/code&gt;, and find that CPU utilization is sitting at only 5 percent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;top - 14:22:10 up 45 days,  3:12,  2 users,  load average: 42.10, 38.45, 30.12
%Cpu(s):  2.3 us,  1.1 sy,  0.0 ni, 12.4 id, 84.2 wa,  0.0 hi,  0.0 si,  0.0 st
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;On traditional Unix systems (like BSD), load average counted only processes currently running on a CPU or waiting for CPU time. Many engineers assume Linux handles load average the exact same way.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;In 1993, Linux kernel creator Linus Torvalds modified load average calculations. In Linux, load average counts both:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Processes in Task Runnable (&lt;code&gt;R&lt;/code&gt;) state: Using CPU or waiting in the CPU queue.&lt;/li&gt;
&lt;li&gt;Processes in Uninterruptible Sleep (&lt;code&gt;D&lt;/code&gt;) state: Waiting for disk I/O, network storage locks, NFS responses, or kernel locks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your storage array slows down or a network mount hangs, dozens of threads block while waiting for disk operations. They enter the &lt;code&gt;D&lt;/code&gt; state. The CPU itself is completely idle, but the load average rises sharply.&lt;/p&gt;

&lt;p&gt;Notice the &lt;code&gt;84.2 wa&lt;/code&gt; in the &lt;code&gt;top&lt;/code&gt; output above. That &lt;code&gt;wa&lt;/code&gt; stands for I/O Wait. The CPU is not busy processing calculations; it is doing nothing while waiting for slow disk operations to complete.&lt;/p&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;Engineers who mistake high load for high CPU usage often upgrade to bigger CPU instances or restart application services. Neither fix works because the root bottleneck is slow disk storage, a failing drive, or network latency.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Check process states using &lt;code&gt;ps aux | grep ' D '&lt;/code&gt; or inspect disk latency using &lt;code&gt;iostat -xz 1&lt;/code&gt; to find out whether high load comes from CPU demand or storage delays.&lt;/p&gt;




&lt;h4&gt;
  
  
  4. &lt;code&gt;kill -9&lt;/code&gt; Is the Normal Way to Stop Frozen Processes
&lt;/h4&gt;

&lt;p&gt;When a process does not close immediately, many developers and admins jump straight to forcefully killing it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;kill -9&lt;/code&gt; sends the &lt;code&gt;SIGKILL&lt;/code&gt; signal, which instantly stops the target process. It feels effective because the process disappears from the system right away.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;Linux process signals are designed for graceful shutdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SIGTERM&lt;/code&gt; (Signal 15):&lt;/strong&gt; Asks the process to shut down cleanly. The application catches this signal, closes open file handles, flushes database write buffers, finishes current requests, and removes temporary lock files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SIGKILL&lt;/code&gt; (Signal 9):&lt;/strong&gt; Handled directly by the kernel, skipping the process entirely. The application is given zero milliseconds to clean up state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When building &lt;strong&gt;AiroShare&lt;/strong&gt;, my open-source local file server engine, clean process handling was crucial. If an application server is forcefully killed with &lt;code&gt;SIGKILL&lt;/code&gt; while listening on HTTP or FTP ports (like port 9900 or 2121), socket bindings can remain stuck in &lt;code&gt;TIME_WAIT&lt;/code&gt; state, preventing clean application restarts until port locks time out.&lt;/p&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;Using &lt;code&gt;SIGKILL&lt;/code&gt; on databases or file servers causes data corruption, half-written log entries, and orphan lock files. When the process starts up again, it may crash or take a long time attempting crash recovery.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Always send &lt;code&gt;SIGTERM&lt;/code&gt; (&lt;code&gt;kill &amp;lt;PID&amp;gt;&lt;/code&gt;) first. Give the process several seconds to complete clean teardown. Only use &lt;code&gt;SIGKILL&lt;/code&gt; as a last resort when a process is unresponsive to standard termination signals.&lt;/p&gt;




&lt;h4&gt;
  
  
  5. Root Inside a Docker Container Cannot Harm the Host Machine
&lt;/h4&gt;

&lt;p&gt;A common assumption in cloud deployments is that containerization works like hardware virtualization. People assume running as &lt;code&gt;root&lt;/code&gt; inside a container is safe because it is isolated inside its own environment.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;Containers feel like lightweight virtual machines. Because containers have separate filesystems and process lists, developers assume the container boundary acts as a hard security wall.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;Containers are not virtual machines. A container is simply a standard Linux process running directly on the host kernel, restricted by Linux kernel features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Namespaces:&lt;/strong&gt; Restrict what a process can see (process tree, network interfaces, mount points).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control Groups (cgroups):&lt;/strong&gt; Restrict how much resource a process can use (CPU, RAM, disk I/O).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By default, UID 0 inside a container maps directly to UID 0 (root) on the host kernel unless User Namespaces (&lt;code&gt;userns-remap&lt;/code&gt;) are explicitly enabled.&lt;/p&gt;

&lt;p&gt;If an attacker finds an exploit in your web application and breaks out of container namespace boundaries (via kernel exploits, mounted Docker sockets, or exposed &lt;code&gt;/proc&lt;/code&gt; paths), they gain full root privileges on the underlying host server.&lt;/p&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;Running containerized microservices as &lt;code&gt;root&lt;/code&gt; creates severe security risks. A single vulnerability in a web dependency can compromise your entire host operating system.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Always set a non-root user in your &lt;code&gt;Dockerfile&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; 10001:10001&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Drop unneeded kernel capabilities:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;allowPrivilegeEscalation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;drop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ALL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Enable user namespace remapping in your container runtime configuration.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  6. &lt;code&gt;chmod 777&lt;/code&gt; Is a Quick and Safe Fix for Permission Errors
&lt;/h4&gt;

&lt;p&gt;When a developer runs into permission errors while setting up web servers, file uploads, or scripts, they often run:&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; &lt;span class="nt"&gt;-R&lt;/span&gt; 777 /var/www/html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;Permission errors can be frustrating. &lt;code&gt;chmod 777&lt;/code&gt; grants read, write, and execute access to everyone on the system (User, Group, Others), instantly clearing permission error messages.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;Setting &lt;code&gt;777&lt;/code&gt; allows any local user or service account to read, modify, overwrite, or execute your files.&lt;/p&gt;

&lt;p&gt;Furthermore, several critical Linux services actively reject files with loose permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenSSH:&lt;/strong&gt; Will refuse to authenticate if &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; has permissions wider than &lt;code&gt;600&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Systemd:&lt;/strong&gt; Ignores unit files if file permissions are set too loosely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron:&lt;/strong&gt; Skips scheduled cron jobs if permission settings are unsafe.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;If an attacker exploits a minor file upload vulnerability in a web application hosted inside a &lt;code&gt;777&lt;/code&gt; directory, they can upload malicious scripts and execute them immediately with full write access to the application tree.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Fix ownership using &lt;code&gt;chown&lt;/code&gt; rather than loosening permissions with &lt;code&gt;chmod 777&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set ownership to the correct service user:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; www-data:www-data /var/www/html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Apply secure file and folder permissions:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /var/www/html &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;755 &lt;span class="o"&gt;{}&lt;/span&gt; +
find /var/www/html &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;644 &lt;span class="o"&gt;{}&lt;/span&gt; +
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  7. A System Reboot Is Required After Upgrading Linux Packages
&lt;/h4&gt;

&lt;p&gt;Coming from a desktop Windows background, many administrators believe that after running system updates, you must reboot the server to apply changes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;Legacy operating systems often lock system files during runtime, requiring a complete reboot after security updates.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;Linux allows you to update libraries, software packages, and system utilities while the system is running. When you update a package using &lt;code&gt;apt&lt;/code&gt; or &lt;code&gt;dnf&lt;/code&gt;, the old files on disk are unlinked and replaced with new binaries immediately.&lt;/p&gt;

&lt;p&gt;However, processes that were already running in memory continue executing the old version from RAM until those services are restarted.&lt;/p&gt;

&lt;p&gt;Rebooting the entire server is required only when updating the Linux kernel itself (unless you use live patching utilities like &lt;code&gt;kpatch&lt;/code&gt; or Canonical Livepatch).&lt;/p&gt;

&lt;p&gt;For standard library updates (like OpenSSL or system packages), you only need to restart the affected service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;Rebooting servers unnecessarily causes avoidable service downtime, disrupts active network connections, and lowers system availability metrics.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Use automated tools like &lt;code&gt;needrestart&lt;/code&gt; (on Debian/Ubuntu) or &lt;code&gt;dnf needs-restarting&lt;/code&gt; (on RHEL/Fedora) to identify which running services need a restart after updates without rebooting the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;needrestart &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  8. Setting Low &lt;code&gt;nice&lt;/code&gt; Values Guarantees CPU Allocation
&lt;/h4&gt;

&lt;p&gt;When an important background process needs to run faster, engineers often adjust its &lt;code&gt;nice&lt;/code&gt; priority value:&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;nice&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt; /usr/bin/heavy-data-processing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why This Myth Exists
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;nice&lt;/code&gt; command scale ranges from &lt;code&gt;-20&lt;/code&gt; (highest priority) to &lt;code&gt;19&lt;/code&gt; (lowest priority). People assume setting &lt;code&gt;-20&lt;/code&gt; forces the CPU to give all its processing power to that specific process.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Kernel Reality
&lt;/h4&gt;

&lt;p&gt;The Linux Completely Fair Scheduler (CFS) calculates CPU time shares using relative weights based on nice values.&lt;/p&gt;

&lt;p&gt;However, two major factors limit the impact of &lt;code&gt;nice&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CPU Contention Required:&lt;/strong&gt; If the CPU is not fully saturated, nice values have zero noticeable impact because the CPU has enough headroom to handle all tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control Groups Override &lt;code&gt;nice&lt;/code&gt; Settings:&lt;/strong&gt; On modern Linux systems managed by systemd and cgroups v2, CPU limits configured inside cgroup unit files (&lt;code&gt;CPUWeight=&lt;/code&gt;, &lt;code&gt;CPUShares=&lt;/code&gt;) override process-level &lt;code&gt;nice&lt;/code&gt; settings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a process is placed inside a restricted cgroup slice, setting &lt;code&gt;nice -20&lt;/code&gt; inside that process will not allow it to bypass its cgroup CPU limits.&lt;/p&gt;

&lt;h4&gt;
  
  
  How It Breaks Production
&lt;/h4&gt;

&lt;p&gt;Relying on &lt;code&gt;nice&lt;/code&gt; values to prioritize background batch processing fails in containerized environments (Docker, Kubernetes) because container CPU limits are enforced at the cgroup level.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Better Approach
&lt;/h4&gt;

&lt;p&gt;Manage process CPU allocation using cgroups or systemd slice configurations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[Service]&lt;/span&gt;
&lt;span class="py"&gt;Slice&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;custom-workload.slice&lt;/span&gt;
&lt;span class="py"&gt;CPUWeight&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  💡 Surprising Linux Fact
&lt;/h4&gt;

&lt;p&gt;Did you know that the &lt;code&gt;/proc&lt;/code&gt; filesystem on Linux consumes &lt;strong&gt;0 bytes&lt;/strong&gt; of disk space? &lt;/p&gt;

&lt;p&gt;&lt;code&gt;/proc&lt;/code&gt; is not a physical directory on your hard drive. It is a virtual filesystem created dynamically in memory by the Linux kernel. When you view files like &lt;code&gt;/proc/meminfo&lt;/code&gt; or &lt;code&gt;/proc/cpuinfo&lt;/code&gt;, the kernel generates that text content on the fly directly from internal kernel data structures!&lt;/p&gt;




&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Linux is an remarkably reliable operating system, but many common practices passed down through blog posts and old tutorials are outdated. Understanding how the kernel manages memory, calculates load average, isolates container processes, and handles system signals will help you build faster, more secure production environments.&lt;/p&gt;

&lt;p&gt;Which of these Linux myths have you encountered on your engineering team? Have you seen system issues caused by dropping caches or setting &lt;code&gt;swappiness = 0&lt;/code&gt; in production? Share your thoughts and experiences in the comments below!&lt;/p&gt;




&lt;h4&gt;
  
  
  About the Author
&lt;/h4&gt;

&lt;p&gt;Asep Sayyad is a Linux and DevOps engineer passionate about Linux administration, automation, cloud technologies, containers, and open-source software. He enjoys solving real-world infrastructure challenges and sharing practical knowledge through in-depth technical articles, tutorials, and hands-on guides.&lt;/p&gt;

&lt;p&gt;His goal is to help aspiring and experienced engineers build stronger Linux and DevOps skills with content focused on real production scenarios rather than theory alone.&lt;/p&gt;

&lt;h4&gt;
  
  
  Connect with Me
&lt;/h4&gt;

&lt;p&gt;Portfolio: &lt;a href="https://asepsayyad007.in" rel="noopener noreferrer"&gt;https://asepsayyad007.in&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/asepsayyad007" rel="noopener noreferrer"&gt;https://github.com/asepsayyad007&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/asepsayyad" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/asepsayyad&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Enjoyed this article?
&lt;/h4&gt;

&lt;p&gt;If you found this guide helpful, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starring my open-source projects on GitHub.&lt;/li&gt;
&lt;li&gt;Sharing this article with fellow Linux and DevOps engineers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also follow me for more practical content on Linux, DevOps, Cloud, Containers, Automation, and Open Source. Thanks for reading, and enjoy your learning!&lt;/p&gt;

&lt;p&gt;© 2026 Asep Sayyad&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>ubuntu</category>
      <category>learn</category>
    </item>
    <item>
      <title>The Biggest Linux Myths Beginners Still Fall For</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Wed, 12 Aug 2026 13:32:31 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/the-biggest-linux-myths-beginners-still-fall-for-326m</link>
      <guid>https://dev.to/asepsayyad007/the-biggest-linux-myths-beginners-still-fall-for-326m</guid>
      <description>&lt;p&gt;Let's be honest, when I first heard about Linux, I thought it was this scary hacker thing where you type green text on a black screen all day.&lt;/p&gt;

&lt;p&gt;Turns out, I was dead wrong.&lt;/p&gt;

&lt;p&gt;If you're new to Linux, chances are you've heard some version of these myths too. Maybe a friend told you Linux is "only for nerds." Maybe you saw some Reddit thread that made it sound like you'll blow up your laptop with one bad command.&lt;/p&gt;

&lt;p&gt;I believed some of this stuff too. And I wasted months avoiding Linux because of it.&lt;/p&gt;

&lt;p&gt;Most of these myths are either outdated, exaggerated, or just flat-out wrong. So let's go through them one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Myth 1: Linux Is Only for Experts
&lt;/h2&gt;

&lt;p&gt;This one drives me nuts because it stops so many people from even trying.&lt;/p&gt;

&lt;p&gt;Look, you don't need to be a programmer. You don't need a computer science degree. You definitely don't need to understand how the kernel works before you can open a web browser.&lt;/p&gt;

&lt;p&gt;Modern Linux distros like Ubuntu, Linux Mint, or Zorin OS give you a desktop that looks and feels pretty similar to Windows or macOS. You get a file manager, a web browser, a settings app, even a software store. It's all point-and-click if you want it to be.&lt;/p&gt;

&lt;p&gt;Just pick a beginner-friendly distro. Don't jump straight into Arch Linux on day one (unless you really enjoy pain).&lt;/p&gt;

&lt;p&gt;You didn't need to become a mechanic before you started driving a car, right? Same idea here.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 2: You Must Know Hundreds of Commands
&lt;/h2&gt;

&lt;p&gt;Okay yes, Linux has thousands of commands. That sounds terrifying.&lt;/p&gt;

&lt;p&gt;But nobody tells you this part: you only need like 7 of them to get started.&lt;/p&gt;

&lt;p&gt;I'm serious. pwd tells you where you are. ls shows what's in a folder. cd moves you around. mkdir makes a new folder. cp copies stuff, mv moves or renames stuff, and rm deletes stuff.&lt;/p&gt;

&lt;p&gt;That carried me through my first few months. I looked up everything else as I needed it. Google, man pages, Stack Overflow, whatever. Nobody actually memorizes all of them. Not even the people who've been using Linux for 20 years.&lt;/p&gt;

&lt;p&gt;The pressure to "know everything first" is fake. Just start using it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 3: Linux Has No Graphical Interface
&lt;/h2&gt;

&lt;p&gt;This one cracks me up every time.&lt;/p&gt;

&lt;p&gt;I think it comes from people seeing screenshots of Linux servers, which yeah, those are usually just a terminal. But desktop Linux? Full graphical environments. Some of them look gorgeous.&lt;/p&gt;

&lt;p&gt;You can browse files with a mouse, drag and drop things, connect to Wi-Fi from a menu, change your wallpaper, watch YouTube. All the normal stuff. No terminal needed.&lt;/p&gt;

&lt;p&gt;KDE Plasma and GNOME honestly look better than Windows in my opinion. But that's a debate for another day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 4: Linux Is Completely Virus-Proof
&lt;/h2&gt;

&lt;p&gt;This one's actually dangerous because it gives people a false sense of security.&lt;/p&gt;

&lt;p&gt;Is Linux more secure than Windows out of the box? Yeah, generally. But "more secure" doesn't mean "bulletproof."&lt;/p&gt;

&lt;p&gt;Linux systems can still get hit by security vulnerabilities, misconfigured services, compromised user accounts, and even malware. Yes, Linux malware exists. It's not common, but it's real.&lt;/p&gt;

&lt;p&gt;I've seen people in forums say "I run Linux so I don't need to worry about security." That mindset will bite you eventually.&lt;/p&gt;

&lt;p&gt;You should still keep your system updated, use strong passwords, avoid sketchy software sources, be careful with file permissions, and stop throwing sudo on every command like it's seasoning. Also back up your important files. I learned that one the hard way after a botched partition resize wiped my home directory. Fun times.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 5: You Always Need the Terminal
&lt;/h2&gt;

&lt;p&gt;The terminal is awesome. I love it.&lt;/p&gt;

&lt;p&gt;But no, you don't need it for everything. Most beginner-friendly distros have a file manager, a graphical settings app, and a software store you can click through. You could use Linux for weeks without ever opening a terminal if you wanted to.&lt;/p&gt;

&lt;p&gt;Where the terminal really shines is automation, remote server management, troubleshooting weird issues, and doing things faster once you've learned the commands. It's a power tool, not a requirement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 6: Installing Software Is Always Difficult
&lt;/h2&gt;

&lt;p&gt;This used to be kinda true, I'll admit. Back in the day, installing software on Linux could be a real headache. Dependency hell was a thing. Compiling from source was a thing.&lt;/p&gt;

&lt;p&gt;But now? On Ubuntu or Debian, you type sudo apt install followed by whatever you want, hit enter, and it's done. The package manager figures out all the dependencies for you. No hunting for .exe files on random websites. No "Next Next Next Finish" installers.&lt;/p&gt;

&lt;p&gt;Different distros use different package managers (dnf for Fedora, pacman for Arch), but the concept is the same everywhere.&lt;/p&gt;

&lt;p&gt;One warning though. Don't blindly copy-paste commands from the internet, especially if they use sudo. Take 10 seconds to understand what you're about to run. Your future self will thank you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 7: Linux Software Support Is Terrible
&lt;/h2&gt;

&lt;p&gt;I won't lie, there are some apps you can't get on Linux. Adobe Creative Suite? Nope. Some AAA games? Maybe not natively.&lt;/p&gt;

&lt;p&gt;But calling Linux software support "terrible" is a stretch. You've got GIMP, Blender, LibreOffice, VS Code, Spotify, Slack, Discord (either native or web apps), Docker, and most developer tools are actually built for Linux first. Flatpak and Snap are closing the gap on everything else.&lt;/p&gt;

&lt;p&gt;If you're a developer, Linux is honestly a dream. I switched my dev machine to Ubuntu two years ago and I've never looked back. Most tools just work without extra setup.&lt;/p&gt;

&lt;p&gt;Before you make the switch though, check if the specific apps you depend on daily have Linux versions or solid alternatives. For most people they do. For some workflows (video editing, audio production), it depends.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 8: Linux Is Always Completely Free
&lt;/h2&gt;

&lt;p&gt;"Free" in the Linux world is a loaded word.&lt;/p&gt;

&lt;p&gt;Can you download and use most Linux distros without paying anything? Yes. That part's true.&lt;/p&gt;

&lt;p&gt;But "free" in open source usually means freedom, not price. The freedom to use, study, modify, and share the software. Companies like Red Hat still charge for enterprise support, management tools, and consulting. That costs real money.&lt;/p&gt;

&lt;p&gt;And honestly, that's fine. It's how a lot of open-source projects stay funded and keep improving.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 9: Linux Is Only for Servers
&lt;/h2&gt;

&lt;p&gt;Linux dominates servers, sure. Cloud, containers, infrastructure, it's Linux all the way down.&lt;/p&gt;

&lt;p&gt;But it's also running on your Android phone right now. It's in smart TVs, routers, Raspberry Pis, cars, medical devices, and actual spacecraft. NASA runs Linux on the ISS. Your Wi-Fi router probably runs Linux.&lt;/p&gt;

&lt;p&gt;Calling Linux "server only" is like saying wheels are only for trucks.&lt;/p&gt;

&lt;p&gt;If you're getting into DevOps, learning Linux on a desktop is actually a smart move. Most production servers you'll manage are running some flavor of Linux anyway, so the commands and concepts transfer directly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Myth 10: You Can Easily Break Linux With One Command
&lt;/h2&gt;

&lt;p&gt;This is the one that scares beginners the most.&lt;/p&gt;

&lt;p&gt;Yes, Linux gives you a lot of power. And yes, rm -rf / is a real thing that can wreck your system. But you're not going to accidentally type that. Nobody does.&lt;/p&gt;

&lt;p&gt;The actual rule is simple: read the command before you run it. That's really all there is to it.&lt;/p&gt;

&lt;p&gt;When you find a command online, spend 5 seconds asking yourself what it does and why it needs sudo. If you can't answer that, look it up before hitting enter.&lt;/p&gt;

&lt;p&gt;And if you're nervous about experimenting, spin up a virtual machine. VirtualBox is free. Break the VM a hundred times, your real system stays completely fine. That's how I learned most of what I know, by breaking things in VMs and figuring out how to fix them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try This Right Now
&lt;/h2&gt;

&lt;p&gt;Enough talking, let's do something. Takes 30 seconds.&lt;/p&gt;

&lt;p&gt;Open a terminal and make a practice folder with mkdir linux-practice. Jump into it with cd linux-practice. Create a file with touch notes.txt. Run ls to check that it's there.&lt;/p&gt;

&lt;p&gt;Four commands. You just created a directory, navigated into it, made a file, and confirmed it exists. That's real Linux usage right there.&lt;/p&gt;

&lt;p&gt;If mkdir complains the folder already exists, you ran it before. If cd says it can't find it, run pwd to see where you are, then ls to see what's around you.&lt;/p&gt;

&lt;p&gt;That's how Linux learning works. You try stuff, see what happens, fix the small things, and move on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Habits I Wish I'd Started With
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Stop copy-pasting blindly
&lt;/h3&gt;

&lt;p&gt;I know it's tempting. You find a command on Stack Overflow and just slap it in. But please, take 5 seconds to read it first. Especially anything with sudo. I once pasted a "cleanup" command I found on a blog that nuked half my config files. Don't be me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn a few commands at a time
&lt;/h3&gt;

&lt;p&gt;Don't try to learn everything in one weekend. Pick up pwd, ls, cd, mkdir, touch, cp, and mv. Use them every day. They'll become second nature within a week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Man pages are your friend
&lt;/h3&gt;

&lt;p&gt;Curious about what a command can do? Type man followed by the command name. Every option, every flag, all documented. It's dry reading, but it's accurate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Respect sudo
&lt;/h3&gt;

&lt;p&gt;Sudo gives you admin power. Great when you need it, dangerous when you don't. Don't add it to commands just because a tutorial said so. Understand why it's needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use a virtual machine for experiments
&lt;/h3&gt;

&lt;p&gt;Nervous about breaking things? VirtualBox is free. Trash the VM as many times as you want. Zero consequences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Update your system
&lt;/h3&gt;

&lt;p&gt;Yeah, updates are annoying. But they fix security holes and bugs. Just do it. Set a reminder if you have to.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistakes You'll Probably Make (And That's Fine)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Thinking you need to know everything first
&lt;/h3&gt;

&lt;p&gt;You don't. Nobody does. I've been using Linux for years and I still google basic stuff sometimes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Being scared of the terminal
&lt;/h3&gt;

&lt;p&gt;It looks intimidating with all that text. I know. But after a week of using it, you'll wonder what you were so worried about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running commands without reading them
&lt;/h3&gt;

&lt;p&gt;Break this habit on day one. Seriously. Everything else gets easier once you stop doing this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assuming Linux can't be hacked
&lt;/h3&gt;

&lt;p&gt;It's secure. It's not invincible. Good security habits matter regardless of your OS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing random .deb files from the internet
&lt;/h3&gt;

&lt;p&gt;Stick to your distro's package manager or trusted sources like Flathub. Downloading random packages from unknown websites is the Linux equivalent of clicking "Free_Movie_Player.exe" on Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparing Linux to Windows constantly
&lt;/h3&gt;

&lt;p&gt;They're different tools for different jobs. Instead of asking "which is better," ask "which one does what I need?"&lt;/p&gt;




&lt;h2&gt;
  
  
  Fun Fact
&lt;/h2&gt;

&lt;p&gt;Linux runs the International Space Station. It runs most of the world's top supercomputers. It runs Android. It probably runs your router, your smart TV, and your car's infotainment system.&lt;/p&gt;

&lt;p&gt;So when someone tells you Linux is "niche," you can let them know it's literally running the world. Just quietly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Most Linux myths fall apart the moment you actually sit down and try it.&lt;/p&gt;

&lt;p&gt;You don't need to be an expert. You don't need to memorize a dictionary of commands. You don't have to live in the terminal. And no, Linux won't magically protect you from every security threat.&lt;/p&gt;

&lt;p&gt;The best way to learn is just to start. Open a terminal. Type something. See what happens. Make a mistake. Fix it. That's the whole process.&lt;/p&gt;

&lt;p&gt;I started exactly like that, confused, a little nervous, and way too cautious. Now I run Linux as my daily driver and I honestly can't imagine going back.&lt;/p&gt;

&lt;p&gt;If you're learning Linux for dev work, sysadmin stuff, or DevOps, every small step counts. You don't need to know everything about Linux to start using it. Nobody does. Not even the people writing blog posts about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drop a Comment
&lt;/h2&gt;

&lt;p&gt;What Linux myth did you fall for before you actually tried it?&lt;/p&gt;

&lt;p&gt;I bet someone reading this is worried about the exact same thing right now. Sharing it might be the push they need to finally give Linux a shot.&lt;/p&gt;




&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;Asep Sayyad is a Linux and DevOps engineer passionate about Linux administration, automation, cloud technologies, containers, and open-source software. He enjoys solving real-world infrastructure challenges and sharing practical knowledge through in-depth technical articles, tutorials, and hands-on guides.&lt;/p&gt;

&lt;p&gt;His goal is to help aspiring and experienced engineers build stronger Linux and DevOps skills with content focused on real production scenarios rather than theory alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect with Me
&lt;/h2&gt;

&lt;p&gt;Portfolio: &lt;a href="https://asepsayyad007.in" rel="noopener noreferrer"&gt;https://asepsayyad007.in&lt;/a&gt; &lt;br&gt;
GitHub: &lt;a href="https://github.com/asepsayyad007" rel="noopener noreferrer"&gt;https://github.com/asepsayyad007&lt;/a&gt; &lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/asepsayyad" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/asepsayyad&lt;/a&gt;&lt;br&gt;
Medium: asepsayyad007.medium.com&lt;/p&gt;

&lt;p&gt;Enjoyed this article?&lt;br&gt;
If you found this guide helpful, consider:&lt;/p&gt;

&lt;p&gt;Starring my open-source projects on GitHub.&lt;br&gt;
Sharing this article with fellow Linux and DevOps engineers.&lt;br&gt;
You can also follow me for more practical content on Linux, DevOps, Cloud, Containers, Automation, and Open Source. Thanks for reading, and enjoy your learning!&lt;/p&gt;

&lt;p&gt;© 2026 Asep Sayyad&lt;/p&gt;

</description>
      <category>linux</category>
      <category>archlinux</category>
      <category>ubuntu</category>
      <category>devops</category>
    </item>
    <item>
      <title>Before You Panic: Git Commands That Can Save Your Project.</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Thu, 06 Aug 2026 08:18:52 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/before-you-panic-git-commands-that-can-save-your-project-1ie5</link>
      <guid>https://dev.to/asepsayyad007/before-you-panic-git-commands-that-can-save-your-project-1ie5</guid>
      <description>&lt;p&gt;If you've been using Git for a while, chances are you've had at least&lt;br&gt;
one moment where your heart skipped a beat.&lt;/p&gt;

&lt;p&gt;Maybe you reset the wrong commit, deleted a branch, or switched branches&lt;br&gt;
without saving your work. Your first thought is usually, &lt;em&gt;"I just lost&lt;br&gt;
everything."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I've been there too.&lt;/p&gt;

&lt;p&gt;The good news is that Git is much more forgiving than it looks. Most of&lt;br&gt;
the time, your work is still there---you just need to know which command&lt;br&gt;
to use.&lt;/p&gt;

&lt;p&gt;In this article, I'll share the Git commands I rely on whenever&lt;br&gt;
something goes wrong. They aren't magic tricks; they're practical tools&lt;br&gt;
that have saved me more than once.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. Check what's happening first
&lt;/h2&gt;

&lt;p&gt;Before trying to fix anything, see the current state of your repository.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;I run this command almost every time before committing. It quickly tells&lt;br&gt;
me which files have changed, which ones are staged, and whether I've&lt;br&gt;
forgotten anything.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Review your changes
&lt;/h2&gt;

&lt;p&gt;Before creating a commit, take a quick look at what actually changed.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If you've already staged files:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This simple habit has saved me from committing debug code and accidental&lt;br&gt;
edits more times than I'd like to admit.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Read your commit history
&lt;/h2&gt;

&lt;p&gt;When you're trying to understand how your project reached its current&lt;br&gt;
state, a clean commit history is incredibly useful.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The graph view makes it much easier to understand branches and merges.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The lifesaver: &lt;code&gt;git reflog&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;If you only remember one command from this article, make it this one.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Even after a reset or an accidental checkout, Git usually keeps a record&lt;br&gt;
of where your HEAD has been.&lt;/p&gt;

&lt;p&gt;Found the commit you need?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;or restore it completely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; &amp;lt;commit-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many "lost" commits aren't actually lost.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Undo a commit without losing your work
&lt;/h2&gt;

&lt;p&gt;Forgot to include a file?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--soft&lt;/span&gt; HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commit disappears, but all your changes stay exactly where they are,&lt;br&gt;
ready for another commit.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Remove a commit completely
&lt;/h2&gt;

&lt;p&gt;Sometimes you really do want to go back.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this carefully. It removes both the commit and your local changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Pause your work with &lt;code&gt;git stash&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine you're halfway through a feature when someone asks you to fix an&lt;br&gt;
urgent production bug.&lt;/p&gt;

&lt;p&gt;Instead of making a messy temporary commit, simply stash your work.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;When you're ready to continue:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;See every saved stash:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Restore a deleted file
&lt;/h2&gt;

&lt;p&gt;Deleted a tracked file by mistake?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Need an older version?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git restore &lt;span class="nt"&gt;--source&lt;/span&gt; &amp;lt;commit-id&amp;gt; app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. Find who changed a line
&lt;/h2&gt;

&lt;p&gt;Ever wondered who introduced a particular line of code?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git blame app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command shows who last modified each line and in which commit.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Search your history
&lt;/h2&gt;

&lt;p&gt;Looking for the commit that fixed authentication?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log &lt;span class="nt"&gt;--grep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"authentication"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looking for where a function was added?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;These searches save a lot of scrolling.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Clean untracked files
&lt;/h2&gt;

&lt;p&gt;First, preview what Git will remove.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If everything looks correct:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Always preview before deleting.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Visit an older version
&lt;/h2&gt;

&lt;p&gt;Sometimes you just want to test an older commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch &lt;span class="nt"&gt;--detach&lt;/span&gt; &amp;lt;commit-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This lets you explore older versions without affecting your current&lt;br&gt;
branch.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;  Check &lt;code&gt;git status&lt;/code&gt; before every commit.&lt;/li&gt;
&lt;li&gt;  Review your changes with &lt;code&gt;git diff&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Write meaningful commit messages.&lt;/li&gt;
&lt;li&gt;  Work on feature branches instead of &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Push your work regularly.&lt;/li&gt;
&lt;li&gt;  Learn &lt;code&gt;git reflog&lt;/code&gt; before you actually need it.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Every developer makes Git mistakes. I still do.&lt;/p&gt;

&lt;p&gt;The difference is that, over time, you realize most mistakes are&lt;br&gt;
recoverable. Once you're comfortable with commands like &lt;code&gt;git reflog&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;git stash&lt;/code&gt;, and &lt;code&gt;git restore&lt;/code&gt;, those "I think I broke everything"&lt;br&gt;
moments become much less stressful.&lt;/p&gt;

&lt;p&gt;I hope this guide gives you a few commands you'll remember the next time&lt;br&gt;
Git surprises you.&lt;/p&gt;

&lt;p&gt;If there's a Git command that has saved your day, I'd love to hear about&lt;br&gt;
it in the comments.&lt;/p&gt;




</description>
      <category>linux</category>
      <category>git</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Linux Skills That Separate Junior and Senior DevOps Engineers: A Practical Comparison</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Sat, 01 Aug 2026 11:15:02 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/the-linux-skills-that-separate-junior-and-senior-devops-engineers-a-practical-comparison-40jh</link>
      <guid>https://dev.to/asepsayyad007/the-linux-skills-that-separate-junior-and-senior-devops-engineers-a-practical-comparison-40jh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Many people believe that becoming a senior DevOps engineer means&lt;br&gt;
learning Kubernetes, Terraform, or cloud platforms. While those skills&lt;br&gt;
matter, the real difference often comes down to &lt;strong&gt;Linux&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A junior engineer usually knows commands. A senior engineer understands&lt;br&gt;
the operating system, investigates problems methodically, and thinks&lt;br&gt;
about reliability, security, and automation.&lt;/p&gt;

&lt;p&gt;This article compares the mindset and daily practices of junior and&lt;br&gt;
senior DevOps engineers.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Linux Fundamentals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior Engineer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Memorizes commands&lt;/li&gt;
&lt;li&gt;Copies solutions
&lt;/li&gt;
&lt;li&gt;Learns tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Senior Engineer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Understands how Linux works&lt;/li&gt;
&lt;li&gt;Investigates root causes&lt;/li&gt;
&lt;li&gt;Learns concepts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Filesystem Knowledge
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Knows basic directories&lt;/li&gt;
&lt;li&gt;  Searches randomly for configuration files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Understands the Filesystem Hierarchy Standard&lt;/li&gt;
&lt;li&gt;  Knows where logs, binaries, configuration files, and temporary files
belong&lt;/li&gt;
&lt;li&gt;  Understands mount points and storage layouts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. File Permissions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&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; &lt;span class="nt"&gt;-R&lt;/span&gt; 777 project/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Checks ownership&lt;/li&gt;
&lt;li&gt;  Reviews groups&lt;/li&gt;
&lt;li&gt;  Uses least privilege&lt;/li&gt;
&lt;li&gt;  Understands ACLs, SUID, SGID, and Sticky Bit&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Managing Services
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status nginx
journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; nginx
ss &lt;span class="nt"&gt;-tulpn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is to identify the root cause before restarting services.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Reading Logs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;p&gt;"I'll restart the application."&lt;/p&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;p&gt;"Let's read the logs first."&lt;/p&gt;

&lt;p&gt;Useful tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  journalctl&lt;/li&gt;
&lt;li&gt;  grep&lt;/li&gt;
&lt;li&gt;  tail&lt;/li&gt;
&lt;li&gt;  less&lt;/li&gt;
&lt;li&gt;  awk&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Networking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Checks if ping works&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Verifies DNS&lt;/li&gt;
&lt;li&gt;  Checks routing&lt;/li&gt;
&lt;li&gt;  Reviews firewall rules&lt;/li&gt;
&lt;li&gt;  Confirms listening ports&lt;/li&gt;
&lt;li&gt;  Tests application connectivity&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Storage Management
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;p&gt;Deletes random files when disk space is low.&lt;/p&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Uses &lt;code&gt;df -h&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Uses &lt;code&gt;du -sh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Checks inode usage&lt;/li&gt;
&lt;li&gt;  Finds large files&lt;/li&gt;
&lt;li&gt;  Identifies why storage is growing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Performance Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;p&gt;"The server is slow."&lt;/p&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;p&gt;Measures before acting.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  CPU&lt;/li&gt;
&lt;li&gt;  Memory&lt;/li&gt;
&lt;li&gt;  Disk I/O&lt;/li&gt;
&lt;li&gt;  Swap&lt;/li&gt;
&lt;li&gt;  Load Average&lt;/li&gt;
&lt;li&gt;  Network utilization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Shell Scripting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;p&gt;Creates scripts that solve a single problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;p&gt;Creates reusable scripts with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Functions&lt;/li&gt;
&lt;li&gt;  Logging&lt;/li&gt;
&lt;li&gt;  Error handling&lt;/li&gt;
&lt;li&gt;  Validation&lt;/li&gt;
&lt;li&gt;  Comments&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;p&gt;Uses the root account for everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Uses SSH keys&lt;/li&gt;
&lt;li&gt;  Applies least privilege&lt;/li&gt;
&lt;li&gt;  Configures firewalls&lt;/li&gt;
&lt;li&gt;  Audits systems&lt;/li&gt;
&lt;li&gt;  Performs regular updates&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Automation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;p&gt;Runs repetitive commands manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;p&gt;Automates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Backups&lt;/li&gt;
&lt;li&gt;  Monitoring&lt;/li&gt;
&lt;li&gt;  User provisioning&lt;/li&gt;
&lt;li&gt;  Deployments&lt;/li&gt;
&lt;li&gt;  Health checks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  12. Troubleshooting Mindset
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Junior
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Restart services&lt;/li&gt;
&lt;li&gt; Hope the problem disappears&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Senior
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Observe&lt;/li&gt;
&lt;li&gt; Collect evidence&lt;/li&gt;
&lt;li&gt; Read logs&lt;/li&gt;
&lt;li&gt; Reproduce the issue&lt;/li&gt;
&lt;li&gt; Fix the root cause&lt;/li&gt;
&lt;li&gt; Document the solution&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  13. Production Scenario
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Issue
&lt;/h3&gt;

&lt;p&gt;Nginx returns &lt;strong&gt;502 Bad Gateway&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Junior Approach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Restart Nginx&lt;/li&gt;
&lt;li&gt;  Restart backend service&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Senior Approach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Review Nginx logs&lt;/li&gt;
&lt;li&gt;  Check backend health&lt;/li&gt;
&lt;li&gt;  Verify ports&lt;/li&gt;
&lt;li&gt;  Test upstream connectivity&lt;/li&gt;
&lt;li&gt;  Review recent deployments&lt;/li&gt;
&lt;li&gt;  Fix the actual issue instead of masking it&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;The difference between a junior and a senior DevOps engineer isn't the&lt;br&gt;
number of Linux commands they know---it's how they think.&lt;/p&gt;

&lt;p&gt;Senior engineers understand systems, troubleshoot calmly, automate&lt;br&gt;
repetitive work, prioritize security, and prevent problems instead of&lt;br&gt;
repeatedly fixing them.&lt;/p&gt;

&lt;p&gt;Master Linux concepts first, and every other DevOps technology becomes&lt;br&gt;
easier to learn.&lt;/p&gt;




&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Asep Sayyad&lt;/strong&gt; is a Linux and DevOps engineer passionate about Linux administration, automation, cloud technologies, containers, and open-source software. He enjoys solving real-world infrastructure challenges and sharing practical knowledge through in-depth technical articles, tutorials, and hands-on guides.&lt;/p&gt;

&lt;p&gt;His goal is to help aspiring and experienced engineers build stronger Linux and DevOps skills with content focused on real production scenarios rather than theory alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect with Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://asepsayyad007.in" rel="noopener noreferrer"&gt;https://asepsayyad007.in&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/asepsayyad007" rel="noopener noreferrer"&gt;https://github.com/asepsayyad007&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/asepsayyad007" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/asepsayyad007&lt;/a&gt; &lt;em&gt;(Update if different)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;📝 &lt;strong&gt;Medium:&lt;/strong&gt; &lt;a href="https://medium.com/@asepsayyad007" rel="noopener noreferrer"&gt;https://medium.com/@asepsayyad007&lt;/a&gt; &lt;em&gt;(Update if different)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Enjoyed this article?
&lt;/h3&gt;

&lt;p&gt;If you found this guide helpful, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Starring my open-source projects on GitHub.&lt;/li&gt;
&lt;li&gt;🔄 Sharing this article with fellow Linux and DevOps engineers.&lt;/li&gt;
&lt;li&gt;📚 Following me for more practical content on Linux, DevOps, Cloud, Containers, Automation, and Open Source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading, and happy learning! 🚀&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>ubuntu</category>
      <category>devsecops</category>
    </item>
    <item>
      <title>Hidden Linux Gems: 15 Lesser-Known Commands That Deserve More Attention</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Mon, 27 Jul 2026 14:38:38 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/hidden-linux-gems-15-lesser-known-commands-that-deserve-more-attention-237p</link>
      <guid>https://dev.to/asepsayyad007/hidden-linux-gems-15-lesser-known-commands-that-deserve-more-attention-237p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;There are no "secret" Linux commands hidden from experienced users.&lt;br&gt;
However, there &lt;strong&gt;are&lt;/strong&gt; many excellent commands that are surprisingly&lt;br&gt;
underused. These can make you more productive and deepen your&lt;br&gt;
understanding of Linux.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;tldr&lt;/code&gt; --- Simpler Than &lt;code&gt;man&lt;/code&gt;
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;p&gt;Most people know &lt;code&gt;man&lt;/code&gt;, but &lt;code&gt;tldr&lt;/code&gt; provides practical examples instead&lt;br&gt;
of long documentation.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. &lt;code&gt;ss&lt;/code&gt; --- Better Than &lt;code&gt;netstat&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulnp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows: - Listening ports - Process IDs - Active TCP/UDP sockets&lt;/p&gt;

&lt;p&gt;Why use it?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ss&lt;/code&gt; is faster and is the modern replacement for &lt;code&gt;netstat&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Find the Largest Files
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-ah&lt;/span&gt; / | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rh&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;du -ah&lt;/code&gt; → Calculate file sizes&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;sort -rh&lt;/code&gt; → Sort by largest first&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;head -20&lt;/code&gt; → Show only the top 20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful when a server suddenly runs out of disk space.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Watch a Command Continuously
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;watch &lt;span class="nt"&gt;-n&lt;/span&gt; 2 free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs &lt;code&gt;free -h&lt;/code&gt; every 2 seconds.&lt;/p&gt;

&lt;p&gt;Great for monitoring: - Memory - Disk usage - Processes&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Discover Binary Dependencies
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;p&gt;Shows which shared libraries a program depends on.&lt;/p&gt;

&lt;p&gt;Very useful when debugging missing library errors.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Trace What a Program Is Doing
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;p&gt;You'll see every system call the program makes.&lt;/p&gt;

&lt;p&gt;This is one of the best debugging tools available.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. See Open Files
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find which process is using port 80.&lt;/p&gt;

&lt;p&gt;Another example:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Shows which process currently has the file open.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Inspect Binary Strings
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;strings binary_file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extracts readable text from compiled binaries.&lt;/p&gt;

&lt;p&gt;Useful for: - Reverse engineering - Malware analysis - Debugging&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Hex Dump Any File
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;p&gt;Displays hexadecimal representation.&lt;/p&gt;

&lt;p&gt;Restore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xxd &lt;span class="nt"&gt;-r&lt;/span&gt; dump.hex restored.bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  10. View ELF Information
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;readelf &lt;span class="nt"&gt;-h&lt;/span&gt; /bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Architecture&lt;/li&gt;
&lt;li&gt;  Entry point&lt;/li&gt;
&lt;li&gt;  ELF headers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Very useful for Linux internals.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Find Slow DNS Lookups
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig openai.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of relying on &lt;code&gt;ping&lt;/code&gt;, use &lt;code&gt;dig&lt;/code&gt; to troubleshoot DNS.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Show Process Tree
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pstree &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Displays parent and child processes in a tree.&lt;/p&gt;

&lt;p&gt;Much easier than reading &lt;code&gt;ps&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Follow Multiple Logs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;multitail /var/log/syslog /var/log/auth.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unlike &lt;code&gt;tail -f&lt;/code&gt;, this lets you watch several log files simultaneously.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Recover Deleted Terminal Output
&lt;/h2&gt;

&lt;p&gt;Accidentally cleared your terminal?&lt;/p&gt;

&lt;p&gt;Instead of reopening it:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;reset&lt;/code&gt; completely reinitializes the terminal if it becomes corrupted.&lt;/p&gt;




&lt;h2&gt;
  
  
  15. Explore Without Installing Anything
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instantly creates a web server in the current directory.&lt;/p&gt;

&lt;p&gt;Perfect for: - Sharing files - Testing websites - Development&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus Commands Worth Learning
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;timeout &lt;/span&gt;5 ping google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automatically stops a command after 5 seconds.&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;yes&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outputs text continuously until stopped.&lt;/p&gt;

&lt;p&gt;Useful for testing scripts.&lt;/p&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;column &lt;span class="nt"&gt;-t&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Formats messy text into neat columns.&lt;/p&gt;






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

&lt;/div&gt;



&lt;p&gt;Records your entire terminal session.&lt;/p&gt;






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

&lt;/div&gt;



&lt;p&gt;Search your shell history instantly.&lt;/p&gt;




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

&lt;p&gt;None of these commands are "secret." They are simply underused. Learning&lt;br&gt;
them won't replace Linux fundamentals, but they'll make you a more&lt;br&gt;
capable troubleshooter and system administrator.&lt;/p&gt;




</description>
      <category>linux</category>
      <category>ubuntu</category>
      <category>terminal</category>
      <category>devops</category>
    </item>
    <item>
      <title>Linux Isn't Hard—You're Learning It the Wrong Way</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Sun, 26 Jul 2026 16:55:43 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/linux-isnt-hard-youre-learning-it-the-wrong-way-4hoo</link>
      <guid>https://dev.to/asepsayyad007/linux-isnt-hard-youre-learning-it-the-wrong-way-4hoo</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Stop memorizing commands. Start understanding concepts.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many people believe Linux is difficult because they begin by trying to&lt;br&gt;
memorize dozens of terminal commands. After a few days, they forget most&lt;br&gt;
of them and feel discouraged.&lt;/p&gt;

&lt;p&gt;The truth is simple: &lt;strong&gt;Linux isn't hard---you're probably learning it&lt;br&gt;
the wrong way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you want to become a Linux administrator, DevOps engineer, cloud&lt;br&gt;
engineer, or simply feel comfortable using Linux, the right learning&lt;br&gt;
approach makes all the difference.&lt;/p&gt;


&lt;h1&gt;
  
  
  Stop Memorizing Commands
&lt;/h1&gt;

&lt;p&gt;A common mistake is trying to remember hundreds of commands 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;ls
pwd
cd
mkdir
touch
cp
mv
rm
chmod&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commands are tools, not vocabulary. You don't need to memorize every&lt;br&gt;
tool before building something.&lt;/p&gt;

&lt;p&gt;Instead, learn commands when you actually need them.&lt;/p&gt;


&lt;h1&gt;
  
  
  Learn by Solving Real Problems
&lt;/h1&gt;

&lt;p&gt;Rather than memorizing &lt;code&gt;cp&lt;/code&gt;, ask yourself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How do I copy my project folder?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then learn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; project backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the command solved a real problem, you'll remember it much&lt;br&gt;
longer.&lt;/p&gt;


&lt;h1&gt;
  
  
  Linux Is Mostly Four Things
&lt;/h1&gt;

&lt;p&gt;Understanding these concepts will make nearly every command easier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Files&lt;/li&gt;
&lt;li&gt;  Directories&lt;/li&gt;
&lt;li&gt;  Permissions&lt;/li&gt;
&lt;li&gt;  Processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once these become familiar, Linux starts feeling much more logical.&lt;/p&gt;


&lt;h1&gt;
  
  
  Don't Depend on Huge Cheat Sheets
&lt;/h1&gt;

&lt;p&gt;Cheat sheets are helpful, but avoid trying to study hundreds of commands&lt;br&gt;
at once.&lt;/p&gt;

&lt;p&gt;Focus on only the commands you need today.&lt;/p&gt;

&lt;p&gt;Small progress every day beats information overload.&lt;/p&gt;


&lt;h1&gt;
  
  
  Build Small Projects
&lt;/h1&gt;

&lt;p&gt;Projects teach far better than tutorials.&lt;/p&gt;

&lt;p&gt;Try building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A personal website&lt;/li&gt;
&lt;li&gt;  A simple backup script&lt;/li&gt;
&lt;li&gt;  A Docker container&lt;/li&gt;
&lt;li&gt;  An Nginx web server&lt;/li&gt;
&lt;li&gt;  SSH remote access&lt;/li&gt;
&lt;li&gt;  A scheduled cron backup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each project teaches multiple Linux concepts naturally.&lt;/p&gt;


&lt;h1&gt;
  
  
  Read Error Messages
&lt;/h1&gt;

&lt;p&gt;When Linux says:&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;Don't panic.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Do I own this file?&lt;/li&gt;
&lt;li&gt;  Are the permissions correct?&lt;/li&gt;
&lt;li&gt;  Am I using the correct path?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linux often tells you exactly what went wrong.&lt;/p&gt;




&lt;h1&gt;
  
  
  Understand Before Copying Commands
&lt;/h1&gt;

&lt;p&gt;Never blindly run commands 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;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 777 /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What does &lt;code&gt;chmod&lt;/code&gt; do?&lt;/li&gt;
&lt;li&gt;  What does &lt;code&gt;-R&lt;/code&gt; mean?&lt;/li&gt;
&lt;li&gt;  What does &lt;code&gt;777&lt;/code&gt; mean?&lt;/li&gt;
&lt;li&gt;  What does &lt;code&gt;/&lt;/code&gt; represent?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding protects your system.&lt;/p&gt;




&lt;h1&gt;
  
  
  Practice Every Day
&lt;/h1&gt;

&lt;p&gt;Even 10--15 minutes daily makes a huge difference.&lt;/p&gt;

&lt;p&gt;Practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Creating folders&lt;/li&gt;
&lt;li&gt;  Navigating directories&lt;/li&gt;
&lt;li&gt;  Editing files&lt;/li&gt;
&lt;li&gt;  Searching files&lt;/li&gt;
&lt;li&gt;  Checking running processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consistency beats marathon study sessions.&lt;/p&gt;




&lt;h1&gt;
  
  
  Ask Better Questions
&lt;/h1&gt;

&lt;p&gt;Instead of searching:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Linux is broken"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Search:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Permission denied while copying a file"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Specific questions usually produce specific solutions.&lt;/p&gt;




&lt;h1&gt;
  
  
  You Don't Need to Know Everything
&lt;/h1&gt;

&lt;p&gt;Experienced Linux administrators still search documentation.&lt;/p&gt;

&lt;p&gt;Professionals remember concepts and know where to find details when&lt;br&gt;
needed.&lt;/p&gt;

&lt;p&gt;You don't have to memorize every command to become good at Linux.&lt;/p&gt;




&lt;h1&gt;
  
  
  Key Takeaways
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;  Learn concepts before commands.&lt;/li&gt;
&lt;li&gt;  Solve real problems.&lt;/li&gt;
&lt;li&gt;  Build projects.&lt;/li&gt;
&lt;li&gt;  Read error messages carefully.&lt;/li&gt;
&lt;li&gt;  Practice consistently.&lt;/li&gt;
&lt;li&gt;  Understand commands before using them.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Interesting Fact 💡
&lt;/h1&gt;

&lt;p&gt;Linux powers &lt;strong&gt;more than 90% of the world's top 500 supercomputers&lt;/strong&gt;,&lt;br&gt;
making it one of the most important operating systems in computing.&lt;/p&gt;




&lt;h1&gt;
  
  
  Question for Readers
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;What was the hardest part when you started learning Linux? Share your&lt;br&gt;
experience in the comments!&lt;/strong&gt;&lt;/p&gt;




</description>
      <category>linux</category>
      <category>devops</category>
      <category>ubuntu</category>
      <category>archlinux</category>
    </item>
    <item>
      <title>What Really Happens When You Press Enter in the Linux Terminal? A Deep Dive Using the `ls` Command</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:14:23 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/what-really-happens-when-you-press-enter-in-the-linux-terminal-a-deep-dive-using-the-ls-command-47k</link>
      <guid>https://dev.to/asepsayyad007/what-really-happens-when-you-press-enter-in-the-linux-terminal-a-deep-dive-using-the-ls-command-47k</guid>
      <description>&lt;p&gt;&lt;strong&gt;Reading Time:&lt;/strong&gt; 10 minutes&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You type &lt;code&gt;ls&lt;/code&gt;, press &lt;strong&gt;Enter&lt;/strong&gt;, and the result appears almost&lt;br&gt;
instantly. But what actually happens during those few milliseconds?&lt;br&gt;
This article follows the complete journey of a single Linux&lt;br&gt;
command---from your keyboard to the kernel and back to your screen.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;ol&gt;
&lt;li&gt; Introduction&lt;/li&gt;
&lt;li&gt; Meet the Players&lt;/li&gt;
&lt;li&gt; Step 1: Typing &lt;code&gt;ls&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; Step 2: Pressing Enter&lt;/li&gt;
&lt;li&gt; Step 3: The Shell Takes Over&lt;/li&gt;
&lt;li&gt; Step 4: Finding the Command&lt;/li&gt;
&lt;li&gt; Step 5: Creating a Process&lt;/li&gt;
&lt;li&gt; Step 6: Loading into Memory&lt;/li&gt;
&lt;li&gt; Step 7: CPU Execution&lt;/li&gt;
&lt;li&gt;Step 8: Kernel Interaction&lt;/li&gt;
&lt;li&gt;Step 9: Reading the File System&lt;/li&gt;
&lt;li&gt;Step 10: Printing the Output&lt;/li&gt;
&lt;li&gt;Complete Flow Diagram&lt;/li&gt;
&lt;li&gt;Practical Example&lt;/li&gt;
&lt;li&gt;Best Practices&lt;/li&gt;
&lt;li&gt;Common Mistakes&lt;/li&gt;
&lt;li&gt;Interesting Fact&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;li&gt;Reader Question&lt;/li&gt;
&lt;li&gt;SEO Metadata&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Every Linux user starts by running simple commands like &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;, or&lt;br&gt;
&lt;code&gt;cd&lt;/code&gt;. They look simple, but Linux performs an impressive amount of work&lt;br&gt;
before you see the output.&lt;/p&gt;

&lt;p&gt;In this article, we'll use &lt;strong&gt;one command&lt;/strong&gt;---&lt;code&gt;ls&lt;/code&gt;---to understand how&lt;br&gt;
the terminal, shell, kernel, CPU, RAM, and file system work together.&lt;/p&gt;


&lt;h2&gt;
  
  
  Meet the Players
&lt;/h2&gt;

&lt;p&gt;Component     Role&lt;/p&gt;



&lt;p&gt;Terminal      Collects keyboard input and displays output&lt;br&gt;
  Shell         Interprets your command&lt;br&gt;
  PATH          Helps locate executable programs&lt;br&gt;
  Kernel        Core of Linux that manages hardware and system resources&lt;br&gt;
  CPU           Executes machine instructions&lt;br&gt;
  RAM           Holds running programs&lt;br&gt;
  File System   Stores files and directories&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1: Typing &lt;code&gt;ls&lt;/code&gt;
&lt;/h2&gt;


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

&lt;/div&gt;


&lt;p&gt;The terminal receives each keystroke and echoes it to the screen.&lt;br&gt;
Nothing has been executed yet.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 2: Pressing Enter
&lt;/h2&gt;

&lt;p&gt;Pressing &lt;strong&gt;Enter&lt;/strong&gt; tells the terminal that the command line is complete.&lt;/p&gt;

&lt;p&gt;The terminal forwards:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;to the shell.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: The Shell Takes Over
&lt;/h2&gt;

&lt;p&gt;The shell (usually Bash) examines the command.&lt;/p&gt;

&lt;p&gt;It asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Is this an alias?&lt;/li&gt;
&lt;li&gt;  Is this a shell built-in?&lt;/li&gt;
&lt;li&gt;  Is this an executable program?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since &lt;code&gt;ls&lt;/code&gt; is an executable, it begins searching for it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Finding the Command
&lt;/h2&gt;

&lt;p&gt;The shell checks directories listed in &lt;code&gt;PATH&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/local/bin:/usr/bin:/bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eventually it finds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/bin/ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can verify this yourself:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/bin/ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5: Creating a Process
&lt;/h2&gt;

&lt;p&gt;The shell creates a new process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bash
 └── ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The shell pauses while &lt;code&gt;ls&lt;/code&gt; executes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Loading into Memory
&lt;/h2&gt;

&lt;p&gt;Linux copies the executable from storage into RAM, prepares memory, and&lt;br&gt;
sets up everything the program needs to run.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 7: CPU Execution
&lt;/h2&gt;

&lt;p&gt;The CPU starts executing instructions inside &lt;code&gt;ls&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since no directory was specified, it assumes the current working&lt;br&gt;
directory.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 8: Talking to the Kernel
&lt;/h2&gt;

&lt;p&gt;Programs cannot directly access hardware or disks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; requests the Linux kernel to read the directory contents.&lt;/p&gt;

&lt;p&gt;The kernel verifies permissions and safely retrieves the information.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 9: Reading the File System
&lt;/h2&gt;

&lt;p&gt;The kernel reads metadata describing files and directories and returns&lt;br&gt;
it to &lt;code&gt;ls&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 10: Printing the Output
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; formats the information and writes it to &lt;strong&gt;stdout&lt;/strong&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documents
Downloads
Pictures
notes.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The terminal receives this text and displays it.&lt;/p&gt;

&lt;p&gt;Finally, &lt;code&gt;ls&lt;/code&gt; exits, Linux frees its resources, and Bash shows a new&lt;br&gt;
prompt.&lt;/p&gt;


&lt;h2&gt;
  
  
  Complete Flow Diagram
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Keyboard
   │
   ▼
Terminal
   │
   ▼
Shell (Bash)
   │
   ▼
Search PATH
   │
   ▼
Find /usr/bin/ls
   │
   ▼
Create Process
   │
   ▼
Load into RAM
   │
   ▼
CPU Executes
   │
   ▼
Kernel
   │
   ▼
File System
   │
   ▼
ls Formats Output
   │
   ▼
Terminal Displays Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Practical Example
&lt;/h2&gt;

&lt;p&gt;Run:&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;mkdir &lt;/span&gt;demo
&lt;span class="nb"&gt;touch &lt;/span&gt;demo/file1.txt demo/file2.txt
&lt;span class="nb"&gt;cd &lt;/span&gt;demo
&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;file1.txt
file2.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything described in this article happens every time you run &lt;code&gt;ls&lt;/code&gt;,&lt;br&gt;
even for this tiny example.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Use &lt;code&gt;which&lt;/code&gt; to locate executables.&lt;/li&gt;
&lt;li&gt;  Explore &lt;code&gt;echo $PATH&lt;/code&gt; to understand command lookup.&lt;/li&gt;
&lt;li&gt;  Learn the difference between the terminal, shell, and kernel.&lt;/li&gt;
&lt;li&gt;  Read command manuals using &lt;code&gt;man ls&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Thinking the terminal executes commands.&lt;/li&gt;
&lt;li&gt;  Confusing Bash with the Linux kernel.&lt;/li&gt;
&lt;li&gt;  Assuming every command is built into the shell.&lt;/li&gt;
&lt;li&gt;  Forgetting that external commands run as separate processes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Interesting Fact
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Did you know?&lt;/strong&gt; A modern Linux system can execute thousands of&lt;br&gt;
short-lived processes every second, making simple commands like &lt;code&gt;ls&lt;/code&gt;&lt;br&gt;
appear almost instantaneous.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Although &lt;code&gt;ls&lt;/code&gt; looks like a tiny command, it triggers an entire chain of&lt;br&gt;
events involving the terminal, shell, process management, memory&lt;br&gt;
allocation, CPU execution, the Linux kernel, and the file system.&lt;br&gt;
Understanding this workflow builds a strong foundation for learning&lt;br&gt;
Linux, system administration, and DevOps.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Question
&lt;/h2&gt;

&lt;p&gt;Which Linux command would you like to explore next---&lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;grep&lt;/code&gt;, or &lt;code&gt;cat&lt;/code&gt;? Let me know in the comments!&lt;/p&gt;




</description>
      <category>linux</category>
      <category>bash</category>
      <category>kernel</category>
      <category>terminal</category>
    </item>
    <item>
      <title>Setting Up Docker for Multiple Applications</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Sat, 25 Jul 2026 13:00:30 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/setting-up-docker-for-multiple-applications-2ajo</link>
      <guid>https://dev.to/asepsayyad007/setting-up-docker-for-multiple-applications-2ajo</guid>
      <description>&lt;p&gt;After getting my free Oracle Cloud server ready, the next challenge was&lt;br&gt;
running more than one application.&lt;/p&gt;

&lt;p&gt;At first, I installed everything directly on the server. It worked, but&lt;br&gt;
as I added more projects, managing everything became difficult.&lt;/p&gt;

&lt;p&gt;That's when I started using Docker.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Docker?
&lt;/h2&gt;

&lt;p&gt;Docker lets you package an application with everything it needs to run.&lt;/p&gt;

&lt;p&gt;Each application runs inside its own container, so one project doesn't&lt;br&gt;
interfere with another.&lt;/p&gt;

&lt;p&gt;Think of it as giving every application its own small workspace.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Chose Docker
&lt;/h2&gt;

&lt;p&gt;Docker made my server easier to manage.&lt;/p&gt;

&lt;p&gt;It helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Run multiple applications&lt;/li&gt;
&lt;li&gt;  Keep projects separated&lt;/li&gt;
&lt;li&gt;  Update applications safely&lt;/li&gt;
&lt;li&gt;  Create backups easily&lt;/li&gt;
&lt;li&gt;  Move applications to another server&lt;/li&gt;
&lt;li&gt;  Keep the server organized&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  My Setup
&lt;/h2&gt;

&lt;p&gt;Today, my server runs different services in separate containers.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Personal portfolio&lt;/li&gt;
&lt;li&gt;  API services&lt;/li&gt;
&lt;li&gt;  Reverse proxy&lt;/li&gt;
&lt;li&gt;  Databases&lt;/li&gt;
&lt;li&gt;  Monitoring tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes troubleshooting much easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges I Faced
&lt;/h2&gt;

&lt;p&gt;Learning Docker wasn't perfect.&lt;/p&gt;

&lt;p&gt;Some common problems I faced were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Port conflicts&lt;/li&gt;
&lt;li&gt;  Wrong volume mappings&lt;/li&gt;
&lt;li&gt;  Restart loops&lt;/li&gt;
&lt;li&gt;  Low memory&lt;/li&gt;
&lt;li&gt;  Network issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every mistake helped me understand Docker better.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tips for Beginners
&lt;/h2&gt;

&lt;p&gt;Start small.&lt;/p&gt;

&lt;p&gt;Learn these concepts first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Images&lt;/li&gt;
&lt;li&gt;  Containers&lt;/li&gt;
&lt;li&gt;  Volumes&lt;/li&gt;
&lt;li&gt;  Networks&lt;/li&gt;
&lt;li&gt;  Docker Compose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you understand these basics, everything becomes much easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Every DevOps Beginner Should Learn Docker
&lt;/h2&gt;

&lt;p&gt;Docker is widely used in modern software development.&lt;/p&gt;

&lt;p&gt;By practicing on a free cloud server, you gain real hands-on experience&lt;br&gt;
instead of only watching tutorials.&lt;/p&gt;

&lt;p&gt;That practical experience is valuable when starting a career in DevOps.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;In the next article, I'll show how I use &lt;strong&gt;Nginx Proxy Manager&lt;/strong&gt; to host&lt;br&gt;
multiple domains on a single server.&lt;/p&gt;




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

&lt;p&gt;Docker completely changed how I manage my server.&lt;/p&gt;

&lt;p&gt;If you're starting your DevOps journey, learning Docker is one of the&lt;br&gt;
best investments you can make.&lt;/p&gt;




&lt;h2&gt;
  
  
  Question for Readers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What was the first application you deployed with Docker? I'd love to&lt;br&gt;
hear your experience in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>containers</category>
      <category>linux</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Why I Chose Oracle Cloud Always Free for My Production Server</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Fri, 24 Jul 2026 14:23:29 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/why-i-chose-oracle-cloud-always-free-for-my-production-server-g4e</link>
      <guid>https://dev.to/asepsayyad007/why-i-chose-oracle-cloud-always-free-for-my-production-server-g4e</guid>
      <description>&lt;p&gt;When I wanted to host my own applications, I had one big problem---I&lt;br&gt;
didn't want to pay every month for a VPS.&lt;/p&gt;

&lt;p&gt;I was still learning Linux, Docker, and DevOps, so I wanted a place&lt;br&gt;
where I could make mistakes, learn, and build real projects without&lt;br&gt;
worrying about monthly costs.&lt;/p&gt;

&lt;p&gt;That's when I found &lt;strong&gt;Oracle Cloud Always Free&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At first, I thought, "There must be a catch." A cloud server that stays&lt;br&gt;
free forever sounded too good to be true.&lt;/p&gt;

&lt;p&gt;After using it for my own projects, I realized it was exactly what I&lt;br&gt;
needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Didn't Choose Other Free Hosting
&lt;/h2&gt;

&lt;p&gt;There are many free hosting services, but most of them have limits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  GitHub Pages is great for static websites.&lt;/li&gt;
&lt;li&gt;  Vercel is excellent for frontend applications.&lt;/li&gt;
&lt;li&gt;  Some free VPS providers only stay free for a limited time.&lt;/li&gt;
&lt;li&gt;  Many platforms don't give full control over the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a real Linux server where I could install anything, run Docker&lt;br&gt;
containers, manage my own networking, and learn how production systems&lt;br&gt;
work.&lt;/p&gt;

&lt;p&gt;Oracle Cloud Always Free gave me that freedom.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Oracle Cloud Always Free Gives You
&lt;/h2&gt;

&lt;p&gt;With the Always Free tier, I could get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A Linux virtual machine&lt;/li&gt;
&lt;li&gt;  SSH access&lt;/li&gt;
&lt;li&gt;  A public IP address&lt;/li&gt;
&lt;li&gt;  Block storage&lt;/li&gt;
&lt;li&gt;  Full root access&lt;/li&gt;
&lt;li&gt;  The freedom to install any software I wanted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It felt like having my own server in the cloud.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why It Was Perfect for Learning DevOps
&lt;/h2&gt;

&lt;p&gt;One of the biggest reasons I chose Oracle Cloud was the experience it&lt;br&gt;
gave me.&lt;/p&gt;

&lt;p&gt;Instead of only reading tutorials, I was able to work with real tools&lt;br&gt;
like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  Docker&lt;/li&gt;
&lt;li&gt;  Reverse proxies&lt;/li&gt;
&lt;li&gt;  DNS&lt;/li&gt;
&lt;li&gt;  SSL certificates&lt;/li&gt;
&lt;li&gt;  Cloudflare&lt;/li&gt;
&lt;li&gt;  GitHub Actions&lt;/li&gt;
&lt;li&gt;  Server monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the same technologies used by many companies.&lt;/p&gt;

&lt;p&gt;If you're new to DevOps, building your own infrastructure is one of the&lt;br&gt;
best ways to gain practical experience and confidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Challenges I Faced
&lt;/h2&gt;

&lt;p&gt;It wasn't always easy.&lt;/p&gt;

&lt;p&gt;I made plenty of mistakes along the way.&lt;/p&gt;

&lt;p&gt;Some of the challenges included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Running everything on just 1 GB RAM&lt;/li&gt;
&lt;li&gt;  Learning Docker networking&lt;/li&gt;
&lt;li&gt;  Fixing DNS problems&lt;/li&gt;
&lt;li&gt;  Setting up SSL certificates&lt;/li&gt;
&lt;li&gt;  Configuring firewalls&lt;/li&gt;
&lt;li&gt;  Recovering from server issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every problem taught me something new.&lt;/p&gt;

&lt;p&gt;Looking back, those challenges helped me learn much faster than simply&lt;br&gt;
following tutorials.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Still Use It
&lt;/h2&gt;

&lt;p&gt;Even today, Oracle Cloud Always Free is still a great platform for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Hosting personal projects&lt;/li&gt;
&lt;li&gt;  Learning Linux&lt;/li&gt;
&lt;li&gt;  Practicing DevOps&lt;/li&gt;
&lt;li&gt;  Building Docker applications&lt;/li&gt;
&lt;li&gt;  Running multiple websites&lt;/li&gt;
&lt;li&gt;  Experimenting without monthly costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It may not replace a large production server, but it is more than enough&lt;br&gt;
for learning and small real-world projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Series Will Cover
&lt;/h2&gt;

&lt;p&gt;In this series, I'll share everything I learned while building my own&lt;br&gt;
production infrastructure.&lt;/p&gt;

&lt;p&gt;Upcoming articles include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Building Production Infrastructure on Just 1 GB RAM&lt;/li&gt;
&lt;li&gt; Setting Up Docker for Multiple Applications&lt;/li&gt;
&lt;li&gt; Managing Multiple Domains with Nginx Proxy Manager&lt;/li&gt;
&lt;li&gt; SSL Certificates with Let's Encrypt&lt;/li&gt;
&lt;li&gt; Cloudflare Setup for Better Security&lt;/li&gt;
&lt;li&gt; Monitoring a Low-Resource Server&lt;/li&gt;
&lt;li&gt; Backups and Disaster Recovery&lt;/li&gt;
&lt;li&gt; Common Problems I Faced and How I Fixed Them&lt;/li&gt;
&lt;li&gt; What I'd Do Differently If I Started Again&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Oracle Cloud Always Free gave me much more than a free server.&lt;/p&gt;

&lt;p&gt;It gave me a place to learn, experiment, break things, fix them, and&lt;br&gt;
gain real DevOps experience.&lt;/p&gt;

&lt;p&gt;If you're just starting your DevOps journey, I highly recommend building&lt;br&gt;
your own projects instead of only watching tutorials.&lt;/p&gt;

&lt;p&gt;You'll learn much more by doing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Next Article:&lt;/strong&gt; Building Production Infrastructure on Just 1 GB RAM&lt;/p&gt;




&lt;h2&gt;
  
  
  Question for You
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you could build one project on a free cloud server today, what&lt;br&gt;
would it be? Let me know in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>beginners</category>
      <category>linux</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Hello DEV! I'm Asep</title>
      <dc:creator>Asep Sayyad</dc:creator>
      <pubDate>Fri, 24 Jul 2026 14:04:21 +0000</pubDate>
      <link>https://dev.to/asepsayyad007/hello-dev-im-asep-1pjn</link>
      <guid>https://dev.to/asepsayyad007/hello-dev-im-asep-1pjn</guid>
      <description>&lt;p&gt;I'm Asep, a Linux and DevOps enthusiast from India.&lt;/p&gt;

&lt;p&gt;I enjoy working with Linux servers, Docker, networking, Cloudflare, Oracle Cloud, and self-hosted applications. I like building projects, solving technical problems, and sharing what I learn along the way.&lt;/p&gt;

&lt;p&gt;This blog is where I'll write about my real experiences, including things that worked, things that failed, and the lessons I learned from both.&lt;/p&gt;

&lt;p&gt;Here are some topics you can expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux administration&lt;/li&gt;
&lt;li&gt;Docker and containers&lt;/li&gt;
&lt;li&gt;Oracle Cloud Always Free&lt;/li&gt;
&lt;li&gt;Self-hosting applications&lt;/li&gt;
&lt;li&gt;Networking, DNS, and reverse proxies&lt;/li&gt;
&lt;li&gt;AI tools and automation&lt;/li&gt;
&lt;li&gt;Open-source projects&lt;/li&gt;
&lt;li&gt;Troubleshooting guides&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I believe the best way to learn is by building real projects and solving real problems. Every challenge teaches something new, and I want to document that journey so others can learn from it too.&lt;/p&gt;

&lt;p&gt;I'll also share updates about my open-source projects, how I build them, the problems I face, and the solutions that work.&lt;/p&gt;

&lt;p&gt;If you're interested in Linux, DevOps, self-hosting, or automation, I hope you'll find these posts useful.&lt;/p&gt;

&lt;p&gt;Thank you for reading, and I look forward to connecting with the DEV Community.&lt;/p&gt;

&lt;p&gt;If you'd like to see what I'm working on, you can find me here:&lt;/p&gt;

&lt;p&gt;Portfolio: &lt;a href="https://asepsayyad007.in" rel="noopener noreferrer"&gt;asepsayyad007.in&lt;/a&gt; &lt;br&gt;
GitHub: &lt;a href="https://github.com/asepsayyad007" rel="noopener noreferrer"&gt;asepsayyad007 on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm always open to feedback, suggestions, and discussions. Feel free to connect!&lt;/p&gt;

&lt;p&gt;What's the best self-hosted tool or service you've discovered recently?&lt;/p&gt;

</description>
      <category>introduction</category>
      <category>devops</category>
      <category>linux</category>
      <category>selfhosted</category>
    </item>
  </channel>
</rss>
