Unix/Linux 中的 shell 机制

对于初次接触 Unix/Linux 系统的同学来说,Unix/Linux 系统与 Windows 系统最大的不同就是,操作 Unix/Linux 系统更多时候不是使用 GUI 图形界面而是使用 shell 命令行。那么,作为 Unix/Linux 系统的标志性建筑,shell 机制究竟是什么呢?
shell 是功能强大的命令解释程序,是 Unix/Linux 系统面向用户的接口界面。但是,shell 程序仅仅是操作系统的一部分,是用以与系统内核进行交互的工具,并不是操作系统的核心组成部分。程序员可以根据需要编写符合接口规范的 shell 程序。
我们分析一下 Unix/Linux 系统的启动登陆过程,就可以更清楚的了解 shell 程序在 Unix/Linux 系统中的地位了。
当 Unix/Linux 系统启动时,操作系统的内核部分被装入内存,其余部分仍在硬盘上,只有当用户请求执行时才会被加载到内存中。Unix/Linux 系统完成启动后,由内核中的 init 进程激活 getty 进程,getty 进程在相应的终端上显示“login: ”提示,等待用户登录。当用户输入用户名时,getty 进程读取用户输入并启动 login 进程,由 login 进程完成整个登陆过程。用户完成登录后,login 进程根据启动配置文件,启动与该登录用户相对应的“默认 shell ”。此时,shell 进程被启动,用户可以通过 shell 终端与系统内核进行交互。
从 Unix/Linux 系统的启动过程可以看出,shell 程序并非神秘无比,而是一种“长相奇特”的“普通的”、“用以与内核进行交互”的“应用程序”。

各种各样的 shell

和 Unix/Linux 中的其它程序一样,shell 也仅仅是一个程序,在 Unix/Linux 系统中并没有特权。这也是为什么 Unix/Linux 系统中出现各种各样 shell 的原因。
1、Bourne shell(sh)。大多数 Unix 系统的默认安装 shell。
2、Korn shell(ksh)。
3、C shell(csh)。
4、TENEX/TOPS C shell(tcsh)。
5、Bourne Again shell(bash)。大多数 Linux 系统的默认安装 shell。

切换 shell

大多数的 Unix/Linux 系统都提供了多个 shell。当系统启动时,由启动配置文件确定启动(默认的) shell,用以用户与系统进行交互。
在 Red Hat 9 中,可以通过以下任何一种命令,确定登录用户的默认 shell。
cat /etc/passwd    #M1
echo $SHELL    #M2
在决定要切换 shell 之前,必须知道系统中安装了哪些 shell。在 Red Hat 9 中,可以通过以下命令,确定系统中已经安装的各种 shell 程序。
cat /etc/shells
在我的 Red Hat 9 系统中,得到了如下的结果:
/bin/sh
/bin/bash
/sbin/nologin
/bin/bash2
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
可以看出来,这其实是一个 shell 程序文件的列表。一般来说,/bin 和 /sbin 目录都在环境变量 PATH 中。为了切换为我们喜欢的 shell 种类,(我们已经知道,shell 也仅仅是一种与系统进行交互的程序),我们只需要在命令提示符下输入 shell 在 /bin 和 /sbin 目录中的相应名称即可。

我在使用哪个 shell

Unix/Linux 系统极少被重新启动,多个对 shell 有不同爱好的管理员可能操纵过计算机,我们姑且假设他们都使用相同的管理帐号。于是,这就产生了一个问题,我的终端上究竟运行着什么样的 shell?
针对这个问题,我在 Google 上搜寻了一下,有各种各样的答案。有一个回答是
echo $SHELL
我觉得这是不对的,SHELL 是环境变量,在整个会话中都不回改变,它表示的是登录用户的“默认 shell ”。还有人说用
cat /etc/passwd
这样得到的结果也是登录用户的“默认 shell ”,很显然也不能解决上述问题。
在 Red Hat 9 系统上,我用下述方法解决这个问题:
首先,使用命令
echo $$
获得当前 shell 进程的 PID。我在测试中,得到的结果是 10650。
然后,使用命令
ps -A | grep 10650
获取进程列表,并进行筛选。得到这样的测试结果:
10650 pts/0 00:00:00 csh
于是得到的结论是,测试中使用的 shell 是 csh。

