Switching your default shell in Linux opens up new command-line possibilities. If you are wondering how to change shell in linux, this guide walks you through every step clearly and quickly.
Your shell is the interface between you and the Linux kernel. Changing it can improve your workflow, add features like auto-completion, or simply match your personal preference.
This article covers everything from checking your current shell to setting a new one permanently. You will also learn common pitfalls and how to avoid them.
What Is A Shell In Linux?
A shell is a command-line interpreter. It reads your commands and executes them. Linux offers many shells, each with unique features.
The most common shells include:
- Bash (Bourne Again Shell) – default on most distributions
- Zsh (Z Shell) – powerful with plugins and themes
- Fish (Friendly Interactive Shell) – user-friendly with syntax highlighting
- Sh (Bourne Shell) – minimal and POSIX-compliant
- Ksh (Korn Shell) – combines features of Bash and C shell
- Tcsh – enhanced version of C shell
Each shell has its own scripting syntax and interactive features. Choosing the right one depends on your needs.
How To Check Your Current Shell
Before you change anything, know what shell you are using now. Open your terminal and run one of these commands:
echo $SHELL
This shows the path to your default shell. For example, /bin/bash or /usr/bin/zsh.
You can also check the current session shell with:
echo $0
This tells you which shell is running right now. It might differ from your default if you started a subshell.
How To Change Shell In Linux Temporarily
You can switch shells for a single session without changing your default. Just type the shell’s name and press Enter.
For example:
zsh
This starts Zsh immediately. To exit back to your original shell, type exit or press Ctrl+D.
Temporary changes are useful for testing a shell before making it permanent. You can try Fish, Ksh, or any other installed shell the same way.
How To Change Shell In Linux Permanently
Making a shell permanent means it becomes your default every time you open a terminal. There are two main methods.
Using The Chsh Command
The chsh command (change shell) is the standard way. It updates your entry in the /etc/passwd file.
Steps:
- Open a terminal.
- Run
chsh -s /path/to/shell. Replace/path/to/shellwith the full path of your desired shell. - Enter your password when prompted.
- Log out and log back in, or restart your terminal.
Example to set Zsh as default:
chsh -s /usr/bin/zsh
To find the path of an installed shell, use:
which zsh
This returns something like /usr/bin/zsh.
Editing The Passwd File Manually
Advanced users can edit the /etc/passwd file directly. Use a text editor with root privileges.
sudo nano /etc/passwd
Find your username line. It looks like:
username:x:1000:1000:User,,,:/home/username:/bin/bash
Change /bin/bash to your desired shell path, like /usr/bin/zsh. Save and exit. Then log out and back in.
Be careful: a wrong entry can lock you out of your account. Always double-check the path.
How To Change Shell In Linux For Root User
Changing the root shell follows the same process but requires root privileges.
Run:
sudo chsh -s /usr/bin/zsh root
Or edit /etc/passwd as root. Be cautious: root’s shell affects system scripts and recovery mode.
How To Change Shell In Linux For Another User
As an administrator, you can change another user’s shell.
Use:
sudo chsh -s /usr/bin/fish username
Replace username with the actual username. The user must log out and back in for the change to take effect.
How To Install A New Shell
If your desired shell is not installed, you need to add it first. Use your package manager.
On Debian/Ubuntu (APT)
sudo apt update
sudo apt install zsh fish ksh tcsh
On Red Hat/CentOS/Fedora (YUM/DNF)
sudo dnf install zsh fish ksh tcsh
On Arch Linux (Pacman)
sudo pacman -S zsh fish ksh tcsh
After installation, verify the shell path with which.
How To Change Shell In Linux Using Graphical Tools
Some desktop environments offer GUI options. For example, in GNOME, you can change the default shell through the User Settings panel.
Steps:
- Open Settings.
- Go to Users.
- Unlock the settings (click Unlock and enter password).
- Click on your current shell under the user name.
- Select a new shell from the dropdown.
- Click Change.
This method is simpler but less flexible. Not all shells appear in the list unless they are properly registered.
Common Shell Configuration Files
After changing your shell, you might want to customize it. Each shell uses its own configuration file.
- Bash:
~/.bashrc,~/.bash_profile - Zsh:
~/.zshrc - Fish:
~/.config/fish/config.fish - Ksh:
~/.kshrc - Tcsh:
~/.tcshrcor~/.cshrc
Edit these files to set aliases, environment variables, and prompt styles. For example, to add an alias in Zsh:
echo 'alias ll="ls -la"' >> ~/.zshrc
source ~/.zshrc
Troubleshooting Common Issues
Sometimes changing shells does not work as expected. Here are solutions to frequent problems.
Shell Not Found After Change
If you see “Shell not found” or “Invalid shell”, the path might be wrong. Use chsh -l to list valid shells on your system.
chsh -l
This shows all shells listed in /etc/shells. If your shell is missing, add it manually.
sudo nano /etc/shells
Add the full path, like /usr/bin/zsh, save, and retry.
Terminal Opens With Old Shell
If your terminal still uses the old shell after changing, you might need to log out completely or restart the system. Some terminal emulators cache the shell.
Try:
exec $SHELL
This replaces the current session with your new default shell.
Permission Denied
If you get “Permission denied” when running chsh, you likely need sudo or your user account lacks privileges. Use sudo chsh or ask your administrator.
How To Change Shell In Linux Without Logging Out
You can switch shells instantly in the current terminal without logging out. Use the exec command.
exec zsh
This replaces the current shell process with Zsh. It is temporary for that session only. To make it permanent, use chsh as described earlier.
How To Change Shell In Linux For Scripts
When writing scripts, the shebang line defines which shell interprets the script. For example:
#!/bin/bash
Or:
#!/usr/bin/zsh
This does not change your interactive shell, only the script’s interpreter. It is useful for portability.
How To Change Shell In Linux With Environment Variables
You can temporarily override the shell for a specific command or script using the SHELL variable.
SHELL=/usr/bin/zsh command
This is rare but helpful in automated tasks or testing.
How To Change Shell In Linux For Remote Users (SSH)
When you SSH into a server, your default shell is used. To change it for remote sessions, follow the same chsh steps on the server.
If you cannot change the default, you can start a different shell manually after login by adding a command to your ~/.bashrc or ~/.profile.
if [ -x /usr/bin/zsh ]; then
exec /usr/bin/zsh
fi
This automatically switches to Zsh when you log in via SSH.
How To Change Shell In Linux Back To Bash
If you want to revert to Bash, simply run:
chsh -s /bin/bash
Or use the path from which bash. Log out and back in. Your shell returns to default.
How To Change Shell In Linux With Oh My Zsh
Oh My Zsh is a popular framework for managing Zsh configuration. It does not change your shell by itself, but it enhances Zsh.
After installing Oh My Zsh, ensure Zsh is your default shell:
chsh -s $(which zsh)
Then restart your terminal. You will see the Oh My Zsh theme.
How To Change Shell In Linux For Non-Interactive Users
Some system accounts have shells set to /sbin/nologin or /bin/false to prevent login. Changing these to a real shell can allow interactive access.
Use chsh with caution. Only change shells for user accounts that need interactive login.
How To Change Shell In Linux Using Usermod
Another method is the usermod command. It modifies user account details.
sudo usermod -s /usr/bin/zsh username
This is similar to chsh but requires sudo. It is useful in scripts or batch changes.
How To Change Shell In Linux For All New Users
To set a default shell for all new users, edit the /etc/default/useradd file or use the adduser configuration.
For example, in Debian/Ubuntu:
sudo nano /etc/default/useradd
Change the SHELL line to your desired shell path. New users will inherit this setting.
How To Change Shell In Linux With A One-Liner
For quick changes, combine commands:
sudo chsh -s $(which zsh) $USER
This sets the current user’s shell to Zsh in one line. Replace $USER with a specific username if needed.
How To Change Shell In Linux And Keep Aliases
When you switch shells, your old aliases do not transfer. You need to copy them to the new shell’s configuration file.
For example, to copy Bash aliases to Zsh:
cat ~/.bashrc >> ~/.zshrc
Then source the file or restart the terminal. Some aliases may need adjustment due to syntax differences.
How To Change Shell In Linux For Cron Jobs
Cron jobs run with the default shell of the user. To change the shell for a specific cron job, set the SHELL variable at the top of the crontab.
SHELL=/usr/bin/zsh
0 5 * * * /path/to/script.sh
This ensures the script runs with Zsh, not Bash.
How To Change Shell In Linux For Systemd Services
Systemd services can specify a shell in the service file. Add ExecStart with the shell path.
[Service]
ExecStart=/usr/bin/zsh -c "command"
This is advanced and rarely needed, but good to know.
How To Change Shell In Linux For Docker Containers
In Docker, you can set the default shell in the Dockerfile using the SHELL instruction.
SHELL ["/usr/bin/zsh", "-c"]
Or change it at runtime with docker exec:
docker exec -it container_name /usr/bin/zsh
How To Change Shell In Linux For WSL
Windows Subsystem for Linux (WSL) uses a default shell. To change it, edit the /etc/passwd file inside WSL or use chsh as usual.
Then restart WSL from PowerShell:
wsl --shutdown
Reopen WSL, and the new shell is active.
How To Change Shell In Linux For Embedded Systems
On embedded Linux, shells like BusyBox are common. Changing the shell may require recompiling the system or linking a different binary. This is beyond typical user tasks.
How To Change Shell In Linux For Recovery Mode
In recovery mode, you might get a minimal shell like sh. You can start another shell if it is installed:
/bin/bash
This gives you more features for system repair.
Frequently Asked Questions
Can I change my shell without root access?
No, changing the default shell requires modifying /etc/passwd, which needs root or sudo privileges. However, you can start a different shell manually in your current session.
What is the safest shell to switch to?
Bash is the safest because it is the default on most systems and widely supported. Zsh is also safe and popular, but ensure it is installed.
Will changing my shell break existing scripts?
Scripts with shebang lines (#!/bin/bash) are unaffected. Only interactive shell behavior changes. Test your aliases and functions after switching.
How do I list all available shells on my system?
Run chsh -l or cat /etc/shells. This shows all shells registered on your system.
Can I switch shells for a single command?
Yes, use exec or start the shell directly, like zsh -c "command". This does not change your default.
Conclusion
Now you know how to change shell in linux permanently or temporarily. The process is straightforward with chsh or manual editing. Always