<?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: Aravin</title>
    <description>The latest articles on DEV Community by Aravin (@aravinlinux).</description>
    <link>https://dev.to/aravinlinux</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%2F1745529%2F4a271b05-a0c1-4f14-bd37-13c8b1f56c2b.jpg</url>
      <title>DEV Community: Aravin</title>
      <link>https://dev.to/aravinlinux</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aravinlinux"/>
    <language>en</language>
    <item>
      <title>Backup Concepts</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Wed, 22 Oct 2025 10:11:21 +0000</pubDate>
      <link>https://dev.to/aravinlinux/backup-concepts-2j01</link>
      <guid>https://dev.to/aravinlinux/backup-concepts-2j01</guid>
      <description>&lt;p&gt;This is Part 6 of the &lt;strong&gt;BigAnimal in PostgreSQL&lt;/strong&gt; series.&lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/monitoring-edb-biganimal-console-2fec"&gt;Access Model&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In EDB BigAnimal, backups are &lt;strong&gt;fully managed&lt;/strong&gt;, but we can &lt;code&gt;view&lt;/code&gt;, &lt;code&gt;configure&lt;/code&gt;, and &lt;code&gt;trigger&lt;/code&gt; them manually if needed. Here’s how you can take and manage backups step-by-step&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Open Backup Section
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;a href="https://auth.biganimal.com/u/login/identifier?state=hKFo2SA0NmQ1U3VGQ3V3dzB1dURpQW9INTRDTkFON3J4RW9taKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHl6dUN0a2ZtSC1ScTk5alVoNHMxQW1IWU9GeDl1UU1Io2NpZNkgWDg5TlNBZW5UamtrZHh1eURUVnBkSDZob21lZUNZQ1M" rel="noopener noreferrer"&gt;BigAnimal Console&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click Clusters → Select your cluster&lt;/li&gt;
&lt;li&gt;From the top tabs, choose Backups&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. View Backup Configuration
&lt;/h3&gt;

&lt;p&gt;On the Backups page, will see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatic backup schedule&lt;/strong&gt; — usually daily (default retention: 7–30 days)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Last backup status&lt;/strong&gt; — Success, Failed, or In progress&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retention policy&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup type&lt;/strong&gt; — Full or Incremental&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BigAnimal automatically performs &lt;code&gt;continuous backups&lt;/code&gt; using &lt;code&gt;WAL archiving + snapshots&lt;/code&gt; (depending on the cloud provider).&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Take Manual Backup
&lt;/h3&gt;

