If I wanted to use zsh
, for instance, rather than bash
, where would I make this change for the current user?

- 39,676
5 Answers
Chris Browne's answer works well if you don't have access to the user and have root privileges.
If you want to change the default shell of your current user you can also use:
chsh -s /bin/ksh
More info
The login shell of a user is defined in a file (/etc/passwd
on Debian). This files has an entry for each user with the info entered at creation.
rahmu:x:1000:1000:My Nameisrahmu,,,:/home/rahmu:/bin/bash
anotheruser:x:1001:1001:,,,:/home/anotheruser:/bin/ksh
The last column is the login shell. It will be forked by the login program if successful.
However it is highly recommended that you do not modify this file by hand. You should use chsh
or usermod
whenever possible.

- 20,023
-
-
-
I just checked on the Solaris server at work. File
/etc/passwd
has only 19 entries. I know for a fact there are a lot more users on the system that that. – rahmu Oct 19 '11 at 08:13
You can change your login shell with the chsh
command. As man chsh
notes, a normal user can only change the shell for their own account, while root can change the shell for all accounts.
/etc/shells
contains the pathnames of valid login shells. This file is queried by chsh
when it is invoked.
The instructions for using chsh
vary according to your UNIX flavour:
Linux:
chsh -s newshell
Solaris:
chsh newshell
HP-UX
chsh username newshell
AIX
chsh
This will start an interactive session where you are prompted for the full path to your new shell.
Reference: http://kb.iu.edu/data/benf.html

- 73,126
On systems where you don't have sudo access or proper permission to use chsh (for example if you cannot add /bin/zsh to /etc/shell), then you can do it the old fashioned way:
$ mv ~/.bash_profile ~/.bash_profile.old
$ (echo :; echo exec /bin/zsh -il) > ~/.bash_profile
$ source ~/.bash_profile
This will replace the bash
shell with a login zsh
at login.

- 22,536
I was trying to do this on a Synology device running DSM 5.1 with ash shell running. For some reason the chsh
command was not available. I had to instead edit the file /etc/passwd
, putting in the full path to the shell executable I instead wanted.

- 487
sudo
. Theusermod
command is unprivileged unlike chsh. – Arcege Oct 16 '11 at 23:50