命令是CentOS非常重要的组成部分,本节将对系统中的命令进行介绍,主要包括命令的类型和命令执行的过程两方面。
简单来说,命令就是CentOS中一些按顺序组成的字符(串),这些字符(串)能够被系统识别并执行,它们是维护系统不可或缺的工具。
CentOS的命令可分为内置命令和外部命令两类,内置命令主要是一些可执行的二进制文本文件(通常不可阅读),外部命令主要是一些可执行的普通(可执行)文本文件(如安装某个软件时产生的文件)。
系统的内置命令和外部命令都是为了满足系统维护的需要。系统的内置命令主要存储在/user/bin/目录下,每个命令对应一个(可执行)文件,也就是说执行命令时实际上是执行它对应的文件。
无论是系统的内置命令还是外部命令,想辨别它们的类型,可以借助type命令来查看。通过type对某个命令进行查询,就可以获取被查询命令的相关信息,例如:
[root@centos-s8 ~]# type man man is hashed (/usr/bin/man) [root@centos-s8 ~]# type pwd pwd is a shell builtin
对于这些命令,它们的使用权限会因用户的类型(级别)不同而不同,比如超级用户root能够执行系统中的任何命令,但普通用户只能执行部分命令,也就是说系统中命令的使用权并不是对所有用户开放的。因此,在执行调整系统参数等操作时就需要来自root的权限,但作为普通用户,只能执行一些对系统不会造成危害的命令。
系统中所执行的命令都是通过Shell完成转换后传送到内核中执行的,因此命令从输入到正式执行,Shell负责进行一系列的操作。
对于每个被执行的命令,系统都会从所执行的命令中获取相关的参数来创建对应的子进程,随命令执行而产生的子进程具体执行的操作由命令行的参数决定,并在执行后返回结果,但这个结果可能不是想要的。
命令的基本格式如下:
command [options] [arguments]
命令的执行过程基本按如下步骤进行:
1)读取用户从输入设备输入的命令。
2)将命令转为文件名,并将其他参数改造为系统调用execve()内部处理所要求的形式。
3)终端进程调用fork()建立新的子进程。
4)终端进程用系统调用wait()来等待子进程执行完成(如果是后台命令就不等待)。
5)如果命令末尾没有“&”(后台命令符号),则终端进程不是执行系统调用wait()等待,而是立即执行并返回提示符,等待继续执行其他的命令。如果命令末尾有“&”,则终端进程要一直等待,直到命令执行完成后才返回终端提示符。
6)当子进程完成处理后,向父进程(终端进程)报告,此时终端进程“醒”来,并在做必要的判断等相关工作后,终止子进程并返回提示符,让用户输入新的命令。