&lt;p&gt;To trigger an on-demand backup, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Clusters → Backups&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Backup&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backup type&lt;/strong&gt;: Full&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt; (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Start Backup&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;The status will appear as “Running” until the backup process is complete.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. CLI Method (Optional)
&lt;/h3&gt;

&lt;p&gt;If we use the BigAnimal CLI, we can trigger a manual backup like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;biganimal backup create --cluster-id &amp;lt;cluster_id&amp;gt; --description "Manual backup before upgrade"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check progress:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;biganimal backup list --cluster-id &amp;lt;cluster_id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Restore from Backup
&lt;/h3&gt;

&lt;p&gt;To restore (Point-in-Time or Full):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;biganimal cluster restore --cluster-id &amp;lt;cluster_id&amp;gt; --backup-id &amp;lt;backup_id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can also do this via the Console → &lt;strong&gt;Backups&lt;/strong&gt; → &lt;strong&gt;Restore&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Verify Backups
&lt;/h3&gt;

&lt;p&gt;In the &lt;code&gt;Console&lt;/code&gt; → &lt;code&gt;Backups&lt;/code&gt; tab, you can view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Last backup time &amp;amp; duration&lt;/li&gt;
&lt;li&gt;Result (Success/Failure)&lt;/li&gt;
&lt;li&gt;Backup ID&lt;/li&gt;
&lt;li&gt;Size&lt;/li&gt;
&lt;li&gt;Restore option&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.amazonaws.com%2Fuploads%2Farticles%2Fkb4l8sxqbarkbj3mbruz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkb4l8sxqbarkbj3mbruz.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Table Backup and Restore
&lt;/h3&gt;

&lt;p&gt;In PostgreSQL / EDB BigAnimal, backups are typically cluster- or database-level, but you can absolutely take a specific table backup and restore it using standard PostgreSQL tools like pg_dump and psql — even inside BigAnimal.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Using &lt;code&gt;pg_dump&lt;/code&gt; (Recommended)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pg_dump -h &amp;lt;hostname&amp;gt; -p 5432 -U &amp;lt;username&amp;gt; -d &amp;lt;database_name&amp;gt; -t &amp;lt;schema_name.table_name&amp;gt; -Fc -f table_backup.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Restore the Table Backup
&lt;/h4&gt;

&lt;p&gt;Use &lt;code&gt;pg_restore&lt;/code&gt; to restore into the same or another database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pg_restore -h &amp;lt;hostname&amp;gt; -p 5432 -U &amp;lt;username&amp;gt; -d &amp;lt;database_name&amp;gt; -t &amp;lt;schema_name.table_name&amp;gt; table_backup.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the table already exists, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drop it before restore, or&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;--clean&lt;/code&gt; flag to automatically drop &amp;amp; recreate it:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pg_restore --clean -t public.orders -d salesdb orders_table_backup.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Export as SQL File (Plain Text)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pg_dump -h &amp;lt;hostname&amp;gt; -U &amp;lt;username&amp;gt; -d &amp;lt;database_name&amp;gt; -t public.orders -Fp -f orders_table_backup.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql -h &amp;lt;hostname&amp;gt; -U &amp;lt;username&amp;gt; -d &amp;lt;database_name&amp;gt; -f orders_table_backup.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This method is simpler but slower for very large tables.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  3. Using EDB BigAnimal Console
&lt;/h4&gt;

&lt;p&gt;BigAnimal’s web console does not yet support per-table backup —&lt;br&gt;
But We can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect to your cluster via &lt;strong&gt;pgAdmin&lt;/strong&gt; or &lt;strong&gt;psql&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Run the above &lt;code&gt;pg_dump&lt;/code&gt; command from your local terminal&lt;/li&gt;
&lt;li&gt;Store the &lt;code&gt;.dump&lt;/code&gt; file securely (e.g., S3 or Azure Blob)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Optional: Backup with Data Filter&lt;/strong&gt;&lt;br&gt;
We can even export only certain rows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pg_dump -h mycluster.biganimal.io -U edb -d salesdb \
  -t public.orders --data-only \
  --where="order_date &amp;gt;= '2025-01-01'" \
  -Fc -f recent_orders.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verification&lt;/strong&gt;&lt;br&gt;
To verify what’s inside the dump file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pg_restore -l table_backup.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This lists the contents (schema, table, indexes, etc.).&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>postgres</category>
      <category>tutorial</category>
      <category>cloud</category>
      <category>database</category>
    </item>
    <item>
      <title>Monitoring EDB BigAnimal console</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Wed, 22 Oct 2025 06:48:23 +0000</pubDate>
      <link>https://dev.to/aravinlinux/monitoring-edb-biganimal-console-2fec</link>
      <guid>https://dev.to/aravinlinux/monitoring-edb-biganimal-console-2fec</guid>
      <description>&lt;p&gt;This is Part 5 of the &lt;strong&gt;BigAnimal in PostgreSQL&lt;/strong&gt; series.&lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/access-model-22k7"&gt;Access Model&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/backup-concepts-2j01"&gt;Backup Concepts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduled Jobs Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;pgAgent stores all job definitions and logs in pgagent catalog tables, located in the &lt;code&gt;pgagent&lt;/code&gt; schema (usually in the &lt;code&gt;postgres&lt;/code&gt; or &lt;code&gt;maintenance&lt;/code&gt; database).&lt;/p&gt;

&lt;p&gt;Main tables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;pgagent.pga_job&lt;/code&gt; → Job definitions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pgagent.pga_jobstep&lt;/code&gt; → Steps of each job&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pgagent.pga_joblog&lt;/code&gt; → Job execution history&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pgagent.pga_jobsteplog&lt;/code&gt; → Each step’s execution log&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1️⃣&lt;strong&gt;Check if pgAgent service is running (system-level)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl status pgagent&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or if it’s running as a background process (for EDB pgAgent):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ps aux | grep pgagent&lt;/code&gt; If you see the pgAgent process, it’s running.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Check current running jobs (SQL query)&lt;/strong&gt;&lt;br&gt;
Run this in the database where pgAgent is installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT j.jobid, j.jobname, j.enabled, l.jlgid AS joblogid, l.jlgstatus AS status, l.jlgstart AS start_time
FROM pgagent.pga_job j
LEFT JOIN pgagent.pga_joblog l ON j.jobid = l.jlgjobid
WHERE l.jlgstatus = 'r'
ORDER BY l.jlgstart DESC;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 &lt;code&gt;jlgstatus&lt;/code&gt; = 'r' → job is running&lt;br&gt;
🔹 s = success, f = failed, i = idle&lt;br&gt;
If you get no rows → no job is running currently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Check recent job run status&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;SELECT j.jobname, l.jlgstatus, l.jlgstart, l.jlgduration
FROM pgagent.pga_job j
JOIN pgagent.pga_joblog l ON j.jobid = l.jlgjobid
ORDER BY l.jlgstart DESC
LIMIT 10;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows the 10 most recent job runs with their statuses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Check step-level details (optional)&lt;/strong&gt;&lt;br&gt;
If you want to see which step is currently running or failed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT j.jobname, s.jstname AS step_name, sl.jslstatus AS step_status, sl.jslstart AS step_start
FROM pgagent.pga_job j
JOIN pgagent.pga_jobstep s ON j.jobid = s.jstjobid
JOIN pgagent.pga_jobsteplog sl ON s.jstid = sl.jsljstid
ORDER BY sl.jslstart DESC
LIMIT 10;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5️⃣ pgAdmin (GUI method)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to pgAdmin → Jobs → [select job] → Statistics tab → you can see last run, next run, and last result.&lt;/li&gt;
&lt;li&gt;You can also open pgAgent → Job Logs to view running or completed jobs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick Troubleshooting Tips&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Job not starting -   Verify pgAgent service is running (&lt;code&gt;systemctl status pgagent&lt;/code&gt; on the instance, if visible)&lt;/li&gt;
&lt;li&gt;Job not listed - Ensure you’re connected to the same database where pgAgent was configured&lt;/li&gt;
&lt;li&gt;Job failed - Inspect &lt;code&gt;pgagent.pga_joblog.jlgoutput&lt;/code&gt; for error details&lt;/li&gt;
&lt;li&gt;Job never runs - Check &lt;code&gt;jobenabled = true&lt;/code&gt; and the schedule in &lt;code&gt;pgagent.pga_schedule&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Monitoring Dashboard BigAnimal Console&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the BigAnimal Console: &lt;a href="https://portal.biganimal.com" rel="noopener noreferrer"&gt;https://portal.biganimal.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;From the left sidebar, click Clusters → select your cluster.&lt;/li&gt;
&lt;li&gt;Click the Monitoring &amp;amp; Logging tab.
You’ll now see:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Overview (Summary)&lt;/code&gt; — CPU, memory, storage usage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Metrics&lt;/code&gt; — time-series graphs (like Grafana)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Logs&lt;/code&gt; — PostgreSQL logs &amp;amp; events&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Queries&lt;/code&gt; — slow or long-running query insights&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;&lt;strong&gt;Query Monitoring (Performance tab)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BigAnimal automatically collects query performance data using &lt;code&gt;pg_stat_statements&lt;/code&gt; and &lt;code&gt;auto_explain&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We can view below in dashboard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Top Queries  - Queries ranked by total execution time.&lt;/li&gt;
&lt;li&gt;Slow Queries - Queries exceeding configured thresholds.&lt;/li&gt;
&lt;li&gt;Query Plans  - Execution plans of slowest queries.&lt;/li&gt;
&lt;li&gt;Query Frequency  - Number of times a query pattern ran.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Save and reload configuration (no restart needed for these).&lt;/p&gt;

&lt;p&gt;We can enable additional query logging from the console:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;code&gt;Configuration&lt;/code&gt; → Parameters&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;log_min_duration_statement = 1000&lt;/code&gt; (Logs queries slower than 1s)&lt;/li&gt;
&lt;li&gt;log_statement_stats = on&lt;/li&gt;
&lt;li&gt;log_parser_stats = on&lt;/li&gt;
&lt;li&gt;log_executor_stats = on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Storage &amp;amp; Bloat Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Monitoring → Storage tab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We will see table/index size growth.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT relname AS table_name, pg_size_pretty(pg_total_relation_size(relid)) AS total_size, pg_size_pretty(pg_table_size(relid)) AS table_size, pg_size_pretty(pg_indexes_size(relid)) AS index_size
FROM pg_catalog.pg_statio_user_tables;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Autovacuum statistics (dead tuples, last vacuum time).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT relname, n_dead_tup, last_autovacuum, last_autoanalyze 
ROM pg_stat_all_tables;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Index usage efficiency (from pg_stat_user_indexes).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT relname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;idx_scan&lt;/code&gt; is 0 or very low → consider dropping the index.&lt;/p&gt;

&lt;p&gt;If you enable &lt;code&gt;pgstattuple&lt;/code&gt; and &lt;code&gt;pg_repack&lt;/code&gt; extensions, the console can show &lt;code&gt;bloat percentage&lt;/code&gt; for each table/index.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optional Add-ons&lt;/strong&gt;&lt;br&gt;
If you enable these extensions in BigAnimal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pgstattuple&lt;/code&gt; → shows table and index bloat %&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pg_repack&lt;/code&gt; → allows reclaiming bloated space without downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Logs Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Under Monitoring &amp;amp; Logging → Logs, &lt;br&gt;
We can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter by severity (ERROR, WARNING, LOG)&lt;/li&gt;
&lt;li&gt;Search for specific text (e.g., “autovacuum”, “statement timeout”)&lt;/li&gt;
&lt;li&gt;View PostgreSQL logs per node&lt;/li&gt;
&lt;li&gt;Export logs in .&lt;code&gt;txt&lt;/code&gt; or .&lt;code&gt;json&lt;/code&gt; format for external analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Log Sources Behind the Scenes&lt;/strong&gt;&lt;br&gt;
The dashboard aggregates data from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL log files (pg_log)&lt;/li&gt;
&lt;li&gt;System logs (e.g., WAL archiver, autovacuum, checkpoint activity)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>database</category>
      <category>monitoring</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Access Model</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Tue, 14 Oct 2025 15:33:48 +0000</pubDate>
      <link>https://dev.to/aravinlinux/access-model-22k7</link>
      <guid>https://dev.to/aravinlinux/access-model-22k7</guid>
      <description>&lt;p&gt;This is Part 4 of the &lt;strong&gt;BigAnimal in PostgreSQL&lt;/strong&gt; series.&lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/view-cluster-details-585d"&gt;View Cluster Details&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/monitoring-edb-biganimal-console-2fec"&gt;Monitoring EDB BigAnimal Console&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;BigAnimal&lt;/strong&gt;, when we create a cluster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A superuser have created automatically is called &lt;code&gt;biganimal_user&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;we connect as that user (or another user with &lt;code&gt;CREATEROLE&lt;/code&gt; privilege) to manage other users, roles, and databases.&lt;/li&gt;
&lt;li&gt;We cannot use the &lt;code&gt;postgres&lt;/code&gt; superuser directly (for &lt;em&gt;security&lt;/em&gt; reasons).&lt;/li&gt;
&lt;li&gt;But &lt;code&gt;biganimal_user&lt;/code&gt; can do almost everything needed for user management.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Connect to the Cluster
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;biganimal cluster show-connection --id p-96589658&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then copy the connection string, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql "host=mycluster.xxxx.biganimal.io port=5432 dbname=postgres user=biganimal_user sslmode=require"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Manage via BigAnimal Portal (Optional GUI Way)
&lt;/h4&gt;

&lt;p&gt;You can also do some of this in the BigAnimal Console:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to your &lt;strong&gt;BigAnimal portal&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to your &lt;strong&gt;cluster&lt;/strong&gt; → &lt;strong&gt;Databases &amp;amp; Users&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Click “&lt;strong&gt;Create User&lt;/strong&gt;” or “&lt;strong&gt;Create Database&lt;/strong&gt;.”&lt;/li&gt;
&lt;li&gt;Specify username, password, and assign privileges.
This GUI uses the same SQL commands under the hood.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Get Connection Details from BigAnimal
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;biganimal cluster show-connection --id p-xxxxxxxxxx&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Replace p-xxxxxxxxxx with your actual cluster ID.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It will display something like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cluster ID: p-xxxxxxxxxx
Cluster Name: prod-db
Connection Details:
  Hostname: prod-db.abcd1234.us-east-1.aws.biganimal.io
  Port: 5432
  Database: postgres
  User: biganimal_user
  SSL Mode: require
  Connection String:
    psql "host=prod-db.abcd1234.us-east-1.aws.biganimal.io port=5432 dbname=postgres user=biganimal_user sslmode=require"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Connect via psql (Command Line)
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Requirements:
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;psql&lt;/code&gt; (PostgreSQL client) must be installed.&lt;/li&gt;
&lt;li&gt;You need the password for &lt;code&gt;biganimal_user&lt;/code&gt; (from the BigAnimal console when cluster was created).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Example Command:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql "host=prod-db.abcd1234.us-east-1.aws.biganimal.io port=5432 dbname=postgres user=biganimal_user sslmode=require"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll be prompted for a password.&lt;br&gt;
After that, you should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql (15.4)
Type "help" for help.

postgres=&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’re now connected to your BigAnimal cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: Store the Password Securely
&lt;/h3&gt;

&lt;p&gt;You can store your password in a &lt;code&gt;.pgpass&lt;/code&gt; file to avoid typing it every time.&lt;/p&gt;

&lt;p&gt;Create the file (Linux):&lt;br&gt;
&lt;code&gt;nano ~/.pgpass&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And Add below format details:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hostname:port:databasename:user_name:password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Verify Connection
&lt;/h4&gt;

&lt;p&gt;In &lt;strong&gt;psql&lt;/strong&gt;:&lt;br&gt;
&lt;code&gt;\conninfo&lt;/code&gt;&lt;br&gt;
Shows connection details (host, port, user, SSL mode, etc.).&lt;/p&gt;
&lt;h4&gt;
  
  
  Create a new user (invite a collaborator)
&lt;/h4&gt;

&lt;p&gt;An organization administrator manages users by inviting them as collaborators. This process grants the user access to the BigAnimal console and assigns them an organizational role.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to the EDB BigAnimal console.&lt;/li&gt;
&lt;li&gt;Navigate to the Admin panel.&lt;/li&gt;
&lt;li&gt;Access the Users section to see and manage the list of members in your organization.&lt;/li&gt;
&lt;li&gt;Initiate the process to invite a new user by providing their email address and assigning them an organizational role.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The organizational role (e.g., Administrator, Member) determines the user's base-level permissions for managing resources like clusters and other users.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Provide privileges to a user
&lt;/h4&gt;

&lt;p&gt;BigAnimal uses a multi-layered permission system. You manage privileges at both the organizational level (for console access) and the cluster level (for database-specific access). &lt;/p&gt;
&lt;h4&gt;
  
  
  1. Manage organizational privileges
&lt;/h4&gt;

&lt;p&gt;You can modify a user's permissions within the organization from the Admin panel. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the BigAnimal console, go to the Admin panel &amp;gt; Users.&lt;/li&gt;
&lt;li&gt;Locate the user whose permissions you want to change.&lt;/li&gt;
&lt;li&gt;Select the user to modify their assigned organizational role.&lt;/li&gt;
&lt;li&gt;Save your changes to update their permissions across the entire BigAnimal organization.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  2. Manage cluster-level privileges
&lt;/h4&gt;

&lt;p&gt;Once a user has access to your organization, you can manage their access to specific clusters and their underlying databases. &lt;/p&gt;
&lt;h5&gt;
  
  
  Grant database access via the console
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to your desired Cluster in the BigAnimal console.&lt;/li&gt;
&lt;li&gt;Go to the Users or Permissions section for that specific cluster.&lt;/li&gt;
&lt;li&gt;Find and select the user you want to grant access to.&lt;/li&gt;
&lt;li&gt;Assign them a cluster-level role or grant specific database permissions (e.g., READ-ONLY). &lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;
  
  
  Grant superuser access via the console
&lt;/h5&gt;

&lt;p&gt;BigAnimal offers a self-service superuser access feature for users in their own cloud accounts. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From the Clusters page, navigate to your desired cluster.&lt;/li&gt;
&lt;li&gt;Access the cluster details to enable the superuser feature for your user account.&lt;/li&gt;
&lt;li&gt;Once activated, your user account will have superuser privileges, giving you full control over the database. &lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;In the BigAnimal console, you can manage users at both the organizational level for platform access and the database level for data access within a cluster. The console offers a dedicated user management area for inviting new users and assigning organization-wide roles. Database user privileges are then managed by connecting to the database using a tool like psql. &lt;/p&gt;
&lt;h4&gt;
  
  
  Creating organization users
&lt;/h4&gt;

&lt;p&gt;Organizational users are individuals you invite to join your BigAnimal account. These users are assigned roles that define their access to BigAnimal's management functions, such as creating clusters or managing other users. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to the BigAnimal console.&lt;/li&gt;
&lt;li&gt;Navigate to the Users page from the main menu.&lt;/li&gt;
&lt;li&gt;Select Invite New User. You must have the correct permissions to see this option, typically &lt;code&gt;Owner&lt;/code&gt; or &lt;code&gt;Admin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter the email address of the user you wish to invite.&lt;/li&gt;
&lt;li&gt;Assign an organization-level role to the new user.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Owner&lt;/strong&gt;: Has full control, including managing the subscription, editing organization info, and inviting other users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin&lt;/strong&gt;: Can invite users, manage user roles, and access all projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Member&lt;/strong&gt;: Can create projects and access public projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;The user will receive an invitation email to join the organization. &lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Creating database users and providing privileges
&lt;/h4&gt;

&lt;p&gt;Database users are created within a specific cluster and are managed using standard PostgreSQL commands. For this, you will need to connect to your BigAnimal cluster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connect to your database&lt;/strong&gt;: Use a client like &lt;code&gt;psql&lt;/code&gt; to connect to your BigAnimal cluster. You can find the connection details in the BigAnimal console by navigating to your cluster's details page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create a new user&lt;/strong&gt;: Run the &lt;code&gt;CREATE USER&lt;/code&gt; command, replacing app1 and app1_pwd with your desired username and a secure password.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create user arc_user with password 'user_password';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Provide privileges&lt;/strong&gt;: To grant the user permissions, you can use the &lt;code&gt;GRANT&lt;/code&gt; command. The &lt;code&gt;edb_admin&lt;/code&gt; role, which is the default for a new BigAnimal cluster, has elevated privileges, and you can grant some of these to your new user.&lt;/p&gt;

&lt;p&gt;Grant the &lt;code&gt;edb_admin&lt;/code&gt; role: This gives the user many common administrative permissions.&lt;br&gt;
&lt;code&gt;GRANT edb_admin TO arc_user;&lt;/code&gt; &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;SQL Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create User&lt;/td&gt;
&lt;td&gt;CREATE USER app_user WITH PASSWORD 'pwd';&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grant DB Access&lt;/td&gt;
&lt;td&gt;GRANT CONNECT ON DATABASE sales_db TO app_user;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grant Schema Access&lt;/td&gt;
&lt;td&gt;GRANT USAGE ON SCHEMA public TO app_user;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read-only&lt;/td&gt;
&lt;td&gt;GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_user;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read/Write&lt;/td&gt;
&lt;td&gt;GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_user;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role-based Access&lt;/td&gt;
&lt;td&gt;CREATE ROLE readonly; GRANT readonly TO app_user;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Full SQL Script: Create Database, Roles &amp;amp; Access
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; ===========================================
 1️⃣ Create Roles (Group roles for access control)
 ===========================================

-- Read-only role
CREATE ROLE readonly_role NOLOGIN;

-- Read-write role
CREATE ROLE readwrite_role NOLOGIN;

 ===========================================
 2️⃣ Create Users (Login roles)
 ===========================================

-- Reporting user (only read access)
CREATE USER report_user WITH PASSWORD 'StrongReadOnlyPwd@123';

-- Application user (read/write access)
CREATE USER app_user WITH PASSWORD 'StrongReadWritePwd@123';

 ===========================================
 3️⃣ Assign Users to Roles
 ===========================================
GRANT readonly_role TO report_user;
GRANT readwrite_role TO app_user;

 ===========================================
 4️⃣ Database-level Access
 ===========================================
GRANT CONNECT ON DATABASE sales_db TO readonly_role;
GRANT CONNECT ON DATABASE sales_db TO readwrite_role;

 ===========================================
 5️⃣ Schema-level Access
 ===========================================
GRANT USAGE ON SCHEMA public TO readonly_role;
GRANT USAGE ON SCHEMA public TO readwrite_role;

 ===========================================
 6️⃣ Table Privileges
 ===========================================
-- For existing tables:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO readwrite_role;

-- For future tables (default privileges):
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT ON TABLES TO readonly_role;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite_role;

-- ===========================================
-- 7️⃣ (Optional) Sequence Access
-- ===========================================
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly_role;
GRANT USAGE, SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA public TO readwrite_role;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT USAGE, SELECT ON SEQUENCES TO readonly_role;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO readwrite_role;

-- ===========================================
-- You can verify access as:
-- \c sales_db report_user
-- \c sales_db app_user
-- ===========================================
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>SCRAM-SHA-256</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Mon, 13 Oct 2025 10:29:10 +0000</pubDate>
      <link>https://dev.to/aravinlinux/scram-sha-256-17b2</link>
      <guid>https://dev.to/aravinlinux/scram-sha-256-17b2</guid>
      <description>&lt;p&gt;&lt;strong&gt;SCRAM-SHA-256&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Salted Challenge Response Authentication Mechanism (SCRAM) is a secure protocol for proving a user's identity to a server without sending the password over the network. It uses a server-generated "salt" and a "challenge" to create a hashed response that is verified by both the client and server, protecting against attacks like eavesdropping and making dictionary attacks more difficult. SCRAM is based on the RFC 5802 standard from the IETF(Internet Engineering Task Force) and is used in various applications, including MongoDB, XMPP, IMAP, and SMTP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How SCRAM works&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Client sends login request&lt;/strong&gt;: The client initiates a login by sending its username to the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server generates salt and challenge&lt;/strong&gt;: The server generates a unique, random string called a "salt" for the user and a random "challenge" for this session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server sends salt and challenge to client&lt;/strong&gt;: The server sends both the salt and the challenge back to the client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client calculates response&lt;/strong&gt;: The client uses the received salt, the challenge, and the user's password to perform a cryptographic hashing operation and creates a response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client sends response to server&lt;/strong&gt;: The client sends this calculated response back to the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server verifies response&lt;/strong&gt;: The server performs the same hashing operation using its stored salt and the user's password, and then compares its result to the response received from the client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication is successful&lt;/strong&gt;: If the two results match, the user is authenticated. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key features&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mutual authentication&lt;/strong&gt;: Both the client and the server can verify each other's identity without sending the password over the network.&lt;/li&gt;
&lt;li&gt;    &lt;strong&gt;Salted passwords&lt;/strong&gt;: The use of a salt for each user prevents attackers from using pre-computed rainbow tables to crack passwords.&lt;/li&gt;
&lt;li&gt;    &lt;strong&gt;Challenge-response&lt;/strong&gt;: The server's random challenge prevents an attacker from simply replaying a recorded login attempt.&lt;/li&gt;
&lt;li&gt;    &lt;strong&gt;Resistance to attacks&lt;/strong&gt;: SCRAM is designed to be resistant to eavesdropping and man-in-the-middle attacks. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrdouassuam9xe0gn7wg.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.amazonaws.com%2Fuploads%2Farticles%2Fsrdouassuam9xe0gn7wg.jpg" alt=" " width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How SCRAM works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SCRAM authentication works through an interactive conversation between a client (user) and server. It involves several steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SCRAM session begins with the client sending a username and a client ‘nonce’ – a unique, random number, to the server. This is the “client-first” message.&lt;/li&gt;
&lt;li&gt;    In response, the server sends back a ‘nonce’ of its own (appended to the client nonce), along with a ‘salt’ (a random data that is used as an additional input to a one-way function that hashes data or password), and an iteration count. This constitutes the “server-first” message.&lt;/li&gt;
&lt;li&gt;    The client then uses these values along with its password to compute a ‘Client Proof’ and sends it back to the server, along with a ‘channel binding’ information. This is the “client-final” message.&lt;/li&gt;
&lt;li&gt;    The server then validates the ‘Client Proof’ using the stored iteration count, salt, and the original password’s hash.  If it validates, the server will then generate a ‘Server Signature’ and send it back to the client. This is the “server-final” message.&lt;/li&gt;
&lt;li&gt;    Finally, the client validates the ‘Server Signature’.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If both ‘Client Proof’ and ‘Server Signature’ validations are successful, the client and server have mutually authenticated. &lt;/p&gt;

&lt;p&gt;This process is designed to protect password-based authentication from eavesdropping and man-in-the-middle attacks while also providing mutual authentication. SCRAM can function with any hash function and is usually used with Transport Layer Security (TLS) for an extra layer of security. It can also incorporate channel binding to bind the authentication to a lower encryption layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why use SCRAM?&lt;/strong&gt;&lt;br&gt;
Organizations use SCRAM authentication for numerous reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Higher Security&lt;/strong&gt;&lt;br&gt;
   SCRAM offers a higher level of security by storing hashed passwords, instead of plain ones, on the server. This means that even in case of a data breach, the attacker won’t be able to see the actual passwords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Protection against Replay Attacks&lt;/strong&gt;&lt;br&gt;
   SCRAM helps guard against replay attacks, in which an attacker intercepts and reuses authentication messages. It does not allow previously intercepted authentication messages to be reused illegitimately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resistance to Brute force Attacks&lt;/strong&gt;&lt;br&gt;
   SCRAM uses an iteration value which can be set to a high number making the brute force attack computationally very expensive and impractical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prevention of Man-in-the-middle Attacks&lt;/strong&gt;&lt;br&gt;
   SCRAM’s feature “channel binding” can provide additional protection against man-in-the-middle attacks, which occur when an attacker secretly intercepts and potentially alters the communication between two parties who believe they are directly communicating with each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offloading Computation Cost&lt;/strong&gt;&lt;br&gt;
   SCRAM shifts the computation cost of password hashing from the server to the client. This can prevent servers from being overwhelmed in a potential distributed denial of service (DDoS) attack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separation of Concerns&lt;/strong&gt;&lt;br&gt;
   By using SCRAM, an organization can delegate the handling of cleartext credentials to a dedicated secrets-management service, minimizing exposure and possibly avoiding breaches. It’s easier to ensure security when responsibilities are clearly divided.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>View Cluster Details</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Tue, 07 Oct 2025 09:26:49 +0000</pubDate>
      <link>https://dev.to/aravinlinux/view-cluster-details-585d</link>
      <guid>https://dev.to/aravinlinux/view-cluster-details-585d</guid>
      <description>&lt;p&gt;This is Part 3 of the &lt;strong&gt;BigAnimal in PostgreSQL&lt;/strong&gt; series.&lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/how-to-configure-biganimal-1c54"&gt;How to Configure BigAnimal&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/access-model-22k7"&gt;Access Model&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. To View Cluster details
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;biganimal cluster show&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;br&gt;
Displays detailed information about all clusters or a specific cluster running in your EDB BigAnimal environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lists all PostgreSQL clusters you have access to under your BigAnimal account.&lt;/li&gt;
&lt;li&gt;Shows summary details like:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cluster ID&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status&lt;/strong&gt; (e.g., Running, Provisioning, Stopped)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL version&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Region / Cloud provider&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Availability mode&lt;/strong&gt; (Single, HA, DR)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node size / instance type&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Number of nodes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VPC or Network details&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creation time&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ID              NAME          STATUS     VERSION   REGION     HA MODE
p-1234567890    prod-db       running    15.4      aws/us-east-1  HA
p-0987654321    staging-db    stopped    16.2      azure/eastus   Single
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also add flags such as:&lt;br&gt;
&lt;code&gt;biganimal cluster show --id p-1234567890&lt;/code&gt;&lt;br&gt;
to view only one cluster’s details.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Displays connection details for a specific PostgreSQL cluster
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;biganimal cluster show-connection --id p-23456789&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The --id option specifies which cluster you want connection details for.&lt;/li&gt;
&lt;li&gt;The command shows:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary endpoint&lt;/strong&gt; (hostname or IP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-only endpoint&lt;/strong&gt; (for replicas)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Port number&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database name&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usernames&lt;/strong&gt; (like postgres or biganimal_user)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection string&lt;/strong&gt; (URI format) — both psql and pgAdmin compatible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL mode and certificate details&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load balancer endpoint&lt;/strong&gt; (if HA enabled)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cluster ID: p-23456789
Cluster Name: prod-db
Connection Details:
  Hostname: hostname
  Port: 5432
  Database: arcflow
  User: user_name
  SSL Mode: require
  Connection String:
    psql "host=hostname/ip port=5432 dbname=arcflow user=user_name sslmode=require"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DSN (Data Source Name)&lt;br&gt;
A DSN (Data Source Name) is a string that defines how to connect to a database — it contains all the necessary connection parameters (like hostname, port, username, password, and database name) in one compact format.&lt;/p&gt;

&lt;p&gt;In PostgreSQL (and EDB BigAnimal), the DSN is commonly used by tools like psql, pgAdmin, or applications to establish a connection without having to specify each option separately.&lt;/p&gt;

&lt;p&gt;ODBC (Open Database Connectivity)&lt;/p&gt;

&lt;p&gt;ODBC is a universal interface for connecting applications to databases — mainly used by:&lt;br&gt;
Windows applications (like Excel, Power BI, Access)&lt;br&gt;
C/C++ and .NET programs&lt;/p&gt;

&lt;p&gt;JDBC (Java Database Connectivity)&lt;br&gt;
JDBC is the Java standard API for database connectivity.&lt;br&gt;
It uses a JDBC URL, which is similar to a DSN but Java-specific.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>cli</category>
      <category>cloud</category>
      <category>database</category>
    </item>
    <item>
      <title>How to Configure BigAnimal</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Wed, 24 Sep 2025 11:49:18 +0000</pubDate>
      <link>https://dev.to/aravinlinux/how-to-configure-biganimal-1c54</link>
      <guid>https://dev.to/aravinlinux/how-to-configure-biganimal-1c54</guid>
      <description>&lt;p&gt;This is Part 2 of the &lt;strong&gt;BigAnimal in PostgreSQL&lt;/strong&gt; series.&lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/what-is-biganimal-in-postgresql-23cd"&gt;What is BigAnimal in PostgreSQL&lt;/a&gt; &lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/view-cluster-details-585d"&gt;View Cluster Details&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuration happens during &lt;strong&gt;cluster creation&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Sign Up and Login&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://biganimal.com" rel="noopener noreferrer"&gt;BigAnimal.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create an account or log in with EDB credentials.&lt;/li&gt;
&lt;li&gt;Optionally, link your AWS or Azure subscription (if you want clusters inside your account).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create Cluster&lt;/strong&gt; under the project.&lt;/li&gt;
&lt;li&gt;Choose: Cloud Provider &lt;strong&gt;(AWS / Azure)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Deployment type:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;EDB account&lt;/strong&gt; (quick start, fully managed).&lt;br&gt;
&lt;strong&gt;Your account&lt;/strong&gt; (more control, resources billed to you).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Postgres Type:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt; (vanilla open-source).&lt;br&gt;
&lt;strong&gt;EPAS&lt;/strong&gt; (Enterprise features like Oracle compatibility, advanced security, etc.).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Instance size (vCPUs, RAM).&lt;/li&gt;
&lt;li&gt;Storage (SSD, autoscaling optional).&lt;/li&gt;
&lt;li&gt;Number of nodes (1 for dev, 3+ for HA).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Networking &amp;amp; Security&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Configure:&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;VPC/VNet&lt;/strong&gt; and region.&lt;br&gt;
&lt;strong&gt;Networking&lt;/strong&gt;: Public endpoint or private-only (recommended).&lt;br&gt;
&lt;strong&gt;Security&lt;/strong&gt;: IP allowlist or VPC peering.&lt;br&gt;
&lt;strong&gt;Authentication&lt;/strong&gt;: PostgreSQL roles + optional SSO integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Advanced Configuration&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;High Availability:&lt;/code&gt;&lt;br&gt;
Synchronous replication for strong consistency.&lt;br&gt;
Async replication for better performance.&lt;br&gt;
&lt;code&gt;Backups:&lt;/code&gt;&lt;br&gt;
Automated backups enabled.&lt;br&gt;
PITR configuration (WAL archiving).&lt;br&gt;
&lt;code&gt;Monitoring:&lt;/code&gt;&lt;br&gt;
Enable metrics export (Prometheus/Grafana).&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>tutorial</category>
      <category>cloud</category>
      <category>database</category>
    </item>
    <item>
      <title>What is BigAnimal in PostgreSQL</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Wed, 24 Sep 2025 11:14:39 +0000</pubDate>
      <link>https://dev.to/aravinlinux/what-is-biganimal-in-postgresql-23cd</link>
      <guid>https://dev.to/aravinlinux/what-is-biganimal-in-postgresql-23cd</guid>
      <description>&lt;p&gt;&lt;strong&gt;BigAnimal is EnterpriseDB’s fully managed PostgreSQL Database-as-a-Service (DBaaS)&lt;/strong&gt;, designed to run in the public cloud (AWS, Azure, and soon GCP).&lt;br&gt;
Think it as &lt;strong&gt;PostgreSQL + EDB Enterprise features + Cloud-native integration&lt;/strong&gt;, all managed for you.&lt;/p&gt;
&lt;h5&gt;
  
  
  &lt;em&gt;Provides:&lt;/em&gt;
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fully managed PostgreSQL&lt;/strong&gt; clusters (deployment, scaling, patching, failover handled by EDB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choice of vanilla PostgreSQL or EDB Postgres Advanced Server (EPAS)&lt;/strong&gt; (Postgres with Oracle compatibility features).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-cloud &amp;amp; hybrid-cloud flexibility&lt;/strong&gt; (you can run on AWS or Azure, in your account or EDB’s).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High availability and disaster recovery&lt;/strong&gt; out-of-the-box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring, backup, scaling, and security&lt;/strong&gt; built-in.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;
  
  
  &lt;em&gt;When it is useful:&lt;/em&gt;
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Want PostgreSQL in the cloud but don’t want to manage installation, patching, HA setup, or monitoring manually.&lt;/li&gt;
&lt;li&gt;Want &lt;strong&gt;enterprise support and features&lt;/strong&gt; (e.g., Oracle migration, advanced replication, global failover).&lt;/li&gt;
&lt;li&gt;You need compliance and security controls (SOC2, GDPR, HIPAA, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How BigAnimal is Used
&lt;/h3&gt;

&lt;p&gt;BigAnimal acts like a &lt;strong&gt;cloud-native PostgreSQL service&lt;/strong&gt;, so usage is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You log into the BigAnimal console (or use API/CLI).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose:&lt;br&gt;
Cloud provider (&lt;strong&gt;AWS or Azure&lt;/strong&gt;).&lt;br&gt;
Database type (&lt;strong&gt;PostgreSQL or EPAS&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Deployment model:&lt;br&gt;
    1. &lt;strong&gt;EDB-owned account&lt;/strong&gt; (EDB manages the infra).&lt;br&gt;
    2. &lt;strong&gt;Customer-owned account&lt;/strong&gt; (runs inside your AWS/Azure subscription).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Connecting to the Database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;BigAnimal provides a connection string (DSN) like a normal PostgreSQL.&lt;/li&gt;
&lt;li&gt;You can use psql, PgAdmin, DBeaver, or applications with JDBC/ODBC.&lt;/li&gt;
&lt;li&gt;SSL/TLS enforced by default for secure connections.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Operations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scaling&lt;/strong&gt;: You can scale vertically (bigger nodes) or horizontally (read replicas).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High availability&lt;/strong&gt;: Standby nodes + automatic failover included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: Built-in dashboards, alerts, integration with Prometheus/Grafana.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backups&lt;/strong&gt;: Automated backups with PITR (Point-In-Time Recovery).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrades&lt;/strong&gt;: Click-button minor version upgrades; assisted major upgrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Role-based access, VPC peering, IP allowlists, encryption at rest/in transit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;BigAnimal provides a connection string like:&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql "host=localhost port=5432 dbname=mydb user=appuser password=***** sslmode=require"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>postgres</category>
      <category>cloud</category>
      <category>database</category>
      <category>aws</category>
    </item>
    <item>
      <title>Linux - Searching Commands</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Fri, 19 Sep 2025 10:36:52 +0000</pubDate>
      <link>https://dev.to/aravinlinux/linux-searching-commands-1neo</link>
      <guid>https://dev.to/aravinlinux/linux-searching-commands-1neo</guid>
      <description>&lt;h1&gt;
  
  
  Linux - Searching Commands
&lt;/h1&gt;

&lt;p&gt;This is Part 11 of the &lt;strong&gt;Linux CLI Commands&lt;/strong&gt; series.  &lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/linux-job-schedule-commands-1fif"&gt;Linux - Job Schedule Commands&lt;/a&gt;&lt;br&gt;
👉 First Part: &lt;a href="https://dev.to/aravinlinux/linux-system-commands-m68"&gt;Linux - System Commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Searching Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;ls -lrt -a&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- show the hidden files&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;ls -lart&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- show the hidden files&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;ls -lrt d*&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- starting files from d&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;echo&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- print statment&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;test -d file_name &amp;amp;&amp;amp; echo "dir" || echo "not-dir"&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;-- to check dir or not-dir&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;which file or dir&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- show the path&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;locate filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- show the full path (if locate is not work install updatedb)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;whereis filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- command path&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;what is command&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;-- it show the defination of the command&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -name filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find file or dir&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -iname filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- find files in upper case or in lower case&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -mmin -10 filename&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;-- to find 10 min before files and dir&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -mtime -10 filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find 10 days before files and dir&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -type f or d&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find files or dir&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -perm 644&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find file and dir in permission 644&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;.&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- current directory&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;~&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- home directory&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -size 690c&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find file in size 690&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;find -empty&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find empty files&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: &lt;br&gt;
-exec rm -rf {} \; &lt;em&gt;-- to remove file or dir&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;find -user user_name&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- find file or dir in a paticular user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find a word&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep -o findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- only that word (in lower case)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep -io findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- only that word (upper and lower case)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep -v findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- except that finding word (lower case)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep -iv findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- except that finding word (upper and lower)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep -c findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- count that word (in lower case)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;grep -ic findingword filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- count that word (in upper and lower case)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;egrep "word1|word2" filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find two word (in lower)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;egrep -i "word1|word2" filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find two word (in lower and upper)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;fgrep "," filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- find with special character&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;awk '{print $1}' finename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- print first field&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tr 's' '$' &amp;lt;inputfile&amp;gt; outputfile&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;--translate s to $ in outputfile&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tr -d 's' &amp;lt;inputfile&amp;gt; outputfile&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- delete s and store in outputfile&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tr 'ad' 'ba' &amp;lt;inputfile&amp;gt; outputfile&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- translate a to b and b to a&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;cut -b 1,2 filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- cut first and second bytes in a file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;cut -c 1,2 filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- cut first and second chara in a file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;cut -d ':' -f1&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- cut first column separated by ':'&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;cut -d ':' -f1,2&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- cut first and second field separated by ':'&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;sed&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- stream editor&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;sed 's/find/replace/g' filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- find and replace word that pressent&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;sed '3d' filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- delete third line in a file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;sed -n '2p' filename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- print the second line in a file&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>tutorial</category>
      <category>cli</category>
    </item>
    <item>
      <title>Linux - Job Schedule Commands</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Fri, 19 Sep 2025 10:35:11 +0000</pubDate>
      <link>https://dev.to/aravinlinux/linux-job-schedule-commands-1fif</link>
      <guid>https://dev.to/aravinlinux/linux-job-schedule-commands-1fif</guid>
      <description>&lt;h1&gt;
  
  
  Linux - Job Schedule Commands
&lt;/h1&gt;

&lt;p&gt;This is Part 10 of the &lt;strong&gt;Linux CLI Commands&lt;/strong&gt; series.  &lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/linux-file-transfer-commands-2kgn"&gt;Linux - File Transfer Commands&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/linux-searching-commands-1neo"&gt;Linux - Searching Commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Job Schedule Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;jobs&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to find the running jobs&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;sleep 5s &amp;amp;&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to run backround&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;-- see backround running process&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;fg&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- restart a stopped job&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;jobs -l&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- list jobs&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;jobs -r&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- show running jobs&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;jobs -s&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to stop jobs&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;nohup date&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- create a file called nohup.out and store the date output into that file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;crontab&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- is a long running process that execute commands at a specific date and time&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to create a crontab&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;crontab -l&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to list crontab&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;crontab -r&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to remove crontab&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: min hor date month week /file/path &amp;gt; output.file&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>cli</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Linux - File Transfer Commands</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Fri, 19 Sep 2025 10:33:01 +0000</pubDate>
      <link>https://dev.to/aravinlinux/linux-file-transfer-commands-2kgn</link>
      <guid>https://dev.to/aravinlinux/linux-file-transfer-commands-2kgn</guid>
      <description>&lt;h1&gt;
  
  
  Linux - File Transfer Commands
&lt;/h1&gt;

&lt;p&gt;This is Part 9 of the &lt;strong&gt;Linux CLI Commands&lt;/strong&gt; series.  &lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/linux-root-commands-41hc"&gt;Linux - Root Commands&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/linux-job-schedule-commands-1fif"&gt;Linux - Job Schedule Commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;File Transfer Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;scp&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- secure copy protocol&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;ssh&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- secure shell&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;scp filename user_name@ip_address:/path/&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;--&amp;gt; transfer a file to other user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;ssh user_name@ip_address&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;--&amp;gt; remote access&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note:&lt;br&gt;
systemctl disable firewalld&lt;br&gt;
systemctl enable firewalld&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>linux</category>
      <category>networking</category>
      <category>tutorial</category>
      <category>cli</category>
    </item>
    <item>
      <title>Linux - Root Commands</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Fri, 19 Sep 2025 10:28:18 +0000</pubDate>
      <link>https://dev.to/aravinlinux/linux-root-commands-41hc</link>
      <guid>https://dev.to/aravinlinux/linux-root-commands-41hc</guid>
      <description>&lt;h1&gt;
  
  
  Linux - Root Commands
&lt;/h1&gt;

&lt;p&gt;This is Part 8 of the &lt;strong&gt;Linux CLI Commands&lt;/strong&gt; series.  &lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/linux-compress-commands-4nhj"&gt;Linux - Compress Commands&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/linux-file-transfer-commands-2kgn"&gt;Linux - File Transfer Commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Root Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;su - root&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- switch user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;su  root&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- swith user in the current path&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;useradd username&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to create a user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;passwd username&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to set a passwd for that user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;useradd -g primary_group_name user_name -G Sub_group_name&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- use to create user and add primary and secondary group&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;usermod -g primary_group_name user_name -G Sub_group_name&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to add primary and secondary group for the user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;usermod -c&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- modify the content of the user&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;usermod -e&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- modify the date&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;usermod -l&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- modify user name&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;userdel -f&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- remove user while login&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;userdel -r&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- remove user and home path&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;groupadd group_name&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to creata a group&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;groupdel group_name&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to delete group&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;cat /etc/passwd&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to check users&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;cat /etc/group&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to check group&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;fdisk -l&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- for list out the disk&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- other users can access the root commands&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;vi /etc/sudoers&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- add users in this sudoers file to access the root commands&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>cli</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Linux - Compress Commands</title>
      <dc:creator>Aravin</dc:creator>
      <pubDate>Fri, 19 Sep 2025 10:26:26 +0000</pubDate>
      <link>https://dev.to/aravinlinux/linux-compress-commands-4nhj</link>
      <guid>https://dev.to/aravinlinux/linux-compress-commands-4nhj</guid>
      <description>&lt;h1&gt;
  
  
  Linux - Compress Commands
&lt;/h1&gt;

&lt;p&gt;This is Part 7 of the &lt;strong&gt;Linux CLI Commands&lt;/strong&gt; series.  &lt;/p&gt;

&lt;p&gt;👉 Previous: &lt;a href="https://dev.to/aravinlinux/linux-link-commands-3a0"&gt;Linux - Link Commands&lt;/a&gt;&lt;br&gt;
👉 Next: &lt;a href="https://dev.to/aravinlinux/linux-root-commands-41hc"&gt;Linux - Root Commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Compress Commands&lt;/strong&gt;
&lt;/h2&gt;

&lt;h4&gt;
  
  
  zip,gzip,tar
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;zip newfilename file1 dir1 file2&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- compress the files and directory&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;unzip newfilename&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- To unzip the file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;gzip filename&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;-- to compress the zip files&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;gunzip&lt;/code&gt;&lt;/strong&gt;  &lt;em&gt;-- to unzip the gzip&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tar -cvf&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to create a tar file &lt;code&gt;eg: file.tar&lt;/code&gt;&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tar -tcf&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to list a tar file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tar -xvf&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to extract a tar file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tar -cvzf&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to create a tar file and compress &lt;code&gt;eg: file.tar.gz&lt;/code&gt;&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tar -tczf&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to list a compressed tar file&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;tar -xvzf&lt;/code&gt;&lt;/strong&gt; &lt;em&gt;-- to extract a compressed tar file&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>cli</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
