<?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>Forem: Tyrone  Tabornal</title>
    <description>The latest articles on Forem by Tyrone  Tabornal (@tyrone101).</description>
    <link>https://forem.com/tyrone101</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%2F3501454%2Fb197fd05-b891-4eba-a78a-4556143e8148.png</url>
      <title>Forem: Tyrone  Tabornal</title>
      <link>https://forem.com/tyrone101</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tyrone101"/>
    <language>en</language>
    <item>
      <title>My Linux Devlog: From WSL to the Cloud (Days 1–5)</title>
      <dc:creator>Tyrone  Tabornal</dc:creator>
      <pubDate>Mon, 16 Feb 2026 09:25:43 +0000</pubDate>
      <link>https://forem.com/tyrone101/my-linux-devlog-from-wsl-to-the-cloud-days-1-5-bcl</link>
      <guid>https://forem.com/tyrone101/my-linux-devlog-from-wsl-to-the-cloud-days-1-5-bcl</guid>
      <description>&lt;h2&gt;
  
  
  My Linux Devlog: From WSL to the Cloud (Days 1–5)
&lt;/h2&gt;

&lt;p&gt;Starting a journey into Linux server administration feels like being dropped into a dark room where you only have a flashlight. You know there’s a powerful machine in there, but you’re only seeing one small circle of light at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I’m taking the &lt;a href="https://linuxupskillchallenge.org/" rel="noopener noreferrer"&gt;Linux Upskill Challenge&lt;/a&gt; to move beyond just "using" Linux and start actually &lt;strong&gt;managing&lt;/strong&gt; it. I want to handle my own remote servers for my full-stack and AI projects instead of relying on magic. My setup is WSL locally, connecting to a Google Cloud Platform (GCP) Virtual Machine.&lt;/p&gt;

&lt;p&gt;Here is everything I learned in my first week.&lt;/p&gt;




&lt;h3&gt;
  
  
  Day 01: The Gateway &amp;amp; Why SSH?
&lt;/h3&gt;

&lt;p&gt;The first hurdle is getting through the "Front Door." When managing a server halfway across the world, you’re communicating over the public internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; The internet is fundamentally insecure. Data transmitted around the internet is pure plaintext. If a hacker is on the same network, they can easily intercept it. If you send your password over a standard connection, they can just "read" it as it passes by.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt; &lt;strong&gt;Secure Shell (SSH)&lt;/strong&gt;. It creates an encrypted tunnel between my local machine and the remote server. Even if someone intercepts the data, it looks like gibberish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key-Based Authentication vs. Passwords&lt;/strong&gt;&lt;br&gt;
While you &lt;em&gt;can&lt;/em&gt; use passwords, bots constantly try to brute-force them. Instead, I use &lt;strong&gt;Asymmetric Cryptography (Key Pairs)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public Key:&lt;/strong&gt; Stays on the server (the "lock").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Key:&lt;/strong&gt; Stays on my local machine (the "physical key").&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The server sends a "challenge" that only my private key can solve. No private key, no entry.&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;# Connecting via WSL, using the -i flag to point to my private key&lt;/span&gt;
ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_ed25519 gcp-tyronemt@34.9.x.x

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The "First 5 Minutes" Health Check&lt;/strong&gt;&lt;br&gt;
Once inside, I run these to check the "patient's" vitals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;uptime&lt;/code&gt;: How long it’s been running and the load average.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;free -m&lt;/code&gt;: Available RAM. If this is zero, apps crash.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;df -h&lt;/code&gt;: Disk space. Making sure logs haven't filled up the hard drive.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;htop&lt;/code&gt; (or &lt;code&gt;top&lt;/code&gt;): Real-time view of CPU usage (the Linux Task Manager).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;uname -a&lt;/code&gt;: Displays the kernel version and system architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway (Day 1):&lt;/strong&gt; SSH is non-negotiable for remote connections because the internet defaults to plaintext. Key pairs are infinitely safer than passwords, and you should always check your server's health (&lt;code&gt;free&lt;/code&gt;, &lt;code&gt;df&lt;/code&gt;) the moment you log in.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Day 02: RTFM and Navigation
&lt;/h3&gt;

