本文采用问答式,介绍
linux下shell常用的知识,希望对大家有帮助
Q、如何查看当前使用什么shell。
A: echo $SHELL 或ps都可以看到。
Q、如何查看当前系统支持哪些shell。
A: chsh --list-shells 或 cat /etc/shells
Q、如何更改当前shell
A:chsh -s /bin/csh; 或编辑/etc/passed. 这些改变不会立即生效,改变的是用户登录shell,需要用户重新登录才能看到shell改变。如果想立即改变shell。 直接运行/bin/csh。
另外在shell脚本可以指定 #!/bin/bash 。指定解析shell。也可以 /bin/bash xx.sh 显示指定shell解析器运行。
Q、什么是登录shell 好非登录shell
A:登录shell 是通过输入用户名密码登录得到的shell。如ssh或telnet登录进入的shell。非登陆shell如在图形系统下打开控制台。或直接在命令行里输入/bin/csh 之类切换得到shell。属于非登录shell。如果在命令行里输入 /bin/bash --login. 那么这时候得到的就是登录shell
两者差别是,登录shell会加载一些文件。首先执行/etc/profile,然后执行以~/.bash_开头的文件,其次~/.profile。退出时候执行~/.bash_logout脚本(如果存在)。
非登陆shell不会执行上面这些脚本。而是执行~/.bashrc。
一般系统为了保证~/.bashrc都会被执行,~/.bash_profile中调用~/.bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
如此一来。~/.bashrc反而变成保证一致性,变得非常通用而且很重要的初始化地方。
另外由于~代表各个用户自己,所以为了避免给每个用户修改~/.bashrc 文件。由此产生了一个全局所有用户的文件/etc/bashrc。 在每个用户 ~/.bashrc 文件有这样一句话
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
这样就方便了,更改一个文件内容,对登录还是分登录shell,所有用户都能生效。
Q、什么是交互shell和非交互shell
A:非交互Shell是指为执行脚本而fork出来的子Shell。说简单点。就是script脚本里面shell命令是在非交互shell下执行。因为解析这些命令时候。会启动一个/bin/bash 之类解析器去执行。
Q、如何去执行一个shell脚本
A:有两种方式:1是启动一个子shell解析器去执行脚本。就是上面说到的非交互shell。
./test.sh 或 /bin/bash test.sh(和sh test.sh等同)
另一种方式是不启动子shell解析器。在当前shell内执行。
source test.sh 或 . test.sh. 这种情况下实际上source和。 是bash的内部指令
Q、如何查看当前是终端还是伪终端
A:使用ps命令。
在当前机器,如在虚拟机里面输入ps如下。看到是终端类型TTY
在ssh或telnet登录的控制 使用ps查看
这里pts 中p=pseudo意思。
这些终端设备当文件使用。例如你可以使用echo 1 > /dev/tty1 或 echo 2 > /dev/pts/1 直接显示消息到终端上去。可以帮你消息输出到别人控制台上去很有意思。
Q:shell 和进程组,会话的关系
A:在shell在命令行下运行的进程。该进程一般是进程组长,进程ID=进程组ID。该进程的会话组长一般是shell。