设为首页 收藏本站
查看: 806|回复: 0

shell执行过程

[复制链接]

尚未签到

发表于 2018-8-21 06:21:30 | 显示全部楼层 |阅读模式
  Shell是什么?
  任何发明都具有供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。
  Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。
  为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。
  1.UNIX内核和Shell的交互方法
  启动UNIX时,程序UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序init将进入后台运行一直到机器关闭。该程序查询文件/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时,init程序调用getty程序在终端上显示login等登陆信息。(username和passwd),在输入密码后,getty调用login进程,该进程根据文件/etc/passwd的内容来验证用户的身份。若用户通过身份验证,login进程把用户的home目录设置成当前目录并把控制交给一系列setup程序。setup程序可以是指定的应用程序,通常setup程序为一个Shell程序,如:/bin/sh 即Bourne Shell(command出来了,呵呵)。
  得到控制后,Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等) 注不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或config.sys文件)
  当shell退出时,内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程序使用的资源。
  用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell程序--->UNIX内核--->计算机硬件。当用户输入一个命令,如$ls,
  Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消
  该子进程并把控制交给其父进程,即Shell程序。例如执行:
  $ps
  该命令将会列出用户正在执行的进程,即Shell程序(下来详细说说,别急现在)和ps程序。若执行:
  $sleep 10 & $ps
  其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。
  每当用户执行一条命令时,就会产生一个子进程。该子进程的执行与其父进程或Shell完全无关,这样可以使Shell去做其他工作。(Shell只是把用户的意图告诉内核,然后该干嘛干嘛) 现在windows有个计划任务(在固定的时间,日期自动执行某任务),其实UNIX很早就有这个功能了,也就是所谓的Shell的自动执行。一些UNIX资源,如cron可以自动执行Shell程序而无需用户的参与,(这个功能好象在/var/spool/crotab目录里)。
  Crontab 程序对于系统管理员来说是非常有用的。Cron服务用于计划程序在特定时间(月、日、周、时、分)运行。我们以root的crontab 为例。根用户的crontab 文件放在 /var/spool/crontab/root 中,其格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
  0   0   *   *   3   /usr/bin/updatedb
  1. 分钟 (0-60)
  2. 小时 (0-23)
  3. 日 (1-31)
  4. 月 (1-12)
  5. 星期 (1-7)
  6. 所要运行的程序
  2.Shell的功能和特点
  1>命令行解释
  2>使用保留字
  3>使用Shell元字符(通配符)
  4>可处理程序命令
  5>使用输入输出重定向和管道
  6>维护一些变量
  7>运行环境控制
  8>支持Shell编程
  对于"命令行解释"就不多说了,就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令,Shell将接收用户的输入。
  "使用保留字":Shell有一些具有特殊意义的字,例如在Shell脚本中,do,done,for等字用来控制循环操作,if,then等控制条件操作。保留字随Shell环境的不同而不同。
  "通配符":* 匹配任何位置
  ? 匹配单个字符
  [] 匹配的字符范围或列表 例如:
  $ls [a-c]*
  将列出以a-c范围内字符开头的所有文件
  $ls [a,m,t]*
  将列出以e,m或t开头的所有文件
  "程序命令" :当用户输入命令后,Shell读取环境变量$path(一般在用户自己的.profile中设置),该变量包含了命令可执行文件可能存在的目录列表。
  shell从这些目录中寻找命令所对应的可执行文件,然后将该文件送给内核执行。
  "输入输出重定向及管道" :重定向的功能同DOS的重定向功能:
  ">" 重定向输出
  ""
  TERM 使用终端类型
  2>Bsh里特殊字符及其含义
  在Bsh中有一组非字母字符。这些字符的用途分为四类:作为特殊变量名、产生文件名、数据或程序控制以及引用和逃逸字符控制。他们
  可以让用户在Shell中使用最少的代码完成复杂的任务。
  *> Shell变量名使用的特殊字符
  $# 传送给命令Shell的参数序号
  $- 在Shell启动或使用set命令时提供选项
  $? 上一条命令执行后返回的值
  $$ 当前shell的进程号
  $! 上一个子进程的进程号
  $@ 所有的参数,每个都用双括号括起
  $* 所有参数,用双括号括起
  $n 位置参数值,n表示位置
  $0 当前shell名
  *>产生文件名的特殊字符包括"*","?","[]",上面讲过,不再多说。
  *>数据或程序控制使用的特殊字符
  >(file) 输出重定向到文件中(没有文件则创建,有则覆盖)
  >>(file) 输出重定向到文件中(没有则创建,有则追加到文件尾部)
  对于引用或逃逸的特殊字符


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554392-1-1.html 上篇帖子: shell 安装MYSQL 下篇帖子: linux的shell基础介绍(1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表