<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sneh Chauhan</title>
    <description>The latest articles on DEV Community by Sneh Chauhan (@sneh27).</description>
    <link>https://dev.to/sneh27</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%2F529304%2F15a81b04-2d29-4825-865e-21a7d8655489.png</url>
      <title>DEV Community: Sneh Chauhan</title>
      <link>https://dev.to/sneh27</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sneh27"/>
    <language>en</language>
    <item>
      <title>Cannot use a custom SSH port in Ubuntu 22.10 or above? Here's a fix</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Wed, 01 Nov 2023 18:21:10 +0000</pubDate>
      <link>https://dev.to/sneh27/cannot-use-a-custom-ssh-port-in-ubuntu-2210-or-above-heres-a-fix-2nhk</link>
      <guid>https://dev.to/sneh27/cannot-use-a-custom-ssh-port-in-ubuntu-2210-or-above-heres-a-fix-2nhk</guid>
      <description>&lt;p&gt;In recent versions of Ubuntu, specifically from version 22.10 onwards, Ubuntu has shifted from Traditional SSH to Socket-Based SSH activation. This adoption has brought several improvements in system resource utilization and service responsiveness. However, it has also introduced a challenge for users accustomed to configuring their SSH service the traditional way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a custom SSH port the old way
&lt;/h2&gt;

&lt;p&gt;In earlier versions of Ubuntu, the process of changing SSH port was straightforward: locate and edit "&lt;strong&gt;sshd_config&lt;/strong&gt;" file (usually in /etc/ssh), adjust the "&lt;strong&gt;Port&lt;/strong&gt;" parameter to the desired port, save and exit the file, open the new port in the firewall, and finally, restart the SSH service. This ensures that SSH would listen on the newly specified port. However, in Ubuntu 22.10 and above, due to the adoption of Socket-based activation, a different method is now required to modify the SSH port. Even the &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; file includes a section mentioning this:&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%2Fuyzy7rmrc7spavxo3n1y.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%2Fuyzy7rmrc7spavxo3n1y.png" alt="Port Change Update"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a custom SSH port the "NEW" way
&lt;/h2&gt;

&lt;p&gt;As discussed earlier, in Ubuntu 22.10 and beyond, a new approach using Socket-based activation has been introduced to modify the SSH port. This method leverages "&lt;strong&gt;systemd"&lt;/strong&gt; to handle the SSH service. Here's a step-by-step process for changing the SSH port:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;/u&gt;&lt;strong&gt;:&lt;/strong&gt;   &lt;strong&gt;Create the necessary directory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your terminal and execute the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkdir -p /etc/systemd/system/ssh.socket.d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This command ensures that the necessary directories exist for systemd to manage the SSH socket.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/u&gt;&lt;strong&gt;:&lt;/strong&gt;   &lt;strong&gt;Create the configuration file&lt;/strong&gt; (&lt;strong&gt;listen.conf)&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;sudo vim /etc/systemd/system/ssh.socket.d/listen.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If you want SSH to listen on both port &lt;strong&gt;22&lt;/strong&gt; and your custom port &lt;strong&gt;54872,&lt;/strong&gt; add the following lines:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Socket]
ListenStream=54872
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Else, if you want SSH to listen on your custom port "&lt;strong&gt;54872&lt;/strong&gt; only", add the following lines:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Socket]
ListenStream=
ListenStream=54872
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Next, save the file and exit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/u&gt;&lt;strong&gt;:&lt;/strong&gt;   &lt;strong&gt;Reload the systemd manager configuration:&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;sudo systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;This will ensure that systemd recognizes the new configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 4&lt;/strong&gt;&lt;/u&gt;&lt;strong&gt;:&lt;/strong&gt;  &lt;strong&gt;Restart the SSH socket:&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;sudo systemctl restart ssh.socket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;u&gt;&lt;strong&gt;Step 5&lt;/strong&gt;&lt;/u&gt;&lt;strong&gt;:&lt;/strong&gt;   &lt;strong&gt;Verify the change:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To confirm that the SSH port has been successfully changed, attempt to connect to your server using the new port, in this case, &lt;code&gt;54872&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh &amp;lt;user&amp;gt;@&amp;lt;your_server_ip&amp;gt; -p 54872
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If successful, you've now securely configured SSH to use the new port.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reverting to the Traditional method of setting a custom SSH port
&lt;/h2&gt;

&lt;p&gt;The shift to socket-based activation for SSH in Ubuntu versions 22.10 and above has evoked varied reactions from users. While some acknowledge its potential advantages in efficiency and resource handling, others face difficulties, particularly concerning custom port configurations and the inclination to return to the conventional SSH setup.&lt;/p&gt;

&lt;p&gt;Returning to the traditional configuration involves a &lt;strong&gt;sequence of five steps&lt;/strong&gt;. The following commands facilitate its implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo rm /etc/systemd/system/ssh.service.d/00-socket.conf
systemctl disable --now ssh.socket
systemctl enable --now ssh.service
sudo systemctl daemon-reload
sudo systemctl restart ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Ubuntu's new way of doing things with Socket-based activation brings benefits, but some users find it tricky. Many prefer the old, familiar method. It's important to find a balance between new ideas and what users already know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;p&gt;If you are interested in knowing more about Traditional vs Socket-Based SSH Activation, check out my blog &lt;a href="https://dev.to/sneh27/maximizing-efficiency-socket-based-ssh-activation-in-ubuntu-2210-and-above-344b"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>sysadmin</category>
      <category>ssh</category>
    </item>
    <item>
      <title>Maximizing Efficiency: Socket-Based SSH Activation in Ubuntu 22.10 and above</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Wed, 18 Oct 2023 18:00:44 +0000</pubDate>
      <link>https://dev.to/sneh27/maximizing-efficiency-socket-based-ssh-activation-in-ubuntu-2210-and-above-344b</link>
      <guid>https://dev.to/sneh27/maximizing-efficiency-socket-based-ssh-activation-in-ubuntu-2210-and-above-344b</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the dynamic landscape of Ubuntu, innovation is the driving force that propels it forward. With the release of Ubuntu 22.10, a seismic shift has occurred in how we interact with one of the most fundamental services: SSH. Meet socket-based activation, a game-changer in how we handle remote connections.&lt;/p&gt;

&lt;p&gt;This paradigm shift introduces a more resource-efficient approach to launching SSH services, promising a more judicious allocation of system resources. In this blog post, we embark on a journey through this transformative feature, exploring the intricacies of socket-based activation for SSH in Ubuntu 22.10 and beyond.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is Socket-Based Activation?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Socket-based activation is a method used to manage services on a Linux system, including SSH. Traditionally, services like SSH were started directly by systemd. However, with Socket-based activation, the service won't start until there is an incoming request. This approach introduces a few key benefits :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Resource Efficiency&lt;/strong&gt;: System resources like memory and CPU are used judiciously as the SSH service is started only when a connection is requested.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Faster Bootups&lt;/strong&gt;: As SSH is only initiated when a connection is requested, it eases the burden on systemd when starting services during bootup.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Traditional SSH vs Socket-Based SSH
&lt;/h2&gt;

&lt;p&gt;Traditional SSH involves starting the SSH service (&lt;strong&gt;&lt;em&gt;ssh.service&lt;/em&gt;&lt;/strong&gt; ) directly during system boot by systemd even when there is no incoming connection request. In contrast, Socket-based SSH (&lt;strong&gt;&lt;em&gt;ssh.socket&lt;/em&gt;&lt;/strong&gt; ) waits till a connection request is made and then it invokes the SSH service.&lt;/p&gt;

&lt;p&gt;Inspecting the "&lt;strong&gt;ssh.service&lt;/strong&gt;" unit in Traditional and Socket-Based SSH using systemctl gives us more information about the resource utilization :&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%2F2n7oc10mn9czrq7nzkns.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%2F2n7oc10mn9czrq7nzkns.png" alt="ssh service"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As it can be seen in Traditional SSH, the &lt;strong&gt;ssh.service&lt;/strong&gt; unit is "&lt;strong&gt;enabled&lt;/strong&gt;" on startup and the memory usage is &lt;strong&gt;14.6 megabytes&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpazkn5pjkxjpamsbsham.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%2Fpazkn5pjkxjpamsbsham.png" alt="ssh socket"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the other hand, in Socket-Based SSH, the &lt;strong&gt;ssh.service&lt;/strong&gt; unit is "&lt;strong&gt;disabled&lt;/strong&gt;" on startup and it is triggered by "&lt;strong&gt;ssh.socket&lt;/strong&gt;" upon new connection request. The memory usage here is just &lt;strong&gt;2.3 megabytes&lt;/strong&gt; which is way less than Traditional SSH.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Ubuntu versions adopt this change?
&lt;/h2&gt;

&lt;p&gt;Starting with &lt;strong&gt;Ubuntu 22.10&lt;/strong&gt; (Kinetic Kudu), this change in SSH activation method continues in subsequent versions &lt;strong&gt;23.04&lt;/strong&gt; (Lunar Lobster) and &lt;strong&gt;23.10&lt;/strong&gt; (Mantic Minotaur) which is the latest version at the time of writing this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  How are Ubuntu users reacting to the change?
&lt;/h2&gt;

