《linux系统命令及shell脚本》阅读笔记 6
关于Shell linux理解图示
不管是哪类用户,在登录Linux系统之后,都是无法直接与计算机进行交流的,这就需要一个中间角色来负责将用户输入的命令传达给计算机,使得计算机能够完成各种指定的操作。但只要用户登录后就可以执行操作,这是因为在用户登录操作系统后就执行了shell,而我们开启一个终端窗口,实际上是开启一个子shell。
对于计算机,它只能够识别由0和1组成的机器码,并利用这些机器码来完成各种操作。但我们输入的并非由0和 1 所组成的机器码,而是由一些字母或字母和数字等字符组成的指令。而shell就负责把用户所输入的命令翻译成这些包含0和1的机器码,然后传送到内核中去执行,并把执行结果显示在用户面前。
事实上,shell是命令语言、命令解释程序及程序设计语言的统称。更简单地说,shell其实就是Linux系统内核与用户之间的桥梁,它为用户提供使用操作系统的接口。如果把Linux内核比作一个球体的中心, shell就是这个球体的外层,如
图1
图1 shell与Linux内核的关系
形象地说,shell是介于操作系统内核与用户之间的一个绝缘层。而更准确地说,shell是一种强大的计算机程序设计语言,通过shell就能够轻松调用其他程序并对它们的输出进行处理,这种能力使得shell成为完成文本处理任务的一个理想工具。
Linux系统下的每个shell程序称为一个脚本,它是一种很容易使用的工具,通过它可以将系统调用、公共程序、工具以及编译过的二进制程序黏合在一起来并建立应用。而事实上,所有的Linux/UNIX命令和工具再加上公共程序,对于shell脚本来说都是可调用的。而shell的内置命令也会给脚本添加强而有力的支持并提高灵活性。shell脚本对于管理系统任务和其他重复工作的例程来说,都表现得非常好。
Linux 命令
在Linux操作系统下,命令行功能强大,可快速完成图形系统某些没法完成的操作。其高效性、灵活性目前得到不断提升,更重要的是,命令行的使用为机器节省了大量的资源,它比运行图形界面所消耗的资源少很多。
Linux系统下命令行的格式如下:
command [options] [arguments]
Linux 系统的命令实际上可视为一个可执行文件,因此在每条命令的执行的过程中,系统都会从所执行的命令中获取参数来创建对应的子进程,随命令的执行而产生的这个子进程,会根据命令的参数来执行,并且命令在返回结果的同时子进程也终止。命令的执行过程基本上按如下步骤。
(1)读取用户由键盘输入的命令行。
(2)分析命令,以命令名作为文件名,并将其他参数改造为系统调用execve( )完成内部处理所要求的形式。
(3)终端进程调用fork( )创建一个子进程。
(4)终端进程本身用系统调用wait4( )来等待子进程完成(如果是后台命令,则不等待)。当子进程运行时调用execve( ),子进程根据文件名(即命令名)到目录中查找有关文件(这是命令解释程序构成的文件),将它调入内存,执行这个程序(解释这条命令)。
(5)如果命令末尾有“&”号(后台命令符号),则终端进程不需要系统调用 wait4( )等待,立即显示提示符,让用户输入下一条命令,跳转到步骤⑴。如果命令末尾没有“&”号,则终端进程要一直等待,当子进程(即运行命令的进程)完成处理后终止,向父进程(终端进程)报告,此时唤醒终端进程,在做必要的判断等工作后,终端进程显示提示符,让用户输入新的命令,重复上述处理过程。
2.last命令:显示登录系统的用户信息
补充说明:last 命令用于显示系统开机以来记录用户登录、系统重启等信息的列表清单,命令的使用权限对系统所有用户开放。
1)命令语法格式:last [options] [name…] [tty…]
刘杰 10:48:34
2)命令参数选项说明如下所示。
-a:在最后一行显示主机名;
-R:忽略显示主机名;
-o(old):以旧格式读取wtmp文件;
-x:显示系统条目和运行级别的变化。
3)范例列举:
[root@rhl5 ~]# last # 显示登录过系统的用户信息
rootpts/1 192.168.217.1 Tue Jul 23 02:33 still logged in
root pts/0 192.168.217.1 Tue Jul 23 02:29 still logged in
reboot system boot 2.6.18-164.el5 Tue Jul 23 02:27 (00:06)
root pts/1 192.168.217.1 Mon Jul 22 20:55–down (00:00)
root pts/2 192.168.217.1 Mon Jul 22 20:45- down (00:09)
root pts/1 192.168.217.1 Mon Jul 22 20:37- 20:54 (00:17)
root pts/1 192.168.217.1 Mon Jul 22 20:34- 20:37 (00:03)
root pts/0 192.168.217.1 Mon Jul 22 20:23- down (00:32)
reboot system boot 2.6.18-164.el5 Mon Jul 22 20:19 (00:36)
root pts/1 192.168.217.1 Mon Jul 22 18:50- down (00:11)
root pts/0 192.168.217.1 Mon Jul 22 17:27- 19:01 (01:33)
reboot system boot 2.6.18-164.el5 Mon Jul 22 17:25 (01:36)
root pts/0 192.168.217.1 Mon Jul 22 15:58- down (01:25)
reboot system boot 2.6.18-164.el5 Mon Jul 22 15:57 (01:26)
root pts/0 192.168.217.1 Mon Jul 22 03:14- down (00:26)
reboot system boot 2.6.18-164.el5 Mon Jul 22 03:11 (00:29)
root pts/1 192.168.217.1 Sun Jul 21 18:40- down (00:56)
root pts/0 192.168.217.1 Sun Jul 21 18:37- 19:37 (00:59)
reboot system boot 2.6.18-164.el5 Sun Jul 21 18:37 (01:00)
root pts/1 :0.0 Sun Jul 14 07:53- down (00:00)
root :0 Sun Jul 14 07:53- down (00:00)
root :0 Sun Jul 14 07:53- 07:53 (00:00)
reboot system boot 2.6.18-164.el5 Sun Jul 14 07:52 (00:01)
reboot system boot 2.6.18-164.el5 Sun Jul 14 07:45 (00:05)
wtmp begins Sun Jul 14 07:45:20 2013
[root@rhl5 ~]# last | wc-l # 统计登录用户的数量
26
3.free命令:显示系统内存状态
补充说明:free 命令显示内存的信息,包括物理内存、虚拟的交换文件内存、共享内存区段以及系统主要使用的缓冲区等。其使用权限对系统所有用户开放。
1)命令语法格式:free [options] [-s delay ] [option]
2)命令参数选项说明如下所示。
-b(bytes):以字节为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s:持续观察内存使用状况。