shell1

来源:互联网 发布:网络销售项目计划书 编辑:程序博客网 时间:2024/05/18 11:48

shell是一种特殊的程序,它是用户与UNIX系统的“心脏”(一个称之为内核的程序)之间的接口。内核(kernel)在系统引导时被载入内存,管理系统直至关机。它创建和控制进程、管理内存、文件系统以及通信等。内核以外的所有程序(包括shell程序)都保存在磁盘上。内核将这些程序载入到内核运行,在它们终止后清理系统。

     shell的任务

    shell负责确保用户在命令提示符后键入的命令被正确执行。这里的“责任”包括以下内容:

    1、读输入并解析命令行。

    2、替换特殊字符。

    3、设置管道、重定向和后台运行。

    4、处理信号。

    5、程序执行的相关设置。

    命令类型

    命令被执行时,可以是别名、函数、内置命令或磁盘上的可执行程序。别名是原有命令的缩写(绰号),可用于C、TC、Bash和Korn shell。函数就是一组命令,并像独立程序那样组织起来。别名和函数都在shell的内存空间中定义。内置命令是shell的内部程序,而可执行程序则在磁盘上。shell用路径变量在磁盘上定位可执行程序。执行命令前,shell按照以下顺序判定程序类型:

      1、别名

      2、关键字。

      3、函数(bash)

      4、内置命令

      5、可执行程序

      举个例子,如果命令是xyz,shell先检查xyz是不是一个别名。如果不是,那它是不是内置命令或函数?如果不是,那它肯定是磁盘上的一个可执行程序。接下来shell就要开始查找这个命令的路径。

     进程和shell

     进程是正在运行的程序,可以用它唯一的PID号(进程标示符)来标识,内核负责控制和管理进程。进程由可执行程序、数据、堆栈指针、寄存器以及程序运行时需要的所有信息组成。shell被启动后就成为一个进程,并且属于某个进程组。任何时候,只有一个进程组拥有终端的控制权,即所谓的“前台运行”。登录系统后,用户的shell便控制了终端,等待命令提示符后输入命令。下面是shell与命令执行流程图。

 

  

重定向

当文件描述符被分配给终端以外的对象时,就被称作I/O重定向。shell把输出重定向到一个文件的过程是:先关闭标准文件描述符1(终端),然后将这个描述符分配给该文件。重定向标准输入时,shell先关闭文件描述符0(终端),然后将它分配给一个文件。

例如:

$ cc prog.c 2> errfile

编译文件prog.c,如果编译失败,标准错误输出被重定向到文件errfile,现在你可以拿这个错误信息文件去请教身边的高手了。

$ find . -name /*.c -print > foundit 2> /dev/null

find命令在当前目录下查找以.c结尾的文件名,将找到的文件名打印到文件foundit中。find命令输出的错误信息则被发送到 /dev/null。

$ find . -name /*.c -print  >& foundit

find命令在当前目录下查找以.c结尾的文件名,将找到的文件名打印到文件foundit中。find命令输出的错误信息也被发送到文件foundit

$ find . -name /*.c -print > foundit 2>&1

find命令在当前目录下查找以.c结尾的文件名,将找到的文件名打印到文件foundit中。find命令输出的错误信息也被发送到文件foundit

$ echo "File needs an argument"  1>&2

echo将它的信息发往标准错误输出。该命令的标准输出被合并到标准错误输出中。

管道

管道允许一条命令的输出被发往另一条命令的输入。shell通过关闭和打开文件描述符来实现管道;但是此时文件符并非分配给文件,二是赋给由系统调用pipe生成的管道。

原创粉丝点击