The Linux Terminal Preamble

The Linux Terminal Preamble

Hello there,

This is my first post in the terminal guide series. The terminal guide series shares some of my knowledge about the terminals with you.

Who is This Series for?

Everyone who wants to learn more about terminals can read this series. From absolute beginners to more advanced users. With that said, the first few posts will target beginners.

This post particularly aims to explain the meaning of different terms.

Why Did I Create This Series?

I have become a better programmer ever since I learned how to better use my terminal. My everyday coding experience has improved a lot since then. So, I thought that I should record my knowledge in blog series for everyone else to read.

"The Linux Terminal Preamble" is an introduction talk about the meaning of different terms. Thus today I won’t go into any of the more advanced topics. That I will leave for my future blog posts.

What are Terminals?

Word Terminal is a synonym that refers to a Terminal Emulator. A Terminal Emulator is a crucial part of any system because it allows you to access the system through a shell.

What are Shells?

A Shell is a program that takes commands from the user and gives them to the operating system kernel to execute. Another name for the Shell is Command Interpreter. The Shell starts when the user logs in or starts the terminal.

There are different types of shells out there but the most used shell is the Bourne Again Shell also known as bash. Bash is the default login shell for many Linux distributions.

Some of the Linux distributions that come with bash are: Ubuntu, Mint, Debian, CentOS.

If you are using Windows OS, you also have an option to use bash through WSL (Windows Subsystem for Linux). WSL is a subsystem that runs Linux distribution hence you will have the access to the bash. I personally, dislike using WSL on Windows and prefer to run Ubuntu as my working OS.

Other shell implementations are C Shell, Z Shell, Korn Shell, Fish Shell, and Bourne Shell.

What is The Difference Between Terminal & Shell?

A terminal is a graphical application where the default shell will start.

The shell is a command interpreter that checks if the commands inputted by the user are syntactically correct before it passes them to the system kernel.

It is important that you can make a clear difference between the meaning of these two terms.

There are a lot of terminals out there. The most used one is the GNOME terminal. GNOME Terminal is the default terminal in Ubuntu and CentOS. There are other examples of terminal emulators, such as Quake, Terminator, and Alacritty.

If you were to set up a fresh Ubuntu system, you would get GNOME as a default terminal and bash as the default shell.

What are Consoles?

A console is a special kind of terminal that starts if no graphical interface is installed. You start the console in a text-only interface, compared to the terminal which you start in the graphical interface.

Linux systems provide many virtual consoles and are usually accessed via keyboard shortcuts ctrl + alt + F1…F8. An important note is that if there is a graphical interface already installed and it is started, then one of the consoles will already be used when the user logged in.

A common misconception comes from the fact that the terminal, shell, and console can all look pretty much the same from the user's point of view. Thus, sometimes people tend to use the words terminal and console interchangeably. Console and terminal are not the same things.

What are Shell Commands?

Commands are built-in programs or utilities that we can use to interact with the system. Shell will take commands we inputted in the terminal, check if they are syntactically correct, and pass them to the kernel.

What is Case Sensitivity?

Compared to Windows, Linux is a case-sensitive system. What this means is that the Windows file system treats file and directory names as case-insensitive. Example.txt and example.txt will be treated as the same file in Windows. Yet, the Linux file system treats file and directory names as case-sensitive. So the two examples above would be treated as two different files.

What is Next?

Now that we have covered some of the basic terminology, we will need to setup our development environment. I will create a separate post on this subject. The post will be called "Setting Up The Environment". In that post I will talk about Linux distributions, how to install Ubuntu in a virtual machine and much more.

Thank you for reading, and if you have any thoughts on how I can improve my blog feel free to leave a comment.

Did you find this article valuable?

Support Nemanja Manojlovic by becoming a sponsor. Any amount is appreciated!