<?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: Fajar Trengginas</title>
    <description>The latest articles on DEV Community by Fajar Trengginas (@devfajar).</description>
    <link>https://dev.to/devfajar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F253554%2F3db823db-677a-4470-ae23-f40aebe254d6.jpeg</url>
      <title>DEV Community: Fajar Trengginas</title>
      <link>https://dev.to/devfajar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devfajar"/>
    <language>en</language>
    <item>
      <title>Infra Learning Journey #3 – Filesystem &amp; Disk Debugging</title>
      <dc:creator>Fajar Trengginas</dc:creator>
      <pubDate>Fri, 27 Feb 2026 16:41:13 +0000</pubDate>
      <link>https://dev.to/devfajar/infra-learning-journey-3-filesystem-disk-debugging-3od1</link>
      <guid>https://dev.to/devfajar/infra-learning-journey-3-filesystem-disk-debugging-3od1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Catatan Belajar Hari Ketiga Memahami Disk Usage, Inode, dan Debugging Error “No Space Left on Device”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Setelah memahami process dan signal di hari sebelumnya, saya masuk ke salah satu penyebab klasik server production down: masalah filesystem dan disk.&lt;/p&gt;

&lt;p&gt;Hari ini saya belajar bahwa error seperti:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;No space left on device
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tidak selalu berarti disk benar-benar penuh.&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣ &lt;code&gt;df&lt;/code&gt; vs &lt;code&gt;du&lt;/code&gt; — Jangan Sampai Salah Paham
&lt;/h2&gt;

&lt;p&gt;Untuk melihat penggunaan disk secara global:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;-h = human readable&lt;/p&gt;

&lt;p&gt;Menampilkan penggunaan disk per filesystem&lt;br&gt;
Contoh output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       50G   45G   3G   94%  /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika Use% mencapai 100%, disk block habis.&lt;/p&gt;




&lt;p&gt;Untuk melihat ukuran folder tertentu:&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;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Atau untuk melihat folder terbesar:&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;du&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; &lt;span class="nt"&gt;--max-depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-hr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perbedaan penting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;df → melihat penggunaan disk dari sisi filesystem&lt;/li&gt;
&lt;li&gt;du → melihat ukuran file/folder dari sisi direktori&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;2️⃣ Inode: Penyebab Tersembunyi “Disk Penuh”&lt;/p&gt;

&lt;p&gt;Saya belajar bahwa setiap file di Linux menggunakan inode.&lt;/p&gt;

&lt;p&gt;Cek inode dengan:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Filesystem     Inodes   IUsed   IFree IUse% Mounted on
/dev/sda2     3276800 3276800      0  100% /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika inode 100%, maka:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tidak bisa membuat file baru&lt;/li&gt;
&lt;li&gt;Akan muncul error:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;No space left on device
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Meskipun df -h masih menunjukkan sisa storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ini sering terjadi jika ada terlalu banyak file kecil seperti:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log file&lt;/li&gt;
&lt;li&gt;Cache&lt;/li&gt;
&lt;li&gt;Temporary file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upload kecil dalam jumlah besar&lt;/p&gt;




&lt;p&gt;3️⃣ Simulasi Inode Penuh&lt;br&gt;
Untuk memahami ini, saya membuat ribuan file kecil:&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;inode-test
&lt;span class="nb"&gt;cd &lt;/span&gt;inode-test

&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;1..50000&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;file_&lt;span class="nv"&gt;$i&lt;/span&gt;.txt&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lalu cek:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Terlihat bahwa inode usage meningkat drastis.&lt;/p&gt;

&lt;p&gt;Ini membuka wawasan bahwa disk penuh bukan hanya soal ukuran file.&lt;/p&gt;




&lt;p&gt;4️⃣ Mount Point Awareness&lt;/p&gt;

&lt;p&gt;Saya juga belajar mengecek mount point:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;atau&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mount | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'^/dev'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mount&lt;/th&gt;
&lt;th&gt;Fungsi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Root filesystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Data user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Log dan data service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/tmp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File sementara&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jika /var penuh, service seperti database atau web server bisa gagal berjalan.&lt;/p&gt;