&lt;p&gt;The transition to socket-based activation for SSH in Ubuntu 22.10 and above has brought about a mixed response from the user community. While many users appreciate the potential benefits in terms of efficiency and resource management, some have encountered challenges, particularly related to &lt;strong&gt;custom port usage&lt;/strong&gt; and the desire to revert to the &lt;strong&gt;traditional SSH setup&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One notable concern revolves around the use of custom ports for SSH connections. With socket-based activation, users have found that configuring SSH to listen on a non-standard port can be more intricate than with the conventional setup. This has led to frustration for those who rely on custom ports for security reasons or due to network configurations.&lt;/p&gt;

&lt;p&gt;Additionally, there's a segment of the user base that, for various reasons, prefers or requires the familiarity and predictability of the traditional SSH setup. These users have expressed a desire to revert back to the previous method of managing SSH services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In summary, Ubuntu's move to socket-based SSH activation offers enhanced efficiency. User feedback, particularly on custom port configurations, is vital for refinement. With continued improvements, this feature is set to be a valuable asset.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>ubuntu</category>
      <category>ssh</category>
      <category>news</category>
    </item>
    <item>
      <title>useradd vs adduser: Which command to use?</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Sun, 29 May 2022 07:35:51 +0000</pubDate>
      <link>https://dev.to/kcdchennai/useradd-vs-adduser-which-command-to-use-3mb4</link>
      <guid>https://dev.to/kcdchennai/useradd-vs-adduser-which-command-to-use-3mb4</guid>
      <description>&lt;p&gt;Linux is amazing! Let me tell you what made me say so.&lt;/p&gt;

&lt;p&gt;There are multiple ways to perform a function in Linux. Let's say you simply want to print "Hello World" to the screen. To do so, some beginners might create a new file, write "Hello world" to it and then use the &lt;code&gt;cat&lt;/code&gt; command to print the contents of the file. Some experienced users may use the &lt;code&gt;echo&lt;/code&gt; command to print the same to the screen. Both of them are correct as the job is done perfectly but the only difference is that using the &lt;code&gt;echo&lt;/code&gt; command, we can accomplish the job quickly.&lt;/p&gt;

&lt;p&gt;In this blog, we are going to discuss about one such function of &lt;strong&gt;creating a new user&lt;/strong&gt; using two commands &lt;code&gt;adduser&lt;/code&gt; and &lt;code&gt;useradd&lt;/code&gt;. We'll also talk about which command you must use and when.&lt;/p&gt;

&lt;p&gt;Let's dive right into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  adduser command
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;adduser&lt;/strong&gt; command &lt;strong&gt;creates a new user&lt;/strong&gt; on a linux system. Apart from this it does the following things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates a &lt;strong&gt;new group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Creates the &lt;strong&gt;home directory&lt;/strong&gt; for new user under /home.&lt;/li&gt;
&lt;li&gt;Asks for the password.&lt;/li&gt;
&lt;li&gt;Asks for additional information such as &lt;strong&gt;Full Name&lt;/strong&gt;, &lt;strong&gt;Room number&lt;/strong&gt;, &lt;strong&gt;Work phone&lt;/strong&gt;, &lt;strong&gt;Home phone&lt;/strong&gt; and other information.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that you need &lt;code&gt;superuser&lt;/code&gt; permissions to execute the command.&lt;/p&gt;
&lt;/blockquote&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%2Fcoqul2e1wss70qfw3853.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%2Fcoqul2e1wss70qfw3853.png" alt="adduser command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  useradd command
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;useradd&lt;/code&gt; command does the same thing as &lt;code&gt;adduser&lt;/code&gt; command i.e &lt;strong&gt;creating a new user&lt;/strong&gt; but with few differences.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It does &lt;strong&gt;not&lt;/strong&gt; create a home directory for the new user by default.&lt;/li&gt;
&lt;li&gt;It does &lt;strong&gt;not&lt;/strong&gt; ask for password.&lt;/li&gt;
&lt;li&gt;It does &lt;strong&gt;not&lt;/strong&gt; ask for any additional information.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that you need &lt;code&gt;superuser&lt;/code&gt; permissions to execute the command.&lt;/p&gt;
&lt;/blockquote&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%2Fa49ebhg0sxqjfpaz40js.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%2Fa49ebhg0sxqjfpaz40js.png" alt="useradd"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although it does not ask for any additional information by default, you can provide them that information using the flags given below:&lt;/p&gt;

&lt;p&gt;-c, --command      : GECOS field for the new account.&lt;br&gt;
-D, --defaults     : Create new user with default set values.&lt;br&gt;
-m, --create-home  : Create user's home directory&lt;br&gt;
-p, --password     : Set Password for the account.&lt;br&gt;
-e, --expire       : Set the expiry date for the user.&lt;/p&gt;

&lt;p&gt;You can view additional flags by using the command:&lt;/p&gt;


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

&lt;p&gt;useradd --help&lt;/p&gt;

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

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Which one should I use and when?&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;Well, in most of the cases you must use &lt;code&gt;adduser&lt;/code&gt; command. It's easy to set up password, create home directory etc., using this command.&lt;/p&gt;

&lt;p&gt;But that doesn't mean &lt;code&gt;useradd&lt;/code&gt; command is useless. If you temporarily want to create a user without providing much details for the account, you can use the &lt;code&gt;useradd&lt;/code&gt; command. Generally it's used while executing commands in automated way in scripts.&lt;/p&gt;

&lt;p&gt;That's all for the blog. Comment down below your go-to command for creating a user. &lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>beginners</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Nexus Repository Manager : What is it &amp; how to configure it on a Digital Ocean Droplet?</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Thu, 26 May 2022 09:12:02 +0000</pubDate>
      <link>https://dev.to/kcdchennai/nexus-repository-manager-what-is-it-how-to-configure-it-on-a-digital-ocean-droplet-20ma</link>
      <guid>https://dev.to/kcdchennai/nexus-repository-manager-what-is-it-how-to-configure-it-on-a-digital-ocean-droplet-20ma</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;If you are working on a big project which would take long time, repository manager is the thing which can save you a lot of time and effort. &lt;/p&gt;

&lt;p&gt;Let's say you are building a Java-Maven application. It uses &lt;a href="https://mvnrepository.com/repos/central" rel="noopener noreferrer"&gt;Maven Central Repository&lt;/a&gt; for resolving dependencies. Now if you want to use a package not provided by Java by default, you need to get it from Maven Central. With repository managers, these packages are stored in the repository manager itself so you don't have to look for different packages at different places.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a Repository Manager?
&lt;/h1&gt;

&lt;p&gt;A &lt;strong&gt;Repository manager&lt;/strong&gt; is a dedicated server location which is used to manage all the repositories an development team will need throughout the development cycle.&lt;/p&gt;

&lt;p&gt;We can consider Repository Manager as a &lt;strong&gt;Warehouse for parts&lt;/strong&gt;. Just as a Warehouse serves as a centralized location for storage of parts and manages receiving, sending and everything in between, a Repository Manager manages all the parts involved in the software development process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository v/s Repository Manager
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Repository&lt;/strong&gt; is a storage location where components like artifacts, binaries or containers are retrieved so they can be installed or used whereas a **Repository Manager **is a dedicated application which manages all of your internal or proxy repositories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why do you need it? 🤔
&lt;/h3&gt;

&lt;p&gt;Let's say you work in a company which is working upon multiple projects. Few of which are build using Java, .NET and Python. Each of these will produce different types of artifacts. Now you'll need different software to store each of them. A Repository manager solves this problem and provides a centralized platform to store all the components involved in the software development process. Few of the other features of a repository manager are :&lt;/p&gt;

&lt;p&gt;👉 Saving time and bandwidth due to reduced number of downloads off remote repositories.&lt;/p&gt;

&lt;p&gt;👉 Backup and Restore&lt;/p&gt;

&lt;p&gt;👉 Cleanup Policies&lt;/p&gt;

&lt;p&gt;👉 Search Functionality&lt;/p&gt;

&lt;p&gt;👉 Multi-format support&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Nexus Repository Manager? 🤔
&lt;/h1&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%2Fmcy8s10j8ul0yqpikuil.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%2Fmcy8s10j8ul0yqpikuil.png" alt="Screenshot 2022-04-02 2326400.png" width="800" height="271"&gt;&lt;/a&gt;&lt;br&gt;
Nexus Repository Manager is a &lt;strong&gt;FREE-to-use&lt;/strong&gt; artifact repository manager by &lt;code&gt;Sonatype&lt;/code&gt;. It supports a wide variety of formats like APT, NuGET, Maven and Docker. List of all supported formats can be found &lt;a href="https://www.sonatype.com/products/repository-oss-download" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now that you know what Nexus Repository Manager is, let me show you how to configure it on a cloud server. We'll configure Nexus on Digital Ocean Droplet(cloud server) for this blog but you can do the same on almost any other cloud service. Click &lt;a href="https://try.digitalocean.com/freetrialoffer/" rel="noopener noreferrer"&gt;here&lt;/a&gt; to get a FREE &lt;code&gt;$100 credit&lt;/code&gt; on Digital Ocean for 60 days.&lt;/p&gt;


&lt;h1&gt;
  
  
  Configuring Nexus on Digital Ocean Droplet
&lt;/h1&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;STEP 1&lt;/strong&gt; :   Create a Droplet (cloud server)
&lt;/h3&gt;

