<?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: Maria Campbell</title>
    <description>The latest articles on DEV Community by Maria Campbell (@letsbsocial1).</description>
    <link>https://dev.to/letsbsocial1</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%2F18924%2F779460f9-2e59-4051-acfd-c06223fa32ae.jpg</url>
      <title>DEV Community: Maria Campbell</title>
      <link>https://dev.to/letsbsocial1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/letsbsocial1"/>
    <language>en</language>
    <item>
      <title>How to reuse an app created in one Django project in another Django project</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Fri, 17 Jan 2025 13:03:43 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/how-to-reuse-an-app-created-in-one-django-project-in-another-django-project-30d7</link>
      <guid>https://dev.to/letsbsocial1/how-to-reuse-an-app-created-in-one-django-project-in-another-django-project-30d7</guid>
      <description>&lt;p&gt;&lt;em&gt;Photo by&lt;/em&gt; &lt;a href="https://unsplash.com/@davidclode" rel="noopener noreferrer"&gt;David Clode&lt;/a&gt; &lt;em&gt;on&lt;/em&gt;&lt;br&gt;
&lt;a href="https://unsplash.com/photos/a-close-up-of-a-snake-on-a-rock-J_5xvghAvmc" rel="noopener noreferrer"&gt;unsplash.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Reusing an app created in one Django project in another Django project

&lt;ul&gt;
&lt;li&gt;  Copying an application from one Django project into another
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  Copying the polls app into a new top level directory called cast-votes
&lt;/li&gt;
&lt;li&gt;  Configuring the polls app in cast-votes
&lt;/li&gt;
&lt;li&gt;  Conclusion
&lt;/li&gt;
&lt;li&gt;  Related Resources
&lt;/li&gt;
&lt;li&gt;  Related Posts
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Reusing an app created in one Django project in another Django project
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;I&lt;/code&gt; have &lt;code&gt;created&lt;/code&gt; enough &lt;code&gt;Django&lt;/code&gt; apps &lt;code&gt;at&lt;/code&gt; this &lt;code&gt;point&lt;/code&gt; that &lt;code&gt;can&lt;/code&gt; be&lt;br&gt;
&lt;code&gt;reusable&lt;/code&gt; in other &lt;code&gt;Django&lt;/code&gt; projects &lt;code&gt;other&lt;/code&gt; than &lt;code&gt;the&lt;/code&gt; ones &lt;code&gt;they&lt;/code&gt; were&lt;br&gt;
&lt;code&gt;initially&lt;/code&gt; created &lt;code&gt;in&lt;/code&gt;. &lt;code&gt;It&lt;/code&gt; is &lt;code&gt;smart&lt;/code&gt; and &lt;code&gt;efficient development&lt;/code&gt; to &lt;code&gt;be&lt;/code&gt;&lt;br&gt;
able &lt;code&gt;to&lt;/code&gt; do &lt;code&gt;so&lt;/code&gt;. &lt;code&gt;Why&lt;/code&gt; re-create &lt;code&gt;something&lt;/code&gt; which &lt;code&gt;already&lt;/code&gt; exists&lt;br&gt;
&lt;code&gt;somewhere else&lt;/code&gt;? This &lt;code&gt;is&lt;/code&gt; a &lt;code&gt;great path&lt;/code&gt; to &lt;code&gt;creating&lt;/code&gt; reusable &lt;code&gt;apps&lt;/code&gt; that&lt;br&gt;
&lt;code&gt;others&lt;/code&gt; can also &lt;code&gt;use&lt;/code&gt; in their &lt;code&gt;Django&lt;/code&gt; projects. &lt;code&gt;It&lt;/code&gt; also &lt;code&gt;paves&lt;/code&gt; a &lt;code&gt;path&lt;/code&gt;&lt;br&gt;
to &lt;code&gt;writing&lt;/code&gt; great &lt;code&gt;documentation&lt;/code&gt; for these &lt;code&gt;apps&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Copying an application from one Django project into another
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Following&lt;/code&gt; the&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/intro/tutorial01/" rel="noopener noreferrer"&gt;"Writing your first Django app"&lt;/a&gt;&lt;br&gt;
&lt;code&gt;series&lt;/code&gt;, I &lt;code&gt;created&lt;/code&gt; a &lt;code&gt;project&lt;/code&gt; called &lt;code&gt;django_polls&lt;/code&gt; inside a &lt;code&gt;top&lt;/code&gt; level&lt;br&gt;
&lt;code&gt;directory&lt;/code&gt; called &lt;code&gt;django-polls&lt;/code&gt;. This &lt;code&gt;was&lt;/code&gt; all &lt;code&gt;fine&lt;/code&gt;. The &lt;code&gt;app&lt;/code&gt; was&lt;br&gt;
&lt;code&gt;standalone&lt;/code&gt;, and &lt;code&gt;that&lt;/code&gt; was &lt;code&gt;great&lt;/code&gt;. But &lt;code&gt;the&lt;/code&gt; problems &lt;code&gt;began&lt;/code&gt; when I &lt;code&gt;found&lt;/code&gt;&lt;br&gt;
out &lt;code&gt;about&lt;/code&gt; the &lt;code&gt;Django&lt;/code&gt; advanced &lt;code&gt;tutorial&lt;/code&gt; called&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/intro/reusable-apps/" rel="noopener noreferrer"&gt;"Advanced tutorial: How to write reusable apps"&lt;/a&gt;.&lt;br&gt;
I &lt;code&gt;approached&lt;/code&gt; the &lt;code&gt;django_polls&lt;/code&gt; project &lt;code&gt;like&lt;/code&gt; I &lt;code&gt;would&lt;/code&gt; any &lt;code&gt;other&lt;/code&gt; with the&lt;br&gt;
&lt;code&gt;naming&lt;/code&gt;. &lt;code&gt;I&lt;/code&gt; did &lt;code&gt;not&lt;/code&gt; know &lt;code&gt;what&lt;/code&gt; was &lt;code&gt;coming&lt;/code&gt; up &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; neither &lt;code&gt;was&lt;/code&gt;&lt;br&gt;
I &lt;code&gt;appraised&lt;/code&gt; of it &lt;code&gt;beforehand&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;In&lt;/code&gt; this &lt;code&gt;post&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt; will &lt;code&gt;discuss&lt;/code&gt; how &lt;code&gt;to&lt;/code&gt; avoid &lt;code&gt;as&lt;/code&gt; much&lt;code&gt;as&lt;/code&gt; possible&lt;br&gt;
&lt;code&gt;such&lt;/code&gt; naming &lt;code&gt;conflicts&lt;/code&gt; while&lt;code&gt;still&lt;/code&gt; naming &lt;code&gt;projects&lt;/code&gt; and &lt;code&gt;reusable apps&lt;/code&gt;&lt;br&gt;
with &lt;code&gt;professional&lt;/code&gt; sounding &lt;code&gt;names&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Copying the polls app into a new top level directory called cast-votes
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;I&lt;/code&gt; arbitrarily &lt;code&gt;named&lt;/code&gt; a&lt;code&gt;new&lt;/code&gt; top &lt;code&gt;level&lt;/code&gt; directory &lt;code&gt;cast-votes&lt;/code&gt;, and &lt;code&gt;inside&lt;/code&gt;&lt;br&gt;
I &lt;code&gt;created&lt;/code&gt; a &lt;code&gt;new&lt;/code&gt; project &lt;code&gt;called&lt;/code&gt; config. &lt;code&gt;I&lt;/code&gt; came &lt;code&gt;across&lt;/code&gt; a &lt;code&gt;number&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;posts&lt;/code&gt; and &lt;code&gt;threads&lt;/code&gt; where &lt;code&gt;Django&lt;/code&gt; developers &lt;code&gt;repeatedly&lt;/code&gt; called &lt;code&gt;their&lt;/code&gt;&lt;br&gt;
projects &lt;code&gt;"config"&lt;/code&gt; so &lt;code&gt;that&lt;/code&gt; there &lt;code&gt;would&lt;/code&gt; be &lt;code&gt;less&lt;/code&gt; of a &lt;code&gt;chance&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;naming conflicts&lt;/code&gt; when &lt;code&gt;installing&lt;/code&gt; reusable &lt;code&gt;apps&lt;/code&gt;. I &lt;code&gt;thought&lt;/code&gt; it a&lt;br&gt;
&lt;code&gt;great idea&lt;/code&gt;, and &lt;code&gt;decided&lt;/code&gt; to &lt;code&gt;do&lt;/code&gt; the &lt;code&gt;same&lt;/code&gt; for the &lt;code&gt;purpose&lt;/code&gt; of this &lt;code&gt;post&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;It&lt;/code&gt; looks &lt;code&gt;like&lt;/code&gt; I &lt;code&gt;might&lt;/code&gt; continue &lt;code&gt;to&lt;/code&gt; follow this &lt;code&gt;convention&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;You&lt;/code&gt; can &lt;code&gt;follow&lt;/code&gt; the &lt;code&gt;steps&lt;/code&gt; to &lt;code&gt;creating&lt;/code&gt; a &lt;code&gt;new project&lt;/code&gt; in my &lt;code&gt;post&lt;/code&gt;&lt;br&gt;
entitled&lt;br&gt;
&lt;a href="https://dev.to/blog/creating-the-official-django-polls-app-part-1"&gt;Creating the official Django Polls app Part 1&lt;/a&gt;.&lt;br&gt;
&lt;code&gt;However&lt;/code&gt;, this &lt;code&gt;time&lt;/code&gt;, i&lt;code&gt;nstead&lt;/code&gt; of &lt;code&gt;creating&lt;/code&gt; a &lt;code&gt;top&lt;/code&gt; level &lt;code&gt;directory&lt;/code&gt; called&lt;br&gt;
&lt;code&gt;django-polls&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; a &lt;code&gt;project&lt;/code&gt; called &lt;code&gt;django_polls&lt;/code&gt;, &lt;code&gt;create&lt;/code&gt; a &lt;code&gt;top&lt;/code&gt;&lt;br&gt;
level &lt;code&gt;directory&lt;/code&gt; called &lt;code&gt;cast-vote&lt;/code&gt; and a &lt;code&gt;project&lt;/code&gt; called &lt;code&gt;config&lt;/code&gt; inside&lt;br&gt;
&lt;code&gt;cast-vote&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If&lt;/code&gt; you &lt;code&gt;have&lt;/code&gt; already &lt;code&gt;completed&lt;/code&gt; the&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/intro/tutorial01/" rel="noopener noreferrer"&gt;Creating the official Django Polls app&lt;/a&gt;&lt;br&gt;
&lt;code&gt;series&lt;/code&gt; and &lt;code&gt;therefore&lt;/code&gt; created an &lt;code&gt;app&lt;/code&gt; called &lt;code&gt;polls&lt;/code&gt;, &lt;code&gt;you&lt;/code&gt; can &lt;code&gt;copy&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;polls&lt;/code&gt; app &lt;code&gt;directory&lt;/code&gt; into the &lt;code&gt;root&lt;/code&gt; of the &lt;code&gt;cast-votes&lt;/code&gt; directory. There&lt;br&gt;
&lt;code&gt;should&lt;/code&gt; be no &lt;code&gt;conflicts&lt;/code&gt;, &lt;code&gt;since&lt;/code&gt; the &lt;code&gt;project name&lt;/code&gt; does &lt;code&gt;not&lt;/code&gt; contain&lt;br&gt;
&lt;code&gt;"polls"&lt;/code&gt; in it. &lt;code&gt;It's&lt;/code&gt; as &lt;code&gt;generic&lt;/code&gt; as &lt;code&gt;it&lt;/code&gt; can &lt;code&gt;get&lt;/code&gt;. &lt;code&gt;We&lt;/code&gt; are &lt;code&gt;not&lt;/code&gt; thinking&lt;br&gt;
&lt;code&gt;about&lt;/code&gt; creating a &lt;code&gt;package&lt;/code&gt; from &lt;code&gt;polls&lt;/code&gt; yet. &lt;code&gt;That&lt;/code&gt; will &lt;code&gt;take place&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;another post&lt;/code&gt;. Right &lt;code&gt;now&lt;/code&gt; we just &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;make sure&lt;/code&gt; that our &lt;code&gt;polls&lt;/code&gt; app&lt;br&gt;
&lt;code&gt;can&lt;/code&gt; be &lt;code&gt;reused&lt;/code&gt; by &lt;code&gt;ourselves&lt;/code&gt; on &lt;code&gt;our&lt;/code&gt; local &lt;code&gt;machine&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configuring the polls app in cast-votes
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Once&lt;/code&gt; we &lt;code&gt;have&lt;/code&gt; placed &lt;code&gt;polls&lt;/code&gt; inside &lt;code&gt;the&lt;/code&gt; top &lt;code&gt;level&lt;/code&gt; cast-votes &lt;code&gt;directory&lt;/code&gt;,&lt;br&gt;
we &lt;code&gt;need&lt;/code&gt; to &lt;code&gt;configure&lt;/code&gt; it a bit. The &lt;code&gt;steps&lt;/code&gt; are &lt;code&gt;not&lt;/code&gt; dissimilar &lt;code&gt;from&lt;/code&gt; those&lt;br&gt;
&lt;code&gt;we&lt;/code&gt; were &lt;code&gt;supposed&lt;/code&gt; to &lt;code&gt;take&lt;/code&gt; to &lt;code&gt;prepare&lt;/code&gt; our &lt;code&gt;polls&lt;/code&gt; app &lt;code&gt;package&lt;/code&gt; in the&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/intro/reusable-apps/" rel="noopener noreferrer"&gt;"Advanced tutorial: How to write reusable apps"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;First&lt;/code&gt;, &lt;code&gt;we&lt;/code&gt; have &lt;code&gt;to&lt;/code&gt; add &lt;code&gt;polls&lt;/code&gt; to &lt;code&gt;INSTALLED_APPS&lt;/code&gt; in &lt;code&gt;config/settings.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;django.contrib.admin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;django.contrib.auth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;django.contrib.contenttypes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;django.contrib.sessions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;django.contrib.messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;django.contrib.staticfiles&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;polls&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, we &lt;code&gt;have&lt;/code&gt; to &lt;code&gt;configure&lt;/code&gt; our &lt;code&gt;polls.urls&lt;/code&gt; in &lt;code&gt;config/urls.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="c1"&gt;# include is new
&lt;/span&gt;
&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;polls/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;polls.urls&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="c1"&gt;# new
&lt;/span&gt;    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Then&lt;/code&gt;, just &lt;code&gt;make sure&lt;/code&gt; that &lt;code&gt;there&lt;/code&gt; isn't &lt;code&gt;anything&lt;/code&gt; in your &lt;code&gt;templates&lt;/code&gt; that&lt;br&gt;
&lt;code&gt;does&lt;/code&gt; not &lt;code&gt;belong&lt;/code&gt; in &lt;code&gt;cast-votes&lt;/code&gt;. I &lt;code&gt;had&lt;/code&gt; a c&lt;code&gt;ouple&lt;/code&gt; of &lt;code&gt;URLs&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;templates/includes&lt;/code&gt; and &lt;code&gt;templates/polls/index.html&lt;/code&gt;. &lt;code&gt;Those&lt;/code&gt; URLS &lt;code&gt;assumed&lt;/code&gt;&lt;br&gt;
that I &lt;code&gt;still&lt;/code&gt; had&lt;code&gt;another&lt;/code&gt; reusable &lt;code&gt;app&lt;/code&gt; called &lt;code&gt;pages&lt;/code&gt;, which &lt;code&gt;exists&lt;/code&gt; in&lt;br&gt;
the &lt;code&gt;original&lt;/code&gt; django-polls &lt;code&gt;top&lt;/code&gt; level &lt;code&gt;directory&lt;/code&gt; along &lt;code&gt;with&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;django_polls&lt;/code&gt; project. But &lt;code&gt;since&lt;/code&gt; I &lt;code&gt;haven't&lt;/code&gt; added this &lt;code&gt;pages&lt;/code&gt; reusable&lt;br&gt;
&lt;code&gt;app&lt;/code&gt; to &lt;code&gt;cast-votes&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;make sure&lt;/code&gt; to &lt;code&gt;update&lt;/code&gt; them. &lt;code&gt;If&lt;/code&gt;, however,&lt;br&gt;
&lt;code&gt;I&lt;/code&gt; did &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;add&lt;/code&gt; that &lt;code&gt;reusable app&lt;/code&gt; so &lt;code&gt;that&lt;/code&gt; I &lt;code&gt;would&lt;/code&gt; have a &lt;code&gt;top&lt;/code&gt;&lt;br&gt;
level &lt;code&gt;index page&lt;/code&gt; (because right now I don't and neither should you unless you&lt;br&gt;
did something different), &lt;code&gt;then&lt;/code&gt; I &lt;code&gt;could&lt;/code&gt; keep &lt;code&gt;those&lt;/code&gt; URLs &lt;code&gt;which&lt;/code&gt; were&lt;br&gt;
&lt;code&gt;specific&lt;/code&gt; to &lt;code&gt;django-polls/pages&lt;/code&gt;. &lt;code&gt;There&lt;/code&gt; were &lt;code&gt;no&lt;/code&gt; other &lt;code&gt;"dependencies"&lt;/code&gt; on&lt;br&gt;
&lt;code&gt;django-polls&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If&lt;/code&gt; I &lt;code&gt;were&lt;/code&gt; to &lt;code&gt;package&lt;/code&gt; this &lt;code&gt;app&lt;/code&gt; and &lt;code&gt;publish&lt;/code&gt; it, those &lt;code&gt;URLs&lt;/code&gt; would&lt;br&gt;
&lt;code&gt;cause&lt;/code&gt; a &lt;code&gt;problem&lt;/code&gt;. &lt;code&gt;The&lt;/code&gt; other &lt;code&gt;question&lt;/code&gt; to &lt;code&gt;ask&lt;/code&gt; is, &lt;code&gt;do&lt;/code&gt; we &lt;code&gt;want&lt;/code&gt; to&lt;br&gt;
include &lt;code&gt;templates&lt;/code&gt; in our &lt;code&gt;packaged app&lt;/code&gt; or &lt;code&gt;not&lt;/code&gt;? &lt;code&gt;A&lt;/code&gt; packaged &lt;code&gt;app&lt;/code&gt; is&lt;br&gt;
&lt;code&gt;going&lt;/code&gt; to be &lt;code&gt;different&lt;/code&gt; from a &lt;code&gt;reusable app&lt;/code&gt; which &lt;code&gt;we&lt;/code&gt; created &lt;code&gt;locally&lt;/code&gt; on&lt;br&gt;
our &lt;code&gt;machine&lt;/code&gt; and &lt;code&gt;then&lt;/code&gt; copied &lt;code&gt;over&lt;/code&gt; to &lt;code&gt;another&lt;/code&gt; Django &lt;code&gt;project&lt;/code&gt;. We &lt;code&gt;have&lt;/code&gt;&lt;br&gt;
some &lt;code&gt;control&lt;/code&gt; over its &lt;code&gt;behavior&lt;/code&gt; in &lt;code&gt;relation&lt;/code&gt; to the &lt;code&gt;project&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;relation&lt;/code&gt; to &lt;code&gt;other&lt;/code&gt; reusable &lt;code&gt;apps&lt;/code&gt; which &lt;code&gt;might&lt;/code&gt; be subsequently &lt;code&gt;added&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;According&lt;/code&gt; to a &lt;code&gt;thread&lt;/code&gt; on &lt;code&gt;stackoverflow&lt;/code&gt; entitled&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/38341254/customize-templates-in-a-third-party-django-app/38725452#38725452" rel="noopener noreferrer"&gt;Customize templates in a third party Django app&lt;/a&gt;,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can put the template in a separate app within your project. Django looks&lt;br&gt;
for templates in your apps in the order they are defined in INSTALLED_APPS,&lt;br&gt;
and uses the first match: The order of INSTALLED_APPS is significant! For&lt;br&gt;
example, if you want to customize the Django admin, you might choose to&lt;br&gt;
override the standard admin/base_site.html template, from&lt;br&gt;
django.contrib.admin, with your own admin/base_site.html in myproject.polls.&lt;br&gt;
You must then make sure that your myproject.polls comes before&lt;br&gt;
django.contrib.admin in INSTALLED_APPS, otherwise django.contrib.admin’s will&lt;br&gt;
be loaded first and yours will be ignored.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;This&lt;/code&gt; led &lt;code&gt;me&lt;/code&gt; to &lt;code&gt;the&lt;/code&gt; updated &lt;code&gt;documentation&lt;/code&gt; for &lt;code&gt;Django&lt;/code&gt; 5.1 &lt;code&gt;entitled&lt;/code&gt;&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/howto/overriding-templates/" rel="noopener noreferrer"&gt;How to override templates&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In your project, you might want to override a template in another Django&lt;br&gt;
application, whether it be a third-party application or a contrib application&lt;br&gt;
such as django.contrib.admin. You can either put template overrides in your&lt;br&gt;
project’s templates directory or in an application’s templates directory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And then:&lt;/p&gt;

&lt;p&gt;.So create an app, called e.g. social_share_templates, and put it in&lt;br&gt;
INSTALLED_APPS before django_social_share. Then add the template to this folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jinja"&gt;&lt;code&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;project_root&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;/social_share_templates/templates/django_social_share/templatetags/post_to_facebook.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The reason your current configuration does not work, is that your local app&lt;br&gt;
has the same name as the app in site-packages. If your local app is an actual&lt;br&gt;
python module, you won't be able to use the app in site-packages. Otherwise,&lt;br&gt;
Django just looks for the templates in the app in site-packages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So create an app, called e.g. social_share_templates, and put it in&lt;br&gt;
INSTALLED_APPS before django_social_share. Then add the template to this&lt;br&gt;
folder:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This &lt;code&gt;issue&lt;/code&gt;(s) in &lt;code&gt;the&lt;/code&gt; above &lt;code&gt;thread&lt;/code&gt; is &lt;code&gt;similar&lt;/code&gt; to &lt;code&gt;what&lt;/code&gt; I &lt;code&gt;encountered&lt;/code&gt;&lt;br&gt;
when &lt;code&gt;trying&lt;/code&gt; to &lt;code&gt;package&lt;/code&gt; an &lt;code&gt;existing&lt;/code&gt; reusable &lt;code&gt;app&lt;/code&gt; following&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/intro/tutorial01/" rel="noopener noreferrer"&gt;Creating the official Django Polls app&lt;/a&gt;,&lt;br&gt;
&lt;code&gt;among&lt;/code&gt; other &lt;code&gt;things&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If&lt;/code&gt; you &lt;code&gt;have&lt;/code&gt; app and &lt;code&gt;project&lt;/code&gt; templates &lt;code&gt;directories&lt;/code&gt; that &lt;code&gt;both&lt;/code&gt; contain&lt;br&gt;
&lt;code&gt;overrides&lt;/code&gt;, the &lt;code&gt;default&lt;/code&gt; Django &lt;code&gt;template loader&lt;/code&gt; will &lt;code&gt;try&lt;/code&gt; to &lt;code&gt;load&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;template&lt;/code&gt; from the &lt;code&gt;project-level&lt;/code&gt; directory &lt;code&gt;first&lt;/code&gt;. &lt;code&gt;In&lt;/code&gt; other &lt;code&gt;words&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;DIRS&lt;/code&gt; is &lt;code&gt;searched&lt;/code&gt; before &lt;code&gt;APP_DIRS&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;To&lt;/code&gt; learn &lt;code&gt;more&lt;/code&gt; about &lt;code&gt;this&lt;/code&gt;, please visit&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/howto/overriding-templates/" rel="noopener noreferrer"&gt;How to override templates&lt;/a&gt;&lt;br&gt;
&lt;code&gt;in&lt;/code&gt; the &lt;code&gt;current&lt;/code&gt; Django (5.1) &lt;code&gt;documentation&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We &lt;code&gt;choose&lt;/code&gt; third &lt;code&gt;party&lt;/code&gt; packages &lt;code&gt;primarily&lt;/code&gt; for their&lt;br&gt;
&lt;code&gt;functionality/features&lt;/code&gt;. &lt;code&gt;If&lt;/code&gt; we &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;change&lt;/code&gt; the &lt;code&gt;looks&lt;/code&gt; a &lt;code&gt;bit&lt;/code&gt;, we&lt;br&gt;
&lt;code&gt;customize&lt;/code&gt; the &lt;code&gt;templates&lt;/code&gt;, &lt;code&gt;following&lt;/code&gt; the &lt;code&gt;steps&lt;/code&gt; described in&lt;br&gt;
&lt;a href="https://docs.djangoproject.com/en/5.1/howto/overriding-templates/" rel="noopener noreferrer"&gt;How to override templates&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;But&lt;/code&gt; in my &lt;code&gt;case&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt; just &lt;code&gt;made&lt;/code&gt; a &lt;code&gt;couple&lt;/code&gt; of &lt;code&gt;adjustments&lt;/code&gt; to &lt;code&gt;fit&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;app&lt;/code&gt; (&lt;code&gt;module&lt;/code&gt;, not &lt;code&gt;package&lt;/code&gt;) &lt;code&gt;to&lt;/code&gt; the &lt;code&gt;new&lt;/code&gt; config &lt;code&gt;project&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To &lt;code&gt;see&lt;/code&gt; the o&lt;code&gt;riginal&lt;/code&gt; django-polls &lt;code&gt;structure&lt;/code&gt; containing &lt;code&gt;both&lt;/code&gt; the &lt;code&gt;pages&lt;/code&gt;&lt;br&gt;
reusable &lt;code&gt;app&lt;/code&gt; and &lt;code&gt;polls&lt;/code&gt; reusable &lt;code&gt;app&lt;/code&gt;, please visit&lt;br&gt;
&lt;a href="https://github.com/interglobalmedia/django-polls" rel="noopener noreferrer"&gt;django-polls&lt;/a&gt; on &lt;code&gt;Github&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;In&lt;/code&gt; this &lt;code&gt;post&lt;/code&gt;, I &lt;code&gt;discussed&lt;/code&gt; how &lt;code&gt;I&lt;/code&gt; can &lt;code&gt;reuse&lt;/code&gt; an &lt;code&gt;app&lt;/code&gt; created &lt;code&gt;in&lt;/code&gt; one&lt;br&gt;
&lt;code&gt;Django&lt;/code&gt; project &lt;code&gt;in&lt;/code&gt; another &lt;code&gt;project&lt;/code&gt; so &lt;code&gt;that&lt;/code&gt; I &lt;code&gt;don't&lt;/code&gt; have to&lt;br&gt;
&lt;code&gt;"re-create"&lt;/code&gt; it &lt;code&gt;all&lt;/code&gt; over &lt;code&gt;again&lt;/code&gt; in another &lt;code&gt;project&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://docs.djangoproject.com/en/5.1/intro/tutorial01/" rel="noopener noreferrer"&gt;Writing your first Django app, part 1&lt;/a&gt;:
Django documentation&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.djangoproject.com/en/5.1/howto/overriding-templates/" rel="noopener noreferrer"&gt;How to override templates&lt;/a&gt;:
Django documentation&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.djangoproject.com/en/5.1/intro/reusable-apps/" rel="noopener noreferrer"&gt;Advanced tutorial: How to write reusable apps&lt;/a&gt;:
Django documentation&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://stackoverflow.com/questions/38341254/customize-templates-in-a-third-party-django-app/38725452#38725452" rel="noopener noreferrer"&gt;Customize templates in a third party Django app&lt;/a&gt;:
stackoverflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="http://localhost:3000/blog/creating-the-official-django-polls-app-table-of-contents" rel="noopener noreferrer"&gt;Creating the official Django Polls app table of contents&lt;/a&gt;:
&lt;code&gt;mariadcampbell.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>django</category>
      <category>python3</category>
      <category>reusableapp</category>
      <category>localdevelopment</category>
    </item>
    <item>
      <title>How to upgrade the Python version in a virtual environment</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Tue, 14 Jan 2025 21:11:57 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/how-to-upgrade-the-python-version-in-a-virtual-environment-37le</link>
      <guid>https://dev.to/letsbsocial1/how-to-upgrade-the-python-version-in-a-virtual-environment-37le</guid>
      <description>&lt;p&gt;&lt;em&gt;Photo by&lt;/em&gt; &lt;a href="https://unsplash.com/@mitchel3uo" rel="noopener noreferrer"&gt;Mitchell Luo&lt;/a&gt; &lt;em&gt;on&lt;/em&gt; &lt;a href="https://unsplash.com/photos/black-and-silver-claw-hammer-beside-red-and-black-hand-tool-G5i9LQ7sPOw" rel="noopener noreferrer"&gt;unsplash.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Activating the virtual environment
&lt;/li&gt;
&lt;li&gt;  Saving my current dependencies
&lt;/li&gt;
&lt;li&gt;  De-activating the virtual environment
&lt;/li&gt;
&lt;li&gt;  Deleting the current venv folder
&lt;/li&gt;
&lt;li&gt;  Creating a new venv folder
&lt;/li&gt;
&lt;li&gt;  Re-activating the virtual environment
&lt;/li&gt;
&lt;li&gt;  Installing saved dependencies
&lt;/li&gt;
&lt;li&gt;  Conclusion
&lt;/li&gt;
&lt;li&gt;  Related Resources
&lt;/li&gt;
&lt;li&gt;  Related Posts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;I&lt;/code&gt; was &lt;code&gt;working&lt;/code&gt; on a &lt;code&gt;new project&lt;/code&gt; today (the &lt;code&gt;official&lt;/code&gt; Django &lt;code&gt;Polls&lt;/code&gt; app&lt;br&gt;
&lt;code&gt;tutorial&lt;/code&gt; as a matter of fact), &lt;code&gt;and&lt;/code&gt; I &lt;code&gt;noticed&lt;/code&gt; that my &lt;code&gt;virtual environment&lt;/code&gt;&lt;br&gt;
was &lt;code&gt;using&lt;/code&gt; Python &lt;code&gt;3.12&lt;/code&gt;. &lt;code&gt;But&lt;/code&gt; in &lt;code&gt;my project&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt; am &lt;code&gt;using&lt;/code&gt; Python&lt;br&gt;
&lt;code&gt;3.13.0&lt;/code&gt;. &lt;code&gt;Using&lt;/code&gt; different &lt;code&gt;versions&lt;/code&gt; of &lt;code&gt;Python&lt;/code&gt; in the &lt;code&gt;virtual environment&lt;/code&gt;&lt;br&gt;
vs &lt;code&gt;in&lt;/code&gt; the &lt;code&gt;code&lt;/code&gt; can &lt;code&gt;create problems&lt;/code&gt; and &lt;code&gt;conflicts&lt;/code&gt;. I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;upgrade&lt;/code&gt;&lt;br&gt;
my &lt;code&gt;version&lt;/code&gt; of &lt;code&gt;Python&lt;/code&gt; in my &lt;code&gt;venv&lt;/code&gt; folder &lt;code&gt;pronto&lt;/code&gt;!&lt;/p&gt;
&lt;h2&gt;
  
  
  Activating the virtual environment
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;First&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;make sure&lt;/code&gt; that my &lt;code&gt;virtual environment&lt;/code&gt; was &lt;code&gt;activated&lt;/code&gt; in&lt;br&gt;
my &lt;code&gt;project&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Saving my current dependencies
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;make sure&lt;/code&gt; to &lt;code&gt;save&lt;/code&gt; my &lt;code&gt;application&lt;/code&gt;'s current&lt;br&gt;
&lt;code&gt;dependencies&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip freeze &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  De-activating the virtual environment
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;deactivate&lt;/code&gt; the &lt;code&gt;virtual environment&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deleting the current venv folder
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;delete&lt;/code&gt; the &lt;code&gt;current&lt;/code&gt; venv &lt;code&gt;folder&lt;/code&gt;. &lt;code&gt;That&lt;/code&gt; is &lt;code&gt;what&lt;/code&gt; I&lt;br&gt;
&lt;code&gt;call&lt;/code&gt; my &lt;code&gt;virtual&lt;/code&gt; environment &lt;code&gt;folder&lt;/code&gt;. &lt;code&gt;You&lt;/code&gt; might &lt;code&gt;call&lt;/code&gt; it&lt;br&gt;
&lt;code&gt;something else&lt;/code&gt;!&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating a new venv folder
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;create&lt;/code&gt; a &lt;code&gt;new&lt;/code&gt; venv &lt;code&gt;folder&lt;/code&gt; using &lt;code&gt;3.13&lt;/code&gt; since &lt;code&gt;that&lt;/code&gt; is&lt;br&gt;
&lt;code&gt;what&lt;/code&gt; I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;upgrade&lt;/code&gt; to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3.13 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Re-activating the virtual environment
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;re-activate&lt;/code&gt; the &lt;code&gt;virtual environment&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installing saved dependencies
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;install&lt;/code&gt; my &lt;code&gt;saved dependencies&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it!&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;In&lt;/code&gt; this &lt;code&gt;post&lt;/code&gt;, I &lt;code&gt;showed&lt;/code&gt; how to &lt;code&gt;upgrade&lt;/code&gt; the &lt;code&gt;Python version&lt;/code&gt; being &lt;code&gt;used&lt;/code&gt;&lt;br&gt;
in a &lt;code&gt;Django&lt;/code&gt; application's &lt;code&gt;virtual environment&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://stackoverflow.com/questions/71106411/how-to-upgrade-python-venv-version" rel="noopener noreferrer"&gt;How to upgrade Python venv version&lt;/a&gt;:
stackoverflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/creating-the-official-django-polls-app-part-8"&gt;Creating the official Django Polls app Part 8&lt;/a&gt;:
&lt;code&gt;mariadcampbell.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>django</category>
      <category>pip</category>
      <category>python3</category>
      <category>venv</category>
    </item>
    <item>
      <title>How to add tables to React Markdown</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Tue, 03 Sep 2024 04:57:25 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/how-to-add-tables-to-react-markdown-21lc</link>
      <guid>https://dev.to/letsbsocial1/how-to-add-tables-to-react-markdown-21lc</guid>
      <description>&lt;p&gt;&lt;em&gt;Example of a table in React Markdown&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Tables not supported natively in React Markdown
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tables not supported natively in React Markdown
&lt;/h2&gt;

