<?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: Meghna Meghwani</title>
    <description>The latest articles on DEV Community by Meghna Meghwani (@meghna_meghwani_).</description>
    <link>https://dev.to/meghna_meghwani_</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%2F3600595%2F69d16c30-22ad-448f-a37b-1e106c145171.jpg</url>
      <title>DEV Community: Meghna Meghwani</title>
      <link>https://dev.to/meghna_meghwani_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/meghna_meghwani_"/>
    <language>en</language>
    <item>
      <title>How to Change or Reset MySQL Root Password on Ubuntu Linux</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Tue, 11 Aug 2026 07:56:41 +0000</pubDate>
      <link>https://dev.to/serveravatar/how-to-change-or-reset-mysql-root-password-on-ubuntu-linux-3m5p</link>
      <guid>https://dev.to/serveravatar/how-to-change-or-reset-mysql-root-password-on-ubuntu-linux-3m5p</guid>
      <description>&lt;p&gt;You’re SSH’d into your Ubuntu server. You run mysql -u root -p, type your password, and hit Enter. The response: &lt;strong&gt;Access denied&lt;/strong&gt;. You try again. Same result. You check your notes, your password manager, that config file you saved somewhere, nothing works. Now you’re locked out of your own database and need to recover your MySQL Root Password.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sound familiar?&lt;/strong&gt; You’re not alone. Forgetting the MySQL root password is one of those things that happens to almost every developer or sysadmin at some point. The database is running, the data is there, but you cannot get in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The good news:&lt;/strong&gt; resetting it is straightforward, even if it feels intimidating the first time. You don’t need to reinstall anything. You don’t need to lose data. What you need is about 10 minutes, a handful of commands, and a clear sequence of steps.&lt;/p&gt;

&lt;p&gt;This guide walks you through every scenario, changing a password you know, resetting one you’ve forgotten, handling the --skip-grant-tables method properly, and updating your applications afterward so nothing breaks. I’ve tested these steps on Ubuntu 22.04 and Ubuntu 24.04, and the process is similar on both versions.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You can reset a forgotten MySQL root password by starting MySQL with --skip-grant-tables, then running SQL password commands&lt;/li&gt;
&lt;li&gt;You can change an existing password with a single ALTER USER statement while normally logged in&lt;/li&gt;
&lt;li&gt;Always stop websites/applications pointing to the database before resetting, they will lose connection during the process&lt;/li&gt;
&lt;li&gt;After resetting, update any application config files that store the old MySQL password&lt;/li&gt;
&lt;li&gt;For a server management experience that takes care of these automatically, explore &lt;a href="https://serveravatar.com/" rel="noopener noreferrer"&gt;ServerAvatar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;If your server is managed through &lt;a href="https://serveravatar.com/" rel="noopener noreferrer"&gt;ServerAvatar&lt;/a&gt;, you can update the database root password directly from the panel.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding MySQL Root Access on Ubuntu
&lt;/h2&gt;

&lt;p&gt;Before changing anything, it’s important to know what the MySQL root account actually is and how it differs from the Linux root user.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Before proceeding, make sure your server is actually running MySQL rather than MariaDB. Although the two database systems are closely related, there are important differences in features, compatibility, and administration. See our &lt;a href="https://serveravatar.com/mariadb-vs-mysql" rel="noopener noreferrer"&gt;MariaDB vs MySQL comparison&lt;/a&gt; for a detailed breakdown.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;MySQL root vs. Linux root:&lt;/strong&gt; The MySQL root account is a database administrator account, separate from the Linux system root user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MySQL&lt;/strong&gt; root is a separate database-level administrator with full control over all databases, users, and permissions on your MySQL instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  MySQL Authentication on Ubuntu
&lt;/h3&gt;

&lt;p&gt;Ubuntu uses a plugin-based authentication system for MySQL. The authentication method configured for the root account determines how you can log in and reset its password. Common authentication methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;auth_socket&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links MySQL authentication to your Linux system user.&lt;/li&gt;
&lt;li&gt;You can log in as MySQL root only when you’re already the Linux root user.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;mysql_native_password&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses a stored password hash for authentication.&lt;/li&gt;
&lt;li&gt;A password is required to access the MySQL root account.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;caching_sha2_password&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Also relies on a stored password hash.&lt;/li&gt;
&lt;li&gt;Authentication requires the MySQL root password.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MySQL supports multiple &lt;a href="https://dev.mysql.com/doc/refman/8.4/en/caching-sha2-pluggable-authentication.html?ref=serveravatar.com" rel="noopener noreferrer"&gt;authentication plugins&lt;/a&gt;, which determine how credentials are verified when a user connects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check the Current Authentication Method
&lt;/h3&gt;

&lt;p&gt;To find out which authentication method your MySQL root account is currently using, run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT user, host, plugin FROM mysql.user WHERE user = 'root';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The result will show the authentication plugin configured for the root user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;auth_socket –&lt;/strong&gt; You need sudo to log in as MySQL root from Linux.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;caching_sha2_password –&lt;/strong&gt; You need the MySQL root password.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mysql_native_password –&lt;/strong&gt; You need the MySQL root password.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing the authentication method is important because it determines how you access MySQL and how you reset the root password.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  MySQL Authentication Methods Compared
&lt;/h3&gt;

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

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/change-reset-mysql-root-password" rel="noopener noreferrer"&gt;https://serveravatar.com/change-reset-mysql-root-password&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>Best Facebook Groups for SysAdmins and Developers</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Sat, 08 Aug 2026 05:20:59 +0000</pubDate>
      <link>https://dev.to/serveravatar/best-facebook-groups-for-sysadmins-and-developers-hlf</link>
      <guid>https://dev.to/serveravatar/best-facebook-groups-for-sysadmins-and-developers-hlf</guid>
      <description>&lt;p&gt;Here’s what no one tells you when you first start running servers or building production software: the toughest problems rarely come with documentation. You run into a networking rule that nobody warns you about, your database starts behaving strangely at 2 AM, or a deployment script that worked perfectly for six months suddenly breaks down, and the official documentation simply… doesn’t have a solution for it. That’s where Facebook Groups for SysAdmins and Developers can help.&lt;/p&gt;

&lt;p&gt;That’s when you need people who have been there. Not a search engine. Not a Stack Overflow thread from 2014. Actual humans who remember the time they made the same mistake you just made, and know exactly how to fix it without making you feel stupid for asking.&lt;/p&gt;

&lt;p&gt;Facebook groups are one of the best places to find those humans. They’re informal, fast, and packed with practitioners, not spectators. The trick is knowing which ones are worth your time, and which ones are just echo chambers full of self-promotion and recycled content.&lt;/p&gt;

&lt;p&gt;This isn’t another generic roundup. I have spent time in these communities. Some I have lurked in for months before posting. Some I have gotten real answers from. A few I have actively avoided. What follows is the breakdown of the groups that actually deliver value if you are a system administrator or developer trying to level up, written from actual experience, not a listicle rewritten from a competitor’s listicle.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Facebook groups can still be useful in 2026 when you find communities with genuine technical discussions.&lt;/li&gt;
&lt;li&gt;The right group depends on your area of interest, from Linux and DevOps to software development and cloud technologies.&lt;/li&gt;
&lt;li&gt;Active moderation and knowledgeable members generally matter more than raw member counts.&lt;/li&gt;
&lt;li&gt;Smaller, specialized communities can sometimes provide more useful conversations than huge general-purpose groups.&lt;/li&gt;
&lt;li&gt;Before posting a question, search the group’s previous discussions. Someone may have already solved the same problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why SysAdmins and Developers Still Need Facebook Groups in 2026
&lt;/h2&gt;