&lt;p&gt;I've chosen &lt;code&gt;Ubuntu 20.04 LTS&lt;/code&gt; but you are free to use distribution of your choice. You can choose the datacenter region which is nearest to your location. In my case it's &lt;code&gt;Bangalore&lt;/code&gt;. You can use &lt;code&gt;Password Authentication&lt;/code&gt;(less secure) or &lt;code&gt;SSH keys&lt;/code&gt;(more secure) for authentication.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note :&lt;/strong&gt; Make sure you choose &lt;code&gt;8 GB/ 4 vCPUs droplet&lt;/code&gt; because Nexus takes up a ton of memory and has high CPU usage at times.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/lNywbOByhogUlk6k3w/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/lNywbOByhogUlk6k3w/giphy.gif" alt="Image description" width="480" height="234"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;STEP 2&lt;/strong&gt; :  Log in to the droplet using it's &lt;code&gt;public IP address&lt;/code&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;If you used &lt;code&gt;SSH key Authentication&lt;/code&gt;, you won't be prompted for password but if you used &lt;code&gt;Password Authentication&lt;/code&gt;, you need to enter your password to authenticate yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note :&lt;/strong&gt; The default user for any digital ocean droplet is &lt;code&gt;root&lt;/code&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;ssh root@&amp;lt;IP_address&amp;gt;

&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0swrret24wnri65hkk6.gif" 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%2Fz0swrret24wnri65hkk6.gif" alt="Image description" width="480" height="215"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;STEP 3&lt;/strong&gt; :  Install &lt;code&gt;Java version 8&lt;/code&gt; and networking tools.
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Nexus repository manager requires &lt;code&gt;Java version 8&lt;/code&gt; to be installed to run.&lt;/p&gt;

&lt;p&gt;We'll use &lt;code&gt;netstat&lt;/code&gt; utility to check which port our application is listening to for which we need &lt;code&gt;net-tools&lt;/code&gt; package to be installed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To install Java version 8 and net-tools use the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt install openjdk-8-jre-headless -y
apt install net-tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check if Java is properly installed, use the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above command must give the output :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;STEP 4&lt;/strong&gt;:  Download &lt;code&gt;Nexus Repository Manager&lt;/code&gt; and &lt;code&gt;untar&lt;/code&gt; it.
&lt;/h3&gt;

&lt;p&gt;To download Nexus Repository manager in &lt;code&gt;/opt&lt;/code&gt; use command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /opt
wget https://download.sonatype.com/nexus/3/nexus-3.38.1-01-unix.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To untar it, use the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tar -zxvf nexus-3.38.1-01-unix.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After executing the above commands, when executing the command &lt;code&gt;ls&lt;/code&gt;(list files and directories) , it must have 2 new directories namely &lt;code&gt;nexus-3.38.1-01&lt;/code&gt; and &lt;code&gt;sonatype-work&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@ubuntu-s-4vcpu-8gb-intel-blr1-01:/opt# ls
digitalocean  nexus-3.38.1-01  nexus-3.38.1-01-unix.tar.gz  sonatype-work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;STEP 5&lt;/strong&gt;:  Create a new user &lt;code&gt;nexus&lt;/code&gt;, give it appropriate permissions and change nexus configuration to run as a &lt;code&gt;nexus&lt;/code&gt; user.
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Note : Services should &lt;strong&gt;not&lt;/strong&gt; run with Root user permissions.&lt;/p&gt;

