关于Linux Shell新的收获
最近又翻阅了几本Linux相关的工具书,在这里记录一些关于Linux shell的新的小小的收获。
查看正在使用的shell
有很多方法可以查看当前正在使用的shell:
使用特殊参数
$0
1
2$ echo $0
-bash对于这里有点疑问的是有资料说在本地系统执行可能的结果会是
/bin/bash
,但是我尝试了一下发现结果还是bash
或者-bash
。不知道资料中说的本地系统指的是什么意思。输入不存在的命令:
1
2$ asdf
-bash: asdf: command not found从shell提示中可以看出当前正在使用的shell是bash。
查看用户登录默认的shell
通过查看
/etc/passwd
文件找到用户对应的那一行,最后一列就是用户登录的shell1
2user1@ubuntu:~$ cat /etc/passwd | grep user1
user1:x:1000:1000:user1,,,:/home/user1:/bin/bash最常用的方法:
1
2$ echo $SHELL
/bin/bash从环境变量中查看:
1
2$ env |grep SHELL
SHELL=/bin/bash切换用户正在使用的shell
直接输入对应shell的命令即可切换:
1 | $ echo $0 |
修改用户的登录shell
首先可以查看用户合法的shell:
1
2
3
4
5
6
7
8
9$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin <==合法不可登录的shell
/bin/tcsh
/bin/csh
/bin/mksh
/bin/ksh
/bin/zshchsh -l
命令并不总是可用,对于某些Linux发行版,chsh
命令没有-l
的选项,如ubuntu16.04
,但是可以直接查看/etc/shells文件1
2
3
4
5
6
7
8
9$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin <==合法不可登录的shell
/bin/tcsh
/bin/csh
/bin/mksh
/bin/ksh
/bin/zsh修改用户登录shell
1
2
3
4
5
6$ chsh -s /bin/zsh
Password:
$ cat /etc/passwd | grep user1
user1:x:1000:1000:user1,,,:/home/user1:/bin/zsh <== /etc/passwd文件中已经发生变化
$ echo $SHELL
/bin/bash <==但是再次查看$SHELL,发现并没有变,其实退出shell再次登录就会看到变化了