Howto: Changing Linux Login Shell

I am a new Linux user and can you tell me a command name to change the default login shell in Linux or UNIX operating system?

You don’t have to edit /etc/passwd file to change your shell. You need to use the chsh command. It changes the user login shell. This determines the name of the users’ initial login command. A normal user may only change the login shell for his/her own account, the super user i.e. root user may change the login shell for any account.
Changing default shell in linux/unix

ADVERTISEMENTS

chsh command syntax

Following is syntax for chsh command:
chsh -s {shell-name} {user-name}
Where,

  • -s {shell-name} : Specify your login shell name. You can obtained list of avialble shell from /etc/shells file.
  • User-name : It is optional, useful if you are a root user.

First, find out available shell list:
$ less /etc/shells
Sample Outputs:

/bin/ash
/bin/csh
/bin/sh
/usr/bin/es
/bin/ksh
/bin/tcsh
/bin/sash
/bin/zsh
/bin/dash
/usr/bin/screen
/bin/bash
/bin/rbash

Example: Changing default shell in Linux to /bin/tcsh

To change your shell name to /bin/tcsh:
$ chsh -s /bin/tcsh
Sample outputs:

Password:

When promoted for password, type your own password. You must log out and log back in to see this change. If you just type chsh command, it will prompt for shell name interactively:
$ chsh
Sample outputs:

Password:
Changing the login shell for tv
Enter the new value, or press ENTER for the default
       Login Shell [/bin/bash]:

This command will change the default login shell to /bin/tcsh permanently. In this example, first find out path for bash shell, enter:
$ type -s bash
$ which bash

Sample outputs:

bash is /usr/local/bin/bash

Now use the below command to set shell to bash for a user named vivek:
$ chsh -s /usr/local/bin/bash vivek
OR if you know sysadmin root passoword:
$ sudo chsh -s /usr/local/bin/bash vivek

🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallCentOS 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 VPNCentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
6 comments… add one
  • Sutharsan Oct 9, 2009 @ 9:00

    I need to change my root password on daily basis. But the new password should be create from shell script. The input for the new password should be current date. Which means

    let we say
    the current date is x1, then the password should be x2. (but user should be able to calculate the new password)

    is it possible to do it?

    • max Aug 27, 2011 @ 12:56

      yes, try the cron deamon (crontab)

  • Drey Jan 7, 2011 @ 8:28

    Hi.
    Followed, but still see csh welcome in new tab of Terminal in xfce on FreeBSD.
    /etc/passwd shows bash. What I’ve missed?

  • homoudi Mar 18, 2014 @ 7:38

    please i try to change my shell from bash to csh then i get this steps ,what have i write then:
    [wrf@wrf-host ~]$ chsh
    Changing shell for wrf.
    Password:
    New shell [/bin/csh]:

    • Drey Mar 18, 2014 @ 10:14

      You should then just press [enter] to have csh as a default shell.

  • s Sep 29, 2016 @ 9:12

    chsh not working for centos

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.