linux系统管理初学者指南
这本书更像是一个学习手册,介绍了linux的一些基本思想和常见指令。其中提到了两个点比较印象深刻:一个是linux设计思想,一个是程序和服务的概念。首先谈谈linux的设计思想,一共有以下几点:(1)一切皆文件(2)整个系统都是由众多小程序组成(3)避免和用户交互(4)使用文本保存配置信息。你会发现linux和windows系统是两种设计体系,windows用户操作更简单更直接,适合与人打交道,而linux是用各种操作指令和文件、和服务打交道,更适合于机器。两者像是“人机模式”和“机机”模式的区别。
第二点是提到进程和服务的管理。我们的程序是保存在硬盘中,当运行程序时将其读入内存,供CPU进行运算和处理。这是系统正在执行的任务,也是进程。CPU只能同时处理一个进程的数据,如果多个进程同时被调用时,CPU会将工作时间划分出多个时间片,并将所有进程放入一个队列中,操作系统根据每个进程的优先级为其轮流分配时间片,获取到时间片的进程就可以执行。你看这一段是不是也很像“人”处理事务的机制,人脑只有一个,在同一时刻大脑只能处理一件事项,但是我们有时候可以多线程去同时跟进处理多件事项,是因为我们也是将时间段分的足够细,依据优先级轮番处理多件事项,看起来像是同时处理多件事,本质也是时间片轮转法的应用。
这本书更像是一本工具书,我在梳理的过程中在想到底是记录操作手册一样,将操作指令一个个罗列起来呢,还是只关注理论方面的重点,做个知识要点的集锦。后面梳理过程中好像不自觉两者都想兼顾,导致篇幅过长。想到一个说法“读书就是先将书本读薄、再读厚的过程”,有时候什么都想记、什么都想要的心态去读书,导致信息繁杂知识要点太多罔顾不过来。还是应该简明扼要的整理才对,做笔记也是一个取舍的过程,留取骨架形成大纲。以后要这样做。
第一章 了解linux
1、Linux Kernel
系统内核Kernel是Linux系统中一个非常重要的概念。所谓系统内核就是负责完成操作系统基本功能的程序。什么是操作系统基本的功能呢?想一想我们平常在用计算机时都会做些什么?无非是用QQ聊天、用Word打字、用浏览器上网、玩各种游戏……但这些都不是操作系统的功能,而是由应用软件提供的功能。系统内核是实现上述所有这些应用的前提——要想做这些事情,必须先安装操作系统。
那么,到底什么是系统内核?系统内核在计算机中具体又起到了什么作用呢?
内核直接运行在计算机硬件之上,系统内核的主要作用就是替我们管理计算机中那些形形色色的硬件设备,它是所有外围程序运行的基础,也是计算机硬件跟用户之间的接口或桥梁。通过它,我们才能让CPU高效地处理各种数据;通过它,我们才能在硬盘中读写各种数据;通过它,我们才能与网络上的计算机进行通信……
系统内核的主要作用就是负责统一管理计算机中的硬件资源、提供用户操作界面、提供应用程序的运行环境,因而它可以被认为是计算机中所有软件的核心和基础。
Linux系统的内核Kernel和Linux系统中的绝大多数应用软件来自于GNU计划,任何人都可以自由地(也可以狭义地理解为免费地)去使用、传播它们,因此Linux系统的确切名称应该为“GNU/Linux操作系统”。
Linux的标识是一只企鹅。企鹅只在南极才有,而南极洲不属于任何国家,企鹅标识也就寓意开放和自由,这也正是Linux的精髓。
2、Linux的发行版本
之前提到过,只有内核的系统是无法使用的,作为最终用户,我们使用的其实都是运行在内核之上的各种应用程序。因此,很多公司或组织在Linux内核的基础之上添加了各种管理工具和应用软件,这就构成了一个完整的操作系统,像这样将系统内核和应用软件封装在一起的操作系统被称为Linux发行版。我们平常所接触和使用的各种Linux系统,其实都是Linux的发行版。
1、RedHatLinux
2、Centos
3、Debian
4、SUSE
3、什么是Shell
Linux系统的字符界面通常称为Shell。其实Shell本来是指系统的用户界面,它为用户与系统内核进行交互操作提供了一种接口。图形界面和字符界面都属于Shell,图形界面的Shell称为GUI(Graphical User Interface);字符界面的Shell称为CLI(Command Line Interface)。由于Linux系统的操作以字符界面为主,因此Shell通常专指字符界面CLI。
Shell其实也是Linux系统中的一个应用程序,它将用户输入的命令解释成系统内核能理解的语言,命令执行之后再将结果以用户可以理解的方式显示出来。
Shell命令由命令名、选项和参数共3个部分组成,基本格式如下
命令名 [选项] [参数]
命令名是描述命令功能的英文单词或缩写。
选项的作用是调节命令的具体功能,同一命令采用不同的选项,其功能各不相同。
参数是命令的处理对象,通常情况下参数可以是文件、目录或用户账号等内容。
第二章 文件和目录管理
1、Linux设计思想
(1)一切皆文件
在Linux系统中,不只数据以文件的形式存在,其他资源(包括硬件设备)也被组织为文件的形式。例如,硬盘以及硬盘中的每个分区在Linux中都被视为一个文件。
(2)整个系统由众多的小程序组成
在Linux中,很少有像Windows系统中那样动辄几GB的大型程序,整个Linux系统是由众多单一功能的小程序组成的。每个小程序只负责实现某一项具体功能,我们之后要学习的绝大多数Linux命令,其实各自有一个相应的小程序。如果要完成一项复杂任务,只需将相应的命令组合在一起使用即可。
(3)尽量避免与用户交互
避免与用户交互,是指在对系统进行管理操作的过程中,要尽量减少用户的参与。Linux(尤其是CentOS)系统,是主要用作服务器的操作系统。由于服务器管理员不可能全天候地守护在服务器旁边,而且一名管理员往往需要同时管理成百上千台服务器,因此在服务器上执行的操作最好通过编写脚本程序来完成,从而使其自动化地完成某些功能。
(4)使用纯文本文件保存配置信息
无论是Linux系统本身还是系统中的应用程序,它们的配置信息往往都保存在一个纯文本的配置文件中。如果需要改动系统或程序中的某项功能,那么只需编辑相应的配置文件。
2、Linux的目录结构
/boot:存放Linux系统启动所必需的文件,Kernel 被存放在这个目录中。
/etc:存放Linux系统和各种程序的配置文件,Linux中的很多操作和配置都是通过修改配置文件实现的。/etc目录的作用类似于Windows系统中的注册表。
/dev:存放Linux系统中的硬盘、光驱和鼠标等硬件设备文件。
/bin:存放Linux系统中常用的基本命令,任何用户都有权限执行。
/sbin:存放Linux系统基本的管理命令,只有管理员权限才可以执行。
/usr:软件的默认安装位置,类似于Windows中的Program Files目录。
/home:普通用户家目录(也称为主目录)。例如,用户账号“student”对应的家目录位于“/home/student”。
/root:超级用户root的家目录。
/mnt:一般是空的,用来临时挂载存储设备。
/media:用于系统自动挂载可移动存储设备。
/tmp:临时目录,用于存放系统或程序运行时产生的一些临时文件,可供所有用户执行写入操作。
/var:存放系统运行过程中经常变化的文件,如/var/log用于存放日志文件、/var/spool/mail用于存放邮件等。
/lib、/lib64:存放各种链接库文件。链接库也是一种二进制文件,只不过没有独立的执行入口,而只能被其他程序所调用。
/proc:基于内存的虚拟文件系统,用于存储系统内核和进程的相关信息。
/run:用于存放进程产生的临时文件,系统重启后会消失。
/lost+found:存放系统意外崩溃或关机时产生的文件碎片。
/:是Linux系统的根目录,也是其他所有目录的起点。
Windows中所有的用户配置文件夹都统一存放在“C:\Users\”下以用户名命名的子文件夹中,如用户“jerry”的用户配置文件夹是“C:\Users\jerry”。Linux系统中普通用户的家目录默认集中存放在“/home”目录中,同样也是以用户名命名,如用户student的家目录是“/home/student”。例外的是root用户,这个在Linux中具有“至高无上”权限的用户,其家目录也是单独的“/root”,以区别于其他普通用户。
3、文件目录操作指令
-
ls-列表显示
-
touch-创建空文件
-
mkdir-创建目录
-
rmdir-删除空目录
-
cp-复制文件或目录
- cp -r 递归复制所有文件和子目录
- cp -p 复制保留源文件的属性不变
-
mv-移动(重命名)文件或目录
-
rm-删除文件或目录
- rm -f 强制删除
- rm -r 递归删除这个目录
- rm -rf 属于高危操作 建议先备份 再删除
4、通配符和扩展符
在Linux系统中执行命令时,可以通过一些特殊符号来对多个文件进行批量操作,从而提高操作效率。
1.通配符
顾名思义,通配符就是通用的匹配信息的符号,Linux中常用的通配符主要有星号(*)、问号(?)和中括号([ ])。
(1)星号(*)
通配符星号(*)可以匹配任意数量的任意字符。
例如,列出/etc目录下所有以“pa”开头的文件或目录,其中目录只显示其本身,而不显示其中的内容。
[root@localhost ~]# ls -d /etc/pa*
/etc/pam.d /etc/passwd /etc/passwd-
例如,显示/etc目录下所有名字中包括“conf ”的文件或目录。
[root@localhost ~]# ls -d /etc/*conf*
例如,删除/root/test目录中的所有内容。
[root@localhost ~]# rm -rf /root/test/*
例如,删除/tmp目录中所有文件名后缀为txt的文件。
[root@localhost ~]# rm -f /tmp/*.txt
(2)问号(?)
通配符问号(?)可以在相应位置上匹配任意单个字符。
例如,以长格式列出/dev目录中所有以“sd”开头并且文件名只有3个字符的文件信息。
[root@localhost ~]# ls -lh /dev/sd?
brw-rw----. 1 root disk 8, 0 11月 3 21:14 /dev/sda
(3)中括号([ ])
通配符([ ])可以匹配指定范围内的任意单个字符。“[ ]”中的字符范围可以是几个字符的列表,如“[a,b,c]”表示a、b、c任意一个字符。“[ ]”中的字符也可以是使用“-”给定的一个取值范围,如“[a-z]”表示任意一个小写字母,“[0-9]”表示任意一个数字。
例如,列出/dev目录中所有以“d”或“f”开头并且文件名为3个字符的文件。
[root@localhost ~]# ls /dev/[df]??
/dev/dvd /dev/fb0
例如,列出/dev/目录中以“a”“b”“c”开头的所有文件。
[root@localhost ~]# ls /dev/[a-c]*
例如,列出/dev/目录中文件名的第4个字符是数字的所有文件。
[root@localhost ~]# ls /dev/???[0-9]*
/dev/dm-0 /dev/tty13 /dev/tty22 /dev/tty31 /dev/tty40 /dev/tty5 /dev/tty59 /dev/vcs2/dev/dm-1 /dev/tty14 /dev/tty23 /dev/tty32
/dev/tty41 /dev/tty50
在“[ ]”中还可以用“!”或“^”表示不在指定字符范围内的其他字符。
例如,列出/dev目录中不是以“f”“h”“i”开头的所有文件。
[root@localhost ~]# ls /dev/[!fhi]*
/dev/agpgart /dev/ram10 /dev/tty17 /dev/tty53
/dev/autofs /dev/ram11 /dev/tty18 /dev/tty54
需要强调的是,“*”可以匹配的字符数量没有限制,可以是0个、1个或多个;而“?”和“[ ]”可以匹配的字符数量只能是1个,这一点在具体应用时需要注意。
2.扩展符
在扩展符({})中可以包含一个以逗号分隔的列表,并将其自动展开为多个路径或文件名。例如“/tmp/{a,b}”相当于“/tmp/a”和“/tmp/b”。
例如,一次性创建/tmp/a、/tmp/b、/tmp/c这3个目录。
[root@localhost ~]# mkdir /tmp/{a,b,c}
例如,一次性创建/tmp/1.txt、/tmp/2.txt、/tmp/3.txt这3个文件。
[root@localhost ~]# touch /tmp/{1,2,3}.txt
另外,在“{}”中还可以使用“…”表示一个连续的空间,比如“{1…5}”就相当于“{1,2,3,4,5}”,“{a…e}”相当于“{a,b,c,d,e}”。
例如,在/tmp目录中一次性创建test1.txt、test2.txt、…、test10.txt共10个文件。
[root@localhost ~]# touch /tmp/test{1..10}.txt
[root@localhost ~]# ls /tmp/*.txt
/tmp/test10.txt /tmp/test2.txt /tmp/test4.txt /tmp/test6.txt /tmp/
test8.txt
/tmp/test1.txt /tmp/test3.txt /tmp/test5.txt /tmp/test7.txt /tmp/
test9.txt
5、文件内容操作命令
-
cat—显示文本内容
- cat -n 显示行号 不适用于看长文件
-
more、less—分页显示文本内容
-
head/tail —显示文件开头或末尾的部分内容
- head -n 指定显示的具体函数
- head -2 etc/passwd
- tail -3 etx/passwd
- tail -f 实时显示文件增量内容
- head -n 指定显示的具体函数
-
wc—文件内容统计
- wc /etc/resolc.conf
- 3 8 73 /etc/resolv.conf #/etc/resolv.conf文件有三行、8个单词、73个字节
- wc /etc/resolc.conf
-
echo—输出指定内容
- echo ‘a’>1.txt 将echo内容覆盖到指定文件1.txt中
- echo ‘aa’>>1.txt 将echo内容追加到指定文件1.txt中
-
grep命令—文件内容查找
通过使用正则表达式来设置所要查找的条件。正则表达式定义了很多表示不同含义的符号,如符号“^”表示以指定的字符开头,符号“$”表示以指定的字符结尾
-
diff命令—文件内容对比
字母“a”“d”“c”分别表示添加、删除及修改操作。其中,以“<”开始的行属于文件1,以“>”开始的行属于文件2。
diff .bashrc .bashrc.bak
13d12
< cd /tmp
在显示结果中,字母“a”“d”“c”分别表示添加、删除及修改操作。其中,以“<”开始的行属于文件1,以“>”开始的行属于文件2。
命令执行后显示的结果表示,文件1(也就是“.bashrc”)的第13行在文件2(也就是“.bashrc.bak”)中被删除了,被删除的行的内容是“cd /tmp”。
如果将两个文件的位置互换,结果就会不同。
[root@localhost ~]# diff .bashrc.bak .bashrc
12a13
\> cd /tmp
这里的结果就显示文件“.bashrc”相比“.bashrc.bak”增加了一行内容。
diff命令的常用选项是“–brief ”,通过该选项可以确认两个文件是否不同。
[root@localhost ~]# diff --brief
-
stat命令——查看文件元数据
Linux系统中的每个文件都包括两类数据:
一类是数据本身,例如用cat、more、less等命令所查看到的就是这类数据;
另一类称为元数据(metadata),元数据用于描述文件的属性,主要包括文件大小、存储位置、访问权限以及时间戳等信息。
使用stat命令可以查看文件的元数据,比如查看/etc/passwd文件的元数据。
[root@localhost ~]# stat /etc/passwd
6、文件查找命令
locate命令——简单快速的文件查找命令
locate是一个简单快速的文件查找命令。它的查找速度非常快,而且无须指定查找起始路径。通过locate命令无法实现精确查找。
另外,locate命令的查找结果依赖于事先构建好的索引数据库,而索引数据库默认情况下主要是由系统根据周期性任务计划来自动更新,因而locate命令只能查找到索引数据库更新之前的文件,其查找结果也未必准确。
例如新建一个文件,使用locate命令就无法找到该文件。
find命令——强大的文件查找命令
find是Linux系统中功能强大的文件查找命令。它可以实现文件的精确查找,但用法相对较为复杂。find命令的语法格式如下。
find [查找路径] [选项] [查找条件] [处理动作
“-name”选项,按名称查找,允许使用通配符
“-type”选项,按文件类型查
文件类型指的是普通文件(f)、目录(d)、符号链接文件(l)、块设备文件(b)和字符设备文件(c)等。
which命令——查找外部命令所对应的程序文件
Linux系统提供了一个专门用于查找外部命令所对应的程序文件的命令——which,其搜索范围由环境变量PATH决定。
例如,查找ls命令所对应的程序文件。
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
7、内部命令和外部命令
Linux系统中的命令总体上分为内部命令和外部命令两大类。
-
内部命令:集成在Shell中的命令,属于Shell的一部分。只要Shell被执行,内部命令就自动载入内存,用户可以直接使用,如cd、pwd、echo命令等。
-
外部命令:考虑到运行效率等原因,不可能把所有的命令都集成在Shell中,更多的Linux命令是独立于Shell之外的,这些就称为外部命令,如cp、ls等都属于外部命令。
Linux系统中的绝大多数命令属于外部命令,而每个外部命令都对应了系统中的一个可执行的二进制程序文件(biniary file)。这些二进制程序文件主要存放在下列目录中。
-
普通命令:/bin、/usr/bin和/usr/local/bin。普通命令是指所有用户都可以执行的命令
-
管理命令:/sbin、/usr/sbin和/usr/local/sbin。管理命令则只有管理员root才有权限执行。
-
Linux系统默认将外部命令程序文件的存放路径保存在一个名为PATH的环境变量中,执行“echo $PATH”命令可以显示出PATH变量里保存的目录路径(路径之间用“:”间隔)。
[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
当用户输入命令并执行时,Shell首先检查命令是否是内部命令,若不是,Shell就会从PATH变量所保存的这些路径中寻找外部命令所对应的程序文件。只有找到了程序文件,才能正确地去执行命令。这也就意味着,如果把一个外部命令所对应的程序文件删除,或者存放外部命令程序文件的目录没有被添加到PATH变量里,这会导致外部命令无法正常执行。
当然,如果用户每执行一条命令都要去PATH变量中查找程序文件路径,那么势必会影响命令执行效率,因而Linux系统会将用户在当前Shell中所执行的外部命令程序文件路径缓存下来,这样当再次执行同样的命令时,就会直接从缓存中调用,而无须在PATH变量中查找。
用户可以通过type命令来判断一个命令到底是内部命令还是外部命令。
[root@localhost ~]# type cd
cd 是 shell 内嵌
提示信息“cd 是shell内嵌”表明cd是一个内部命令。
[root@localhost ~]# type find
find 是 /usr/bin/find
8、其他辅助命令
Linux系统中还有一些命令,用法和功能都比较简单,放在这里集中介绍。
- ln命令——为文件或目录建立链接
ln命令用于为文件或目录建立快捷方式(在Linux系统中称为链接文件)。
ln命令的语法格式如下。
ln [选项] 源文件 目标文件
链接文件分为硬链接和软链接两种类型,主要区别是既不能对目录创建硬链接,也不能跨越不同分区创建硬链接文件,而软链接则没有这些限制,因此,平时使用的大多是软链接。在创建软链接时,需要使用“-s”选项。
例如,在“/root”目录中为SSH服务配置文件“/etc/ssh/sshd_config”创建一个名为“ssh”的软链接。
[root@localhost test]# ln -s /etc/ssh/sshd_config /root/ssh
查看这个链接文件的详细信息,可以看到其对应的源文件。
[root@localhost ~]# ls -l /root/ssh
lrwxrwxrwx. 1 root root 20 1月 29 08:03 /root/ssh -> /etc/ssh/sshd_config
同Windows中的快捷方式一样,对链接文件所做的操作都会对应到源文件上。但是,如果使用rm命令删除链接文件,那么将只删除该链接文件,而实际的源不会删除。
- 重定向和管道
重定向和管道是Linux系统进程间的一种通信方式,在系统管理中起着举足轻重的作用。
- 标准输入与输出
Linux系统中的绝大多数程序在运行时要进行输入和输出的操作。输入操作告诉程序所要处理的数据,输出操作则将程序的处理结果显示出来。由于Linux中一切皆文件,因此负责输入和输出的硬件设备也被视为系统中的一个文件。在用户通过操作系统处理信息的过程中,包括以下3类交互设备文件。
-
标准输入(Stdin):默认的设备是键盘,文件描述符为0,程序从标准输入文件中读取在执行过程中需要的数据。
-
标准输出(Stdout):默认的设备是显示器,文件描述符为1,程序将执行后的输出结果发送到标准输出文件。
-
标准错误(Stderr):默认的设备是显示器,文件描述符为2,程序将执行时产生的错误信息发送到标准错误文件。
一个Linux程序通常从标准输入中得到输入数据,并将正常数据输出到标准输出,将错误信息输出到标准错误。
管道则为输入和输出重定向的结合,一个程序向管道的一端发送数据,而另一个程序从该管道的另一端读取数据,即“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。管道为不同命令之间的协同工作提供了一种机制,其符号是“|”。
-
标准错误重定向
标准错误重定向就是将命令执行过程中出现的错误信息重新定向并保存到指定的文件中,而不是直接显示在屏幕上。由于标准错误所对应的设备也是显示器,因此为了与标准输出进行区分,标准错误重定向的表示符号是“2>”,2是标准错误输出的文件描述符。其实之前在使用标准输入重定向、标准输出重定向时也应分别使用0、1描述符,只是因为这是默认值,所以通常会省略。
例如,执行下面的find命令,命令执行后既有正确查找结果,又有错误提示信息。
[root@localhost ~]# find / -user student
find: '/proc/55112/task/55112/fd/6': 没有那个文件或目录
find: '/proc/55112/task/55112/fdinfo/6': 没有那个文件或目录
find: '/proc/55112/fd/6': 没有那个文件或目录
find: '/proc/55112/fdinfo/6': 没有那个文件或目录
/var/spool/mail/student
/home/student
/home/student/.mozilla
我们将上面这条命令的执行结果重定向保存到一个指定的文件find1.txt中,但是屏幕上依然出现了错误信息。这是由于在默认情况下只能重定向标准输出而无法重定向标准错误。查看find1.txt文件,其中保存的也仅有正确查找结果。
[root@localhost ~]# find / -user student > find1.txt
find: '/proc/55121/task/55121/fd/6': 没有那个文件或目录
但是,在某些情况下,我们需要将某个程序运行过程中产生的错误信息都保存到指定的文件中,需要专门针对错误信息进行重定向了。我们再次执行这条命令,并将错误信息重定向保存到find2.txt文件中,这时在屏幕上就只显示正确查找结果,而在find2.txt文件中则专门存放错误信息。
[root@localhost ~]# find / -user student 2> find2.txt
/var/spool/mail/student
/home/student
/home/student/.mozilla
有时我们还可能需要将程序运行的所有信息,无论其是正确还是错误,都保存到指定文件中,这时就可以使用符号“&>”或“&>>”来合并正常输出和错误输出。
[root@localhost ~]# find / -user student &> find3.txt
在Linux中,还提供了一个特殊的设备文件/dev/null,这是一个被称为“黑洞”的空设备文件,任何进入该设备的数据都将被“吞并”。如果我们将重定向的目标指向它,那么系统将不会有任何的反应或显示,相当于将这部分信息被丢弃了。有的命令在执行过程中会产生一些错误信息,而我们并不关心这些错误信息,只想看到正常执行的结果,这时就可以通过将标准错误重定向到/dev/null文件,来过滤这些错误信息。
第三章 进程和服务管理
进程是系统中正在运行的程序,服务则是系统启动后自动在后台运行的程序。合理地分配和调度系统的进程,配置管理系统所开启的服务,是保证系统稳定、高效运行的关键。
1、 什么是进程
在操作系统中进行的所有操作都是通过运行相应的程序来实现的。这些程序平时都存储在硬盘中。当要运行某个程序时,就要将其从硬盘调入内存中,以供CPU进行运算和处理。这些系统中正在运行的程序被称为进程,是系统正在执行的任务。
进程也是程序,但它和程序是有区别的。
(1)程序只占用磁盘空间,不占用系统运行资源。
(2)进程由程序产生,要占用CPU和内存等系统资源。
(3)当关闭进程之后,它所占用的资源也随之释放。例如,用户打开一个文件,就会产生一个打开文件的进程,关闭文件,进程也随之关闭。
(4)并非每个程序只能对应一个进程,有的程序启动后可以创建一个或多个进程,例如提供Web服务的httpd程序,在它运行之后,会自动产生6个进程,以应对大量用户的同时访问请求。
进程也是分配和调度操作系统资源的基本单位。Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用同一个Linux系统;多任务是指在Linux中可以同时运行多个程序,执行多个任务。在我们同时运行了多个程序之后,系统中会产生很多个进程,所有的进程都需要由CPU来进行运算和处理,而CPU在同一个时刻其实只能处理一个进程的数据,那么如何让CPU同时处理多个进程的数据呢?由于CPU的运算速度非常快,因此采取的方法就是将CPU的工作时间划分成很多个时间片,每个时间片很短,然后将所有的进程都放在一个队列中,操作系统根据每个进程的优先级为它们轮流分配时间片,分配到时间片的进程就可以去执行。如果时间片用完,而相应的进程仍然没有运行结束,那么系统就会将其暂时挂起并放到队列的后部,等到它再次轮到时间片的时候才会去执行。如果进程运行结束,就将其从队列中去除。操作系统中的多个进程其实是在轮流执行的,但由于速度太快,用户根本感觉不到。
上面提到的单CPU多任务操作系统的情形,虽然系统可以运行多个任务,但是在某一个时间点,CPU只能执行一个任务,而在多CPU多任务的操作系统下,由于有多个CPU,因此在某个时间点上,可以有多个任务同时执行。
1、进程的状态
进程在启动后不一定马上开始运行,因而进程存在很多种状态。从理论的角度来说,在进程的运行过程中通常会在3种基本状态之间转换:运行态、就绪态、阻塞态(等待态)。
(1)运行态
运行态是指当前进程已分配到CPU,正在处理器上执行时的状态。处于运行态的进程个数不能大于CPU的数目,在单CPU环境中,任何时刻处于运行态的进程最多有一个。
(2)就绪态
就绪态是指进程已具备运行条件,但因为其他进程正占用CPU,所以暂时不能运行而等待分配CPU的状态。一旦把CPU分给它,就可以立即运行。在操作系统中,处于就绪态的进程数目可以是多个。
(3)阻塞态
阻塞态(等待态)是指进程因等待某种事件发生(如等待某一输入/输出操作完成、等待其他进程发来的信号等)而暂时不能运行的状态。此时即使CPU空闲,阻塞态的进程也不能运行,系统中处于这种状态的进程也可以是多个。当阻塞态进程所要等待的事件发生之后,就会转入就绪态。
具体到Linux系统中,进程所处的状态要更为复杂多样一些。系统为每种进程状态都定义了一个符号,以便更好地区分标记。
(1)可运行状态(R)
处于这种状态的进程,要么正在运行,要么正准备运行。也就是说,理论上处于运行态和就绪态的进程,在Linux系统中都被视作可运行状态。
(2)可中断的睡眠状态(S)
这类进程处于阻塞状态,一旦达到某种条件,就会变为就绪态。
(3)不可中断的睡眠状态(D)
与“可中断的睡眠状态”含义基本类似,唯一不同的是处于这个状态的进程对中断信号不做响应。例如,某个进程正在从硬盘向内存中读入大量数据时,就会处于这种状态。
(4)僵死状态(Z)
正常情况下,子进程应该由父进程结束,并释放其所占用的系统资源。当某个进程已经运行结束,但是它的父进程还没有释放其系统资源时,这个进程就会处于僵死状态。
(5)停止状态(T)
此时的进程暂停于内存中,但不会被调度,等待接受某种特殊处理。
2、父进程和子进程
2、查看系统资源的占用信息
系统资源主要是指CPU、内存以及磁盘存储空间,管理员通过监视这些系统资源的占用信息,可以随时了解系统的资源消耗情况。
查看CPU的硬件信息-cat
通过执行“cat /proc/cpuinfo”命令可以查看CPU的硬件信息,在CPU的硬件信息中,我们最关心的是CPU的核心数量.
查看内存的使用情况-free
free命令可以显示内存、缓存和交换分区的使用情况。
常用选项如下。
-h:人性化显示,以K(KB)、M(MB)、G(GB)等单位表示容量。
-s:指定动态显示时的刷新频率。
查看硬盘的使用情况-df
利用之前介绍过的“df –hT”命令可以显示硬盘文件系统的使用情况。尤其是对于根分区,要经常关注其可用空间还有多少。
[root@localhost ~]# df -hT | grep -v tmpfs
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/cl_localhost-root xfs 17G 4.1G 13G 24% /
/dev/sda1 xfs 1014M 173M 842M 18% /boot
/dev/sr0 iso9660 4.1G 4.1G 0 100% /mnt/cdrom
3、服务
什么是服务
服务是一种比较特殊的程序:服务是在系统后台运行并等待用户或其他软件调用的一类特殊程序。我们通过执行命令所打开的进程大多属于交互进程,如果不采用nohup进行处理,那么这些进程基本上与终端相关,只要将进程所在的终端关闭,这些进程也就自动终止了。但是服务则不同,我们无论在哪个终端上运行服务,该服务所产生的进程都与终端无关,也就是说,将终端关闭之后,这些服务进程仍然会在系统后台自动运行。
- 系统初始化进程systemd
初始化进程是Linux系统启动时第一个被执行的程序,它负责启动并管理其他各种服务,完成Linux系统的初始化工作.
优势:
一:在系统启动时采用了并发启动机制,因而CentOS 7的开机速度相比之前的版本得到了不少的提升。操作系统也可以并行处理多个任务,因而没必要让那些本不相关的服务互相等待。systemd让那些不存在依赖关系的服务同时并行启动,因而大大加快了系统启动的速度。
二:systemd提供了按需启动服务的功能。
-
利用systemctl命令管理服务
systemctl是systemd提供的一个重要管理工具,主要负责控制systemd系统和服务管理器
-
管理服务运行状态
-
利用systemctl命令管理服务运行状态的语法格式如下。
systemctl start|stop|status|restart|reload 服务名
在所显示的信息中,第二行的“Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)”,表示服务已经被加载,该服务的Service unit配置文件为/usr/lib/systemd/system/sshd.service,“enabled”表示该服务已经被设为开机自动启动,“vendor preset: enabled”表示该服务在系统中默认被预设为开机自动启动。第三行的“Active”部分显示“active(running)”,表示服务正处于运行状态。第六行的“Main PID: 1150 (sshd)”表示该服务运行之后所产生的主进程PID为1150,进程名为sshd。最后会显示若干行在日志文件中所记录的与该服务有关的一些信息。
-
-