&lt;p&gt;With thriving communities on Reddit, Discord, Slack, GitHub Discussions, and Stack Overflow, it’s easy to assume Facebook Groups have become outdated. However, for system administrators, DevOps engineers, cloud architects, and software developers, many Facebook Groups continue to provide value that other platforms don’t always offer.&lt;/p&gt;

&lt;p&gt;Rather than competing with modern communities, Facebook Groups complement them by bringing together experienced professionals, long-form discussions, and practical advice based on real production environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why They Still Matter
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Experienced Professionals Lead the Conversations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest advantages of established Facebook Groups is the quality of their members. Unlike many public forums that attract a large number of beginners, these communities often consist of professionals responsible for managing production infrastructure and business-critical applications. You’ll regularly find discussions involving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Senior System Administrators&lt;/li&gt;
&lt;li&gt;DevOps Engineers&lt;/li&gt;
&lt;li&gt;Cloud Architects&lt;/li&gt;
&lt;li&gt;Infrastructure Engineers&lt;/li&gt;
&lt;li&gt;IT Consultants&lt;/li&gt;
&lt;li&gt;MSP (Managed Service Provider) owners&lt;/li&gt;
&lt;li&gt;Cybersecurity specialists&lt;/li&gt;
&lt;li&gt;Software developers building production applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates an environment where technical discussions are based on practical experience rather than theory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Higher Quality Answers for Real Production Problems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you’re troubleshooting a server outage or deployment issue, generic documentation isn’t always enough. Active Facebook Groups frequently provide responses from professionals who have already encountered similar challenges in production. Instead of receiving only documentation links, members often share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step-by-step troubleshooting methods&lt;/li&gt;
&lt;li&gt;PowerShell and Bash scripts&lt;/li&gt;
&lt;li&gt;Infrastructure recommendations&lt;/li&gt;
&lt;li&gt;Performance optimization techniques&lt;/li&gt;
&lt;li&gt;Deployment best practices&lt;/li&gt;
&lt;li&gt;Security improvements&lt;/li&gt;
&lt;li&gt;Lessons learned from previous incidents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a much higher signal-to-noise ratio than many open communities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Practical Knowledge Beyond Official Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vendor documentation explains how products are designed to work. Community discussions explain what happens when things don’t go as planned. Members commonly discuss real-world issues involving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows Server administration&lt;/li&gt;
&lt;li&gt;Linux server management&lt;/li&gt;
&lt;li&gt;Active Directory replication&lt;/li&gt;
&lt;li&gt;Microsoft 365 migrations&lt;/li&gt;
&lt;li&gt;VMware and Hyper-V virtualization&lt;/li&gt;
&lt;li&gt;Kubernetes and Docker deployments&lt;/li&gt;
&lt;li&gt;AWS, Azure, and Google Cloud&lt;/li&gt;
&lt;li&gt;Backup and disaster recovery&lt;/li&gt;
&lt;li&gt;Server monitoring and automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These conversations often include practical workarounds, implementation tips, and deployment experiences that official documentation may not cover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Better Visibility in Google Search&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another reason Facebook Groups remain valuable is their strong search presence. Searching Google for a specific error message or configuration problem frequently leads to Facebook discussions where experienced professionals have already documented the issue and shared possible solutions. These discussions often include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete error messages&lt;/li&gt;
&lt;li&gt;Log excerpts&lt;/li&gt;
&lt;li&gt;Configuration examples&lt;/li&gt;
&lt;li&gt;Multiple troubleshooting approaches&lt;/li&gt;
&lt;li&gt;Community feedback on successful fixes&lt;/li&gt;
&lt;li&gt;Updates from the original poster after resolving the issue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes Facebook Groups a useful knowledge base for solving uncommon or difficult technical problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Communities That Have Proven Their Value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not every Facebook Group is worth joining, but the communities that remain active in 2026 have generally earned their reputation over many years. Most low-quality groups filled with spam and inactive members have gradually disappeared, leaving behind communities that continue to deliver meaningful technical discussions. Well-managed groups typically offer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active moderation&lt;/li&gt;
&lt;li&gt;Minimal spam and promotional content&lt;/li&gt;
&lt;li&gt;Helpful and knowledgeable contributors&lt;/li&gt;
&lt;li&gt;Consistent technical discussions&lt;/li&gt;
&lt;li&gt;Strong community engagement&lt;/li&gt;
&lt;li&gt;Experienced IT professionals willing to help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For working system administrators and developers, these communities continue to be reliable places for learning, troubleshooting, networking, and staying current with evolving technologies.&lt;/p&gt;

&lt;p&gt;Facebook Groups may no longer be the newest destination for technical discussions, but they remain one of the few platforms where experienced practitioners openly share production knowledge, review architectural decisions, and help peers solve complex infrastructure challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Evaluated These Groups
&lt;/h2&gt;

&lt;p&gt;Before diving in, here’s the criteria I used, so you know this isn’t just a random list pulled from Google:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Active moderation:&lt;/strong&gt; No spam, no self-promotional spam threads, no low-effort content flooding the feed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real engagement:&lt;/strong&gt; Questions get answers, not just reactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-topic focus:&lt;/strong&gt; Communities that stay relevant to sysadmins and developers, not everything-and-the-kitchen-sink groups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Practitioner presence:&lt;/strong&gt; The membership should skew toward people who actually do the work, not managers, not onlookers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; Groups a working professional can join and get value from without wading through 10 years of off-topic posts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These standards ruled out some popular-sounding groups that are technically “large” but practically dead or unmoderated. Size means nothing if nobody’s actually talking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/facebook-groups-sysadmins-developers" rel="noopener noreferrer"&gt;https://serveravatar.com/facebook-groups-sysadmins-developers&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>developers</category>
      <category>sysadmin</category>
      <category>facebookgroups</category>
    </item>
    <item>
      <title>Pipes vs xargs in Linux: Which Should You Use in Bash Scripts?</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Fri, 07 Aug 2026 06:33:24 +0000</pubDate>
      <link>https://dev.to/serveravatar/pipes-vs-xargs-in-linux-which-should-you-use-in-bash-scripts-475g</link>
      <guid>https://dev.to/serveravatar/pipes-vs-xargs-in-linux-which-should-you-use-in-bash-scripts-475g</guid>
      <description>&lt;p&gt;Picture this: you’re looking at a directory with 40 log files, and you need to delete every one that contains the word “backup.” What do you do, type each filename by hand? Copy and paste 40 times? That’s where Pipes vs xargs comes in.&lt;/p&gt;

&lt;p&gt;That was me in my first year managing servers. I’d sit there manually typing out filenames, making typos, second-guessing myself. It was inefficient and, frankly, embarrassing. A senior admin walked past my desk one day, watched me do this for about 30 seconds, and said: “Just use xargs.” That was it. No elaboration. And honestly? That one line changed how I work with the terminal forever.&lt;/p&gt;

&lt;p&gt;The Linux terminal is built around connecting commands, where the output of one command becomes the input for the next. However, there’s one important detail: not every command accepts data in the same way. Understanding this difference is what separates clumsy workarounds from clean, efficient one-liners.&lt;/p&gt;

&lt;p&gt;In this guide, I’m going to break down pipes and xargs from the ground up. We’ll look at what makes them different, when each one shines, and a few xargs tricks that have saved me more times than I can count.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pipes stream data as stdin between commands; xargs converts data into command-line arguments&lt;/li&gt;
&lt;li&gt;Use pipes when chaining filters, text processors, or any command that reads stdin&lt;/li&gt;
&lt;li&gt;Use xargs when the target command only accepts arguments (not stdin), or when you need batching, placeholders, or confirmation prompts&lt;/li&gt;
&lt;li&gt;Filenames with spaces or special characters? Use find -print0 + xargs -0&lt;/li&gt;
&lt;li&gt;Start with a pipe; upgrade to xargs when the pipe doesn’t work or you need more control&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Pipes (|) Actually Do
&lt;/h2&gt;

