What are the Different Types of Shells in Linux?
Shells are an important part of any Linux user session. We are provided several different types of shells in Linux to accomplish tasks. Each shell has unique properties. Hence, there are many instances where one shell is better than the other for specific requirements.
This makes it important for us to be aware about the different types of shells available in Linux. In this tutorial, we will discuss what is a shell and why is it important. Further, we will explore different types of shells in Linux to understand their functions and properties.
What is a Shell, and Why do we need them?
Whenever a user logs in to the system or opens a console window, the kernel runs a new shell instance. The kernel is the heart of any operating system.
It is responsible for the control management, and execution of processes, and to ensure proper utilization of system resources.
A shell is a program that acts as an interface between a user and the kernel. It allows a user to give commands to the kernel and receive responses from it. Through a shell, we can execute programs and utilities on the kernel. Hence, at its core, a shell is a program used to execute other programs on our system.
Being able to interact with the kernel makes shells a powerful tool. Without the ability to interact with the kernel, a user cannot access the utilities offered by their machine’s operating system.
Let’s understand the major shells that are available for the Linux environment.
Different Types of Shells in Linux
If you now understand what a kernel is, what a shell is, and why a shell is so important for Linux systems, let’s move on to learning about the different types of shells that are available. Each of these shells has properties that make them highly efficient for a specific type of use over other shells. So let us discuss the different types of shells in Linux along with their properties and features.
1. The Bourne Shell (sh)
Developed at AT&T Bell Labs by Steve Bourne, the Bourne shell is regarded as the first UNIX shell ever. It is denoted as sh. It gained popularity due to its compact nature and high speeds of operation.
This is what made it the default shell for Solaris OS. It is also used as the default shell for all Solaris system administration scripts.
However, the Bourne shell has some major drawbacks.
- It doesn’t have in-built functionality to handle logical and arithmetic operations.
- Also, unlike most different types of shells in Linux, the Bourne shell cannot recall previously used commands.
- It also lacks comprehensive features to offer a proper interactive use.
The complete path-name for the Bourne shell is /bin/sh and /sbin/sh. By default, it uses the prompt # for the root user and $ for the non-root users.
2. The GNU Bourne-Again Shell (bash)
More popularly known as the Bash shell, the GNU Bourne-Again shell was designed to be compatible with the Bourne shell. It incorporates useful features from different types of shells in Linux such as Korn shell and C shell. It allows us to automatically recall previously used commands and edit them with help of arrow keys, unlike the Bourne shell. The complete path-name for the GNU Bourne-Again shell is /bin/bash. By default, it uses the prompt bash-VersionNumber# for the root user and bash-VersionNumber$ for the non-root users.
3. The C Shell (csh)
The C shell was created at the University of California by Bill Joy. It is denoted as csh. It was developed to include useful programming features like in-built support for arithmetic operations and a syntax similar to the C programming language. Further, it incorporated command history which was missing in different types of shells in Linux like the Bourne shell. Another prominent feature of a C shell is “aliases”. The complete path-name for the C shell is /bin/csh. By default, it uses the prompt hostname# for the root user and hostname% for the non-root users.
4. The Korn Shell (ksh)
The Korn shell was developed at AT&T Bell Labs by David Korn, to improve the Bourne shell. It is denoted as ksh. The Korn shell is essentially a superset of the Bourne shell. Besides supporting everything that would be supported by the Bourne shell, it provides users with new functionalities. It allows in-built support for arithmetic operations while offering interactive features which are similar to the C shell. The Korn shell runs scripts made for the Bourne shell, while offering string, array and function manipulation similar to the C programming language. It also supports scripts which were written for the C shell. Further, it is faster than most different types of shells in Linux, including the C shell. The complete path-name for the Korn shell is /bin/ksh. By default, it uses the prompt # for the root user and $ for the non-root users.
5. The Z Shell (zsh)
The Z Shell or zsh is a sh shell extension with tons of improvements for customization. If you want a modern shell that has all the features a much more, the zsh shell is what you’re looking for.
Some noteworthy features of the z shell include:
- Generate filenames based on given conditions
- Plugins and theming support
- Index of built-in functions
- Command completion
- and many more…
Let us summarise the different shells in Linux which we discussed in this tutorial in the table below.
Shell | Vollständiger Pfadname | Prompt für Root-Benutzer | Prompt für Nicht-Root-Benutzer |
---|---|---|---|
Bourne-Shell (sh) | /bin/sh und /sbin/sh | # | $ |
GNU Bourne-Again-Shell (bash) | /bin/bash | bash-VersionNumber# | bash-VersionNumber$ |
C-Shell (csh) | /bin/csh | hostname# | hostname% |
Korn-Shell (ksh) | /bin/ksh | # | $ |
Z-Shell (zsh) | /bin/zsh | <hostname># | <hostname>% |
Wrapping up
Shells are one of, if not the most powerful tools available to a Linux user. Without shells, it is practically impossible for a person to utilise the features and functionality offered by the kernel installed on their system.
While we covered only the most commonly used types of shells in Linux, there are many other shell types worth exploring.
We hope this tutorial was able to help you to understand the concept of shells, along with the properties of the different types of shells in Linux.