用户体验:命令执行(the shell)
一旦操作系统加载之后,他就开始等待命令。命令可以通过CLI(Command Line Interface) 或者GUI (Graphical User Interface)输入。
命令输入会进入一个命令的解析器(在Unix世界这个叫做shell)。Shell 用自己的规则解析命令之后执行命令。
一个经典shell流程:
终端提示 -》 输入命令 -》 shell 解析命令 - 》 shell 请求内核执行,shell进入睡眠状态直到内存执行完毕。 -》 shell 显示执行结果和等待下个命令。
一些通用的shell:
Bourne Shell /bin/sh , Bourne Again Shell /bin/bash,
Cshell /bin/csh, Korn Shell /bin/ksh
MSDOS 和Windows 的 shell 叫 COMMAND 或者 CMD。
通过Shell 是一个解析器,shell很快做一些复杂的任务。事实shell 是一个很强的编程环境。第一个shell可以做解析特殊字符。这些特殊字符叫通配符。这些特殊字符影响输出和执行shell命令。
常用的通配符有: *,? ,[],
shell的变量
当你登陆到Unix系统,你会面对一个定义好的环境变量的shell。这个环境变量叫shell 变量。很多东西被定义在一个文件(.proflie)里。可以通过命令env,查看自己的shell变量。
$env
其中一个变量是HOME,这个变量定义你的主目录的绝对路径。这些shell变量可以被用于任何一个命令。例如:
$cd $HOME
表示回到自己的主目录
Unix Shell 管道(pipes) 及其更改
unix所有程序都有文件描述(file descriptors)来表示它的输入输出。默认的文件描述: 标准输入(0),标准输出(1) 和标准错误(2).
一个程序将会用fscanf(2c)或者cin直到EOF(^D),通过标准输入读取数据.
文件描述默认是连接到一个设备,例如:标准输入是连接到键盘。如果你不想你的程序通过键盘读取输入,想从文件中读取输入。Unix运行更改管道。就是你可以改变标准输入,输出,错误来自哪里或者到哪里去。
操作符 > , 改变程序STDOUT到一个文件,这个文件会被覆盖,例子:
ls > foo.txt
cat a.txt b.txtc.txt > foo.txt
操作符<, 改变程序STDIN 这样程序可以读取文件, 例子:
cat </etc/hosts
1/11/20151/11/2015
操作符>> ,改变程序STDOUT到一个文件,这个文件不会被覆盖
Unix的一些特殊文件
/dev/urandom, 如果你改变通过这个文件读取你获得随机数据。这个通常用来当做随机数产生器。
/dev/null, 如果你改变输出到这个文件,数据会消失
/dev/zero, 如果你通过这文件读取,你会获得0。通常用来初始化 数据。
道(pipes)的合并: n>&m, 2>&1, 表示标准输出和标准错误合并一起。
Shell 的 pipes
简单的可以这样:
复杂一点:
参考:
(什么是shell), http://www.dnxxj.com/questions/475738a3445d72/什么是shell?.html
(系统的环境变量是什么) , http://www.dnxxj.com/questions/47577b40904540/系统的环境变量是什么%3F.html