&lt;p&gt;Pipes are one of the core features of Unix and Linux that make command-line workflows powerful and efficient. The &lt;strong&gt;pipe operator (|)&lt;/strong&gt; connects the &lt;strong&gt;standard output (stdout)&lt;/strong&gt; of one command directly to the &lt;strong&gt;standard input (stdin)&lt;/strong&gt; of another command. Instead of saving output to a file first, data flows instantly from one command to the next.&lt;/p&gt;

&lt;p&gt;You can think of a pipe as a conveyor belt in a factory. Each command performs a specific task and then passes the result to the next command in the chain. This modular approach follows the &lt;a href="https://en.wikipedia.org/wiki/Unix_philosophy?ref=serveravatar.com" rel="noopener noreferrer"&gt;Unix philosophy&lt;/a&gt; of “&lt;strong&gt;do one thing, and do it well&lt;/strong&gt;.”&lt;/p&gt;

&lt;h3&gt;
  
  
  How Pipes Work
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The first command generates output.&lt;/li&gt;
&lt;li&gt;The pipe transfers that output directly to the next command.&lt;/li&gt;
&lt;li&gt;The receiving command processes the incoming data immediately.&lt;/li&gt;
&lt;li&gt;No temporary files are created unless you explicitly save the output.&lt;/li&gt;
&lt;li&gt;Data is streamed continuously, making pipelines both fast and memory-efficient.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Basic Syntax&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;command1 | command2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Here:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;command1&lt;/strong&gt; produces the output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;|&lt;/strong&gt; transfers the output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;command2&lt;/strong&gt; reads that output as its input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simple Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ls&lt;/strong&gt; lists all files and directories in the current location.&lt;/li&gt;
&lt;li&gt;The output is sent through the pipe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;wc -l&lt;/strong&gt; counts the number of lines it receives.&lt;/li&gt;
&lt;li&gt;The final output is the total number of files and directories listed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fni16mkpcvtsssj5wv516.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fni16mkpcvtsssj5wv516.jpg" alt="pipes - Pipes vs xargs" width="786" height="22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of manually counting files, the pipe automates the entire process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chaining Multiple Commands
&lt;/h3&gt;

&lt;p&gt;One of the biggest strengths of pipes is that you can connect multiple commands together.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;find . -name "*.log" | grep -v "access" | sort | uniq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pipeline performs several operations in sequence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;find searches for all .log files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;grep -v "access"&lt;/strong&gt; excludes filenames containing the word access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sort&lt;/strong&gt; arranges the remaining filenames alphabetically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;uniq&lt;/strong&gt; removes duplicate entries from the sorted list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each command focuses on a single task, making the pipeline easier to understand, maintain, and modify.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Pipes Are So Powerful
&lt;/h3&gt;

&lt;p&gt;Pipes are widely used because they allow you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Combine simple commands into powerful workflows.&lt;/li&gt;
&lt;li&gt;Process large amounts of data without creating temporary files.&lt;/li&gt;
&lt;li&gt;Reduce disk I/O by streaming data directly between commands.&lt;/li&gt;
&lt;li&gt;Build readable command sequences where each command has a clear purpose.&lt;/li&gt;
&lt;li&gt;Reuse standard Linux utilities instead of writing custom scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Understanding Streaming Data
&lt;/h3&gt;

&lt;p&gt;The most important concept behind pipes is streaming. Rather than waiting for the first command to finish completely, many commands begin processing data as soon as it starts arriving.&lt;/p&gt;

&lt;p&gt;This streaming behaviour offers several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster execution for large datasets.&lt;/li&gt;
&lt;li&gt;Lower memory usage.&lt;/li&gt;
&lt;li&gt;Real-time processing of command output.&lt;/li&gt;
&lt;li&gt;Efficient handling of logs and continuously generated data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Common Limitation
&lt;/h3&gt;

&lt;p&gt;Although pipes are incredibly versatile, not every Linux command is designed to read data from standard input (stdin).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some commands expect:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A filename as an argument.&lt;/li&gt;
&lt;li&gt;Direct interaction with the terminal.&lt;/li&gt;
&lt;li&gt;Input from specific sources instead of a data stream.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When such commands are placed in a pipeline, they may ignore the incoming data or produce unexpected results. This is why a pipeline that appears perfectly valid can sometimes return no output at all.&lt;/p&gt;

&lt;p&gt;Understanding which commands support &lt;strong&gt;streaming input&lt;/strong&gt; and which require &lt;strong&gt;explicit file arguments&lt;/strong&gt; is essential for building reliable Linux command pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/pipes-vs-xargs" rel="noopener noreferrer"&gt;https://serveravatar.com/pipes-vs-xargs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>shell</category>
      <category>devops</category>
    </item>
    <item>
      <title>Best Chrome Privacy Extensions to Protect Your Data in 2026</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Thu, 06 Aug 2026 06:24:51 +0000</pubDate>
      <link>https://dev.to/serveravatar/best-chrome-privacy-extensions-to-protect-your-data-in-2026-13nl</link>
      <guid>https://dev.to/serveravatar/best-chrome-privacy-extensions-to-protect-your-data-in-2026-13nl</guid>
      <description>&lt;p&gt;Open Chrome. Now, open a new Incognito window. Feel private? You’re not. Chrome Privacy Extensions can help protect your browsing activity, but Google may still see your IP address, device fingerprint, and everything synced to your account. Incognito mode only prevents local cookies from being saved; it doesn’t make you invisible.&lt;/p&gt;

&lt;p&gt;That’s the misconception a lot of people are still running on in 2026. They have been told Incognito is “private browsing”, and they believe it. Meanwhile, advertisers, data brokers, and whoever else is paying attention have a surprisingly detailed picture of their browsing habits.beh&lt;/p&gt;

&lt;p&gt;The best solution is not to switch browser modes but to use trusted extensions that address Chrome’s privacy gaps. Since the &lt;a href="https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3?ref=serveravatar.com" rel="noopener noreferrer"&gt;Manifest V3 transition&lt;/a&gt; changed how many extensions work, some older privacy tools may now offer limited protection. If you installed an extension a few years ago, review its current features and update status.&lt;/p&gt;

&lt;p&gt;This guide cuts through the noise. I have tested the extensions that actually hold up in 2026’s browser environment, understand which categories matter most for different threat models, and can tell you exactly what to install and why.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Incognito mode helps prevent browsing activity from being saved locally after the session ends, but it does not hide your IP address or make you anonymous online.&lt;/li&gt;
&lt;li&gt;The Chrome MV3 migration killed many old extensions; several popular picks from 2022-2024 are now dead or broken&lt;/li&gt;
&lt;li&gt;Five tool categories matter most in 2026: content blocking, tracker learning, VPN, password management, and email privacy&lt;/li&gt;
&lt;li&gt;You don’t need ten extensions. Most people need five carefully chosen ones&lt;/li&gt;
&lt;li&gt;uBlock Origin, Privacy Badger, NordVPN, Bitwarden, and PixelShield make a tight, effective stack&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Chrome Privacy in 2026 Is a Different Problem
&lt;/h2&gt;

&lt;p&gt;Chrome has improved its built-in privacy tools with features like Tracking Protection, HTTPS-only mode, and Privacy Sandbox. However, these controls may not provide complete protection, especially as Google’s advertising ecosystem relies heavily on user data.&lt;/p&gt;

&lt;p&gt;Modern tracking has also become more advanced. Techniques such as browser fingerprinting, email pixels, and cross-site identity tracking may continue monitoring users even when third-party cookies are disabled.&lt;/p&gt;

&lt;p&gt;For stronger privacy, Chrome users should consider reliable extensions that address these gaps and remain compatible with the Manifest V3 extension model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means practically:&lt;/strong&gt; you need extensions that cover the gaps Chrome leaves, and you need to know which extensions are actually still alive and working in 2026’s MV3 extension model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding What Privacy Extensions Actually Do
&lt;/h2&gt;

