shell学习

 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生成的管道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值