<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Harish</title>
    <description>The latest articles on Forem by Harish (@harisheoran).</description>
    <link>https://forem.com/harisheoran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F762436%2Fc3f5838d-15f3-48c3-93db-bf0c8820cd53.jpg</url>
      <title>Forem: Harish</title>
      <link>https://forem.com/harisheoran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/harisheoran"/>
    <language>en</language>
    <item>
      <title>From Code to Cloud: A Hands-On DevOps Journey with Kubernetes Deployment</title>
      <dc:creator>Harish</dc:creator>
      <pubDate>Sat, 20 Jan 2024 08:02:42 +0000</pubDate>
      <link>https://forem.com/harisheoran/from-code-to-cloud-a-hands-on-devops-journey-with-kubernetes-deployment-gmm</link>
      <guid>https://forem.com/harisheoran/from-code-to-cloud-a-hands-on-devops-journey-with-kubernetes-deployment-gmm</guid>
      <description>&lt;p&gt;Welcome to a hands-on journey through the realms of DevOps! In this blog, we'll dive into the practical world of code deployment, exploring the seamless integration of development and operations that powers modern software delivery. Join me as we unravel the intricacies of a real-world DevOps assignment, focusing on Kubernetes deployment. From transforming code into containerized brilliance to orchestrating it in the cloud, this blog is your guide to mastering the practical aspects of DevOps. Ready to embark on a journey that bridges code, clouds, and containers? Let's dive in!&lt;/p&gt;

&lt;h5&gt;
  
  
  DevOps Workshop 2
&lt;/h5&gt;

&lt;h3&gt;
  
  
  You should try the workshop on your own first.
&lt;/h3&gt;

&lt;h1&gt;
  
  
  Workshop Requirements
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Source Code:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Version Control:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Integration (CI):&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Containerization:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous Deployment (CD):&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoring (Optional):&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Follow these steps, explaining your choices and demonstrating the flow. This assignment will showcase your skills in setting up a CI/CD pipeline and deploying applications to Kubernetes. If you have any questions along the way, feel free to ask!&lt;/p&gt;

&lt;h2&gt;
  
  
  First, build a simple Web server
&lt;/h2&gt;

&lt;p&gt;You can choose the language for this task, I am using the Go language.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;&lt;em&gt;main.go&lt;/em&gt;&lt;/strong&gt; file.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch main.go

go mod init webserver

package mainimport ("fmt""net/http")func main() { fs := http.FileServer(http.Dir("./static")) http.Handle("/", fs) port := 3000 fmt.Printf("Server is listening on 3000") err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil) if err != nil { fmt.Printf("Error: ", err) }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This server is just serving a &lt;strong&gt;&lt;em&gt;index.html&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;main.js&lt;/em&gt;&lt;/strong&gt; file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;&lt;em&gt;static&lt;/em&gt;&lt;/strong&gt; directory for html and js files.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir statictouch index.html main.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run the website
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go run main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Go to 127.0.0.1:3000&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Containerize your application using Docker
&lt;/h2&gt;

&lt;p&gt;We use docker to containerize our application, let's write the &lt;strong&gt;&lt;em&gt;Dockerfile&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We are going to use the Multistage Docker build or Distroless Images.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Must read about &lt;a href="https://harisheoran.github.io/projects/multi_stage_docker_go/" rel="noopener noreferrer"&gt;Multi-Stage Docker Build of GO web server&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Build stageFROM golang:latest as buildWORKDIR /appCOPY go.mod ./RUN go mod download# Copy the necessary files of applicationCOPY main.go .COPY static ./static# build the binary of app named "main"RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .# 2nd stage, run the binary of applicationFROM scratch# Copy "main" binary and static folder into current dirCOPY --from=build /app/main .COPY --from=build /app/static ./staticEXPOSE 3000# execute the binaryCMD ["./main"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Build the Docker Image
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t memesoftheday-image .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Build &amp;amp; run the container and check whether the application is running or not.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker container run -d -p 4000:3000 --name memes-container memesoftheday-image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Version Control
&lt;/h2&gt;

&lt;p&gt;Use &lt;strong&gt;&lt;em&gt;Git&lt;/em&gt;&lt;/strong&gt; to control the version of source code and push it to GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Continuous Integration (CI)
&lt;/h3&gt;

&lt;p&gt;If you are a beginner to CI, so understand the problem first&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Image of the application is present on your machine and let's say we are deploying our application on AWS or Azure -&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;We don't like manual things, we are Engineers, lets Automate it using CI pipeline.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  What's the solution?
&lt;/h4&gt;

