Change Shell To Bash in Linux / Unix

How do I switch from a ksh shell to bash on Linux or Unix system? How to change shells on Unix-like system?

A shell is nothing but a command that provides a text-only user interface (also known as “command line interface”) for Linux, MacOS, and Unix-like operating systems. Bash shell read commands such as ls, date and others typed into a terminal and then run them. That is the primary function of bash shell.

How do I find out the default shell for a user?

Type the following command to find out the default shell for a user named vivek using the grep command and /etc/passwd file:
$ grep vivek /etc/passwd
vivek:x:1005:1005:,,,:/home/vivek:/bin/zsh

OR
$ ps -p $$
PID TTY TIME CMD
14314 pts/9 00:00:00 zsh

OR
$ echo $0
zsh

All of the above output indicates that the shell is zsh for user named vivek in Linux operating system.

How do I see what shells are available on my system?

Type the cat command as follows:
$ cat /etc/shells
Sample outputs:

Fig.01: How to find list of available shells on Linux or Unix or MacOS?

How do I switch to a bash or different shell?

Type the name at the command line and then press the enter key. In this example, to change from any shell to the bash, type:
bash

How to change shells on a Linux or Unix-like systems?

You can change your default shell using the chsh (“change shell” ) command as follows. The syntax is:
chsh
chsh -s {shell-name-here}
chsh -s {shell-name-here} {user-name-here}
chsh -s /bin/bash
chsh -s /bin/bash vivek

You can find full path to your shell using the following command:
type -a bash
type -a zsh
type -a ksh

Please note that a normal user may only change the login shell for her own account. The superuser (root) may change the login shell for any account using the following syntax:
$ sudo chsh -s /bin/bash raj
OR use the su command instead of sudo command:
$ su -
# chsh -s /bin/bash monika

Summing up

The only restriction placed on the login shell is that the shell command name must be listed in /etc/shells, unless the invoker is the superuser/root user, and then any value may be added. An account with a restricted login shell may not change her login shell. For this reason, placing /bin/rsh in /etc/shells is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value.


🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 5 comments so far... add one

CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
5 comments… add one
  • Big Daddy Leroy Jan 11, 2017 @ 20:58

    getent passwd $USERNAME will provide user’s shell as well

    • David G Jan 12, 2017 @ 20:21

      First command doesn’t show the result. 2nd, 3rd and yours command provided me the shell information. Also you can change $USERNAME variable with the user name desired.

  • David G Jan 12, 2017 @ 20:16

    I have a Linux system with AD authentication; chsh command does not work for my configuration. Is there any other way to change the default change? Thanks.

    • 🐧 Vivek Gite Jan 12, 2017 @ 21:31

      AD as in active directory? Are you using bash under Windows 10? Give us more info.

  • lemonTart Jan 22, 2021 @ 18:24

    Awesome. Super helpful. Thanks.

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre> for code samples. Problem posting comment? Email me @ webmaster@cyberciti.biz