elecsnail的个人空间 https://bbs.21ic.com/?867354 [收藏] [复制] [RSS]

日志

linux 下 shell 有用的常识

已有 1271 次阅读2013-3-13 13:33 |系统分类:兴趣爱好| linux,

本文采用问答式,介绍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在命令行下运行的进程。该进



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)