&lt;p&gt;Recently I was writing an article in React Markdown, and I wanted to add a&lt;br&gt;
table. However, it did not render! I didn't realize until I further researched&lt;br&gt;
the issue that React Markdown does not support adding tables in Markdown&lt;br&gt;
natively. According to an&lt;br&gt;
&lt;a href="https://github.com/remarkjs/react-markdown/issues/526" rel="noopener noreferrer"&gt;issues thread&lt;/a&gt; in the&lt;br&gt;
React Markdown Github repository from December 22, 2020,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tables, and all other GFM have moved to a plugin. You can see an example of&lt;br&gt;
usage with tables here: &lt;a href="https://github.com/remarkjs/react-markdown#use" rel="noopener noreferrer"&gt;https://github.com/remarkjs/react-markdown#use&lt;/a&gt; and the&lt;br&gt;
note in the release notes here:&lt;br&gt;
&lt;a href="https://github.com/remarkjs/react-markdown/blob/main/changelog.md#500---2020-10-19" rel="noopener noreferrer"&gt;https://github.com/remarkjs/react-markdown/blob/main/changelog.md#500---2020-10-19&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The website accurately reflects that by default, react-markdown follows the&lt;br&gt;
CommonMark standard, which does not have Tables. --&lt;br&gt;
&lt;code&gt;ChristianMurphy commented on Dec 22, 2020&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I looked at the example of usage with tables, and it seemed pretty&lt;br&gt;
straightforward. I followed the example and imported the &lt;code&gt;remark-gfm&lt;/code&gt; npm&lt;br&gt;
package into my &lt;code&gt;post-content.js file&lt;/code&gt; after &lt;code&gt;installing&lt;/code&gt; it. Then I added it to&lt;br&gt;
the ReactMarkdown component. But it didn't work. I kept on getting&lt;br&gt;
&lt;code&gt;TypeError Cannot set properties of undefined (setting 'inTable')&lt;/code&gt;. I did a&lt;br&gt;
Google Search and came up with a thread on stackoverflow entitled&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/77138105/reactmarkdown-remarkgfm-everything-renders-as-expected-except-tables-typee/77172599#77172599" rel="noopener noreferrer"&gt;ReactMarkdown + remarkGfm: everything renders as expected, EXCEPT tables - typeError?&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First I found out that it was only with React Markdown 9.0 that I could use the&lt;br&gt;
latest version of &lt;code&gt;remark-gfm&lt;/code&gt;. I however, am using React Markdown 8.0.7.&lt;br&gt;
According to the answer that solved my issue, React Markdown 8.0.7 works with&lt;br&gt;
&lt;code&gt;remark-gfm&lt;/code&gt; version &lt;code&gt;3.0.1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So I &lt;code&gt;uninstalled&lt;/code&gt; my &lt;code&gt;current version&lt;/code&gt; of &lt;code&gt;remark-gfm&lt;/code&gt; with npm uninstall&lt;br&gt;
remark-gfm (&lt;code&gt;gfm&lt;/code&gt; stands for &lt;code&gt;Github Flavored Markdown&lt;/code&gt;) and then re-installed&lt;br&gt;
it with &lt;code&gt;npm i remark-gfm@3.0.1 -S&lt;/code&gt;. Then I did the following inside my&lt;br&gt;
post-content.js file which is the component that renders the markdown content of&lt;br&gt;
my posts on this site:&lt;/p&gt;

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

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;remarkGfm&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;remark-gfm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;rehypeRaw&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rehype-raw&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ReactMarkdown&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;customRenderers&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;rehypePlugins&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rehypeRaw&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;remarkPlugins&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;remarkGfm&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;remarkRehypeOptions&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;passThrough&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ReactMarkdown&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;I also &lt;code&gt;installed&lt;/code&gt; and &lt;code&gt;imported&lt;/code&gt; the &lt;code&gt;rehype-raw&lt;/code&gt; npm package, and passed&lt;br&gt;
&lt;code&gt;options&lt;/code&gt; to &lt;code&gt;remarkRehypeOptions&lt;/code&gt; because in the same thread, another user&lt;br&gt;
stated:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Helping hand - I discovered using the remarkGfm had a knock-on effect when&lt;br&gt;
using custom components in react-markdown. Though remarkGfm fixed the table&lt;br&gt;
layout, it stripped content (e.g. class names) from html tags when used in&lt;br&gt;
markdown (which is valid). As such applying remarkRehypeOptions &amp;gt; passThrough&lt;br&gt;
allowed both the tables to render correctly and links to use custom&lt;br&gt;
components. -- &lt;code&gt;Chris GW Green answered Mar 13 at 13:39&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then he &lt;code&gt;added&lt;/code&gt; a &lt;code&gt;code snippet&lt;/code&gt; of &lt;code&gt;how&lt;/code&gt; he &lt;code&gt;added&lt;/code&gt; the &lt;code&gt;two packages&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;React Markdown&lt;/code&gt;:&lt;/p&gt;

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

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Markdown&lt;/span&gt;
   &lt;span class="na"&gt;remarkPlugins&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;remarkGfm&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
   &lt;span class="na"&gt;rehypePlugins&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;rehypeRaw&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
   &lt;span class="na"&gt;remarkRehypeOptions&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;passThrough&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;...&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;Basically&lt;/code&gt; the &lt;code&gt;same&lt;/code&gt; as the &lt;code&gt;snippet&lt;/code&gt; I &lt;code&gt;shared&lt;/code&gt;, and his &lt;code&gt;snippet&lt;/code&gt; is &lt;code&gt;where&lt;/code&gt;&lt;br&gt;
I also got &lt;code&gt;guidance&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I also &lt;code&gt;added&lt;/code&gt; some &lt;code&gt;simple styling&lt;/code&gt; for my &lt;code&gt;tables&lt;/code&gt; in my&lt;br&gt;
&lt;code&gt;post-content.module.scss&lt;/code&gt; file:&lt;/p&gt;

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

&lt;span class="cm"&gt;/* Markdown table styling */&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-collapse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;collapse&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;tbody&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;td&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;tfoot&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;th&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;thead&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;tr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="mi"&gt;.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;if you are a &lt;code&gt;next.js&lt;/code&gt; and &lt;code&gt;tailwind.css&lt;/code&gt; user, I also &lt;code&gt;added&lt;/code&gt; a &lt;code&gt;bit&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;styling&lt;/code&gt; for &lt;code&gt;dark mode&lt;/code&gt; in my (&lt;code&gt;global&lt;/code&gt;) &lt;code&gt;post-content.scss&lt;/code&gt; file:&lt;/p&gt;

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

&lt;span class="nc"&gt;.dark&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;This is &lt;code&gt;what&lt;/code&gt; the &lt;code&gt;table&lt;/code&gt; I &lt;code&gt;created&lt;/code&gt; looks &lt;code&gt;like&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%2Fr7654g7dvt710z4iemmj.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%2Fr7654g7dvt710z4iemmj.jpg" alt="Summary of Model operations in the Python3 shell"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Screenshot of table used in&lt;br&gt;
&lt;a href="https://dev.to/blog/how-to-create-a-fullstack-application-using-django-and-python-part-7"&gt;How to create a fullstack application using Django and Python part 7&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/remarkjs/react-markdown/issues/526" rel="noopener noreferrer"&gt;Tables not working on website #526&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;react-markdown Github repository&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/remarkjs/react-markdown#use" rel="noopener noreferrer"&gt;remarkjs/react-markdown example usage&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;remarkjs/react-markdown Github repository&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://stackoverflow.com/questions/77138105/reactmarkdown-remarkgfm-everything-renders-as-expected-except-tables-typee/77172599#77172599" rel="noopener noreferrer"&gt;ReactMarkdown + remarkGfm: everything renders as expected, EXCEPT tables - typeError?&lt;/a&gt;;
&lt;strong&gt;&lt;em&gt;stackoverflow&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>reactmarkdown</category>
      <category>remarkgfm</category>
      <category>rehyperaw</category>
      <category>tablessupport</category>
    </item>
    <item>
      <title>How to create a fullstack application using Django and Python Part 5</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Thu, 29 Aug 2024 02:12:19 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/how-to-create-a-fullstack-application-using-django-and-python-part-5-2m18</link>
      <guid>https://dev.to/letsbsocial1/how-to-create-a-fullstack-application-using-django-and-python-part-5-2m18</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://unsplash.com/@chuttersnap" rel="noopener noreferrer"&gt;CHUTTERSNAP&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://unsplash.com/photos/assorted-color-of-name-cards-JChRnikx0tM" rel="noopener noreferrer"&gt;unsplash.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/how-to-create-a-fullstack-application-using-django-and-python-part-5" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important Note&lt;/strong&gt;: &lt;code&gt;Before&lt;/code&gt; committing &lt;code&gt;anything&lt;/code&gt; to &lt;code&gt;Git&lt;/code&gt; or &lt;code&gt;pushing&lt;/code&gt;&lt;br&gt;
anything to &lt;code&gt;remote&lt;/code&gt;, please visit&lt;br&gt;
&lt;a href="http://localhost:3000/blog/how-to-create-a-fullstack-application-using-django-and-python-part-4" rel="noopener noreferrer"&gt;How to create a fullstack application using Django and Python Part 4&lt;/a&gt;&lt;br&gt;
&lt;code&gt;where&lt;/code&gt; I &lt;code&gt;discuss&lt;/code&gt; how to &lt;code&gt;add&lt;/code&gt; the &lt;code&gt;python-dotenv&lt;/code&gt; package to the &lt;code&gt;Django&lt;/code&gt;&lt;br&gt;
site and &lt;code&gt;why&lt;/code&gt; it is &lt;code&gt;crucial&lt;/code&gt; to &lt;code&gt;do it&lt;/code&gt;. This article &lt;code&gt;assumes&lt;/code&gt; you have a&lt;br&gt;
&lt;code&gt;working knowledge&lt;/code&gt; of &lt;code&gt;Git&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Changing a Django project name after it has already been migrated
&lt;/li&gt;
&lt;li&gt;  Researching the name changing issue
&lt;/li&gt;
&lt;li&gt;  Changing old project name to new project name throughout the Django site
&lt;/li&gt;
&lt;li&gt;  Running the env | grep django command

&lt;ul&gt;
&lt;li&gt;  Breaking down the env | grep django command
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;  Related Resources
&lt;/li&gt;
&lt;li&gt;  Related Posts
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Changing a Django project name after it has already been migrated
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I first &lt;code&gt;created&lt;/code&gt; the &lt;code&gt;project&lt;/code&gt; for this &lt;code&gt;Django&lt;/code&gt; site, I &lt;code&gt;did&lt;/code&gt; not&lt;br&gt;
&lt;code&gt;think&lt;/code&gt; much &lt;code&gt;about&lt;/code&gt; the &lt;code&gt;project name&lt;/code&gt;, and &lt;code&gt;named&lt;/code&gt; it &lt;code&gt;basic_django_web_page&lt;/code&gt;.&lt;br&gt;
I &lt;code&gt;named&lt;/code&gt; the &lt;code&gt;root directory&lt;/code&gt; of the site &lt;code&gt;basic-django-web-page.&lt;/code&gt; &lt;code&gt;But&lt;/code&gt; after&lt;br&gt;
&lt;code&gt;already&lt;/code&gt; having made &lt;code&gt;migrations&lt;/code&gt; (&lt;code&gt;makemigrations&lt;/code&gt;) and then &lt;code&gt;migrated&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;site&lt;/code&gt; (&lt;code&gt;migrate&lt;/code&gt;), I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;change&lt;/code&gt; the root directory of the &lt;code&gt;Django&lt;/code&gt;&lt;br&gt;
site to &lt;code&gt;django-boards&lt;/code&gt;, and the &lt;code&gt;project name&lt;/code&gt; to &lt;code&gt;django_boards&lt;/code&gt;. It &lt;code&gt;made&lt;/code&gt;&lt;br&gt;
more &lt;code&gt;sense&lt;/code&gt; and &lt;code&gt;was&lt;/code&gt; more &lt;code&gt;consistent&lt;/code&gt; with the &lt;code&gt;rest&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;site namespaces&lt;/code&gt;. I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;change&lt;/code&gt; both &lt;code&gt;high level&lt;/code&gt; project &lt;code&gt;directory&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;django_boards&lt;/code&gt; and the porject &lt;code&gt;subdirectory&lt;/code&gt; to &lt;code&gt;django_boards&lt;/code&gt; as well.&lt;/p&gt;

&lt;p&gt;But &lt;code&gt;how&lt;/code&gt; was I &lt;code&gt;going&lt;/code&gt; to do &lt;code&gt;this&lt;/code&gt;?&lt;/p&gt;
&lt;h2&gt;
  
  
  Researching the name changing issue
&lt;/h2&gt;

&lt;p&gt;I &lt;code&gt;had&lt;/code&gt; never &lt;code&gt;changed&lt;/code&gt; a &lt;code&gt;project name&lt;/code&gt; after making &lt;code&gt;model migrations&lt;/code&gt;, &lt;code&gt;but&lt;/code&gt;&lt;br&gt;
I was &lt;code&gt;determined&lt;/code&gt; to &lt;code&gt;make&lt;/code&gt; the &lt;code&gt;name change&lt;/code&gt; so &lt;code&gt;that&lt;/code&gt; I &lt;code&gt;would&lt;/code&gt; not &lt;code&gt;have&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;re-create&lt;/code&gt; the &lt;code&gt;site&lt;/code&gt;. &lt;code&gt;That&lt;/code&gt; simply &lt;code&gt;would&lt;/code&gt; have &lt;code&gt;been&lt;/code&gt; a &lt;code&gt;waste&lt;/code&gt; of &lt;code&gt;time&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I &lt;code&gt;came across&lt;/code&gt; all &lt;code&gt;sorts&lt;/code&gt; of &lt;code&gt;solutions&lt;/code&gt; which &lt;code&gt;just&lt;/code&gt; didn't &lt;code&gt;work&lt;/code&gt;, so I&lt;br&gt;
&lt;code&gt;won't&lt;/code&gt; even &lt;code&gt;bother&lt;/code&gt; mentioning &lt;code&gt;them&lt;/code&gt;. &lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;came across&lt;/code&gt; a &lt;code&gt;thread&lt;/code&gt; on&lt;br&gt;
&lt;code&gt;stackoverflow&lt;/code&gt; that &lt;code&gt;gave me&lt;/code&gt; the &lt;code&gt;answer&lt;/code&gt;(&lt;code&gt;s&lt;/code&gt;) I was &lt;code&gt;looking&lt;/code&gt; for!&lt;/p&gt;
&lt;h2&gt;
  
  
  Changing old project name to new project name throughout the Django site
&lt;/h2&gt;

&lt;p&gt;I &lt;code&gt;typed&lt;/code&gt; in the &lt;code&gt;old&lt;/code&gt; project &lt;code&gt;name&lt;/code&gt; in the &lt;code&gt;Search&lt;/code&gt; (&lt;code&gt;eyeglass icon&lt;/code&gt;) &lt;code&gt;field&lt;/code&gt;&lt;br&gt;
in &lt;code&gt;Visual Studio Code&lt;/code&gt; to quickly &lt;code&gt;find&lt;/code&gt; out &lt;code&gt;where&lt;/code&gt; it &lt;code&gt;came up&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;project&lt;/code&gt; code &lt;code&gt;base&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It appeared in &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It appeared in &lt;code&gt;manage.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It appeared in &lt;code&gt;asgi.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It appeared in &lt;code&gt;settings.py&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;it appeared in &lt;code&gt;urls.py&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I &lt;code&gt;removed&lt;/code&gt; all &lt;code&gt;instances&lt;/code&gt; of &lt;code&gt;basic_django_web_page&lt;/code&gt; and &lt;code&gt;replaced&lt;/code&gt; it with&lt;br&gt;
&lt;code&gt;django_boards&lt;/code&gt;. This &lt;code&gt;included&lt;/code&gt; any &lt;code&gt;reference&lt;/code&gt; to the &lt;code&gt;project name&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;string comments&lt;/code&gt;! &lt;code&gt;Those&lt;/code&gt; references &lt;code&gt;count&lt;/code&gt; too.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;After&lt;/code&gt; I &lt;code&gt;did&lt;/code&gt; all &lt;code&gt;that&lt;/code&gt;, &lt;code&gt;committed&lt;/code&gt; the &lt;code&gt;changes&lt;/code&gt;, &lt;code&gt;pushed&lt;/code&gt; them to&lt;br&gt;
&lt;code&gt;Github&lt;/code&gt;, and then &lt;code&gt;tried&lt;/code&gt; to &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;development server&lt;/code&gt;, it &lt;code&gt;worked&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But... &lt;code&gt;when&lt;/code&gt; I &lt;code&gt;went&lt;/code&gt; back &lt;code&gt;later&lt;/code&gt; to the &lt;code&gt;same thread&lt;/code&gt; where I &lt;code&gt;found&lt;/code&gt; my&lt;br&gt;
&lt;code&gt;solutions&lt;/code&gt;, I &lt;code&gt;learned&lt;/code&gt; that &lt;code&gt;there&lt;/code&gt; was &lt;code&gt;still&lt;/code&gt; more &lt;code&gt;checking&lt;/code&gt; I &lt;code&gt;should do&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running the env | grep django command
&lt;/h2&gt;

&lt;p&gt;I &lt;code&gt;also learned&lt;/code&gt; in the &lt;code&gt;stackoverflow&lt;/code&gt; thread (listed in &lt;code&gt;Related Resources&lt;/code&gt;)&lt;br&gt;
that I should &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;env | grep django&lt;/code&gt; command to &lt;code&gt;see&lt;/code&gt; if the &lt;code&gt;old&lt;/code&gt;&lt;br&gt;
project &lt;code&gt;name&lt;/code&gt; was &lt;code&gt;lingering&lt;/code&gt; anywhere in the &lt;code&gt;virtual environment&lt;/code&gt; (&lt;code&gt;venv&lt;/code&gt;).&lt;br&gt;
The &lt;code&gt;following&lt;/code&gt; was &lt;code&gt;returned&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/basic-django-web-page/venv/bin:/Users/mariacam/.pyenv/shims:/Users/mariacam/.pyenv/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/mariacam/mongodb/bin:/Applications/Postgres.app/Contents/Versions/latest/bin:/Library/PostgreSQL/10/bin:/Users/mariacam/.rbenv/bin:/Users/mariacam/.yarn/bin:/Library/Frameworks/Python.framework/Versions/3.12/bin:/Users/mariacam/.nvm/versions/node/v20.15.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mariacam/.rvm/bin
&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/django-boards/django_boards
&lt;span class="nv"&gt;OLDPWD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/django-boards
&lt;span class="nv"&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/basic-django-web-page/venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;new&lt;/code&gt; project &lt;code&gt;name&lt;/code&gt; was &lt;code&gt;recognized&lt;/code&gt;, and &lt;code&gt;was&lt;/code&gt; also &lt;code&gt;set&lt;/code&gt; in &lt;code&gt;all&lt;/code&gt; the&lt;br&gt;
right &lt;code&gt;places&lt;/code&gt; in the &lt;code&gt;code base&lt;/code&gt;, i.e., including &lt;code&gt;DJANGO_SETTINGS_MODULE&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;settings.py&lt;/code&gt;,but the &lt;code&gt;original&lt;/code&gt; root &lt;code&gt;directory name&lt;/code&gt; did &lt;code&gt;appear&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;VIRTUAL_ENV&lt;/code&gt; variable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking down the env | grep django command
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;env | grep django&lt;/code&gt; command is used to filter environment variables related&lt;br&gt;
to Django.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The &lt;code&gt;env&lt;/code&gt; command lists all the environment variables in the current shell
session.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;|&lt;/code&gt; (pipe) operator pipes the output of the &lt;code&gt;env&lt;/code&gt; command to the grep
command.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;grep django&lt;/code&gt; searches through the output for lines that contain the string
&lt;code&gt;"django"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;env | grep django&lt;/code&gt; command &lt;code&gt;displays&lt;/code&gt; all &lt;code&gt;environment variables&lt;/code&gt; that&lt;br&gt;
include &lt;code&gt;"django"&lt;/code&gt; in their &lt;code&gt;names&lt;/code&gt; or &lt;code&gt;values&lt;/code&gt;. This is &lt;code&gt;useful&lt;/code&gt; when we &lt;code&gt;want&lt;/code&gt;&lt;br&gt;
to &lt;code&gt;check&lt;/code&gt; any &lt;code&gt;environment settings&lt;/code&gt; related to &lt;code&gt;Django&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;All&lt;/code&gt; I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;do&lt;/code&gt; to &lt;code&gt;fix&lt;/code&gt; the &lt;code&gt;value&lt;/code&gt; of &lt;code&gt;VIRTUAL_ENV&lt;/code&gt; was the &lt;code&gt;following&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I &lt;code&gt;opened&lt;/code&gt; up &lt;code&gt;venv/bin/activate&lt;/code&gt; in &lt;code&gt;vim&lt;/code&gt; with the &lt;code&gt;following command&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;added&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; at the &lt;code&gt;bottom&lt;/code&gt; of the &lt;code&gt;file&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/django-boards/venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;ran&lt;/code&gt; the &lt;code&gt;env | grep django&lt;/code&gt; command &lt;code&gt;again&lt;/code&gt;, and the &lt;code&gt;following&lt;/code&gt;
was &lt;code&gt;returned&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/basic-django-web-page/venv/bin:/Users/mariacam/.pyenv/shims:/Users/mariacam/.pyenv/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/mariacam/mongodb/bin:/Applications/Postgres.app/Contents/Versions/latest/bin:/Library/PostgreSQL/10/bin:/Users/mariacam/.rbenv/bin:/Users/mariacam/.yarn/bin:/Library/Frameworks/Python.framework/Versions/3.12/bin:/Users/mariacam/.nvm/versions/node/v20.15.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mariacam/.rvm/bin
&lt;span class="nv"&gt;PWD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/django-boards
&lt;span class="nv"&gt;OLDPWD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/django-boards/django_boards
&lt;span class="nv"&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Python-Development/django-boards/venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Success! My &lt;code&gt;VIRTUAL_ENV&lt;/code&gt; variable &lt;code&gt;value&lt;/code&gt; was &lt;code&gt;updated&lt;/code&gt; to the &lt;code&gt;correct path&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;And &lt;code&gt;that&lt;/code&gt; is &lt;code&gt;how&lt;/code&gt; I &lt;code&gt;changed&lt;/code&gt; the &lt;code&gt;name&lt;/code&gt; of my &lt;code&gt;Django&lt;/code&gt; project from&lt;br&gt;
&lt;code&gt;basic_django_web_page&lt;/code&gt; to &lt;code&gt;django_boards&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://stackoverflow.com/questions/18293875/is-there-an-easy-way-to-rename-a-django-project/63303738#63303738" rel="noopener noreferrer"&gt;Is there an easy way to rename a Django project?&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;stackoverflow&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.mariadcampbell.com/blog/how-to-create-a-fullstack-application-using-django-and-python-table-of-contents" rel="noopener noreferrer"&gt;How to create a fullstack application using Django and Python Table of Contents&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>django</category>
      <category>env</category>
      <category>python3</category>
      <category>virtualenv</category>
    </item>
    <item>
      <title>Vim essentials in Linux</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Tue, 20 Aug 2024 22:00:51 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/vim-essentials-in-linux-5dj9</link>
      <guid>https://dev.to/letsbsocial1/vim-essentials-in-linux-5dj9</guid>
      <description>&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/vim-essentials-in-linux" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  So why this article?
&lt;/li&gt;
&lt;li&gt;  What does Vim stand for?
&lt;/li&gt;
&lt;li&gt;  Configuring Vim
&lt;/li&gt;
&lt;li&gt;  The vim command
&lt;/li&gt;
&lt;li&gt;  Vim modes

&lt;ul&gt;
&lt;li&gt;  Normal mode

&lt;ul&gt;
&lt;li&gt;  The (lowercase) gg shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) G shortcut
&lt;/li&gt;
&lt;li&gt;  The # (number) G shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) h shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) j shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) k shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) l shortcut
&lt;/li&gt;
&lt;li&gt;  The # (number) j shortcut
&lt;/li&gt;
&lt;li&gt;  The # (number) k shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) w shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) b shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) e shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) W shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) B shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) E shortcut
&lt;/li&gt;
&lt;li&gt;  The 0 (zero) shortcut
&lt;/li&gt;
&lt;li&gt;  The ^ (caret) shortcut
&lt;/li&gt;
&lt;li&gt;  The (dollar sign) $ shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) r shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) x shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) X shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) dw shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) cw shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) s shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) S shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) D shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) dd shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) C shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) yy shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) p shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) P shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) u shortcut
&lt;/li&gt;
&lt;li&gt;  The Control + r shortcut
&lt;/li&gt;
&lt;li&gt;  Repeating commands

&lt;ul&gt;
&lt;li&gt;  Repeating a command using a count
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;  Insert mode

&lt;ul&gt;
&lt;li&gt;  Entering Insert mode

&lt;ul&gt;
&lt;li&gt;  The (lowercase) i shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) I shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) a shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) A shortcut
&lt;/li&gt;
&lt;li&gt;  The (lowercase) o shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) O shortcut
&lt;/li&gt;
&lt;li&gt;  Switching from Insert mode into Normal mode
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;  Visual mode

&lt;ul&gt;
&lt;li&gt;  Entering Visual mode

&lt;ul&gt;
&lt;li&gt;  The (lowercase) v shortcut
&lt;/li&gt;
&lt;li&gt;  The (uppercase) V shortcut
&lt;/li&gt;
&lt;li&gt;  The Control + v shortcut
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;  Command mode

&lt;ul&gt;
&lt;li&gt;  Asking Vim for help
&lt;/li&gt;
&lt;li&gt;  Other Command mode commands
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;  &lt;a href="https://dev.toThe%20vimtutor"&gt;The vimtutor&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;  Related Resources
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  So why this article?
&lt;/h2&gt;

&lt;p&gt;Good question! I have been using &lt;code&gt;Vim&lt;/code&gt; in &lt;code&gt;macOS&lt;/code&gt; for a very long time, but&lt;br&gt;
&lt;code&gt;primarily&lt;/code&gt; to write &lt;code&gt;Git&lt;/code&gt; commit messages. &lt;code&gt;Most&lt;/code&gt; of my &lt;code&gt;file editing&lt;/code&gt; has&lt;br&gt;
&lt;code&gt;taken place&lt;/code&gt; inside &lt;code&gt;Visual Studio Code&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;started working&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt;, &lt;code&gt;but&lt;/code&gt; in a &lt;code&gt;virtual environment&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;VirtualBox&lt;/code&gt;) &lt;code&gt;installed&lt;/code&gt; on &lt;code&gt;Windows 11&lt;/code&gt;. The &lt;code&gt;memory&lt;/code&gt; and &lt;code&gt;disk space&lt;/code&gt; I&lt;br&gt;
&lt;code&gt;allocated&lt;/code&gt; to it was &lt;code&gt;much smaller&lt;/code&gt; than &lt;code&gt;what&lt;/code&gt; I have &lt;code&gt;available&lt;/code&gt; on &lt;code&gt;macOS&lt;/code&gt;,&lt;br&gt;
and &lt;code&gt;Visual Studio Code&lt;/code&gt; is &lt;code&gt;known&lt;/code&gt; for being memory greedy. I did install it in&lt;br&gt;
Linux Mint, but it severely slowed down the &lt;code&gt;OS&lt;/code&gt; and even &lt;code&gt;crashed&lt;/code&gt; from to&lt;br&gt;
&lt;code&gt;time&lt;/code&gt; to &lt;code&gt;time&lt;/code&gt;. &lt;code&gt;That&lt;/code&gt; is &lt;code&gt;when&lt;/code&gt; I &lt;code&gt;decided&lt;/code&gt; to &lt;code&gt;use&lt;/code&gt; the &lt;code&gt;Vim&lt;/code&gt; text editor&lt;br&gt;
&lt;code&gt;instead&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;By default&lt;/code&gt;, &lt;code&gt;Vim&lt;/code&gt; did &lt;code&gt;not&lt;/code&gt; cut it &lt;code&gt;for what&lt;/code&gt; I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;accomplish&lt;/code&gt;, &lt;code&gt;so&lt;/code&gt;&lt;br&gt;
I did &lt;code&gt;some research&lt;/code&gt; to &lt;code&gt;learn more&lt;/code&gt; about it, &lt;code&gt;how&lt;/code&gt; I could &lt;code&gt;configure&lt;/code&gt; it to&lt;br&gt;
&lt;code&gt;help&lt;/code&gt; me &lt;code&gt;accomplish&lt;/code&gt; what I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;accomplish&lt;/code&gt;, and &lt;code&gt;better&lt;/code&gt; navigate&lt;br&gt;
&lt;code&gt;Vim&lt;/code&gt; in &lt;code&gt;general&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Well&lt;/code&gt;, I &lt;code&gt;found out&lt;/code&gt; that I &lt;code&gt;can&lt;/code&gt; basically &lt;code&gt;use&lt;/code&gt; it &lt;code&gt;like&lt;/code&gt; any other &lt;code&gt;editor&lt;/code&gt;,&lt;br&gt;
including &lt;code&gt;Visual Studio Code&lt;/code&gt;. It &lt;code&gt;was&lt;/code&gt; a &lt;code&gt;matter&lt;/code&gt; of &lt;code&gt;mastering&lt;/code&gt; it. &lt;code&gt;But&lt;/code&gt;&lt;br&gt;
there is &lt;code&gt;another aspect&lt;/code&gt; to &lt;code&gt;this&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;Linux Mint&lt;/code&gt; inside &lt;code&gt;VirtualBox&lt;/code&gt;, for me, the default &lt;code&gt;Terminal&lt;/code&gt; is on the&lt;br&gt;
&lt;code&gt;small side&lt;/code&gt;. My &lt;code&gt;laptop screen&lt;/code&gt; is &lt;code&gt;not&lt;/code&gt; the &lt;code&gt;largest&lt;/code&gt; and the &lt;code&gt;Linux Mint&lt;/code&gt;&lt;br&gt;
window in &lt;code&gt;VirtualBox&lt;/code&gt; is &lt;code&gt;not&lt;/code&gt; the &lt;code&gt;largest&lt;/code&gt; either. The &lt;code&gt;key input&lt;/code&gt; using the&lt;br&gt;
&lt;code&gt;laptop keypad&lt;/code&gt; is &lt;code&gt;not&lt;/code&gt; the most &lt;code&gt;fantastic experience&lt;/code&gt; in &lt;code&gt;Windows&lt;/code&gt;. So &lt;code&gt;what&lt;/code&gt;&lt;br&gt;
did I &lt;code&gt;do&lt;/code&gt; about &lt;code&gt;that&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;It&lt;/code&gt; was &lt;code&gt;serendipitous&lt;/code&gt;. In my research, I &lt;code&gt;accidentally&lt;/code&gt; came &lt;code&gt;across&lt;/code&gt; a new&lt;br&gt;
&lt;code&gt;terminal program&lt;/code&gt; called &lt;code&gt;Warp&lt;/code&gt;. &lt;code&gt;Currently&lt;/code&gt;, it &lt;code&gt;works&lt;/code&gt; in the &lt;code&gt;Linux&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;macOS&lt;/code&gt; Unix &lt;code&gt;operating systems&lt;/code&gt;. &lt;code&gt;Warp&lt;/code&gt; for &lt;code&gt;Windows&lt;/code&gt; is &lt;code&gt;also&lt;/code&gt; coming out&lt;br&gt;
&lt;code&gt;soon&lt;/code&gt;, but has &lt;code&gt;not&lt;/code&gt; been &lt;code&gt;released&lt;/code&gt; yet.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Basically&lt;/code&gt;, &lt;code&gt;Warp&lt;/code&gt; is a &lt;code&gt;modern&lt;/code&gt;, Rust-based &lt;code&gt;terminal&lt;/code&gt; with &lt;code&gt;AI&lt;/code&gt; built in so&lt;br&gt;
&lt;code&gt;you&lt;/code&gt; and &lt;code&gt;your&lt;/code&gt; team can &lt;code&gt;build&lt;/code&gt; great &lt;code&gt;software&lt;/code&gt; faster.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;All&lt;/code&gt; the &lt;code&gt;Terminal&lt;/code&gt; screenshots and Gifs I &lt;code&gt;use&lt;/code&gt; here were &lt;code&gt;taken&lt;/code&gt; in &lt;code&gt;Warp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;i love it. &lt;code&gt;Despite&lt;/code&gt; having &lt;code&gt;AI&lt;/code&gt; builtin, there &lt;code&gt;still&lt;/code&gt; is a &lt;code&gt;significant&lt;/code&gt;&lt;br&gt;
learning &lt;code&gt;curve&lt;/code&gt;. It does &lt;code&gt;detect&lt;/code&gt; and therefore the &lt;code&gt;tools&lt;/code&gt; we &lt;code&gt;use&lt;/code&gt; in our&lt;br&gt;
&lt;code&gt;native OS&lt;/code&gt;, such as &lt;code&gt;shell&lt;/code&gt;. I use &lt;code&gt;ZSH&lt;/code&gt; in &lt;code&gt;macOS&lt;/code&gt;, so &lt;code&gt;Warp&lt;/code&gt; uses &lt;code&gt;ZSH&lt;/code&gt;. In&lt;br&gt;
&lt;code&gt;Linux&lt;/code&gt;, I use &lt;code&gt;Bash&lt;/code&gt;, so &lt;code&gt;Warp&lt;/code&gt; uses &lt;code&gt;Bash&lt;/code&gt; there. I am &lt;code&gt;never&lt;/code&gt; going &lt;code&gt;back&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;iTerm2&lt;/code&gt; in &lt;code&gt;macOS&lt;/code&gt; or &lt;code&gt;Linux Mint&lt;/code&gt;'s default &lt;code&gt;Terminal&lt;/code&gt; program. &lt;code&gt;Warp&lt;/code&gt; all the&lt;br&gt;
&lt;code&gt;way&lt;/code&gt;!&lt;/p&gt;
&lt;h2&gt;
  
  
  What does Vim stand for?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Vim&lt;/code&gt; stands for &lt;code&gt;Vi iMproved&lt;/code&gt;. &lt;code&gt;Vi&lt;/code&gt; is &lt;code&gt;frequently&lt;/code&gt; a &lt;code&gt;symbolic link&lt;/code&gt; to &lt;code&gt;Vim&lt;/code&gt;,&lt;br&gt;
