Unix shells
Shell evolution
Terminal environments
Linux shells
Package managers
macOS shells
A shell
is a command-line interface
that allows users to interact with the operating system
by typing commands.
It serves as a bridge
between the user and the system's core functions, enabling you to execute commands
, run programs
, manage files
, and perform various tasks
on your computer.
1. Thompson Shell (1971)
- Year: 1971
- Created By: Ken Thompson at Bell Labs.
- Operating System: Unix
- Overview: The first Unix shell, simple and minimal. It provided the basic command-line interface for Unix.
- Evolution: Laid the groundwork for future shells but was soon replaced by more powerful alternatives.
2. Bourne Shell (sh) (1979)
- Year: 1979
- Created By: Stephen Bourne at Bell Labs.
- Operating System: Unix, later adopted by Linux and macOS.
- Overview: The Bourne Shell (
sh
) introduced scripting capabilities and became the standard shell in Unix systems. - Evolution: Its syntax and behavior influenced many subsequent shells, and it became the basis for the POSIX standard. Widely used in system scripts.
3. C Shell (csh) (1978)
- Year: 1978
- Created By: Bill Joy at the University of California, Berkeley.
- Operating System: BSD Unix, later available on other Unix systems.
- Overview: The C Shell (
csh
) introduced a syntax similar to the C programming language and added features like command history and aliases. - Evolution: Criticized for scripting limitations, leading to the development of alternatives like
tcsh
.
4. KornShell (ksh) (1983)
- Year: 1983
- Created By: David Korn at Bell Labs.
- Operating System: Unix, Linux, AIX (IBM Unix), Solaris.
- Overview: KornShell (
ksh
) combined features from both Bourne Shell and C Shell, adding advanced scripting capabilities, including arrays and functions. - Evolution: Popular in commercial Unix systems and influenced the development of
Bash
.
5. Bourne Again Shell (Bash) (1989)
- Year: 1989
- Created By: Brian Fox for the GNU Project.
- Operating System: Linux (default shell), macOS (default until 2019), and Unix-like systems.
- Overview: Bash (
Bourne Again SHell
) extended Bourne Shell with features from C Shell and KornShell, including command-line editing, history, and job control. - Evolution: Became the default shell for many Linux distributions and macOS until macOS switched to Zsh in 2019. Continues to be widely used and updated.
6. Z Shell (Zsh) (1990)
- Year: 1990
- Created By: Paul Falstad.
- Operating System: Unix, Linux, macOS (default shell since 2019).
- Overview: Zsh (
Z Shell
) incorporated features from Bash, ksh, and tcsh, and added many of its own, including powerful scripting capabilities, customizable prompts, and advanced completion features. - Evolution: Zsh became popular among power users and developers for its flexibility and customization options. It became the default shell on macOS starting with macOS Catalina in 2019.
7. TENEX C Shell (tcsh) (1983)
- Year: 1983
- Created By: Ken Greer at Carnegie Mellon University.
- Operating System: BSD Unix, Linux, macOS, other Unix-like systems.
- Overview: Tcsh is an enhanced version of C Shell (
csh
) that includes command-line editing, spell correction, and programmable completion. - Evolution: Tcsh remains in use, particularly in environments where C Shell was already established.
8. Fish Shell (2005)
- Year: 2005
- Created By: Axel Liljencrantz.
- Operating System: Unix, Linux, macOS, BSD.
- Overview: The Fish Shell (
Friendly Interactive SHell
) was designed to be user-friendly, with features like syntax highlighting, autosuggestions, and web-based configuration. - Evolution: Fish is gaining popularity due to its ease of use, particularly among users who prefer a modern, out-of-the-box shell experience without extensive configuration.
9. PowerShell (2006)
- Year: 2006
- Created By: Microsoft.
- Operating System: Windows (originally), later open-sourced and available on Linux and macOS.
- Overview: PowerShell is a command-line shell and scripting language focused on task automation and configuration management. It is object-oriented and tightly integrated with the Windows environment.
- Evolution: Initially available only on Windows, PowerShell has been open-sourced and made available on macOS and Linux. It has become a critical tool for system administrators.
10. Elvish Shell (2016)
- Year: 2016
- Created By: Xiaq (Qi Xiao).
- Operating System: Unix, Linux, macOS, BSD.
- Overview: Elvish is a modern shell focused on interactive use, featuring a structured programming model, built-in syntax highlighting, and support for advanced data types.
- Evolution: Elvish is still relatively new and is evolving, with a growing community of users who appreciate its fresh approach to shell design.
11. Dash (Debian Almquist Shell) (1997)
- Year: 1997
- Created By: Herbert Xu.
- Operating System: Linux, especially in Debian-based systems.
- Overview: Dash is a lightweight POSIX-compliant shell that was developed as a replacement for
ash
(Almquist Shell). It is designed to be fast and simple, primarily used in scripting, especially as/bin/sh
in Debian-based systems. - Evolution: Dash is used in environments where performance and POSIX compliance are prioritized over the advanced features of shells like Bash.
Terminal Environments:
- Terminal (macOS)
- Operating System: macOS
- Overview: Terminal is a terminal emulator that provides a graphical interface for interacting with the underlying shell (like Zsh, Bash, or sh).
- Evolution: Terminal on macOS allows access to various shells and provides the standard interface for command-line operations on macOS.
- iTerm2 (2010)
- Operating System: macOS
- Overview: iTerm2 is a popular alternative to macOS's default Terminal, offering features like split panes, advanced search, and extensive customization options.
- Evolution: iTerm2 has become the go-to terminal emulator for power users on macOS, offering more features and customization than the default Terminal app.
Package Managers:
- Homebrew (brew) (2009)
- Operating System: macOS, Linux (via Linuxbrew)
- Overview:
Homebrew
is a package manager that simplifies the installation of software, libraries, and command-line tools. It’s commonly used withinshell environments
. - Evolution:
Homebrew
has become the standard package manager formacOS
, making it easy toinstall and manage
software packages.
- APT (Advanced Package Tool) (1998)
- Operating System: Debian-based
Linux
distributions (e.g.,Ubuntu
) - Overview:
APT
is a package manager for Debian-based systems, used toinstall, update, and manage software packages
. - Evolution:
APT
has become the default package management system for Debian-based distributions, known for its ease of use and robust dependency handling.
- Operating System: Debian-based
- Yum (Yellowdog Updater, Modified) (2003)
- Operating System: RPM-based Linux distributions (e.g., Red Hat, CentOS, Fedora)
- Overview: Yum is a package manager for RPM-based Linux distributions, providing similar functionality to APT in Debian-based systems.
- Evolution: Yum has been widely used in enterprise environments, and has evolved into DNF (Dandified Yum) in newer distributions.
Evolution Summary:
- 1970s-1980s: The development of the Thompson Shell, Bourne Shell, and C Shell established the foundation of command-line interaction and scripting in Unix systems.
- 1980s: The introduction of KornShell and the enhancement of C Shell with tcsh provided users with more features and scripting capabilities.
- 1990s: Bash and Zsh emerged, incorporating features from earlier shells and adding new ones, becoming the dominant shells in Unix-like systems.
- 2000s: PowerShell introduced a new paradigm in command-line interaction with object-oriented scripting, specifically for Windows environments. Package managers like APT and Yum became integral to Linux.
- 2010s and Beyond: Modern shells like Fish and Elvish focus on improving user experience and interactivity, while package managers like Homebrew simplify software management on macOS and Linux.