&lt;p&gt;5️⃣ Kenapa df dan du Bisa Berbeda?&lt;/p&gt;

&lt;p&gt;Kasus nyata di production:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;df -h menunjukkan 100%&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;du tidak menunjukkan file besar&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Kemungkinan penyebabnya:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;File sudah dihapus tetapi masih digunakan oleh process&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Linux tidak benar-benar membebaskan space sampai process yang memegang file descriptor menutup file tersebut&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Untuk mengecek:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ini adalah teknik debugging yang sangat penting di server production.
&lt;/h2&gt;

&lt;p&gt;6️⃣ Mini Simulasi Log Growth&lt;/p&gt;

&lt;p&gt;Saya menjalankan fake service dan mengarahkan output ke file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./fake-service.sh &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; service.log &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian memantau ukuran 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;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; service.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari sini saya memahami bagaimana log bisa tumbuh tanpa disadari dan menyebabkan disk penuh jika tidak ada log rotation.&lt;/p&gt;




&lt;p&gt;💡 Insight Hari Ini&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;No space left on device
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tidak selalu berarti:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RAM habis&lt;/li&gt;
&lt;li&gt;CPU overload&lt;/li&gt;
&lt;li&gt;Database error&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sering kali penyebabnya adalah:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disk block habis&lt;/li&gt;
&lt;li&gt;Inode habis&lt;/li&gt;
&lt;li&gt;File descriptor masih terbuka&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Memahami filesystem membuat saya melihat sistem Linux dengan cara yang jauh lebih dalam lagi.&lt;/p&gt;

&lt;p&gt;Sampai jumpa di Infra Journey hari keempat nanti!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>devops</category>
      <category>learning</category>
      <category>linux</category>
    </item>
    <item>
      <title>Infra Learning Journey #2 – Process dan Signal di Linux</title>
      <dc:creator>Fajar Trengginas</dc:creator>
      <pubDate>Thu, 26 Feb 2026 16:45:28 +0000</pubDate>
      <link>https://dev.to/devfajar/infra-learning-journey-2-process-dan-signal-di-linux-1m7d</link>
      <guid>https://dev.to/devfajar/infra-learning-journey-2-process-dan-signal-di-linux-1m7d</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Catatan Belajar Hari Kedua Memahami Process Linux dan Signal Handling&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Setelah memahami permission dan log processing di hari pertama, saya mulai masuk ke konsep yang jauh lebih penting dalam sistem Linux: &lt;strong&gt;process management&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hari ini saya belajar bagaimana sebuah service berjalan, bagaimana Linux mengelola process, dan bagaimana signal bekerja saat kita menghentikan program.&lt;/p&gt;




&lt;h2&gt;
  
  
  1️⃣ Apa Itu Process?
&lt;/h2&gt;

&lt;p&gt;Setiap command yang dijalankan di Linux adalah sebuah process.&lt;/p&gt;

&lt;p&gt;Contoh sederhana:&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;sleep &lt;/span&gt;300
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saat command ini berjalan, Linux membuat sebuah process dengan PID (Process ID) unik.&lt;/p&gt;

&lt;p&gt;Untuk melihatnya:&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 sleep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari sini saya memahami bahwa:&lt;/p&gt;

&lt;p&gt;Setiap aplikasi adalah process dan Setiap process punya PID&lt;/p&gt;

&lt;p&gt;Linux mengelola semuanya melalui process tree&lt;/p&gt;




&lt;p&gt;2️⃣ Background Process &amp;amp; Job Control&lt;/p&gt;

&lt;p&gt;Menjalankan command di background:&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;sleep &lt;/span&gt;300 &amp;amp;
&lt;span class="nb"&gt;jobs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ternyata jobs hanya menampilkan process yang dijalankan di session shell yang sama.Jika membuka terminal baru, jobs tidak akan menampilkan apa pun.&lt;/p&gt;