the &lt;code&gt;enhanced version&lt;/code&gt; of &lt;code&gt;Vi&lt;/code&gt;. &lt;code&gt;If&lt;/code&gt; you have &lt;code&gt;vim&lt;/code&gt; installed and &lt;code&gt;access&lt;/code&gt; to&lt;br&gt;
the &lt;code&gt;vim&lt;/code&gt; command, you &lt;code&gt;also&lt;/code&gt; have &lt;code&gt;access&lt;/code&gt; to the &lt;code&gt;vi&lt;/code&gt; command. &lt;code&gt;When&lt;/code&gt; I&lt;br&gt;
installed &lt;code&gt;Vim&lt;/code&gt; in &lt;code&gt;Linux Mint&lt;/code&gt;, I &lt;code&gt;gained access&lt;/code&gt; to &lt;code&gt;both&lt;/code&gt; the &lt;code&gt;vim&lt;/code&gt; and &lt;code&gt;vi&lt;/code&gt;&lt;br&gt;
command.&lt;/p&gt;
&lt;h2&gt;
  
  
  Configuring Vim
&lt;/h2&gt;

&lt;p&gt;To &lt;code&gt;make&lt;/code&gt; my &lt;code&gt;life&lt;/code&gt; much &lt;code&gt;easier&lt;/code&gt; when &lt;code&gt;working&lt;/code&gt; with &lt;code&gt;Vim&lt;/code&gt;, I &lt;code&gt;configured&lt;/code&gt; it&lt;br&gt;
&lt;code&gt;using&lt;/code&gt; a file I &lt;code&gt;created&lt;/code&gt; (which was &lt;code&gt;not included&lt;/code&gt; by &lt;code&gt;default&lt;/code&gt;) called&lt;br&gt;
&lt;code&gt;.vimrc&lt;/code&gt; inside my &lt;code&gt;home directory&lt;/code&gt; (&lt;code&gt;/home/maria&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;/Users/mariacam&lt;/code&gt; in &lt;code&gt;macOS&lt;/code&gt;). I &lt;code&gt;added&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; to the &lt;code&gt;.vimrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Disable compatibility with vim which can cause unexpected issues.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;nocompatible
&lt;span class="nb"&gt;set &lt;/span&gt;autoindent
&lt;span class="c"&gt;# Set tab width to 4 columns.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;tabstop&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4
&lt;span class="c"&gt;# Use space characters instead of tabs.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;expandtab
&lt;span class="c"&gt;# Set shift width to 4 spaces.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;shiftwidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4
&lt;span class="c"&gt;# Add numbers to each line on the left-hand side.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;number
&lt;span class="c"&gt;# Highlight cursor line underneath the cursor horizontally.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;cursorline
&lt;span class="c"&gt;# Highlight cursor line underneath the cursor vertically.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;cursorcolumn
&lt;span class="c"&gt;# Do not save backup files.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;nobackup
&lt;span class="c"&gt;# While searching though a file incrementally highlight matching characters as you type.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;incsearch
&lt;span class="c"&gt;# Do not wrap lines. Allow long lines to extend as far as the line goes.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;nowrap
&lt;span class="c"&gt;# Ignore capital letters during search.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;ignorecase
&lt;span class="c"&gt;# Override the ignorecase option if searching for capital letters.&lt;/span&gt;
&lt;span class="c"&gt;# This will allow you to search specifically for capital letters.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;smartcase
&lt;span class="c"&gt;# Show partial command you type in the last line of the screen.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;showcmd
&lt;span class="c"&gt;# Show the mode you are on the last line.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;showmode
&lt;span class="c"&gt;# Show matching words during a search.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;showmatch
&lt;span class="c"&gt;# Use highlighting when doing a search.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;hlsearch
&lt;span class="c"&gt;# Set the commands to save in history default number is 20.&lt;/span&gt;
&lt;span class="nb"&gt;set history&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000
&lt;span class="c"&gt;# Enable auto completion menu after pressing TAB.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;wildmenu
&lt;span class="c"&gt;# Make wildmenu behave like similar to Bash completion.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;wildmode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;list:longest
&lt;span class="c"&gt;# Wildmenu will ignore files with these extensions.&lt;/span&gt;
&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;wildignore&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;.docx,&lt;span class="k"&gt;*&lt;/span&gt;.jpg,&lt;span class="k"&gt;*&lt;/span&gt;.png,&lt;span class="k"&gt;*&lt;/span&gt;.gif,&lt;span class="k"&gt;*&lt;/span&gt;.pdf,&lt;span class="k"&gt;*&lt;/span&gt;.pyc,&lt;span class="k"&gt;*&lt;/span&gt;.exe,&lt;span class="k"&gt;*&lt;/span&gt;.flv,&lt;span class="k"&gt;*&lt;/span&gt;.img,&lt;span class="k"&gt;*&lt;/span&gt;.xlsx
&lt;span class="c"&gt;# Enable type file detection. Vim will be able to try to detect the type of file in use.&lt;/span&gt;
filetype on
&lt;span class="c"&gt;# Enable plugins and load plugin for the detected file type.&lt;/span&gt;
filetype plugin on
&lt;span class="c"&gt;# Load an indent file for the detected file type.&lt;/span&gt;
filetype indent on
&lt;span class="c"&gt;# Turn syntax highlighting on.&lt;/span&gt;
syntax on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;code&gt;immediately&lt;/code&gt; made &lt;code&gt;navigating&lt;/code&gt; files in &lt;code&gt;Normal mode&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;creating content&lt;/code&gt; in &lt;code&gt;Insert mode&lt;/code&gt; so much &lt;code&gt;easier&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If&lt;/code&gt; I &lt;code&gt;open&lt;/code&gt; my &lt;code&gt;.vimrc&lt;/code&gt; file &lt;code&gt;using&lt;/code&gt; the &lt;code&gt;vim .vimrc&lt;/code&gt; command in &lt;code&gt;macOS&lt;/code&gt;&lt;br&gt;
iTerm2, it now &lt;code&gt;looks like&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsc3p2yry1k35p174p37w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsc3p2yry1k35p174p37w.png" alt="Screenshot of .vimrc file after vim configuration" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If I &lt;code&gt;open&lt;/code&gt; my &lt;code&gt;.vimrc&lt;/code&gt; file using the &lt;code&gt;vim .vimrc&lt;/code&gt; command in &lt;code&gt;macOS&lt;/code&gt; Warp&lt;br&gt;
&lt;code&gt;Terminal&lt;/code&gt;, it now &lt;code&gt;looks like&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finqv6jggvjbrcwtbuy69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finqv6jggvjbrcwtbuy69.png" alt="Screenshot of .vimrc file after configuring vim Warp" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Highlighting colors&lt;/code&gt; and a &lt;code&gt;few&lt;/code&gt; other &lt;code&gt;details&lt;/code&gt; may &lt;code&gt;differ slightly&lt;/code&gt; when&lt;br&gt;
using &lt;code&gt;Warp&lt;/code&gt; Terminal. &lt;code&gt;However&lt;/code&gt;, as &lt;code&gt;shown above&lt;/code&gt;, these &lt;code&gt;configurations&lt;/code&gt; still&lt;br&gt;
&lt;code&gt;work well&lt;/code&gt; with &lt;code&gt;Warp&lt;/code&gt; and &lt;code&gt;do not&lt;/code&gt; cause any &lt;code&gt;conflicts&lt;/code&gt; since &lt;code&gt;Warp&lt;/code&gt; works&lt;br&gt;
with &lt;code&gt;Vim&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The vim command
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;first command&lt;/code&gt; to &lt;code&gt;learn&lt;/code&gt; regarding &lt;code&gt;Vim&lt;/code&gt; is the &lt;code&gt;vim&lt;/code&gt; command. &lt;code&gt;In order&lt;/code&gt;&lt;br&gt;
to &lt;code&gt;open&lt;/code&gt; a &lt;code&gt;file&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt;, I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# this command opens up a file called history.txt in Vim&lt;/span&gt;
vim history.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Vim modes
&lt;/h2&gt;

&lt;p&gt;The are &lt;code&gt;4&lt;/code&gt; main &lt;code&gt;modes&lt;/code&gt; in vim. &lt;code&gt;Normal mode&lt;/code&gt;, &lt;code&gt;Insert mode&lt;/code&gt;, &lt;code&gt;Visual mode&lt;/code&gt;,&lt;br&gt;
and &lt;code&gt;Command&lt;/code&gt; mode. &lt;code&gt;According&lt;/code&gt; to &lt;code&gt;Warp&lt;/code&gt; documentation, there is also&lt;br&gt;
&lt;code&gt;Replace mode&lt;/code&gt; (which actually is &lt;code&gt;part&lt;/code&gt; of &lt;code&gt;Normal mode&lt;/code&gt;; &lt;code&gt;Replace mode&lt;/code&gt; is&lt;br&gt;
&lt;code&gt;redundant&lt;/code&gt;), &lt;code&gt;Binary mode&lt;/code&gt;, and &lt;code&gt;Org mode&lt;/code&gt;. &lt;code&gt;Binary&lt;/code&gt; and &lt;code&gt;Org mode&lt;/code&gt; fall&lt;br&gt;
&lt;code&gt;under&lt;/code&gt; more &lt;code&gt;advanced&lt;/code&gt; Vim &lt;code&gt;features&lt;/code&gt; and will &lt;code&gt;not&lt;/code&gt; be &lt;code&gt;covered&lt;/code&gt; here.&lt;br&gt;
However, &lt;code&gt;information&lt;/code&gt; related to &lt;code&gt;both&lt;/code&gt; is &lt;code&gt;available&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;Related Resources&lt;/code&gt; located at the &lt;code&gt;bottom&lt;/code&gt; of this &lt;code&gt;article&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Normal mode
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Normal mode&lt;/code&gt; is the &lt;code&gt;default mode&lt;/code&gt; when &lt;code&gt;we&lt;/code&gt; enter &lt;code&gt;Vim&lt;/code&gt;. It is the &lt;code&gt;mode&lt;/code&gt; that&lt;br&gt;
&lt;code&gt;allows&lt;/code&gt; us to &lt;code&gt;move around&lt;/code&gt; a &lt;code&gt;file&lt;/code&gt;. &lt;code&gt;Normal mode&lt;/code&gt; can be &lt;code&gt;accessed&lt;/code&gt; from&lt;br&gt;
&lt;code&gt;other modes&lt;/code&gt; by &lt;code&gt;pressing&lt;/code&gt; the &lt;code&gt;esc&lt;/code&gt; key.&lt;/p&gt;
&lt;h3&gt;
  
  
  The  (lowercase) gg shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;g&lt;/code&gt; key &lt;code&gt;twice&lt;/code&gt;, &lt;code&gt;gg&lt;/code&gt;, I am &lt;code&gt;taken&lt;/code&gt; to the &lt;code&gt;beginning&lt;/code&gt; of a&lt;br&gt;
&lt;code&gt;file&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) G shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;G&lt;/code&gt; key (&lt;code&gt;Shift key&lt;/code&gt; + &lt;code&gt;G&lt;/code&gt; key), I am &lt;code&gt;taken&lt;/code&gt; to the &lt;code&gt;end&lt;/code&gt;&lt;br&gt;
of a &lt;code&gt;file&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The # (number) G shortcut
&lt;/h3&gt;

&lt;p&gt;I &lt;code&gt;love&lt;/code&gt; this &lt;code&gt;one&lt;/code&gt;. &lt;code&gt;#&lt;/code&gt; is a &lt;code&gt;placeholder&lt;/code&gt; for the &lt;code&gt;line number&lt;/code&gt; that you&lt;br&gt;
&lt;code&gt;want&lt;/code&gt; to &lt;code&gt;go to&lt;/code&gt;. Let's say I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;go&lt;/code&gt; to line &lt;code&gt;15&lt;/code&gt; of a &lt;code&gt;file&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt;,&lt;br&gt;
I would &lt;code&gt;go&lt;/code&gt; into &lt;code&gt;Normal mode&lt;/code&gt; by &lt;code&gt;pressing&lt;/code&gt; the &lt;code&gt;esc&lt;/code&gt; key, &lt;code&gt;then&lt;/code&gt; would type&lt;br&gt;
&lt;code&gt;15G&lt;/code&gt; (&lt;code&gt;1&lt;/code&gt; key + &lt;code&gt;5&lt;/code&gt; key + &lt;code&gt;Shift key&lt;/code&gt; + &lt;code&gt;G key&lt;/code&gt;), and I would be &lt;code&gt;taken&lt;/code&gt; to the&lt;br&gt;
&lt;code&gt;beginning&lt;/code&gt; of line &lt;code&gt;15&lt;/code&gt; of a &lt;code&gt;file&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) h shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;h&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;one character&lt;/code&gt; to the &lt;code&gt;left&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) j shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;j&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;one&lt;/code&gt; line &lt;code&gt;down&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) k shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;k&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;one&lt;/code&gt; line &lt;code&gt;up&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) l shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;l&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;one&lt;/code&gt; character &lt;code&gt;to&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;right&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The # (number) j shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;This&lt;/code&gt; is &lt;code&gt;similar&lt;/code&gt; to the # (number) G shortcut.&lt;br&gt;
&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the Shift key + &lt;code&gt;6&lt;/code&gt; key + &lt;code&gt;j&lt;/code&gt; key, for example, the &lt;code&gt;cursor&lt;/code&gt;&lt;br&gt;
moves &lt;code&gt;6&lt;/code&gt; lines &lt;code&gt;down&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The # (number) k shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;This&lt;/code&gt; is &lt;code&gt;similar&lt;/code&gt; to the # (number) G shortcut.&lt;br&gt;
&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;8&lt;/code&gt; key + (lowercase) &lt;code&gt;k&lt;/code&gt; key, for example, the &lt;code&gt;cursor&lt;/code&gt;&lt;br&gt;
moves &lt;code&gt;8&lt;/code&gt; lines &lt;code&gt;up&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) w shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;w&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;beginning&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;next word&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) b shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;b&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;beginning&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;previous word&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) e shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;e&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;end&lt;/code&gt; of a &lt;code&gt;word&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) W shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;w&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the&lt;br&gt;
&lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;next word&lt;/code&gt; after a &lt;code&gt;whitespace&lt;/code&gt;. This is &lt;code&gt;basically&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;same&lt;/code&gt; as the (lowercase) w shortcut.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) B shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;b&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the&lt;br&gt;
&lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;previous word&lt;/code&gt; before a &lt;code&gt;whitespace&lt;/code&gt;. This is &lt;code&gt;basically&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;same&lt;/code&gt; as the (lowercase) b shortcut.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) E shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;e&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;end&lt;/code&gt; of a&lt;br&gt;
&lt;code&gt;word&lt;/code&gt; before a &lt;code&gt;whitespace&lt;/code&gt;. This is &lt;code&gt;basically&lt;/code&gt; the &lt;code&gt;same&lt;/code&gt; as&lt;br&gt;
the (lowercase) e shortcut.&lt;/p&gt;
&lt;h3&gt;
  
  
  The 0 (zero) shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;0&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;beginning&lt;/code&gt; of a &lt;code&gt;line&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The ^ (caret) shortcut
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;^&lt;/code&gt; (&lt;code&gt;caret&lt;/code&gt;) &lt;code&gt;shortcut&lt;/code&gt; is the &lt;code&gt;same&lt;/code&gt; as&lt;br&gt;
the 0 (zero) shortcut. &lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt;&lt;br&gt;
key + &lt;code&gt;6&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;beginning&lt;/code&gt; of a &lt;code&gt;line&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (dollar sign) $ shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;4&lt;/code&gt; key, the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;end&lt;/code&gt; of a&lt;br&gt;
line.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) r shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;move&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; over a &lt;code&gt;particular character&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;replace&lt;/code&gt;, I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;r&lt;/code&gt; key, and &lt;code&gt;then&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;key&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;character&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt; it &lt;code&gt;with&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;way&lt;/code&gt; this &lt;code&gt;shortcut&lt;/code&gt; works is &lt;code&gt;when&lt;/code&gt; I&lt;code&gt;move&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; over the&lt;br&gt;
&lt;code&gt;character&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt;, and then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;r&lt;/code&gt; key, the &lt;code&gt;character&lt;/code&gt;&lt;br&gt;
I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt; is &lt;code&gt;first replaced&lt;/code&gt; by an &lt;code&gt;r&lt;/code&gt; character, and &lt;code&gt;then&lt;/code&gt; when I&lt;br&gt;
&lt;code&gt;press&lt;/code&gt; the &lt;code&gt;character&lt;/code&gt; (&lt;code&gt;key&lt;/code&gt;) I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt; it &lt;code&gt;with&lt;/code&gt;, it &lt;code&gt;replaces&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;r&lt;/code&gt; that &lt;code&gt;appeared&lt;/code&gt; when I &lt;code&gt;executed&lt;/code&gt;&lt;br&gt;
the (lowercase) r shortcut.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) x shortcut
&lt;/h3&gt;

&lt;p&gt;This &lt;code&gt;shortcut&lt;/code&gt; is &lt;code&gt;similar&lt;/code&gt; to&lt;br&gt;
the (lowercase) r shortcut. &lt;code&gt;When&lt;/code&gt; I &lt;code&gt;move&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt; over the &lt;code&gt;character&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;delete&lt;/code&gt;, I then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;x&lt;/code&gt; key,&lt;br&gt;
and the &lt;code&gt;character&lt;/code&gt; is &lt;code&gt;deleted&lt;/code&gt;. This &lt;code&gt;shortcut&lt;/code&gt; is also &lt;code&gt;referred&lt;/code&gt; to &lt;code&gt;as&lt;/code&gt; the&lt;br&gt;
"Delete button".&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;way&lt;/code&gt; this &lt;code&gt;shortcut&lt;/code&gt; works is &lt;code&gt;when&lt;/code&gt; I &lt;code&gt;move&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; over the&lt;br&gt;
&lt;code&gt;character&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;delete&lt;/code&gt;, and then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;x&lt;/code&gt; key, the &lt;code&gt;character&lt;/code&gt;&lt;br&gt;
I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;delete&lt;/code&gt; is &lt;code&gt;deleted&lt;/code&gt;. &lt;code&gt;But&lt;/code&gt; if I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;bring back&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;character&lt;/code&gt; I have &lt;code&gt;deleted&lt;/code&gt;, I &lt;code&gt;press&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;u&lt;/code&gt; key which&lt;br&gt;
&lt;code&gt;executes&lt;/code&gt; the (lowercase) u shortcut.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) X shortcut
&lt;/h3&gt;

&lt;p&gt;This &lt;code&gt;shortcut&lt;/code&gt; (aka the &lt;code&gt;"Backspace button"&lt;/code&gt;) deletes &lt;code&gt;characters&lt;/code&gt; to the&lt;br&gt;
&lt;code&gt;left&lt;/code&gt; of the &lt;code&gt;cursor&lt;/code&gt;, but &lt;code&gt;not&lt;/code&gt; the &lt;code&gt;character&lt;/code&gt; it is &lt;code&gt;highlighting&lt;/code&gt; (&lt;code&gt;if&lt;/code&gt; it&lt;br&gt;
is &lt;code&gt;highlighting&lt;/code&gt; one). &lt;code&gt;So&lt;/code&gt; if you &lt;code&gt;delete&lt;/code&gt; an &lt;code&gt;entire line&lt;/code&gt; using&lt;br&gt;
the (uppercase) X shortcut, &lt;code&gt;except&lt;/code&gt; for the&lt;br&gt;
&lt;code&gt;character&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; is &lt;code&gt;highlighting&lt;/code&gt;, you can &lt;code&gt;press&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;x&lt;/code&gt; key, and the &lt;code&gt;character&lt;/code&gt; will be &lt;code&gt;removed&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) dw shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;highlight&lt;/code&gt; a &lt;code&gt;word&lt;/code&gt;, and then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;d&lt;/code&gt; followed by the &lt;code&gt;w&lt;/code&gt; key,&lt;br&gt;
the &lt;code&gt;word&lt;/code&gt; is &lt;code&gt;deleted&lt;/code&gt;. And &lt;code&gt;if&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;bring back&lt;/code&gt; that &lt;code&gt;word&lt;/code&gt;, I would&lt;br&gt;
&lt;code&gt;press&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;u&lt;/code&gt; key to &lt;code&gt;undo&lt;/code&gt; that &lt;code&gt;edit&lt;/code&gt;. &lt;code&gt;If&lt;/code&gt;, &lt;code&gt;however&lt;/code&gt;, I&lt;br&gt;
&lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt; the &lt;code&gt;word&lt;/code&gt; I &lt;code&gt;deleted&lt;/code&gt;, I would &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;use&lt;/code&gt;&lt;br&gt;
the (lowercase) cw shortcut.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;In order&lt;/code&gt; to &lt;code&gt;highlight&lt;/code&gt; a &lt;code&gt;complete word&lt;/code&gt;, I &lt;code&gt;have&lt;/code&gt; to enter &lt;code&gt;Visual mode&lt;/code&gt;. To&lt;br&gt;
&lt;code&gt;switch&lt;/code&gt; from &lt;code&gt;Normal Mode&lt;/code&gt; to &lt;code&gt;Visual mode&lt;/code&gt;, I &lt;code&gt;first&lt;/code&gt; press the &lt;code&gt;esc&lt;/code&gt; key and&lt;br&gt;
then the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;v&lt;/code&gt; key. The &lt;code&gt;esc&lt;/code&gt; key &lt;code&gt;takes&lt;/code&gt; me &lt;code&gt;out&lt;/code&gt; of &lt;code&gt;Normal mode&lt;/code&gt;,&lt;br&gt;
and the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;v&lt;/code&gt; key &lt;code&gt;takes&lt;/code&gt; me into &lt;code&gt;Visual mode&lt;/code&gt;. &lt;code&gt;Then&lt;/code&gt;, I &lt;code&gt;use&lt;/code&gt;&lt;br&gt;
either the &lt;code&gt;forward arrow&lt;/code&gt; key to &lt;code&gt;highlight&lt;/code&gt; the &lt;code&gt;word&lt;/code&gt; to the &lt;code&gt;right&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt;, making sure to &lt;code&gt;end&lt;/code&gt; highlighting &lt;code&gt;after&lt;/code&gt; the &lt;code&gt;last character&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;word&lt;/code&gt;, or the &lt;code&gt;left arrow&lt;/code&gt; key to &lt;code&gt;do&lt;/code&gt; the &lt;code&gt;same&lt;/code&gt; in the &lt;code&gt;opposite direction&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) cw shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;highlight&lt;/code&gt; a &lt;code&gt;word&lt;/code&gt;, and then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;c&lt;/code&gt; key &lt;code&gt;followed&lt;/code&gt; by the&lt;br&gt;
&lt;code&gt;w&lt;/code&gt; key, the &lt;code&gt;word&lt;/code&gt; is &lt;code&gt;deleted&lt;/code&gt;, and I then &lt;code&gt;replace&lt;/code&gt; it with &lt;code&gt;another one&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;In order&lt;/code&gt; to &lt;code&gt;highlight&lt;/code&gt; a &lt;code&gt;complete word&lt;/code&gt;, I &lt;code&gt;have&lt;/code&gt; to enter &lt;code&gt;Visual mode&lt;/code&gt;. To&lt;br&gt;
&lt;code&gt;switch&lt;/code&gt; from &lt;code&gt;Normal Mode&lt;/code&gt; to &lt;code&gt;Visual mode&lt;/code&gt;, I first &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;esc&lt;/code&gt; key and&lt;br&gt;
&lt;code&gt;then&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;v&lt;/code&gt; key. The &lt;code&gt;esc&lt;/code&gt; key &lt;code&gt;takes&lt;/code&gt; me &lt;code&gt;out&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;Normal mode&lt;/code&gt;, and the &lt;code&gt;v&lt;/code&gt; key &lt;code&gt;takes&lt;/code&gt; me into &lt;code&gt;Visual mode&lt;/code&gt;. &lt;code&gt;Then&lt;/code&gt;, I use&lt;br&gt;
&lt;code&gt;either&lt;/code&gt; the &lt;code&gt;forward arrow&lt;/code&gt; key to &lt;code&gt;highlight&lt;/code&gt; the &lt;code&gt;word&lt;/code&gt; to the &lt;code&gt;right&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt;, making sure to &lt;code&gt;end&lt;/code&gt; highlighting &lt;code&gt;after&lt;/code&gt; the &lt;code&gt;last character&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;word&lt;/code&gt;, or the &lt;code&gt;left arrow&lt;/code&gt; key to &lt;code&gt;do&lt;/code&gt; the &lt;code&gt;same&lt;/code&gt; in the &lt;code&gt;opposite direction&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) s shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;highlight&lt;/code&gt; a &lt;code&gt;character&lt;/code&gt; with the &lt;code&gt;cursor&lt;/code&gt; and then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;s&lt;/code&gt;&lt;br&gt;
key, I then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;key&lt;/code&gt; of the &lt;code&gt;character&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt; it&lt;br&gt;
&lt;code&gt;with&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) S shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;highlight&lt;/code&gt; the &lt;code&gt;location&lt;/code&gt; in a &lt;code&gt;line&lt;/code&gt; where I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;start&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;edit&lt;/code&gt; of my &lt;code&gt;line&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;s&lt;/code&gt; key, it &lt;code&gt;removes&lt;/code&gt;&lt;br&gt;
that &lt;code&gt;content&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; I can &lt;code&gt;type&lt;/code&gt; in &lt;code&gt;what&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;replace&lt;/code&gt; it&lt;br&gt;
&lt;code&gt;with&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) D shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;place&lt;/code&gt; my &lt;code&gt;cursor&lt;/code&gt; where I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;start deleting&lt;/code&gt; a &lt;code&gt;line&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt;&lt;br&gt;
then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;d&lt;/code&gt; key, it &lt;code&gt;deletes&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt; from &lt;code&gt;that point&lt;/code&gt; to&lt;br&gt;
the &lt;code&gt;end&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) dd shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;select&lt;/code&gt; the &lt;code&gt;point&lt;/code&gt; from &lt;code&gt;which&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;delete&lt;/code&gt; a &lt;code&gt;line&lt;/code&gt; using&lt;br&gt;
the &lt;code&gt;cursor&lt;/code&gt;, I then &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;d&lt;/code&gt; key &lt;code&gt;followed&lt;/code&gt; by &lt;code&gt;pressing&lt;/code&gt; the &lt;code&gt;d&lt;/code&gt; key&lt;br&gt;
&lt;code&gt;again&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt; from the &lt;code&gt;location&lt;/code&gt; of the &lt;code&gt;cursor&lt;/code&gt; on, is &lt;code&gt;deleted&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;If&lt;/code&gt; I &lt;code&gt;place&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; at the &lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt;, the &lt;code&gt;entire line&lt;/code&gt;&lt;br&gt;
is &lt;code&gt;deleted&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) C shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;This&lt;/code&gt; is &lt;code&gt;similar&lt;/code&gt; to the (uppercase) D shortcut,&lt;br&gt;
but &lt;code&gt;when&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;c&lt;/code&gt; key, &lt;code&gt;after&lt;/code&gt; the (&lt;code&gt;part of&lt;/code&gt;) the&lt;br&gt;
&lt;code&gt;line&lt;/code&gt; has been &lt;code&gt;deleted&lt;/code&gt;, I can &lt;code&gt;replace&lt;/code&gt; it with &lt;code&gt;new content&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) yy shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;This&lt;/code&gt; works &lt;code&gt;similarly&lt;/code&gt; to&lt;br&gt;
the (lowercase) dd shortcut, &lt;code&gt;except&lt;/code&gt; that&lt;br&gt;
&lt;code&gt;instead&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt; being &lt;code&gt;deleted&lt;/code&gt;, &lt;code&gt;it&lt;/code&gt; is &lt;code&gt;copied&lt;/code&gt;. I &lt;code&gt;first&lt;/code&gt; place the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt; where I &lt;code&gt;want&lt;/code&gt; to start &lt;code&gt;copying&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the&lt;br&gt;
(&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;y&lt;/code&gt; key &lt;code&gt;followed&lt;/code&gt; by &lt;code&gt;pressing&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;y&lt;/code&gt; key&lt;br&gt;
&lt;code&gt;again&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; the &lt;code&gt;part&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt; I &lt;code&gt;selected&lt;/code&gt; (or the &lt;code&gt;complete line&lt;/code&gt; if&lt;br&gt;
I &lt;code&gt;placed&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; at the &lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt;) is &lt;code&gt;copied&lt;/code&gt; to the&lt;br&gt;
&lt;code&gt;clipboard&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) p shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;After&lt;/code&gt; I have &lt;code&gt;copied&lt;/code&gt; a &lt;code&gt;line&lt;/code&gt; (or &lt;code&gt;part&lt;/code&gt; of &lt;code&gt;it&lt;/code&gt;) &lt;code&gt;as per&lt;/code&gt;&lt;br&gt;
the (lowercase) yy shortcut, I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;p&lt;/code&gt;&lt;br&gt;
key, and the &lt;code&gt;line&lt;/code&gt; is &lt;code&gt;pasted&lt;/code&gt; below the &lt;code&gt;line&lt;/code&gt; I &lt;code&gt;copied&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) P shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;After&lt;/code&gt; I have &lt;code&gt;copied&lt;/code&gt; a &lt;code&gt;line&lt;/code&gt; (or &lt;code&gt;part&lt;/code&gt; of &lt;code&gt;it&lt;/code&gt;) &lt;code&gt;as per&lt;/code&gt;&lt;br&gt;
the (lowercase) yy shortcut, I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt;&lt;br&gt;
key + the &lt;code&gt;p&lt;/code&gt; key, &lt;code&gt;and&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt; is &lt;code&gt;pasted above&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt; I &lt;code&gt;copied&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) u shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;u&lt;/code&gt; key, it &lt;code&gt;undoes&lt;/code&gt; the &lt;code&gt;last change&lt;/code&gt; I &lt;code&gt;made&lt;/code&gt;. I &lt;code&gt;can&lt;/code&gt;&lt;br&gt;
also &lt;code&gt;keep&lt;/code&gt; on &lt;code&gt;pressing&lt;/code&gt; the &lt;code&gt;u&lt;/code&gt; key in &lt;code&gt;order&lt;/code&gt; to &lt;code&gt;keep&lt;/code&gt; on &lt;code&gt;undoing&lt;/code&gt; previous&lt;br&gt;
&lt;code&gt;changes&lt;/code&gt;. &lt;code&gt;Once&lt;/code&gt; I am &lt;code&gt;happy&lt;/code&gt; with the &lt;code&gt;current state&lt;/code&gt; of my &lt;code&gt;file&lt;/code&gt;, I &lt;code&gt;can&lt;/code&gt;&lt;br&gt;
type &lt;code&gt;:w&lt;/code&gt; so &lt;code&gt;that&lt;/code&gt; I &lt;code&gt;save&lt;/code&gt; this &lt;code&gt;acceptable state&lt;/code&gt;. &lt;code&gt;If&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to exit&lt;br&gt;
&lt;code&gt;Vim&lt;/code&gt; after &lt;code&gt;saving&lt;/code&gt; the &lt;code&gt;acceptable state&lt;/code&gt;, I &lt;code&gt;would&lt;/code&gt; simply &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;esc&lt;/code&gt;&lt;br&gt;
key &lt;code&gt;followed&lt;/code&gt; by the &lt;code&gt;:&lt;/code&gt; (&lt;code&gt;Shift key&lt;/code&gt; + (&lt;code&gt;;&lt;/code&gt;) &lt;code&gt;semi-colon&lt;/code&gt; key), &lt;code&gt;and&lt;/code&gt; I&lt;br&gt;
&lt;code&gt;would&lt;/code&gt; be &lt;code&gt;taken back&lt;/code&gt; to my &lt;code&gt;Terminal&lt;/code&gt; prompt.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Control + r shortcut
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Control key&lt;/code&gt; + &lt;code&gt;r&lt;/code&gt; key &lt;code&gt;undoes&lt;/code&gt; my &lt;code&gt;undo&lt;/code&gt; I &lt;code&gt;executed&lt;/code&gt; with&lt;br&gt;
the (lowercase) u shortcut. And &lt;code&gt;if&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;revert&lt;/code&gt; to my &lt;code&gt;latest undo&lt;/code&gt;, I just &lt;code&gt;press&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;u&lt;/code&gt; key&lt;br&gt;
&lt;code&gt;executing&lt;/code&gt; the (lowercase) u shortcut.&lt;/p&gt;
&lt;h3&gt;
  
  
  Repeating commands
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Repeating a command using a count
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Vim&lt;/code&gt; supports &lt;code&gt;shortcut repetition&lt;/code&gt; in &lt;code&gt;Normal mode&lt;/code&gt;. &lt;code&gt;Instead&lt;/code&gt; of &lt;code&gt;entering&lt;/code&gt;&lt;br&gt;
the same &lt;code&gt;shortcut&lt;/code&gt; multiple &lt;code&gt;times&lt;/code&gt; to &lt;code&gt;repeat&lt;/code&gt; the &lt;code&gt;desired action&lt;/code&gt;, I can&lt;br&gt;
&lt;code&gt;prefix&lt;/code&gt; the &lt;code&gt;same shortcut&lt;/code&gt; with the &lt;code&gt;number&lt;/code&gt; of &lt;code&gt;repetitions&lt;/code&gt;. To &lt;code&gt;delete&lt;/code&gt; 6&lt;br&gt;
&lt;code&gt;lines&lt;/code&gt;, I would &lt;code&gt;highlight&lt;/code&gt; the &lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt; I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;start&lt;/code&gt;&lt;br&gt;
my &lt;code&gt;deletion&lt;/code&gt; with the &lt;code&gt;cursor&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; I would &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;6&lt;/code&gt; key&lt;br&gt;
&lt;code&gt;followed&lt;/code&gt; by the &lt;code&gt;d&lt;/code&gt; key &lt;code&gt;and&lt;/code&gt; the &lt;code&gt;d&lt;/code&gt; key &lt;code&gt;again&lt;/code&gt; (&lt;code&gt;6dd&lt;/code&gt;). &lt;code&gt;This&lt;/code&gt; would&lt;br&gt;
&lt;code&gt;delete&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt; where the &lt;code&gt;cursor&lt;/code&gt; is &lt;code&gt;located&lt;/code&gt; and &lt;code&gt;5&lt;/code&gt; lines &lt;code&gt;after&lt;/code&gt; that.&lt;/p&gt;