&lt;p&gt;Best Practice : &lt;code&gt;Create a new user for each service&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To create a new user &lt;code&gt;nexus&lt;/code&gt;, use the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adduser nexus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will ask for user information and password. To skip filling some values, press &lt;code&gt;Enter&lt;/code&gt; key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@ubuntu-s-4vcpu-8gb-intel-blr1-01:~# adduser nexus
Adding user `nexus' ...
Adding new group `nexus' (1000) ...
Adding new user `nexus' (1000) with group `nexus' ...
Creating home directory `/home/nexus' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for nexus
Enter the new value, or press ENTER for the default
        Full Name []: Nexus
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the ownership of directories &lt;code&gt;nexus-3.38.1-01&lt;/code&gt; and &lt;code&gt;sonatype-work&lt;/code&gt; from &lt;code&gt;root&lt;/code&gt; to &lt;code&gt;nexus&lt;/code&gt;. To do so, use the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /opt
chown -R nexus:nexus nexus-3.38.1-01/
chown -R nexus:nexus sonatype-work/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check if the ownership was changed, use the command :&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;It must output :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;drwxr-xr-x  4 root  root  4096 Apr  3 05:51 digitalocean
drwxr-xr-x 10 nexus nexus 4096 Apr  3 17:26 nexus-3.38.1-01
drwxr-xr-x  3 nexus nexus 4096 Apr  3 17:26 sonatype-work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To change nexus configuration to run as a nexus user, open the file &lt;code&gt;nexus.rc&lt;/code&gt; using :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim nexus-3.38.1-01/bin/nexus.rc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace it's contents with :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;run_as_user="nexus"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;STEP 6&lt;/strong&gt;:  Login as &lt;code&gt;nexus&lt;/code&gt; and start &lt;code&gt;nexus service&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To switch user from &lt;code&gt;root&lt;/code&gt; to &lt;code&gt;nexus&lt;/code&gt;, use the command &lt;code&gt;su - &amp;lt;user_name&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;su - nexus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, to start nexus, use the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/nexus-3.38.1-01/bin/nexus start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It must give the output :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nexus@ubuntu-s-4vcpu-8gb-intel-blr1-01:~$ /opt/nexus-3.38.1-01/bin/nexus start
Starting nexus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check if it started successfully or not, type :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ps aux | grep nexus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It must give the output :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nexus@ubuntu-s-4vcpu-8gb-intel-blr1-01:~$ ps aux | grep nexus
root       20134  0.0  0.0  10132  3868 pts/0    S    19:08   0:00 su - nexus
nexus      20137  0.0  0.0  10028  5092 pts/0    S    19:08   0:00 -bash
nexus      20353  170 24.3 6618988 1986448 pts/0 Sl   19:10   3:13 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -server -Dinstall4j.jvmDir=/usr/lib/jvm/java-8-openjdk-amd64/jre -Dexe4j.moduleName=/opt/nexus-3.38.1-01/bin/nexus -XX:+UnlockDiagnosticVMOptions -Dinstall4j.launcherId=245 -Dinstall4j.swt=false -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=../sonatype-work/nexus3/log/jvm.log -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true -Dkaraf.home=. -Dkaraf.base=. -Dkaraf.etc=etc/karaf -Djava.util.logging.config.file=etc/karaf/java.util.logging.properties -Dkaraf.data=../sonatype-work/nexus3 -Dkaraf.log=../sonatype-work/nexus3/log -Djava.io.tmpdir=../sonatype-work/nexus3/tmp -Dkaraf.startLocalConsole=false -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=lib/endorsed -Di4j.vpt=true -classpath /opt/nexus-3.38.1-01/.install4j/i4jruntime.jar:/opt/nexus-3.38.1-01/lib/boot/nexus-main.jar:/opt/nexus-3.38.1-01/lib/boot/activation-1.1.1.jar:/opt/nexus-3.38.1-01/lib/boot/jakarta.xml.bind-api-2.3.3.jar:/opt/nexus-3.38.1-01/lib/boot/jaxb-runtime-2.3.3.jar:/opt/nexus-3.38.1-01/lib/boot/txw2-2.3.3.jar:/opt/nexus-3.38.1-01/lib/boot/istack-commons-runtime-3.0.10.jar:/opt/nexus-3.38.1-01/lib/boot/org.apache.karaf.main-4.3.6.jar:/opt/nexus-3.38.1-01/lib/boot/osgi.core-7.0.0.jar:/opt/nexus-3.38.1-01/lib/boot/org.apache.karaf.specs.activator-4.3.6.jar:/opt/nexus-3.38.1-01/lib/boot/org.apache.karaf.diagnostic.boot-4.3.6.jar:/opt/nexus-3.38.1-01/lib/boot/org.apache.karaf.jaas.boot-4.3.6.jar com.install4j.runtime.launcher.UnixLauncher start 9d17dc87 0 0 org.sonatype.nexus.karaf.NexusMain
nexus      20778  0.0  0.0  10616  3300 pts/0    R+   19:12   0:00 ps aux
nexus      20779  0.0  0.0   8160   732 pts/0    S+   19:12   0:00 grep --color=auto nexus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my case the process with process ID &lt;code&gt;20353&lt;/code&gt;. By default it is accessible on the port &lt;code&gt;8081&lt;/code&gt;. We can check it using the command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;netstat -lpnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It would give the output :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nexus@ubuntu-s-4vcpu-8gb-intel-blr1-01:~$ netstat -lpnt
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      20353/java
tcp        0      0 127.0.0.1:44945         0.0.0.0:*               LISTEN      20353/java
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can confirm from the above output that &lt;code&gt;20353/java&lt;/code&gt;(nexus service) is accessible at port &lt;code&gt;8081&lt;/code&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If it doesn't show up in your case, give it some time(atleast 5 min) before restarting &lt;br&gt;
the service.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Accessing Nexus from Browser 🤩
&lt;/h1&gt;

&lt;p&gt;We can access Nexus from Browser but for that we need to configure the firewall of our droplet to allow incoming requests to port &lt;code&gt;8081&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To do so,&lt;/p&gt;

&lt;p&gt;👉 Click on the droplet&lt;/p&gt;

&lt;p&gt;👉 Open &lt;code&gt;Networking&lt;/code&gt; section&lt;/p&gt;

&lt;p&gt;👉 Scroll down to the bottom and click on &lt;code&gt;Edit&lt;/code&gt; button under &lt;code&gt;Firewall&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Click on &lt;code&gt;Create Firewall&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Name the &lt;code&gt;Firewall rule&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Under &lt;code&gt;inbound rules&lt;/code&gt;(rules for incoming requests), create a new &lt;code&gt;Custom&lt;/code&gt; rule. Let the protocol be &lt;code&gt;TCP&lt;/code&gt; and change the port to &lt;code&gt;8081&lt;/code&gt;. Remove &lt;code&gt;All IPv4&lt;/code&gt; and &lt;code&gt;All IPv6&lt;/code&gt; from sources and put your &lt;code&gt;Public IP address&lt;/code&gt; in that field because you don't want your nexus service to be accessible to anyone.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can get your &lt;code&gt;Public IP address&lt;/code&gt; from the URL :&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ifconfig.me/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://i.giphy.com/media/EmVNDCgOctIbwbVcR0/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/EmVNDCgOctIbwbVcR0/giphy.gif" alt="firewall.gif" width="480" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now to access it from your browser, open up your browser and in the address bar type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Droplet's_IPv4&amp;gt;:8081
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for example it's &lt;code&gt;143.110.189.99:8081&lt;/code&gt;  in my case where &lt;code&gt;143.110.189.99&lt;/code&gt; is my Droplet's IPv4 and &lt;code&gt;8081&lt;/code&gt; is the port number.&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%2Fufeq8feb35fw4uja1v17.gif" 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%2Fufeq8feb35fw4uja1v17.gif" alt="nexusinbrowser.gif" width="480" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations🥳! You're all set to use Nexus in your Browser🤩.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;If you learnt something new from this blog, make sure you give it a like, share and follow me on the platform. Also, feel free to connect with me on &lt;a href="https://twitter.com/snehstwt" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;. Thank you for reading!📃&lt;/p&gt;

</description>
      <category>devops</category>
      <category>tutorial</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>15 Vim shortcuts that will make your life easier</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Sun, 22 May 2022 16:27:36 +0000</pubDate>
      <link>https://dev.to/kcdchennai/top-15-vim-shortcuts-to-remember-5523</link>
      <guid>https://dev.to/kcdchennai/top-15-vim-shortcuts-to-remember-5523</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you ever installed Linux in your life, I'm sure you might have come across &lt;strong&gt;Vim&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vim&lt;/strong&gt; is a &lt;code&gt;command-line&lt;/code&gt; based &lt;strong&gt;text editor&lt;/strong&gt;. It's a great tool but I won't say that it's the best text editor in Linux as it would lead to a never-ending debate. &lt;/p&gt;

&lt;p&gt;Vim is actually an &lt;code&gt;improved&lt;/code&gt; version of the old &lt;code&gt;vi editor&lt;/code&gt;. It comes with many new features including &lt;strong&gt;multi-level undo&lt;/strong&gt;, &lt;strong&gt;multiple window support&lt;/strong&gt;, &lt;strong&gt;visual mode&lt;/strong&gt; and &lt;strong&gt;command-line completion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're using it for the first time, you may have hard time trying to exit Vim.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
What? Don't you believe me? &lt;/p&gt;

&lt;p&gt;Here's the proof :&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1105649774504669184-269" src="https://platform.twitter.com/embed/Tweet.html?id=1105649774504669184"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1105649774504669184-269');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1105649774504669184&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;In this blog, I'll list down 15 shortcuts that will save you a lot of time while working with &lt;code&gt;vim&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Shortcut key&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;w&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;move forward&lt;/code&gt; by one word(you need to be in normal mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;b&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;move backward&lt;/code&gt; by one word(you need to be in normal mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;gg&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;move to the beginning&lt;/code&gt; of the file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;G&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;move to the end&lt;/code&gt; of the file(last line).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;dw&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;delete the word&lt;/code&gt;, cursor is positioned upon.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;dd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;delete the line&lt;/code&gt;, cursor is positioned upon.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;d2d&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;delete 2 lines&lt;/code&gt;, starting from the line, the cursor is upon.&lt;br&gt;You can replace '2' by any number and delete any number of lines.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;u&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;undo&lt;/code&gt; the last operation performed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ctrl+r&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;redo&lt;/code&gt; the last operation performed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/&lt;strong&gt;sample_text&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;search&lt;/code&gt; for the 'sample_text' in the file. Use &lt;code&gt;n&lt;/code&gt; to move to next occurrence and &lt;code&gt;N&lt;/code&gt; to move to the previous occurrence of the text(in Command mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;strong&gt;%s&lt;/strong&gt;/&lt;strong&gt;old&lt;/strong&gt;/&lt;strong&gt;new&lt;/strong&gt;/&lt;strong&gt;g&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Replaces&lt;/code&gt; all the occurrences of the &lt;code&gt;old&lt;/code&gt; text with &lt;code&gt;new&lt;/code&gt; text(in Command mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;strong&gt;q!&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;quit the file discarding all the changes&lt;/code&gt; made to the file(in Command mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;strong&gt;wq&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;save the file&lt;/code&gt; and &lt;code&gt;quit&lt;/code&gt;(in Command mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;strong&gt;w sample_filename&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;save&lt;/code&gt; the file with filename 'sample_filename'(in Command mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;strong&gt;q&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;To &lt;code&gt;quit&lt;/code&gt; Vim. It fails when changes has been made to file(in Command mode).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;That's all for the blog. I hope you had good time reading the blog!😃&lt;/p&gt;

</description>
      <category>linux</category>
      <category>cloud</category>
      <category>opensource</category>
      <category>vim</category>
    </item>
    <item>
      <title>Understanding /etc/passwd file in Linux</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Fri, 13 May 2022 06:08:50 +0000</pubDate>
      <link>https://dev.to/kcdchennai/understanding-etcpasswd-file-in-linux-1k2d</link>
      <guid>https://dev.to/kcdchennai/understanding-etcpasswd-file-in-linux-1k2d</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Linux has evolved from being someone's &lt;strong&gt;hobby&lt;/strong&gt; to a &lt;strong&gt;full-fledged multi-user operating system&lt;/strong&gt; powering &lt;strong&gt;95%&lt;/strong&gt; servers which run world's &lt;strong&gt;top 1 million domains&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4&lt;/strong&gt; out of &lt;strong&gt;5&lt;/strong&gt; &lt;strong&gt;smartphones&lt;/strong&gt; in the world run on linux kernel(modified one to be precise).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100%&lt;/strong&gt; of the &lt;strong&gt;supercomputers&lt;/strong&gt; have linux.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linux is truly &lt;strong&gt;fascinating&lt;/strong&gt;. In this blog, we'll understand about a &lt;strong&gt;special file&lt;/strong&gt; in linux. &lt;/p&gt;

&lt;p&gt;Let's dive straight into it.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What is /etc/passwd file?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/etc/passwd&lt;/code&gt; is a &lt;strong&gt;configuration file&lt;/strong&gt; which stores &lt;strong&gt;user account information&lt;/strong&gt;. It is a &lt;strong&gt;plain text-based&lt;/strong&gt; file containing information like username, user ID and group ID. &lt;/p&gt;

&lt;p&gt;This file is owned by &lt;strong&gt;root&lt;/strong&gt; and has &lt;strong&gt;rw-r--r--&lt;/strong&gt; permissions(octal &lt;strong&gt;644&lt;/strong&gt;). Thus, the file can be &lt;strong&gt;read by any user&lt;/strong&gt; but only &lt;strong&gt;root user&lt;/strong&gt; or &lt;strong&gt;user with sudo privileges can write to the file&lt;/strong&gt;.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How can I view that file?
&lt;/h1&gt;

&lt;p&gt;To view the contents of the file, open the terminal and type in:&lt;/p&gt;

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

cat /etc/passwd


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

&lt;/div&gt;

&lt;p&gt;The output of this command should be similar to the one shown below.&lt;/p&gt;

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

daniel@DVM:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
daniel:x:1000:1000:Daniel Tanzer,,,:/home/daniel:/bin/bash


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

&lt;/div&gt;



&lt;h1&gt;
  
  
  Can I modify that file?
&lt;/h1&gt;

&lt;p&gt;Yes, you can modify the file contents using any &lt;code&gt;text editor&lt;/code&gt; like &lt;strong&gt;vim&lt;/strong&gt;, &lt;strong&gt;nano&lt;/strong&gt; or &lt;strong&gt;emacs&lt;/strong&gt; but it's considered to be a &lt;strong&gt;bad idea&lt;/strong&gt; unless you know what you are doing. &lt;br&gt;
You must always use &lt;strong&gt;dedicated commands&lt;/strong&gt; to modify the file. Let's say for an example, you want to add a new user to the system. For doing so, you must use &lt;code&gt;adduser&lt;/code&gt; or &lt;code&gt;useradd&lt;/code&gt; command instead of manually editing the &lt;code&gt;/etc/passwd&lt;/code&gt; file using a text editor.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Understanding /etc/passwd file format
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/etc/passwd&lt;/code&gt; file contains many lines, &lt;strong&gt;one for each user&lt;/strong&gt;. The first line contains information about &lt;strong&gt;root user&lt;/strong&gt; followed by &lt;strong&gt;system user accounts&lt;/strong&gt; and &lt;strong&gt;normal user&lt;/strong&gt; accounts. &lt;/p&gt;

&lt;p&gt;It has &lt;strong&gt;7 fields&lt;/strong&gt; separated by &lt;strong&gt;colon&lt;/strong&gt;(&lt;strong&gt;:&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fukjhhqrjdej44f7ezfmh.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%2Fukjhhqrjdej44f7ezfmh.png" alt="file format"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;1) Username :&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the first field in a line which represents the &lt;code&gt;login name&lt;/code&gt; of the user. It has a length ranging from 1 to 32 characters.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;2) Password :&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the second field in a line. In older linux systems, user's &lt;strong&gt;encrypted password&lt;/strong&gt; was stored here. Now in the modern systems, this field is replaced by a character &lt;code&gt;x&lt;/code&gt; and the encrypted password is stored in a file called &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If the field is &lt;strong&gt;blank&lt;/strong&gt;, we do &lt;strong&gt;not&lt;/strong&gt; need a password to login to the system.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To change the password of any user, use &lt;code&gt;passwd&lt;/code&gt; command which stores the password in &lt;strong&gt;encrypted&lt;/strong&gt; form in &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;3) User ID (UID):&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the third field in a line. It contains a &lt;strong&gt;unique identifier&lt;/strong&gt; of a user which is used by an operating system to refer to a user. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;UID 0&lt;/code&gt; is reserved for &lt;strong&gt;root user&lt;/strong&gt;.&lt;br&gt;
&lt;code&gt;UID 1-99&lt;/code&gt; is reserved for other &lt;strong&gt;predefined accounts&lt;/strong&gt;.&lt;br&gt;
&lt;code&gt;UID 100-999&lt;/code&gt; is reserved for &lt;strong&gt;system accounts&lt;/strong&gt;.&lt;br&gt;
&lt;code&gt;UID above 999&lt;/code&gt; are for &lt;strong&gt;normal user accounts&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;4) Group ID(GID):&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the fourth field in a line. It determines the &lt;code&gt;primary group&lt;/code&gt; of the user. Users can belong to more than one group in linux. To get a full list of groups a user belongs to, type in the command:&lt;/p&gt;

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

groups &amp;lt;user_name&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;The first group in the output is the &lt;code&gt;primary group&lt;/code&gt; and the rest are &lt;code&gt;secondary groups&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;5) GECOS :&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the fifth field in a line. It contains &lt;strong&gt;comma-separated information&lt;/strong&gt; about the user including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full name&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Room number&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work phone number&lt;/strong&gt; etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;6) Home directory :&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the sixth field in a line which contains the &lt;strong&gt;path to the user's home directory&lt;/strong&gt;. By default, this path is under &lt;code&gt;/home&lt;/code&gt; directory and is named after the user. For example, for a user having a username &lt;code&gt;daniel&lt;/code&gt;, his home directory would be &lt;code&gt;/home/daniel&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;7) Login Shell :&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the seventh and the last field in the line. It contains &lt;strong&gt;path to the user's default login shell&lt;/strong&gt;. For most of the distributions, it is &lt;strong&gt;bash&lt;/strong&gt; having the path &lt;code&gt;/bin/bash&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is not necessary to for it to be a shell. For example, &lt;strong&gt;system administrators&lt;/strong&gt; can use &lt;code&gt;nologin shell&lt;/code&gt; having path &lt;code&gt;/sbin/nologin&lt;/code&gt;. So, if a user tries to login to an account with nologin shell, the nologin shell closes the connection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is it for the blog. I hope you understood the format of the file &lt;code&gt;/etc/passwd&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>apt update vs apt upgrade: What's the difference?</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Tue, 10 May 2022 09:17:56 +0000</pubDate>
      <link>https://dev.to/kcdchennai/apt-update-vs-apt-upgrade-whats-the-difference-2ff8</link>
      <guid>https://dev.to/kcdchennai/apt-update-vs-apt-upgrade-whats-the-difference-2ff8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Package Managers are fantastic!&lt;/strong&gt;&lt;br&gt;
Let me tell you what made me say that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features of Package Managers:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Downloads, installs and updates existing software from a repository.&lt;/li&gt;
&lt;li&gt;Ensures the integrity and authenticity of the package.&lt;/li&gt;
&lt;li&gt;Manages and resolves required dependencies.&lt;/li&gt;
&lt;li&gt;Knows where to put all the files in the Linux file system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just imagine performing tasks like &lt;strong&gt;checksum verification&lt;/strong&gt;, &lt;strong&gt;installing dependencies&lt;/strong&gt;, &lt;strong&gt;storing components like docs, binaries and config files in different folders&lt;/strong&gt; manually. &lt;/p&gt;

&lt;p&gt;Although for some package managers like &lt;strong&gt;"dpkg"&lt;/strong&gt;, you still need to install dependencies manually. But I don't know why would one use package managers like dpkg if we have more advanced package managers which use these low level package managers under the hood and simplifies the task. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"apt"&lt;/strong&gt; is one such high level package manager.&lt;/p&gt;

&lt;p&gt;If you ever googled &lt;code&gt;how to install &amp;lt;package_name&amp;gt; in Ubuntu machine&lt;/code&gt;, you'd have probably came across these commands:&lt;/p&gt;

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

sudo apt update
sudo apt upgrade
sudo apt install &amp;lt;package_name&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;You might be thinking that we only wanted to install a certain package so why are people suggesting us to execute those 2 additional commands?&lt;/p&gt;

&lt;p&gt;Let's understand that.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What does apt update do?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"apt update"&lt;/strong&gt; updates the &lt;em&gt;package sources list&lt;/em&gt; with the latest versions of the packages in the repositories.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Package sources list&lt;/strong&gt; contains the locations or &lt;strong&gt;URLs&lt;/strong&gt; of some of the repositories from which a package is installed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can view this list using the command :&lt;/p&gt;

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

cat /etc/apt/sources.list


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

&lt;/div&gt;

&lt;p&gt;It would give output:&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%2Fnq70ln8roc00mbu7n5c3.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%2Fnq70ln8roc00mbu7n5c3.png" alt="Sources List"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One such location in these repositories is &lt;code&gt;/ubuntu/dists/bionic-updates/main/source&lt;/code&gt; (You can check that &lt;a href="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/source/" rel="noopener noreferrer"&gt;here&lt;/a&gt;) where &lt;strong&gt;Sources.gz&lt;/strong&gt; file contains all the information about the packages including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies of the package&lt;/li&gt;
&lt;li&gt;Latest versions of the package&lt;/li&gt;
&lt;li&gt;Checksums of the packages to verify integrity&lt;/li&gt;
&lt;li&gt;And much more as shown in the figure below.&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%2Fycd3w68pxahyiu3biavt.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%2Fycd3w68pxahyiu3biavt.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, whenever we type in &lt;strong&gt;apt update&lt;/strong&gt; it browses these lists from the repositories and copies the latest version of them to the local system. It actually &lt;strong&gt;doesn't install any package&lt;/strong&gt; on the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does apt upgrade do then?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"apt upgrade"&lt;/strong&gt; compares the version of all the packages currently installed on the system with the ones in the list we fetched through &lt;code&gt;apt update&lt;/code&gt; and upgrades all of them to their latest versions.&lt;/p&gt;

&lt;p&gt;Generally, when upgrading all the packages in the system, we merge both   &lt;code&gt;apt update&lt;/code&gt; and &lt;code&gt;apt upgrade&lt;/code&gt; commands in a single line:&lt;/p&gt;

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

sudo apt update &amp;amp;&amp;amp; sudo apt upgrade


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

&lt;/div&gt;

&lt;p&gt;All these things happen in the backend within a few seconds.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>cloud</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Virtual Machines 101</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Sat, 07 May 2022 16:10:39 +0000</pubDate>
      <link>https://dev.to/kcdchennai/virtual-machines-101-2gmg</link>
      <guid>https://dev.to/kcdchennai/virtual-machines-101-2gmg</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Alex  : Hey Garry! Can you spin up a VM and test this application?&lt;br&gt;
Garry : Sure, I'll do that right away.&lt;/p&gt;

&lt;p&gt;How often do you hear that idiom &lt;strong&gt;"spin up a VM"&lt;/strong&gt; while conversing in IT? It's quite common right? But for anyone who's just starting his career in cloud, it can be quite overwhelming.&lt;/p&gt;

&lt;p&gt;So... what the heck are VMs? What technology does it use and what are hypervisors? &lt;/p&gt;

&lt;p&gt;Read on to know more👇&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Virtualization🤔?
&lt;/h2&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%2Fal7b5umppb1o77juc0ks.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%2Fal7b5umppb1o77juc0ks.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As per Wikipedia,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Virtualization&lt;/strong&gt; is the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, storage devices, and computer network resources.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or to put it simply, &lt;strong&gt;Virtualization&lt;/strong&gt; means &lt;strong&gt;splitting physical resource&lt;/strong&gt; like memory, CPU and storage into multiple virtual resources. &lt;/p&gt;

&lt;p&gt;It's a &lt;strong&gt;technology&lt;/strong&gt; that allows us to utilize a machine's full capacity by distributing it's resources among multiple environments each isolated from one another.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Virtual Machine🔖
&lt;/h2&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%2Fff8fflkf31shv9w2vh62.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%2Fff8fflkf31shv9w2vh62.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;"Virtual Machine"&lt;/strong&gt; or &lt;strong&gt;"VM"&lt;/strong&gt; is a &lt;code&gt;virtual instance&lt;/code&gt; of a computer. Just like other computers it has a CPU, memory and storage. &lt;/p&gt;

&lt;p&gt;These virtual machines run on a physical computer and a software called &lt;strong&gt;"Hypervisor"&lt;/strong&gt; manages their allocation and access to the computing resources. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hypervisor🔖
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Hypervisor&lt;/code&gt; or &lt;code&gt;Virtual Machine Monitor&lt;/code&gt; is a virtualization software which allows one to build and run different VMs. It lets one host computer support multiple guest VMs by sharing its resources like memory and CPU.&lt;/p&gt;

&lt;p&gt;Hypervisors are of two types:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Type-1 Hypervisor&lt;/li&gt;
&lt;li&gt;Type-2 Hypervisor

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Type-1 Hypervisor🔖
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Type-1 Hypervisor&lt;/code&gt; or &lt;code&gt;Native Hypervisor&lt;/code&gt; runs directly on host's hardware and replaces the Host operating system. &lt;br&gt;
As it sits directly on the hardware, it is also called &lt;code&gt;Bare-Metal Hypervisor&lt;/code&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2twdpgisknwm2ti2r9o.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%2Fm2twdpgisknwm2ti2r9o.png" alt="Type-1 Hypervisor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It is very commonly used in data centers and other server-based environments due to its high performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Higher performance&lt;/code&gt; (as it has direct access to the hardware)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;More Secure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;No Single point-of-failure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Better Scalability&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disadvantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Needs a dedicated machine to administer different VMs and control hardware.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;blockquote&gt;
&lt;p&gt;Few of the mostly widely used Type-1 Hypervisors are &lt;strong&gt;VMware ESXi&lt;/strong&gt;, &lt;strong&gt;Microsoft Hyper-V&lt;/strong&gt; and &lt;strong&gt;KVM&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  Type-2 Hypervisor🔖
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Type-2 Hypervisor&lt;/code&gt;  or &lt;code&gt;Hosted Hypervisor&lt;/code&gt; runs as an &lt;strong&gt;application&lt;/strong&gt; on the top of the Host operating system. &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%2Fu58cv1yhacg0jpum4iae.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%2Fu58cv1yhacg0jpum4iae.png" alt="Type-2 Hypervisor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It is commonly used by people who want to &lt;strong&gt;try&lt;/strong&gt; out different operating systems or want to &lt;strong&gt;test&lt;/strong&gt; their application for compatibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Cost efficient&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Simplified Management&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Threat isolation&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disadvantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Compromised performance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Single point of failure&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Few of the most widely used Type-2 hypervisors are &lt;strong&gt;VirtualBox&lt;/strong&gt;, &lt;strong&gt;VMware Workstation&lt;/strong&gt; and &lt;strong&gt;Parallel Desktop&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Revisiting the Pain: The World without Git</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Thu, 05 May 2022 05:04:05 +0000</pubDate>
      <link>https://dev.to/kcdchennai/revisiting-the-pain-the-world-without-git-3jod</link>
      <guid>https://dev.to/kcdchennai/revisiting-the-pain-the-world-without-git-3jod</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Computers have evolved a lot in a short span of time and are still evolving rapidly. With the advent of technology, the world is now at our finger tips. Along with these advancements in the hardware sector, software development has also progressed a lot. And when we talk about software development, how can one forget &lt;strong&gt;Git&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Git is the single most-used &lt;strong&gt;version control system&lt;/strong&gt;(VCS). Git is superfast and it seems as if &lt;em&gt;Gods of speed have blessed &lt;strong&gt;Git&lt;/strong&gt; with unworldly powers&lt;/em&gt;. If you're a Software developer, it's your bread and butter. But Git was developed in &lt;strong&gt;2005&lt;/strong&gt;(with a blazing controversy) and software is being developed for more than 7 decades now. So, how did the development world look before Git. &lt;/p&gt;

&lt;p&gt;Let's dive right into it. &lt;/p&gt;

&lt;h2&gt;
  
  
  1) Maintaining Backups locally
&lt;/h2&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%2Fskcz8026jopp62gqi8d6.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%2Fskcz8026jopp62gqi8d6.png" alt="Folders"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In earlier stages of software development, there was no existence of a version controlling system. Daily or Weekly backups was the norm.&lt;/p&gt;

&lt;p&gt;For a collaborative project, there used to be a master copy usually under a single person's control. Everyone worked with that person. &lt;br&gt;
Back in those days, a &lt;code&gt;Commit&lt;/code&gt; meant backing up the current version and applying the new changes.&lt;/p&gt;

&lt;p&gt;This came up with &lt;strong&gt;2 major problems&lt;/strong&gt; :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1) It was hard to know what changes you made over time. There was no other option than manually checking the files for differences.&lt;/p&gt;

&lt;p&gt;2) Overtime, the files would become so large that making multiple of them may eventually take up your whole disk storage. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2) Local VCS (LVCS)
&lt;/h2&gt;

&lt;p&gt;All the tasks without VCS were tedious. It required more effort from release team and the project leaders. To solve this, programmers developed &lt;code&gt;Local VCS&lt;/code&gt;. They are also referred to as &lt;strong&gt;"First Generation VCS"&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi3hsilxzvlqgzanttq8.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%2Fqi3hsilxzvlqgzanttq8.png" alt="Local VCS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the name suggests, it had a local database to store the changes made to the files. One of the most popular local VCS was "&lt;strong&gt;RCS(Revision Control System)&lt;/strong&gt;" which stored patch sets and could reproduce how the file looked at any point of time by merging those patch sets.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Another popular first generation local VCS was "&lt;strong&gt;SCCS&lt;/strong&gt;" or &lt;strong&gt;Source Code Control System&lt;/strong&gt; which was indeed the first VCS developed in 1972 by UNIX developers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3) Centralized VCS (CVCS)
&lt;/h2&gt;

&lt;p&gt;Local VCS were good or at least better than maintaining backups but even it had a problem. Everything was stored &lt;code&gt;locally&lt;/code&gt;. Incase if the &lt;code&gt;system crashed&lt;/code&gt; and there's no backup you would lose everything. Also, there was &lt;code&gt;no way to collaborate&lt;/code&gt; with other developers.&lt;/p&gt;

&lt;p&gt;To solve this issue, Centralized VCS was developed. They were the &lt;strong&gt;"Second Generation VCS"&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5nerel9vqxlgtczhr5t.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%2Fk5nerel9vqxlgtczhr5t.png" alt="CVCS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, we had a &lt;strong&gt;central server&lt;/strong&gt; which contained all the versions and commits ever made to the project. Everyone could push and pull the changes. As the server was centralized, almost everyone knew what the other person was working upon.&lt;/p&gt;

&lt;p&gt;Along with all these pros, CVCS also came up with cons:&lt;/p&gt;

&lt;p&gt;1) As everything was centralized, if there's a &lt;code&gt;server failure&lt;/code&gt; or the hard disk of the server gets corrupted, you lose everything(if there are no backups). You may get the latest version of the project from some developer who committed the last change but all the previous changes are gone.&lt;/p&gt;

&lt;p&gt;2) Also, due to centralized server, you need to have &lt;code&gt;an Internet connection&lt;/code&gt; if you want to commit your changes. So, if you're working in a place with no internet, you may have a bad time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Some of the examples of Second Generation VCS are "&lt;strong&gt;Apache Subversion(SVN)&lt;/strong&gt;", "&lt;strong&gt;CVS&lt;/strong&gt;" and "&lt;strong&gt;Perforce&lt;/strong&gt;".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4) Distributed VCS (DVCS)
&lt;/h2&gt;

&lt;p&gt;Everything earlier came with it's pros and cons. But there was a need of something even better and that's when Distributed VCS came into picture. It was also referred to as the &lt;strong&gt;"Third Generation VCS"&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmeiw4cxjl1zf8lwnjgd7.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%2Fmeiw4cxjl1zf8lwnjgd7.png" alt="DVCS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, everyone had the full backup of the project both &lt;code&gt;locally on their machine&lt;/code&gt; and also on the &lt;code&gt;centralized server&lt;/code&gt;. As everyone had a local copy of entire work history, one doesn't need to be online to commit their changes. They can commit their changes to local repository first and whenever there's an availability of internet, they can push those changes to the master repository(remote repository).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Some of the examples of Third Generation VCS are &lt;strong&gt;"Git"&lt;/strong&gt;, &lt;strong&gt;"Mercurial"&lt;/strong&gt;, &lt;strong&gt;"Bitkeeper"&lt;/strong&gt; and &lt;strong&gt;"bzr"&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A Short history of GIT
&lt;/h2&gt;

&lt;p&gt;Linux development started in the year &lt;strong&gt;1991&lt;/strong&gt;. Until the year &lt;strong&gt;2002&lt;/strong&gt;, changes were passed as patches and archived files. This was very difficult for the developers looking at the scope of the project. &lt;/p&gt;

&lt;p&gt;So, finally in the year &lt;strong&gt;2002&lt;/strong&gt;, they began using &lt;strong&gt;"Bitkeeper VCS"&lt;/strong&gt; which was free-to-use at that time. Everything was good and the Linux development was going smoothly up until &lt;strong&gt;2005&lt;/strong&gt; when Bitkeeper's copyright holder &lt;strong&gt;Larry McVoy&lt;/strong&gt; revoked the &lt;code&gt;free-of-charge&lt;/code&gt; status after claiming that &lt;strong&gt;Andrew Tridgell&lt;/strong&gt; created &lt;strong&gt;Sourcepuller&lt;/strong&gt; by &lt;em&gt;reverse engineering&lt;/em&gt; Bitkeeper's protocols.&lt;/p&gt;

&lt;p&gt;This was the time when &lt;code&gt;Linus Torvalds&lt;/code&gt;, the creator of Linux, thought of developing their own Distributed VCS with the features they needed. The development of Git began on &lt;strong&gt;3 April, 2005&lt;/strong&gt; and achieved it's performance goals on &lt;strong&gt;29 April, 2005&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This led to the development of the single-most used VCS in the software development world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;Images: &lt;a href="https://git-scm.com/book/en/v2" rel="noopener noreferrer"&gt;Pro Git&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pro Git eBook:&lt;/strong&gt;  &lt;a href="https://git-scm.com/book/en/v2" rel="noopener noreferrer"&gt;https://git-scm.com/book/en/v2&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Wikipedia:&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Git" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Git&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Behind the scenes: From Pressing the power button to Getting to the Login Screen</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Tue, 03 May 2022 19:40:51 +0000</pubDate>
      <link>https://dev.to/kcdchennai/behind-the-scenes-from-pressing-the-power-button-to-getting-to-the-login-screen-6em</link>
      <guid>https://dev.to/kcdchennai/behind-the-scenes-from-pressing-the-power-button-to-getting-to-the-login-screen-6em</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Ever wondered how your modern PC get to the Login screen with a mere press of a button? Are you curious of what happens behind the scenes of bootup or do you want to get called up by your friends when they face an error while booting up their PC? If yes, you're at the right place.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Boot up&lt;/code&gt; is not just a short-hand for &lt;code&gt;Powering on a PC&lt;/code&gt;, it's actually a long and vital process. It's involves an extensive list of things that takes place to get a &lt;strong&gt;fully-functional session&lt;/strong&gt; of an operating system. In this blog, we'll look upon the entire boot process from &lt;strong&gt;BIOS&lt;/strong&gt; to &lt;strong&gt;Bootloader&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Pressing the Power button
&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%2Fmf6atn3sw2vejbubxzyp.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%2Fmf6atn3sw2vejbubxzyp.jpg" alt="CPU"&gt;&lt;/a&gt;&lt;br&gt;
When you press the Power button, the &lt;code&gt;Power supply&lt;/code&gt; in the CPU cabinet supplies the power to it's units like-Hard disks, motherboard and SSDs to name a few. &lt;/p&gt;

&lt;p&gt;Once, all the units gets power, CPU looks for a program called &lt;strong&gt;BIOS&lt;/strong&gt; or &lt;strong&gt;UEFI&lt;/strong&gt;(in modern systems).&lt;/p&gt;

&lt;h3&gt;
  
  
  2) BIOS/UEFI and Performing POST
&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%2Fm1jzswftf5x7iwjd12at.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%2Fm1jzswftf5x7iwjd12at.jpg" alt="BIOS screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;BIOS&lt;/strong&gt; stands for &lt;code&gt;Basic Input and Output System&lt;/code&gt;. Even though it hasn't evolved much, it has certainly changed it's residence many time from &lt;code&gt;CMOS SRAM&lt;/code&gt; to &lt;code&gt;NOR flash&lt;/code&gt;. It resided in &lt;code&gt;CMOS SRAM&lt;/code&gt; in it early days but as SRAM was &lt;em&gt;volatile&lt;/em&gt;, it's contents got flushed after turning OFF the computer.&lt;br&gt;
BIOS then took it's place in &lt;code&gt;PROM&lt;/code&gt;(non-erasable), &lt;code&gt;UV-ROM&lt;/code&gt;(erasable by UV rays) and finally ended up in &lt;code&gt;flash memory&lt;/code&gt; backed up by a &lt;strong&gt;CMOS battery&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BIOS performs &lt;code&gt;POST&lt;/code&gt;(&lt;em&gt;Power-on self-test&lt;/em&gt;) wherein it sends a signal to all devices and check's if they're up and running. If there's some error, it &lt;em&gt;beeps&lt;/em&gt; and shows an error. The number of times it beeps signals the type of error. For example, if there's a &lt;strong&gt;RAM failure&lt;/strong&gt; in a certain &lt;em&gt;Dell laptop&lt;/em&gt;, it will beep &lt;strong&gt;3 times&lt;/strong&gt; signaling the error. You can know more about beep codes and corresponding errors &lt;a href="https://www.computerhope.com/beep.htm" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, once the BIOS is done testing the hardware, it hands over the control to the Operating system's &lt;code&gt;bootloader&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Stage-1 Bootloader(Primary Bootloader)
&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%2F7q9pqcy5akdjlnjv7os8.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%2F7q9pqcy5akdjlnjv7os8.jpg" alt="Bootloader"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BIOS looks for the Operating System to boot and load for which it has to select a &lt;code&gt;Boot Device&lt;/code&gt;. This can be HDD, SSD, USB, CD or DVD drive.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;MBR partitioning&lt;/code&gt; system, we have the bootloader in the first sector of the hard disk called &lt;code&gt;MBR Sector&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MBR sector is 512 bytes long and has primarily 3 partitions: &lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;446 byte&lt;/strong&gt; for &lt;code&gt;Primary Bootloader&lt;/code&gt;&lt;br&gt;
2) &lt;strong&gt;64 byte&lt;/strong&gt; for &lt;code&gt;Partition Table&lt;/code&gt; (4 tables of 16 bytes each)&lt;br&gt;
3) &lt;strong&gt;2 byte&lt;/strong&gt; for &lt;code&gt;Magic Number&lt;/code&gt; (Validation of MBR)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;strong&gt;main task&lt;/strong&gt; of 446-byte long primary bootloader, also referred to as the stage-1 bootloader, is to &lt;strong&gt;find the&lt;/strong&gt; &lt;code&gt;secondary bootloader&lt;/code&gt;. It finds it by looking through the partition table.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Stage-2 bootloader(Secondary bootloader)
&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%2Fsr9aotm60mfo30m54upz.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%2Fsr9aotm60mfo30m54upz.png" alt="Bootloader"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, once the Stage-2 bootloader is loaded, it actually loads the &lt;strong&gt;operating system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It does this by loading the &lt;code&gt;kernel&lt;/code&gt; and &lt;code&gt;optional initial RAM disk&lt;/code&gt;(initramfs). The kernel starts the &lt;code&gt;init system&lt;/code&gt;(systemd mostly) which starts other &lt;strong&gt;services&lt;/strong&gt; leading all the way to login screen.&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%2Fw88whueiondg07areqvv.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%2Fw88whueiondg07areqvv.png" alt="Ubuntu login screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Linux, we have &lt;code&gt;GRUB bootloader&lt;/code&gt;, Windows uses &lt;code&gt;Windows Boot Manager&lt;/code&gt; and Macs use &lt;code&gt;boot.efi&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;UEFI/GPT-based&lt;/strong&gt; systems use something called &lt;code&gt;EFI executable&lt;/code&gt; which doesn't have to be present in the first sector of the disk.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All these processes hardly take a few seconds. The evolution in the tech-world has made the computer boot up process lightning fast!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>bootup</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Demystifying Linux: The purpose of /bin, /usr/bin and /usr/local/bin</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Sat, 23 Apr 2022 15:40:20 +0000</pubDate>
      <link>https://dev.to/kcdchennai/demystifying-linux-the-purpose-of-bin-usrbin-and-usrlocalbin-5a8e</link>
      <guid>https://dev.to/kcdchennai/demystifying-linux-the-purpose-of-bin-usrbin-and-usrlocalbin-5a8e</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt; is a &lt;strong&gt;Unix-like&lt;/strong&gt;, &lt;strong&gt;open source&lt;/strong&gt; and &lt;strong&gt;community-developed&lt;/strong&gt; operating system for computers💻, mobile devices📱, servers🖥 and embedded devices. Whether you know it or not, Linux is everywhere from your smartwatch⌚ to self-driving cars🚗.&lt;/p&gt;

&lt;p&gt;Linux was known for being less intuitive and only for people who do &lt;strong&gt;tech-stuff&lt;/strong&gt; but time has changed ⌛. Linux has something for everyone. &lt;br&gt;
It has &lt;code&gt;GIMP as a Photoshop alternative&lt;/code&gt;, &lt;code&gt;Gedit as a Notepad alternative&lt;/code&gt;, &lt;code&gt;VLC media player as a Windows media player alternative&lt;/code&gt; and many such software alternatives.&lt;/p&gt;

&lt;p&gt;If you have been a Windows user💻 and have switched to Linux to look super nerdy🤓 or to crack linux jokes(yeah some people do), you might find it hard even to do basic things like copying, moving and deleting files or switching between directories. &lt;/p&gt;

&lt;p&gt;Let's say you're exploring Linux for the first time, and you happened to be in the &lt;code&gt;top level root directory&lt;/code&gt;(/). Now if you typed &lt;code&gt;ls&lt;/code&gt;, you may come across a lot of the stuff which you think you know about. But it's highly likely that you interpreted it wrong. &lt;/p&gt;

&lt;p&gt;For example, &lt;code&gt;/bin&lt;/code&gt; might sound analogous to the &lt;code&gt;Recycle Bin&lt;/code&gt; in Windows but that's not the case. Both are way different.&lt;/p&gt;

&lt;p&gt;Although most of the modern Linux distributions come with the GUI, the &lt;strong&gt;real power of Linux&lt;/strong&gt; is in it's &lt;strong&gt;CLI&lt;/strong&gt;👨‍💻 and not GUI.&lt;/p&gt;

&lt;h1&gt;
  
  
  Linux File Hierarchy Structure
&lt;/h1&gt;

&lt;p&gt;Linux file hierarchy structure describes the directory structure and it's contents in Unix and Unix-like Operating systems. It is maintained by &lt;strong&gt;Linux Foundation&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsktmr6m6hwhtr0565lq.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%2Fdsktmr6m6hwhtr0565lq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can learn more about it &lt;a href="https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Difference between /bin and /usr/bin
&lt;/h1&gt;

&lt;p&gt;For checking the difference between &lt;code&gt;/bin&lt;/code&gt; and &lt;code&gt;/usr/bin&lt;/code&gt;, type in the command :&lt;/p&gt;

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

man hier | grep -E '/bin$|^.{7}(/bin)' -A2


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

&lt;/div&gt;

&lt;p&gt;It would give output :&lt;/p&gt;

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

snake@Snake:~$ man hier | grep -E '/bin$|^.{7}(/bin)' -A2
       /bin   This  directory contains executable programs which are needed in single user mode and to bring the sys‐
              tem up or repair it.

--
       /usr/X11R6/bin
              Binaries which belong to the X-Window system; often, there is a symbolic link from the more traditional
              /usr/bin/X11 to here.
--
       /usr/bin
              This is the primary directory for executable programs.  Most programs executed by  normal  users  which
              are  not  needed  for booting or for repairing the system and which are not installed locally should be
--
       /usr/local/bin
              Binaries for programs local to the site.


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

&lt;/div&gt;

&lt;p&gt;The output says it all. &lt;br&gt;
So, that's all for the blog. I hope you understood it. &lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
Well, not really. There's a good &lt;strong&gt;historical&lt;/strong&gt; reason for this split.&lt;/p&gt;

&lt;p&gt;Back in time, when &lt;strong&gt;Ken Thompson&lt;/strong&gt; and &lt;strong&gt;Dennis Ritchie&lt;/strong&gt; were developing UNIX on a &lt;strong&gt;PDP-11&lt;/strong&gt;, they used a pair of &lt;strong&gt;RX05 disks&lt;/strong&gt; of &lt;strong&gt;1.5 MB&lt;/strong&gt; each. &lt;/p&gt;

&lt;p&gt;As the Operating system grew bigger in size, &lt;strong&gt;first RX05&lt;/strong&gt; disk got filled up. So, a second RX05 disk was used and the mount was created by the name &lt;code&gt;/usr&lt;/code&gt;. All the directories like /bin, /sbin, /tmp were replicated under it.&lt;/p&gt;

&lt;p&gt;So, First RX05 disk contained the binaries which would help in its &lt;strong&gt;bootup&lt;/strong&gt;(like &lt;strong&gt;single-user mode&lt;/strong&gt;). &lt;br&gt;
And the Second RX05 disk contained a lot less and least used binaries during that time until &lt;strong&gt;multi-user&lt;/strong&gt; mode came into existence.&lt;/p&gt;

&lt;p&gt;As the time passed the storage capacity on a disk drive increased &lt;strong&gt;exponentially&lt;/strong&gt; and in this modern world, even the throwaway disk will have at least &lt;strong&gt;multi-gigabyte&lt;/strong&gt; capacity. So, for a person born in this era, it's hard to imagine why the split would be made.&lt;/p&gt;

&lt;h1&gt;
  
  
  What about /usr/local/bin ?
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/usr/local/bin&lt;/code&gt; contains binaries of the third-party apps we install. Any local executable that didn't come with the Linux install may get it's place here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Same is the case with &lt;code&gt;/sbin&lt;/code&gt; which contains the binaries for root users.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Top 3 Networking certifications for 2022</title>
      <dc:creator>Sneh Chauhan</dc:creator>
      <pubDate>Fri, 22 Apr 2022 18:45:33 +0000</pubDate>
      <link>https://dev.to/sneh27/top-3-networking-certifications-for-2022-mgm</link>
      <guid>https://dev.to/sneh27/top-3-networking-certifications-for-2022-mgm</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Are you among those folks who wonder how two devices separated by oceans are able to communicate to each other or how the bullet you fired on your friend in &lt;em&gt;CS: GO&lt;/em&gt;, get all the way to your friend sitting in LA on his comfy chair? &lt;/p&gt;

&lt;p&gt;If it's you, you must consider giving &lt;strong&gt;Computer Networking&lt;/strong&gt; a shot, after all, who knows it may be the starting point of your IT career.&lt;/p&gt;

&lt;p&gt;Believe me, getting started into IT can be really hard. But that statement is true only if you don't learn IT the right way.&lt;/p&gt;

&lt;p&gt;While learning anything in IT, certifications are the go-to thing, that most of the beginners look for, to break into the field.&lt;/p&gt;

&lt;p&gt;Although they are not mandatory, but it cannot be neglected that almost &lt;code&gt;99%&lt;/code&gt; employers use certifications to make hiring decisions as per &lt;strong&gt;Cisco&lt;/strong&gt; which is the by far the &lt;strong&gt;most dominant player&lt;/strong&gt; in the networking world.&lt;/p&gt;

&lt;p&gt;Certifications are a great source for structured learning. In this article, we will review some of the most in-demand Networking certifications out there in the market.&lt;/p&gt;

&lt;h2&gt;
  
  
  Networking Certifications
&lt;/h2&gt;

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

&lt;h5&gt;
  
  
  1. CCNA (Cisco Certified Network Associate)
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;CCNA is the most popular vendor-specific network certification in the market. It covers Network fundamentals, IP connectivity, IP services, Security fundamentals and Automation. Cisco also offers CCNP(Professional) and CCIE(Expert level).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Pre-requisites: Cisco recommends a year of experience administering Cisco solutions.&lt;/li&gt;
&lt;li&gt;Price: $300 plus taxes&lt;/li&gt;
&lt;li&gt;Languages : English and Japanese&lt;/li&gt;
&lt;li&gt;Duration : 120 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Schedule an exam: &lt;a href="https://www.cisco.com/c/en/us/training-events/training-certifications/exams/current-list/ccna-200-301.html?gclid=Cj0KCQjwpImTBhCmARIsAKr58cyHtnWv5taxPb4pZboqmlIUtaxuuVi4JWfnLJcn0e9bPRIY3pya9v8aAi5UEALw_wcB"&gt;200-301 CCNA - Cisco&lt;/a&gt;&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  2. CompTIA Network+
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;CompTIA Network+ is the perfect choice for the people seeking vendor-neutral network certification. This is recommended for people who want to learn about networking in general for other roles such as DevOps engineering. CompTIA also offers CompTIA A+, CompTIA Linux+, CompTIA Security+, CompTIA Cloud+ and CompTIA Server+.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Pre-requisites: 9-12 months experience and at least CompTIA A+ certification is recommended.&lt;/li&gt;
&lt;li&gt;Cost: $348 plus taxes&lt;/li&gt;
&lt;li&gt;Languages: English at launch. German, Japanese, Portuguese, Thai and Spanish &lt;/li&gt;
&lt;li&gt;Duration: 90 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Buy Exam: &lt;a href="https://www.comptia.org/certifications/network#buyoptions"&gt;CompTIA Network+&lt;/a&gt;&lt;/p&gt;

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

&lt;h5&gt;
  
  
  3. Juniper Networks Certified Associate (JNCIA-Junos)
&lt;/h5&gt;

&lt;blockquote&gt;
&lt;p&gt;Juniper Networks Certified Associate certification is designed for professionals with beginner-intermediate knowledge of networking. It provides understanding of the core functionality of the Juniper Networks Junos OS.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Pre-requisites: None&lt;/li&gt;
&lt;li&gt;Cost: $200 plus taxes&lt;/li&gt;
&lt;li&gt;Languages: English only &lt;/li&gt;
&lt;li&gt;Duration: 90 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Register for exam: &lt;a href="https://www.juniper.net/us/en/training/certification/tracks/junos/jncia-junos.html"&gt;JNCIA-Junos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what are you waiting for... Kick start your journey today in this amazing world of Networking!&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
