一般很少会去更改用户的登录shell。
1.useradd新建账号的时候,可以使用-s选项指定用户登录shell。以下创建initroot账号的同时指定登录shell为/bin/sh:

              [peter@initroot ~]$ sudo useradd -s /bin/sh initroot
            
2.也可以在创建完账号后,通过usermod命令的-s选项修改账号的登录shell。例如将用户peter的登录shell修改为ksh:
              [peter@initroot ~]$ sudo usermod -s /bin/ksh peter
            
3.最后,也可以使用chsh命令修改用户的的登录shell,chsh就是change shell的缩写,使用方法也很简单:
              [peter@study ~]$ chsh [-ls]
            
选项与参数:
-l: 列出目前系统上面可用的shell ,其实就是/etc/shells的内容!
-s: 修改用户的登录Shell。
-l选项可以列出系统中所有合法的shell,相当于显示/etc/shells文件中的内容:
              [peter@study ~]$ chsh -l
              /bin/sh
              /bin/bash
              /sbin/nologin
              /usr/bin/sh
              /usr/bin/bash
              /usr/sbin/nologin
              /bin/tcsh
              /bin/csh
            
-s选项可以修改用户的登录shell,先观察一下peter的登录shell:
              [peter@study ~]$ grep peter /etc/passwd
              peter:x:1000:1000:peter,1920302,13861828579,13861828579:/home/peter:/bin/bash
            
可以看到peter的登录shell为/bin/bash,用-s选项将peter的登录shell修改为csh:
              [peter@study ~]$ chsh -s /bin/csh; grep peter /etc/passwd
              Password:
              Changing shell for peter.
              Shell changed.
              peter:x:1000:1000:peter,1920302,13861828579,13861828579:/home/peter:/bin/dash
            
通过观察/etc/passwd文件可以看到登录shell变成/bin/dash了。
现在将登录shell改回/bin/bash:
              [peter@study ~]$ chsh -s /bin/bash
            
chfn和chsh命令都会修改/etc/passwd文件, 和passwd一样都是允许普通用户使用的账号管理命令。
但是普通用户是没有权限修改/etc/passwd文件的,所以其实chfn、chsh和passwd命令一样,他们的可执行文件都具有特殊权限,都设置了有效用户id位
              [root@study ~]$ ls -al $(which chfn)
              -rwsr-xr-x 1 root root 76496 Mar 23  2019 /usr/bin/chfn
              [root@study ~]$ ls -al $(which chsh)
              -rwsr-xr-x 1 root root 44528 Mar 23  2019 /usr/bin/chsh
              [root@study ~]$ ls -al $(which passwd)
              -rwsr-xr-x 1 root root 59640 Mar 23  2019 /usr/bin/passwd
            

initroot编辑整理,转载请注明www.initroot.com