&lt;p&gt;To &lt;code&gt;repeat&lt;/code&gt; the (lowercase) yy shortcut, I would&lt;br&gt;
&lt;code&gt;highlight&lt;/code&gt; the &lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt; I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;start&lt;/code&gt; my &lt;code&gt;copying&lt;/code&gt;&lt;br&gt;
with the &lt;code&gt;cursor&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; I would &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;6&lt;/code&gt; key (&lt;code&gt;again&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;for example&lt;/code&gt;) &lt;code&gt;followed&lt;/code&gt; by the &lt;code&gt;y&lt;/code&gt; key and the &lt;code&gt;y&lt;/code&gt; key &lt;code&gt;again&lt;/code&gt; (&lt;code&gt;6yy&lt;/code&gt;).&lt;br&gt;
&lt;code&gt;Next&lt;/code&gt;, I would &lt;code&gt;move&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; below the &lt;code&gt;current line&lt;/code&gt; and then &lt;code&gt;move&lt;/code&gt; it&lt;br&gt;
5 &lt;code&gt;times&lt;/code&gt; more, for a &lt;code&gt;total&lt;/code&gt; of &lt;code&gt;6&lt;/code&gt; lines, &lt;code&gt;stopping&lt;/code&gt; at the &lt;code&gt;last line&lt;/code&gt; I&lt;br&gt;
&lt;code&gt;want&lt;/code&gt; to &lt;code&gt;copy&lt;/code&gt; (the &lt;code&gt;cursor&lt;/code&gt; should &lt;code&gt;appear&lt;/code&gt; to &lt;code&gt;"underline"&lt;/code&gt; that &lt;code&gt;line&lt;/code&gt;).&lt;br&gt;
&lt;code&gt;This&lt;/code&gt; would &lt;code&gt;copy&lt;/code&gt; the &lt;code&gt;line&lt;/code&gt; where the &lt;code&gt;cursor&lt;/code&gt; &lt;code&gt;began&lt;/code&gt; and &lt;code&gt;5&lt;/code&gt; lines &lt;code&gt;after&lt;/code&gt;&lt;br&gt;
that. &lt;code&gt;Lastly&lt;/code&gt;, I would &lt;code&gt;press&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;p&lt;/code&gt; key, &lt;code&gt;not&lt;/code&gt; moving the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt;, and &lt;code&gt;this&lt;/code&gt; would &lt;code&gt;paste&lt;/code&gt; the &lt;code&gt;6&lt;/code&gt; lines I &lt;code&gt;copied&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;screenshot&lt;/code&gt; below &lt;code&gt;shows&lt;/code&gt; the &lt;code&gt;first line&lt;/code&gt; which I &lt;code&gt;wanted&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;start copying&lt;/code&gt; from and &lt;code&gt;where&lt;/code&gt; I &lt;code&gt;placed&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; at the &lt;code&gt;beginning&lt;/code&gt; of&lt;br&gt;
that &lt;code&gt;line&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; I pressed &lt;code&gt;6yy&lt;/code&gt; (&lt;code&gt;6&lt;/code&gt; key + &lt;code&gt;y&lt;/code&gt; key + &lt;code&gt;y&lt;/code&gt; key) at the&lt;br&gt;
&lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt; where the &lt;code&gt;cursor&lt;/code&gt; is &lt;code&gt;located&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6cslj93vadshw4bvl5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6cslj93vadshw4bvl5i.png" alt="Screenshot of cursor at beginning line of block for copying" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;screenshot&lt;/code&gt; below &lt;code&gt;shows&lt;/code&gt; the &lt;code&gt;end line&lt;/code&gt; of the &lt;code&gt;line block&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;copy&lt;/code&gt;. I &lt;code&gt;moved&lt;/code&gt; to this &lt;code&gt;line&lt;/code&gt; after I &lt;code&gt;had&lt;/code&gt; pressed &lt;code&gt;6yy&lt;/code&gt; (as &lt;code&gt;described&lt;/code&gt;&lt;br&gt;
above the &lt;code&gt;first screenshot&lt;/code&gt;). I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;take&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; to the &lt;code&gt;line&lt;/code&gt;&lt;br&gt;
where I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;end&lt;/code&gt; the &lt;code&gt;copying process&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwbrr5g5zg7o7ujopbgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwbrr5g5zg7o7ujopbgy.png" alt="Screenshot of cursor at end line of block for copying" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;pressed&lt;/code&gt; the &lt;code&gt;p&lt;/code&gt; key, and the &lt;code&gt;6&lt;/code&gt; lines I &lt;code&gt;copied&lt;/code&gt; are &lt;code&gt;pasted&lt;/code&gt; below&lt;br&gt;
the &lt;code&gt;lines&lt;/code&gt; I &lt;code&gt;copied&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91hcbmc1f3cx8qf81g73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91hcbmc1f3cx8qf81g73.png" alt="Screenshot of the result of the paste process" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Insert mode
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Insert mode&lt;/code&gt; allows &lt;code&gt;me&lt;/code&gt; to &lt;code&gt;type/insert&lt;/code&gt; characters &lt;code&gt;just like&lt;/code&gt; a &lt;code&gt;regular&lt;/code&gt;&lt;br&gt;
text &lt;code&gt;editor&lt;/code&gt;. I &lt;code&gt;can&lt;/code&gt; enter &lt;code&gt;Insert mode&lt;/code&gt; by &lt;code&gt;using&lt;/code&gt; an &lt;code&gt;insert shortcut&lt;/code&gt; from&lt;br&gt;
&lt;code&gt;Normal mode&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Entering Insert mode
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;There&lt;/code&gt; are &lt;code&gt;several ways&lt;/code&gt; of entering &lt;code&gt;Insert mode&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) i shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;i&lt;/code&gt; key, I am &lt;code&gt;switched&lt;/code&gt; into &lt;code&gt;Insert mode&lt;/code&gt;. I &lt;code&gt;know&lt;/code&gt; I am&lt;br&gt;
in &lt;code&gt;Insert mode&lt;/code&gt; because &lt;code&gt;-- Insert ---&lt;/code&gt; appears at the &lt;code&gt;bottom&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;window&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgs63yrjsplzxmcv99yrj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgs63yrjsplzxmcv99yrj.gif" alt="Screenshot of the (lowercase) i shortcut" width="2024" height="1524"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) I shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;i&lt;/code&gt; key, I &lt;code&gt;switch&lt;/code&gt; into &lt;code&gt;Insert mode&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;cursor&lt;/code&gt; moves to the &lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt; (if it is &lt;code&gt;not&lt;/code&gt; already&lt;br&gt;
&lt;code&gt;there&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtdbp13ejbmqbu6oldwu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtdbp13ejbmqbu6oldwu.gif" alt="Screen recording of the (uppercase) I shortcut" width="2024" height="1524"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) a shortcut
&lt;/h3&gt;

&lt;p&gt;[The (lowercase) a shortcut] &lt;code&gt;behavior&lt;/code&gt; is &lt;code&gt;almost&lt;/code&gt; the &lt;code&gt;same&lt;/code&gt; as &lt;a href="https://dev.tothe%20(lowercase)%20i%20shortcut"&gt;the&lt;br&gt;
(lowercase) i shortcut&lt;/a&gt;. The &lt;code&gt;only difference&lt;/code&gt; is&lt;br&gt;
&lt;code&gt;that&lt;/code&gt; when I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;a&lt;/code&gt; key, and when &lt;code&gt;-- Insert ---&lt;/code&gt; appears at the&lt;br&gt;
&lt;code&gt;bottom&lt;/code&gt; of the &lt;code&gt;window&lt;/code&gt;, the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;from&lt;/code&gt; the &lt;code&gt;beginning&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;line&lt;/code&gt; to the &lt;code&gt;next character&lt;/code&gt; to the &lt;code&gt;right&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubs2hne5smjftr9kwj1d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubs2hne5smjftr9kwj1d.gif" alt="Screen recording of the (lowercase) a shortcut" width="2024" height="1524"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) A shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + the &lt;code&gt;a&lt;/code&gt; key, I &lt;code&gt;switch&lt;/code&gt; into &lt;code&gt;Insert mode&lt;/code&gt;,&lt;br&gt;
and the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;to&lt;/code&gt; the &lt;code&gt;end&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvv8muku8d24p6z0q7nh.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvv8muku8d24p6z0q7nh.gif" alt="Image description" width="2024" height="1524"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) o shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;After&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;o&lt;/code&gt; key, I &lt;code&gt;switch&lt;/code&gt; into &lt;code&gt;Insert mode&lt;/code&gt;, and the &lt;code&gt;cursor&lt;/code&gt;&lt;br&gt;
moves &lt;code&gt;down&lt;/code&gt; to the &lt;code&gt;second line&lt;/code&gt;, &lt;code&gt;creating&lt;/code&gt; a new &lt;code&gt;line space&lt;/code&gt;. The &lt;code&gt;contents&lt;/code&gt;&lt;br&gt;
of the &lt;code&gt;second line&lt;/code&gt; is moved &lt;code&gt;down&lt;/code&gt; to the &lt;code&gt;third line&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu4dxcdlndprdscl3tf5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu4dxcdlndprdscl3tf5.gif" alt="Image description" width="2024" height="1524"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) O shortcut
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;o&lt;/code&gt; key, I &lt;code&gt;switch&lt;/code&gt; into &lt;code&gt;Insert mode&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;first line&lt;/code&gt; moves &lt;code&gt;down&lt;/code&gt; to the &lt;code&gt;second line&lt;/code&gt;, &lt;code&gt;leaving&lt;/code&gt; a &lt;code&gt;line space&lt;/code&gt; on the&lt;br&gt;
first line.&lt;/p&gt;
&lt;h3&gt;
  
  
  Switching from Insert mode into Normal mode
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;In order&lt;/code&gt; to &lt;code&gt;switch&lt;/code&gt; from &lt;code&gt;Insert mode&lt;/code&gt; into &lt;code&gt;Normal mode&lt;/code&gt;, I &lt;code&gt;press&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;esc&lt;/code&gt; key. And &lt;code&gt;if&lt;/code&gt; I am ever &lt;code&gt;unsure&lt;/code&gt; whether I &lt;code&gt;am&lt;/code&gt; in &lt;code&gt;Normal mode&lt;/code&gt; or &lt;code&gt;not&lt;/code&gt;,&lt;br&gt;
I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;esc&lt;/code&gt; key to &lt;code&gt;make sure&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Visual mode
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;I&lt;/code&gt; use &lt;code&gt;Visual mode&lt;/code&gt; to select &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;similar&lt;/code&gt; to &lt;code&gt;clicking&lt;/code&gt; and &lt;code&gt;dragging&lt;/code&gt;&lt;br&gt;
with a &lt;code&gt;mouse&lt;/code&gt;. &lt;code&gt;Selecting text&lt;/code&gt; allows &lt;code&gt;shortcuts&lt;/code&gt; to &lt;code&gt;apply&lt;/code&gt; only to the&lt;br&gt;
&lt;code&gt;selection&lt;/code&gt;, such as &lt;code&gt;copying&lt;/code&gt;, &lt;code&gt;deleting&lt;/code&gt;, &lt;code&gt;replacing&lt;/code&gt;, etc.&lt;/p&gt;
&lt;h3&gt;
  
  
  Entering Visual mode
&lt;/h3&gt;

&lt;p&gt;To &lt;code&gt;make&lt;/code&gt; a &lt;code&gt;text selection&lt;/code&gt;, &lt;code&gt;first&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;v&lt;/code&gt; key, &lt;code&gt;and&lt;/code&gt;&lt;br&gt;
this &lt;code&gt;will&lt;/code&gt; also &lt;code&gt;mark&lt;/code&gt; the &lt;code&gt;starting&lt;/code&gt; selection &lt;code&gt;point&lt;/code&gt;. &lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;move&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt; to the &lt;code&gt;end selection point&lt;/code&gt;, and &lt;code&gt;Vim&lt;/code&gt; provides a &lt;code&gt;visual highlight&lt;/code&gt;&lt;br&gt;
of the &lt;code&gt;text selection&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  The (lowercase) v shortcut
&lt;/h3&gt;