&lt;p&gt;Before picking tools, it helps to understand the actual threat categories. Privacy is not one problem, it’s several distinct ones that need different solutions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8kcakzdpy655jojlzubg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8kcakzdpy655jojlzubg.jpg" alt="Five categories of browser privacy threats" width="742" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-site tracking&lt;/strong&gt; is the most familiar. Third-party scripts on sites you visit collect data about your behaviour, build profiles, and sell or share those profiles with other parties. This is what ad blockers target, and what tracking protection in browsers partially addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IP and traffic exposure&lt;/strong&gt; is what your ISP, public Wi-Fi operators, and network-level observers can see when you’re not using encryption. This is what VPNs solve. Incognito doesn’t touch this at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email surveillance&lt;/strong&gt; is the one most people forget. Marketing emails, newsletters, and even internal corporate emails routinely embed invisible tracking pixels that report back when you opened the message, how long you spent on it, and often your approximate location. This requires a dedicated email tracker blocker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential compromise&lt;/strong&gt; from password reuse remains one of the most common attack vectors. If you use the same password across five sites and one of them gets breached, all five accounts are exposed. Chrome’s built-in autofill doesn’t help here, it just saves your passwords in Google’s ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL tracking parameters&lt;/strong&gt;, the utm_source, fbclid, gclid strings appended to links, follow you around the web and let trackers link your sessions across sites. These can be stripped without breaking page functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/chrome-privacy-extensions" rel="noopener noreferrer"&gt;https://serveravatar.com/chrome-privacy-extensions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>browser</category>
    </item>
    <item>
      <title>CI vs CD: Understanding Continuous Integration and Continuous Deployment</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Tue, 04 Aug 2026 09:41:20 +0000</pubDate>
      <link>https://dev.to/serveravatar/ci-vs-cd-understanding-continuous-integration-and-continuous-deployment-3nj1</link>
      <guid>https://dev.to/serveravatar/ci-vs-cd-understanding-continuous-integration-and-continuous-deployment-3nj1</guid>
      <description>&lt;p&gt;There’s a moment every developer eventually runs into: you’ve been working on a feature for a few days, the code makes sense on your machine, you push it to production, and something breaks. CI vs CD becomes especially important when changes from other team members create conflicts that remain unnoticed until deployment, even when your code works locally.&lt;/p&gt;

&lt;p&gt;Continuous Integration helps teams integrate changes frequently, run automated checks, and detect issues before they reach production. The terms get conflated constantly. People say “CI/CD” like it’s a single thing, but CI and CD are two distinct practices solving two distinct problems. Let’s break it all down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In simple terms:&lt;/strong&gt; Continuous Integration (CI) automatically builds and tests code changes. Continuous delivery keeps validated code ready for release but requires approval before production. Continuous deployment automatically releases eligible changes to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Integration (CI)&lt;/strong&gt; helps developers frequently integrate code changes into a shared repository while automatically building, testing, and validating those changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Deployment&lt;/strong&gt; automatically releases validated code to production once it meets the required deployment conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Delivery&lt;/strong&gt; sits between CI and continuous deployment. Code is automatically built, tested, and kept ready for release, but a person approves or triggers the production deployment.&lt;/li&gt;
&lt;li&gt;CI improves code quality and developer collaboration, while continuous delivery and continuous deployment make software releases faster and more consistent.&lt;/li&gt;
&lt;li&gt;Start with CI. Add continuous delivery or continuous deployment when your testing, monitoring, and rollback processes are reliable.&lt;/li&gt;
&lt;li&gt;Tools such as GitHub Actions, GitLab CI/CD, Jenkins, and CircleCI can help automate these workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Actually Happens When You Don’t Use CI or CD
&lt;/h2&gt;

&lt;p&gt;Before we talk about what these practices are, it helps to understand what life looks like without them, because most small teams and solo developers are living it right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s the typical scenario:&lt;/strong&gt; Without CI/CD, developers often test code locally and manually transfer it to the server using FTP, SFTP, or shared repositories. These manual workflows can be slow, inconsistent, and more prone to errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problems stack up fast:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bugs slip through because there’s no automated check between “I wrote this” and “it runs in production”&lt;/li&gt;
&lt;li&gt;Deployments may be slower or more error-prone because the release process depends on manual steps and can vary between team members.&lt;/li&gt;
&lt;li&gt;Rollbacks can be slower or more difficult when there is no documented and automated recovery process.&lt;/li&gt;
&lt;li&gt;Bottlenecks form around whoever “owns” the deployment process.&lt;/li&gt;
&lt;li&gt;Fear builds up around releases. The longer you go between deployments, the more changes pile up, and the bigger the risk surface when you finally push.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sound familiar?&lt;/strong&gt; Most teams operate in this mode for way too long because it “works fine” until it doesn’t. The real cost isn’t the occasional outage, it’s the slow drip of developer energy spent on anxiety and manual busywork instead of building.&lt;/p&gt;

&lt;p&gt;That’s where CI and CD come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Integration
&lt;/h2&gt;

&lt;p&gt;Continuous Integration (CI) is the practice of frequently integrating code changes into a shared repository and automatically building, testing, and validating those changes. Its goal is to identify integration issues early and keep the shared codebase stable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frdxenurm47z2xedijtqz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frdxenurm47z2xedijtqz.jpg" alt="Continuous Integration - CI vs CD" width="748" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When a developer pushes a commit, a CI pipeline kicks in. The code gets pulled, built, and run through a suite of tests, everything from unit tests to integration tests to linting. If something fails, the team gets an immediate alert. If it passes, the code is cleared to move forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Frequent Merges Matter
&lt;/h3&gt;

&lt;p&gt;Keeping code in a branch for too long can make integration more difficult as the main codebase continues to change. Frequent merges help teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce the risk of large and complex merge conflicts&lt;/li&gt;
&lt;li&gt;Identify integration issues earlier&lt;/li&gt;
&lt;li&gt;Keep code changes smaller and easier to review&lt;/li&gt;
&lt;li&gt;Resolve problems before they become harder to fix&lt;/li&gt;
&lt;li&gt;Maintain better alignment with the main codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CI supports frequent integration by automatically running checks when configured events, such as pushes, pull requests, or merges occur. This gives developers faster feedback and helps catch issues early.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/ci-vs-cd" rel="noopener noreferrer"&gt;https://serveravatar.com/ci-vs-cd&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cicd</category>
      <category>ci</category>
      <category>automation</category>
    </item>
    <item>
      <title>What Are Linux Logs? Understanding Log Files and Their Uses</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Mon, 03 Aug 2026 06:19:52 +0000</pubDate>
      <link>https://dev.to/serveravatar/what-are-linux-logs-understanding-log-files-and-their-uses-2461</link>
      <guid>https://dev.to/serveravatar/what-are-linux-logs-understanding-log-files-and-their-uses-2461</guid>
      <description>&lt;p&gt;Your server is busy. Every second, processes are starting and stopping, users are logging in, databases are fielding queries, and HTTP requests are hitting your web server. Most of this happens without you noticing, until something goes wrong.&lt;/p&gt;

&lt;p&gt;And something always goes wrong eventually. Maybe your site returns a blank white screen. Maybe SSH refuses your password even though you’re sure it’s correct. Maybe your database connection keeps timing out. When that moment hits, the first question any experienced admin asks is: &lt;strong&gt;what do the logs say?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s what this post is about. Not just what Linux logs are, but how to read them and use them. We will cover the types of logs captured, how to read log entries, and how ServerAvatar makes the whole process much easier because most of us don’t want to live inside a terminal.&lt;/p&gt;

