Linux Shell 工作原理

在CLUI(Command Line User Interface,与GUI对应)模式下,用户是通过shell与系统交互的。shell也是一个程序,它与其他程序最大的不同是:它的目的是执行其他程序,而不是从事计算,绘图,存储等等具体事务。分析一下shell的工作原理有助于破除shell的神秘感,更好的掌握shell命令。下图是shell的基本流程,现在流行的bash,csh,zsh等要比这复杂得多,考虑了很多细节。

img

上图展示了ls命令的执行过程,下面进行简单分析:

  • 1、shell不断询问是否有键盘输入,用户以enter结束键盘输入后,shell程序以空格为分隔符,得到"ls","-l","*.c",三个字符串。
  • 2、shell发现第三个字符串包含"*"通配符,就会在当前路径(或指定路径)下搜索满足这个通配符的文件。有bar.c和foo.c两个文件,然后展开成{"ls","-l","bar.c","foo.c"}四个字符串,并保存在argv这个二维字符数组中,并赋值argc为4。
  • 3、shell然后搜索PATH这个全局变量保存的路径,寻找一个叫"ls"的命令。如果存在,则fork()一个子进程,调用exec()加载运行ls命令。ls的main(int argc, string ** argv)函数的参数就是从shell那里得来的。若不存在就会提示用户"command not found"。
  • 4、ls程序执行后,会分析argc和argv,"-l"表示这是一个选项开关,表明用户想得到文件的详细信息,并把这个开关量保存,以便最后输出的时候选择信息的格式。
  • 5、ls执行完既定的步骤后,退出并返回退出码,若成功则返回0,否则根据错误的不同返回不同的非零数字。
  • 6、shell在得到成功退出码后,继续等待用户输入。

如此不断的循环。

转:http://blog.csdn.net/hjx5200/article/details/22487683

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,187评论 2 33
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,883评论 9 468
  • 概述 首先,咱们来了解一下,什么是Shell。操作系统内核给我们提供了各种接口,同时也提供了各种用户层的库,理论上...
    keysaim阅读 5,272评论 0 0
  • 4月的北京,给我印象最深的,是满街都飘着白色的柳絮,我称之为“印象北京”。 而我,在地下室用那台跟着我南辕北辙的电...
    sYnecs阅读 1,709评论 4 2
  • 就在前几个星期我刚坐了飞机,可是那个时候刚好是晚上,所以我心中一直觉得好遗憾,爸爸妈妈为了让我看看天上的景色,决...
    期待待续阅读 1,527评论 0 1