How to Change Default Shell in Linux

Change Default Shell in Linux

In the world of Linux, the shell is more than just a tool; it’s the lifeline that connects the user to the system, enabling them to execute commands, run scripts, and manage files and processes. With a variety of shells available, each offering unique features and capabilities, Linux provides a flexible and customizable environment that can be tailored to suit the needs of any user. This article delves into the process of changing the default shell in Linux, providing a comprehensive guide filled with step-by-step instructions, troubleshooting tips, and additional resources. Whether you’re a seasoned Linux user or a beginner just starting your journey, this guide will equip you with the knowledge and confidence to customize your Linux experience to your liking.

Understanding the Default Shell

Before diving into the process of changing the default shell, it’s crucial to understand what a shell is and how to identify your current default shell. In Linux, a shell is a command-line interpreter that provides an interface for users to interact with the system. It reads and interprets commands, allowing users to execute programs, manage files, and perform other tasks.

To identify your current default shell, you can use the echo $SHELL command in the terminal. This command will print the full path to your current default shell. For instance, if your default shell is bash, the command will return /bin/bash.

Another way to identify your default shell is by examining the /etc/passwd file. This file contains essential information about user accounts, including the default shell. To view your account information, you can use the grep command followed by the whoami command, which returns your username. The command would look like this: grep $(whoami) /etc/passwd. The output will include a line with several fields separated by colons, with the last field indicating the path to your default shell.

Available Shells in Linux

Linux supports a variety of shells, each with its unique features and capabilities. Some of the most popular shells include:

  • Bash (Bourne Again Shell): This is the default shell for most Linux distributions. It’s a superset of the original Bourne Shell, with additional features such as command-line editing and command history.
  • Zsh (Z Shell): Zsh is a powerful shell that includes many features of other shells, along with some unique features of its own. It offers advanced scripting capabilities, command-line completion, spelling correction, and more.
  • Tcsh (TENEX C Shell): This is an enhanced version of the original C Shell. It includes features like command-line editing, job control, and command aliasing.
  • Ksh (Korn Shell): Developed by David Korn at AT&T Bell Labs, Ksh is a high-level programming shell that includes features from both Bash and C Shell.

To list the shells installed on your Linux system, you can use the cat /etc/shells command. This command will print a list of all installed shells, with each shell represented by its full path.

Changing the Default Shell

Changing the default shell in Linux is a straightforward process that involves the chsh (change shell) command. Here’s a step-by-step guide on how to do it:

  1. Identify the full path of the new shell: Before you can change your default shell, you need to know the full path of the new shell. You can find this by running the cat /etc/shells command, which lists all installed shells along with their paths.
  2. Change the default shell: To change your default shell, use the chsh command followed by the -s (shell) option and the full path to the new shell. For example, if you want to change your default shell to Zsh, you would run chsh -s /bin/zsh. You’ll be prompted to enter your password to confirm the change.
  3. Log out and log back in: After changing your default shell, you’ll need to log out and log back in for the change to take effect. This is because the shell for your current session is determined at login, so any changes to your default shell won’t apply until your next login.

It’s important to note that the chsh command can only change local entries. If your user account is stored in a networked system like LDAP or NIS, or if it uses a remote authentication scheme like Kerberos, you won’t be able to use chsh to change your default shell.

Alternative Methods to Change the Default Shell

If you can’t use the chsh command, there are other ways to change your default shell:

  • Using the usermod command: The usermod command allows you to modify user account information, including the default shell. To use it, you would run sudo usermod -s /path/to/new/shell username. Replace /path/to/new/shell with the full path to the new shell and username with your username. Note that you’ll need root privileges to use this command.
  • Editing the /etc/passwd file: You can also change your default shell by editing the /etc/passwd file. To do this, you would open the file in a text editor with root privileges, find the line for your user account, and change the path at the end of the line to the path of the new shell. Be careful when editing this file, as incorrect changes can cause problems with your user account.
  • Using the exec command: If you want to change the shell for a single session without changing your default shell, you can use the exec command followed by the name of the new shell. For example, exec zsh would replace your current shell with Zsh for the duration of the session.

Verifying the Change

After changing your default shell, it’s a good idea to verify that the change was successful. You can do this by running the echo $SHELL command in a new terminal session. This command should return the full path to your new default shell.

If the echo $SHELL command still shows your old shell, don’t panic. The $SHELL environment variable is set at login and doesn’t change when you change your default shell. If you’ve logged out and logged back in and the command still shows your old shell, then there may be an issue with your change.

Troubleshooting Tips

If you’re having trouble changing your default shell, here are some tips that might help:

  • Check your spelling and syntax: Make sure you’re typing the commands correctly and using the correct syntax. A small typo can cause a command to fail or behave unexpectedly.
  • Check the path to the new shell: Make sure you’re using the correct path to the new shell. You can find the correct path by running the cat /etc/shells command.
  • Check your permissions: Some methods of changing the default shell require root privileges. If a command fails with a “permission denied” error, try running it with sudo.
  • Consult the man pages: The man pages are a valuable resource for understanding how commands work. If you’re unsure about a command or option, try running man command to view the man page for that command.

Best Practices

Changing your default shell is a powerful way to customize your Linux experience, but it’s not without its risks. Here are some best practices to keep in mind:

  • Understand the implications: Before changing your default shell, make sure you understand what you’re doing and why. Different shells have different features and syntax, and scripts written for one shell may not work in another.
  • Document your changes: Keep track of any changes you make to your system, including changing your default shell. This can help you troubleshoot issues and revert changes if necessary.
  • Use version control for your scripts: If you write shell scripts, consider using a version control system like Git to manage your scripts. This can help you keep track of changes, collaborate with others, and revert changes if something goes wrong.


Changing the default shell in Linux is a powerful way to tailor your system to your needs. Whether you’re looking for a shell with more features, better scripting capabilities, or just a different look and feel, Linux has a shell that’s right for you. With the knowledge and resources provided in this guide, you’re well-equipped to make this change confidently and effectively. So go ahead, explore the different shells, and find the one that best suits your needs. Happy shelling!


r00t is a seasoned Linux system administrator with a wealth of experience in the field. Known for his contributions to, r00t has authored numerous tutorials and guides, helping users navigate the complexities of Linux systems. His expertise spans across various Linux distributions, including Ubuntu, CentOS, and Debian. r00t's work is characterized by his ability to simplify complex concepts, making Linux more accessible to users of all skill levels. His dedication to the Linux community and his commitment to sharing knowledge makes him a respected figure in the field.
Back to top button