&lt;p&gt;If you are just getting started with server management, this is one of those skills that separates people who spend hours Googling error messages from people who open a log file and know exactly where to look.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Linux logs are plain-text files that record everything happening on your server, from a user logging in to a package update failing&lt;/li&gt;
&lt;li&gt;They are your primary source of truth when something breaks, and the fastest path to figuring out what went wrong&lt;/li&gt;
&lt;li&gt;Logs live mostly in /var/log/, but you don’t have to dig through the terminal every time, ServerAvatar lets you fetch, filter, and read them from a dashboard&lt;/li&gt;
&lt;li&gt;This guide covers what logs actually are, why they matter more than most beginners realize, the different types you’ll encounter, and how to read them efficiently&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Exactly Is a Linux Log?
&lt;/h2&gt;

&lt;p&gt;A Linux log is a record of events and activities that occur within a Linux system. These logs are created by the Linux kernel, system services, applications, and other processes running on the server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fen5k9de1hyc6eeag2sog.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fen5k9de1hyc6eeag2sog.jpg" alt="linux log" width="598" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logs help you understand what happened on your system instead of relying on guesswork. They can provide details about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User login and logout activity&lt;/li&gt;
&lt;li&gt;Successful and failed connection attempts&lt;/li&gt;
&lt;li&gt;Application errors and warnings&lt;/li&gt;
&lt;li&gt;Service startup, shutdown, and failure events&lt;/li&gt;
&lt;li&gt;System and kernel messages&lt;/li&gt;
&lt;li&gt;Unexpected shutdowns or system issues&lt;/li&gt;
&lt;li&gt;Security-related activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most Linux log files are stored in the following directory:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Many logs are plain-text files that you can view using commands such as cat, less, or tail. Some logs use a binary format and require specific tools to read.&lt;/p&gt;

&lt;p&gt;Linux logs are essential for troubleshooting issues, monitoring system activity, and identifying potential security problems.&lt;/p&gt;

&lt;p&gt;For a detailed guide to server management, you may also find our guide on &lt;a href="https://serveravatar.com/what-is-server-management" rel="noopener noreferrer"&gt;What Is Server Management? Key Practices and Benefits&lt;/a&gt; helpful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Logs Matter More Than Most People Think
&lt;/h2&gt;

&lt;p&gt;Linux logs are useful for more than major system failures. They can help you understand everyday server activity and identify issues before they become more serious.&lt;/p&gt;

&lt;p&gt;For example, logs can help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check whether a cron job ran successfully&lt;/li&gt;
&lt;li&gt;Verify if a user attempted to access a service&lt;/li&gt;
&lt;li&gt;Investigate slow server performance&lt;/li&gt;
&lt;li&gt;Identify processes that may be using excessive resources&lt;/li&gt;
&lt;li&gt;Find errors related to applications or system services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of guessing what caused an issue, logs provide records that help you understand what happened on your server. Although log files may initially look confusing, learning how to read and filter them makes troubleshooting much easier.&lt;/p&gt;

&lt;p&gt;It is also important to ensure that the services you rely on are generating logs. Most Linux services enable logging by default, but some may limit or disable logging to reduce disk usage or improve performance. For production servers, verify that important services are recording the information you may need for monitoring and troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/linux-logs" rel="noopener noreferrer"&gt;https://serveravatar.com/linux-logs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>ubuntu</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to List Users and Groups in Ubuntu Using Command Line</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Fri, 31 Jul 2026 08:24:21 +0000</pubDate>
      <link>https://dev.to/serveravatar/how-to-list-users-and-groups-in-ubuntu-using-command-line-3760</link>
      <guid>https://dev.to/serveravatar/how-to-list-users-and-groups-in-ubuntu-using-command-line-3760</guid>
      <description>&lt;p&gt;If you’ve been working with Ubuntu for any length of time, you’ve likely encountered situations where you need to list users and groups in Ubuntu, check which user accounts exist on the system, or find out which groups a specific user belongs to.&lt;/p&gt;

&lt;p&gt;Maybe you’re onboarding a new team member and need to grant them access to a specific directory. Maybe you’re debugging a permission error and can’t understand why a user can’t reach a file they should have access to. Or maybe you’re inheriting a server from someone else and need to audit who’s on it.&lt;/p&gt;

&lt;p&gt;That’s exactly what we’re covering today. This guide walks you through everything you need to know about listing users and groups in Ubuntu using the command line. We’ll look at the files that store this information, the commands that query them, and some practical scenarios where this knowledge actually matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu stores user data in /etc/passwd and group data in /etc/group&lt;/li&gt;
&lt;li&gt;Use getent passwd or cat /etc/passwd to list all users&lt;/li&gt;
&lt;li&gt;Use getent group or cat /etc/group to list all groups&lt;/li&gt;
&lt;li&gt;The id command shows a user’s UID, GID, and group memberships in one shot&lt;/li&gt;
&lt;li&gt;The who and w commands reveal who’s currently logged into your system&lt;/li&gt;
&lt;li&gt;Group membership determines what files and resources a user can access&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding How Ubuntu Tracks Users and Groups
&lt;/h2&gt;

&lt;p&gt;Before we dive into commands, it helps to understand the underlying system. Ubuntu, like most Linux distributions, stores account information in plain-text files that live in the /etc directory.&lt;/p&gt;

&lt;p&gt;For additional guidance on managing Ubuntu accounts and permissions, refer to the &lt;a href="https://ubuntu.com/server/docs/how-to/security/user-management?ref=serveravatar.com" rel="noopener noreferrer"&gt;official Ubuntu user-management documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The three key files are:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/etc/passwd : holds user account information&lt;/li&gt;
&lt;li&gt;/etc/shadow : stores password hashes and password-aging information. It is normally accessible only to the root user or privileged system processes.&lt;/li&gt;
&lt;li&gt;/etc/group : stores group definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can open and read all three of these files right now. They follow a predictable format, and once you understand that format, you’ll have much more control over how Ubuntu manages access to your system.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Ubuntu Defines a User Account
&lt;/h2&gt;

&lt;p&gt;Every user on an Ubuntu system has a corresponding line in /etc/passwd.&lt;/p&gt;

&lt;p&gt;Here’s an example of a typical entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;LOGINNAME&lt;/span&gt;:&lt;span class="n"&gt;x&lt;/span&gt;:&lt;span class="m"&gt;1001&lt;/span&gt;:&lt;span class="m"&gt;1001&lt;/span&gt;:&lt;span class="n"&gt;FULLNAME&lt;/span&gt;,,,:/&lt;span class="n"&gt;home&lt;/span&gt;/&lt;span class="n"&gt;DIRECTORY&lt;/span&gt;:/&lt;span class="n"&gt;bin&lt;/span&gt;/&lt;span class="n"&gt;bash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s one line. Let me break it down field by field:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The UID (User ID)&lt;/strong&gt; is what Ubuntu actually uses internally to track users, not the username.&lt;/p&gt;

&lt;p&gt;Root always has UID 0. System services get UIDs in the 1–999 range typically, while regular users start from 1000 onwards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The GID (Group ID)&lt;/strong&gt; tells you which primary group the user belongs to. But here’s something that trips up many beginners: a user can belong to multiple groups. The primary group is just the one that’s assigned by default when creating files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/list-users-and-groups-in-ubuntu" rel="noopener noreferrer"&gt;https://serveravatar.com/list-users-and-groups-in-ubuntu&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>cli</category>
      <category>devops</category>
    </item>
    <item>
      <title>GitHub vs Bitbucket vs GitLab: Complete Comparison Guide</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Thu, 30 Jul 2026 06:08:25 +0000</pubDate>
      <link>https://dev.to/serveravatar/github-vs-bitbucket-vs-gitlab-complete-comparison-guide-4n6b</link>
      <guid>https://dev.to/serveravatar/github-vs-bitbucket-vs-gitlab-complete-comparison-guide-4n6b</guid>
      <description>&lt;p&gt;GitHub vs Bitbucket vs GitLab is one of the most common comparisons developers make when choosing a Git hosting platform. If you’ve spent time developing software, you’ve heard all three names thrown around. GitHub, Bitbucket, and GitLab all store code, support version control, and play a key role in nearly every developer’s workflow.&lt;/p&gt;

