Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330883
  • 博文数量: 174
  • 博客积分: 130
  • 博客等级: 入伍新兵
  • 技术积分: 587
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-12 19:39
文章分类

全部博文(174)

文章存档

2018年(2)

2016年(10)

2015年(6)

2014年(31)

2013年(92)

2012年(33)

我的朋友

分类: LINUX

2014-03-18 18:43:55

本文采用问答式,介绍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。

阅读(358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~