原文地址:http://www.cnblogs.com/zhangze/articles/1832542.html

转载于:https://www.cnblogs.com/magicyang/archive/2011/08/26/2154159.html

Unix/Linux 中的 shell 机制相关推荐

  1. Linux 中启用 Shell 脚本的调试模式

    shell 脚本调试系列 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 概述 脚本是存储在一个文件的一系列命令. ...

  2. 好用的shell_Linux系统安全 | Linux中的Shell和Bash

    目录 shell shell script sh bash Dash tty.pty和pts 学安全的我们,经常会听到说获得某服务器的shell,就是指获得某个服务器的操作权限.我们学习linux时, ...

  3. linux 创建目录 默认权限,如何设置UNIX/Linux中新创建目录或文件的默认权限

    在unix或者linux中,每创建一个文件或者目录时,这个文件或者目录都具有一个默认的权限,比如目录755,文件644,那么这些默认权限是怎么控制的呢? 答案是"umask"权限掩 ...

  4. Linux中的Shell编程

    1.Shell的概念 shell是一个命令行解释器,它为客户提供了一个Linux内核发送请求一边运行程序界面系统级程序,用汉语可以通过shell启动.挂起.停止甚至编写一些程序. shell还是一个功 ...

  5. linux 脚本中 -le,Linux中编写Shell脚本

    目录 Shell Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. 用户每输入一条命令,Shell就执行一条.这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式. ...

  6. Unix/Linux 中的 grep 命令

    Unix/Linux 中的 grep 命令参数及示例用法 作用 语法 主要参数 示例命令 作用 Grep 筛选器在文件中搜索特定的字符模式,并显示包含该模式的所有行.在文件中搜索的模式称为 正则表达式 ...

  7. php linux脚本文件,Unix/Linux中如何直接执行PHP脚本文件?

    使用Linux系统的服务器都有搭建完整的PHP环境,因此有些用户会用PHP去写一些执行自动化任务的脚本,可是发现每次执行PHP脚本都需要使用php myscript.php的方式,感觉有点麻烦.其实我 ...

  8. Linux中执行shell脚本的4种方法

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写 ...

  9. Linux中执行shell脚本的5种方法总结

    Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法: 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: c ...

最新文章

  1. 25种代码坏味道总结+优化示例
  2. SQL用于更新ID为顺序ID(用于删除了几条数据导致id不连续)
  3. mysql字符乱码_MySQL字符乱码解决方案
  4. LeetCode算法题10:DFS/BFS-扫雷游戏
  5. BUGLY集成升级空指针问题
  6. 速读训练软件_记忆力训练:如何提高注意力呢?
  7. callapplybind的js实现以及应用
  8. AtomicStampedReference实现
  9. 计算机代码内大数据内存堆栈溢出问题
  10. iOS13后添加SceneDelegate初始化window
  11. python图像质量评价_OpenCV图像质量评价的SSIM算法(图像相似度)
  12. vue获取tr内td里面所有内容_vue 项目学习
  13. 软设考试成绩查询结果
  14. Swagger中paramType
  15. 李天平: 技术以外的功夫
  16. 6迁移-企业级 Hyper-v 群集部署实验方案
  17. nginx简单的rewrite配置
  18. Ansible 书写我的playbook
  19. MT4自带30项指标介绍
  20. 前端常识:常见显示器屏幕分辨率

热门文章

  1. java开发paly框架下载_playframework框架笔记
  2. SQL从入门到入魔之初入门
  3. 以太坊核心开发者计划为2.0制定“最小化合并”方案
  4. Yearn V2 Vaults Swap发布,目前未经审核
  5. SAP License:MIRO
  6. SAP License:最近的FICO面试题目
  7. SAP License:SAP IDES 4.71的安装补充
  8. 赛锐信息:SAP安全漏洞审计及工具介绍
  9. 中小微企业公共信用数据的风险评估
  10. 金融风控小白入门必学:审批策略分析岗面试常见问题