&lt;p&gt;But picking the wrong one for your team can create real friction. Maybe your CI/CD pipeline ends up overcomplicated because your platform’s built-in tools aren’t great. Maybe your security team is drowning in compliance reports because the platform doesn’t have the controls you need. Or maybe you’re just leaving money on the table by paying for features you never use.&lt;/p&gt;

&lt;p&gt;This guide cuts through the noise. We’re going to compare these three platforms honestly, what’s genuinely good about each, where each one falls short, and which situations suit each one best. By the end, you’ll know exactly which platform fits your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; remains the largest developer community with unmatched integrations, GitHub Copilot AI features, and a massive marketplace. Best for open-source projects, developer portfolios, and teams that prioritize community and ecosystem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitbucket&lt;/strong&gt; works best for teams already deep in the Atlassian ecosystem, Jira, Confluence, and the rest. Less compelling if you’re not already using Atlassian tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLab&lt;/strong&gt; is an all-in-one DevOps platform with built-in CI/CD, security scanning, and compliance tools. Best for teams that want everything under one roof and don’t want to stitch together separate tools.&lt;/li&gt;
&lt;li&gt;The right choice depends on your team size, workflow, budget, and whether you need built-in CI/CD or prefer to bring your own.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What These Platforms Actually Are and Why the Distinction Matters
&lt;/h2&gt;

&lt;p&gt;Let’s level-set quickly. All three platforms are built on Git, the distributed version control system that tracks changes to your code over time. Without getting into the Git internals, what you need to know is that these platforms take Git and wrap it with features that make collaboration, code review, automation, and security easier at scale.&lt;/p&gt;

&lt;p&gt;Nowadays, they’ve all evolved well beyond just being “places to store code”.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub has GitHub Copilot and a massive Actions marketplace.&lt;/li&gt;
&lt;li&gt;Bitbucket is the glue that holds Atlassian’s ecosystem together.&lt;/li&gt;
&lt;li&gt;GitLab positions itself as a complete DevOps platform with security and compliance baked in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Platform Overview: Where Each One Stands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/?ref=serveravatar.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; remains one of the most widely used platforms for version control and collaborative software development. Its massive developer community, extensive integrations, and AI-powered tools make it a preferred choice for both individual developers and large enterprises.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkxsrxjy1h460owd8zms6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkxsrxjy1h460owd8zms6.jpg" alt="github - GitHub vs Bitbucket vs GitLab" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During my evaluation, GitHub was the quickest platform to get started with. Creating repositories, configuring branch protection, and enabling GitHub Actions required minimal setup, making it especially approachable for developers who want to move from code to deployment quickly.&lt;/p&gt;

&lt;p&gt;Its polished interface and extensive documentation also reduced the learning curve compared to the other platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/github-vs-bitbucket-vs-gitlab" rel="noopener noreferrer"&gt;https://serveravatar.com/github-vs-bitbucket-vs-gitlab&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>gitlab</category>
      <category>bitbucket</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Check and Upgrade WordPress Version Safely</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Wed, 29 Jul 2026 07:27:39 +0000</pubDate>
      <link>https://dev.to/serveravatar/how-to-check-and-upgrade-wordpress-version-safely-1dim</link>
      <guid>https://dev.to/serveravatar/how-to-check-and-upgrade-wordpress-version-safely-1dim</guid>
      <description>&lt;p&gt;Let me be direct: if you’re running an outdated version of WordPress right now, your site is a liability. I’m not trying to sound dramatic, but I’ve seen what happens when a critical vulnerability is discovered while someone is still using an older WordPress release. It isn’t pretty, hacked redirects, injected malware, and SEO rankings disappearing overnight. That’s why it’s essential to upgrade WordPress version regularly. Keeping your site up to date is one of the simplest and most effective ways to protect its security, performance, and stability.&lt;/p&gt;

&lt;p&gt;The good news is that checking and upgrading your WordPress version is not complicated. There are multiple ways to do it, from a point-and-click dashboard to command-line tools for the automation-inclined. The method you choose doesn’t matter as much as the habit itself. What matters is that you actually do it.&lt;/p&gt;

&lt;p&gt;This guide walks you through every way to check your current WordPress version and every way to upgrade it, including the ServerAvatar WordPress Toolkit for those who prefer not to touch code at all. I will also walk you through what to do before you upgrade, because skipping that step is the mistake most people make.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why it matters: Outdated WordPress is the #1 entry point for site hacks&lt;/li&gt;
&lt;li&gt;Check your version: Dashboard footer, source code, version.php file, WP-CLI, or ServerAvatar WordPress Toolkit&lt;/li&gt;
&lt;li&gt;Upgrade options: One-click WordPress admin dashboard, WP-CLI, or ServerAvatar WordPress Toolkit&lt;/li&gt;
&lt;li&gt;Never upgrade without a backup first&lt;/li&gt;
&lt;li&gt;Test on staging before touching production&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why WordPress Version Updates Matter
&lt;/h2&gt;

&lt;p&gt;WordPress ships major releases roughly three to four times a year, with security patches dropping even more frequently. Nowadays, the threat landscape has only intensified; automated exploit kits now actively scan for known vulnerabilities in outdated WordPress installations within hours of a patch being released. If you’re not updating, you’re leaving the door open.&lt;/p&gt;

&lt;p&gt;But it’s not just about security. Newer WordPress versions bring meaningful performance improvements. WordPress 6.4 and 6.5 introduced significant query optimization and reduced database overhead. Staying current means your site runs faster without you having to do anything else. New block editor features, improved media handling, and accessibility improvements all stack up over time.&lt;/p&gt;

&lt;p&gt;There’s also the compatibility angle. Plugin and theme developers follow WordPress core releases closely. The moment a popular plugin drops support for an older version, you either update WordPress or you lose access to that plugin’s updates, a forced choice nobody wants to make under pressure.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Check Your Current WordPress Version
&lt;/h2&gt;

&lt;p&gt;You would think this is obvious, but I have worked with site owners who had no idea they were running WordPress 5.8 on a 2026 server. Here are the ways to check, from easiest to most technical.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Check from the WordPress Dashboard
&lt;/h3&gt;

&lt;p&gt;This is the fastest method and requires no tools beyond your browser.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to your WordPress admin panel.&lt;/li&gt;
&lt;li&gt;Scroll to the Home section in the WordPress admin dashboard. You can see the version in the “At a Glance” widget.&lt;/li&gt;
&lt;li&gt;It looks subtle, but that’s your answer.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Anyone with admin access to WordPress who wants a five-second check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/upgrade-wordpress-version" rel="noopener noreferrer"&gt;https://serveravatar.com/upgrade-wordpress-version&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>php</category>
    </item>
    <item>
      <title>How to Fix SSH Connection Refused Error</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Tue, 28 Jul 2026 06:11:08 +0000</pubDate>
      <link>https://dev.to/serveravatar/how-to-fix-ssh-connection-refused-error-3dej</link>
      <guid>https://dev.to/serveravatar/how-to-fix-ssh-connection-refused-error-3dej</guid>
      <description>&lt;p&gt;You have typed your command, hit Enter, expecting to connect to your server. Instead, you’re greeted with the frustrating SSH Connection Refused error rather than a welcoming shell prompt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ssh: connect to host your-server port 22: Connection refused
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That flat, unhelpful line is one of the most frustrating messages in server management. No explanation. No suggested fix. Just a door slammed in your face.&lt;/p&gt;

