*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 环境的不同而不同。
通配符: * 匹配任何位置