<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[DevSecOps]]></title><description><![CDATA[DevSecOps]]></description><link>https://bhanudevsr211230.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 18 Jun 2026 23:21:19 GMT</lastBuildDate><atom:link href="https://bhanudevsr211230.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Master-Slave in Jenkins]]></title><description><![CDATA[This will be one of the most important concept in entire jenkins
Why do we need to implement Master and Slave concept in simple words:
Suppose if we create any job in jenkins dashboard, by default we ]]></description><link>https://bhanudevsr211230.hashnode.dev/master-slave-in-jenkins</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/master-slave-in-jenkins</guid><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Fri, 13 Mar 2026 07:20:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/1b9674f8-ca38-4196-9ce1-93908a4f0624.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This will be one of the most important concept in entire jenkins</p>
<h3><strong>Why do we need to implement Master and Slave concept in simple words:</strong></h3>
<p>Suppose if we create any job in jenkins dashboard, by default we will execute that pipeline in jenkins CI/CD server,</p>
<p>By default, <mark class="bg-yellow-200 dark:bg-yellow-500/30">we can run 2 pipelines simultaneously on the Jenkins server</mark>. <strong>how we can say we can only run 2 pipelines at a time on jenkins server?</strong> if you observe keenly, in jenkins dashboard, you can check the no. of executors is 2, these executors can helps us to execute the pipelines.</p>
<p>If we increase executors to more than 10, there will be performance issues on the server, depending on the instance type. For example, if there are 2 vCPUs and 1 GB of RAM in a t3 micro or similar, increasing executors further may cause the server to crash due to performance issues. Because the server size is small and the pipelines are large, the server can crash. For that reason, we need to implement the master and slave server concept.</p>
<h3>What exactly is Master and Slave?</h3>
<p>suppose we have 10 pipelines, if we execute 10 pipelines at a time on a single server, then server may crash due to max load on single server. for that reason, we will create 5 Slave Servers .</p>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">Note</mark>: By default, there will be 2 executors in each pipeline.</p>
<p>So, we will create 5 slave servers, each slave server contains 2 pipelines, allowing all 10 pipelines to be executed across 5 different slave servers. This way, no maximum load will be placed on the single server, as the load will be distributed across each slave server. at a time, 10 pipelines are executed now. but here is the note, we will not install jenkins on each slave server. <strong>Jenkins is installed only on the master server. and here, we need to connect each slave server with master server.</strong> each master and slave server should have <mark class="bg-yellow-200 dark:bg-yellow-500/30">ssh connection</mark>.</p>
<p>due to this master and slave server connection, we can run any pipeline on any slave server.</p>
<p><strong>The master server is the one where Jenkins is installed</strong>, and the <strong>slave server refers to the worker node that performs tasks assigned by the master node</strong>. The master server assigns tasks to the slave servers and manages them, essentially acting as their manager.</p>
<h3>Master and Slave servers In Practical way</h3>
<p>How do we know in which server our pipeline is running?</p>
<p>if it is showing default path of jenkins like this <strong>/var/lib/jenkins/workspace/</strong> in console output**.** then we do know that, that pipeline is running on master server.</p>
<p>To connect slave server with the master server, then we need to <mark class="bg-yellow-200 dark:bg-yellow-500/30">install jenkins dependency that is </mark> <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Java 21</mark></strong> <mark class="bg-yellow-200 dark:bg-yellow-500/30">on slave server</mark>.</p>
<p>the command to install java 21 is <strong>yum install java-21-amazon-corretto -y</strong></p>
<p>To check whether java is installed or not, the command is <strong>java -version</strong></p>
<h3><strong>How to connect slave server with master server in practical guide</strong></h3>
<p>in manage jenkins in jenkins dashboard, there will be a popup displaying like setup agent, click on it, or else you can also go through nodes in manage jenkins and click on new node</p>
<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/3de48dba-5c4a-409e-bee6-d62f51fa0ec2.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/51f6770e-d8b5-440b-8e90-f35a3039a30d.png" alt="" style="display:block;margin:0 auto" />

<p>if we execute any pipeline on master server, then workspace will be created on default storage path, that is <strong>/var/lib/jenkins/</strong></p>
<p>but if we execute any pipeline on slave server, then workspace will be created on this path, <strong>/home/ec2-user/myjenkins/</strong> but if you observe, myjenkins does not exist, but it will be automatically created.</p>
<p>if we try to remove it,</p>
<h3>How to bring executors to online?</h3>
<p>execute the below commands:</p>
<p>sudo mkdir -p /var/tmp_disk</p>
<p>sudo chmod 1777 /var/tmp_disk</p>
<p>sudo mount --bind /var/tmp_disk /tmp</p>
<p>echo '/var/tmp_disk /tmp none bind 0 0' | sudo tee -a /etc/fstab</p>
<p>sudo systemctl mask tmp.mount</p>
<h3>How do we run the same job that was running on the master server on the slave server?</h3>
<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/5167d5b0-1531-490b-afd7-6915061a3669.png" alt="" style="display:block;margin:0 auto" />

<p>You need to assign the same matching label that was given to the slave server. we have previously checked the label as build should happen only when matching this label.</p>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">Note:</mark> to execute the pipeline on slave server, you need to install <strong>git</strong> on slave server.</p>
<h3>Build &amp; Unit Test</h3>
<p>add maven in manage jenkins tools, and integrate maven in build steps of your job</p>
<h3>Deployment</h3>
<p>install tomcat in appserver and install deploy to container plugin in jenkins, then in post build actions integrate it.</p>
<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/93fafc44-0502-43a8-b03b-1d8da05b13e3.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/fd6b0f84-795b-4484-ad9c-ffca4afa8a67.png" alt="" style="display:block;margin:0 auto" />

<h1>How to manage your Tomcat now</h1>
<h3>Stop Tomcat</h3>
<pre><code class="language-plaintext">/root/apache-tomcat-9.0.115/bin/shutdown.sh
</code></pre>
<h3>Start Tomcat</h3>
<pre><code class="language-plaintext">/root/apache-tomcat-9.0.115/bin/startup.sh
</code></pre>
<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/4a1b7ccf-8a4c-496a-a40b-900f11706f12.png" alt="" style="display:block;margin:0 auto" />]]></content:encoded></item><item><title><![CDATA[Application Deployment through Jenkins]]></title><description><![CDATA[step by step execution process for CI/CD:
Code (Developer writes the code on their local system) => GitHub (once the code is ready, they push it to the central repository) => CI/CD(with that code, nee]]></description><link>https://bhanudevsr211230.hashnode.dev/application-deployment-through-jenkins</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/application-deployment-through-jenkins</guid><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Wed, 25 Feb 2026 21:22:55 GMT</pubDate><enclosure url="https://cloudmate-test.s3.us-east-1.amazonaws.com/uploads/covers/68b549eef1119ae4dd7343c7/0f5f2089-a5fc-44b3-bc94-205004acfd8f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>step by step execution process for CI/CD:</p>
<p><strong>Code</strong> (Developer writes the code on their local system) =&gt; <strong>GitHub</strong> (once the code is ready, they push it to the central repository) =&gt; <strong>CI/CD</strong>(with that code, need to implement CI/CD to bring source code, and build and unit test), <strong>Application Server such as TOMCAT, JBOSS, GLASS FISH, WEB SPHERE</strong> (used to run the applications)</p>
<p>We need two servers here, one for CI/CD to retrieve the source code from Git, then build and test it, and another server is application server to run the applications.</p>
<h3><strong>Behind the Scenes of CI/CD Automation</strong></h3>
<p><strong>Developers</strong> job is to write source code and push it to git, then devops engineer will create CI/CD Server to create the pipeline which is used retreive that source code from github and also to perform build and unittest the code. here jenkins is a CI/CD tool which is used for automation of this complete process.</p>
<p>There is a tool called Maven in Jenkins, which is used to perform build and unit tests on the code. Through Maven, there is a command that automatically <strong>compiles the code</strong>, runs <strong>unit tests</strong>, and <strong>packages the app, generating a WAR file (for java app)</strong>.</p>
<p>WAR file contains the application code and its dependencies. If we place the WAR file on the application server, our application will be deployed.</p>
<h3>How to enable Maven in jenkins?</h3>
<p>Maven is a built-in default plugin in Jenkins. To enable Maven, go to Manage Jenkins =&gt; Tools =&gt; Maven Installations =&gt; Add Maven =&gt; given any name for maven then save it.</p>
<p>If you don't see the Maven version in Add Maven, go to <a href="https://downloads.apache.org/maven/">https://downloads.apache.org/maven/</a> and check the version. Use the latest version.</p>
<p>Then go to Jenkins dashboard =&gt; your Jenkins job =&gt; configure =&gt; Build Steps =&gt; Source Code Management. If Source Code Management is already done, go to Build Steps =&gt; Add build steps =&gt; Invoke top-level Maven targets =&gt; select Maven version =&gt; Goals: clean package (clean package means it will delete any previous WAR files and start code compilation, perform unit tests, and package the app freshly so that new war file will be generated).</p>
<h3>How to bring executors back online?</h3>
<p>If disk space is below the threshold and there isn't enough space left, your node executors will go offline. How can you fix it?</p>
<p><strong>execute the following commands:</strong></p>
<p>sudo mkdir -p /var/tmp_disk</p>
<p>sudo chmod 1777 /var/tmp_disk</p>
<p>once after executing the following commands then need to restart the jenkins dashboard and check the executors status.</p>
<p><strong>command to install Git:</strong> yum install git -y</p>
<h3>How to check whether the build and unit tests were done successfully with Maven?</h3>
<p>Go to the workspace in your job and check if the target folder is there. If you click on the target folder, the WAR file will be present.</p>
<p>whenever you have done the maven build, then target folder will be created automatically.</p>
<p><strong>Create seperate server for running application server</strong></p>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">Note: </mark> whatever security group you have taken for jenkins, the same security group need to taken for tomcat also.</p>
<p>yum install java-17-amazon-corretto -y wget <a href="https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz">https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz</a> tar -zxvf apache-tomcat-9.0.115.tar.gz sed -i '56 a' apache-tomcat-9.0.115/conf/tomcat-users.xml sed -i '57 a' apache-tomcat-9.0.115/conf/tomcat-users.xml sed -i '58 a' apache-tomcat-9.0.115/conf/tomcat-users.xml sed -i '59 a' apache-tomcat-9.0.115/conf/tomcat-users.xml sed -i '56d' apache-tomcat-9.0.115/conf/tomcat-users.xml sed -i '21d' apache-tomcat-9.0.115/webapps/manager/META-INF/context.xml sed -i '22d' apache-tomcat-9.0.115/webapps/manager/META-INF/context.xml sh apache-tomcat-9.0.115/bin/<a href="http://startup.sh">startup.sh</a></p>
<p>the above script you need to install in your application server.</p>
<p>note: to check tomcat version is available or not, go to this site, <a href="https://downloads.apache.org/">https://downloads.apache.org/</a></p>
<p>and then check tomcat version if it matches with tomcat version which was in above mentioned script.</p>
<h3>How to access the tomcat dashboard?</h3>
<p>Along with the server IP and port 8080, for example: 54.242.234.24:8080</p>
<p>Click on manager app in tomcat dashboard =&gt; signin =&gt; for username and password, check the script you have executed previously, it will be there in tomcat script. you can search for username and password in above tomcat installation script. username="tomcat" password="admin<a href="https://hashnode.com/@YIyue" class="user-mention" data-type="mention" title="123">123</a></p>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">Now the next step is to retrieve the app server packaged file (the war file) into the Tomcat server. for that, you need to install one plugin.</mark></p>
<h3><strong>How to install Plugin in jenkins?</strong></h3>
<p>go to Manage jenkins =&gt; plugins =&gt; Available plugins =&gt; search for deploy to container plugin and then select and install it.</p>
<p>its time for deployment, so you need to select <strong>post build actions</strong> in configure, follow the steps:</p>
<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/a67abdcd-f43b-426a-9eb2-be2e997b2744.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/68b549eef1119ae4dd7343c7/e13c7b13-8767-405e-8458-9e434fc6760e.png" alt="" style="display:block;margin:0 auto" />