&lt;p&gt;I have been there more times than I’d like to admit, particularly after spinning up new VPS instances where I’d forgotten to note the custom SSH port, or after a firewall rule I applied broader than intended cut off my own access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The good news:&lt;/strong&gt; SSH Connection Refused is almost always fixable in minutes once you know what to check. This guide walks through every real cause I have encountered in practice, with the exact commands that diagnose and resolve each one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this guide covers:&lt;/strong&gt; the meaning behind the error, causes, step-by-step fixes, a prevention checklist, and the FAQs I actually hear from developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who it’s for:&lt;/strong&gt; anyone managing a Linux server, whether it’s your first VPS or your hundredth.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SSH Connection Refused means the server is actively rejecting your connection attempt&lt;/li&gt;
&lt;li&gt;The most common causes: wrong port, service not running, firewall blocking, wrong credentials, and SSH not installed&lt;/li&gt;
&lt;li&gt;Most fixes take under 5 minutes from your terminal&lt;/li&gt;
&lt;li&gt;Always verify the fix by attempting to reconnect before assuming the problem is solved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prevention:&lt;/strong&gt; use non-default ports, configure fail2ban, and restrict SSH to specific IPs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Does “SSH Connection Refused” Actually Mean?
&lt;/h2&gt;

&lt;p&gt;Let’s be precise, because understanding the mechanics changes how you debug.&lt;/p&gt;

&lt;p&gt;“Connection Refused” is TCP’s way of saying: I heard you, but I’m not accepting this connection. The server received your SYN packet, processed it, and sent back a RST (reset) flag. This is fundamentally different from a timeout (where the server never responds at all) or an authentication failure (where the server accepts the connection but rejects your credentials).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1tssr9omgyaq5tcpzmn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1tssr9omgyaq5tcpzmn.jpg" alt="SSH Connection Refused Error" width="799" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In SSH terms, this means the SSH daemon, sshd , either isn’t listening on the port you are targeting, isn’t running at all, or something network-level is intercepting the request before it reaches the daemon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The practical difference matters:&lt;/strong&gt; if you see “Connection Refused”, you at least know the server is reachable over the network. That’s useful diagnostic information.&lt;/p&gt;

&lt;p&gt;If you want to learn more about how SSH works internally, including its configuration options and authentication process, the &lt;a href="https://www.openssh.org/manual.html?ref=serveravatar.com" rel="noopener noreferrer"&gt;official OpenSSH documentation&lt;/a&gt; provides detailed explanations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7th04wmfq9vsdr2h2p1y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7th04wmfq9vsdr2h2p1y.jpg" alt="Error Message Table" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Diagnose SSH Connection Refused
&lt;/h2&gt;

&lt;p&gt;Before fixing anything, verify. The most common mistake I see is jumping to conclusions, changing the SSH port when the problem was the firewall, or reinstalling SSH when the service just needed a restart.&lt;/p&gt;

&lt;p&gt;Here’s the diagnostic sequence I follow, in order:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Confirm the server is reachable at all&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping &lt;span class="nt"&gt;-c&lt;/span&gt; 3 your-server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If ping fails, you have a network connectivity issue, possibly the server is down, or it’s on an unreachable network. That’s a different problem than Connection Refused.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Check if the SSH port is reachable&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; your-server-ip 22
&lt;span class="c"&gt;# or if the port is non-standard:&lt;/span&gt;
nc &lt;span class="nt"&gt;-zv&lt;/span&gt; your-server-ip 2222
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this shows “Connection refused”, you have confirmation the problem is at the SSH layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Use SSH verbose mode for more detail&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-v&lt;/span&gt; username@your-server-ip &lt;span class="nt"&gt;-p&lt;/span&gt; PORT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The -v flag (use -vvv for maximum verbosity) shows exactly where the connection attempt stalls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Focbywkl7emtszg7f7jhp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Focbywkl7emtszg7f7jhp.jpg" alt="using ssh verbose mode for more details - SSH Connection Refused" width="796" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This alone often points you directly to the problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/ssh-connection-refused" rel="noopener noreferrer"&gt;https://serveravatar.com/ssh-connection-refused&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>linux</category>
      <category>devops</category>
      <category>networking</category>
    </item>
    <item>
      <title>Linux File Permissions Explained: Read, Write, and Change Permissions</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Sat, 25 Jul 2026 06:28:56 +0000</pubDate>
      <link>https://dev.to/serveravatar/linux-file-permissions-explained-read-write-and-change-permissions-3ble</link>
      <guid>https://dev.to/serveravatar/linux-file-permissions-explained-read-write-and-change-permissions-3ble</guid>
      <description>&lt;p&gt;Linux file permissions are one of the first concepts every Linux user and system administrator needs to master. Every sysadmin has been burned by a permissions mistake at least once. Uploaded a script that won’t run. Moved a file you couldn’t overwrite. Set up a deployment hook that silently failed because the user running it didn’t have write access to the log directory. These aren’t exotic edge cases, they’re the daily friction of working on a Linux system.&lt;/p&gt;

&lt;p&gt;Linux file permissions are the gatekeepers of everything that runs on your server. Get them right, and your applications work smoothly, your users can access what they need, and your server stays reasonably secure. Get them wrong, and you’re either locked out of your own files or handing out access like candy.&lt;/p&gt;

&lt;p&gt;This guide cuts through the noise. You’ll learn exactly how Linux permission bits work, what each one actually does when you’re logged in, how to read the cryptic output of &lt;code&gt;ls -l&lt;/code&gt;, and how to change permissions the right way using both symbolic and numeric chmod. Everything here is written from the perspective of someone who’s spent real hours on actual servers, not just quoting man pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Linux has three permission types: Read (r), Write (w), and Execute (x)&lt;/li&gt;
&lt;li&gt;Permissions apply to three categories of users: Owner (u), Group (g), and Others (o)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;ls -l&lt;/code&gt; command shows permissions in a 10-character string like &lt;code&gt;-rw-r--r--&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use chmod to change permissions, symbolic mode (u+x) or numeric mode (755)&lt;/li&gt;
&lt;li&gt;Use chown and chgrp to change ownership&lt;/li&gt;
&lt;li&gt;Common pitfalls: execute bit on directories, wrong group ownership, restrictive umask in production&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Linux Permissions Matter More Than You Think
&lt;/h2&gt;

&lt;p&gt;On a single-user laptop, permissions feel academic. On a server running multiple services, serving web traffic, and handling multiple users? Permissions are load-bearing infrastructure.&lt;/p&gt;

&lt;p&gt;When a web server like Nginx runs, it typically operates under its own user, www-data on Ubuntu. The user account must have read permissions for the web root directory in order to serve website files. Your deployment script, running as a deploy user, needs write access to certain directories and execute access to deployment hooks. Your backup cron job, running as root, needs read access to everything but write access only to the backup volume.&lt;/p&gt;

&lt;p&gt;Getting any one of these wrong breaks something silently. I’ve seen a Node.js app that kept crashing every night because a cron job was deleting its log directory, and the app didn’t have permission to recreate it. Permissions weren’t on anyone’s radar until the app started failing.&lt;/p&gt;

&lt;p&gt;Understanding permissions also matters for security. The difference between chmod 777 and chmod 644 on a configuration file could be the difference between a server that’s yours and a server that’s been compromised. That’s not hyperbole, misconfigured permissions are a documented entry point for a wide range of attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Layers: Owner, Group, Others
&lt;/h2&gt;

&lt;p&gt;Before you can understand what a permission means, you need to know who it’s being applied to. Linux splits access into three layers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenzgq37s2di69m2sxy0h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenzgq37s2di69m2sxy0h.jpg" alt="three layers - Linux File Permissions" width="652" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Owner (u)
&lt;/h3&gt;