&lt;p&gt;We build a Ci pipeline which uses our &lt;strong&gt;&lt;em&gt;Dockerfile&lt;/em&gt;&lt;/strong&gt; from the repository to build the image and push it to a registry.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;so, you don't have to worry about building images each time you make changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;and it uses CI server computing to build the image.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are so many CI tools like Jenkins, Github Actions and many more. I think GitHub Actions is the right choice for our requirements.&lt;/p&gt;

&lt;h4&gt;
  
  
  Understand the workflow of the CI pipeline
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Check out the Github repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build the docker image using Dockerfile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log in to Docker Hub.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Push the image to Docker Hub.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read about using Github Actions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://itsmetommy.com/2021/07/05/push-to-docker-hub-using-github-actions/" rel="noopener noreferrer"&gt;Manage Secrets&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Github Actions Officials(&lt;a href="https://docs.github.com/en/actions/publishing-packages/publishing-docker-images" rel="noopener noreferrer"&gt;https://docs.github.com/en/actions/publishing-packages/publishing-docker-images&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;strong&gt;.github/workflows&lt;/strong&gt; directory.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p .github/workflows &amp;amp;&amp;amp; cd .github/workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It triggers the build-on code push in the main branch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Create and build docker image to Docker Hubon: push: branches: ["main"]env: REGISTRY: docker.io IMAGE_NAME: "memesoftheday-image"jobs: push_to_registry: name: Push Image to Docker Hub runs-on: ubuntu-latest steps: - name: checkout the repository uses: actions/checkout@v4 - name: Login to Docker Hub uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a with: username: ${{secrets.DOCKERHUB_USERNAME}} password: ${{secrets.DOCKERHUB_PASSWORD}} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 with: images: ${{secrets.DOCKERHUB_USERNAME}}/memesoftheday-image - name: Build &amp;amp; push the image uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 with: context: . file: ./Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Factions.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Factions.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736079372%2F93a19402-fefd-44bf-83a8-fd96da55e997.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736079372%2F93a19402-fefd-44bf-83a8-fd96da55e997.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Deployment (CD)
&lt;/h2&gt;

&lt;p&gt;We want to reflect the changes we made in our code into &lt;a href="https://itsmetommy.com/2021/07/05/push-to-docker-hub-using-github-actions/" rel="noopener noreferrer"&gt;the&lt;/a&gt; applications which we deploy on Kubernetes, which comes into the picture of the CD.&lt;/p&gt;

&lt;p&gt;We are going to use the &lt;strong&gt;&lt;em&gt;ArgoCD&lt;/em&gt;&lt;/strong&gt; , so install the ArgoCD as an operator on our k8s cluster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create Kubernetes Cluster We use Minikuebe as local k8s cluster &lt;a href="https://minikube.sigs.k8s.io/docs/start/" rel="noopener noreferrer"&gt;Install Minikube&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start Minikube cluster&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minikube start --driver=docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/" rel="noopener noreferrer"&gt;Install Kubectl&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://operatorhub.io/operator/argocd-operator" rel="noopener noreferrer"&gt;Install ArgoCD operator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new Argo CD cluster with the default configuration using this manifest file.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir k8stouch argocd.yml