<p>now refresh the tomcat base url, then check the project by clicking on project name</p>
]]></content:encoded></item><item><title><![CDATA[Chapter-3: Scheduling Pipelines/Jobs in jenkins]]></title><description><![CDATA[Cron: Cron is a syntax which is used to schedule a particular task, which means it will perfom all activities in that job.
Cron Syntax:
It has 5 starts * * * * *
1st star represents - no. of minutes
2]]></description><link>https://bhanudevsr211230.hashnode.dev/chapter-3-scheduling-jobs-in-jenkins</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/chapter-3-scheduling-jobs-in-jenkins</guid><category><![CDATA[Jenkins]]></category><category><![CDATA[ Jenkins, DevOps]]></category><category><![CDATA[jenkins pipeline]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[#Devopscommunity]]></category><category><![CDATA[DevOps trends]]></category><category><![CDATA[Pipeline]]></category><category><![CDATA[ci-cd]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Fri, 20 Feb 2026 05:08:37 GMT</pubDate><enclosure url="https://cloudmate-test.s3.us-east-1.amazonaws.com/uploads/covers/68b549eef1119ae4dd7343c7/be38049a-b714-4a37-a137-81726a3b116b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Cron:</strong> Cron is a syntax which is used to schedule a particular task, which means it will perfom all activities in that job.</p>
<h3>Cron Syntax:</h3>
<p>It has 5 starts * * * * *</p>
<p><strong>1st star</strong> represents - <strong>no. of minutes</strong></p>
<p><strong>2nd star</strong> represents - <strong>Hours</strong></p>
<p><strong>3rd star</strong> represents - <strong>Day in a month (Date)</strong></p>
<p><strong>4th star</strong> represents - <strong>Month in a year</strong></p>
<p><strong>5th star</strong> represents - <strong>Day in a week</strong></p>
<p>suppose you want your pipeline to be build at some scheduled time, this is the format of cron jon syntax, you should follow to write the cron job for suppose march 14, 2026 date at around evening 5:26</p>
<p>Note: sunday will start from 00 in cron job syntax</p>
<p>Cron job for the above time: <strong>26 17 14 03 06</strong></p>
<p><strong>Note</strong>: Jenkins will not follow IST</p>
<p><strong>How to change timezone of jenkins ?</strong></p>
<p>Go to jenkins settings =&gt; Preferences =&gt; timezone =&gt; for example IST</p>
<p><strong>Note:</strong> After updating the timezone, you need to restart the jenkins server and login again.</p>
<p><strong>How to schedule cron job in jenkins?</strong></p>
<p>Triggers =&gt; Build Periodically =&gt; Schedule =&gt; write cronjob</p>
<p><strong>To build job for every minute</strong>: * * * * *</p>
<p><strong>To build job for every 2 minutes</strong>: */2 * * * *</p>
<p><strong>To build job for every 2 hours</strong>: * */2 * * *</p>
<h3>Poll SCM:</h3>
<p>By using pollscm also, we can schedule to build the jobs.</p>
<ul>
<li><em>* 9-17</em> * * * (for every minute in those duration of 9am to 5pm <em>if there's any change in code, it's going to trigger the pipeline)</em></li>
</ul>
<h3>Difference between poll scm and build periodically?</h3>
<p>Build periodically will execute the build because it is scheduled; it is not linked with the code.</p>
<p>Poll SCM will trigger the pipeline only when a developer makes any changes during the scheduled time, for example, 9-17., it is completely depends upon developers commits.</p>
<h3>How to delete old builds from dashboard?</h3>
<p>To discard Old Builds in jenkins dashboard, Go to jenkins dashboard =&gt; configure =&gt; General =&gt; click on discard old builds option,</p>
<p>give the no of days to keep builds, for example 3 days</p>
<p>max no. of builds to keep, top 5 builds</p>
<h3>Throttle builds:</h3>
<p>Throttle builds means that when you build one pipeline, you can only start the next pipeline after a certain amount of time has passed since the first build. For example, you might wait 5 minutes after completing the first build before starting the second one.</p>
<p>This will be useful to minimize the multiple builds at a time when 2 or more developers have a access to that pipeline and to avoid the server crash. basically throttle build is a queue process of pipeline builds.</p>
<h3>Build after other projects are built:</h3>
<p>Let's suppose we have four pipelines for each build: one for code, one for build, one for testing, and another for deployment. It will build a pipeline only after the previous one succeeds.</p>
<p>We can decide whether it can proceed to the next build even if it fails, based on the requirement.</p>
<h2>Build Types:</h2>
<ol>
<li><p>Poll scm</p>
</li>
<li><p>webhooks</p>
</li>
<li><p>build periodically</p>
</li>
<li><p>throttlebuilds</p>
</li>
<li><p>Build after other projects are built</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Webhook integration with Jenkins]]></title><description><![CDATA[Jenkins Terminology:
Job: Job is a task we are going to perform in jenkins.
There are different types of jobs in jenkins:

freestyle

pipeline

multibranch-pipeline, etc…


Source Code Management
here]]></description><link>https://bhanudevsr211230.hashnode.dev/webhook-integration-with-jenkins</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/webhook-integration-with-jenkins</guid><category><![CDATA[Jenkins]]></category><category><![CDATA[ Jenkins, DevOps]]></category><category><![CDATA[jenkins pipeline]]></category><category><![CDATA[Jenkins-installation]]></category><category><![CDATA[ci-cd]]></category><category><![CDATA[CI/CD]]></category><category><![CDATA[Continuous Integration]]></category><category><![CDATA[continuous deployment]]></category><category><![CDATA[continuous delivery]]></category><category><![CDATA[CI/CD pipelines]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Wed, 18 Feb 2026 18:57:42 GMT</pubDate><enclosure url="https://cloudmate-test.s3.us-east-1.amazonaws.com/uploads/covers/68b549eef1119ae4dd7343c7/bb4df61a-15bd-4b31-aba1-2ceea4294419.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Jenkins Terminology:</h2>
<p><strong>Job:</strong> Job is a task we are going to perform in jenkins.</p>
<p>There are different types of jobs in jenkins:</p>
<ol>
<li><p>freestyle</p>
</li>
<li><p>pipeline</p>
</li>
<li><p>multibranch-pipeline, etc…</p>
</li>
</ol>
<p><strong>Source Code Management</strong></p>
<p>here, we are going to select the tool you are using for source code management.</p>
<p><mark>Note</mark>: we must use https while providing github url, Jenkins will not supports to SSH.</p>
<ol>
<li><p><strong>Repository URL:</strong> here you need to add your project github repo url.</p>
</li>
<li><p><strong>Credentials:</strong> we don’t need to provide credentials if it is public repo as we know it.</p>
</li>
<li><p><strong>Branches to build:</strong> add the branch where your project code exists to build.</p>
</li>
</ol>
<p>After adding all the required data in the Jenkins task board, if you build the source code now, all your code will go from the repo to the CI server, once it is done, it will show you the indicator either sucess of fail.</p>
<p>you can check in <strong>workspace</strong> tab, whether your code is there or not after successful task build.</p>
<p>you can check the code after successfull completion of task in 2 ways:</p>
<ol>
<li><p>Jenkins UI</p>
</li>
<li><p>in your server by going into the default path of jenkins</p>
</li>
</ol>
<h3>Default path of Jenkins:</h3>
<p><mark>/var/lib/jenkins</mark></p>
<p>whenever you perform any task, that task info will be stored in this path only <strong>/var/lib/jenkins/workspace</strong></p>
<p>Step1:</p>
<p><strong>To Generate the token in Github for private repo:</strong></p>
<p>Click on GIthub Profile → Settings → Developer Settings → Personal Access Tokens → Select the Class Tokens →Generate new token (Classic)</p>
<p>Select repo &amp; then generate token</p>
<p>Step2:</p>
<p>you need to add credentials of private repo in jenkins</p>
<p>Select Add credentials =&gt; username with password =&gt; ID (ex: github-token) =&gt; ID (github username) Desc (github password)</p>
<p>Now build the pipelines to send all the GitHub changes to the CI Server. Note that this is a manual process of building pipelines because every time you need to build the pipeline to send GitHub changes to the CI Server. To automate the process, you need to implement webhooks so that whenever developer pushes those changes, the webhooks will trigger, and the pipeline builds to automate the process.</p>
<p>it may be either webhooks, pollscm, or build periodically to automate the build process.</p>
<h3>Integration of Webhooks:</h3>
<p>Step 1: <strong>Adding webhook steps in github</strong></p>
<p>Github Repo Settings =&gt; Webhooks =&gt; Add webhook =&gt; in payload url, you need to provide your jenkins server url like in this format <a href="http://54.90.72.68:8080/"><strong><mark>http://54.60.12.18:8080/</mark></strong></a><strong><mark>github-webhook/</mark></strong> =&gt; application format should be in json format =&gt; add webhook. once it is added, then you can refresh the page and check, webhook was added successfully or not'</p>
<p>Step 2: <strong>Configure webhook in job of jenkins</strong></p>
<p>Click on configure in jenkins dashboard =&gt; triggers =&gt; check this option “GitHub hook trigger for GITScm polling” (only if you select this option, then only webhook will be activate from jenkins job also)</p>
<p><strong>Note:</strong> if any pipeline builds automatically without human interaction, then we can call it as <mark>trigger</mark> in technical terms.</p>
<h3>Scenarios of pipeline failures:</h3>
<p>To edit the job, click on configure</p>
<ol>
<li><p>wrong Repo Url</p>
</li>
<li><p>wrong branch name</p>
</li>
<li><p>wrong credentials</p>
</li>
<li><p>check the error or stderror message in console output logs</p>
</li>
<li><p>check the token expired or not</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Linux in one liners]]></title><description><![CDATA[1. Linux → the kernel, not the full operating system. It talks to hardware.
2. Kernel → controls CPU, memory, disk, network. The brain of the system.
3. Operating System → kernel + tools + libraries + apps.
4. Distribution (Distro) → Linux kernel bun...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-in-one-liners</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-in-one-liners</guid><category><![CDATA[Linux]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><category><![CDATA[Devops]]></category><category><![CDATA[DevSecOps]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Sun, 08 Feb 2026 13:34:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1770557136421/88679874-9d3b-49d8-bc3f-a9cae8af2e09.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>1. <strong>Linux</strong> → the kernel, not the full operating system. It talks to hardware.</p>
<p>2. <strong>Kernel</strong> → controls CPU, memory, disk, network. The brain of the system.</p>
<p>3. <strong>Operating System</strong> → kernel + tools + libraries + apps.</p>
<p>4. <strong>Distribution (Distro)</strong> → Linux kernel bundled with tools. Example: Ubuntu, CentOS.</p>
<p>5. <strong>GNU Tools</strong> → basic commands like ls, cp, grep. This is why people say GNU/Linux.</p>
<p>6. <strong>Terminal</strong> → where you type commands.</p>
<p>7. <strong>Shell</strong> → program that reads your commands. Bash is common.</p>
<p>8. <strong>File System</strong> → everything starts from /. No drive letters.</p>
<p>9. <strong>Root User</strong> → admin user with full control.</p>
<p>10. <strong>Permissions</strong> → decide who can read, write, or run files.</p>
<p>11. <strong>Process</strong> → a running program.</p>
<p>12. <strong>Service</strong> → program running in background.</p>
<p>13. <strong>Package Manager</strong> → installs software. apt, yum, dnf.</p>
<p>14. <strong>SSH</strong> → connect to another machine securely.</p>
<p>15. <strong>Logs</strong> → files that record system activity and errors.</p>
]]></content:encoded></item><item><title><![CDATA[Chapter 1: Introduction to Jenkins]]></title><description><![CDATA[Before moving on to Jenkins, we have to get to know about CI/CD.
Continuous Integration:
continuos integration is nothing but both build and test happens at same time, it is combination of continuos b]]></description><link>https://bhanudevsr211230.hashnode.dev/chapter-1-introduction-to-jenkins</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/chapter-1-introduction-to-jenkins</guid><category><![CDATA[Jenkins]]></category><category><![CDATA[jenkins pipeline]]></category><category><![CDATA[ Jenkins, DevOps]]></category><category><![CDATA[Pipeline]]></category><category><![CDATA[ci-cd]]></category><category><![CDATA[CI/CD]]></category><category><![CDATA[Continuous Integration]]></category><category><![CDATA[continuous deployment]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Sun, 08 Feb 2026 13:04:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1770447195819/6965a60c-6059-4a93-9947-9092b3d3f17c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Before moving on to Jenkins, we have to get to know about CI/CD.</p>
<h2>Continuous Integration:</h2>
<p>continuos integration is nothing but both <strong>build and test happens at same time</strong>, it is combination of continuos build and test.</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1770445812270/dff7f3cb-bdb7-4925-966b-f3ba7d2d447f.png" alt="" style="display:block;margin:0 auto" />

<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">Before CI</mark></strong>, imagine one developer <strong>wrote code</strong>, <strong>pushed it to GitHub</strong>, and then another developer would then clone the codebase and <strong>install the required app dependencies</strong> and <strong>build or compile the code</strong> manually and <strong>package the app</strong>. Then the QA team would execute <strong>unit tests</strong>. If any issue was found during testing, the code was sent back to developer one for fixing. Once they fixed it, the same cycle would be repeated, such as rebuilding, retesting, and repackaging. All this was a manual process, involving repetition of the same tasks. Here, the entire process was done manually, and it was time-consuming as if app size grew.</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">After CI</mark></strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">,</mark> developers <strong>write code</strong> and <strong>push it to GitHub</strong>. Whenever code is pushed to GitHub, CI server will be automatically triggers through webhook. CI Server then <strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">automatically </mark> build the application, and executes automated tests.</strong> At this point, both build and test are automatically performed at the same time. If the test fails, developers fix it and CI server will be retriggers automatically, where the CI server will automatically perform the rebuild and retest. Here, the entire process is done through automation.</p>
<h2>Continuos Delivery:</h2>
<p>Continuos delivery is nothing but <strong>manual deployment</strong> process.</p>
<p>Continuous delivery means the application is always kept ready for release. The code is automatically built, tested, and prepared through pipelines, but the final deployment to production is done manually when the team decides to release.</p>
<h2>Continuos Deployment:</h2>
<p>Continuos delivery is nothing but <strong>automation deployment</strong> process.</p>
<p>Continuous deployment goes one step further. After the code passes all automated tests, it is automatically deployed to production without manual approval. Every successful change can reach users quickly through full automation.</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1770476820539/7b497d98-dd57-4182-8742-3052e2b02487.png" alt="" style="display:block;margin:0 auto" />

<h2>What is Pipeline?</h2>
<p>Pipeline is used to automate the process of code, build, test and deployment stages, we need a tool to create the pipeline to automate the deployment process. <strong>Jenkins, Gitlab, Github actions, AWS Code pipelines, Travis CI, Circle CI, Harness, Teamcity</strong> are such CI/CD tools which is used to manage the pipelines.</p>
<h2>What is Jenkins?</h2>
<p>Jenkins is a CI/CD tool which is used to build and manage the pipelines to automate the Software Development Life Cycle(SDLC).</p>
<p>Jenkins follows <strong>Master-Slave</strong> Architecture. it is the main feature in jenkins tool.</p>
<h3>Master &amp; Slave Concept explanation in simple way:</h3>
<p>Here, master and slave are servers. Think of the master server as a manager who assigns work to team members, and the slave servers as the ones who actually do the work. Whatever tasks they receive, they will complete. Without the master and slave server concept, if we run all our applications on one server, it may crash due to heavy load. Instead, we can divide it into two servers: the master server (which manages all slave servers) and the slave server (which performs the tasks). Each slave server is responsible for running the pipeline assigned to it, but managing the pipeline is the responsibility of the master server. master server is where Jenkins runs.</p>
<p>We will use the master and slave server concept to spread the server load across different slave server pipelines as the application grows and has many services to run.</p>
<h3>Connection Guide of Jenkins:</h3>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">8080 </mark> is the default Jenkins port.</p>
<p>To get access of jenkins dashboard, you can access with your <strong>server public ip</strong> and <strong>jenkins port</strong>, example: public-ip:8080.</p>
<p>Suppose your server is in <strong>AWS EC2</strong> and it has:</p>
<ul>
<li><p>Private IP → <code>172.31.40.25</code></p>
</li>
<li><p>Public IP → <code>13.233.120.55</code></p>
</li>
</ul>
<h3>Important Note (Security Group):</h3>
<p>When you request the Jenkins dashboard URL:</p>
<p>Before the request reaches the server, it first passes through the <strong>Amazon Web Services (AWS) Security Group</strong> attached to the EC2 instance.</p>
<p>The Security Group checks:</p>
<ul>
<li><p>Whether <strong>port 8080</strong> is allowed in the <strong>Inbound Rules</strong></p>
</li>
<li><p>Whether your IP address is allowed to access it</p>
</li>
</ul>
<p>If port 8080 is allowed, then the server gives access to the Jenkins dashboard.</p>
<p>If port 8080 is NOT allowed, the browser will show:</p>
<ul>
<li><p>Timeout error</p>
</li>
<li><p>Site can't be reached</p>
</li>
</ul>
<p>This is the flow of how url request to the server:</p>
<p><strong>Browser → Internet → Security Group → EC2 → Jenkins → Response</strong></p>
<p><mark class="bg-yellow-200 dark:bg-yellow-500/30">You need to give 8080 port in inbound rules of aws security group, to get access to jenkins dashboard.</mark></p>
<h3>What is TCP?</h3>
<p>TCP stands for Transmission Control Protocol. It is a communication protocol that allows data to travel <strong>safe and sceurely</strong> through internet.</p>
<h3>Commands to install Jenkins:</h3>
<p>you can create any file and copy the jenkins script but filename should be ends with <strong>.sh</strong> represents scripting file.</p>
<p>if not file, you can directly execute the script without adding the script in file.</p>
<h3>Execute Jenkins file:</h3>
<p><strong>sh jenkins.sh:</strong> Here, jenkins is the filename, you can use any name you want.</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">systemctl status jenkins:</mark></strong> Command to Check whether jenkins is in running state or not</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">systemctl start jenkins:</mark></strong> Command to start the jenkins server</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">systemctl stop jenkins:</mark></strong> Command to stop the jenkins server</p>
<p><strong><mark class="bg-yellow-200 dark:bg-yellow-500/30">systemctl restart jenkins:</mark></strong> Command to restart the jenkins server</p>
]]></content:encoded></item><item><title><![CDATA[Chapter 3: Understanding Git Branches and Branching Workflows]]></title><description><![CDATA[What does Git branching means in general?
In simple terms, Git branch is like making a copy of the current working code, which we can call v1. Instead of changing the original code directly in v1 on the same branch, we create a new branch from the ex...]]></description><link>https://bhanudevsr211230.hashnode.dev/chapter-3-understanding-git-branches-and-branching-workflows</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/chapter-3-understanding-git-branches-and-branching-workflows</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[Gitcommands]]></category><category><![CDATA[GitLab]]></category><category><![CDATA[version control]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Mon, 02 Feb 2026 05:42:11 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1770010839402/8b8d457f-9fd7-44dc-aec3-f4df22362830.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-what-does-git-branching-means-in-general">What does Git branching means in general?</h3>
<p>In simple terms, Git branch is like making a copy of the current working code, which we can call v1. Instead of changing the original code directly in v1 on the same branch, we create a new branch from the existing one, and all the existing code is automatically copied to the new branch. You can then modify the code in this copied version as needed. If everything works as expected after testing, you can deploy this version as v2 in the new branch. Finally, you merge this new branch with the existing one. This is the concept of branch workflow.</p>
<ul>
<li>By default <strong>master</strong> is the <strong>default branch</strong> in git.</li>
</ul>
<h3 id="heading-listing-branches">Listing Branches</h3>
<p><strong>git branch:</strong> to see all the list of branches.</p>
<p><mark>Note</mark>: If we don't make an initial commit, then default branch will not be shown.</p>
<p><mark>Note</mark>: whenever we create a new branch from existing branch, then only <strong>committed files</strong> will be cloned in new branch.</p>
<h3 id="heading-create-new-branch">Create new branch</h3>
<p><strong>git branch branchname:</strong> to create the new branch.</p>
<h3 id="heading-switching-the-branch">Switching the branch</h3>
<p><strong>git checkout branchname:</strong> to switch any specific branch</p>
<h3 id="heading-merging-branches">Merging branches</h3>
<p><strong><mark>note</mark>:</strong> to merge any branch, you need to checkout to default branch that is master branch, then only you can merge.</p>
<p><strong><mark>note</mark>:</strong> you are creating files on server, so whatever file you created in any specific branch, same file will be replicated in all branches irrespective of on which branch, you’ve created it.</p>
<p>only once you commited that file, then that file will not replicate it on all branches, it will exist only on that specific branch.</p>
<p><strong>git merge branchname:</strong> combines two branches and <strong>keeps all commits exactly as they were</strong>, adding one extra merge commit.</p>
<p><strong>git rebase branchname:</strong> <strong>moves your current branch’s commits on top of another branch</strong> without creating a merge commit.</p>
<p><strong>Difference between rebase and merge:</strong><br /><code>git merge</code> keeps all commits and adds a merge commit by showing the branch history.<br /><code>git rebase</code> rewrites your commits on top of another branch, keeping history linear with no merge commit.</p>
<h3 id="heading-create-and-checkout-branch-in-same-command">Create and Checkout branch in same command</h3>
<p><strong>git checkout -b branchname:</strong> to create new branch and checkout to that branch with same command.</p>
<h3 id="heading-delete-branch">Delete branch</h3>
<p>Note: We cannot delete a branch while we are currently on that branch.</p>
<p><strong>git branch -d branchname:</strong> to delete any branch</p>
<p>Difference between <strong>git branch -d branchname</strong> and <strong>git branch -D branchname:</strong></p>
<p><code>git branch -d branchname</code> <strong>safely deletes</strong> a branch only if it’s fully merged, while <code>git branch -D branchname</code> <strong>force deletes</strong> it even if it’s not merged.</p>
]]></content:encoded></item><item><title><![CDATA[Chapter 2: Git Commit Management: Log, Show, Amend, and Reset Explained]]></title><description><![CDATA[Git Ignore:
what is the purpose of .gitignore file?
If we want to exclude specific files from being tracked and untracked, we can list those file names in the .gitignore file.
Git log:
git log: To get complete info about the commits we made.
git log ...]]></description><link>https://bhanudevsr211230.hashnode.dev/chapter-2-getting-started-with-git</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/chapter-2-getting-started-with-git</guid><category><![CDATA[Git]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Gitcommands]]></category><category><![CDATA[github-actions]]></category><category><![CDATA[GitLab]]></category><category><![CDATA[version control]]></category><category><![CDATA[version control systems]]></category><category><![CDATA[Source code management ]]></category><category><![CDATA[SCM]]></category><category><![CDATA[vcs]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Wed, 21 Jan 2026 11:23:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768997522910/a4737527-65ef-49e6-b514-1ced86a5763e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-git-ignore"><mark>Git Ignore:</mark></h3>
<h3 id="heading-what-is-the-purpose-of-gitignore-file">what is the purpose of .gitignore file?</h3>
<p>If we want to exclude specific files from being <strong>tracked and untracked</strong>, we can <strong>list those file names in the .gitignore file</strong>.</p>
<h3 id="heading-git-log"><mark>Git log:</mark></h3>
<p><strong>git log:</strong> To get complete info about the commits we made.</p>
<p><strong>git log -2:</strong> To get complete info about the last 2 commits we made.</p>
<p><strong>git log —oneline:</strong> git log will return complete info about the commits we made. but Instead, we want to get only the half <strong>commitId</strong> and <strong>commit message</strong>, we can use this command.</p>
<p><strong>git log —pretty=oneline:</strong> To get complete <strong>commitId</strong> and <strong>commit message</strong>, we can use this command.</p>
<h3 id="heading-how-many-commits-have-been-made-for-a-specific-file-how-can-we-find-out-what-is-the-command-for-this">How many commits have been made for a specific file? How can we find out? What is the command for this?</h3>
<p><strong>git log —follow —all filename:</strong> To get all the commits we made for this specific file. or we can also <strong>use git log filename</strong> but it will not be accurate if it has less commits.</p>
<h3 id="heading-git-show"><mark>Git show:</mark></h3>
<h3 id="heading-how-many-files-have-been-committed-for-any-commitid-how-can-we-find-out-what-is-the-command-for-this">How many files have been committed for any commitId? How can we find out? What is the command for this?</h3>
<p><strong>git show commitId —name-only:</strong> To get only the filenames along with commit message.</p>
<p><strong>git show commitId —stat:</strong> To get overall number of changes in the file, that is the total number of modification stats in that commit ID.</p>
<h3 id="heading-git-amend"><mark>Git amend:</mark></h3>
<h3 id="heading-what-does-it-mean-amend-in-git">what does it mean amend in git?</h3>
<p><code>--amend</code> means: <em>modify the most recent commit</em></p>
<p><strong>git commit —amend —author “authorname &lt;authoremail&gt;”:</strong> To change the author for latest commit.</p>
<p><strong>git commit —amend -m “authorname &lt;authoremail&gt;”:</strong> To change the commit message for latest commit.</p>
<h3 id="heading-if-i-committed-4-out-of-5-tracked-files-and-forgot-to-add-the-5th-tracked-file-in-the-same-commit-but-i-need-to-include-the-5th-file-in-the-same-commit-id-and-want-all-commits-to-be-under-the-same-commit-id-what-is-the-command-for-this-in-short-how-to-attach-all-tracked-files-in-staging-area-to-the-latest-commitid-in-this-case">If I committed 4 out of 5 tracked files and forgot to add the 5th tracked file in the same commit, but I need to include the 5th file in the same commit ID, and want all commits to be under the same commit ID, what is the command for this? In short, how to attach all tracked files in staging area to the latest commitId in this case?</h3>
<p>git commit —amend —no-edit</p>
<h3 id="heading-how-to-change-the-last-recent-commit-id-message">How to change the last recent commit id message ?</h3>
<p>git commit —amend</p>
<h3 id="heading-git-reset"><mark>Git reset:</mark></h3>
<p><code>--hard</code> means: <em>move everything back and discard changes completely</em></p>
<p><strong>git reset —hard HEAD~1:</strong> to delete the last commit.</p>
<p>in this command, HEAD represents latest commit, and HEAD~1 means last commit, if we give HEAD~2 it means, last 2 commits</p>
<p>On a final note, we are telling Git to discard the complete changes of the last specified number of commits. it will notify HEAD is now at below commit after delete of recent commit.</p>
<h3 id="heading-git-soft"><mark>Git soft:</mark></h3>
<p><code>--soft</code> means: <em>only the commit will be deleted, but not the data, so the data is safe.</em></p>
<p><strong>git reset —soft HEAD~1:</strong> to delete the last commit, but the file will not be deleted.</p>
]]></content:encoded></item><item><title><![CDATA[Chapter 1: Getting Started with Git]]></title><description><![CDATA[What is Git and Why do we need git?

Git represents Global Information tracker

Git is basically a developer’s tool, in technical terms, Git is a free and open source Distributed version control system(VCS), and we can call it as Source code manageme...]]></description><link>https://bhanudevsr211230.hashnode.dev/chapter-1-getting-started-with-git</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/chapter-1-getting-started-with-git</guid><category><![CDATA[Source code management ]]></category><category><![CDATA[source code]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[github-actions]]></category><category><![CDATA[Gitcommands]]></category><category><![CDATA[version control]]></category><category><![CDATA[version control systems]]></category><category><![CDATA[GitHub Actions]]></category><category><![CDATA[vcs]]></category><category><![CDATA[GitLab]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Tue, 20 Jan 2026 16:27:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768986930311/e4cc20f9-03d5-485c-b7e1-e467e470c4d3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-what-is-git-and-why-do-we-need-git"><strong>What is Git and Why do we need git?</strong></h3>
<ul>
<li><p>Git represents <strong>Global Information tracker</strong></p>
</li>
<li><p>Git is basically a developer’s tool, in technical terms, Git is a free and open source <strong>Distributed version control system(VCS)</strong>, and we can call it as <strong>Source code management(SCM)</strong> tool.</p>
</li>
<li><p>Git was intoduced in year <strong>2005</strong>.</p>
</li>
<li><p>it will maintain <strong>multiple versions of same file</strong>.</p>
</li>
<li><p>in simple way, Git <mark>tracks of every changes you made</mark>, so you have <strong>record of what has been done</strong>, and you can revert back to any specific version. it makes <strong>collaboration easy</strong> and allow <strong>changes done by multiple people and mege it into single source</strong> in final.</p>
</li>
</ul>
<h3 id="heading-but-what-does-version-control-system-do-in-practically"><strong>But what does Version Control System do in practically?</strong></h3>
<ul>
<li><p>In every application, there are <strong>multiple versions</strong> of code. For example, when an application is first created, it is called <strong>Version 1</strong>. As the application grows and new features are added, it is deployed with newer versions of the code, such as <strong>v2, v3,</strong> and so on.</p>
</li>
<li><p>However, if after deploying a new version to production a feature breaks or the entire application crashes due to faulty code, this is where a <strong>Version Control System (VCS)</strong> becomes useful. Using a VCS, we can safely roll back from <strong>v4 to v3 or any version</strong>, the previous stable version in which the application worked correctly.</p>
</li>
<li><p>In simple terms, a version control system <strong>allows us to revert to any earlier version of the code</strong> without any worry.</p>
</li>
</ul>
<h3 id="heading-but-what-does-tracking-in-git-means"><strong>But what does tracking in git means?</strong></h3>
<ul>
<li><p>Tracking a file means it will record complete information about <strong>who created that file</strong>, <strong>when the last changes were made</strong>, <strong>when exactly it was modified</strong>, and <strong>what changes were made.</strong></p>
</li>
<li><p>so to keep track of those changes in file, we need tool called <strong>GIT</strong>.</p>
</li>
</ul>
<h3 id="heading-git-stages">Git Stages:</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768979505992/bd087b0b-e440-4cab-8968-c37b3bdf7c3c.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>entire git depends upon these 3 stages:</p>
<ol>
<li><p><strong>Working directory</strong></p>
</li>
<li><p><strong>staging area</strong></p>
</li>
<li><p><strong>repository</strong></p>
</li>
</ol>
</li>
<li><p><strong>Working Directory:</strong></p>
<p>  whatever the files created initially in any new project, it will comes under working directory, these files in working directory are not going to track by git,</p>
</li>
<li><p><strong>staging area:</strong></p>
<p>  When we run <code>git add .</code>, the files are moved from the working directory to the staging area. In simple terms, the staging area is where developers make changes that is either data deletion, add or modify. Once changes are committed, they move from the staging area to the repository.</p>
</li>
<li><p><strong>repository:</strong></p>
<p>  If we make changes to the same file again after committing, it will move from the repository back to the staging area.</p>
</li>
</ul>
<h3 id="heading-why-do-we-need-to-commit">why do we need to commit?</h3>
<p>To keep <strong>track of the history of changes</strong>, that is “who made those changes”, “when they were made those changes”, and “what changes they have done”, we need to commit every time when the changes are made.</p>
<ul>
<li><p>To install git package in linux, the command is: <strong>yum install git -y</strong></p>
</li>
<li><p>To check version of installed git package, the command is: <strong>git -v or git - -version or rpm -qa git</strong></p>
</li>
</ul>
<h3 id="heading-initializing-git-in-working-directory">initializing git in working directory:</h3>
<p><strong>.git:</strong> .git means a <strong>hidden folder</strong>, which is used to keep track of every changes we made, then it will record the history of the changes we made, once we commit it.</p>
<p><strong>git init</strong>: to initialize the git in our working directory, we need to add git init to keep track all the files in our project.</p>
<p><strong>git add filename:</strong> To keep track of changes we made in any file, we need to do <code>git add filename</code>, then it will be moved from the working directory to the staging area. Now we can commit those changes, and it will keep a history of the changes we have done.</p>
<p><strong>git add *</strong> to keep track of all files and folders</p>
<p><strong>git add .</strong> To keep track of all files, folders, and hidden files and folders</p>
<p><strong>git commit -m “commit message” filename</strong>: To save the history of changes we've made, we need to commit those changes.</p>
<p><strong>git log</strong>: To view the history of changes that have been committed.</p>
<p><strong>git show commitId</strong>: To see the exact changes made in a specific commit and get complete information about who made those changes, why they made them, and when they did so, use <code>git show commitId</code>.</p>
<p><strong>git config user.name “name”</strong>: to set the user name in git. (<mark>note:</mark> The new name will only appear after a new commit has been made. It won't show for previous commits.)</p>
<p><strong>git config user.email “email”</strong>: to set the user email in git. (<mark>note:</mark> The new email will only appear after a new commit has been made. It won't show for previous commits.)</p>
<p><strong><mark>How to unstage or untrack a file after using the git add command?</mark></strong></p>
<p><strong>git restore —staged filename or git rm —cached filename or git reset or git reset HEAD .</strong> To reset the changes that were added to the staging area, use this command.</p>
]]></content:encoded></item><item><title><![CDATA[Linux - chapter-6: modify file owners and search commands]]></title><description><![CDATA[we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,
There are different categories of Linux commands. In the previous ch...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-chapter-6-modify-file-owners-and-search-commands</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-chapter-6-modify-file-owners-and-search-commands</guid><category><![CDATA[Linux]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[#Devopscommunity]]></category><category><![CDATA[DevOps trends]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[devsecops solutions]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Sat, 17 Jan 2026 08:18:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768637814332/b6a9d56c-8199-49cf-b789-ca3f976eecb9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,</p>
<p>There are different categories of Linux commands. In the previous chapter, we learned about data and editor commands. Now, in Chapter 6, we will dive deep into modify file owners and search commands. I will split the Linux commands into individual articles instead of covering everything in a single article.</p>
<p>6th chapter is modify file owners and search commands:</p>
<h2 id="heading-changing-owner-and-groupname">Changing owner and groupname:</h2>
<ol>
<li><p><strong>chown user filename</strong>: to change the owner of the file with the username, that is ownername.</p>
</li>
<li><p><strong>chgrp group filename</strong>: to change the group of the file with the groupname.</p>
</li>
</ol>
<h3 id="heading-full-permissions-to-file">Full permissions to file:</h3>
<ol>
<li><strong>chmod 777 fol1/file1 fol2/file2</strong>: giving full permissions to multiple files.</li>
</ol>
<h3 id="heading-changing-owner-and-group-with-single-command"><strong>changing owner and group with single command</strong>:</h3>
<ol>
<li><p><strong>chown user:group filenames</strong>: to change the owner and group for multiple files simultaneously.</p>
</li>
<li><p><strong>chown user:group *</strong>: to change the owner and group for all files at a time.</p>
</li>
<li><p><strong>chown user:group foldername</strong>: to change the owner and group for only folder.</p>
</li>
<li><p><strong>chown user:group -R foldername</strong>: to change the owner and group for both folder and files.</p>
</li>
<li><p><strong>chown user:group foldername/*</strong>: to change the owner and group for only files inside that folder.</p>
</li>
<li><p><strong>chown user:group foldername/filename</strong>: to change the owner and group for only specific file inside that folder.</p>
</li>
</ol>
<h2 id="heading-search-commands"><strong>Search commands</strong>:</h2>
<ol>
<li><p><strong>/param</strong>: to find the word in any file using vim editor.</p>
</li>
<li><p><strong>/GREP</strong>: GREP stands for Global Regular Expression Print. which is used to search for a word in a file.</p>
</li>
<li><p><strong>grep “word” filename:</strong> used to search word based on filename.</p>
</li>
<li><p><strong>grep -n “word” filename:</strong> used to search word along with line number based on filename.</p>
</li>
<li><p><strong>grep -in “word” filename:</strong> used to search for a word, case-insensitive, along with the line number in a file.</p>
</li>
<li><p><strong>grep “word” filename:</strong> used to search word based on filename.</p>
</li>
</ol>
<h3 id="heading-find-commands-based-on-filefolder"><strong>find commands based on file/folder</strong>:</h3>
<ol>
<li><p><strong>find . -name filename/foldername</strong>: to find the path of the file or folder with that name in every directory if we give dot after find. (dot means current working directory)</p>
</li>
<li><p><strong>find fol1 -name filename</strong>: to find the path of the file in fol1 directory if we specified directory name after find.</p>
</li>
<li><p><strong>find . -type f -name filename</strong>: to find the path of the file in every directory</p>
</li>
<li><p><strong>find . -type d -name filename</strong>: to find the path of the folder in every directory.</p>
</li>
</ol>
<h3 id="heading-find-commands-based-on-file-owners-and-file-permissions"><strong>find commands based on file owners and file permissions</strong>:</h3>
<ol>
<li><p><strong>find . -user username</strong>: to find all the path of files and folders based on file owner.</p>
</li>
<li><p><strong>find . -type f -user username</strong>: to find all the path of files based on file owner.</p>
</li>
<li><p><strong>find . -type d -user username</strong>: to find all the path of directories based on file owner.</p>
</li>
</ol>
<h3 id="heading-find-commands-based-on-groups"><strong>find commands based on groups</strong>:</h3>
<ol>
<li><p><strong>find . -group groupname</strong>: to find all the path of files and folders based on groupname.</p>
</li>
<li><p><strong>find . -type f -group groupname</strong>: to find all the path of files based on groupname.</p>
</li>
<li><p><strong>find . -type d -group groupname</strong>: to find all the path of folders based on groupname.</p>
</li>
</ol>
<h3 id="heading-find-commands-based-on-permissions"><strong>find commands based on permissions</strong>:</h3>
<ol>
<li><p><strong>find . -perm 777</strong>: to find all the path of files and folders based on full permissions.</p>
</li>
<li><p><strong>find . -type f -perm 777</strong>: to find all the path of files based on full permissions.</p>
</li>
<li><p><strong>find . -type d -perm 777</strong>: to find all the path of folders based on full permissions.</p>
</li>
</ol>
<h2 id="heading-locate-commands"><strong>Locate commands</strong>:</h2>
<p><mark>to use locate command, you need to install locate package with yum install locate -y and you need to use updatedb whenever you installed any package.</mark></p>
<ol>
<li><strong>locate filename:</strong> to find the path of a file and folder</li>
</ol>
<h2 id="heading-difference-between-find-grep-and-locate-commands"><strong>Difference between find, grep and locate commands:</strong></h2>
<p><strong>locate filename:</strong> all 3 commands used to search the path of a file but there is a difference:</p>
<ol>
<li><p><strong>GREP</strong> command is used to <strong>search for the words</strong> in a file.</p>
</li>
<li><p><strong>FIND</strong> and <strong>LOCATE</strong> commands are used to <strong>search for the file and folder</strong>.</p>
</li>
<li><p><strong>FIND</strong> commands are used to <strong>search for the files and folders based on the path</strong>.</p>
</li>
<li><p><strong>LOCATE</strong> commands are used to <strong>search for the files and folders in the entire linux database</strong>.</p>
</li>
</ol>
<h2 id="heading-software-commands"><strong>Software commands:</strong></h2>
<h3 id="heading-yum">yum:</h3>
<p><strong>yum</strong>(yellowdog updater modifier) is a <strong>linux package management tool</strong> which is used to <strong>install, uninstall or update the packages</strong>.</p>
<p><strong>yum install packageName -y:</strong> to install any package for example git i.e.. <mark>yum install git -y.</mark></p>
<p>for redhat, yum install git -y</p>
<p>for ubuntu, apt install git -y</p>
]]></content:encoded></item><item><title><![CDATA[Linux - chapter-5: permissions and user commands]]></title><description><![CDATA[we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,
There are different categories of Linux commands. In the previous ch...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-chapter-5-permissions-users</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-chapter-5-permissions-users</guid><category><![CDATA[Linux]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[#Devopscommunity]]></category><category><![CDATA[DevOps trends]]></category><category><![CDATA[DevSecOps]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Fri, 16 Jan 2026 16:09:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768637395497/0884c871-ea38-4c24-b4bb-8f16f8542352.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,</p>
<p>There are different categories of Linux commands. In the previous chapter, we learned about data and editor commands. Now, in Chapter 5, we will dive deep into user permissions and search commands. I will split the Linux commands into individual articles instead of covering everything in a single article.</p>
<p>5th chapter is <strong>User permissions and Search Commands:</strong></p>
<p>as the name suggests, <strong>user and search commands in Linux</strong> are commands used to <strong>manage users and groups</strong> on the system.</p>
<p>They help you:</p>
<ul>
<li><p>Create or delete users</p>
</li>
<li><p>Change passwords</p>
</li>
<li><p>Switch between users</p>
</li>
<li><p>Control user permissions and groups</p>
</li>
</ul>
<h3 id="heading-copy-data">Copy data:</h3>
<ol>
<li><p><strong>cp:</strong> copy the complete data from one file to another file</p>
</li>
<li><p><strong>cp sourcefile destinationfile:</strong> copy the complete data from source file to destination file by overwritting the previous data</p>
</li>
<li><p><strong>cat &gt;&gt; filename:</strong> to append the data in the destination file</p>
</li>
<li><p><strong>cat source &gt;&gt; destination:</strong> used to add source file data to destination file by overwritting the previous data.</p>
<p> there are 2 commands in this, <strong>cat source</strong> means to read the sourcefile content, and then <strong>\&gt;&gt; destination</strong> means to append the new data in destination file without overwritting the previous data.</p>
</li>
<li><p><strong>cat &gt;&gt; filename:</strong> to append the data in the destination file</p>
</li>
</ol>
<h3 id="heading-copy-files-in-folder">Copy files in folder:</h3>
<ol>
<li><p><strong>cp sourcefiles destinationfolder:</strong> used to copy all the source files and paste those files in destination folder. (will be acts as ctrl+ c and paste)</p>
</li>
<li><p><strong>mv sourcefiles destinationfolder:</strong> used to cut all the source files and paste those files in destination folder. (will be acts as ctrl+ x and paste)</p>
</li>
</ol>
<h3 id="heading-rename-files">Rename files:</h3>
<ol>
<li><strong>mv sourceName destName:</strong> rename the existing file with new name.</li>
</ol>
<h3 id="heading-move-back-directory-to-root">Move back directory to root:</h3>
<ol>
<li><strong>mv fol2/fol1 ~/</strong> :To move folder1 from folder2 back to the root directory, use the command: <code>mv fol2/fol1 ~/</code>.</li>
</ol>
<h3 id="heading-copy-file-from-existing-directory-to-another-directory"><strong>copy file from existing directory to another directory:</strong></h3>
<ol>
<li><p><strong>cp folder1/file1 folder2:</strong> copy file1 from folder1 to folder2.</p>
</li>
<li><p><strong>mv folder1/file1 folder2:</strong> move file1 from folder1 to folder2.</p>
</li>
</ol>
<h3 id="heading-1-permission-commands"><mark>1. Permission commands:</mark></h3>
<ol>
<li><p><strong>-rw-r--r--</strong></p>
<p> <strong><mark>-</mark></strong> represents type of the file(TBF - text based file)</p>
<p> <strong><mark>d </mark></strong> directory</p>
<p> <strong><mark>r </mark></strong> read =&gt; 4</p>
<p> <strong><mark>w </mark></strong> write =&gt; 2</p>
<p> <strong><mark>x </mark></strong> execute =&gt; 1</p>
<p> <mark>last - </mark> no permission =&gt; 0</p>
<p> we have to divide complete <strong>rw-r--r--</strong> into 3 parts:</p>
<ol>
<li><p><strong>rw- (read &amp; write)</strong> first 3 will be called as <mark>user permissions</mark> = read = 4, write = 2, - = 0 =&gt; total = 6</p>
</li>
<li><p><strong>r— (read only permissions)</strong> next 3 will be called as <mark>group permissions</mark></p>
<p> read - 4, - = 0 =&gt; total = 4</p>
</li>
<li><p><strong>r— (read only permissions)</strong> last 3 will be called as <mark>others</mark></p>
<p> read - 4, - = 0 =&gt; total = 4</p>
</li>
</ol>
</li>
</ol>
<p>    total: <strong>rw-r--r-- = 644</strong></p>
<ol start="2">
<li>whenever any system admin will see the permissions <strong>rw-r--r</strong>, then they will better understand it by decoding the value from it, that is total of 644, they can understand, user has read &amp; write permissions, and group has read only permissions, and others has also read only permissions.</li>
</ol>
<h3 id="heading-change-file-permissions"><strong>Change file permissions:</strong></h3>
<ol>
<li><p><strong>chmod:</strong> used to change the permissions that is change mode</p>
<p> <mark>to give full permissions for all users, = 777 (r-4, w-2, x-1)</mark></p>
</li>
<li><p><strong>chmod 777 filename/ chmod 777 multifiles</strong> - to give complete permissions to complete file</p>
</li>
<li><p><strong>chmod +x filename</strong> = to give execute permissions to complete file.</p>
</li>
<li><p><strong>chmod 644 *</strong> = to give default permissions to all files</p>
</li>
</ol>
<p><strong>Change folder permissions:</strong></p>
<ol>
<li><strong>chmod 777 foldername/ chmod 777 multifolders</strong> - to give complete permissions to complete file</li>
</ol>
<p><strong>Change Folder Permissions and Apply Them to Files Inside Simultaneously:</strong></p>
<ol>
<li><strong>cmod 555 foldername -R:</strong> To change folder permissions, which also apply to the files inside the folder.</li>
</ol>
<p><strong>Change Permissions for Only the Files Inside a Folder:</strong></p>
<ol>
<li><strong>cmod 777 foldername/*:</strong> To change permissions for all files inside folder1, without affecting the folder itself, use the following command. This will apply the changes only to the files inside.</li>
</ol>
<h3 id="heading-2-user-commands"><strong><mark>2. User Commands:</mark></strong></h3>
<ol>
<li><p><strong>cat /etc/passwd:</strong> to see list of users (-n to see numbered list)</p>
</li>
<li><p><strong>getent passwd:</strong> to see list of users (numbered list will not work here)</p>
</li>
</ol>
<p><strong>Create Users:</strong></p>
<ol>
<li><p><strong>adduser username or useradd username:</strong> to create new user</p>
</li>
<li><p><strong>id username:</strong> to see if user is created or not</p>
</li>
<li><p><strong>uid=1001(bhanu) gid=1001(bhanu) groups=1001(bhanu):</strong> <mark>When a new user is created, a new group is automatically created with the same user ID (uid) and group ID (gid)</mark>.</p>
</li>
<li><p>when a new user is created, a new path is also created for that user with tha username.</p>
<p> <strong>user =&gt; group =&gt; path</strong></p>
</li>
</ol>
<p><strong>Delete Users:</strong></p>
<ol>
<li><strong>userdel -r username:</strong> delete the user</li>
</ol>
<p><strong>navigate to user:</strong></p>
<ol>
<li><strong>su - username:</strong> to navigate to that user (su = switch user)</li>
</ol>
<p><strong>set password for user:</strong></p>
<ol>
<li><p><strong>passwd username:</strong> to add new password for that user</p>
</li>
<li><p><mark>while switching from root user to any user, it will not ask password though you’ve set it, because if you are in root user, it has every access and every permission, that is the reason.</mark></p>
</li>
</ol>
<h3 id="heading-3-group-commands">3. Group commands:</h3>
<p><strong>Why do we need a group?</strong></p>
<p><mark>for sepecific users, we can create a common group and give file permissions to those specific users.</mark></p>
<ol>
<li><p><strong>cat /etc/group:</strong> to see list of groups(-n to see numbered list)</p>
</li>
<li><p><strong>getent group:</strong> to see list of groups</p>
</li>
</ol>
<p><strong>create group:</strong></p>
<ol>
<li><p><strong>groupadd groupname:</strong> to create a new group.</p>
</li>
<li><p><strong>usermod -aG groupname username (modify user to add to that groupname):</strong> to add list of users to any specific group.</p>
</li>
<li><p><strong>id username:</strong> To see if a specific user is in a group or to find out which groups a user belongs to.</p>
</li>
</ol>
<p><strong>delete user from that group:</strong></p>
<ol>
<li><strong>sudo gpasswd -d dev devops:</strong> delete user from specific group. (<strong>sudo</strong> = super user do, <strong>gpasswd</strong> = manage group accounts, <strong>-d</strong> = delete)</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Linux - chapter-4: Data and Editor Commands]]></title><description><![CDATA[we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with
There are different categories of Linux commands. In the previous cha...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-chapter-4-data-and-editor-commands</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-chapter-4-data-and-editor-commands</guid><category><![CDATA[Devops]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[#Devopscommunity]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[Linux]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Thu, 15 Jan 2026 17:36:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768648991983/a193bbd8-5a85-4073-87b2-ae68bcba6361.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with</p>
<p>There are different categories of Linux commands. In the previous chapter, we learned about file commands. Now, in Chapter 4, we will dive deep into Data and Editor commands. I will split the Linux commands into individual articles instead of covering everything in a single article.</p>
<p>4th chapter is <strong>data and editor commands:</strong></p>
<p>as the name suggests, <strong>data commands in Linux</strong> are commands <strong>used</strong> to view, process, or manipulate data/content (like text or files).</p>
<p><strong>editor commands in Linux</strong> are <strong>Commands used</strong> to create and edit files using text editors.</p>
<h3 id="heading-parenting-folder-creation"><strong>parenting folder creation:</strong></h3>
<ol>
<li><p><strong>mkdir -p folder1/folder2/folder3</strong>: creating folder3 directly inside other directories without creating them manually</p>
</li>
<li><p><strong>cat &gt; filename:</strong> to add the content in file by overwrite the previous data</p>
</li>
<li><p><strong>cat &gt;&gt; filename</strong>: to append the new data in the file</p>
</li>
<li><p><strong>cat filename:</strong> to read the file content.</p>
</li>
<li><p><strong>cat -n a1:</strong> to see the data as numbered list in the file</p>
</li>
</ol>
<h3 id="heading-modifying-data">Modifying Data:</h3>
<ol>
<li><p><strong>Vim editor:</strong> used to modify any files on linux os. it has different modes:</p>
<ol>
<li><p>command mode</p>
</li>
<li><p>insert mode</p>
</li>
<li><p>save and quit mode</p>
</li>
</ol>
</li>
</ol>
<h3 id="heading-command-mode"><strong>command mode:</strong></h3>
<p>    it is default mode in vim editor, it is used to copy, paste and move to specific line, replace the words or search the words and for delete.</p>
<ol>
<li><p><strong>yy:</strong> used to copy the entire line and enter p to print the line</p>
</li>
<li><p><strong>4yy:</strong> copy multiple lines, copy 4 lines from where cursor is there</p>
</li>
<li><p><strong>10p:</strong> print the line 10 times</p>
</li>
<li><p><strong>dd:</strong> delete the line</p>
</li>
<li><p><strong>9dd</strong>: delete the 9lines from where our cursor is.</p>
</li>
<li><p><strong>G</strong>: to move the cursor to the <strong>last line</strong>.</p>
</li>
<li><p><strong>gg</strong>: to move the cursor to the <strong>first line</strong>.</p>
</li>
<li><p><strong>M</strong>: to move the cursor to the <strong>middle</strong> of the line.</p>
</li>
<li><p><strong>4gg</strong>: to move the cursor to the 4th line. or :4</p>
</li>
<li><p><strong>G</strong>: to move the cursor to the last line.</p>
</li>
<li><p><strong>u:</strong> undo all the changes.</p>
</li>
<li><p><strong>CTRL + r:</strong> redo all the changes.</p>
</li>
<li><p><strong>u:</strong> undo all the changes.</p>
</li>
</ol>
<p>    <strong>Search the word:</strong></p>
<ol>
<li><p><strong>/:</strong> used to search for a word in file</p>
</li>
<li><p>**%s/old/new/g :**used to replace the old word with new word globally (s means string)</p>
</li>
<li><p><strong>/:</strong> used to search for a word in file</p>
</li>
</ol>
<h3 id="heading-insert-mode">Insert Mode:</h3>
<p>    used to insert the data in a file</p>
<ol>
<li><p><strong>i:</strong> used to go to insert mode</p>
</li>
<li><p><strong>q:</strong> used to quit from vim editor.</p>
</li>
<li><p><strong>:wq</strong> - save and quit</p>
</li>
<li><p><strong>:wq!</strong> - save and quit forcefully</p>
</li>
<li><p><strong>:w</strong> - save the data in file</p>
</li>
<li><p><strong>:q!</strong> - forcefully quit without saving</p>
</li>
<li><p><strong>A:</strong> to move the cursor to end of the line</p>
</li>
<li><p><strong>I:</strong> to move the cursor to start of the line</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Linux - chapter-3: File Commands]]></title><description><![CDATA[we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,
There are different categories of Linux commands. In the previous ch...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-chapter-3-file-commands</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-chapter-3-file-commands</guid><category><![CDATA[Linux]]></category><category><![CDATA[Devops]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[#Devopscommunity]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Thu, 15 Jan 2026 12:17:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768648702441/aff88cc8-a866-46b6-833b-73baf6222692.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,</p>
<p>There are different categories of Linux commands. In the previous chapter, we learned about hardware commands. Now, in Chapter 3, we will dive deep into file commands. I will split the Linux commands into individual articles instead of covering everything in a single article.</p>
<p>3rd chapter is <strong>file commands:</strong></p>
<p>as the name suggests, <strong>File commands in Linux</strong> are <strong>Commands used to create, view, copy, move, rename, and delete files in Linux.</strong></p>
<h3 id="heading-create-files">Create files:</h3>
<ol>
<li><p><strong>touch:</strong> used to create file.</p>
</li>
<li><p><strong>touch a b c:</strong> you can create multiple files at once</p>
</li>
<li><p><strong>touch a{1..3}:</strong> sequential way of creating files like a1, a2, a3</p>
</li>
<li><p><strong>touch a{1..3}.txt:</strong> sequential way of creating files like a1, a2, a3 with a common ext.</p>
</li>
<li><p><strong>ll:</strong> to get full info. about file</p>
</li>
<li><p><strong>ls:</strong> list of created files</p>
</li>
</ol>
<h3 id="heading-delete-files">Delete files:</h3>
<ol>
<li><p><strong>rm :</strong> to remove the empty files</p>
</li>
<li><p><strong>rm -f filename:</strong> to remove the file forcefully</p>
</li>
<li><p><strong>rm -f *:</strong> remove all files forcefully</p>
</li>
<li><p><strong>rm -f *.txt:</strong> removing all files with .txt extension</p>
</li>
<li><p><strong>rm -f a{1..3}:</strong> sequential way of removing files like a1, a2, a3</p>
</li>
<li><p><strong>rm -f a{1..3}.txt:</strong> sequential way of removing files like a1, a2, a3 with a common ext.</p>
</li>
<li><p><strong>rm -f b*:</strong> remove files started with b letter forcefully</p>
</li>
<li><p><strong>rm -f *:</strong> remove all files forcefully</p>
</li>
</ol>
<h3 id="heading-create-directories">Create Directories:</h3>
<ol>
<li><p><strong>mkdir a:</strong> create directory named a</p>
</li>
<li><p><strong>mkdir a b c:</strong> you can create multiple files at once</p>
</li>
<li><p><strong>mkdir a{1..3}:</strong> sequential way of creating files like a1, a2, a3</p>
</li>
</ol>
<h3 id="heading-remove-directories">Remove Directories:</h3>
<ol>
<li><p><strong>rmdir :</strong> to remove the empty directories</p>
</li>
<li><p><strong>rmdir *:</strong> to remove all the directories</p>
</li>
<li><p><strong>rm -rf foldername:</strong> to remove non empty directories (rf - recursive forcefully)</p>
</li>
<li><p><strong>rm -rf *:</strong> remove all non empty files and folders forcefully</p>
</li>
<li><p><strong>rm -rf *:</strong> remove all non empty files and folders forcefully</p>
</li>
</ol>
<h3 id="heading-folder-navigation">Folder navigation:</h3>
<ol>
<li><p><strong>cd:</strong> change directory</p>
</li>
<li><p><strong>mdkir test:</strong> creating test directory</p>
</li>
<li><p><strong>cd test:</strong> navigate to test dir</p>
</li>
<li><p><strong>pwd:</strong> present working directory path</p>
</li>
<li><p><strong>cd:</strong> to change the directory from pwd to root dir we can use this command</p>
</li>
<li><p><strong>cd -:</strong> to change the directory from root dir to pwd dir we can use this command</p>
</li>
<li><p><strong>cd ..</strong> to move one step back from pwd to previous directory</p>
</li>
<li><p><strong>cd ../../</strong> to move two steps back from pwd to previous directory</p>
</li>
<li><p><strong>cd ../../../</strong> to move three steps back from pwd to previous directory</p>
</li>
<li><p><strong>cd fol1/fol2/fol3/fol4:</strong> to navigate to fol4 directly</p>
</li>
</ol>
<h3 id="heading-file-creation-inside-folder">file creation inside folder:</h3>
<ol>
<li><p><strong>touch folder1/file1</strong>: creating file directly inside existing folder1</p>
</li>
<li><p><strong>ll folder1/</strong>: check whether file is created or not inside that folder</p>
</li>
<li><p><strong>ll folder1/fol2</strong>: creating another directory inside existing folder1</p>
</li>
</ol>
<h3 id="heading-to-create-folder-inside-another-folder-which-never-exists">To create folder inside another folder (which never exists):</h3>
<p><strong>mkdir -p folder1/folder2:</strong> This command creates folder2 inside folder1, even if neither of these folders exists yet.</p>
<h3 id="heading-to-create-file-inside-another-folder-which-never-exists">To create file inside another folder (which never exists):</h3>
<p><strong>mkdir -p newfolder &amp;&amp; touch newfolder/newfile:</strong> create new file inside new folder.</p>
<h3 id="heading-listing-files">listing files:</h3>
<ol>
<li><p><strong>ll -r:</strong> listing files in reverse order</p>
</li>
<li><p><strong>ll -t:</strong> listing recently created ordered files</p>
</li>
<li><p><strong>ll -lrt/ll -rtl/ ll -tlr/ll -l:</strong> normal ordered listing</p>
</li>
<li><p><strong>ll -a:</strong> to see hidden files (any files that starts with .)</p>
</li>
</ol>
<p><strong>Key Difference between folder and file creation in linux:</strong> file creation starts with “-”</p>
<p><strong>in linux,</strong></p>
<p><strong>-</strong> if any file starts with -, it will be Regular file</p>
<p><strong>d</strong> if any file starts with d, it will be directory</p>
<h3 id="heading-understanding-linux-file-directory-system">Understanding Linux File Directory System:</h3>
<p><strong>cd /:</strong> navigate to this / directory from root, and then perform <strong>ll</strong> for listing out the command to check complete Linux file directory system.</p>
<p><strong><mark>bin</mark></strong>: This directory contains executable files. It includes files with full permissions.</p>
<p><strong>boot</strong>: This directory contains the necessary files for booting.</p>
<p><strong>dev</strong>: This directory contains device files related to hardware.</p>
<p><strong><mark>etc</mark></strong>: This directory contains system config files (like jenkins or git or ansible…)</p>
<p><strong><mark>home</mark></strong>: This directory contains all user related files.</p>
<p><strong>lib</strong>: This directory contains shared library files that are required to boot the system.</p>
<p><strong>media</strong>: This directory contains additional removable disk related files.</p>
<p><strong>opt</strong>: This directory contains optional files.</p>
<p><strong><mark>proc</mark></strong>: This directory contains processor related files i.e cpu and memory info...</p>
<p><strong><mark>root</mark></strong>: This directory contains root directory files.</p>
<p><strong>run</strong>: This directory contains necessary files to install packages.</p>
<p><strong>sys</strong>: This directory contains system related files.</p>
<p><strong><mark>tmp</mark></strong>: This directory contains temporary files.</p>
<p><strong>usr</strong>: This directory contains application files.</p>
<p><strong><mark>var</mark></strong>: This directory contains log information files for any installed tools.</p>
]]></content:encoded></item><item><title><![CDATA[Linux - chapter-2: Hardware Commands]]></title><description><![CDATA[we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,
There are different categories of Linux commands. In the previous ch...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-chapter-2-hardware-commands</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-chapter-2-hardware-commands</guid><category><![CDATA[Linux]]></category><category><![CDATA[Commands]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[#Devopscommunity]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[os]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><category><![CDATA[DevOps trends]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Thu, 15 Jan 2026 07:15:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768648368001/9c605f0b-1c05-41e3-9c49-e383117bc7fa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,</p>
<p>There are different categories of Linux commands. In the previous chapter, we learned about system commands. Now, in Chapter 2, we will dive deep into hardware commands. I will split the Linux commands into individual articles instead of covering everything in a single article.</p>
<p>2nd chapter is all about <strong>hardware commands</strong>:</p>
<p>as the name suggests, <strong>Hardware commands in Linux</strong> are commands that help you <strong>check, control, or get information about your computer’s physical parts</strong> (hardware) using the terminal.</p>
<h3 id="heading-ram-and-cpu-info">Ram and CPU info:</h3>
<ol>
<li><p><strong>lscpu:</strong> to get the complete info about cpu</p>
</li>
<li><p><strong>cat /proc/cpuinfo:</strong> command to get cpu info using cat command</p>
</li>
<li><p><strong>top:</strong> to know about <strong>server cpu utilization</strong>.</p>
</li>
<li><p><strong>ps -aux:</strong> command to see <strong>running processors</strong> on linux system.</p>
</li>
<li><p><strong>free:</strong> to know how much <strong>ram</strong> our server consumed and also to know the available ram (in kb)</p>
</li>
<li><p><strong>free -m or cat /proc/meminfo:</strong> to know how much <strong>ram</strong> our server consumed and also to know the available ram (in mb)</p>
</li>
<li><p><strong>free -g:</strong> to know how much <strong>ram</strong> our server consumed and also to know the available ram (in gb)</p>
</li>
<li><p><strong>free -h:</strong> to know how much <strong>ram</strong> our server consumed and also to know the available ram (in human readable format)</p>
</li>
<li><p><strong>free -g:</strong> to know how much <strong>ram</strong> our server consumed and also to know the available ram (in gb)</p>
</li>
</ol>
<h3 id="heading-memory-info">Memory Info:</h3>
<ol>
<li><p><strong>df -h:</strong> how much ebs volume consumed (to check the storage)</p>
</li>
<li><p><strong>du -sh *:</strong> It displays the <strong>size of each file and folder</strong> in the current directory.</p>
</li>
<li><p><strong>lsblk</strong>: to know about how many ebs volumes attached to our system (list of block devices)</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[Linux - chapter-1: System Commands]]></title><description><![CDATA[we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,
There are different categories of Linux commands. to get started wit...]]></description><link>https://bhanudevsr211230.hashnode.dev/linux-chapter-1-system-commands</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/linux-chapter-1-system-commands</guid><category><![CDATA[Linux]]></category><category><![CDATA[Commands]]></category><category><![CDATA[Devops]]></category><category><![CDATA[linux for beginners]]></category><category><![CDATA[linux-basics]]></category><category><![CDATA[linux-commands]]></category><category><![CDATA[Devops articles]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[#Devopscommunity]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Thu, 15 Jan 2026 06:29:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768647866158/c8601126-9b2c-4670-b0aa-4fa3edb41d23.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>we need to know linux commands before diving into DevOps concepts, as a DevOps engineer, it is necessary to acquire linux commands as it is a first and foremost skill to start with,</p>
<p>There are different categories of Linux commands. to get started with system commands as Chapter 1, we will dive deep into system commands. I will split the Linux commands into individual articles instead of covering everything in a single article.</p>
<p>as the name suggests, system commands help you talk to the <strong>Linux OS and manage files, users, processes, memory, disks, and services</strong>.</p>
<ol>
<li><p><strong>sudo</strong>: the name sudo means super user and do in general</p>
<p> it was used to switching from one user to another user.</p>
<p> for example,</p>
<p> <strong>sudo -i :</strong> by default, ec2 is the root user in linux os, but it has limited permissions, you need permissions to modify anything, ec2 has limited permissions. to switch from ec2 to root user, u need sudo -i</p>
</li>
<li><p><strong>clear:</strong> used to clear the terminal or you can use alternative command with CTRL + l</p>
</li>
<li><p><strong>exit:</strong> used to exit from root user or you can do exit with other alternative by using CTRL + D</p>
</li>
<li><p><strong>uname:</strong> used to know which os we’re currently on. for example: linux</p>
</li>
<li><p><strong>uname -r:</strong> used to know which <strong>kernel version</strong> our os is, for example: 6.1.159-181.297.amzn2023.x86_64</p>
</li>
<li><p><strong>uname -a:</strong> used to get <strong>full info</strong> of our os</p>
</li>
<li><p><strong>uptime:</strong> used to know how long os has been in <strong>running state</strong></p>
</li>
<li><p><strong>uptime -p:</strong> used to give only the <strong>time</strong> os has been in running state</p>
</li>
<li><p><strong>hostname</strong>: used to get <strong>private dns name</strong> of our system</p>
</li>
<li><p><strong>hostname -i</strong>: used to get <strong>private ip address</strong> of our system</p>
</li>
<li><p><strong>hostnamectl set-hostname “bhanu”:</strong> used to change the existing hostname of our system</p>
</li>
<li><p><strong>who:</strong> to know about how many users have been loggedin our system</p>
</li>
<li><p><strong>whoami</strong>: used to see the current user</p>
</li>
<li><p><strong>history:</strong> to listout the history of command we’ve used in that system</p>
</li>
<li><p><strong>ip addr:</strong> used to get private ip adress</p>
</li>
<li><p><strong>ip route:</strong> used to get private ip adress</p>
</li>
<li><p><strong>ifconfig:</strong> used to get private ip adress</p>
</li>
<li><p><strong>date:</strong> to get today’s date</p>
</li>
<li><p><strong>date +”%d”:</strong> to get only date</p>
</li>
<li><p><strong>date +”%m”:</strong> to get only month</p>
</li>
<li><p><strong>date +”%y”:</strong> to get only year</p>
</li>
<li><p><strong>date +”%H”:</strong> to get only hour</p>
</li>
<li><p><strong>date +”%M”:</strong> to get only minutes</p>
</li>
<li><p><strong>date +”%S”:</strong> to get only seconds</p>
</li>
<li><p><strong>date +”%F”:</strong> to get full date in yy/mm/dd format</p>
</li>
<li><p><strong>date +”%A”:</strong> to get month in year</p>
</li>
<li><p><strong>timedatectl:</strong> used to get timezones</p>
</li>
<li><p><strong>timedatectl set-timezone Asia/Kolkata</strong> : used to change Timezone to IST</p>
</li>
<li><p><strong>ps</strong>: used to see the running processors in system</p>
</li>
<li><p><strong>kill -9 pid</strong>: used to remove unwanted/unused processors</p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[What is EC2? A Simple Guide with 8 Steps to Set Up Your Server]]></title><description><![CDATA[EC2 stands for Elastic Compute Cloud. we can call it as Resizable compute capacity in cloud
In simple terms, ec2 is used to create the virtual servers in the cloud
AWS provides 200+ services and ec2 is one of the service.
in devops terminology, to cr...]]></description><link>https://bhanudevsr211230.hashnode.dev/what-is-ec2-a-simple-guide-with-8-steps-to-set-up-your-server</link><guid isPermaLink="true">https://bhanudevsr211230.hashnode.dev/what-is-ec2-a-simple-guide-with-8-steps-to-set-up-your-server</guid><category><![CDATA[Devops]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[ec2]]></category><category><![CDATA[AWS]]></category><category><![CDATA[server]]></category><category><![CDATA[instance]]></category><dc:creator><![CDATA[Bhanu Mathurthi]]></dc:creator><pubDate>Sun, 21 Dec 2025 06:44:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1766290044070/9f0c703f-6f1e-4584-afe1-a6c025f5d0d7.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>EC2</strong> stands for <strong>Elastic Compute Cloud</strong>. we can call it as <strong>Resizable compute capacity</strong> in cloud</p>
<p>In simple terms, <strong>ec2 is used to create the virtual servers in the cloud</strong></p>
<p>AWS provides 200+ services and ec2 is one of the service.</p>
<p>in devops terminology, to create instance(server), we need to use EC2 service</p>
<p>Think of <strong>EC2 as a computer (server) that lives on the internet</strong>, provided by <strong>Amazon Web Services</strong>.</p>
<p>Instead of:</p>
<ul>
<li><p>Buying a physical server 💻</p>
</li>
<li><p>Keeping it in an office 🏢</p>
</li>
<li><p>Managing power, cooling, hardware failures</p>
</li>
<li><p>You can:</p>
<ul>
<li><p><strong>Create a virtual computer in minutes</strong></p>
</li>
<li><p>Access it from anywhere</p>
</li>
<li><p>Pay only for the time you use it</p>
</li>
<li><blockquote>
<p>EC2 = <strong>Renting a computer from AWS over the internet</strong></p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h3 id="heading-understand-the-difference-between-physical-server-and-virtual-server">Understand the difference between physical server and virtual server</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Your Laptop</td><td>EC2 Server</td></tr>
</thead>
<tbody>
<tr>
<td>Physical device</td><td>Virtual device</td></tr>
<tr>
<td>At your desk</td><td>In AWS data center</td></tr>
<tr>
<td>Windows/Linux</td><td>Linux/Windows</td></tr>
<tr>
<td>Turn on manually</td><td>Start/Stop from AWS console</td></tr>
</tbody>
</table>
</div><h2 id="heading-8-simple-steps-to-create-an-ec2-server"><strong>8 Simple Steps to Create an EC2 Server:</strong></h2>
<h3 id="heading-step-1-create-an-aws-account">Step 1: Create an AWS Account</h3>
<p>Go to <a target="_blank" href="https://aws.amazon.com">https://aws.amazon.com</a></p>
<p>Sign up using email, phone number, and card (free tier available).</p>
<h3 id="heading-open-ec2-dashboard">Open EC2 Dashboard</h3>
<p>Login to AWS Console</p>
<ul>
<li><p>Search <strong>EC2</strong></p>
</li>
<li><p>Click <strong>EC2 → Instances → Launch instance</strong></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1766293654035/aec8026b-3743-4fff-a376-bcbb36d69b5e.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-click-launch-instance">Click “Launch Instance”</h3>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1766293908314/cbee1728-23b2-49e7-840c-224192c2c6dd.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-step-2-choose-an-ami-amazon-machine-image">Step 2: choose an AMI (amazon machine image)</h3>
<p>  it is a template that contains software configuration (os, application server and applications) required to launch your instance</p>
</li>
<li><p>Each AMI contains unique <strong>AMI-ID</strong> which is region-specific</p>
</li>
<li><p>A <strong>region</strong> we call it as group of <strong>Data Centres</strong>, A Data Center we call it in technical terms as <strong>Availabilty Zones.</strong></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1766294661232/01e4aeeb-72cc-405e-9cf7-6997af47d385.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-step-3-choose-an-instance-type"><strong>Step 3: choose an Instance Type</strong></h3>
<p>in the 3rd step, we are providing cpu and memory to our instance, here we need to select the instance type</p>
<h3 id="heading-step-4-configure-your-instance">Step 4: Configure your instance</h3>
<p>In this step, we are going to decide how many number of instances you can create from same AMI,</p>
<p>this step defines, in which network, and in which availabilty zone, you are going to launch your instance</p>
<h3 id="heading-step-5-add-storage">Step 5: ADD Storage</h3>
<p>To store the data in server, we need ebs volume.</p>
<p>EBS fullform is <strong>Elastic Block Storage</strong></p>
<p>for single server, we can use multple EBS volumes, os can run on multiple EBS volumes</p>
<h3 id="heading-step-6-add-tags">Step 6: ADD Tags</h3>
<p>we can give a name to our instance</p>
<h3 id="heading-step-7-configure-security-group">Step 7: Configure security group</h3>
<p>Security group means group of firewalls which are attached to instance to control the traffic of an instance.</p>
<p>There are 2 types of traffic: 1. Inbound traffic 2. outbound traffic</p>
<p>Inbound traffic means security group which allows all the incoming requests with the ssh (22 is default linux port) for macos(remote desktop rdp)</p>
<p>if we want to connect to Linux system to launch the instance, then we need ssh(22) port in the security group</p>
<h3 id="heading-step-8-key-pair">Step 8: Key-pair</h3>
<p>we have to create an instance with key-pair: 1. <strong>public key</strong> 2. <strong>private key</strong></p>
<p>public key is available in aws</p>
<p>private key is available in our system when we downloaded</p>
<p>To connect our linux system to launch an instance in a most safe and secured manner, we need key-pair, whenever public key matches with private key, then system is connected to the server.</p>
]]></content:encoded></item></channel></rss>