&lt;p&gt;The user who created the file. On a shared server, each user has their own home directory with files they own. The owner can change permissions on their own files, or take them away from themselves, which is a fun way to lock yourself out of something.&lt;/p&gt;

&lt;h3&gt;
  
  
  Group (g)
&lt;/h3&gt;

&lt;p&gt;A group is a named collection of users. Instead of granting the same permission to five individual users one by one, you put them in a group and set permissions once. This is how most team-based server access works in practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Others (o)
&lt;/h3&gt;

&lt;p&gt;Everyone else, users who aren’t the owner and aren’t in the owning group. “Others” permissions are your last line of defense. They’re what the world gets when someone with no account on your server tries to access your files.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Permission Types Explained
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Read (r or 4)
&lt;/h3&gt;

&lt;p&gt;Read permission lets a user view a file’s contents. For a directory, read means listing the directory’s contents, you can see what files and subdirectories exist inside it, but you can’t enter it or access any of those files without additional permissions.&lt;/p&gt;

&lt;p&gt;In practice, read on a directory is the permission that ls checks. Without it, ls returns a permission denied error even if you already know the directory exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write (w or 2)
&lt;/h3&gt;

&lt;p&gt;Write permission lets a user modify a file’s contents, add data, truncate it, rewrite it entirely. On a directory, write means you can create, delete, and rename files inside that directory.&lt;/p&gt;

&lt;p&gt;Here’s the part that catches people: you need write permission on the directory itself to delete a file, not write permission on the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Execute (x or 1)
&lt;/h3&gt;

&lt;p&gt;Execute permission is what makes a file run as a program or script. Without it, trying to run &lt;code&gt;./script.sh&lt;/code&gt; gives you a “permission denied” error, even if you own the file and have full read/write access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For directories, execute has a different meaning:&lt;/strong&gt; it allows access to the directory’s metadata and file contents. Without execute on a directory, you can’t cd into it or access any file inside it, even if you have read permission on those individual files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/linux-file-permissions" rel="noopener noreferrer"&gt;https://serveravatar.com/linux-file-permissions&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Upload Image File in Laravel: Step-by-Step Guide</title>
      <dc:creator>Meghna Meghwani</dc:creator>
      <pubDate>Thu, 23 Jul 2026 06:29:44 +0000</pubDate>
      <link>https://dev.to/serveravatar/how-to-upload-image-file-in-laravel-step-by-step-guide-1lfl</link>
      <guid>https://dev.to/serveravatar/how-to-upload-image-file-in-laravel-step-by-step-guide-1lfl</guid>
      <description>&lt;p&gt;Every Laravel project I’ve worked on, whether it’s a client portal, a content management system, or an e-commerce setup, eventually needs one thing: upload image functionality. User avatars, product photos, blog thumbnails, and document attachments all rely on a reliable image upload system. The requirement shows up predictably, yet every time I reach for the documentation, I find myself piecing together bits from half a dozen sources.&lt;/p&gt;

&lt;p&gt;Most tutorials cover the happy path. They show you the store() method, they mention &lt;code&gt;enctype="multipart/form-data"&lt;/code&gt;, and they call it done. But what about the messy parts? What happens when a user uploads a 12MB file and your server chokes? What if the validation rule passes locally but fails on your production VPS because of a misconfigured php.ini? And does your application actually handle filename collisions gracefully, or is it quietly overwriting files?&lt;/p&gt;

&lt;p&gt;This guide is the tutorial I wish existed when I first needed to build robust image upload functionality in Laravel. We are going to cover the full picture, from setting up your database schema for image metadata, to building a form with client-side preview, to handling validation edge cases that tutorials skip, to the security considerations that actually matter in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Laravel handles image uploads through its filesystem layer, no extra packages needed for basic uploads&lt;/li&gt;
&lt;li&gt;Store metadata (not just files) in your database: filename, path, MIME type, size, dimensions&lt;/li&gt;
&lt;li&gt;Always validate on the server AND (for UX) on the client, server-side validation is non-negotiable&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;storage:link&lt;/code&gt; command is still essential for serving files from the public web&lt;/li&gt;
&lt;li&gt;Production concerns, PHP limits, disk permissions, filename collisions, are where most tutorials fall short&lt;/li&gt;
&lt;li&gt;ServerAvatar’s built-in server management removes the permission and PHP config headaches from your deployment workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Laravel’s File Storage Actually Works
&lt;/h2&gt;

&lt;p&gt;Before we write a single line of code, it helps to understand what actually happens when a file upload reaches a Laravel application. This model will save you hours of debugging later.&lt;/p&gt;

&lt;p&gt;When a user submits a multipart form, Laravel wraps the uploaded file in an UploadedFile object. This isn’t just the file data, it carries metadata: original filename, MIME type, file size, temporary path on disk, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://laravel.com/docs/13.x/filesystem?ref=serveravatar.com" rel="noopener noreferrer"&gt;Laravel’s official documentation&lt;/a&gt; provides a detailed overview of uploaded files, storage disks, and filesystem operations if you want to explore advanced storage features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6886ea54eowq8vk4mzfd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6886ea54eowq8vk4mzfd.jpg" alt="Upload image in Laravel work flow" width="800" height="875"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Laravel then hands this object to the filesystem layer, which decides where to put the file based on your  &lt;code&gt;config/filesystems.php&lt;/code&gt; configuration. The two most relevant disks for image uploads are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;public –&lt;/strong&gt; Files land in &lt;code&gt;storage/app/public&lt;/code&gt;. These are accessible directly from the web, but only if you’ve run &lt;code&gt;php artisan storage:link&lt;/code&gt; to create a symlink from &lt;code&gt;public/storage&lt;/code&gt; to &lt;code&gt;storage/app/public&lt;/code&gt;. This is the standard path for user-uploaded content you want publicly served.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;local –&lt;/strong&gt; Files land in &lt;code&gt;storage/app&lt;/code&gt;. These are not web-accessible by default, which makes them suitable for files you want to control access to, think documents behind a paywall, or images served through a signed URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most image upload use cases, profile photos, product images, gallery uploads, you will use public with the storage:link symlink. I will focus on that path in this guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Design: Storing Image Metadata the Right Way
&lt;/h2&gt;

&lt;p&gt;Here’s a mistake I see constantly: they store the uploaded image path as a plain string column on the user or product table, and call it a day. This works until you need to display the image’s dimensions, filter by file size, or track which uploads are causing storage bloat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3d5zih7fljmtnrvfx1mq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3d5zih7fljmtnrvfx1mq.jpg" alt="Database Design - Upload image" width="367" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Separate your concerns. Create a dedicated images table and use a polymorphic relationship. This way, any model in your application can have images, a user, a product, a blog post, without cluttering your main tables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'images'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;morphs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'imageable'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;//&lt;/span&gt; &lt;span class="n"&gt;adds&lt;/span&gt; &lt;span class="n"&gt;imageable_type&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="n"&gt;imageable_id&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'filename'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'path'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'mime_type'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;unsignedInteger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'size'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;//&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;unsignedSmallInteger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'width'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;unsignedSmallInteger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'height'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;timestamps&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Storing image width and height can be useful for generating responsive images, validating aspect ratios, and creating thumbnails. You can easily retrieve these values during upload using PHP’s &lt;code&gt;getimagesize()&lt;/code&gt; function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The corresponding Eloquent model is straightforward:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$fillable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="s1"&gt;'filename'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'path'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'mime_type'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'size'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'width'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'height'&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;imageable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;morphTo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;asset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'storage/'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this gives you that a plain string column doesn’t: you can query images by size, filter by dimensions, eager-load them efficiently, and swap storage backends without touching your application code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read Full Article:&lt;/strong&gt; &lt;a href="https://serveravatar.com/laravel-image-upload" rel="noopener noreferrer"&gt;https://serveravatar.com/laravel-image-upload&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