&lt;p&gt;Ini membuat saya memahami bahwa job control bersifat lokal terhadap shell session.&lt;/p&gt;




&lt;p&gt;3️⃣ Parent &amp;amp; Child Process&lt;/p&gt;

&lt;p&gt;Saya membuat simulasi service sederhana:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Service running at &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;sleep &lt;/span&gt;2
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ketika dijalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./fake-service.sh &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saya menemukan sesuatu yang menarik:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Script memiliki satu PID&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sleep memiliki PID berbeda&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;PID sleep akan terus berubah&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kenapa?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Karena:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Script adalah parent process&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Setiap sleep adalah child process&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Saat sleep selesai, loop membuat child baru dan penting untuk diketahui jika : &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Killing child process tidak menghentikan service&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Killing parent process menghentikan semuanya&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;4️⃣ Killing Process: kill vs pkill&lt;/p&gt;

&lt;p&gt;Untuk menghentikan process berdasarkan PID:&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; &amp;lt;PID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Untuk menghentikan berdasarkan nama:&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="nb"&gt;sleep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perbedaannya:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kill → target spesifik PID&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pkill → target berdasarkan nama process&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;5️⃣ Signal Handling: SIGTERM vs SIGKILL&lt;/p&gt;

&lt;p&gt;Default:&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;PID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sebenarnya mengirim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SIGTERM (15)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Force kill:&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; PID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mengirim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SIGKILL (9)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Perbedaan penting:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Graceful&lt;/th&gt;
&lt;th&gt;Bisa Ditangkap&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SIGTERM&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIGKILL&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Untuk memahami graceful shutdown, saya menambahkan trap:&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;trap&lt;/span&gt; &lt;span class="s2"&gt;"echo 'Service stopping...'; exit 0"&lt;/span&gt; SIGTERM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saat dikill dengan SIGTERM, service bisa membersihkan dirinya sebelum berhenti.&lt;/p&gt;

&lt;p&gt;Konsep ini sangat penting dalam container dan production system.&lt;/p&gt;




&lt;p&gt;💡 Insight Penting Hari Ini&lt;/p&gt;

&lt;p&gt;Docker container pada dasarnya adalah Linux process yang diisolasi.&lt;/p&gt;

&lt;p&gt;Jika main process mati, container mati.&lt;/p&gt;

&lt;p&gt;Jika signal tidak ditangani dengan benar, shutdown bisa tidak graceful.&lt;/p&gt;

&lt;p&gt;Memahami process dan signal membuat saya melihat Docker bukan sebagai “magic”, tetapi sebagai abstraction di atas Linux process.&lt;/p&gt;

&lt;p&gt;Sampai jumpa di Infra Journey hari ketiga!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>infrastructure</category>
      <category>cli</category>
      <category>learning</category>
    </item>
    <item>
      <title>Infra Learning Journey #1 – Dasar Linux CLI: Permission &amp; Log</title>
      <dc:creator>Fajar Trengginas</dc:creator>
      <pubDate>Thu, 26 Feb 2026 13:16:06 +0000</pubDate>
      <link>https://dev.to/devfajar/perjalanan-mastering-linux-cli-5f4e</link>
      <guid>https://dev.to/devfajar/perjalanan-mastering-linux-cli-5f4e</guid>
      <description>&lt;p&gt;Hari Pertama perjalanan saya belajar infrastruktur akhirnya dimulai. Selama ini, interaksi saya dengan Linux mungkin sama seperti kebanyakan orang: copy-paste command dari StackOverflow dan berharap semuanya berjalan lancar.&lt;/p&gt;

&lt;p&gt;Tapi kali ini target yang saya inginkan berbeda. Saya tidak mau hanya sekadar tahu command; saya ingin benar-benar memahami bagaimana sistem linux ini bekerja. Dan ternyata, hari pertama ini penuh dengan momen "Ohhh, seperti itu!"&lt;/p&gt;

