There are few subjects for a beginner as esoteric as the “shell" of a Linux system, yet it’s really not that complicated at all. Here’s a basic overview of what a Linux shell is and the myriad of different types of shells found within Linux systems.
What Is A Shell?
Linux isn’t the only system to use a shell, of course. In the most generic sense possible, a shell is any interface through which a user can interact with the computer operating system—or kernel, as it’s known as in Linux systems. After all, most people aren’t fluent in the 1s and 0s of binary that computers use, so the shell acts as a sort of interpretor between the user and the computer.
With Linux systems, virtually every program technically qualifies as a shell. There are many different types of shells, all providing different sorts of interfaces for different sort of functions.
BASH & Other Shells
These are the most basic types of shells for Linux systems, providing as direct an interface between the user and the kernel as possible without actually developing fluency in binary. These are text-based, meaning that you input via the keyboard.
BASH, or Bourne Again Shell, is probably the most common such shell with Linux systems, and usually comes as default. It is available from the Free Software Foundation. Also found in Linux systems are the original sh (Bourne SHell), CSH (C Shell), KSH (Korn Shell), and TCSH (Tenex C SHell) and ZSH (Z SHell.) All of these shells do essentially the same thing, but provide slightly different built in functions for users. Check out this article for the nitty gritty technical pieces of these shells.
Within these shells, one typically enters data via some sort of command line. There are a myriad of commands available with which you can interact with the operating system—no one user knows them all.
There is an important difference between a shell command and a Linux command. Shell commands are built into the shell itself, being specific to the shell that you are using, and otherwise do not vary from computer to computer. They tend to do do the most basic functions of the computer. Here’s a list of common shell commands.
Linux commands, on the other hand, are written in some other sort of programming language, typically C. These are specific to the distro that you are using, though many are standard across the different distros.
But of course… how does one provide input into the command line?
The Terminal, And Other Ways To Interact
The most common way to type in command lines is via the terminal. On the terminal, one can enter any number of terminal commands to manually control the computer, from editing driver information to installing programs. Oftentimes, however, the intricacy of the commands are so technically demanding that many users become discouraged.
As such, there are also many programs that run within the terminal, from internet browsers to programs to configure the wireless. A shell within a shell, one might say. These are even easier interfaces for users to manipulate their system.
Of course, there are then programs that run yet one layer more indirectly—think of your internet connection software, or even up to such high level, front-end programs as Mozilla Firefox. All of these are, technically, shells—it just depends on how direct or indirect they are to interacting with the original kernel and the computer system as a whole.
Of course, some of us are a little more visual. Graphical shells, or visual shells, are another type of shell that virtually all distros of Linux utilize. These are the graphical user interfaces, through which the user can interact with the rest of the system. Common ones include GNOME, KDE and Xfce.