apiVersion: argoproj.io/v1alpha1kind: ArgoCDmetadata: name: example-argocd labels: example: basicspec: {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ArgoCD is created as a service, you can verify using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if you see that it is created as &lt;strong&gt;&lt;em&gt;ClusterIP&lt;/em&gt;&lt;/strong&gt; , which can access only within the cluster, so, to access ArgoCD in our browser we have to change its type to &lt;strong&gt;&lt;em&gt;NodePort&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl edit svc example-argocd-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;change the type from &lt;em&gt;Cluster IP&lt;/em&gt; to &lt;em&gt;NodePort&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736116284%2F1b7a5b7a-ec89-4f77-9930-3c7c982705ac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736116284%2F1b7a5b7a-ec89-4f77-9930-3c7c982705ac.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fargo_nodeport.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fargo_nodeport.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the service again, and check its port - 31080
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc

example-argocd-server NodePort 10.105.171.247 &amp;lt;none&amp;gt; 80:31080/TCP,443:32101/TCP 21h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;So, to access the argocd on the browser using node port, we need the IP of the cluster
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minikube ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Visit the URL - &lt;a href="http://minikubeip:port" rel="noopener noreferrer"&gt;http://minikubeip:port&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my case, it is &lt;em&gt;192.168.49.2:31080&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736144106%2Ff379b538-0066-4384-8bf1-c41ac2ce3f74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736144106%2Ff379b538-0066-4384-8bf1-c41ac2ce3f74.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fargocd_login.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fargocd_login.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Username is &lt;em&gt;admin.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Password is stored as a secret.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get secrets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you'll get &lt;em&gt;example-argocd-cluster&lt;/em&gt;, password is stored in this secret.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl edit secrets example-argocd-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736166114%2F24195a2a-558c-46d2-9d6c-8de820422eb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736166114%2F24195a2a-558c-46d2-9d6c-8de820422eb2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fargocd_secret.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fargocd_secret.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minikube uses a simple encryption algorithm &lt;em&gt;base64.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo dkxpeEEzeWVnYk53NEZrU1VtdW4xUlBhOHBoTWNyN0k= | base64 -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Login into ArgoCD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Create Deployment and service for your application.
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create Deployment.yml in &lt;em&gt;k8s&lt;/em&gt; directory.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This file describes a Kubernetes Deployment, which manages a set of pods.apiVersion: apps/v1# Specifies the Kubernetes API version used for this resource.kind: Deployment# Indicates that this is a Deployment resource, used to manage application deployments.metadata: name: memesoftheday-deployment # Assigns a name to the Deployment, in this case, "memesoftheday-deployment." labels: app: memesoftheday # Labels are used to organize and select resources. This label is named "app" and set to "memesoftheday."spec: replicas: 3 # Specifies that the desired number of replicas (pods) is 3. selector: matchLabels: app: memesoftheday # Defines how the Deployment identifies which pods to manage based on labels. template: metadata: labels: app: memesoftheday # Labels assigned to the pods created by this Deployment. spec: containers: - name: memesostheday-container # Specifies the name of the container within the pod. image: harisheoran/memesoftheday-image:main # Specifies the Docker image to be used for the container, pulled from "harisheoran/memesoftheday-image" with the "main" tag. ports: - containerPort: 3000 # Specifies that the container within the pod will listen on port 3000. imagePullPolicy: If
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create service.yml in the same directory.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This file describes a Kubernetes Service, which exposes pods to the network.apiVersion: v1# Specifies the Kubernetes API version used for this resource.kind: Service# Indicates that this is a Service resource, used to expose pods.metadata: name: memesoftheday-service # Assigns a name to the Service, in this case, "memesoftheday-service."spec: type: NodePort # Specifies that the Service should be of type NodePort, making it accessible externally on each node. selector: app: memesoftheday # Specifies the labels used to select pods that this service will route traffic to. In this case, pods with the label "app: memesoftheday." ports: - port: 80 # Specifies that the Service should be accessible on port 80 externally. targetPort: 3000 # Specifies that incoming traffic on port 80 should be forwarded to the pods on port 3000. nodePort: 30007 # Specifies a static port on each node (accessible externally) where the Service will be available, set to 30007.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;and create a new app and fill in the details accordingly to your repo in the below format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736238425%2F91cc03ce-a705-433d-afcd-a75abcabd3ef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736238425%2F91cc03ce-a705-433d-afcd-a75abcabd3ef.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736275711%2F0b0d4e21-e364-4d7a-9eda-be3b7e839a0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736275711%2F0b0d4e21-e364-4d7a-9eda-be3b7e839a0b.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Please wait for it, it will create the pods of our application defined in our deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  We successfully deployed the application pods.
&lt;/h4&gt;

&lt;p&gt;You can check the pods using command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods -o wide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fpods.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fpods.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736355154%2Fb72ca163-0d10-4078-bb02-84af460081a0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736355154%2Fb72ca163-0d10-4078-bb02-84af460081a0.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the port of pods.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fmemes_svc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fmemes_svc.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736371520%2Ff3f84ef0-61b6-4284-a876-9e07a10bfde8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736371520%2Ff3f84ef0-61b6-4284-a876-9e07a10bfde8.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;visit your minikube ip with node port, in my case it is - &lt;a href="http://192.168.49.2:30007/" rel="noopener noreferrer"&gt;http://192.168.49.2:30007/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring
&lt;/h2&gt;

&lt;p&gt;To monitor our k8s cluster, we use Prometheus and Grafana.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Prometheus using Helm charts
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm repo update

helm install prometheus prometheus-community/prometheus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, it will create Prometheus pod and service but it is available as Cluster IP, to access the Prometheus, we need to change its service to NodePort.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl expose service prometheus-server --type=NodePort --target-port=9090 --name=prometheus-server-ext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check it port using the command.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fprom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fprom.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736402083%2F2aa196bd-4923-49d1-927f-e7d224bdf7b2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736402083%2F2aa196bd-4923-49d1-927f-e7d224bdf7b2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visit this port in browser with minikube IP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736425096%2Ff9ab153e-cb48-4ed7-a594-268f31e66a49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1705736425096%2Ff9ab153e-cb48-4ed7-a594-268f31e66a49.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fpromui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fharisheoran.hashnode.dev%2Fpromui.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To view these logs in graph form, we use Grafana.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Grafana using Helm Chart.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add grafana https://grafana.github.io/helm-charts

helm repo update

helm install grafana grafana/grafana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Expose Grafana service as NodePort to access in browser.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl expose service grafana --type=NodePort --target-port=3000 --name=grafana-ext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check the Grafana Nodeport using command and visit the port with minikube ip.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get svc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on it to create your first Data source.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a Data Source to Prometheus.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the Prometheus IP address.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go back to Home and click on Create DashBoard &amp;gt; Import DashBoard &amp;gt; Enter &lt;strong&gt;&lt;em&gt;3662&lt;/em&gt;&lt;/strong&gt; ID to import the template of Dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Our Grafana Dashboard is ready.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;That's it, our project is done, if you have any questions about this project or if stuck at any point, feel free to ping me.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;GitHub Repository - &lt;a href="https://github.com/harisheoran/WebServer-Docker-CI-CD-k8s" rel="noopener noreferrer"&gt;https://github.com/harisheoran/WebServer-Docker-CI-CD-k8s&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect with me on&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Git Basics</title>
      <dc:creator>Harish</dc:creator>
      <pubDate>Sun, 25 Sep 2022 07:55:29 +0000</pubDate>
      <link>https://forem.com/harisheoran/git-basics-3kfd</link>
      <guid>https://forem.com/harisheoran/git-basics-3kfd</guid>
      <description>&lt;p&gt;Git is an version controller tool developed by legend Linus Torvalds, which helps Developer tracking changes in any set of files, sometimes its a life saver, believe me &lt;/p&gt;

&lt;p&gt;Learn Git fundamentals in this short blog OR use it as a&lt;br&gt;
cheatsheet for future references.&lt;/p&gt;
&lt;h3&gt;
  
  
  First initialize the present local directory
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Write some code&lt;/p&gt;
&lt;h3&gt;
  
  
  Stage the code to commit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stage all files
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Stage a specfic file
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add file.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Unstage a file
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git restore — staged name.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Now commit the staged code
&lt;/h3&gt;

&lt;p&gt;with a commit message for future references&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "First Git commit"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can check commited code status by&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```
git status
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check history of your commits&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Upload files to your Github Account
&lt;/h3&gt;

&lt;p&gt;Now connect your Github Account and upload your files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, we need to create a Github repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpep3sj9f0a7ltvgoaxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpep3sj9f0a7ltvgoaxe.png" alt="Image description" width="475" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the HTTPS link of your repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flv7nlrsvt8ckhzo9w1c4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flv7nlrsvt8ckhzo9w1c4.png" alt="Image description" width="456" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now add remote access to your GitHub repository
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add origin https://github.com/sheoranharis/sheoranharis.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**origin** is name of the link to your repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Create a branch by which you will push your code to the repo
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b mybranch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We need remote access to our Github Account&lt;/p&gt;

&lt;p&gt;First, generate a SSH Key - &lt;br&gt;
&lt;a href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent"&gt;Github Docs&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;then add this SSH key to your Github account - &lt;br&gt;
&lt;a href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent"&gt;Github Docs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OR
&lt;/h3&gt;

&lt;p&gt;If you are using VS code, just login into VScode by your Github account&lt;br&gt;
and you are good to go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Push your code to Github using Git
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin mybranch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are pushing our code by &lt;strong&gt;mybranch&lt;/strong&gt; to &lt;strong&gt;origin&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Check your Github account to see changes&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you in next blog.....&lt;a href="https://harish.pages.dev/"&gt;Lets Connect&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
    </item>
    <item>
      <title>Linux System Administrator</title>
      <dc:creator>Harish</dc:creator>
      <pubDate>Wed, 25 May 2022 16:40:30 +0000</pubDate>
      <link>https://forem.com/harisheoran/linux-system-administrator-389h</link>
      <guid>https://forem.com/harisheoran/linux-system-administrator-389h</guid>
      <description>&lt;p&gt;Welcome to the part 2 of Journey to become Linux Wizard &lt;a href="https://sheoranharis.hashnode.dev/the-first-step-toward-becoming-a-linux-wizard"&gt;Part 1&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  User Management
&lt;/h1&gt;

&lt;h2&gt;
  
  
  User &amp;amp; Groups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;User ID [UID] use to identify user &lt;/li&gt;
&lt;li&gt;Group ID [GID] use to identify groups&lt;/li&gt;
&lt;li&gt;Other users like System Daemon, Root user/Superuser, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Root User
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;User who has complete access to the system.&lt;/li&gt;
&lt;li&gt;Its UID is 0.&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;sudo&lt;/code&gt; command to execute the command as the root user.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sudo su&lt;/code&gt; command to become a root user.&lt;/li&gt;
&lt;li&gt;command you use as a root user, their history will not be saved so use them carefully.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who are these other users in system other than me and root?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;sudo cat /etc/passwd&lt;/code&gt; to see a list of all users,you'll find a lot of users but lets focus on first one to understand all this gibberish, &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uSuTRwc3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653467848692/kQMWO28MQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uSuTRwc3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653467848692/kQMWO28MQ.png" alt="02.png" width="293" height="44"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aao1ZYNO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653468218006/AekDKt-Vo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aao1ZYNO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653468218006/AekDKt-Vo.jpg" alt="03.jpg" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;'root' is the username.&lt;/li&gt;
&lt;li&gt;'x' is the password for the user, which is encrypted .and stored in &lt;code&gt;/etc/shadow&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;'0' is the User ID.&lt;/li&gt;
&lt;li&gt;'0' is Group ID.&lt;/li&gt;
&lt;li&gt;User info which is the root user in our case.&lt;/li&gt;
&lt;li&gt;user's home directory. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/bin/bash&lt;/code&gt; is the User's Shell.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;/etc/shadow&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;type the following command to see the password details of users&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6SE_-2T0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653469051373/-B3QWRGI6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6SE_-2T0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653469051373/-B3QWRGI6.png" alt="04.png" width="337" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cm-x1myR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653469386888/ZhrFIFGkn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cm-x1myR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653469386888/ZhrFIFGkn.jpg" alt="05.jpg" width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;'root' is the username.&lt;/li&gt;
&lt;li&gt;'!' is an encrypted password.&lt;/li&gt;
&lt;li&gt;'19056' is the date of the last password change since 1st Jan. 1970.&lt;/li&gt;
&lt;li&gt;'0' is the Minimum password age.&lt;/li&gt;
&lt;li&gt;'99999' is the Maximum password age.&lt;/li&gt;
&lt;li&gt;'7' is the warning period to change the password.&lt;/li&gt;
&lt;li&gt;':' is the password expiry period.&lt;/li&gt;
&lt;li&gt;':' is the Account expiration Date.&lt;/li&gt;
&lt;li&gt;':' is Reserved Field.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;/etc/group&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;type the command &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lhoLzq8y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653469799475/OxE28--O9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lhoLzq8y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653469799475/OxE28--O9.png" alt="06.png" width="337" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6NaxVsUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653470096088/Fl_j8OslG.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6NaxVsUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653470096088/Fl_j8OslG.jpg" alt="07.jpg" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;'root' is the group name.&lt;/li&gt;
&lt;li&gt;'x' is the group password.&lt;/li&gt;
&lt;li&gt;'0' is the group ID.&lt;/li&gt;
&lt;li&gt;Last empty field is the list of users in this group.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  How to create &amp;amp; delete a user?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;sudo useradd nameofuser&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo userdel nameofuser&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  How to change password and hostname?
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;sudo passwd userName&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo hostname newUser&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Permissions
&lt;/h1&gt;

&lt;h4&gt;
  
  
  Types
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Read (r)&lt;/li&gt;
&lt;li&gt;Write (w)&lt;/li&gt;
&lt;li&gt;Execute (e)type the following command &lt;code&gt;ls -l&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e0iYNgny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653471137115/OB40r21Gs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e0iYNgny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653471137115/OB40r21Gs.png" alt="08.png" width="563" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;start with the gibberish on the left side&lt;code&gt;drwxrwxr-x&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Understand this by dividing it into four separate parts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H0G3oc8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653471668405/9Cijku-YK.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H0G3oc8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653471668405/9Cijku-YK.jpg" alt="09.jpg" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tells about type

&lt;ul&gt;
&lt;li&gt;d is a directory&lt;/li&gt;
&lt;li&gt;'-' is a file&lt;/li&gt;
&lt;li&gt;l is a link&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rwx&lt;/code&gt; are user permissions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rwx&lt;/code&gt; are group permissions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;r-x&lt;/code&gt; are others' permission.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  so, what is this 'rwx' and 'r-x' means ?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; is readability permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;w&lt;/code&gt; is writability permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x&lt;/code&gt; is executability permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt; empty &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;so in the above photo, the user and group have all permissions to read, write and execute the directory but other users only have permission to read and execute&lt;/p&gt;

&lt;h3&gt;
  
  
  Modifying Permissions
&lt;/h3&gt;

&lt;p&gt;let say i have a file named myfile.txt with permission &lt;code&gt;-rw-rw-r--&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;change permission using &lt;code&gt;chmod&lt;/code&gt; command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ chmod o+w myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;o&lt;/code&gt; is for other users&lt;/p&gt;

&lt;p&gt;&lt;code&gt;w&lt;/code&gt; is to give it writing permission&lt;/p&gt;

&lt;p&gt;&lt;code&gt;+&lt;/code&gt; is to add permission&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-&lt;/code&gt; is to remove permission&lt;/p&gt;

&lt;h4&gt;
  
  
  Modifying Multiple Permissions
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;$ chmod ugo-rwx myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ugo&lt;/code&gt; is for user, group &amp;amp; others &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt; is to remove permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rwx&lt;/code&gt; is read, write and execution permission&lt;/li&gt;
&lt;li&gt;we removed all three permissions for three kind of users&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Numerical representation of permissions
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;read (r) &lt;code&gt;4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;write(w) &lt;code&gt;2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;execute(x) &lt;code&gt;1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;to grant all permission by using numerical representation&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ chmod +777 myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--enNHwQ8l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653493212358/kh46poEa_.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--enNHwQ8l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653493212358/kh46poEa_.jpg" alt="10.jpg" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt; to add permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;7&lt;/code&gt; to add all permission to user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;7&lt;/code&gt; to add all permission to group&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;7&lt;/code&gt; to add all permission to other users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Numerical presentation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;0&lt;/code&gt; No permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt; execution permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2&lt;/code&gt; write permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;3&lt;/code&gt; write and execution permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;4&lt;/code&gt; read permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;5&lt;/code&gt; read and execution permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;6&lt;/code&gt; read and write permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;7&lt;/code&gt; read, write and execution permission&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Change user ownership of file
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;$ sudo chown pintu myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;so ownership will transfer to the username pintu&lt;/p&gt;

&lt;h4&gt;
  
  
  Change group of file
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;$ sudo chgrp&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Set User ID (SUID)
&lt;/h1&gt;

&lt;p&gt;lets type a command in your terminal&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ ls -l /usr/bin/passwd&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RZCqjV-k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653494165909/kIwOOGHt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RZCqjV-k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1653494165909/kIwOOGHt9.png" alt="11.png" width="547" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  How am i able to access this data without being root user?
&lt;/h5&gt;

&lt;p&gt;you can see its permission, lets break down it to understand it better&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rwsr-xr-x&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;we have an &lt;code&gt;s&lt;/code&gt; in user permission,&lt;code&gt;s&lt;/code&gt; is &lt;strong&gt;SUID&lt;/strong&gt; which give us ownership and execution permission.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;S&lt;/code&gt; will only give only ownership&lt;/p&gt;

&lt;h3&gt;
  
  
  Add SUID to user
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;$ sudo chmod u+s myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add permission to user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;$ sudo chmod 4755 myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;4&lt;/code&gt; is for SUID&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Add Group ID (GUID)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;$ sudo chmod 2755 myfile.txt&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;2&lt;/code&gt; for GUID&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Sticky Bit Permission
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;It grants all permission but only delete access is only for user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;type the command &lt;code&gt;ls -ld/tmp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;you will see&lt;/p&gt;

&lt;p&gt;&lt;code&gt;drwxrwxrwt&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;t&lt;/code&gt; is Sticky Bit&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Modify Sticky Bit
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;$ sudo chmod +t directory&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ sudo chmod 1755 directory&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1&lt;/code&gt; for sticky bit permission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;_See you in the next blog of &lt;strong&gt;Linux Process&lt;/strong&gt; _&lt;/p&gt;

</description>
    </item>
    <item>
      <title>First step toward becoming a Linux Wizard.</title>
      <dc:creator>Harish</dc:creator>
      <pubDate>Sun, 15 May 2022 04:36:12 +0000</pubDate>
      <link>https://forem.com/harisheoran/first-step-toward-becoming-a-linux-wizard-55bi</link>
      <guid>https://forem.com/harisheoran/first-step-toward-becoming-a-linux-wizard-55bi</guid>
      <description>&lt;h3&gt;
  
  
  To become a  Linux Wizard you must conquer Command Line Interface,
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://youtu.be/Juo_0lpBMPY" rel="noopener noreferrer"&gt;Watch Video&lt;/a&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Start with, what is a CLI?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;It is a user interface, which doesn't have pretty graphics.&lt;/li&gt;
&lt;li&gt;We'll use the commands to mess around.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Let's say if you want to open a folder on your PC, we'll be using commands for that, don't freak out, its easy than it seems just bear with me,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By the way, CLI uses BASH as a programming language.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;here, &lt;strong&gt;haris&lt;/strong&gt; is PC admin name &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cosmos&lt;/strong&gt; is name of my PC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~&lt;/strong&gt; is representing &lt;strong&gt;Home&lt;/strong&gt; directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$&lt;/strong&gt; means we're in the system shell, and ready to type commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Understand Directories and their Path
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;All folders are like Tree Hierarchy, starting from Root Directory,&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Basic Commands
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pwd&lt;/code&gt; present working directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ls&lt;/code&gt;       check the content of the directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd&lt;/code&gt;    change directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd..&lt;/code&gt;   change directory to previous  directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd../..&lt;/code&gt;change directory to previous two times&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cd~&lt;/code&gt;  change directory to Home Directory&lt;/li&gt;
&lt;li&gt;flags are arguments/options&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ls -a&lt;/code&gt; to list all the hidden files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ls -l&lt;/code&gt;  show detailed versions of files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ls -la&lt;/code&gt; show detailed version of all hidden files &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;clear&lt;/code&gt; clear the terminal (ctrl+l)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.&lt;/code&gt; current directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;..&lt;/code&gt; parent Directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~&lt;/code&gt;home Directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt; previous Directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mkdir&lt;/code&gt; make a directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;touch&lt;/code&gt; Create a new file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;file&lt;/code&gt; give info about file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gedit&lt;/code&gt; edit file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cat&lt;/code&gt; view content of a file, concatenate files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;history&lt;/code&gt;displays  history of commands that were executed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;uparrow&lt;/code&gt; display previous commands&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ctrl + r&lt;/code&gt; reverse search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ctrl + c&lt;/code&gt;exit &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autocomplete&lt;/strong&gt; - type first letter of the directory then press &lt;code&gt;tab&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cp&lt;/code&gt; copy files &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mv&lt;/code&gt; move files &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rm&lt;/code&gt; remove files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mkdir -p&lt;/code&gt; make a directory in the subdirectory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rm -r&lt;/code&gt; remove recursively &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rm -rv&lt;/code&gt; remove recursively and display removed directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;find ~ -name&lt;/code&gt; find a file in home directory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpjc8ztvl4xkvu1vpv6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpjc8ztvl4xkvu1vpv6q.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
or find it only with file type or only with file name &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;find ~ -type d -name&lt;/code&gt; find folder&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;man&lt;/code&gt; find the manual of any command&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;whatis&lt;/code&gt; tells about command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Now you are ready to become a Linux Wizard,&lt;br&gt;
See you in Part 2&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>Computer Netwoking - OSI Model</title>
      <dc:creator>Harish</dc:creator>
      <pubDate>Sun, 20 Feb 2022 16:00:07 +0000</pubDate>
      <link>https://forem.com/harisheoran/computer-netwoking-osi-model-ekm</link>
      <guid>https://forem.com/harisheoran/computer-netwoking-osi-model-ekm</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;OSI - Open Systems Interconnection Model&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So, basically it tells us about how one computer communicate to another computer via Internet.&lt;br&gt;
&lt;a href="https://youtu.be/vv4y_uOneC0"&gt; Overview Of OSI Model &lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/IPvYjXCsTg8"&gt;For Deep dive into OSI Model&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;OSI Model contains 7 layers,&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3gdl89u59m147vj5d5v.jpg" alt="Image description" width="560" height="456"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. &lt;strong&gt;Application Layer&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Layer where user interact with it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consist of application like Web  Browsers, Chat Applications,&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqarewggjwfq8ktse3j5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqarewggjwfq8ktse3j5q.png" alt="Image description" width="558" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A server is a computer or system that provides resources, data, services, or programs to other computers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;so, the application has two sides: Client side &amp;amp; server side and they communicate through each other,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ping measures the round trip time for messages send from the originating host to destination computer &amp;amp; are echoed back,&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ping google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Web protocols;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TCP/IP:&lt;br&gt;
HTTP - Hyper text transfer protocol&lt;br&gt;
DHCP - Dynamic Host Control Protocol&lt;br&gt;
FTP - File transfer Protocol&lt;br&gt;
SMTP - Simple mail transfer Protocol&lt;br&gt;
POP3 &amp;amp; IMAC - used to receive Email&lt;br&gt;
SSH - Seceure Shell&lt;br&gt;
VNC - Virtual Networking Computing &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basically it provide services for network applications with help of protocols.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Presentation Layer&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2jgkw2swdkgg807kwry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2jgkw2swdkgg807kwry.png" alt="Image description" width="702" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receive data from application layer,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-So, the data we receive is in either alphabet or digits,&lt;br&gt;
first we convert that data into binary ,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;then presentation layer compress the data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-and then it encrypt that data by Secure Sockets Layer (SSL).&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;strong&gt;Session Layer&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bjjw5shf0bs0pok08al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bjjw5shf0bs0pok08al.png" alt="Image description" width="544" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Helps is setting up &amp;amp; managing connection enabling sending &amp;amp; receiving data followed by sessions,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perform Authentication&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perform Authorization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manage Sessions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. &lt;strong&gt;Transport Layer&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Layer 4 is responsible for end-to-end communication between the two devices. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Consist of&lt;/em&gt; -&lt;br&gt;
1.Segmentation &lt;br&gt;
2.Flow Control&lt;br&gt;
3.Error Control&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Segmentation&lt;/strong&gt; this includes taking data from the session layer and breaking it up into chunks called segments before sending it to layer, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F016qzsf1fyyz017auovc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F016qzsf1fyyz017auovc.jpg" alt="Image description" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sequence Number - Each block of data is identified with a sequence number. Helps to reassemble segments in correct order to make correct messages/ user input.&lt;/p&gt;

&lt;p&gt;Port Number -A port is identified for each transport protocol and address combination by a 16-bit unsigned number, known as the port number.&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Flow Control&lt;/strong&gt; Control amount of Data being transmitted&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17l9vosjd7u73hydjo7m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17l9vosjd7u73hydjo7m.jpg" alt="Image description" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Error Control&lt;/strong&gt;  Error control is basically process in data link layer of detecting or identifying and re-transmitting data frames that might be lost or corrupted during transmission&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Protocol of Transport Layer&lt;/strong&gt;   &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;UDP (User Datagram prortocol) - Data may or may not be delivered/ changed/ ordered,&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;02.TCP (Transmission Control Protocol)- 100% data transfer.&lt;/p&gt;




&lt;h2&gt;
  
  
  05. &lt;strong&gt;Network Layer&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Work for transmission of data from one computer to another computer which is connected to another network.
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fld2zuaaws3cw4lbw7129.jpg" alt="Image description" width="800" height="520"&gt;
&lt;/li&gt;
&lt;li&gt;01. Logical Addressing - &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx208j8jhpsipsfd9nacl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx208j8jhpsipsfd9nacl.jpg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

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




&lt;h2&gt;
  
  
  06. &lt;strong&gt;Data Link Layer&lt;/strong&gt; -
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frddrnibz3bgu8459ngrk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frddrnibz3bgu8459ngrk.jpg" alt="Image description" width="728" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;01. Framing  a frame is a simple container for a single network packet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo4sxgnm5ty8r36re1gc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo4sxgnm5ty8r36re1gc.jpg" alt="Image description" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;02.Control how data is placed and received from media&lt;/p&gt;




&lt;h2&gt;
  
  
  07. &lt;strong&gt;Physical Layer&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flj80bdy3do6xb13dfoc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flj80bdy3do6xb13dfoc5.png" alt="Image description" width="659" height="359"&gt;&lt;/a&gt;&lt;br&gt;
-Physical layer is the lowest layer of the OSI reference model. It is responsible for sending bits from one computer to another. This layer is not concerned with the meaning of the bits and deals with the setup of physical connection to the network and with transmission and reception of signals. &lt;/p&gt;




</description>
      <category>devops</category>
      <category>computerscience</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
