howtouselinux

3 Ways to Change User Shell in Linux

Table of Contents

On Linux a login shell is a shell given to a user upon login into their user account. Today we will look at how to change the default login shell safely for one specific user.

Understanding user shell in Linux

A user’s shell is the program that runs when they login to a Linux system. The default shell for most users is bash, but there are many other options available. To see a list of available shells on your system, run the following command: cat /etc/shells.

we can have the following shells in the system.
[root@host ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/zsh
/bin/tcsh
/bin/csh

What is the purpose of a shell in Linux?

A shell provides an interface between you and the underlying operating system. It allows you to execute commands, run programs, and perform other tasks. In some cases, shells may also provide additional features such as advanced text editing and configurable prompts.

There are many different types of shells available on Linux, each with their own strengths and weaknesses. Choosing the right shell can depend on your individual needs and preferences, as well as the type of Linux distribution that you are using.

Change user shell with chsh command in Linux

The best way to change the user’s shell is to use chsh command. Open the terminal and type chsh.  Then type the shell file path you want to use. It will issue a warning if the shell is not listed in the /etc/shells file.

If you are root, you can also change shell for other accounts by the following command. Example:
# chsh -s /bin/bash testuser

Change user shell with useradd command in Linux

The useradd command is used to add new users to a Linux system. It can also be used to change the shell of an existing user. The following syntax is used to change the shell of an existing user where “<username>” is the name of the user you want to change their shell.

useradd -s /bin/zsh <username>

The following example will change the shell of user testuser to /bin/bash.
# useradd -s /bin/bash testuser

Change user shell with usermod command in Linux

You can also use the usermod command to change a user’s shell. The following syntax is used to change a user’s shell to zsh:
usermod -s /bin/zsh <username>
Where “<username>” is the name of the user you want to change their shell.

The usermod command modifies the system account files to reflect the changes that are specified on the command line.
# usermod –shell /bin/bash testuser

It is not a safe way to change the user login shell by changing file /etc/passwd directly. We don’t recommend this way.

how to check user shell in Linux

We can use the following two ways to verify the shell for this user.

# echo $SHELL
/bin/bash
# cat /etc/passwd | grep testuser
testuser:x:8152:9152::/home/testuser:/bin/bash

What is the difference between a shell and a terminal?

There are many different types of shells available on Linux, including the Bash, Zsh, and Korn Shell. A shell is essentially a program that provides an interface between you and the underlying operating system. In contrast, a terminal refers to the actual window where you type commands and interact with the shell.

There are a few different ways to change your shell in Linux. One option is to use the chsh command, which allows you to change a user’s shell directly from the command line. Another option is to use the useradd or usermod commands, which allow you to change a user’s shell when creating or modifying their account.

You can also use one of these commands along with the echo or set commands to view or modify your current shell setting. Additionally, some Linux distributions allow you to change your shell from within the system settings or preferences.

David Cao
David Cao

Hey there! I am David, a Cloud & DevOps Enthusiast and 18 years of experience as a Linux engineer. I work with AWS, Git & GitHub, Linux, Python, Ansible, and Bash. I am a technical blogger and a Software Engineer, enjoy sharing my learning and contributing to open-source.