&lt;p&gt;Ini adalah suatu proses yang bakal merubah cara pandang saya terhadap terminal Linux.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Momen "Aha!" Tentang Permission (Bukan Lagi Sebuah Angka Random)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dulu, setiap kali ada error permission denied, jurus andalan saya (dan mungkin kalian juga) adalah mengetik chmod 777. Saya hanya tahu angka 755 atau 644 tanpa mengerti maknanya.&lt;/p&gt;

&lt;p&gt;Ternyata, itu bukan angka random. Permission di Linux menggunakan sistem bitmasking yang sangat logis:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r (read) = 4

w (write) = 2

x (execute) = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Jadi, angka-angka sakti itu hanyalah hasil penjumlahan:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7 = 4 + 2 + 1 (Artinya bisa read, write, execute)

5 = 4 + 1 (Artinya bisa read &amp;amp; execute, tanpa write)

6 = 4 + 2 (Artinya bisa read &amp;amp; write, tanpa execute)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Satu insight penting yang baru saya sadari: Saya baru paham bahwa sebuah Folder mutlak membutuhkan permission x (execute) agar bisa diakses (di-enter menggunakan cd). Tanpa x, walaupun folder tersebut punya permission r (read), kita tetap tidak akan bisa masuk ke dalamnya!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pipe (|) Itu Bukan Sekadar Pemisah, Tapi Jembatan&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Awalnya saya berpikir simbol | (pipe) fungsinya hanya untuk memisahkan dua command agar rapi. Salah besar.&lt;/p&gt;

&lt;p&gt;Ternyata, pipe berfungsi menangkap output dari command pertama, lalu menjadikannya input untuk command berikutnya.&lt;/p&gt;

&lt;p&gt;Contoh sederhananya seperti ini:&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;ERROR logs/app.log | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cara membacanya sangat mengalir: "Cari kata ERROR di file log, lalu lempar hasilnya ke command wc -l untuk dihitung jumlah barisnya."&lt;/p&gt;

&lt;p&gt;Mempelajari CLI Linux itu rasanya seperti bermain Lego. Command-command kecil yang terlihat sederhana bisa digabungkan menjadi alat yang sangat powerful.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Membuat Mini Log Analyzer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Untuk mempraktikkan ilmu "Lego" tadi, saya mencoba menganalisis file log sederhana. Katakanlah kita punya isi log seperti ini:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INFO Server started ERROR Database failed WARNING Disk almost full ERROR Connection timeout INFO User login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Saya ingin tahu: Ada berapa banyak sih pesan INFO, WARNING, dan ERROR di log tersebut?&lt;/p&gt;

&lt;p&gt;Command yang saya pakai adalah:&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;-oE&lt;/span&gt; &lt;span class="s2"&gt;"INFO|WARNING|ERROR"&lt;/span&gt; logs/app.log | &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kenapa harus di-sort dulu? Kenapa tidak langsung ke uniq? Ini insight kecil tapi sangat krusial dalam log processing. Command uniq ternyata hanya bisa mendeteksi duplikat jika barisnya bersebelahan. Jadi, kita harus mengurutkannya (sort) terlebih dahulu agar log yang sama berkumpul, barulah dihitung (uniq -c).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rekap Perjalanan Minggu Pertama&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Jika dirangkum, ini bekal berharga yang saya dapatkan minggu ini:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Permission adalah logika bitmask, bukan hafalan nomor telepon.

Folder butuh akses x (execute) untuk bisa dimasuki.

Log processing adalah skill dasar (dan sangat menyenangkan!) untuk seorang DevOps/SysAdmin.

CLI bisa menjadi senjata yang sangat powerful jika kita paham cara merangkainya.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ini baru hari pertama, tapi saya sudah merasa jauh lebih nyaman menatap layar hitam terminal. Perjalanan menuju Mastering Infrastructure masih sangat panjang, tapi satu hal yang pasti: Pondasi CLI saya mulai terbentuk.&lt;/p&gt;

&lt;p&gt;Sampai jumpa di Infra Journey hari kedua!&lt;/p&gt;

</description>
      <category>learning</category>
      <category>linux</category>
      <category>cli</category>
      <category>infrastructure</category>
    </item>
  </channel>
</rss>