&lt;p&gt;This &lt;code&gt;shortcut&lt;/code&gt; is also &lt;code&gt;known&lt;/code&gt; as the &lt;code&gt;Visual mode visual subtype&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to enter &lt;code&gt;Visual mode visual subtype&lt;/code&gt;, I &lt;code&gt;first&lt;/code&gt; press the &lt;code&gt;esc&lt;/code&gt;&lt;br&gt;
key to &lt;code&gt;exit&lt;/code&gt; whatever &lt;code&gt;mode&lt;/code&gt; I was &lt;code&gt;in&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;v&lt;/code&gt; key, this&lt;br&gt;
&lt;code&gt;switches&lt;/code&gt; me into &lt;code&gt;Visual mode&lt;/code&gt;, and &lt;code&gt;will&lt;/code&gt; also &lt;code&gt;mark&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;start selection point&lt;/code&gt;. &lt;code&gt;When&lt;/code&gt; I &lt;code&gt;move&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; across the the&lt;br&gt;
&lt;code&gt;first line&lt;/code&gt;, the &lt;code&gt;cursor&lt;/code&gt; moves &lt;code&gt;character&lt;/code&gt; by &lt;code&gt;character&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I can &lt;code&gt;use&lt;/code&gt; the &lt;code&gt;Up arrow&lt;/code&gt; or the (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;k&lt;/code&gt; key to&lt;br&gt;
&lt;code&gt;select lines&lt;/code&gt; going &lt;code&gt;up&lt;/code&gt;. &lt;code&gt;As&lt;/code&gt; mentioned &lt;code&gt;previously&lt;/code&gt;, &lt;code&gt;no&lt;/code&gt; matter &lt;code&gt;what&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;difference&lt;/code&gt; in &lt;code&gt;line lengths&lt;/code&gt;, the &lt;code&gt;lines&lt;/code&gt; are &lt;code&gt;completely selected&lt;/code&gt;. &lt;code&gt;Same&lt;/code&gt;&lt;br&gt;
with &lt;code&gt;when&lt;/code&gt; I &lt;code&gt;use&lt;/code&gt; the &lt;code&gt;Down arrow&lt;/code&gt; key or (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;j&lt;/code&gt; key to&lt;br&gt;
&lt;code&gt;select lines&lt;/code&gt; going &lt;code&gt;down&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu35dj5hjqq5fb3m6zinf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu35dj5hjqq5fb3m6zinf.jpg" alt="IScreenshot of the (lowercase) v shortcut" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The (uppercase) V shortcut
&lt;/h3&gt;

&lt;p&gt;This &lt;code&gt;shortcut&lt;/code&gt; is also &lt;code&gt;known&lt;/code&gt; as the &lt;code&gt;Visual mode line-wise visual subtype&lt;/code&gt;.&lt;br&gt;
It &lt;code&gt;always&lt;/code&gt; selects &lt;code&gt;full lines&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt; key + &lt;code&gt;v&lt;/code&gt; key, I &lt;code&gt;switch&lt;/code&gt; into &lt;code&gt;Visual mode&lt;/code&gt;, and&lt;br&gt;
this &lt;code&gt;makes&lt;/code&gt; text &lt;code&gt;selections&lt;/code&gt; line &lt;code&gt;by&lt;/code&gt; line. This is &lt;code&gt;great&lt;/code&gt; for &lt;code&gt;when&lt;/code&gt; I&lt;br&gt;
&lt;code&gt;want&lt;/code&gt; to &lt;code&gt;select&lt;/code&gt; a &lt;code&gt;block&lt;/code&gt; of &lt;code&gt;text&lt;/code&gt; in &lt;code&gt;which&lt;/code&gt; the &lt;code&gt;lines&lt;/code&gt; are&lt;br&gt;
&lt;code&gt;different lengths&lt;/code&gt;. &lt;code&gt;After&lt;/code&gt; I &lt;code&gt;select&lt;/code&gt; the &lt;code&gt;first line&lt;/code&gt;, and then &lt;code&gt;move&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;cursor&lt;/code&gt; down (or the &lt;code&gt;Up arrow&lt;/code&gt; key to &lt;code&gt;move&lt;/code&gt; the &lt;code&gt;cursor&lt;/code&gt; up), it will&lt;br&gt;
&lt;code&gt;select&lt;/code&gt; the &lt;code&gt;whole line&lt;/code&gt; no &lt;code&gt;matter&lt;/code&gt; the &lt;code&gt;difference&lt;/code&gt; in &lt;code&gt;line length&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2axw0xhmfngfei69iok.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2axw0xhmfngfei69iok.jpg" alt="Screenshot of the (uppercase) V shortcut" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The Control + v shortcut
&lt;/h3&gt;

&lt;p&gt;This &lt;code&gt;shortcut&lt;/code&gt; is also &lt;code&gt;known&lt;/code&gt; as the &lt;code&gt;Visual mode block-wise subtype&lt;/code&gt;. it&lt;br&gt;
&lt;code&gt;selects&lt;/code&gt; any &lt;code&gt;rectangular selection&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I press &lt;code&gt;Control&lt;/code&gt; key + (&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;v&lt;/code&gt; key, I am &lt;code&gt;switched&lt;/code&gt; to the&lt;br&gt;
&lt;code&gt;Visual mode block-wise subtype&lt;/code&gt;. &lt;code&gt;So far&lt;/code&gt;, I have &lt;code&gt;not&lt;/code&gt; had&lt;br&gt;
&lt;code&gt;appropriate opportunity&lt;/code&gt; to &lt;code&gt;use&lt;/code&gt; this &lt;code&gt;subtype&lt;/code&gt;. &lt;code&gt;So far&lt;/code&gt;, &lt;code&gt;contrary&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;popular opinion&lt;/code&gt;, I &lt;code&gt;find&lt;/code&gt; it &lt;code&gt;somewhat limiting&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As &lt;code&gt;opposed&lt;/code&gt; to the &lt;code&gt;Visual mode visual subtype&lt;/code&gt; or the&lt;br&gt;
&lt;code&gt;Visual mode line-wise visual subtype&lt;/code&gt;, the &lt;code&gt;shortest line&lt;/code&gt; is &lt;code&gt;selected&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;kept&lt;/code&gt; when either &lt;code&gt;selecting&lt;/code&gt; lines &lt;code&gt;down&lt;/code&gt; or &lt;code&gt;up&lt;/code&gt;. &lt;code&gt;This&lt;/code&gt; is because &lt;code&gt;lines&lt;/code&gt;&lt;br&gt;
and &lt;code&gt;columns&lt;/code&gt; are &lt;code&gt;being selected&lt;/code&gt; at the &lt;code&gt;same time&lt;/code&gt;, and the &lt;code&gt;columns&lt;/code&gt; consist&lt;br&gt;
of&lt;code&gt;lines&lt;/code&gt; of &lt;code&gt;equal width&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;If&lt;/code&gt; I &lt;code&gt;need&lt;/code&gt; to &lt;code&gt;find&lt;/code&gt; out &lt;code&gt;how&lt;/code&gt; to do &lt;code&gt;something&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt;, I can access &lt;code&gt;Vim&lt;/code&gt;&lt;br&gt;
help by &lt;code&gt;running&lt;/code&gt; the &lt;code&gt;:help&lt;/code&gt; command. I first &lt;code&gt;make sure&lt;/code&gt; I &lt;code&gt;am&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;Normal mode&lt;/code&gt; by &lt;code&gt;pressing&lt;/code&gt; the &lt;code&gt;esc&lt;/code&gt; key, and &lt;code&gt;then&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Shift&lt;/code&gt;&lt;br&gt;
key + (&lt;code&gt;;&lt;/code&gt;) &lt;code&gt;semi-colon&lt;/code&gt; key, and &lt;code&gt;then&lt;/code&gt; I type &lt;code&gt;"help"&lt;/code&gt;. &lt;code&gt;And&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;&lt;br&gt;
appears:&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;press&lt;/code&gt; the &lt;code&gt;Return&lt;/code&gt; key and the &lt;code&gt;following&lt;/code&gt; appears:&lt;/p&gt;

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

&lt;p&gt;I &lt;code&gt;could&lt;/code&gt; also &lt;code&gt;search&lt;/code&gt; for &lt;code&gt;specific help&lt;/code&gt; with the &lt;code&gt;:help&lt;/code&gt; command.&lt;br&gt;
&lt;code&gt;For example&lt;/code&gt;, I could type &lt;code&gt;:help visual.txt&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4jatdkfd1hyxzspkeju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4jatdkfd1hyxzspkeju.png" alt="Screenshot of the :help visual.txt result" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;When&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;exit&lt;/code&gt; the &lt;code&gt;:help&lt;/code&gt; or &lt;code&gt;:help visual.txt&lt;/code&gt; command, I &lt;code&gt;first&lt;/code&gt;&lt;br&gt;
press the &lt;code&gt;esc&lt;/code&gt; key &lt;code&gt;followed&lt;/code&gt; by &lt;code&gt;:q!&lt;/code&gt; and &lt;code&gt;then&lt;/code&gt; the &lt;code&gt;Return&lt;/code&gt; key, which&lt;br&gt;
&lt;code&gt;takes&lt;/code&gt; me &lt;code&gt;out&lt;/code&gt; of the &lt;code&gt;:help visual.txt&lt;/code&gt; command. &lt;code&gt;However&lt;/code&gt;, I am &lt;code&gt;still&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;Command mode&lt;/code&gt;. &lt;code&gt;If&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;quit&lt;/code&gt; completely &lt;code&gt;out&lt;/code&gt; of &lt;code&gt;Vim&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt; simply&lt;br&gt;
&lt;code&gt;hit&lt;/code&gt; the &lt;code&gt;Return&lt;/code&gt; key &lt;code&gt;again&lt;/code&gt;, &lt;code&gt;and&lt;/code&gt; am &lt;code&gt;taken back&lt;/code&gt; to the &lt;code&gt;Terminal&lt;/code&gt; prompt.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;If&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;remain&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt;, but &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;exit&lt;/code&gt; out of &lt;code&gt;Command mode&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;instead&lt;/code&gt; of &lt;code&gt;pressing&lt;/code&gt; the &lt;code&gt;Return&lt;/code&gt; key a &lt;code&gt;second time&lt;/code&gt;, I &lt;code&gt;press&lt;/code&gt; the&lt;br&gt;
(&lt;code&gt;lowercase&lt;/code&gt;) &lt;code&gt;i&lt;/code&gt; key &lt;code&gt;and&lt;/code&gt; am &lt;code&gt;taken&lt;/code&gt; into &lt;code&gt;Insert mode&lt;/code&gt;. &lt;code&gt;If&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;switch&lt;/code&gt; into &lt;code&gt;another mode&lt;/code&gt; like &lt;code&gt;Normal mode&lt;/code&gt;, for example, I &lt;code&gt;press&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;esc&lt;/code&gt; key. &lt;code&gt;This way&lt;/code&gt;, I &lt;code&gt;stay&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Other Command mode commands
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Other&lt;/code&gt; Command mode &lt;code&gt;commands&lt;/code&gt; (&lt;code&gt;some&lt;/code&gt; of &lt;code&gt;which&lt;/code&gt; have &lt;code&gt;already&lt;/code&gt; been&lt;br&gt;
&lt;code&gt;covered&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quit file&lt;/span&gt;
:q
&lt;span class="c"&gt;# write changes to file&lt;/span&gt;
:w
&lt;span class="c"&gt;# Save and quit&lt;/span&gt;
:wq
&lt;span class="c"&gt;# Save and quit&lt;/span&gt;
:x
&lt;span class="c"&gt;# Quit forcefully&lt;/span&gt;
:q!
&lt;span class="c"&gt;# Save and exit forcefully&lt;/span&gt;
:wq!
&lt;span class="c"&gt;# Go to first line of file&lt;/span&gt;
:1
&lt;span class="c"&gt;# Set numbers to lines&lt;/span&gt;
:set nu
&lt;span class="c"&gt;# Remove numbers from lines&lt;/span&gt;
:set nanu
&lt;span class="c"&gt;# Specified line number, Same as :1 command, just a different number.&lt;/span&gt;
:&amp;lt;Specific line number&amp;gt;
&lt;span class="c"&gt;# The command output will paste in current cursor position.&lt;/span&gt;
:r &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;
&lt;span class="c"&gt;# Executes shell command "ls" of current working directory in Terminal&lt;/span&gt;
:!ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;There is&lt;/code&gt; a lot &lt;code&gt;more&lt;/code&gt; to &lt;code&gt;Command mode&lt;/code&gt;, but &lt;code&gt;this&lt;/code&gt; is a &lt;code&gt;good start&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;You can &lt;code&gt;dig deeper&lt;/code&gt; in &lt;code&gt;Vim&lt;/code&gt; by &lt;code&gt;checking out&lt;/code&gt; the various &lt;code&gt;Related Resources&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The vimtutor
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;By default&lt;/code&gt;, the &lt;code&gt;Vim&lt;/code&gt; install &lt;code&gt;includes&lt;/code&gt; a &lt;code&gt;tutorial&lt;/code&gt; called &lt;code&gt;vimtutor&lt;/code&gt;. It is&lt;br&gt;
&lt;code&gt;meant&lt;/code&gt; to &lt;code&gt;help&lt;/code&gt; us &lt;code&gt;learn&lt;/code&gt; the &lt;code&gt;Vim&lt;/code&gt; basics &lt;code&gt;hands-on&lt;/code&gt;. We can &lt;code&gt;start&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;vimtutor&lt;/code&gt; by &lt;code&gt;running&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vimtutor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.redhat.com/sysadmin/introduction-vi-editor" rel="noopener noreferrer"&gt;An introduction to the vi editor&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;RedHat&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.warp.dev/topic/vim" rel="noopener noreferrer"&gt;vim&lt;/a&gt;: &lt;strong&gt;&lt;em&gt;warp&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://upspir.com/vim-essentials-tips-and-tricks-for-boosting-productivity/" rel="noopener noreferrer"&gt;Vim Essentials: Tips and Tricks for Boosting Productivity&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;upspir&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.freecodecamp.org/news/vimrc-configuration-guide-customize-your-vim-editor/" rel="noopener noreferrer"&gt;Vimrc Configuration Guide - How to Customize Your Vim Code Editor with Mappings, Vimscript, Status Line, and More&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;by Brandon Wallace, freecodecamp&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.freecodecamp.org/news/vim-editor-modes-explained/" rel="noopener noreferrer"&gt;Vim Editor Modes Explained&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;freecodecamp&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://builtin.com/articles/vim-visual-mode" rel="noopener noreferrer"&gt;A Guide to Vim Visual Mode&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;builtin&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>macos</category>
      <category>vim</category>
      <category>warpterminal</category>
    </item>
    <item>
      <title>Setting your default browser via Command Line in macOS</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Mon, 19 Aug 2024 09:57:03 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/setting-your-default-browser-via-command-line-in-macos-3n6p</link>
      <guid>https://dev.to/letsbsocial1/setting-your-default-browser-via-command-line-in-macos-3n6p</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/@designecologist/" rel="noopener noreferrer"&gt;Designecologist&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/photo/silver-imac-displaying-collage-photos-1779487/" rel="noopener noreferrer"&gt;pexels.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/setting-your-default-browser-via-command-line-in-macos" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Installing the Homebrew package defaultbrowser
&lt;/li&gt;
&lt;li&gt;  brew install defaultbrowser
&lt;/li&gt;
&lt;li&gt;  Running the defaultbrowser safari command
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing the Homebrew package defaultbrowser
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;In order&lt;/code&gt; to &lt;code&gt;set&lt;/code&gt; my &lt;code&gt;default browser&lt;/code&gt; in &lt;code&gt;macOS&lt;/code&gt; via &lt;code&gt;Command Line&lt;/code&gt;, I first&lt;br&gt;
&lt;code&gt;had&lt;/code&gt; to &lt;code&gt;install&lt;/code&gt; the &lt;code&gt;Homebrew&lt;/code&gt; package called &lt;code&gt;defaultbrowser&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;First&lt;/code&gt;, I &lt;code&gt;ran&lt;/code&gt; the &lt;code&gt;following commands&lt;/code&gt;, one &lt;code&gt;after&lt;/code&gt; the &lt;code&gt;other&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew update
brew upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is &lt;code&gt;similar&lt;/code&gt; to &lt;code&gt;what&lt;/code&gt; we &lt;code&gt;do&lt;/code&gt; in &lt;code&gt;Linux Mint&lt;/code&gt; when we run&lt;br&gt;
&lt;code&gt;sudo apt update&lt;/code&gt; and &lt;code&gt;sudo apt upgrade&lt;/code&gt; to &lt;code&gt;make sure&lt;/code&gt; that &lt;code&gt;all&lt;/code&gt; our&lt;br&gt;
&lt;code&gt;packages&lt;/code&gt; are &lt;code&gt;up&lt;/code&gt; to &lt;code&gt;date&lt;/code&gt; before &lt;code&gt;installing&lt;/code&gt; a &lt;code&gt;new one&lt;/code&gt;. We &lt;code&gt;have&lt;/code&gt; to &lt;code&gt;do&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;same&lt;/code&gt; with &lt;code&gt;Homebrew&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  brew install defaultbrowser
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt; to &lt;code&gt;install&lt;/code&gt; the &lt;code&gt;defaultbrowser&lt;/code&gt;&lt;br&gt;
package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;defaultbrowser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running the defaultbrowser safari command
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;After&lt;/code&gt; it was &lt;code&gt;successfully installed&lt;/code&gt;, I &lt;code&gt;quit&lt;/code&gt; the active &lt;code&gt;Terminal&lt;/code&gt; window&lt;br&gt;
and &lt;code&gt;opened&lt;/code&gt; up a &lt;code&gt;new instance&lt;/code&gt;. And there, I &lt;code&gt;ran&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt; to&lt;br&gt;
make &lt;code&gt;Safari&lt;/code&gt; my &lt;code&gt;default browser&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;defaultbrowser safari
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that was it!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;No&lt;/code&gt; more &lt;code&gt;need&lt;/code&gt; to &lt;code&gt;go&lt;/code&gt; into &lt;code&gt;browser&lt;/code&gt; settings &lt;code&gt;searching&lt;/code&gt; for the &lt;code&gt;location&lt;/code&gt;&lt;br&gt;
where to &lt;code&gt;set&lt;/code&gt; a &lt;code&gt;particular browser&lt;/code&gt; as your &lt;code&gt;default browser&lt;/code&gt;. &lt;code&gt;You&lt;/code&gt; can just&lt;br&gt;
&lt;code&gt;set&lt;/code&gt; it by &lt;code&gt;typing&lt;/code&gt; a &lt;code&gt;simple&lt;/code&gt; two word &lt;code&gt;command&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;!&lt;/p&gt;

</description>
      <category>commandline</category>
      <category>macos</category>
      <category>defaultbrowser</category>
      <category>homebrew</category>
    </item>
    <item>
      <title>Clearing Terminal history in Linux and why it is important to do on occasion</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Sat, 17 Aug 2024 19:13:44 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/clearing-terminal-history-in-linux-and-why-it-is-important-to-do-on-occasion-3i93</link>
      <guid>https://dev.to/letsbsocial1/clearing-terminal-history-in-linux-and-why-it-is-important-to-do-on-occasion-3i93</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/@galleryofmyeye/" rel="noopener noreferrer"&gt;Enes Bayraktar&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/photo/time-lapse-photo-of-train-on-subway-13169888/" rel="noopener noreferrer"&gt;pexels.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/clearing-terminal-history-in-linux-and-why-it-is-important-to-do-on-occasion" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  What is the history command?
&lt;/li&gt;
&lt;li&gt;  history is not actually a command
&lt;/li&gt;
&lt;li&gt;  history
&lt;/li&gt;
&lt;li&gt;  Removing history

&lt;ul&gt;
&lt;li&gt;  Deleting a command by line number
&lt;/li&gt;
&lt;li&gt;  history -c
&lt;/li&gt;
&lt;li&gt;  Manually removing the contents of .bash_history
&lt;/li&gt;
&lt;li&gt;  Clearing .bash_history using the echo command
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  bash history, privacy and security
&lt;/li&gt;

&lt;li&gt;  Related Resources
&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is the history command?
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;history&lt;/code&gt; command in &lt;code&gt;Linux&lt;/code&gt; (and &lt;code&gt;macOS&lt;/code&gt;) stores a &lt;code&gt;list&lt;/code&gt; of &lt;code&gt;commands&lt;/code&gt;&lt;br&gt;
that have been &lt;code&gt;used&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt; sessions, &lt;code&gt;and&lt;/code&gt; it &lt;code&gt;permits&lt;/code&gt; us to &lt;code&gt;reuse&lt;/code&gt;&lt;br&gt;
them &lt;code&gt;instead&lt;/code&gt; of &lt;code&gt;retyping&lt;/code&gt; them.&lt;/p&gt;
&lt;h2&gt;
  
  
  history is not actually a command
&lt;/h2&gt;

&lt;p&gt;If I run &lt;code&gt;which history&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;, &lt;code&gt;nothing&lt;/code&gt; is &lt;code&gt;stdout&lt;/code&gt;. This &lt;code&gt;confirms&lt;/code&gt;&lt;br&gt;
that &lt;code&gt;history&lt;/code&gt; is &lt;code&gt;not&lt;/code&gt; actually a &lt;code&gt;command&lt;/code&gt;. &lt;code&gt;history&lt;/code&gt; is a &lt;code&gt;built-in&lt;/code&gt; keyword&lt;br&gt;
of our &lt;code&gt;shell&lt;/code&gt; (Another example is the &lt;code&gt;cd&lt;/code&gt; command. It &lt;code&gt;also&lt;/code&gt; is a &lt;code&gt;builtin&lt;/code&gt;&lt;br&gt;
keyword and &lt;code&gt;not&lt;/code&gt; a &lt;code&gt;command&lt;/code&gt;). And because &lt;code&gt;history&lt;/code&gt; is &lt;code&gt;written&lt;/code&gt; into the&lt;br&gt;
&lt;code&gt;particular shell&lt;/code&gt; we are &lt;code&gt;using&lt;/code&gt; at &lt;code&gt;any&lt;/code&gt; given &lt;code&gt;time&lt;/code&gt;, there can be a&lt;br&gt;
&lt;code&gt;difference&lt;/code&gt; in its &lt;code&gt;behavior&lt;/code&gt; across &lt;code&gt;shells&lt;/code&gt;. But since I use &lt;code&gt;bash&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;Linux&lt;/code&gt;, I will be discussing &lt;code&gt;bash-specific&lt;/code&gt; history &lt;code&gt;behavior&lt;/code&gt; in my&lt;br&gt;
&lt;code&gt;particular&lt;/code&gt; Linux &lt;code&gt;distro&lt;/code&gt; (&lt;code&gt;Linux Mint&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;
  
  
  history
&lt;/h2&gt;

&lt;p&gt;If I run &lt;code&gt;history&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;, I get back &lt;code&gt;428&lt;/code&gt; lines, &lt;code&gt;each line&lt;/code&gt; containing&lt;br&gt;
a &lt;code&gt;command&lt;/code&gt; I have &lt;code&gt;run&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;. The &lt;code&gt;following&lt;/code&gt; is a &lt;code&gt;sneak peak&lt;/code&gt; at&lt;br&gt;
&lt;code&gt;history&lt;/code&gt; stdout:'&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  1 &lt;span class="nb"&gt;ls
  &lt;/span&gt;2 &lt;span class="nb"&gt;cd &lt;/span&gt;Desktop
  3 &lt;span class="nb"&gt;ls
  &lt;/span&gt;4 &lt;span class="nb"&gt;cd &lt;/span&gt;cron-job-scripts/
  5 &lt;span class="nb"&gt;ls
  &lt;/span&gt;6 mailx
  7 &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
  8 &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade
  9 &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mailx
  ...
428 &lt;span class="nb"&gt;history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;run&lt;/code&gt; a &lt;code&gt;specific command&lt;/code&gt; using its &lt;code&gt;line number&lt;/code&gt;, I would&lt;br&gt;
&lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;84
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which would &lt;code&gt;return&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-backup/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the &lt;code&gt;command&lt;/code&gt; at &lt;code&gt;line 84&lt;/code&gt; in (&lt;code&gt;Terminal&lt;/code&gt;) &lt;code&gt;history&lt;/code&gt;. I &lt;code&gt;could&lt;/code&gt; also&lt;br&gt;
&lt;code&gt;access&lt;/code&gt; and &lt;code&gt;run&lt;/code&gt; this &lt;code&gt;command&lt;/code&gt; by &lt;code&gt;running&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-backup/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Sometimes&lt;/code&gt;, &lt;code&gt;as&lt;/code&gt; in &lt;code&gt;this case&lt;/code&gt;, we &lt;code&gt;get&lt;/code&gt; back &lt;code&gt;something like&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;desktop-backup/ desktop-backup/
bash &lt;span class="nb"&gt;cd&lt;/span&gt;: too many arguments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So I &lt;code&gt;tried&lt;/code&gt; another &lt;code&gt;one&lt;/code&gt; that does &lt;code&gt;not&lt;/code&gt; result in any &lt;code&gt;ambiguity&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It &lt;code&gt;runs&lt;/code&gt; the &lt;code&gt;clear command&lt;/code&gt;, &lt;code&gt;clearing&lt;/code&gt; the &lt;code&gt;Terminal&lt;/code&gt; window. Using &lt;code&gt;!&lt;/code&gt;&lt;br&gt;
before the &lt;code&gt;command itself&lt;/code&gt; prompts &lt;code&gt;history&lt;/code&gt; to &lt;code&gt;search&lt;/code&gt; for the &lt;code&gt;last command&lt;/code&gt;&lt;br&gt;
that &lt;code&gt;matches&lt;/code&gt; the &lt;code&gt;pattern&lt;/code&gt; I &lt;code&gt;provided&lt;/code&gt;. &lt;code&gt;In&lt;/code&gt; this &lt;code&gt;case&lt;/code&gt;, it is &lt;code&gt;clear&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But I digress. Let's get to the task at hand.&lt;/p&gt;
&lt;h2&gt;
  
  
  Removing history
&lt;/h2&gt;

&lt;p&gt;There are &lt;code&gt;several ways&lt;/code&gt; to &lt;code&gt;remove&lt;/code&gt; some or all &lt;code&gt;commands&lt;/code&gt; saved to &lt;code&gt;history&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Deleting a command by line number
&lt;/h3&gt;

&lt;p&gt;If I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;delete&lt;/code&gt; a &lt;code&gt;command&lt;/code&gt; saved to &lt;code&gt;history&lt;/code&gt; by &lt;code&gt;line number&lt;/code&gt;, I would&lt;br&gt;
&lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;history&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; 423
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;code&gt;removes&lt;/code&gt; the &lt;code&gt;command&lt;/code&gt; at line &lt;code&gt;423&lt;/code&gt;. This is a &lt;code&gt;great command&lt;/code&gt; to &lt;code&gt;know&lt;/code&gt;&lt;br&gt;
in &lt;code&gt;case&lt;/code&gt; if you have &lt;code&gt;mistyped&lt;/code&gt; a &lt;code&gt;command&lt;/code&gt;, for example, and &lt;code&gt;want&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;remove&lt;/code&gt; it from &lt;code&gt;history&lt;/code&gt; because it is essentially &lt;code&gt;useless&lt;/code&gt;. But it can&lt;br&gt;
&lt;code&gt;also&lt;/code&gt; be &lt;code&gt;used&lt;/code&gt; to &lt;code&gt;remove&lt;/code&gt; specific &lt;code&gt;commands&lt;/code&gt; containing&lt;br&gt;
&lt;code&gt;sensitive information&lt;/code&gt;. Why? &lt;code&gt;What&lt;/code&gt; if&lt;code&gt;you&lt;/code&gt; had to use &lt;code&gt;history&lt;/code&gt; or&lt;br&gt;
&lt;code&gt;some other&lt;/code&gt; related &lt;code&gt;tool&lt;/code&gt; or &lt;code&gt;command&lt;/code&gt; in a &lt;code&gt;presentation&lt;/code&gt;, and you &lt;code&gt;wanted&lt;/code&gt;&lt;br&gt;
to &lt;code&gt;make sure&lt;/code&gt; that &lt;code&gt;nothing sensitive&lt;/code&gt; would &lt;code&gt;appear&lt;/code&gt; on the &lt;code&gt;screen&lt;/code&gt;, and you&lt;br&gt;
&lt;code&gt;didn't want&lt;/code&gt; to &lt;code&gt;completely remove&lt;/code&gt; your &lt;code&gt;history&lt;/code&gt;. This &lt;code&gt;would&lt;/code&gt; be &lt;code&gt;one way&lt;/code&gt;&lt;br&gt;
to &lt;code&gt;do that&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  history -c
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;history -c&lt;/code&gt; command &lt;code&gt;removes&lt;/code&gt; the &lt;code&gt;contents&lt;/code&gt; of a specific &lt;code&gt;Terminal&lt;/code&gt;&lt;br&gt;
session's &lt;code&gt;history&lt;/code&gt;. If I run &lt;code&gt;history -c&lt;/code&gt; and then &lt;code&gt;check&lt;/code&gt; to &lt;code&gt;see&lt;/code&gt; if the&lt;br&gt;
&lt;code&gt;contents&lt;/code&gt; of my &lt;code&gt;Terminal&lt;/code&gt; session's &lt;code&gt;history&lt;/code&gt; was &lt;code&gt;indeed&lt;/code&gt; completely&lt;br&gt;
&lt;code&gt;removed&lt;/code&gt;, I would run &lt;code&gt;history&lt;/code&gt; again, and &lt;code&gt;something like&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;&lt;br&gt;
would be &lt;code&gt;returned&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;1 &lt;span class="nb"&gt;history&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Manually removing the contents of .bash_history
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;history&lt;/code&gt; stores the &lt;code&gt;commands&lt;/code&gt; run in &lt;code&gt;Terminal&lt;/code&gt; in a &lt;code&gt;file&lt;/code&gt; called&lt;br&gt;
&lt;code&gt;.bash_history&lt;/code&gt;, which is &lt;code&gt;located&lt;/code&gt; in a &lt;code&gt;user&lt;/code&gt;'s home &lt;code&gt;directory&lt;/code&gt;. If, after&lt;br&gt;
running &lt;code&gt;history -c&lt;/code&gt;, I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;double check&lt;/code&gt; if &lt;code&gt;all&lt;/code&gt; my &lt;code&gt;history&lt;/code&gt; has&lt;br&gt;
actually &lt;code&gt;been removed&lt;/code&gt;, I can run &lt;code&gt;vim .bash_history&lt;/code&gt; to &lt;code&gt;open up&lt;/code&gt; the &lt;code&gt;file&lt;/code&gt;&lt;br&gt;
in &lt;code&gt;Vim&lt;/code&gt;. And &lt;code&gt;something like&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; would &lt;code&gt;appear&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# The contents of .bash_history contained 426 lines. I am truncating it.&lt;/span&gt;
...
which diff
diff &lt;span class="nt"&gt;-s&lt;/span&gt; secret_message.txt decrypted_super_secret.txt
&lt;span class="nb"&gt;sha512sum &lt;/span&gt;secret_message.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;history -c&lt;/code&gt; only &lt;code&gt;clears&lt;/code&gt; the &lt;code&gt;history&lt;/code&gt; of a &lt;code&gt;specific&lt;/code&gt; Terminal &lt;code&gt;session&lt;/code&gt;, but&lt;br&gt;
&lt;code&gt;not&lt;/code&gt; the &lt;code&gt;entire contents&lt;/code&gt; of &lt;code&gt;.bash_history&lt;/code&gt; itself. Some articles state that&lt;br&gt;
it &lt;code&gt;completely removes&lt;/code&gt; all your &lt;code&gt;history&lt;/code&gt;, but &lt;code&gt;it&lt;/code&gt; does &lt;code&gt;not&lt;/code&gt;. After running&lt;br&gt;
&lt;code&gt;history -c&lt;/code&gt;, your &lt;code&gt;.bash_history&lt;/code&gt; still &lt;code&gt;contains&lt;/code&gt; the &lt;code&gt;history&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;commands&lt;/code&gt; you &lt;code&gt;have run&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If I &lt;code&gt;wanted&lt;/code&gt; to &lt;code&gt;manually remove&lt;/code&gt; the &lt;code&gt;contents&lt;/code&gt; of &lt;code&gt;.bash_history&lt;/code&gt;, I would&lt;br&gt;
&lt;code&gt;have&lt;/code&gt; to &lt;code&gt;open&lt;/code&gt; the &lt;code&gt;file&lt;/code&gt; and &lt;code&gt;manually delete&lt;/code&gt; the &lt;code&gt;contents&lt;/code&gt; of the &lt;code&gt;file&lt;/code&gt;.&lt;br&gt;
I could &lt;code&gt;open&lt;/code&gt; the &lt;code&gt;file&lt;/code&gt; using &lt;code&gt;open .bash_history&lt;/code&gt; inside my &lt;code&gt;home directory&lt;/code&gt;&lt;br&gt;
where the &lt;code&gt;file resides&lt;/code&gt;, &lt;code&gt;Control + A&lt;/code&gt; the &lt;code&gt;file contents&lt;/code&gt;, and then &lt;code&gt;hit&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;delete&lt;/code&gt; key and &lt;code&gt;remove&lt;/code&gt; the &lt;code&gt;file contents&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I could &lt;code&gt;also&lt;/code&gt; run &lt;code&gt;vim .bash_history&lt;/code&gt; and be &lt;code&gt;taken&lt;/code&gt; into the &lt;code&gt;Vim interface&lt;/code&gt;.&lt;br&gt;
There, I would &lt;code&gt;do&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# First I go into Vim normal mode by hitting the `esc` key&lt;/span&gt;
&lt;span class="c"&gt;# Next, I enter command mode by hitting Shift key + : (colon)&lt;/span&gt;
&lt;span class="c"&gt;# To Select All, I hit the Shift Key + % (5 key) after the colon (:)&lt;/span&gt;
&lt;span class="c"&gt;# to delete everything, I then hit the D key after %&lt;/span&gt;
&lt;span class="c"&gt;# To save my changes, I hit the esc key followed by Shift key + : (colon) and then the X key. This saves my changes and takes me out of Vim.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;If&lt;/code&gt;, &lt;code&gt;after deleting&lt;/code&gt; the &lt;code&gt;entire contents&lt;/code&gt; of &lt;code&gt;.bash_history&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;subsequent commands&lt;/code&gt; are &lt;code&gt;not saved&lt;/code&gt; to &lt;code&gt;.bash_history&lt;/code&gt; (it remains empty),&lt;br&gt;
&lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;history&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .bash_history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;open&lt;/code&gt; up &lt;code&gt;.bash_history&lt;/code&gt;, and you &lt;code&gt;should see&lt;/code&gt; your stored &lt;code&gt;Terminal&lt;/code&gt;&lt;br&gt;
history &lt;code&gt;reappear&lt;/code&gt;. That is &lt;code&gt;because&lt;/code&gt; you &lt;code&gt;have&lt;/code&gt; redirected &lt;code&gt;history&lt;/code&gt; as&lt;br&gt;
&lt;code&gt;stdout&lt;/code&gt; to the &lt;code&gt;.bash_history&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, to doubly &lt;code&gt;make sure&lt;/code&gt; that &lt;code&gt;everything&lt;/code&gt; is &lt;code&gt;working&lt;/code&gt; as it &lt;code&gt;should&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;run&lt;/code&gt; a &lt;code&gt;few commands&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; re-open &lt;code&gt;.bash_history&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;see&lt;/code&gt; if those &lt;code&gt;commands&lt;/code&gt; are &lt;code&gt;being saved&lt;/code&gt; to &lt;code&gt;.bash_history&lt;/code&gt;. &lt;code&gt;When&lt;/code&gt; I&lt;br&gt;
&lt;code&gt;did this&lt;/code&gt; and re-opened &lt;code&gt;.bash_history&lt;/code&gt;, I &lt;code&gt;saw&lt;/code&gt; that &lt;code&gt;new commands&lt;/code&gt; were &lt;code&gt;not&lt;/code&gt;&lt;br&gt;
being &lt;code&gt;added&lt;/code&gt; to &lt;code&gt;.bash_history&lt;/code&gt;. &lt;code&gt;Even when&lt;/code&gt; I quit &lt;code&gt;Terminal&lt;/code&gt; and &lt;code&gt;started&lt;/code&gt; a&lt;br&gt;
&lt;code&gt;new session&lt;/code&gt;. So I &lt;code&gt;had&lt;/code&gt; to &lt;code&gt;do&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; to &lt;code&gt;do&lt;/code&gt; a &lt;code&gt;history&lt;/code&gt; "reset":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# I ran this inside my home directory /home/maria where my .bash_history resides&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; .bash_history
&lt;span class="nb"&gt;touch&lt;/span&gt; .bash_history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Once&lt;/code&gt; I re-created the &lt;code&gt;.bash_history&lt;/code&gt; file, I &lt;code&gt;saw&lt;/code&gt; that &lt;code&gt;Terminal history&lt;/code&gt;&lt;br&gt;
was &lt;code&gt;saved&lt;/code&gt; to &lt;code&gt;.bash_history&lt;/code&gt;, but &lt;code&gt;commands&lt;/code&gt; from a &lt;code&gt;Terminal&lt;/code&gt; session would&lt;br&gt;
&lt;code&gt;save&lt;/code&gt; to the &lt;code&gt;.bash_history&lt;/code&gt; file &lt;code&gt;when&lt;/code&gt; I would &lt;code&gt;exit&lt;/code&gt; out of a &lt;code&gt;Terminal&lt;/code&gt;&lt;br&gt;
session and &lt;code&gt;start&lt;/code&gt; a &lt;code&gt;new one&lt;/code&gt;. &lt;code&gt;But&lt;/code&gt; it &lt;code&gt;worked&lt;/code&gt; just &lt;code&gt;fine&lt;/code&gt; and as&lt;br&gt;
&lt;code&gt;expected&lt;/code&gt;!&lt;/p&gt;
&lt;h3&gt;
  
  
  Clearing .bash_history using the echo command
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;In order&lt;/code&gt; to &lt;code&gt;remove&lt;/code&gt; to &lt;code&gt;complete contents&lt;/code&gt; of the &lt;code&gt;~/.bash_history&lt;/code&gt; file, I&lt;br&gt;
&lt;code&gt;ran&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# I did not have to add ~/ in front of .bash_history because I ran the command inside my home directory&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .bash_history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;when&lt;/code&gt; I &lt;code&gt;opened&lt;/code&gt; up &lt;code&gt;.bash_history&lt;/code&gt; using &lt;code&gt;open .bash_history&lt;/code&gt;, the &lt;code&gt;file&lt;/code&gt;&lt;br&gt;
was &lt;code&gt;completely empty&lt;/code&gt;. This is the &lt;code&gt;ONLY command&lt;/code&gt; that &lt;code&gt;successfully removed&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;contents&lt;/code&gt; of my &lt;code&gt;.bash_history&lt;/code&gt; file!&lt;/p&gt;

&lt;h2&gt;
  
  
  bash history, privacy and security
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Clearing&lt;/code&gt; one's &lt;code&gt;bash history&lt;/code&gt; is not &lt;code&gt;just about&lt;/code&gt; keeping things &lt;code&gt;"clean"&lt;/code&gt;.&lt;br&gt;
it's &lt;code&gt;also&lt;/code&gt; about &lt;code&gt;safeguarding&lt;/code&gt; one's &lt;code&gt;privacy&lt;/code&gt; and &lt;code&gt;security&lt;/code&gt;. By &lt;code&gt;clearing&lt;/code&gt;&lt;br&gt;
our &lt;code&gt;bash history&lt;/code&gt; on a &lt;code&gt;regular basis&lt;/code&gt;, we can &lt;code&gt;help&lt;/code&gt; protect&lt;br&gt;
&lt;code&gt;sensitive information&lt;/code&gt; that &lt;code&gt;we&lt;/code&gt; may have &lt;code&gt;used&lt;/code&gt; in a &lt;code&gt;command&lt;/code&gt;, &lt;code&gt;such&lt;/code&gt; as&lt;br&gt;
&lt;code&gt;passwords&lt;/code&gt; or other &lt;code&gt;confidential data&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://opensource.com/article/18/6/history-command" rel="noopener noreferrer"&gt;How to use the history command in Linux&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;by Steve Morris, opensource.com&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.warp.dev/terminus/select-all-in-vim-vi" rel="noopener noreferrer"&gt;Select all in Vim / Vi&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;warp.dev&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://ioflood.com/blog/clear-bash-history/" rel="noopener noreferrer"&gt;Clear Bash History: Bash Shell and Command Line Guide&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;I/O Flood&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.geeksforgeeks.org/how-to-clear-the-terminal-history-in-linux/" rel="noopener noreferrer"&gt;How to Clear the Terminal History in Linux&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;Geeks for Geeks&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>commandline</category>
      <category>linux</category>
      <category>terminalhistory</category>
      <category>vim</category>
    </item>
    <item>
      <title>Setting up and using the mutt email client in Linux</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Thu, 15 Aug 2024 13:41:29 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/setting-up-and-using-the-mutt-email-client-in-linux-2ngh</link>
      <guid>https://dev.to/letsbsocial1/setting-up-and-using-the-mutt-email-client-in-linux-2ngh</guid>
      <description>&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/setting-up-and-using-the-mutt-email-client-in-linux" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  What is mutt?
&lt;/li&gt;
&lt;li&gt;  Installing mutt
&lt;/li&gt;
&lt;li&gt;  Sending an email locally to another user which contains an attachment
&lt;/li&gt;
&lt;li&gt;  Other user receives email and saves email attachment locally
&lt;/li&gt;
&lt;li&gt;  Asymmetric encryption and decryption series
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is mutt?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;mutt&lt;/code&gt; is a &lt;code&gt;powerful&lt;/code&gt; Command Line &lt;code&gt;email client&lt;/code&gt; that &lt;code&gt;sends&lt;/code&gt; and &lt;code&gt;receives&lt;/code&gt;&lt;br&gt;
emails via &lt;code&gt;Terminal&lt;/code&gt;. I &lt;code&gt;use&lt;/code&gt; it &lt;code&gt;in addition&lt;/code&gt; to &lt;code&gt;mailx&lt;/code&gt;, because unlike&lt;br&gt;
&lt;code&gt;mailx&lt;/code&gt;, it is &lt;code&gt;able&lt;/code&gt; to &lt;code&gt;send&lt;/code&gt; real &lt;code&gt;email attachments&lt;/code&gt; as &lt;code&gt;well&lt;/code&gt; as &lt;code&gt;save&lt;/code&gt;&lt;br&gt;
those &lt;code&gt;attachments&lt;/code&gt; on a &lt;code&gt;user&lt;/code&gt;'s &lt;code&gt;local machine&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mutt&lt;/code&gt; supports &lt;code&gt;MIME&lt;/code&gt;, &lt;code&gt;GPG&lt;/code&gt;, &lt;code&gt;PGP&lt;/code&gt;, and &lt;code&gt;threading&lt;/code&gt;, making it a&lt;br&gt;
&lt;code&gt;powerful tool&lt;/code&gt; for &lt;code&gt;managing emails&lt;/code&gt; directly from the &lt;code&gt;Linux&lt;/code&gt; Command Line.&lt;br&gt;
&lt;code&gt;mutt&lt;/code&gt; also allows &lt;code&gt;system administrators&lt;/code&gt; to &lt;code&gt;automate&lt;/code&gt; and &lt;code&gt;streamline&lt;/code&gt; their&lt;br&gt;
&lt;code&gt;workflows&lt;/code&gt; with &lt;code&gt;automated notifications&lt;/code&gt;. &lt;code&gt;Email&lt;/code&gt; plays a &lt;code&gt;critical role&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;system security&lt;/code&gt; and can be &lt;code&gt;used&lt;/code&gt; to deliver &lt;code&gt;security alerts&lt;/code&gt;, &lt;code&gt;confirm&lt;/code&gt; user&lt;br&gt;
&lt;code&gt;actions&lt;/code&gt;, and even &lt;code&gt;recover&lt;/code&gt; lost &lt;code&gt;passwords&lt;/code&gt;. By &lt;code&gt;properly&lt;/code&gt; managing &lt;code&gt;emails&lt;/code&gt;&lt;br&gt;
using &lt;code&gt;mutt&lt;/code&gt;, we can &lt;code&gt;enhance&lt;/code&gt; the &lt;code&gt;security&lt;/code&gt; of our &lt;code&gt;Linux&lt;/code&gt; system.&lt;/p&gt;

&lt;p&gt;There are &lt;code&gt;many&lt;/code&gt; other &lt;code&gt;uses&lt;/code&gt; for &lt;code&gt;mutt&lt;/code&gt;. To &lt;code&gt;learn more&lt;/code&gt;, please &lt;code&gt;visit&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;article&lt;/code&gt; entitled &lt;a href="https://ioflood.com/blog/install-mutt-command-linux/" rel="noopener noreferrer"&gt;Mastering Mutt: How to Install Mutt Command in Linux&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing mutt
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;One thing to note&lt;/strong&gt;: &lt;code&gt;in&lt;/code&gt; whichever &lt;code&gt;directory&lt;/code&gt; we initialize &lt;code&gt;mutt&lt;/code&gt; is the&lt;br&gt;
&lt;code&gt;default directory&lt;/code&gt; where &lt;code&gt;email attachments&lt;/code&gt; are &lt;code&gt;saved&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mutt&lt;/code&gt; is not &lt;code&gt;native&lt;/code&gt; to &lt;code&gt;Linux&lt;/code&gt;. We &lt;code&gt;have&lt;/code&gt; to &lt;code&gt;install&lt;/code&gt; it. I &lt;code&gt;am&lt;/code&gt; on the&lt;br&gt;
&lt;code&gt;Ubuntu&lt;/code&gt; derivative &lt;code&gt;Linux Mint&lt;/code&gt;, &lt;code&gt;so&lt;/code&gt; I can &lt;code&gt;install&lt;/code&gt; it &lt;code&gt;with&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;following command&lt;/code&gt;(&lt;code&gt;s&lt;/code&gt;):&lt;/p&gt;

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

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mutt


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

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;Since&lt;/code&gt; I only &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;use&lt;/code&gt; it &lt;code&gt;locally&lt;/code&gt; because I have &lt;code&gt;Linux Mint&lt;/code&gt;&lt;br&gt;
installed with &lt;code&gt;VirtualBox&lt;/code&gt; and &lt;code&gt;only have&lt;/code&gt; so much &lt;code&gt;virtual&lt;/code&gt; (and &lt;code&gt;hard&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;disk space&lt;/code&gt; to &lt;code&gt;work with&lt;/code&gt;, I &lt;code&gt;decided&lt;/code&gt; to &lt;code&gt;pass up&lt;/code&gt; on &lt;code&gt;using&lt;/code&gt; an &lt;code&gt;external&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;gmail&lt;/code&gt;) &lt;code&gt;email address&lt;/code&gt; to &lt;code&gt;send&lt;/code&gt; and &lt;code&gt;receive&lt;/code&gt; emails. My &lt;code&gt;main reason&lt;/code&gt; for&lt;br&gt;
&lt;code&gt;wanting&lt;/code&gt; to use &lt;code&gt;mutt&lt;/code&gt; was &lt;code&gt;because&lt;/code&gt; of its &lt;code&gt;ability&lt;/code&gt; to send&lt;br&gt;
&lt;code&gt;email attachments&lt;/code&gt; and save &lt;code&gt;received attachments&lt;/code&gt; locally. &lt;code&gt;There are&lt;/code&gt; many&lt;br&gt;
other &lt;code&gt;powerful features&lt;/code&gt; available, but &lt;code&gt;this&lt;/code&gt; is the &lt;code&gt;feature&lt;/code&gt; that &lt;code&gt;grabbed&lt;/code&gt;&lt;br&gt;
my &lt;code&gt;attention&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sending an email locally to another user which contains an attachment
&lt;/h2&gt;

&lt;p&gt;I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;send&lt;/code&gt; a &lt;code&gt;file&lt;/code&gt; to &lt;code&gt;another user&lt;/code&gt; on the &lt;code&gt;local network&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt;&lt;br&gt;
using &lt;code&gt;mutt&lt;/code&gt;. I &lt;code&gt;would&lt;/code&gt; take the &lt;code&gt;following steps&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, I would &lt;code&gt;cd&lt;/code&gt; into the &lt;code&gt;directory&lt;/code&gt; where I &lt;code&gt;first&lt;/code&gt; initialized &lt;code&gt;mutt&lt;/code&gt;.
&lt;code&gt;In&lt;/code&gt; my &lt;code&gt;case&lt;/code&gt;, it was my &lt;code&gt;home directory&lt;/code&gt;, &lt;code&gt;/home/maria&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Next, I would &lt;code&gt;determine&lt;/code&gt; which email &lt;code&gt;attachment&lt;/code&gt; I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;send&lt;/code&gt; to the
&lt;code&gt;other user&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, I will &lt;code&gt;send&lt;/code&gt; a &lt;code&gt;text&lt;/code&gt; file called &lt;code&gt;email_attachment.txt&lt;/code&gt; to local user&lt;br&gt;
&lt;code&gt;magdala&lt;/code&gt;, which &lt;code&gt;contains&lt;/code&gt; the text&lt;br&gt;
&lt;code&gt;This is some dummy text for the mutt email attachment demo I am creating for my post entitled "Setting up and using the mutt email client in Linux."&lt;/code&gt;&lt;br&gt;
I run the following command in Terminal:&lt;/p&gt;

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

mutt &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"Sending Magdala the email_attachment.txt"&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; email_attachment.txt &lt;span class="nt"&gt;--&lt;/span&gt; magdala@maria-VirtualBox


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

&lt;/div&gt;

&lt;p&gt;This &lt;code&gt;opens up&lt;/code&gt; the &lt;code&gt;mutt&lt;/code&gt; interface in the nano text editor. it looks&lt;br&gt;
&lt;code&gt;something like&lt;/code&gt; the &lt;code&gt;following&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%2F1ew0vs2zd89ze5zkb8py.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%2F1ew0vs2zd89ze5zkb8py.png" alt="Screenshot of the "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Then&lt;/code&gt; I &lt;code&gt;hit&lt;/code&gt; the &lt;code&gt;Return&lt;/code&gt; key, and &lt;code&gt;something like&lt;/code&gt; the following &lt;code&gt;appears&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%2Fhxatxaatbdx4i92eut0j.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%2Fhxatxaatbdx4i92eut0j.png" alt="Screenshot of the email subject line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, I hit &lt;code&gt;Return&lt;/code&gt; and the &lt;code&gt;following appears&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%2F15md800d170d0buiguor.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%2F15md800d170d0buiguor.png" alt="Screenshot of the body of the email"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;next part&lt;/code&gt; is &lt;code&gt;very important&lt;/code&gt; to follow &lt;code&gt;correctly&lt;/code&gt;. &lt;code&gt;After&lt;/code&gt; I have&lt;br&gt;
&lt;code&gt;completed&lt;/code&gt; the &lt;code&gt;body&lt;/code&gt; of my &lt;code&gt;email&lt;/code&gt;, I hit &lt;code&gt;Control&lt;/code&gt; + &lt;code&gt;O&lt;/code&gt; (&lt;code&gt;not zero&lt;/code&gt;) key and&lt;br&gt;
then the &lt;code&gt;Return&lt;/code&gt; key, and &lt;code&gt;then&lt;/code&gt; the &lt;code&gt;following appears&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%2Fc1t7tvvexosqcluziy65.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%2Fc1t7tvvexosqcluziy65.png" alt="Screenshot of sending an email to user magdala"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;As shown&lt;/code&gt; at the &lt;code&gt;top&lt;/code&gt; of the &lt;code&gt;window&lt;/code&gt;, I &lt;code&gt;hit&lt;/code&gt; the &lt;code&gt;y&lt;/code&gt; key to actually &lt;code&gt;send&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;email&lt;/code&gt; to &lt;code&gt;user magdala&lt;/code&gt;. &lt;code&gt;Then&lt;/code&gt;, at the &lt;code&gt;bottom&lt;/code&gt; of the &lt;code&gt;window&lt;/code&gt;, "Mail&lt;br&gt;
sent" appears, and &lt;code&gt;then&lt;/code&gt; I am &lt;code&gt;taken back&lt;/code&gt; to the &lt;code&gt;Terminal&lt;/code&gt; command &lt;code&gt;prompt&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other user receives email and saves email attachment locally
&lt;/h2&gt;

&lt;p&gt;Next, &lt;code&gt;user&lt;/code&gt; magdala &lt;code&gt;opens&lt;/code&gt; her &lt;code&gt;emails&lt;/code&gt; using the &lt;code&gt;mutt&lt;/code&gt; command, and&lt;br&gt;
&lt;code&gt;something like&lt;/code&gt; the following &lt;code&gt;appears&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%2Fr9ul8wnm8n9hly44u6iq.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%2Fr9ul8wnm8n9hly44u6iq.png" alt="Screenshot of user magdala's email inbox"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt; magdala &lt;code&gt;makes sure&lt;/code&gt; to &lt;code&gt;select&lt;/code&gt; the &lt;code&gt;email&lt;/code&gt; which &lt;code&gt;contains&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;attachment&lt;/code&gt; she &lt;code&gt;wants&lt;/code&gt; to &lt;code&gt;save&lt;/code&gt; to her &lt;code&gt;local machine&lt;/code&gt; using the &lt;code&gt;Up&lt;/code&gt; or&lt;br&gt;
&lt;code&gt;Down&lt;/code&gt; arrow &lt;code&gt;key&lt;/code&gt;, and &lt;code&gt;then&lt;/code&gt; she &lt;code&gt;hits&lt;/code&gt; the &lt;code&gt;V&lt;/code&gt; key. This &lt;code&gt;results&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;something like&lt;/code&gt; the &lt;code&gt;following&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%2Fgahkaclpxr92cqa30vb8.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%2Fgahkaclpxr92cqa30vb8.png" alt="Screenshot of attachment saved"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt; magdala &lt;code&gt;hits&lt;/code&gt; the &lt;code&gt;S&lt;/code&gt; key, and &lt;code&gt;that&lt;/code&gt; is &lt;code&gt;when&lt;/code&gt; the text&lt;br&gt;
&lt;code&gt;"Save to file: email_attachment.txt"&lt;/code&gt; appears. And &lt;code&gt;then&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;&lt;br&gt;
appears &lt;code&gt;after that&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%2F4jjeldkirjqxq9r6tbmh.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%2F4jjeldkirjqxq9r6tbmh.png" alt="Screenshot of user magdala saving attachment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, &lt;code&gt;user&lt;/code&gt; magdala &lt;code&gt;hits&lt;/code&gt; the &lt;code&gt;Q&lt;/code&gt; key, and is &lt;code&gt;taken back&lt;/code&gt; to the &lt;code&gt;Terminal&lt;/code&gt;&lt;br&gt;
command prompt:&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%2F9obho90wfvwdtsalf1pe.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%2F9obho90wfvwdtsalf1pe.png" alt="Screenshot of user magdala being taken back to Terminal command prompt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And &lt;code&gt;as&lt;/code&gt; also &lt;code&gt;shown&lt;/code&gt; in the &lt;code&gt;screenshot&lt;/code&gt;, &lt;code&gt;she&lt;/code&gt; then &lt;code&gt;runs&lt;/code&gt; the &lt;code&gt;ls&lt;/code&gt; command to&lt;br&gt;
&lt;code&gt;make sure&lt;/code&gt; that the &lt;code&gt;email_attachment.txt&lt;/code&gt; file has been &lt;code&gt;saved&lt;/code&gt; to her &lt;code&gt;home&lt;/code&gt;&lt;br&gt;
directory. And it was!&lt;/p&gt;

&lt;p&gt;We &lt;code&gt;have&lt;/code&gt; now &lt;code&gt;covered&lt;/code&gt; the &lt;code&gt;basics&lt;/code&gt; of &lt;code&gt;sending&lt;/code&gt;, &lt;code&gt;receiving&lt;/code&gt;, and &lt;code&gt;saving&lt;/code&gt;&lt;br&gt;
email &lt;code&gt;attachments&lt;/code&gt; using &lt;code&gt;mutt&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Asymmetric encryption and decryption series
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/making-and-verifying-digital-signatures-using-gpg-in-linux"&gt;Making and verifying digital signatures using GPG in Linux&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/making-and-verifying-a-detached-signature-using-a-pgp-key-pair-in-linux"&gt;Making and verifying a detached signature using a PGP key pair in Linux&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/making-and-verifying-a-cleartext-digital-signature-using-a-pgp-key-pair-in-linux"&gt;Making and verifying a clear text signature using a PGP key pair in Linux&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/using-a-specific-pgp-key-pair-for-digital-signing"&gt;Using a specific PGP key pair for digital signing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://localhost:3000/blog/exchanging-keys-using-a-pgp-key-pair" rel="noopener noreferrer"&gt;Exchanging public keys using a PGP key pair&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://localhost:3000/blog/setting-up-and-using-the-mutt-email-client-in-linux" rel="noopener noreferrer"&gt;Setting up and using the mutt email client in Linux&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>commandline</category>
      <category>linux</category>
      <category>muttemailclient</category>
      <category>emailattachment</category>
    </item>
    <item>
      <title>Cron job that creates backups of a directory in Linux</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Thu, 08 Aug 2024 03:26:00 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/cron-job-that-creates-backups-of-a-directory-in-linux-277n</link>
      <guid>https://dev.to/letsbsocial1/cron-job-that-creates-backups-of-a-directory-in-linux-277n</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/@mikhail-nilov/" rel="noopener noreferrer"&gt;Mikhail Nilov&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/photo/an-exhausted-woman-reading-documents-8297240/" rel="noopener noreferrer"&gt;pexels.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/cron-job-that-creates-backups-of-a-directory-in-linux" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I &lt;code&gt;just&lt;/code&gt; finished &lt;code&gt;creating&lt;/code&gt; a &lt;code&gt;cron job&lt;/code&gt; that &lt;code&gt;backs up&lt;/code&gt; my &lt;code&gt;Desktop&lt;/code&gt; directory &lt;code&gt;daily&lt;/code&gt; in my &lt;code&gt;Linux Mint OS&lt;/code&gt;. The &lt;code&gt;name&lt;/code&gt; of the &lt;code&gt;backup&lt;/code&gt; includes the &lt;code&gt;date&lt;/code&gt; and &lt;code&gt;time&lt;/code&gt; of the backup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Creating the desktop-backup directory and the desktop_backup.sh shell script
&lt;/li&gt;
&lt;li&gt;  Creating the delete_backups.sh shell script
&lt;/li&gt;
&lt;li&gt;  Adding the shell scripts to the crontab file
&lt;/li&gt;
&lt;li&gt;  Related Resources
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating the desktop-backup directory and the desktop_backup.sh shell script
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;First&lt;/code&gt;, I &lt;code&gt;created&lt;/code&gt; a &lt;code&gt;backup directory&lt;/code&gt; called &lt;code&gt;desktop-backups&lt;/code&gt; in my &lt;code&gt;home directory&lt;/code&gt; (&lt;code&gt;/home/maria&lt;/code&gt;), and then I &lt;code&gt;created&lt;/code&gt; a &lt;code&gt;shell script&lt;/code&gt; called &lt;code&gt;desktop_backup.sh&lt;/code&gt; located in &lt;code&gt;/home/maria/Desktop/cron-job-scripts/&lt;/code&gt;. And then I &lt;code&gt;added&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nv"&gt;source_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/maria/Desktop"&lt;/span&gt;
&lt;span class="nv"&gt;backup_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/maria/desktop-backup"&lt;/span&gt;
&lt;span class="nv"&gt;timestamp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d%H%M%S&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;backup_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"backup_&lt;/span&gt;&lt;span class="nv"&gt;$timestamp&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz"&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-czvf&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$backup_dir&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$backup_file&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$source_dir&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;first line&lt;/code&gt; in the &lt;code&gt;script&lt;/code&gt; is &lt;code&gt;very important&lt;/code&gt;. &lt;code&gt;#!&lt;/code&gt; is referred to as &lt;code&gt;shebang&lt;/code&gt;, and it &lt;code&gt;tells&lt;/code&gt; the &lt;code&gt;system&lt;/code&gt; which &lt;code&gt;interpreter/command&lt;/code&gt; to &lt;code&gt;use&lt;/code&gt; to &lt;code&gt;execute&lt;/code&gt; the &lt;code&gt;commands&lt;/code&gt; written &lt;code&gt;inside&lt;/code&gt; the &lt;code&gt;scripts&lt;/code&gt;. The &lt;code&gt;interpreter&lt;/code&gt; here is &lt;code&gt;bash&lt;/code&gt;, and the &lt;code&gt;path&lt;/code&gt; to it is &lt;code&gt;/bin/bash&lt;/code&gt;, which follows &lt;code&gt;#!&lt;/code&gt;. &lt;code&gt;#!&lt;/code&gt; is&lt;br&gt;
&lt;code&gt;interpreted&lt;/code&gt; by the &lt;a href="https://linux.die.net/man/2/execve" rel="noopener noreferrer"&gt;execve(2)&lt;/a&gt; system call (which &lt;code&gt;executes&lt;/code&gt; programs).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Next&lt;/code&gt;, and &lt;code&gt;most important&lt;/code&gt;, is to &lt;code&gt;change&lt;/code&gt; file &lt;code&gt;permissions&lt;/code&gt; for the &lt;code&gt;desktop_backup.sh&lt;/code&gt; file. &lt;code&gt;By default&lt;/code&gt;, a &lt;code&gt;newly&lt;/code&gt; created &lt;code&gt;file&lt;/code&gt; does &lt;code&gt;not&lt;/code&gt; contain &lt;code&gt;execute permissions&lt;/code&gt;, which is &lt;code&gt;necessary&lt;/code&gt; for &lt;code&gt;executing&lt;/code&gt; shell script &lt;code&gt;files&lt;/code&gt;. So &lt;code&gt;next&lt;/code&gt;, I &lt;code&gt;have&lt;/code&gt; to &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt; to add&lt;br&gt;
&lt;code&gt;execute permissions&lt;/code&gt; to &lt;code&gt;desktop_backup.sh&lt;/code&gt; from &lt;code&gt;inside&lt;/code&gt; the &lt;code&gt;directory&lt;/code&gt; where it &lt;code&gt;resides&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x desktop_backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;chmod&lt;/code&gt; stands for &lt;code&gt;change mode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then I &lt;code&gt;check&lt;/code&gt; to &lt;code&gt;make sure&lt;/code&gt; that &lt;code&gt;execute permissions&lt;/code&gt; were &lt;code&gt;added&lt;/code&gt; to &lt;code&gt;desktop_backup.sh&lt;/code&gt; by running the &lt;code&gt;ls -l&lt;/code&gt; command in &lt;code&gt;Terminal&lt;/code&gt;, and the &lt;code&gt;following&lt;/code&gt; is &lt;code&gt;returned&lt;/code&gt; as a &lt;code&gt;result&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-rwxrwxr-x&lt;/span&gt; 1 maria maria 208 Aug 7 13:10 desktop_backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When I &lt;code&gt;create&lt;/code&gt; the &lt;code&gt;delete_backups.sh&lt;/code&gt; file (coming up), I will have to &lt;code&gt;change permissions&lt;/code&gt; in the &lt;code&gt;same way&lt;/code&gt; as well.&lt;/p&gt;

&lt;p&gt;If I run &lt;code&gt;date +%Y%m%d%H%M%S&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;, &lt;code&gt;something like&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; is &lt;code&gt;returned&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;202400807161028
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;202400807&lt;/code&gt; is the &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;month&lt;/code&gt; and &lt;code&gt;day&lt;/code&gt;. &lt;code&gt;161028&lt;/code&gt; is the &lt;code&gt;hour&lt;/code&gt;, &lt;code&gt;minutes&lt;/code&gt;, and &lt;code&gt;seconds&lt;/code&gt; in &lt;code&gt;24 hour format&lt;/code&gt;. &lt;code&gt;After&lt;/code&gt; I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;shell script&lt;/code&gt;, &lt;code&gt;something like&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; appears in the &lt;code&gt;desktop-backup&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;backup_202400807161028.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I am &lt;code&gt;inside&lt;/code&gt; the &lt;code&gt;cron-job-scripts&lt;/code&gt; directory where &lt;code&gt;desktop_backup.sh&lt;/code&gt;&lt;br&gt;
resides, I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./desktop_backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which is &lt;code&gt;how&lt;/code&gt; a &lt;code&gt;shell script&lt;/code&gt; is &lt;code&gt;run&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;. If I am &lt;code&gt;not inside&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;directory&lt;/code&gt; which &lt;code&gt;contains&lt;/code&gt; the &lt;code&gt;shell script&lt;/code&gt;, then I have to &lt;code&gt;add&lt;/code&gt; the &lt;code&gt;path&lt;/code&gt;&lt;br&gt;
to it. &lt;code&gt;./&lt;/code&gt; means &lt;code&gt;that&lt;/code&gt; it &lt;code&gt;is&lt;/code&gt; in the &lt;code&gt;current directory&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating the delete_backups.sh shell script
&lt;/h2&gt;

&lt;p&gt;But &lt;code&gt;after&lt;/code&gt; a &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;a lot&lt;/code&gt; of &lt;code&gt;backups&lt;/code&gt; will &lt;code&gt;take up&lt;/code&gt; the &lt;code&gt;desktop-backup&lt;/code&gt;&lt;br&gt;
directory, and I probably would &lt;code&gt;want&lt;/code&gt; to remove &lt;code&gt;older backups&lt;/code&gt;. I can &lt;code&gt;create&lt;/code&gt;&lt;br&gt;
a &lt;code&gt;separate script&lt;/code&gt; for &lt;code&gt;that&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I could &lt;code&gt;create&lt;/code&gt; another &lt;code&gt;shell script&lt;/code&gt; to &lt;code&gt;remove&lt;/code&gt; older &lt;code&gt;backups&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

find /home/maria/desktop-backup/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-mtime&lt;/span&gt; +1 &lt;span class="nt"&gt;-delete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;find&lt;/code&gt; command &lt;code&gt;looks&lt;/code&gt; for &lt;code&gt;files&lt;/code&gt; in a &lt;code&gt;directory hierarchy&lt;/code&gt;. In the&lt;br&gt;
&lt;code&gt;script&lt;/code&gt; above, it is &lt;code&gt;searching&lt;/code&gt; for the &lt;code&gt;files&lt;/code&gt; located in&lt;br&gt;
&lt;code&gt;/home/maria/desktop-backup/&lt;/code&gt;, and the wildcard &lt;code&gt;*&lt;/code&gt; means &lt;code&gt;anything&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;any file&lt;/code&gt;) inside &lt;code&gt;/home/maria/desktop-backup/&lt;/code&gt;. &lt;code&gt;-type f&lt;/code&gt; means of&lt;br&gt;
&lt;code&gt;type file&lt;/code&gt;. &lt;code&gt;-mtime&lt;/code&gt; is &lt;code&gt;interpreted&lt;/code&gt; as the &lt;code&gt;number&lt;/code&gt; of &lt;code&gt;whole days&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;age&lt;/code&gt; of a &lt;code&gt;file&lt;/code&gt;. And &lt;code&gt;-mtime +n&lt;/code&gt; (in &lt;code&gt;this&lt;/code&gt; case &lt;code&gt;+1&lt;/code&gt;) means &lt;code&gt;greater than n&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;whole&lt;/code&gt;) days. &lt;code&gt;-delete&lt;/code&gt; deletes what is &lt;code&gt;inside&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;/home/maria/desktop-backup/&lt;/code&gt; directory.&lt;/p&gt;
&lt;h2&gt;
  
  
  Adding the shell scripts to the crontab file
&lt;/h2&gt;

&lt;p&gt;After I &lt;code&gt;created&lt;/code&gt; these &lt;code&gt;two&lt;/code&gt; shell &lt;code&gt;scripts&lt;/code&gt;, I &lt;code&gt;added&lt;/code&gt; them to my &lt;code&gt;crontab&lt;/code&gt;&lt;br&gt;
file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;First&lt;/code&gt;, I ran &lt;code&gt;crontab -e&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;. It &lt;code&gt;took&lt;/code&gt; me &lt;code&gt;into&lt;/code&gt; the &lt;code&gt;crontab&lt;/code&gt; file, where&lt;br&gt;
I &lt;code&gt;added&lt;/code&gt; my &lt;code&gt;cron jobs&lt;/code&gt;. Then I &lt;code&gt;added&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt; to the &lt;code&gt;bottom&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;file&lt;/code&gt; below all the &lt;code&gt;commented lines&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;00 06 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /home/maria/Desktop/cron-job-scripts/desktop_backup.sh
05 06 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /home/maria/Desktop/cron-job-scripts/delete_backups.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;meaning&lt;/code&gt; of the &lt;code&gt;first line&lt;/code&gt; is that the &lt;code&gt;cron job&lt;/code&gt; will &lt;code&gt;take place&lt;/code&gt; at&lt;br&gt;
&lt;code&gt;6am&lt;/code&gt; every &lt;code&gt;day&lt;/code&gt;. The &lt;code&gt;meaning&lt;/code&gt; of the &lt;code&gt;second&lt;/code&gt; cron job is that it will&lt;br&gt;
&lt;code&gt;take place&lt;/code&gt; at &lt;code&gt;6:05am&lt;/code&gt; every &lt;code&gt;day&lt;/code&gt;. The &lt;code&gt;*&lt;/code&gt; in the &lt;code&gt;day position&lt;/code&gt; which&lt;br&gt;
&lt;code&gt;follows&lt;/code&gt; the &lt;code&gt;hour position&lt;/code&gt;, &lt;code&gt;means&lt;/code&gt; every &lt;code&gt;day&lt;/code&gt;. The next &lt;code&gt;*&lt;/code&gt; to the &lt;code&gt;right&lt;/code&gt;&lt;br&gt;
is in the &lt;code&gt;month position&lt;/code&gt; and &lt;code&gt;means&lt;/code&gt; every &lt;code&gt;month&lt;/code&gt;. And the last &lt;code&gt;*&lt;/code&gt; (&lt;code&gt;to&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;right&lt;/code&gt;) which &lt;code&gt;represents&lt;/code&gt; the &lt;code&gt;day&lt;/code&gt; of the &lt;code&gt;week&lt;/code&gt;, means &lt;code&gt;every day&lt;/code&gt;of the&lt;br&gt;
&lt;code&gt;week&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Since&lt;/code&gt; I &lt;code&gt;just&lt;/code&gt; set &lt;code&gt;up&lt;/code&gt; this &lt;code&gt;cron job&lt;/code&gt; today, I will probably &lt;code&gt;not reap&lt;/code&gt; its&lt;br&gt;
&lt;code&gt;benefits&lt;/code&gt; until the &lt;code&gt;day&lt;/code&gt; after &lt;code&gt;tomorrow&lt;/code&gt;. I will &lt;code&gt;update&lt;/code&gt; this &lt;code&gt;post&lt;/code&gt; with&lt;br&gt;
the &lt;code&gt;results&lt;/code&gt; when the &lt;code&gt;contents&lt;/code&gt; of the &lt;code&gt;desktop-backup&lt;/code&gt; is &lt;code&gt;deleted&lt;/code&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/the-cron-daemon-in-linux-and-how-to-create-a-cron-job"&gt;The Cron daemon in Linux and how to create a cron job&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;mariadcampbell.com&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://phoenixnap.com/kb/set-up-cron-job-linux" rel="noopener noreferrer"&gt;How to Create and Set Up a Cron Job in Linux&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;phoenixNap&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/" rel="noopener noreferrer"&gt;How To Format Date For Display or Use In a Shell Script&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;by Vivek Gite, cyberciti.biz&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>crondaemon</category>
      <category>crontab</category>
      <category>linux</category>
      <category>taskautomation</category>
    </item>
    <item>
      <title>The lsblk command in Linux and what it does</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Tue, 30 Jul 2024 15:28:38 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/the-lsblk-command-in-linux-and-what-it-does-5ag6</link>
      <guid>https://dev.to/letsbsocial1/the-lsblk-command-in-linux-and-what-it-does-5ag6</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://unsplash.com/@iurte" rel="noopener noreferrer"&gt;Iker Urteaga&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://unsplash.com/photos/blue-building-block-lot-TL5Vy1IM-uA" rel="noopener noreferrer"&gt;unsplash.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/the-lsblk-command-in-linux-and-what-it-does" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  lsblk introduction
&lt;/li&gt;
&lt;li&gt;  What is the lsblk command and what does it do?
&lt;/li&gt;
&lt;li&gt;  Installing util-linux if your distro does not have it by default
&lt;/li&gt;
&lt;li&gt;  lsblk syntax
&lt;/li&gt;
&lt;li&gt;  Running the lsblk command
&lt;/li&gt;
&lt;li&gt;  Footnotes
&lt;/li&gt;
&lt;li&gt;  Related Resources
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  lsblk introduction
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;lsblk&lt;/code&gt; command comes as part of the &lt;code&gt;util-linux&lt;/code&gt; package, which is a&lt;br&gt;
&lt;code&gt;package&lt;/code&gt; comprised of &lt;code&gt;essential utilities&lt;/code&gt; for &lt;code&gt;Linux systems&lt;/code&gt;. It &lt;code&gt;provides&lt;/code&gt;&lt;br&gt;
a wide range of &lt;code&gt;functionality&lt;/code&gt; including &lt;code&gt;tools&lt;/code&gt; for &lt;code&gt;managing files&lt;/code&gt;, &lt;code&gt;disks&lt;/code&gt;,&lt;br&gt;
and &lt;code&gt;system resources&lt;/code&gt;. &lt;code&gt;util-linux&lt;/code&gt; comes installed with Linux Mint, for&lt;br&gt;
example. According to the Linux Mint community,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(&lt;code&gt;util-linux&lt;/code&gt;) contains a number of important utilities, most of which are&lt;br&gt;
oriented towards maintenance of your system. Some of the more important&lt;br&gt;
utilities included in this package allow you to view kernel messages, create&lt;br&gt;
new filesystems, view &lt;code&gt;block device information&lt;/code&gt;, interface with real time&lt;br&gt;
clock, etc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  What is the lsblk command and what does it do?
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;lsblk&lt;/code&gt; command stands for &lt;code&gt;list block devices&lt;/code&gt;, and it provides detailed&lt;br&gt;
information about &lt;code&gt;block devices&lt;/code&gt; such as &lt;code&gt;hard drives&lt;/code&gt;, &lt;code&gt;solid state drives&lt;/code&gt;,&lt;br&gt;
and other &lt;code&gt;storage related devices&lt;/code&gt; that are &lt;code&gt;connected&lt;/code&gt; to the &lt;code&gt;computer&lt;/code&gt;. It&lt;br&gt;
queries the &lt;a href="https://dev.to/blog/the-linux-filesystem-hierarchy"&gt;/sys virtual filesystem&lt;/a&gt; and&lt;br&gt;
&lt;code&gt;udev db&lt;/code&gt; &lt;strong&gt;[^1]&lt;/strong&gt; to &lt;code&gt;obtain&lt;/code&gt; the &lt;code&gt;information&lt;/code&gt; that it &lt;code&gt;displays&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Installing util-linux if your distro does not have it by default
&lt;/h2&gt;

&lt;p&gt;If by any chance you are not using &lt;code&gt;Linux Mint&lt;/code&gt;, or &lt;code&gt;Ubuntu&lt;/code&gt; or an&lt;br&gt;
&lt;code&gt;Ubuntu derivate&lt;/code&gt; for example, and your &lt;code&gt;Linux&lt;/code&gt; distro does not contain the&lt;br&gt;
&lt;code&gt;util-linux&lt;/code&gt; package, you can &lt;code&gt;install&lt;/code&gt; it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Debian/Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;util-linux
&lt;span class="c"&gt;# in Linux Mint, I have installed my packages doing sudo apt install packagename. But util-linus is already installed in Linux Mint anyway.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  lsblk syntax
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;syntax&lt;/code&gt; for the &lt;code&gt;lsblk&lt;/code&gt; command is the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk &lt;span class="o"&gt;[&lt;/span&gt;options] &lt;span class="o"&gt;[&lt;/span&gt;device]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;[options]&lt;/code&gt; refers to the &lt;code&gt;flags&lt;/code&gt; available to the &lt;code&gt;lsblk&lt;/code&gt; command. &lt;code&gt;[device]&lt;/code&gt;&lt;br&gt;
refers to the &lt;code&gt;specific&lt;/code&gt; block devices that we &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;list&lt;/code&gt;. If &lt;code&gt;no device&lt;/code&gt;&lt;br&gt;
is &lt;code&gt;specified&lt;/code&gt;, &lt;code&gt;lsblk&lt;/code&gt; will &lt;code&gt;list&lt;/code&gt; all &lt;code&gt;block devices&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running the lsblk command
&lt;/h2&gt;

&lt;p&gt;If I run &lt;code&gt;lsblk&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;, it &lt;code&gt;returns&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1M  0 part
├─sda2   8:2    0  513M  0 part /boot/efi
└─sda3   8:3    0 49.5G  0 part /
sr0     11:0    1 50.4M  0 rom  /media/maria/VBox_GAs_7.0.18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I &lt;code&gt;want&lt;/code&gt; to get &lt;code&gt;all block devices&lt;/code&gt; including &lt;code&gt;empty ones&lt;/code&gt;, I would &lt;code&gt;run&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Which&lt;/code&gt; for me &lt;code&gt;returns&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0    0B  0 loop
loop1    7:1    0    0B  0 loop
loop2    7:2    0    0B  0 loop
loop3    7:3    0    0B  0 loop
loop4    7:4    0    0B  0 loop
loop5    7:5    0    0B  0 loop
loop6    7:6    0    0B  0 loop
loop7    7:7    0    0B  0 loop
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1M  0 part
├─sda2   8:2    0  513M  0 part /boot/efi
└─sda3   8:3    0 49.5G  0 part /
sr0     11:0    1 50.4M  0 rom  /media/maria/VBox_GAs_7.0.18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;print out&lt;/code&gt; the &lt;code&gt;information&lt;/code&gt; in &lt;code&gt;list format&lt;/code&gt;, I would &lt;code&gt;run&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Which&lt;/code&gt; for me &lt;code&gt;returns&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda    8:0    0   50G  0 disk
sda1   8:1    0    1M  0 part
sda2   8:2    0  513M  0 part /boot/efi
sda3   8:3    0 49.5G  0 part /
sr0   11:0    1 50.4M  0 rom  /media/maria/VBox_GAs_7.0.18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now &lt;code&gt;devices&lt;/code&gt; are &lt;code&gt;listed&lt;/code&gt; without showing &lt;code&gt;which ones&lt;/code&gt; are &lt;code&gt;related&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;each other&lt;/code&gt; like &lt;code&gt;with&lt;/code&gt; the &lt;code&gt;lsblk&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;If I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following command&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For me, it &lt;code&gt;returns&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
/dev/sda      8:0    0   50G  0 disk
├─/dev/sda1   8:1    0    1M  0 part
├─/dev/sda2   8:2    0  513M  0 part /boot/efi
└─/dev/sda3   8:3    0 49.5G  0 part /
/dev/sr0     11:0    1 50.4M  0 rom  /media/maria/VBox_GAs_7.0.18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-p&lt;/code&gt; flag &lt;code&gt;produces output&lt;/code&gt; in &lt;code&gt;key value pairs&lt;/code&gt;. The &lt;code&gt;big difference&lt;/code&gt; here&lt;br&gt;
is the &lt;code&gt;absolute path&lt;/code&gt; to the &lt;code&gt;device&lt;/code&gt; as well as the &lt;code&gt;relationships&lt;/code&gt; between&lt;br&gt;
&lt;code&gt;related devices&lt;/code&gt; is also &lt;code&gt;displayed&lt;/code&gt;. To &lt;code&gt;learn more&lt;/code&gt; about &lt;code&gt;lsblk&lt;/code&gt;, run&lt;br&gt;
&lt;code&gt;man lsblk&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Footnotes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;[^1]&lt;/strong&gt;: &lt;a href="https://man7.org/linux/man-pages/man7/udev.7.html" rel="noopener noreferrer"&gt;udev (db)&lt;/a&gt; or&lt;br&gt;
&lt;code&gt;user /dev&lt;/code&gt; is systemd's device manager for the Linux kernel. It manages device&lt;br&gt;
nodes in /dev and handles all user space actions when adding or removing&lt;br&gt;
devices.&lt;/p&gt;

&lt;p&gt;According to &lt;code&gt;man udev&lt;/code&gt;, udev supplies the system software with device events,&lt;br&gt;
manages permissions of device nodes and may create additional symlinks in the&lt;br&gt;
/dev/ directory, or renames network interfaces. The kernel usually just assigns&lt;br&gt;
unpredictable device names based on the order of discovery. Meaningful symlinks&lt;br&gt;
or network device names provide a way to reliably identify devices based on&lt;br&gt;
their properties or current configuration.&lt;/p&gt;

&lt;p&gt;The udev daemon,&lt;br&gt;
&lt;a href="https://manpages.debian.org/bullseye/udev/systemd-udevd.service.8.en.html" rel="noopener noreferrer"&gt;systemd-udevd.service(8)&lt;/a&gt;,&lt;br&gt;
receives device uevents directly from the kernel whenever a device is added or&lt;br&gt;
removed from the system, or it changes its state. When udev receives a device&lt;br&gt;
event, it matches its configured set of rules against various device attributes&lt;br&gt;
to identify the device. Rules that match may provide additional device&lt;br&gt;
information to be stored in the udev database or to be used to create meaningful&lt;br&gt;
symlink names.&lt;/p&gt;

&lt;p&gt;All device information udev processes is stored in the udev database and sent&lt;br&gt;
out to possible event subscribers. Access to all stored data and the event&lt;br&gt;
sources is provided by the library libudev.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://dev.to/blog/the-linux-filesystem-hierarchy"&gt;The Linux Filesystem Hierarchy&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;mariadcampbell.com&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.geeksforgeeks.org/lsblk-command-in-linux-with-examples/" rel="noopener noreferrer"&gt;How to List All Block Devices in Linux | lsblk Command&lt;/a&gt;:
&lt;strong&gt;&lt;em&gt;Geeks for Geeks&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>linuxmint</category>
      <category>lsblk</category>
      <category>utillinux</category>
    </item>
    <item>
      <title>The script command in Linux and Unix (macOS)</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Sun, 28 Jul 2024 09:38:00 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/the-script-command-in-linux-and-unix-macos-bp1</link>
      <guid>https://dev.to/letsbsocial1/the-script-command-in-linux-and-unix-macos-bp1</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/@pixabay/" rel="noopener noreferrer"&gt;Pixabay&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/photo/white-paper-51159/" rel="noopener noreferrer"&gt;pexels.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/the-script-command-in-linux-and-unix-macos" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In my article &lt;a href="https://dev.to/blog/the-pipe-and-tee-commands-in-linux-and-unix-macos"&gt;The pipe (|) and tee commands in Linux and Unix (macOS)&lt;/a&gt;,&lt;br&gt;
I talk about how one can save the &lt;code&gt;stdout&lt;/code&gt; resulting from a command using &lt;code&gt;pipe&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;|&lt;/code&gt;) and &lt;code&gt;tee&lt;/code&gt;. In this article, I discuss the &lt;code&gt;Linux&lt;/code&gt; &lt;code&gt;script&lt;/code&gt; command. The&lt;br&gt;
&lt;code&gt;script&lt;/code&gt; command &lt;code&gt;records&lt;/code&gt; all &lt;code&gt;Terminal&lt;/code&gt; activity.&lt;/p&gt;
&lt;h2&gt;
  
  
  Running the (default) script command in Linux and Unix (macOS)
&lt;/h2&gt;

&lt;p&gt;When I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;script&lt;/code&gt; command by typing &lt;code&gt;"script"&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt; followed by&lt;br&gt;
the &lt;code&gt;Return&lt;/code&gt; (&lt;code&gt;Enter&lt;/code&gt;) key, the following is returned in &lt;code&gt;Terminal&lt;/code&gt; in both&lt;br&gt;
&lt;code&gt;Linux&lt;/code&gt; and &lt;code&gt;Unix&lt;/code&gt; (&lt;code&gt;macOS&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Script started, output log file is &lt;span class="s1"&gt;'typescript'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if I run &lt;code&gt;ls&lt;/code&gt; on the home directory (&lt;code&gt;~&lt;/code&gt;), the &lt;code&gt;typescript&lt;/code&gt; file appears in&lt;br&gt;
my &lt;code&gt;current working directory&lt;/code&gt;. When I &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;script&lt;/code&gt; command &lt;code&gt;without&lt;/code&gt; any&lt;br&gt;
&lt;code&gt;args&lt;/code&gt;, a &lt;code&gt;file&lt;/code&gt; called &lt;code&gt;typescript&lt;/code&gt; is &lt;code&gt;automatically created&lt;/code&gt; by &lt;code&gt;default&lt;/code&gt;.&lt;br&gt;
This file &lt;code&gt;saves&lt;/code&gt; all &lt;code&gt;Terminal&lt;/code&gt; related &lt;code&gt;activity&lt;/code&gt; information in the&lt;br&gt;
&lt;strong&gt;&lt;em&gt;current&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;Terminal&lt;/code&gt; session.&lt;/p&gt;

&lt;p&gt;For example, if I open up the &lt;code&gt;typescript&lt;/code&gt; file with the &lt;code&gt;vim&lt;/code&gt; command in&lt;br&gt;
&lt;code&gt;Linux&lt;/code&gt;, it looks something like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Script started on 2024-07-14 19:29:11-04:00 &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;TERM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"xterm-256color"&lt;/span&gt; &lt;span class="nv"&gt;TTY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"dev/pts/2"&lt;/span&gt; &lt;span class="nv"&gt;COLUMNS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"80"&lt;/span&gt; &lt;span class="nv"&gt;LINES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"24"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
^[[?2004h^[]0&lt;span class="p"&gt;;&lt;/span&gt;maria@maria-VirtualBox: ~^G^[01&lt;span class="p"&gt;;&lt;/span&gt;32mmaria@maria-VirtualBox^[[00m:^[[01&lt;span class="p"&gt;;&lt;/span&gt;34m~^[[00m&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;^M
^[[?2004l^M^[[0m^[[01&lt;span class="p"&gt;;&lt;/span&gt;34mDesktop^[[00m  ^[[01&lt;span class="p"&gt;;&lt;/span&gt;34mDownloads^[[00m  ^[[01&lt;span class="p"&gt;;&lt;/span&gt;34mPictures^[[00m ^[[01&lt;span class="p"&gt;;&lt;/span&gt;34mTemplates^[[00m  ^[[01&lt;span class="p"&gt;;&lt;/span&gt;34mVideos^]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]...
&lt;span class="o"&gt;[[&lt;/span&gt;5&lt;span class="p"&gt;;&lt;/span&gt;3H^[[30m^[[47m| Please &lt;span class="k"&gt;select &lt;/span&gt;the mail server configuration &lt;span class="nb"&gt;type &lt;/span&gt;that best meets your   ^[[97m^[[40m ^[[6&lt;span class="p"&gt;;&lt;/span&gt;3H^[[30m^[[47m| needs.[[97m^[[40m ^[[7&lt;span class="p"&gt;;&lt;/span&gt;3H^[[30m^[[47m|
                                              ^[[97m
                                        1872,643-553  Bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is a long file, and I was not able to export the &lt;code&gt;typescript&lt;/code&gt; file from&lt;br&gt;
&lt;code&gt;Linux Mint&lt;/code&gt; in &lt;code&gt;VirtualBox&lt;/code&gt; into &lt;code&gt;Windows 11&lt;/code&gt;. If anyone knows of a way of&lt;br&gt;
doing that, let me know! I tried to &lt;code&gt;install&lt;/code&gt; a an &lt;code&gt;email server package&lt;/code&gt;, but&lt;br&gt;
couldn't get beyond the &lt;code&gt;configuration&lt;/code&gt; step. I couldn't &lt;code&gt;configure&lt;/code&gt; it in&lt;br&gt;
&lt;code&gt;Terminal&lt;/code&gt; and couldn't &lt;code&gt;exit&lt;/code&gt; the &lt;code&gt;package configuration&lt;/code&gt; either.&lt;/p&gt;

&lt;p&gt;It is basically the &lt;code&gt;same process&lt;/code&gt; to &lt;code&gt;start&lt;/code&gt; the &lt;code&gt;script&lt;/code&gt; command in &lt;code&gt;Unix&lt;/code&gt;&lt;br&gt;
(&lt;code&gt;macOS&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Let's say I just run the &lt;code&gt;script&lt;/code&gt; command without any &lt;code&gt;args&lt;/code&gt; from inside&lt;br&gt;
&lt;code&gt;mariadcampbell.com&lt;/code&gt;'s &lt;code&gt;local repository&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;script
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This resulted in the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mariacam@Marias-MBP  ~/Development/nextjs-and-react-complete-guide/fullstack-blog   main  script

Script started, output file is typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a &lt;code&gt;file&lt;/code&gt; called &lt;code&gt;"typescript"&lt;/code&gt; was &lt;code&gt;created&lt;/code&gt; inside this &lt;code&gt;directory&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;

&lt;span class="c"&gt;# the following was returned:&lt;/span&gt;

?[38                                    jest.config.js
?[?1049l?[?25h?[                        jest.setup.js
?[?2004l??                              lib
4                                       list-directory.txt?[39m?[36D?[39m
LICENSE                                 list-directory.txt?[39m?[36D?[39m-?[39m
README.md                               list-directory.txt?[39m?[36D?[39m&lt;span class="o"&gt;=&lt;/span&gt;?[39m
__mocks__                               next.config.js
__tests__                               node_modules
c?[38                                   package-lock.json
c?]10                                   package.json
certificates                            pages
components                              postcss.config.js
coverage                                public
data                                    scripts
demo.txt                                started
&lt;span class="k"&gt;done&lt;/span&gt;,                                   started,
&lt;span class="nb"&gt;exit                                    &lt;/span&gt;styles
fullstack-blog-script                   tailwind.config.js
helpers                                 typescript
hooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;stdout&lt;/code&gt; of &lt;code&gt;typescript&lt;/code&gt; looked like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Script started on Mon Jul 15 12:25:21 2024
[1G[0K[1G[0K/Users/mariacam/.zshrc:110: &lt;span class="nb"&gt;command &lt;/span&gt;not found: pyenv
]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;RemoteHost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariacam@Marias-MBP]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;CurrentDir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Development/nextjs-and-react-complete-guide/fullstack-blog]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;ShellIntegrationVersion&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;11&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zsh/Users/mariacam/.zshrc:114: &lt;span class="nb"&gt;command &lt;/span&gt;not found: pyenv
[1m[7m%[27m[1m[0m

]2&lt;span class="p"&gt;;&lt;/span&gt;mariacam@Marias-MBP: ~/Development/nextjs-and-react-complete-guide/fullstack-blog]1&lt;span class="p"&gt;;&lt;/span&gt;..ullstack-blog]133&lt;span class="p"&gt;;&lt;/span&gt;D&lt;span class="p"&gt;;&lt;/span&gt;0]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;RemoteHost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariacam@Marias-MBP]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;CurrentDir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Development/nextjs-and-react-complete-guide/fullstack-blog
[0m[27m[24m[J]133&lt;span class="p"&gt;;&lt;/span&gt;A[39m[0m[49m[40m[39m mariacam@Marias-MBP [44m[30m[30m ~/Development/nextjs-and-react-complete-guide/fullstack-blog [43m[34m[30m  main [49m[33m[39m ]133&lt;span class="p"&gt;;&lt;/span&gt;B[K[?1h&lt;span class="o"&gt;=&lt;/span&gt;[?2004hll[90ms[39ml[39ms[?1l&amp;gt;[?2004l

]2&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-G&lt;/span&gt;]1&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;]133&lt;span class="p"&gt;;&lt;/span&gt;C&lt;span class="p"&gt;;&lt;/span&gt;?[38                                    jest.config.js
?[?1049l?[?25h?[                        jest.setup.js
?[?2004l??                              [1m[36mlib[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
4                                       list-directory.txt?[39m?[36D?[39m
LICENSE                                 list-directory.txt?[39m?[36D?[39m-?[39m
README.md                               list-directory.txt?[39m?[36D?[39m&lt;span class="o"&gt;=&lt;/span&gt;?[39m
[1m[36m__mocks__[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                               next.config.js
[1m[36m__tests__[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                               [1m[36mnode_modules[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
c?[38                                   package-lock.json
c?]10                                   package.json
[1m[36mcertificates[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                            [1m[36mpages[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
[1m[36mcomponents[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                              postcss.config.js
[1m[36mcoverage[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                                [1m[36mpublic[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
[1m[36mdata[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                                    [1m[36mscripts[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
demo.txt                                started
&lt;span class="k"&gt;done&lt;/span&gt;,                                   started,
&lt;span class="nb"&gt;exit&lt;/span&gt;                                    [1m[36mstyles[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
[31mfullstack-blog-script[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                   tailwind.config.js
[1m[36mhelpers[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m                                 typescript
[1m[36mhooks[39&lt;span class="p"&gt;;&lt;/span&gt;49m[0m
[1m[7m%[27m[1m[0m

]2&lt;span class="p"&gt;;&lt;/span&gt;mariacam@Marias-MBP: ~/Development/nextjs-and-react-complete-guide/fullstack-blog]1&lt;span class="p"&gt;;&lt;/span&gt;..ullstack-blog]133&lt;span class="p"&gt;;&lt;/span&gt;D&lt;span class="p"&gt;;&lt;/span&gt;0]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;RemoteHost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariacam@Marias-MBP]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;CurrentDir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Development/nextjs-and-react-complete-guide/fullstack-blog
[0m[27m[24m[J]133&lt;span class="p"&gt;;&lt;/span&gt;A[39m[0m[49m[40m[39m mariacam@Marias-MBP [44m[30m[30m ~/Development/nextjs-and-react-complete-guide/fullstack-blog [43m[34m[30m  main [49m[33m[39m ]133&lt;span class="p"&gt;;&lt;/span&gt;B[K[?1h&lt;span class="o"&gt;=&lt;/span&gt;[?2004h 90mc &lt;span class="nt"&gt;-l&lt;/span&gt; fullstack-blog-scr[90mi[90mpt[39m[K[A[93Cw[39mc[39m [39m-[39ml[39m [39mt[K[1B
[K[A[102Cypescript[?1l&amp;gt;[?2004l[1B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I wanted to find out &lt;code&gt;how many&lt;/code&gt; &lt;strong&gt;&lt;em&gt;lines&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;typescript&lt;/code&gt; contains, I ran the&lt;br&gt;
following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;24 typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means that the &lt;code&gt;file&lt;/code&gt; contains &lt;code&gt;24 lines&lt;/code&gt;. And if I run the &lt;code&gt;exit&lt;/code&gt; command,&lt;br&gt;
the following is returned:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Script &lt;span class="k"&gt;done&lt;/span&gt;, output file is typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if I then run &lt;code&gt;wc -l typescript&lt;/code&gt; again, it returns the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;28 typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is because the &lt;code&gt;exit&lt;/code&gt; command is &lt;code&gt;appended&lt;/code&gt; to the &lt;code&gt;end&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;typescript&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;]&lt;/span&gt;2&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; typescript]1&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;wc&lt;/span&gt;]133&lt;span class="p"&gt;;&lt;/span&gt;C&lt;span class="p"&gt;;&lt;/span&gt;      24 typescript
[1m[7m%[27m[1m[0m

]2&lt;span class="p"&gt;;&lt;/span&gt;mariacam@Marias-MBP: ~/Development/nextjs-and-react-complete-guide/fullstack-blog]1&lt;span class="p"&gt;;&lt;/span&gt;..ullstack-blog]133&lt;span class="p"&gt;;&lt;/span&gt;D&lt;span class="p"&gt;;&lt;/span&gt;0]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;RemoteHost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariacam@Marias-MBP]1337&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;CurrentDir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/Users/mariacam/Development/nextjs-and-react-complete-guide/fullstack-blog
[0m[27m[24m[J]133&lt;span class="p"&gt;;&lt;/span&gt;A[39m[0m[49m[40m[39m mariacam@Marias-MBP [44m[30m[30m ~/Development/nextjs-and-react-complete-guide/fullstack-blog [43m[34m[30m  main [49m[33m[39m ]133&lt;span class="p"&gt;;&lt;/span&gt;B[K[?1h&lt;span class="o"&gt;=&lt;/span&gt;[?2004hee[90mxit[39me[39mx[39mi[39mt[?1l&amp;gt;[?2004l

]2&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;]1&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;]133&lt;span class="p"&gt;;&lt;/span&gt;C&lt;span class="p"&gt;;&lt;/span&gt;
Script &lt;span class="k"&gt;done &lt;/span&gt;on Mon Jul 15 12:29:28 2024
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running custom scripts in Unix (macOS)
&lt;/h2&gt;

&lt;p&gt;Now let's say I want to do things a bit differently, follow a &lt;code&gt;different script&lt;/code&gt;&lt;br&gt;
(other than &lt;code&gt;script&lt;/code&gt; itself) inside my &lt;code&gt;fullstack-blog&lt;/code&gt; directory which houses&lt;br&gt;
the &lt;code&gt;local repo&lt;/code&gt; for &lt;code&gt;mariadcampbell.com&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev 2&amp;gt;&amp;amp;1 | &lt;span class="nb"&gt;tee&lt;/span&gt; ~/desktop/full-stack-blog.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Instead&lt;/code&gt; of &lt;code&gt;using&lt;/code&gt; the &lt;code&gt;script&lt;/code&gt; command, I am using a &lt;code&gt;"custom script"&lt;/code&gt;. In&lt;br&gt;
fact, it is an &lt;code&gt;npm local script&lt;/code&gt; &lt;strong&gt;&lt;em&gt;located&lt;/em&gt;&lt;/strong&gt; in my &lt;code&gt;package.json&lt;/code&gt; file for&lt;br&gt;
&lt;code&gt;mariadcampbell.com&lt;/code&gt;. The &lt;code&gt;following&lt;/code&gt; then is &lt;code&gt;returned&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; fullstack-blog@0.1.0 dev
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

  ▲ Next.js 14.2.4
  - Local:        http://localhost:3000
  - Environments: .env.development.local, .env.local, .env

 ✓ Starting...
 ✓ Ready &lt;span class="k"&gt;in &lt;/span&gt;1241ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;custom script&lt;/code&gt; resulted in &lt;strong&gt;&lt;em&gt;first running&lt;/em&gt;&lt;/strong&gt; the &lt;code&gt;npm run dev&lt;/code&gt; command&lt;br&gt;
and &lt;code&gt;starting up&lt;/code&gt; the &lt;code&gt;development server&lt;/code&gt; for &lt;code&gt;fullstack-blog&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;browser&lt;/code&gt;, and the &lt;code&gt;stdout&lt;/code&gt; to &lt;code&gt;Terminal&lt;/code&gt; is the following above. But since I&lt;br&gt;
&lt;strong&gt;&lt;em&gt;also use&lt;/em&gt;&lt;/strong&gt; pipe &lt;code&gt;|&lt;/code&gt; and &lt;code&gt;tee&lt;/code&gt;, it &lt;code&gt;resulted&lt;/code&gt; in the &lt;code&gt;creation&lt;/code&gt; of a &lt;code&gt;file&lt;/code&gt;&lt;br&gt;
called &lt;code&gt;fullstack-blog.txt&lt;/code&gt; on the &lt;code&gt;desktop&lt;/code&gt;, and it &lt;code&gt;contained&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;following&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fullstack-blog@0.1.0 dev
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

  ▲ Next.js 14.2.4
  - Local:        http://localhost:3000
  - Environments: .env.development.local, .env.local, .env

 ✓ Starting...
 ✓ Ready &lt;span class="k"&gt;in &lt;/span&gt;1241ms

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

&lt;/div&gt;



&lt;p&gt;which is the &lt;code&gt;same&lt;/code&gt; as &lt;code&gt;stdout&lt;/code&gt; to &lt;code&gt;Terminal&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;In addition, I am &lt;code&gt;redirecting&lt;/code&gt; any &lt;code&gt;errors&lt;/code&gt; that may occur to&lt;br&gt;
&lt;code&gt;fullstack-blog.txt&lt;/code&gt; as well. &lt;code&gt;2&lt;/code&gt; points to &lt;code&gt;stderr&lt;/code&gt;. &lt;code&gt;1&lt;/code&gt; points to &lt;code&gt;stdout&lt;/code&gt;.&lt;br&gt;
And &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt; redirects &lt;code&gt;npm run dev&lt;/code&gt; &lt;code&gt;stdout&lt;/code&gt; and &lt;code&gt;stderr&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;fullstack-blog.txt&lt;/code&gt;. &lt;strong&gt;&lt;em&gt;Specifically&lt;/em&gt;&lt;/strong&gt;, &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt; means &lt;code&gt;redirect&lt;/code&gt; &lt;code&gt;stderr&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;stdout&lt;/code&gt;, and &lt;code&gt;both&lt;/code&gt; are &lt;code&gt;stdin&lt;/code&gt; for the &lt;code&gt;tee&lt;/code&gt; command, which basically &lt;code&gt;copies&lt;/code&gt;&lt;br&gt;
and &lt;code&gt;pastes&lt;/code&gt; &lt;code&gt;stdout&lt;/code&gt; to a &lt;code&gt;specified file&lt;/code&gt;. In this case, &lt;code&gt;fullstack-blog.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let's say I wanted to &lt;strong&gt;&lt;em&gt;stop&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;npm run dev&lt;/code&gt;, thereby &lt;code&gt;stop redirecting&lt;/code&gt; it to&lt;br&gt;
the &lt;code&gt;fullstack-blog.txt&lt;/code&gt; file. I simply press the &lt;code&gt;Control key&lt;/code&gt; + &lt;code&gt;C key&lt;/code&gt; like I&lt;br&gt;
would &lt;code&gt;normally&lt;/code&gt; when I want to &lt;code&gt;stop running&lt;/code&gt; the &lt;code&gt;development server&lt;/code&gt;. But if&lt;br&gt;
I simply ran &lt;code&gt;npm run dev&lt;/code&gt; afterwards, the &lt;code&gt;stdout&lt;/code&gt; to &lt;code&gt;Terminal&lt;/code&gt; would no&lt;br&gt;
longer be &lt;code&gt;redirected&lt;/code&gt; to &lt;code&gt;fullstack-blog.txt&lt;/code&gt;. I would &lt;code&gt;have&lt;/code&gt; to &lt;strong&gt;re-run&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;npm run dev 2&amp;gt;&amp;amp;1 | tee ~/desktop/full-stack-blog.txt&lt;/code&gt;. And if I want to&lt;br&gt;
&lt;code&gt;append&lt;/code&gt; new &lt;code&gt;stdout&lt;/code&gt; to the &lt;code&gt;end&lt;/code&gt; of the &lt;code&gt;file&lt;/code&gt; instead of &lt;code&gt;overwriting&lt;/code&gt; it,&lt;br&gt;
the &lt;code&gt;default behavior&lt;/code&gt; of the &lt;code&gt;tee&lt;/code&gt; command, I would &lt;code&gt;run&lt;/code&gt; the &lt;code&gt;following&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;instead&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev 2&amp;gt;&amp;amp;1 | &lt;span class="nb"&gt;tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; ~/desktop/full-stack-blog.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And now the &lt;code&gt;stdout&lt;/code&gt; of &lt;code&gt;fullstack-blog.txt&lt;/code&gt; is the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fullstack-blog@0.1.0 dev
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

  ▲ Next.js 14.2.4
  - Local:        http://localhost:3000
  - Environments: .env.development.local, .env.local, .env

 ✓ Starting...
 ✓ Ready &lt;span class="k"&gt;in &lt;/span&gt;1241ms

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fullstack-blog@0.1.0 dev
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

  ▲ Next.js 14.2.4
  - Local:        http://localhost:3000
  - Environments: .env.development.local, .env.local, .env

 ✓ Starting...
 ✓ Ready &lt;span class="k"&gt;in &lt;/span&gt;1154ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;same&lt;/code&gt; can be &lt;code&gt;done&lt;/code&gt; with any &lt;code&gt;script&lt;/code&gt; that you want to &lt;code&gt;save&lt;/code&gt; to a &lt;code&gt;file&lt;/code&gt;.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;This way&lt;/em&gt;&lt;/strong&gt;, if you want to be able to refer back to the&lt;br&gt;
&lt;code&gt;logging information&lt;/code&gt; and find out &lt;code&gt;what&lt;/code&gt; went &lt;code&gt;wrong&lt;/code&gt;, &lt;strong&gt;&lt;em&gt;for example&lt;/em&gt;&lt;/strong&gt;, or&lt;br&gt;
perhaps &lt;code&gt;what&lt;/code&gt; went &lt;code&gt;right&lt;/code&gt;, you could &lt;code&gt;refer&lt;/code&gt; to the &lt;code&gt;.txt&lt;/code&gt; file that the&lt;br&gt;
&lt;code&gt;stdout&lt;/code&gt; was &lt;code&gt;redirected&lt;/code&gt; to, &lt;code&gt;written&lt;/code&gt; to, and &lt;code&gt;saved&lt;/code&gt;. For&lt;br&gt;
&lt;code&gt;nextjs developers&lt;/code&gt;, &lt;strong&gt;&lt;em&gt;for example&lt;/em&gt;&lt;/strong&gt;, or &lt;code&gt;developers&lt;/code&gt; in &lt;code&gt;general&lt;/code&gt;, doing this&lt;br&gt;
with the &lt;code&gt;build script&lt;/code&gt;, the &lt;code&gt;production server&lt;/code&gt; &lt;strong&gt;&lt;em&gt;post-build&lt;/em&gt;&lt;/strong&gt;, the&lt;br&gt;
&lt;code&gt;test script&lt;/code&gt;, any &lt;code&gt;linting scripts&lt;/code&gt;, etc., is very useful.&lt;/p&gt;

&lt;p&gt;If I &lt;code&gt;make&lt;/code&gt; my &lt;code&gt;way around&lt;/code&gt; my &lt;code&gt;nextjs application&lt;/code&gt; in the &lt;code&gt;browser&lt;/code&gt;, this is&lt;br&gt;
&lt;code&gt;logged&lt;/code&gt; as well. I visited a couple of pages and posts, and since I was using&lt;br&gt;
the &lt;code&gt;-a&lt;/code&gt; or &lt;code&gt;--append&lt;/code&gt; flag, the &lt;code&gt;new stdout&lt;/code&gt; was &lt;code&gt;added&lt;/code&gt; to the &lt;code&gt;end&lt;/code&gt; of the&lt;br&gt;
&lt;code&gt;fullstack-blog.txt&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fullstack-blog@0.1.0 dev
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

  ▲ Next.js 14.2.4
  - Local:        http://localhost:3000
  - Environments: .env.development.local, .env.local, .env

 ✓ Starting...
 ✓ Ready &lt;span class="k"&gt;in &lt;/span&gt;1241ms

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fullstack-blog@0.1.0 dev
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; next dev

  ▲ Next.js 14.2.4
  - Local:        http://localhost:3000
  - Environments: .env.development.local, .env.local, .env

 ✓ Starting...
 ✓ Ready &lt;span class="k"&gt;in &lt;/span&gt;1154ms
 ○ Compiling / ...
 ✓ Compiled / &lt;span class="k"&gt;in &lt;/span&gt;618ms &lt;span class="o"&gt;(&lt;/span&gt;816 modules&lt;span class="o"&gt;)&lt;/span&gt;
Warning: data &lt;span class="k"&gt;for &lt;/span&gt;page &lt;span class="s2"&gt;"/"&lt;/span&gt; is 132 kB which exceeds the threshold of 128 kB, this amount of data can reduce performance.
See more info here: https://nextjs.org/docs/messages/large-page-data
 GET / 200 &lt;span class="k"&gt;in &lt;/span&gt;926ms
 ✓ Compiled /about &lt;span class="k"&gt;in &lt;/span&gt;185ms &lt;span class="o"&gt;(&lt;/span&gt;823 modules&lt;span class="o"&gt;)&lt;/span&gt;
 ✓ Compiled /blog &lt;span class="k"&gt;in &lt;/span&gt;163ms &lt;span class="o"&gt;(&lt;/span&gt;839 modules&lt;span class="o"&gt;)&lt;/span&gt;
Warning: data &lt;span class="k"&gt;for &lt;/span&gt;page &lt;span class="s2"&gt;"/blog"&lt;/span&gt; is 1.28 MB which exceeds the threshold of 128 kB, this amount of data can reduce performance.
See more info here: https://nextjs.org/docs/messages/large-page-data
 GET /_next/data/development/blog.json 200 &lt;span class="k"&gt;in &lt;/span&gt;104ms
 ✓ Compiled /_error &lt;span class="k"&gt;in &lt;/span&gt;71ms &lt;span class="o"&gt;(&lt;/span&gt;841 modules&lt;span class="o"&gt;)&lt;/span&gt;
 GET /images/blog/the-script-command-in-linux-and-unix-macos/undefined 404 &lt;span class="k"&gt;in &lt;/span&gt;103ms
 ⨯ The requested resource isn&lt;span class="s1"&gt;'t a valid image for /images/blog/the-script-command-in-linux-and-unix-macos/undefined received text/html; charset=utf-8
Warning: data for page "/" is 132 kB which exceeds the threshold of 128 kB, this amount of data can reduce performance.
See more info here: https://nextjs.org/docs/messages/large-page-data
 GET /_next/data/development/index.json 200 in 51ms
 ○ Compiling /blog/[slug] ...
 ✓ Compiled /blog/[slug] in 644ms (1644 modules)
 GET /_next/data/development/blog/using-pipe-and-grep-in-linux-and-unix-macos.json?slug=using-pipe-and-grep-in-linux-and-unix-macos 200 in 1036ms
Warning: data for page "/blog" is 1.28 MB which exceeds the threshold of 128 kB, this amount of data can reduce performance.
See more info here: https://nextjs.org/docs/messages/large-page-data
 GET /_next/data/development/blog.json 200 in 143ms
 GET /images/blog/the-script-command-in-linux-and-unix-macos/undefined 404 in 7ms
 ⨯ The requested resource isn'&lt;/span&gt;t a valid image &lt;span class="k"&gt;for&lt;/span&gt; /images/blog/the-script-command-in-linux-and-unix-macos/undefined received text/html&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;utf-8
 GET /_next/data/development/blog/the-script-command-in-linux-and-unix-macos.json?slug&lt;span class="o"&gt;=&lt;/span&gt;the-script-command-in-linux-and-unix-macos 200 &lt;span class="k"&gt;in &lt;/span&gt;16ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is &lt;code&gt;much longer&lt;/code&gt; than the &lt;code&gt;previous stdout&lt;/code&gt; I shared here!&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/blog/how-to-save-terminal-output-to-a-file-for-future-reference"&gt;How to Save Terminal Output to a File for Future Reference&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;mariadcampbell.com&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/script-command-in-linux-with-examples/" rel="noopener noreferrer"&gt;script command in Linux with Examples&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Geeks for Geeks&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>commandline</category>
      <category>scriptcommand</category>
    </item>
    <item>
      <title>Some Important Terms to Know in Linux</title>
      <dc:creator>Maria Campbell</dc:creator>
      <pubDate>Sun, 28 Jul 2024 09:31:00 +0000</pubDate>
      <link>https://dev.to/letsbsocial1/some-important-terms-to-know-in-linux-46ko</link>
      <guid>https://dev.to/letsbsocial1/some-important-terms-to-know-in-linux-46ko</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Photo by&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/@karolina-grabowska/" rel="noopener noreferrer"&gt;Karolina Kaboompics&lt;/a&gt; &lt;strong&gt;&lt;em&gt;on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.pexels.com/photo/glass-of-cocktail-with-lemon-and-peppermint-4021878/" rel="noopener noreferrer"&gt;pexels.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;post&lt;/strong&gt; was &lt;strong&gt;originally published&lt;/strong&gt; on my &lt;strong&gt;personal blog&lt;/strong&gt; &lt;a href="https://www.mariadcampbell.com/blog/some-important-terms-to-know-in-linux" rel="noopener noreferrer"&gt;mariadcampbell.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In order to be able to understand what &lt;code&gt;Linux&lt;/code&gt; is all about, there are certain&lt;br&gt;
&lt;code&gt;Linux terms&lt;/code&gt; you should become familiar with from the get go.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Linux kernel
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;First&lt;/em&gt;&lt;/strong&gt; an &lt;strong&gt;&lt;em&gt;foremost&lt;/em&gt;&lt;/strong&gt;, you should know what is meant by the&lt;br&gt;
&lt;code&gt;Linux Kernel&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;Linux® kernel&lt;/code&gt; is the main component of a &lt;code&gt;Linux operating system&lt;/code&gt; (&lt;code&gt;OS&lt;/code&gt;)&lt;br&gt;
and is the &lt;code&gt;core interface&lt;/code&gt; between a &lt;strong&gt;&lt;em&gt;computer’s&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;hardware&lt;/code&gt; and its&lt;br&gt;
&lt;code&gt;processes&lt;/code&gt;. It communicates between the 2, managing resources as efficiently&lt;br&gt;
as possible.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;kernel&lt;/code&gt; is &lt;code&gt;so named&lt;/code&gt; because—like a seed inside a hard shell—it exists&lt;br&gt;
within the OS and controls all the major functions of the hardware, whether&lt;br&gt;
it’s a phone, laptop, server, or any other kind of computer. -- &lt;strong&gt;&lt;em&gt;What is the&lt;br&gt;
Linux kernel?&lt;/em&gt;&lt;/strong&gt;,&lt;br&gt;
&lt;a href="https://www.redhat.com/en/topics/linux/what-is-the-linux-kernel" rel="noopener noreferrer"&gt;RedHat&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;Linux kernel&lt;/code&gt; &lt;strong&gt;&lt;em&gt;accomplishes&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;4 tasks&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;Memory management&lt;/code&gt;: keeps track of how much memory is used to store what
and where&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Process management&lt;/code&gt;: determines which processes can use the central
processing unit (CPU), and for how long.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Device drivers&lt;/code&gt;: acts as a mediator/interpreter between the hardware and
the processes.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;System calls and security&lt;/code&gt;: receives requests for service from processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;kernel&lt;/code&gt; works &lt;code&gt;invisibly&lt;/code&gt; in the &lt;code&gt;kernel space&lt;/code&gt;, where it&lt;br&gt;
&lt;code&gt;allocates memory&lt;/code&gt; and &lt;code&gt;keeps track&lt;/code&gt; of where &lt;code&gt;everything&lt;/code&gt; is &lt;code&gt;stored&lt;/code&gt;. The&lt;br&gt;
&lt;code&gt;user sees&lt;/code&gt; things like &lt;code&gt;web browsers&lt;/code&gt; and &lt;code&gt;files&lt;/code&gt;, and &lt;code&gt;these live&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;user space&lt;/code&gt;. These &lt;code&gt;applications&lt;/code&gt; &lt;strong&gt;&lt;em&gt;interact&lt;/em&gt;&lt;/strong&gt; with the &lt;code&gt;kernel&lt;/code&gt; via a&lt;br&gt;
&lt;code&gt;system call interface&lt;/code&gt; (&lt;code&gt;SCI&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;
  
  
  GNU
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;GNU&lt;/code&gt;, or &lt;code&gt;"GNU's Not Unix"&lt;/code&gt;, is a &lt;code&gt;collection&lt;/code&gt; of &lt;code&gt;open source&lt;/code&gt; tools that&lt;br&gt;
anyone can &lt;code&gt;use&lt;/code&gt; for &lt;code&gt;free&lt;/code&gt; to &lt;code&gt;develop&lt;/code&gt; their own &lt;code&gt;apps&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;operating systems&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;GNU Project&lt;/code&gt;, &lt;strong&gt;&lt;em&gt;founded by&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;Richard Stallman&lt;/code&gt;, &lt;code&gt;develops&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;distributes software&lt;/code&gt; for &lt;code&gt;free&lt;/code&gt; and &lt;code&gt;provides&lt;/code&gt; every &lt;code&gt;developer&lt;/code&gt; with&lt;br&gt;
&lt;code&gt;open-source&lt;/code&gt; tools to do the same.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Linux kernel&lt;/code&gt; is &lt;code&gt;licensed&lt;/code&gt; under &lt;code&gt;GNU&lt;/code&gt;'s &lt;code&gt;GPL&lt;/code&gt; (&lt;code&gt;General Public License&lt;/code&gt;)&lt;br&gt;
and is known as &lt;code&gt;GNU/Linux&lt;/code&gt;. Any operating system developed using&lt;br&gt;
&lt;code&gt;open-source GNU tools&lt;/code&gt; and the &lt;code&gt;Linux kernel&lt;/code&gt; &lt;strong&gt;&lt;em&gt;falls under&lt;/em&gt;&lt;/strong&gt; the &lt;code&gt;category&lt;/code&gt;&lt;br&gt;
of &lt;code&gt;Linux distributions&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux distribution
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;Linux distribution&lt;/code&gt; (or &lt;code&gt;distro&lt;/code&gt;) is an &lt;code&gt;operating system&lt;/code&gt; (&lt;code&gt;OS&lt;/code&gt;) compiled&lt;br&gt;
from components developed by open source projects/programmers.&lt;/p&gt;

&lt;p&gt;Each distribution includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  the Linux kernel (the core of the OS),&lt;/li&gt;
&lt;li&gt;  GNU (GNU's Not Unix) shell utilities (terminal interface and commands),&lt;/li&gt;
&lt;li&gt;  the X server (a graphical desktop),&lt;/li&gt;
&lt;li&gt;  the desktop environment,&lt;/li&gt;
&lt;li&gt;  package management system,&lt;/li&gt;
&lt;li&gt;  an installer,&lt;/li&gt;
&lt;li&gt;  other services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Distributions&lt;/code&gt; also &lt;code&gt;include&lt;/code&gt; an &lt;code&gt;internet browser&lt;/code&gt;, &lt;code&gt;management tools&lt;/code&gt;, and&lt;br&gt;
&lt;code&gt;other software&lt;/code&gt; such as the &lt;code&gt;KVM&lt;/code&gt; (&lt;code&gt;Kernel-based Virtual Machine&lt;/code&gt;) &lt;code&gt;hypervisor&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;[^1]&lt;/strong&gt;. A single &lt;code&gt;Linux distribution&lt;/code&gt; &lt;strong&gt;&lt;em&gt;may contain&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;thousands&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;software packages&lt;/code&gt;, &lt;code&gt;utilities&lt;/code&gt;, and &lt;code&gt;applications&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux package managers
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Package managers&lt;/code&gt; are &lt;code&gt;programs&lt;/code&gt; that &lt;code&gt;manage packages&lt;/code&gt; on a &lt;code&gt;Linux system&lt;/code&gt;. It&lt;br&gt;
allows us to &lt;code&gt;add&lt;/code&gt; or &lt;code&gt;delete packages&lt;/code&gt; from sources such as our distribution's&lt;br&gt;
repositories or third party repositories.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;APT&lt;/code&gt;, &lt;code&gt;RPM&lt;/code&gt;, and &lt;code&gt;pacman&lt;/code&gt; are the three &lt;strong&gt;&lt;em&gt;most popular&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;package managers&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;used by&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;Linux distributions&lt;/code&gt;. &lt;code&gt;Debian&lt;/code&gt; and &lt;code&gt;Ubuntu-based&lt;/code&gt; distributions&lt;br&gt;
use the &lt;code&gt;APT&lt;/code&gt; package manager. &lt;code&gt;Fedora&lt;/code&gt;, &lt;code&gt;CentOS&lt;/code&gt;, and &lt;code&gt;RHEL&lt;/code&gt; have the &lt;code&gt;RPM&lt;/code&gt;&lt;br&gt;
package manager. &lt;code&gt;Arch Linux&lt;/code&gt; and its derivatives ship with &lt;code&gt;pacman&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Source and binary packages
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;Linux package&lt;/code&gt; is a &lt;code&gt;compressed software archive&lt;/code&gt; file &lt;code&gt;containing&lt;/code&gt; all the&lt;br&gt;
&lt;code&gt;files&lt;/code&gt; comprising a &lt;code&gt;software application&lt;/code&gt; that &lt;code&gt;provides&lt;/code&gt; a&lt;br&gt;
&lt;code&gt;particular functionality&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Linux software&lt;/code&gt; ere usually &lt;code&gt;distributed&lt;/code&gt; as &lt;code&gt;packages&lt;/code&gt;, and there are&lt;br&gt;
&lt;code&gt;two types&lt;/code&gt; of &lt;code&gt;packages&lt;/code&gt; available: &lt;code&gt;source&lt;/code&gt; and &lt;code&gt;binary&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Source packages&lt;/code&gt; contain program source code that a user has to manually&lt;br&gt;
compile and install in order to run the software.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Binary packages&lt;/code&gt; contain pre-built and pre-compiled executables for the&lt;br&gt;
software.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux repositories
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Software repositories&lt;/code&gt; are &lt;code&gt;remote servers&lt;/code&gt; that &lt;code&gt;store&lt;/code&gt; a &lt;code&gt;collection&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;packages&lt;/code&gt; along with &lt;code&gt;related metadata&lt;/code&gt; &lt;strong&gt;[^3]&lt;/strong&gt;. &lt;strong&gt;&lt;em&gt;Every&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Linux distribution&lt;/code&gt; &lt;strong&gt;&lt;em&gt;either has&lt;/em&gt;&lt;/strong&gt; its own &lt;code&gt;repositories&lt;/code&gt; &lt;strong&gt;&lt;em&gt;or uses&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;repositories&lt;/code&gt; of its &lt;code&gt;parent distribution&lt;/code&gt; &lt;strong&gt;&lt;em&gt;to provide&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;software&lt;/code&gt; to the&lt;br&gt;
&lt;code&gt;users&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux Boot loader
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;boot loader&lt;/code&gt; is is &lt;code&gt;program&lt;/code&gt; which &lt;code&gt;loads&lt;/code&gt; the &lt;code&gt;OS&lt;/code&gt; into &lt;code&gt;RAM&lt;/code&gt; during the&lt;br&gt;
&lt;code&gt;boot process&lt;/code&gt; &lt;strong&gt;[^2]&lt;/strong&gt;. The &lt;code&gt;boot loader&lt;/code&gt; &lt;strong&gt;&lt;em&gt;helps&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;load&lt;/code&gt; &lt;strong&gt;&lt;em&gt;the correct&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;operating system&lt;/code&gt; during &lt;code&gt;boot time&lt;/code&gt; &lt;strong&gt;&lt;em&gt;and adds&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;initial processes&lt;/code&gt; into&lt;br&gt;
&lt;code&gt;memory&lt;/code&gt; (&lt;code&gt;RAM&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux services
&lt;/h2&gt;

&lt;p&gt;A Linux service&lt;br&gt;
(&lt;a href="https://dev.to/blog/the-cron-daemon-in-linux-and-how-to-create-a-cron-job"&gt;cron daemon&lt;/a&gt; is a&lt;br&gt;
service) is a &lt;code&gt;process&lt;/code&gt; or &lt;code&gt;application&lt;/code&gt; that &lt;code&gt;runs&lt;/code&gt; in the &lt;code&gt;background&lt;/code&gt;, either&lt;br&gt;
doing some &lt;code&gt;predefined task&lt;/code&gt; or &lt;code&gt;waiting&lt;/code&gt; for &lt;code&gt;some event&lt;/code&gt;. &lt;code&gt;systemd&lt;/code&gt;, which is&lt;br&gt;
a &lt;code&gt;system&lt;/code&gt; and &lt;code&gt;service manager&lt;/code&gt; for &lt;code&gt;Linux&lt;/code&gt;, is the &lt;code&gt;first process&lt;/code&gt; to &lt;code&gt;run&lt;/code&gt; in&lt;br&gt;
the &lt;code&gt;system&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux filesystem
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;At&lt;/code&gt; a &lt;code&gt;high level&lt;/code&gt;, the &lt;code&gt;Linux filesystem&lt;/code&gt; follows the&lt;br&gt;
&lt;code&gt;Filesystem Hierarchy Standard&lt;/code&gt; (&lt;code&gt;FHS&lt;/code&gt;). This &lt;code&gt;standard&lt;/code&gt; describes the&lt;br&gt;
&lt;code&gt;common layout conventions&lt;/code&gt; used by most &lt;code&gt;UNIX&lt;/code&gt; and &lt;code&gt;UNIX-like&lt;/code&gt; systems. It&lt;br&gt;
&lt;code&gt;consists&lt;/code&gt; of a &lt;code&gt;single primary&lt;/code&gt; or &lt;code&gt;root directory&lt;/code&gt; with &lt;code&gt;multiple&lt;/code&gt; branching&lt;br&gt;
&lt;code&gt;sub-directories&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/&lt;/code&gt; represents the &lt;code&gt;root&lt;/code&gt; of the &lt;code&gt;Linux filesystem&lt;/code&gt;. It is &lt;code&gt;under&lt;/code&gt; this&lt;br&gt;
&lt;code&gt;root directory&lt;/code&gt; that &lt;code&gt;all&lt;/code&gt; other &lt;code&gt;files&lt;/code&gt; and &lt;code&gt;directories&lt;/code&gt; reside. The&lt;br&gt;
&lt;a href="https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html" rel="noopener noreferrer"&gt;Filesystem Hierarchy Standard&lt;/a&gt;&lt;br&gt;
(&lt;code&gt;FHS&lt;/code&gt;) &lt;code&gt;describes&lt;/code&gt; the &lt;code&gt;different directories&lt;/code&gt; and &lt;code&gt;what files&lt;/code&gt; are &lt;code&gt;located&lt;/code&gt;&lt;br&gt;
in &lt;code&gt;which directories&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you have &lt;code&gt;Ubuntu&lt;/code&gt; or a &lt;code&gt;Ubuntu derivative&lt;/code&gt; installed (like &lt;code&gt;Linux Mint&lt;/code&gt; for&lt;br&gt;
example), you can &lt;code&gt;install&lt;/code&gt; a &lt;code&gt;package&lt;/code&gt; called &lt;code&gt;tree&lt;/code&gt; by &lt;code&gt;running&lt;/code&gt; the&lt;br&gt;
&lt;code&gt;following command&lt;/code&gt; in &lt;code&gt;Terminal&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# to update current packages. updates the list of available packages and their versions, but it does not install or upgrade any packages.&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="c"&gt;# actually installs newer versions of the packages you have. After updating the lists, the package manager knows about available updates for the software you have installed. This is why you first want to update.&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade
&lt;span class="c"&gt;# now you are ready to install tree&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;tree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can run a command like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tree /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;tree&lt;/code&gt; command &lt;code&gt;lists contents&lt;/code&gt; of &lt;code&gt;directories&lt;/code&gt; in a &lt;code&gt;tree-like&lt;/code&gt; format in&lt;br&gt;
&lt;code&gt;Linux&lt;/code&gt;. &lt;code&gt;With&lt;/code&gt; &lt;strong&gt;&lt;em&gt;no&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;args&lt;/code&gt;, it &lt;code&gt;lists&lt;/code&gt; the &lt;code&gt;files&lt;/code&gt; and &lt;code&gt;sub-directories&lt;/code&gt; in&lt;br&gt;
the &lt;code&gt;current directory&lt;/code&gt;. With &lt;code&gt;directory args&lt;/code&gt; (such as &lt;code&gt;/&lt;/code&gt; or &lt;code&gt;~&lt;/code&gt;), &lt;code&gt;tree&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;lists&lt;/em&gt;&lt;/strong&gt; all the &lt;code&gt;files&lt;/code&gt; and/or &lt;code&gt;directories&lt;/code&gt; found in the&lt;br&gt;
&lt;code&gt;given directories&lt;/code&gt;. When &lt;code&gt;completing&lt;/code&gt; the &lt;code&gt;list&lt;/code&gt; of all &lt;code&gt;files&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;directories&lt;/code&gt; found, &lt;code&gt;tree&lt;/code&gt; returns the &lt;code&gt;total number&lt;/code&gt; of &lt;code&gt;files&lt;/code&gt; and/or&lt;br&gt;
&lt;code&gt;directories&lt;/code&gt; listed.&lt;/p&gt;

&lt;p&gt;If you want a &lt;code&gt;short list&lt;/code&gt; of &lt;code&gt;files&lt;/code&gt; and &lt;code&gt;directories&lt;/code&gt; in &lt;code&gt;root&lt;/code&gt; (&lt;code&gt;/&lt;/code&gt;), for&lt;br&gt;
example, you can &lt;code&gt;run&lt;/code&gt; something like the &lt;code&gt;following&lt;/code&gt; instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# run from root directory `/`&lt;/span&gt;
tree &lt;span class="nt"&gt;-L&lt;/span&gt; 1 /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this &lt;code&gt;command&lt;/code&gt; essentially is &lt;code&gt;doing&lt;/code&gt; is it &lt;code&gt;shows only&lt;/code&gt; the &lt;code&gt;first level&lt;/code&gt;&lt;br&gt;
of the &lt;code&gt;directory tree&lt;/code&gt; &lt;strong&gt;&lt;em&gt;starting at&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;root&lt;/code&gt; (&lt;code&gt;/&lt;/code&gt;). The &lt;code&gt;-L&lt;/code&gt; option tells&lt;br&gt;
&lt;code&gt;tree&lt;/code&gt; how many &lt;code&gt;levels down&lt;/code&gt; we &lt;code&gt;want&lt;/code&gt; to &lt;code&gt;see&lt;/code&gt;. Here, &lt;strong&gt;&lt;em&gt;we indicate&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;1 level&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Types of files in Linux
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;Linux&lt;/code&gt; and &lt;code&gt;Unix&lt;/code&gt; systems, &lt;code&gt;everything&lt;/code&gt; is &lt;code&gt;considered&lt;/code&gt; a &lt;code&gt;file&lt;/code&gt;. If it&lt;br&gt;
isn't, it's a &lt;code&gt;running process&lt;/code&gt;. Basically, &lt;code&gt;files&lt;/code&gt; fall under &lt;code&gt;three&lt;/code&gt; different&lt;br&gt;
&lt;code&gt;categories&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;Regular files&lt;/code&gt;: these include text files, photos, videos, programs, and
executable files.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Directories&lt;/code&gt;: in &lt;code&gt;Linux&lt;/code&gt;, directories are also considered files since they
provide storage for other files and sub-directories.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;Special files&lt;/code&gt;: device files that are made up of symbolic links, block
files, socket files, and named pipe files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will discuss the Linux Filesystem Tree in greater detail in an upcoming&lt;br&gt;
article. It's too lengthy to include here.&lt;/p&gt;
&lt;h2&gt;
  
  
  root directory vs root user
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;root&lt;/code&gt; (&lt;code&gt;/&lt;/code&gt;) &lt;code&gt;directory&lt;/code&gt;, mentioned previously, &lt;code&gt;represents&lt;/code&gt; the &lt;code&gt;root&lt;/code&gt; of&lt;br&gt;
the &lt;code&gt;Linux filesystem&lt;/code&gt;. It is &lt;code&gt;under&lt;/code&gt; this &lt;code&gt;root directory&lt;/code&gt; that &lt;code&gt;all&lt;/code&gt; other&lt;br&gt;
&lt;code&gt;files&lt;/code&gt; and &lt;code&gt;directories&lt;/code&gt; reside.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;root user&lt;/code&gt;, or &lt;code&gt;superuser&lt;/code&gt;, or just &lt;code&gt;root&lt;/code&gt;, is the &lt;code&gt;user&lt;/code&gt; that has &lt;code&gt;all&lt;/code&gt;&lt;br&gt;
administrative &lt;code&gt;privileges&lt;/code&gt;. The &lt;code&gt;root user&lt;/code&gt; can &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;write/edit&lt;/code&gt;, and&lt;br&gt;
&lt;code&gt;delete&lt;/code&gt; any &lt;code&gt;file&lt;/code&gt;, &lt;code&gt;make changes&lt;/code&gt; to the &lt;code&gt;system&lt;/code&gt; or &lt;code&gt;other users&lt;/code&gt;, and even&lt;br&gt;
&lt;code&gt;delete&lt;/code&gt; the whole &lt;code&gt;directory tree&lt;/code&gt;. &lt;code&gt;root&lt;/code&gt; is the &lt;code&gt;Linux user&lt;/code&gt; with the&lt;br&gt;
&lt;code&gt;highest level&lt;/code&gt; of &lt;code&gt;control&lt;/code&gt;. To &lt;code&gt;learn&lt;/code&gt; a bit &lt;code&gt;more&lt;/code&gt; about &lt;code&gt;root&lt;/code&gt; and related&lt;br&gt;
&lt;code&gt;sudo&lt;/code&gt;, &lt;code&gt;sudo su&lt;/code&gt;, and &lt;code&gt;su&lt;/code&gt; commands, &lt;code&gt;please visit&lt;/code&gt; my &lt;code&gt;article&lt;/code&gt;&lt;br&gt;
&lt;a href="https://dev.to/blog/the-su-command-in-linux-and-unix-macos"&gt;The su command in Linux and Unix (macOS)&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  X Window System
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="http://www.opengroup.org/tech/desktop/x-window-system/" rel="noopener noreferrer"&gt;X Window System&lt;/a&gt;&lt;br&gt;
&lt;code&gt;provides&lt;/code&gt; the &lt;code&gt;base technology&lt;/code&gt; for developing &lt;code&gt;graphical user interfaces&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux desktop environment
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;Linux desktop environment&lt;/code&gt; bundles together various components to provide&lt;br&gt;
common &lt;code&gt;graphical user interface elements&lt;/code&gt; such as &lt;code&gt;icons&lt;/code&gt;, &lt;code&gt;toolbars&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;wallpapers&lt;/code&gt;, and &lt;code&gt;desktop widgets&lt;/code&gt;. And most &lt;code&gt;desktop environments&lt;/code&gt; include a&lt;br&gt;
&lt;code&gt;set&lt;/code&gt; of &lt;code&gt;integrated applications&lt;/code&gt; and &lt;code&gt;utilities&lt;/code&gt;. It is the&lt;br&gt;
&lt;code&gt;desktop environment&lt;/code&gt; that &lt;code&gt;permits us&lt;/code&gt; to use &lt;code&gt;Linux graphically&lt;/code&gt; using a&lt;br&gt;
&lt;code&gt;mouse&lt;/code&gt; and &lt;code&gt;keyboard&lt;/code&gt; like we do in &lt;code&gt;other OS&lt;/code&gt; like &lt;code&gt;Windows&lt;/code&gt; or &lt;code&gt;macOS&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux Command Line Interface
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Linux Command Line Interface&lt;/code&gt; (also available in &lt;code&gt;other OS&lt;/code&gt; like &lt;code&gt;Windows&lt;/code&gt;&lt;br&gt;
and &lt;code&gt;macOS&lt;/code&gt;) is &lt;code&gt;what&lt;/code&gt; we &lt;code&gt;use&lt;/code&gt; to &lt;code&gt;interact with&lt;/code&gt; a computer's &lt;code&gt;OS&lt;/code&gt; using the&lt;br&gt;
&lt;code&gt;computer keyboard&lt;/code&gt;. We can &lt;code&gt;enter&lt;/code&gt; text &lt;code&gt;commands&lt;/code&gt; to &lt;code&gt;navigate&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;run programs&lt;/code&gt;, or &lt;code&gt;configure&lt;/code&gt; our &lt;code&gt;computer system&lt;/code&gt;. &lt;code&gt;All&lt;/code&gt; operating systems&lt;br&gt;
(&lt;code&gt;OS&lt;/code&gt;), including &lt;code&gt;Windows&lt;/code&gt;, &lt;code&gt;Linux&lt;/code&gt; and &lt;code&gt;macOS&lt;/code&gt;, &lt;code&gt;provide&lt;/code&gt; a &lt;code&gt;CLI&lt;/code&gt; in&lt;br&gt;
&lt;code&gt;addition&lt;/code&gt; to a &lt;code&gt;graphical user interface&lt;/code&gt; (&lt;code&gt;GUI&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Oftentimes &lt;code&gt;Terminal&lt;/code&gt;, &lt;code&gt;Command Line&lt;/code&gt;, &lt;code&gt;Console&lt;/code&gt;, or &lt;code&gt;Shell&lt;/code&gt; are used&lt;br&gt;
&lt;code&gt;interchangeably&lt;/code&gt;. However, they are &lt;code&gt;not&lt;/code&gt; all exactly the &lt;code&gt;same&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;"Terminal"&lt;/code&gt; is a text input/output (I/O) environment.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;Terminal window&lt;/code&gt;, aka &lt;code&gt;Terminal emulator&lt;/code&gt;, is a text only window that&lt;br&gt;
emulates a user's &lt;code&gt;Console&lt;/code&gt; in a &lt;code&gt;Graphical User Interface&lt;/code&gt; (&lt;code&gt;GUI&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;Terminal&lt;/code&gt; is a &lt;code&gt;program&lt;/code&gt; that &lt;code&gt;allows us&lt;/code&gt; to &lt;code&gt;run&lt;/code&gt; a &lt;code&gt;shell&lt;/code&gt;. It is a&lt;br&gt;
&lt;code&gt;device&lt;/code&gt; with a &lt;code&gt;human readable display&lt;/code&gt; that &lt;code&gt;accepts&lt;/code&gt; a &lt;code&gt;stream&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;characters&lt;/code&gt; and &lt;code&gt;displays them&lt;/code&gt;. They are &lt;code&gt;used frequently&lt;/code&gt; in &lt;code&gt;networking&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;device debugging interfaces&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;Console&lt;/code&gt; is a &lt;code&gt;physical Terminal&lt;/code&gt;. It is an &lt;code&gt;instrument panel&lt;/code&gt; with&lt;br&gt;
&lt;code&gt;computer controls&lt;/code&gt;. It is a &lt;code&gt;type&lt;/code&gt; of &lt;code&gt;terminal&lt;/code&gt;, and is a &lt;code&gt;window&lt;/code&gt; which&lt;br&gt;
contains &lt;code&gt;active text-mode programs&lt;/code&gt;. The &lt;code&gt;Console&lt;/code&gt; &lt;strong&gt;&lt;em&gt;recognizes&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;key presses&lt;/code&gt; (&lt;code&gt;stdin&lt;/code&gt;) and is &lt;code&gt;aware&lt;/code&gt; of its &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;Full screen mode&lt;/code&gt; is &lt;code&gt;available&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;Shell&lt;/code&gt; is a &lt;code&gt;command line interpreter&lt;/code&gt;. It &lt;code&gt;processes commands&lt;/code&gt; (&lt;code&gt;stdin&lt;/code&gt;) and&lt;br&gt;
&lt;code&gt;outputs&lt;/code&gt; the &lt;code&gt;results&lt;/code&gt; (&lt;code&gt;stdout&lt;/code&gt;). A &lt;code&gt;Shell&lt;/code&gt; is a &lt;code&gt;layer&lt;/code&gt; that &lt;code&gt;sits&lt;/code&gt; on &lt;code&gt;top&lt;/code&gt;&lt;br&gt;
of the &lt;code&gt;kernel&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  It &lt;code&gt;interprets&lt;/code&gt; and &lt;code&gt;processes&lt;/code&gt; the &lt;code&gt;commands&lt;/code&gt; entered by the user. Users
don't have access to the &lt;code&gt;kernel&lt;/code&gt;, but the &lt;code&gt;shell&lt;/code&gt; does. Users can only gain
access to the &lt;code&gt;kernel&lt;/code&gt; by using a &lt;code&gt;shell&lt;/code&gt; and entering &lt;code&gt;commands&lt;/code&gt; or
&lt;code&gt;running programs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;System calls&lt;/code&gt; are &lt;code&gt;used&lt;/code&gt; by &lt;code&gt;programs&lt;/code&gt; to &lt;code&gt;gain access&lt;/code&gt; to the &lt;code&gt;kernel&lt;/code&gt;'s
&lt;code&gt;functionality&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;Command Line&lt;/code&gt; is an &lt;code&gt;area&lt;/code&gt; to the &lt;code&gt;right&lt;/code&gt; of the &lt;code&gt;command prompt&lt;/code&gt; in the&lt;br&gt;
&lt;code&gt;Terminal window&lt;/code&gt; where a &lt;code&gt;user&lt;/code&gt; &lt;strong&gt;&lt;em&gt;enters&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;commands&lt;/code&gt; and &lt;code&gt;data&lt;/code&gt;. &lt;code&gt;This is&lt;/code&gt;&lt;br&gt;
the &lt;code&gt;line&lt;/code&gt; where we &lt;code&gt;type&lt;/code&gt; our &lt;code&gt;commands&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux Shells
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Linux shells&lt;/code&gt; can be &lt;code&gt;either be&lt;/code&gt; a &lt;code&gt;command line interpreter&lt;/code&gt; like &lt;code&gt;Terminal&lt;/code&gt;&lt;br&gt;
or a &lt;code&gt;graphical interpreter&lt;/code&gt; like &lt;code&gt;GNOME Shell&lt;/code&gt;. We can also &lt;code&gt;install&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;different&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;shells&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt;. &lt;code&gt;Examples&lt;/code&gt; &lt;strong&gt;&lt;em&gt;include&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;Bash&lt;/code&gt;, &lt;code&gt;Zsh&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;Fish&lt;/code&gt;, &lt;code&gt;sh&lt;/code&gt;, and &lt;code&gt;Ksh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;following&lt;/code&gt; are &lt;code&gt;two ways&lt;/code&gt; one can &lt;code&gt;list&lt;/code&gt; the &lt;code&gt;shells&lt;/code&gt; currently &lt;code&gt;available&lt;/code&gt;&lt;br&gt;
in one's &lt;code&gt;Linux distribution&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Using&lt;/code&gt; the &lt;code&gt;cat&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/shells
&lt;span class="c"&gt;# which returns:&lt;/span&gt;
&lt;span class="c"&gt;# /etc/shells: valid login shells&lt;/span&gt;
/bin/sh
/bin/Bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;grep&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s1"&gt;'^#'&lt;/span&gt; /etc/shells
&lt;span class="c"&gt;# which returns the same as with cat command except for the message:&lt;/span&gt;
/bin/sh
/bin/Bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;cat /etc/shells&lt;/code&gt; displays the contents of &lt;code&gt;/etx/shells&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;grep -v '^#' /etc/shells&lt;/code&gt; allows to &lt;code&gt;filter&lt;/code&gt; and &lt;code&gt;display&lt;/code&gt; only the &lt;code&gt;lines&lt;/code&gt;&lt;br&gt;
that contain &lt;code&gt;valid shell entries&lt;/code&gt;. The &lt;code&gt;regular expression&lt;/code&gt; &lt;code&gt;^&lt;/code&gt; &lt;code&gt;character&lt;/code&gt;&lt;br&gt;
means &lt;code&gt;beginning&lt;/code&gt; of the &lt;code&gt;line&lt;/code&gt;, and &lt;code&gt;#&lt;/code&gt; &lt;strong&gt;&lt;em&gt;means to&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;search&lt;/code&gt; for &lt;code&gt;lines&lt;/code&gt;&lt;br&gt;
that &lt;code&gt;begin&lt;/code&gt; with &lt;code&gt;#&lt;/code&gt;. But the &lt;code&gt;-v&lt;/code&gt; flag, or --invert-match, &lt;code&gt;means&lt;/code&gt; to &lt;code&gt;select&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;non-matching&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;lines&lt;/code&gt;, so &lt;code&gt;lines&lt;/code&gt; that &lt;code&gt;don't begin&lt;/code&gt; with &lt;code&gt;#&lt;/code&gt;, &lt;code&gt;which&lt;/code&gt;&lt;br&gt;
would &lt;code&gt;represent&lt;/code&gt; a &lt;code&gt;comment&lt;/code&gt;. &lt;code&gt;That&lt;/code&gt; is &lt;code&gt;why&lt;/code&gt; the comment&lt;br&gt;
&lt;code&gt;# /etc/shells: valid login shells&lt;/code&gt; &lt;strong&gt;&lt;em&gt;does&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;not&lt;/code&gt; &lt;strong&gt;&lt;em&gt;appear&lt;/em&gt;&lt;/strong&gt; here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux shell scripting
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Shell scripting&lt;/code&gt; (&lt;code&gt;not&lt;/code&gt; &lt;strong&gt;&lt;em&gt;just in&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;Linux&lt;/code&gt;) &lt;code&gt;refers&lt;/code&gt; to the &lt;code&gt;process&lt;/code&gt; of&lt;br&gt;
&lt;code&gt;writing scripts&lt;/code&gt; &lt;strong&gt;&lt;em&gt;using&lt;/em&gt;&lt;/strong&gt; (&lt;code&gt;Linux&lt;/code&gt;) &lt;code&gt;commands&lt;/code&gt;, which are then &lt;code&gt;interpreted&lt;/code&gt;&lt;br&gt;
by the &lt;code&gt;shell&lt;/code&gt; &lt;strong&gt;&lt;em&gt;installed in&lt;/em&gt;&lt;/strong&gt; &lt;code&gt;Linux&lt;/code&gt;. &lt;code&gt;Batch scripts&lt;/code&gt; in &lt;code&gt;Windows&lt;/code&gt; are the&lt;br&gt;
&lt;code&gt;equivalent&lt;/code&gt; to &lt;code&gt;shell scripts&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;most popular&lt;/code&gt; form of &lt;code&gt;shell scripting&lt;/code&gt; in &lt;code&gt;Linux&lt;/code&gt; is &lt;code&gt;Bash scripting&lt;/code&gt;,&lt;br&gt;
which means &lt;code&gt;writing&lt;/code&gt; and &lt;code&gt;executing scripts&lt;/code&gt; using the &lt;code&gt;Bash shell&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;Shell scripts&lt;/code&gt; are &lt;code&gt;used&lt;/code&gt; to &lt;code&gt;automate tasks&lt;/code&gt; and are &lt;code&gt;added&lt;/code&gt; to&lt;br&gt;
&lt;code&gt;crontab files&lt;/code&gt; as &lt;code&gt;cron jobs&lt;/code&gt;. To &lt;code&gt;learn&lt;/code&gt; how to &lt;code&gt;set up&lt;/code&gt; a basic &lt;code&gt;cron job&lt;/code&gt;&lt;br&gt;
using the &lt;code&gt;Cron daemon&lt;/code&gt;, &lt;code&gt;please visit&lt;/code&gt; my &lt;code&gt;article&lt;/code&gt; entitled&lt;br&gt;
&lt;a href="https://dev.to/blog/the-cron-daemon-in-linux-and-how-to-create-a-cron-job"&gt;The Cron daemon in Linux and how to create a cron job&lt;/a&gt;.&lt;br&gt;
I will be &lt;code&gt;adding&lt;/code&gt; more &lt;code&gt;articles&lt;/code&gt; regarding &lt;code&gt;creating&lt;/code&gt; different &lt;code&gt;cron jobs&lt;/code&gt; in&lt;br&gt;
the &lt;code&gt;near future&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Footnotes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;[^1]&lt;/strong&gt;: a&lt;br&gt;
&lt;a href="https://www.suse.com/suse-defines/definition/hypervisor/of" rel="noopener noreferrer"&gt;hypervisor&lt;/a&gt; is a&lt;br&gt;
program that separates a computer's OS and applications from the underlying&lt;br&gt;
physical hardware. This is what enables virtualization and cloud computing&lt;br&gt;
solutions for modern IT infrastructures.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;hypervisor&lt;/code&gt; allows the physical host machine to operate multiple virtual&lt;br&gt;
machines (VMs like VirtualBox, for example) as guests. This increases the&lt;br&gt;
effectiveness of computing resources such as memory, network bandwidth, disk&lt;br&gt;
space and CPU cycles.&lt;/p&gt;

&lt;p&gt;VMs can run on the same physical hardware, but they are logically separated from&lt;br&gt;
each other, preventing a failure in one VM from affecting other VMs on the same&lt;br&gt;
physical machine.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;hypervisor&lt;/code&gt; creates, runs, and manages virtual machines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[^2]&lt;/strong&gt;: The &lt;code&gt;boot process&lt;/code&gt; is the process of loading an OS. It starts when we&lt;br&gt;
turn on a computer and ends when the OS is loaded into memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[^3]&lt;/strong&gt;: &lt;code&gt;Linux package metadata&lt;/code&gt; describes a package for its consumers: who&lt;br&gt;
wrote it, where its repository is, and what versions of it have been published.&lt;br&gt;
It also contains a description of each version of a package present in the&lt;br&gt;
registry, listing its dependencies, giving the url of its tarball, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.baeldung.com/linux/popular-bootloaders" rel="noopener noreferrer"&gt;How to Install and Use Popular Linux Bootloaders&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;baeldung.com&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.baeldung.com/cs/computer-boot-process" rel="noopener noreferrer"&gt;Computer Boot Process Explained&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;baeldung.com&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@jasurbek.go.dev/the-linux-filesystem-95673f4e3bd5" rel="noopener noreferrer"&gt;The Linux Filesystem&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;by perfectogo, medium.com&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.linuxfoundation.org/blog/blog/classic-sysadmin-the-linux-filesystem-explained" rel="noopener noreferrer"&gt;Classic SysAdmin: The Linux Filesystem Explained&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;The Linux Foundation&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://lym.readthedocs.io/en/latest/index.html" rel="noopener noreferrer"&gt;Linux command line for you and me!¶&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;LYM&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/difference-between-terminal-console-shell-and-command-line/" rel="noopener noreferrer"&gt;Difference between Terminal, Console, Shell, and Command Line&lt;/a&gt;:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Geeks for Geeks&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.makeuseof.com/tag/linux-confusing-key-terms-definitions/" rel="noopener noreferrer"&gt;15 Linux Terms, Jargons, and Lingo You Should Know About&lt;/a&gt;:&lt;strong&gt;_&lt;br&gt;
makeuseof_&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>commandline</category>
      <category>linuxkernel</category>
      <category>gnu</category>
      <category>linuxdistribution</category>
    </item>
  </channel>
</rss>
