Every Linux distribution has a default shell but there are numerous shells available in Linux and you can switch between them or install them if unavailable. A shell is what you use when you want to parse or send commands to your Linux OS.
While the default shell on your Linux does most functions well, there are instances where you may need to use other shells that have better functionality for a given task. The only way to know what shell you can use is to first understand what shells are available and their features. This post will discuss the most popular types of shells in Linux. Let’s get started!
What is a Shell in Linux?
Any Linux user session relies on a shell to interact with the underlying operating system. A shell is a Linux program that allows the user to interact with the operating system by acting as the interface between the user and the Linux kernel.
Any operating system, including Linux, relies on its kernel to control and manage processes and resources. As the user, you can only communicate with the kernel through a shell. It’s through the Linux shell that you can parse and send commands. The kernel will receive the commands, interpret them, and execute them on your Linux OS.
Having understood what a Linux shell is, let’s understand the different types of shells you can use.
6 Types of Linux Shells
There are different Linux shells. As we discuss them, you will notice that some have borrowed features. Nonetheless, by discussing each, you will understand the best time to use them for different convenience.
1. Bourne Shell (sh)
The Bourne Shell is the most widely known shell, especially because it was the initial shell in Unix systems. Moreover,it was released in 1979 and you will find it in the /bin/sh.
The Bourne shell is popular because of its fast and compact nature. The Bourne Shell is denoted as sh and it is the default shell on Solaris OS. Although it has high speeds of operations, the sh doesn’t support logical and arithmetic operations. Additionally, it has no history feature to recall previously executed commands.
2. C Shell (csh)
The csh was developed in the 1970s and the main focus was to mimic the C language. The csh aims to create stylistic consistency across the system and you will find it at /bin/csh.
With csh, it uses % for regular users and the # for root. Some of its features include, saving history for previously executed commands. Moreover, it allows user-defined aliases and offers built-in expression grammar.
However, it has syntax inconsistencies and it doesn’t support stdio file handles.
3. Bourne-Again Shell (bash)
The Bourne-Again Shell was created in 1989 as an extension of the Bourne Shell. It is denoted as bash and it’s the default shell on most Linux distributions.
With bash, it uses # for root and $ for regular users. It offers brace expansion, command history, signal handling, basic debugging, command auto-fill, and works with conditional commands, such as bash case and if statements.
4. The Korn Shell (ksh)
Similar to sh, the ksh was developed at AT&T Bell Labs to offer improvements on the Bourne Shell. It uses # for root and $ for regular users.
With ksh, you will enjoy additional features, such as built-in mathematical functions. Moreover, it supports object oriented programming and has extensibility of built-in commands. Using the ksh feels like working with a superscript of the Bourne Shell.
5. TENEX C Shell (tcsh)
It an extension of the C shell. It uses hostname:directory> for regular users and hostname:directory# for the root user. You will find it as the default shell in FreeBSD and some early versions of Mac OS.
It’s features include, job control, wildcard matching, and advanced command history.
6. The Z Shell (zsh)
The zsh was created as an extension of the Bourne shell. Notably, it offers different options for customization and it borrows most features from tcsh and ksh.
The zsh is located in the /bin/zsh path and it uses % for regular users and hostname# if running as the root. The zsh is the default shell on Mac OS and Kali Linux.
The zsh stands out for offering room for customizations and extensibility using plugins. Moreover, it has different compatibility modes and has a shared history across all running shell sessions. Lastly, it offers command auto-fill and spelling corrections.
Conclusion
There are several types of shells in Linux and which to use will depend on the functionalities you want to utilize. However, each Linux distribution comes with a default shell but you can install other shells and change to them at will. We’ve discussed the six commonly used Linux shells, mentioning their key features to create a reference whenever you want to try them out.