和 SHELL 解释器 有关的一些命令

文章目录

      • 1、查看当前系统所支持的 Shell :
      • 2、查看 当前 Shell 类型:
      • 3、关于 shell 的 子shell:
      • 4、查看某个用户的 Shell 类型:
      • 5、"pstree -p" 树状结构显示 Shell进程关系:
      • 6、关于 login shell :
      • 7、给用户添加 shell 环境:
      • 8、如何切换到 其他 shell 环境!
        • 8.1、使用 chsh 命令切换 shell(当前用户):
        • 8.2、使用 "chsh -s " 切换:
        • 8.3、为其他用户指定 shell环境:


        此链接通往 Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:
 


 

1、查看当前系统所支持的 Shell :

root@zhengzelin:~# cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

2、查看 当前 Shell 类型:

root@zhengzelin:~# echo $SHELL
/bin/bash

3、关于 shell 的 子shell:

root@zhengzelin:~# bash           # 进入当前 shell 的 子shell
root@zhengzelin:~# echo $SHLVL    #查看当前 Shell 的层次(嵌套)
2

root@zhengzelin:~# exit           # 退出 子Shell 
exit
root@zhengzelin:~# echo $SHLVL    # 再次查看
1

4、查看某个用户的 Shell 类型:

root@zhengzelin:~# cat /etc/passwd | awk '/root/ {print $0}'
root:x:0:0:root:/root:/bin/bash

# 第 7个字段为 此用户的shell类型

root@zhengzelin:~# cat /etc/passwd | awk 'BEGIN{FS=":";OFS="\t"} /root/ {print $1,$7}'
root	/bin/bash

5、“pstree -p” 树状结构显示 Shell进程关系:

root@zhengzelin:~# pstree -p | grep sshd
           |-sshd(963)---sshd(24718)---bash(24743)-+-grep(25345)
           
 # 上面有个sshd 这是因为我是通过 xshell 远程连接的!        
   
root@zhengzelin:~# echo $PPID    #查看当前shell 的父进程PID
24718
root@zhengzelin:~# echo $$       # 查看当前shell的 PID
24743

当前bash前并没有其他的bash,所以这是父shell!(父 shell 后面的 bash 为子shell)

然后我切换到 本地终端进行查看:
在这里插入图片描述
当前shell的父进程就是 login(login shell!)
 

6、关于 login shell :

        所谓的 Login shell,指的就是当我们使用用户登录系统的时候,那个时候就称之为 " Login Shell "
在这里插入图片描述

Login Shell 其实就在 /etc/passwd 文件里就可以看见:

root@zhengzelin:~# cat /etc/passwd | awk '/root/ {print $0}'
root:x:0:0:root:/root:/bin/bash  

# Login Shell 定义在第七个字段(也就是最后一个字段),如果为 nologin 或 false 则不可登录系统!

eg:
root@zhengzelin:~# cat /etc/passwd |awk 'BEGIN{FS=":";OFS="\t"} {print $NF;}'|awk '{a[$1]++} END{for(i in a) {print i}}' 
[]           # ubuntu 登录默认为 /bin/sh
/bin/sync  
/bin/bash    
/bin/false    # 无法登陆系统
/usr/sbin/nologin  # 无法登录系统


学艺不精啊,不会直接截取 $NF 不等于 /bin/bash 的字段!求大佬教我一下!
糊涂了,可以使用 { grep -v $"/bin/bash" }

7、给用户添加 shell 环境:

root@zhengzelin:~# cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/aaa:[]

# 默认为空,当你使用 aaa 登录账户的时候,发现:登录的默认shell为 /bin/sh (我是Ubuntu系统)

$ echo $USER
aaa
$ echo $SHELL 
/bin/sh           
$ cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/aaa:[没有指定shell]

解决:
"方法1":在创建用户的时候:useradd (username) -s  /bin/bash(或 其他shell)

"方法2": 当你已经创建了用户:usermod (username) -s /bin/bash(或 其他shell)

eg:
root@zhengzelin:~# usermod aaa -s /bin/bash 
root@zhengzelin:~# cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/aaa:/bin/bash

8、如何切换到 其他 shell 环境!

1、首先 查看你的系统支持哪些shell?
root@zhengzelin:~# cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

root@zhengzelin:~# echo $SHELL
/bin/bash

8.1、使用 chsh 命令切换 shell(当前用户):

        注意,此命令修改的 shell 环境只对当前用户生效,就算你在root下修改,其他用户还是他自己的 shell 环境!

root@zhengzelin:~# chsh 
Changing the login shell for root
Enter the new value, or press ENTER for the default
	Login Shell [/bin/bash]: /bin/sh   
  [当前登录的shell:/bin/bash]:[修改后的shell:/bin/sh]


root@zhengzelin:~# echo $SHELL    # 不是立即生效
/bin/bash
root@zhengzelin:~# logout         # 需要注销用户再次连接生效


[C:\~]$ 
Connecting to xxx.xxx.xxx.xxx:22...
# echo $SHELL           # /bin/sh 里面的命令行是这样的格式!
/bin/sh

切换回 /bin/bash 还是老方法,不能使用 logout 的话 直接使用 exit退出

8.2、使用 "chsh -s " 切换:

与上面的结果是一样的,都只对当前用户生效,只不过换种方法:

# chsh -s /bin/bash
# exit

root@zhengzelin:~# echo $SHELL
/bin/bash

8.3、为其他用户指定 shell环境:

当前你得在 root 账号才有此权限!

root@zhengzelin:~# cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/aaa:/bin/bash

正常的时候,aaa用户登录主机的 shell 环境 是bash!
"现在在root账号上,为 aaa用户 切换它的 shell环境!"

eg:
root@zhengzelin:~# chsh -s /bin/sh aaa(username) 

root@zhengzelin:~# cat /etc/passwd | grep aaa
aaa:x:1001:1001::/home/aaa:/bin/sh    # 很清楚的看见已经变为 /bin/sh 了

你可能感兴趣的:(shell,shell,linux,ubuntu)