&lt;p&gt;In ops, everything starts with the manual. But reading it efficiently is a skill.&lt;br&gt;
&lt;strong&gt;How to actually read the manual:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;man [command]&lt;/code&gt;: The standard reference (e.g., &lt;code&gt;man ls&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;help [command]&lt;/code&gt;: Used for built-in shell commands like &lt;code&gt;cd&lt;/code&gt; or &lt;code&gt;export&lt;/code&gt; that lack man pages. &lt;em&gt;(Run &lt;code&gt;type [command]&lt;/code&gt; to see if a command is built-in or external).&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tldr [command]&lt;/code&gt;: The best one. It gives practical, real-world examples instead of a massive wall of text. (&lt;code&gt;sudo apt install tldr&lt;/code&gt; to get it).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;apropos "[keyword]"&lt;/code&gt;: Super useful when you know what you want to do, but forgot the command name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Navigating the Tree&lt;/strong&gt;&lt;br&gt;
The Linux file system is a tree starting at the &lt;strong&gt;root (&lt;code&gt;/&lt;/code&gt;)&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pwd&lt;/code&gt;: Print Working Directory. Tells you exactly where you are.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd /var/log&lt;/code&gt;: Absolute path (starts from root).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd ~&lt;/code&gt; (or just &lt;code&gt;cd&lt;/code&gt;): Return to your Home Directory.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd -&lt;/code&gt;: Jump back to the last directory you were in.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ls -ltra&lt;/code&gt;: The pro way to list files—&lt;strong&gt;l&lt;/strong&gt;ong format, &lt;strong&gt;t&lt;/strong&gt;ime-sorted, &lt;strong&gt;r&lt;/strong&gt;everse, and &lt;strong&gt;a&lt;/strong&gt;ll (including hidden files).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;File Manipulation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mkdir [name]&lt;/code&gt;: Create a folder.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;touch [filename]&lt;/code&gt;: Create an empty file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rm -r [directory]&lt;/code&gt;: Deletes a folder and everything inside it. &lt;em&gt;(Use &lt;code&gt;rm -ri&lt;/code&gt; for interactive mode so it warns you before deleting important data!)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway (Day 2):&lt;/strong&gt; Reading the manual (&lt;code&gt;man&lt;/code&gt;, &lt;code&gt;tldr&lt;/code&gt;) saves you from guessing, and navigating the system gets much easier once you understand that everything branches out from the root &lt;code&gt;/&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Day 03: Administrative Power &amp;amp; User Management
&lt;/h3&gt;

&lt;p&gt;This day focused on how to safely handle the power trip of being a sysadmin.&lt;br&gt;
&lt;strong&gt;Who has the power?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;root&lt;/code&gt;&lt;/strong&gt;: The superuser. Has total power. A single typo here can destroy the server. Best practice: &lt;em&gt;never&lt;/em&gt; log in directly as root.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;sudoers&lt;/code&gt;&lt;/strong&gt;: Regular users granted super privileges via the &lt;code&gt;sudo&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular Users&lt;/strong&gt;: Limited to their own home directory (&lt;code&gt;~&lt;/code&gt;). Cannot make global changes like installing packages.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What is &lt;code&gt;sudo&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
It stands for "SuperUser Do". It's a single command executed with root privileges, but it is &lt;em&gt;not&lt;/em&gt; root itself. It acts as an audit to prevent mistakes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I tried running &lt;code&gt;cat /etc/shadow&lt;/code&gt; (which holds hashed passwords) and was denied. Running &lt;code&gt;sudo cat /etc/shadow&lt;/code&gt; worked.&lt;/li&gt;
&lt;li&gt;To become root temporarily: &lt;code&gt;sudo -i&lt;/code&gt; launches a full root shell.&lt;/li&gt;
&lt;li&gt;To see who logged in: &lt;code&gt;last&lt;/code&gt;. To see failed login attempts (like bots guessing passwords): &lt;code&gt;sudo lastb&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Global Administrative Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check/Change Hostname: &lt;code&gt;hostnamectl&lt;/code&gt; -&amp;gt; &lt;code&gt;sudo hostnamectl set-hostname [name]&lt;/code&gt;. &lt;em&gt;(Note: on cloud providers, you often need to set &lt;code&gt;preserve_hostname: true&lt;/code&gt; in &lt;code&gt;/etc/cloud/cloud.cfg&lt;/code&gt; so it survives a reboot).&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Check/Change Timezone: &lt;code&gt;timedatectl&lt;/code&gt; -&amp;gt; &lt;code&gt;sudo timedatectl set-timezone [Region/City]&lt;/code&gt;. Timezones are crucial because they affect scheduled tasks and log timestamps!&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway (Day 3):&lt;/strong&gt; &lt;code&gt;sudo&lt;/code&gt; is a safety net. Never log in as &lt;code&gt;root&lt;/code&gt; directly. Always make sure your timezone is set correctly so your server logs make sense when you need to debug an issue.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Day 04: Installing Software &amp;amp; The File Structure
&lt;/h3&gt;

&lt;p&gt;This module covers the Advanced Package Tool (APT) and where things actually live in Linux.&lt;br&gt;
&lt;strong&gt;Package Management (APT)&lt;/strong&gt;&lt;br&gt;
We get software from "Repositories" (remote servers). The list of these repos lives in &lt;code&gt;/etc/apt/sources.list.d/ubuntu.sources&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search: &lt;code&gt;apt search "[keyword]"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install: &lt;code&gt;sudo apt install [package_name]&lt;/code&gt; &lt;em&gt;(Requires sudo because installations are global).&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The File System Hierarchy (&lt;code&gt;man hier&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/root&lt;/code&gt;: The root user's home folder.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/home&lt;/code&gt;: Folders for standard users.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/sbin&lt;/code&gt;: System binaries (administrative commands restricted to root).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/etc&lt;/code&gt;: The central hub for all global configuration files.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/var/log&lt;/code&gt;: Where system and security logs live.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Configs and Logs are just Text!&lt;/strong&gt;&lt;br&gt;
In Linux, configurations are just plain text files you can edit right in the terminal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/etc/passwd&lt;/code&gt;: User account info.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;: Controls how SSH behaves.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/var/log/auth.log&lt;/code&gt;: Records all &lt;code&gt;sudo&lt;/code&gt; usage and logins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(I also installed Midnight Commander (&lt;code&gt;sudo apt install mc&lt;/code&gt;), a visual text-based file manager. You just type &lt;code&gt;mc&lt;/code&gt;, use &lt;code&gt;F3&lt;/code&gt; to view files, and &lt;code&gt;F10&lt;/code&gt; to exit.)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway (Day 4):&lt;/strong&gt; Linux is essentially just a bunch of text files. If you want to change settings, look in &lt;code&gt;/etc&lt;/code&gt;. If you want to see what went wrong, look in &lt;code&gt;/var/log&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Day 05: More, Less, and CLI Efficiency
&lt;/h3&gt;

&lt;p&gt;Managing text files directly in the terminal is a mandatory skill.&lt;br&gt;
&lt;strong&gt;Viewing &amp;amp; Editing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;less&lt;/code&gt; vs &lt;code&gt;more&lt;/code&gt;:&lt;/strong&gt; Use &lt;code&gt;less&lt;/code&gt; to read large files. It lets you scroll up and down and search for text, whereas &lt;code&gt;more&lt;/code&gt; is much more limited.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dotfiles:&lt;/strong&gt; Hidden files starting with a dot (like &lt;code&gt;.bashrc&lt;/code&gt;). They hold user configurations. Use &lt;code&gt;ls -a&lt;/code&gt; to see them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;nano&lt;/code&gt;:&lt;/strong&gt; A simple, built-in terminal text editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Working Faster in the CLI&lt;/strong&gt;&lt;br&gt;
Typing out full paths is exhausting. These tools fix that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tab Completion:&lt;/strong&gt; Hit &lt;code&gt;Tab&lt;/code&gt; to auto-complete a file or folder name. Hit it twice if there are multiple matches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Command History (&lt;code&gt;history&lt;/code&gt;):&lt;/strong&gt; Shows everything you've typed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution by Number:&lt;/strong&gt; Type &lt;code&gt;![number]&lt;/code&gt; (like &lt;code&gt;!20&lt;/code&gt;) to instantly rerun that exact command from your history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse Search (&lt;code&gt;Ctrl + R&lt;/code&gt;):&lt;/strong&gt; Start typing a past command, and the shell will auto-suggest the rest. Huge time saver.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advanced Workspaces&lt;/strong&gt;&lt;br&gt;
You don't have to stick with the default &lt;code&gt;bash&lt;/code&gt; shell.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Prompts:&lt;/strong&gt; You can edit your &lt;code&gt;PS1&lt;/code&gt; variable to change how your prompt looks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alternative Shells:&lt;/strong&gt; &lt;code&gt;zsh&lt;/code&gt; or &lt;code&gt;fish&lt;/code&gt; offer better auto-suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplexers (&lt;code&gt;tmux&lt;/code&gt; / &lt;code&gt;screen&lt;/code&gt;):&lt;/strong&gt; Lets you split one terminal window into multiple panes, and keeps scripts running in the background even if your SSH connection drops.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaway (Day 5):&lt;/strong&gt; Stop typing everything out manually. Master &lt;code&gt;Tab&lt;/code&gt; completion, use &lt;code&gt;Ctrl+R&lt;/code&gt; to find old commands, and always use &lt;code&gt;less&lt;/code&gt; to read log files.&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>beginners</category>
      <category>devjournal</category>
      <category>googlecloud</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
