Shell入门

Shell简介

  Shell属于解释型语言,也就是不需要编译器(bash/sh)进行编译便可以执行,只需要解释器进行逐行解析,计算机就能识别。Shell其实就是用C语言写的一个程序,也可以不是C语言写的,但是就不可以调用C语言代码了,在linux中每打开一个终端init进程就会fork()出一个子进程运行一个bash的shell程序,使用PS命令就能看到,如下图所示:

  当我们在终端中输入需要执行的应用程序时,Shell便会帮我们fork()出的一个子进程,使用了exec函数簇来脱离和父进程之间的关系,将可执行程序加载到内存中后,便使用了waitpid()等待应用程序结束,实际上当然是非常的复杂,这里只是简单说明,便于理解,参考文章:https://blog.csdn.net/qq_36643282/article/details/105090027
  这篇文章的博主简单实现了一个shell,相信读完便可以理解Shell究竟是什么了。

Shell的分类

  使用命令cat /etc/shells便可以查看系统支持哪几种Shell脚本类型,系统上合法的shell脚本都要使用这里Shell解释器进行解释。/etc/passwd中记录什么程序和用户设置它们执行或者登入的时候使用的默认Shell解释器。

  sh:第一个流行的shell,是bash的快捷方式;
  dash:小巧、高效,功能相对少一些;
  bash:大多数Linux版本默认shell,基于GNU的架构下的发展;
  rbash:是bash的一个软链接;
  /sbin/nologin:一个非交互式的Shell解释器。
  Shell执行分为交互式和非交互式,交互式就是在终端上执行,并且等待用户输入命令的。像个人编写的简单脚本的shell,读取存放在文件中的命令,并且执行它们。当用户登入Linux的时候系统会执行一系列的Shell脚本,执行顺序如下:

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc

  /etc/profile:该文件涉及到系统的环境变量,这个的文件的改变会影响所有用户的环境变量;
  ~/.bash_profile、 ~/.bashrc:这两个文件修改的是当前用户的环境变量,是局部的,修改完后应该用命令source重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录;
   /etc/profile:该文件环境变量的改变对所有用户都有效;
   /etc/profile.d/*.sh:该目录中存放的是一些应用程序所需的启动脚本和命令的一些附加选项。

posted @ 2021-01-21 01:11  ding-ding-light  阅读(98)  评论(0编辑  收藏  举报