RHCSA笔记-07
进程
什么是进程?
进程是已启动的可执行程序的运行实例,进程的概念主要有两点:
第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和 堆栈。文本区域存储处理器执行的代码;数据区域;堆栈区域存储着活动过程调用的指令和本地变量。
第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能 成为一个活动的实体,我们称其为进程。
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
程序和进程的区别
-
程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程 -
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程 -
进程还具有并发性和交往性,而程序却是封闭的 -
进程和线程的区别 -
一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。 -
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能 被执行。
进程分类
父子进程的关系
子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程
在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。
父进程终止子进程自然终止。
子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行自己的程序代码。
守护进程也称精灵进程(Daemon)
这是运行在后台的一种特殊进程。在Linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出(或者杀死相应的守护进程则退出)。
进程状态 在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程。在进程运行时,它 对CPU 时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。
查看进程
w 查看当前系统信息
[root@bogon cron]# w
14:48:39 up 2:46, 1 user, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.203.1 12:27 0.00s 0.17s 0.02s w
w显示信息的含义: JCPU: 以终端代号来区分,该终端所有相关的进程的进程执行时,所消耗的 CPU时间会显示在这里 PCPU : cpu 执行程序消耗的时间 WHAT: 用户下在执行的操作 load average : 分别显示系统在过去 1、 5、 15分钟内的平均负载程度。 FROM:显示用户从何处登录系统,“: 0”的显示代表该用户是从 X Windows 下,打开文本模式窗口登 录的 IDLE: 用户闲置的时间,这是一个计时器,一旦用户执行任何操作,该计时器便会被重置 查看个别用户信息: w [ 用户名 ]
ps指令
ps显示某个时间点的程序运行情况
常用选项 :ps -aux ps -ef
-a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示
-f:做一个更完整的输出
ps 查看隶属自己的进程
ps -u or -l 查看隶属于自己进程详细信息
ps -le or -aux 查看所有用户执行的进程的详细信息
ps -aux --sort pid 可按进程执行的时间、 PID、 UID 等对进程进行排序
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 42097 42091 0 80 0 - 29040 wait pts/0 00:00:00 bash
0 R 0 43256 42097 0 80 0 - 34857 - pts/0 00:00:00 ps
显示信息的含义:
F:代表这个程序标志(process flags),说明这个程序的权限,常见号码有:4表示此程序的权限为 root;1表示此子程序仅进行复制(fork)而没有实际执行(exec)。
S:代表这个程序的状态(STAT),主要的状态有:
R(Running):该程序正在运作中;
S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;
D:不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;
T:停止状态(stop),可能是在工作控制(后台暂停)或traced状态;
Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。(如果查看某个进程信息后面显示时,就代表该进程为僵尸进程)
+:位于后台的进程组
UID/PID/PPID:代表此程序被该UID所拥有/程序的PID号码/此程序的父进程PID号码。
C:代表CPU使用率,单位为百分比;
PRI/NI:Priority/Nice 的缩写,代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执 行。
ADDR/SZ/WCHAN :都与内存有关,ADDR是kernel funcition,指出该程序在内存的哪个部分,如果是 running的程序,一般会显示-。SZ代表此程序用掉多少内存,WCHAN表示目前程序是否运作中,若为-表示 正在运行。
TTY:登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。
TIME:使用掉的CPU时间,即此程序实际花费CPU运作的时间。
CMD:触发此进程的指令是什么。
动态查看进程top
top [-d 数字] | [-bnp]
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒
-b:以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。
-n:与-b搭配,进行几次top的输出结果
-i:不显示闲置或者僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险
-p:指定某些个PID来进行查看检测
在top执行过程中可以使用的按键命令: **h或?**显示帮助信息,给出交互式命令的一些说明
k 终止一个进程,系统将提示用户输入一个需要终止进程的PID
i 忽略闲置进程和僵死进程,这是一个开关式命令
**s **改变top 输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是秒。如果输入 小数,就换算成毫秒;如果输入0,系统输出将不断刷新,默认刷新时间是3秒;需要注 意的是,如果设置太短的时间,可能会引起系统不断刷新,无法看清输出显示情况,而且 系统负载也会加大
o或者O改变top输出信息中显示项的顺序。按小写的a-z键可以将相应的列向右移动,而按大写的 A-Z键可以将相应的列向左移动。最后按enter确定
f或者F 从当前显示列表中添加或者删除项,按f键之后会显示列的列表,按a-z键即可显示或隐藏 对应的列。最后按enter确定
m 切换显示内存信息
t 切换显示进程和cpu状态信息
r 重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程 优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认 值是10
l 切换显示平均负载和启动时间信息
q 退出top显示
c 切换显示完整命令行和命令名称信息
M 根据驻留内存大小进行排序输出
N 以PID来排序
P 根据CPU使用百分比大小进行排序输出
T 根据时间/累计时间进行排序输出
S 切换到累计模式
W 将当前top设置写入~/.toprc文件中
[root@localhost ~]# top
[root@localhost ~]# top -d 1
[root@localhost ~]# top -d 1 -p 10126 查看指定进程的动态信息
[root@localhost ~]# top -d 1 -p 10126,1
[root@localhost ~]# top -d 1 -u apache 查看指定用户的进程
[root@localhost ~]# top -d 1 -b -n 2 > top.txt 将2次top信息写入到文件
top的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,下面几行为进程信息 区。
1)统计信息区
第一行为任务队列信息
17:21:03 表示当前系统时间;up 4:32表示系统已经启动4小时32分钟了;5 users表示当前登录系统的 用户数; load average: 0.19, 0.08, 0.06 表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果是 1表示满负载)。
第二行:
483 total进程的总数; 3 running 正在运行的进程数,;480 sleeping处于休眠状态的进程数, ; 0 stopped 停止的进程数, ; 0 zombie 僵死的进程数
第三行:
0.3 us表示用户进程占用CPU的百分比;0.7 sy系统进程占用CPU的百分比; 0.0 ni用户进程空间内改变 过优先级的进程占用CPU的百分比; 99.0 id 空闲CPU占用的百分比, 0.0 wa 代表I/Owait 表示等待输入、 输出的进程占用CPU的百分比, 0.0 hi表示cpu服务于硬件中断所耗费的时间总额, 0.0 si表示cpu服务于 软件中断所耗费的时间总额, 0.0 st表示虚拟机被hypervisor偷去的cpu时间。另外,如果是多内核设 备,可按下数字键“1”来切换成不同cpu的负载率。
第四五行:
total系统的虚拟内存大小;free目前空余虚拟内存大小;used已经使用的内存大小。
进程信息区显示了每个进程的运行状态
PID:进程的id
USER:进程所有者的用户名
PR:进程优先级
NI:nice值。负值表示高优先级,正值表示低优先级 VIRT:进程使用的虚拟内存总量,单位为KB
RES:进程使用的、未被换出的物理内存大小,单位KB SHR:共享内存大小,单位KB
S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进 程
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程占用的物理内存百分比
TIME+:进程总计使用的CPU时间,单位为1/100秒
COMMAND:正在运行进程的命令名或者命令路径
进程的执行顺序
CPU一秒钟可以运行多达数G的命令次数,通过内核的CPU调度可以让各进程被CPU所切换运行,因此 每个进程在一秒钟内或多或少都会被CPU执行部分的脚本。如果进程都是集中在一个队列中等待CPU的 运行,而不具有优先级之分,就会导致紧急事件不能被及时处理,所以为了避免这种问题出现,linux会 给予进程一个“优先执行序”(priority,PRI),PRI值越低代表越优先,该值是由内核动态调整的,用户 无法直接调整PRI值。
由于用户无法直接调整PRI的值,所以要想调整进程的优先执行序时,需要通过调整nice的值。 PRI(new)=PRI (old)+nice
如果原本的PRI是50,并不是我们给予一个nice=5,PRI的值就会变成55,PRI还是由系统动态决定的。 所以,虽然nice 的值会影响PRI,最终的PRI仍是要经过系统分析后才会决定。nice的值是有正负的,当 nice值为负值时,PRI的值会被降低,即会被优先处理。
注意:
-
nice的值可调整的范围为-20~19; -
root可随意调整自己或他人进程的nice值,且范围为-20~19;一般用户仅可调整自己进程的nice 值,范围为0~19(避免一般用户抢占系统资源) -
一般用户仅可将nice值越调越高;
如何调整nice值:
一开始执行程序时就立即给予一个特定的nice值:使用nice命令nice [-n 数字] command -n后面接的数字范围为-20~19
磁盘管理
维护基本存储空间
为什么创建分区: 对于系统使用存储设备,必须对设备分区创建文件系统类型。 创建多分区制定不同文件系统类型记录不同格式类型的文件。 分类管理—方便管理 系统正常创建的分区 / /boot /swap 系统必须要创建的分区 / swap
查看磁盘信息(块设备)
[root@zhujd ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 7.9G 0 rom /run/media/root/RHEL-8-2-0-BaseOS-x86_64
nvme0n1 259:0 0 40G 0 disk
├─nvme0n1p1 259:1 0 400M 0 part /boot
└─nvme0n1p2 259:2 0 39.6G 0 part
├─rhel-root 253:0 0 26.4G 0 lvm /
└─rhel-swap 253:1 0 13.2G 0 lvm [SWAP]
创建分区
**启动流程:**加电开机 – BIOS硬件自检 – MBR – grub2(分区表)
分区的两种格式:
-
MBR分区 MBR(Master Boot Record,主引导记录)是传统的分区机制,使用BIOS引导的PC设备,寻址空间只有32bit长,最大支持2.19TB 支持的分区数量:4个主分区或3个主分区1个扩展分区 MBR分区类型: 1.主分区(primary partition) 一块硬盘最多4个主分区,主分区不可以再进行二次分区。可以用来引导、启动操作系统 ,同时,主分区可以直接建立文件系统,如windows的NTFS,存放数据。 2.扩展分区(extended partition) 一块硬盘最多一个,加主分区最多4个,不能创建文件系统,可以划分逻辑分区。 3.逻辑分区(logical partition) 可以创建文件系统,存放数据,同时,逻辑分区的数量没有限制。 此外,从引导操作系统的角度来看,可以分成三类:
- 系统分区:用来启动操作系统,必须是主分区
- 启动分区:安装操作系统的分区,可以是主分区也可以是逻辑分区
- 活动分区:只能是作用于系统分区,有且仅有一个活动分区。
-
GPT分区 GPT (GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式 优点: 1.在默认情况下,GPT最多可支持128个分区。 2.支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)。 3.GPT分区表自带备份。 4.向后兼容MBR。GPT分区表上包含保护性的MBR区域。 例如,MacOS中使用此类分区
分区工具:
- fdisk只能用于MBR分区,gdisk,parted可以用于GPT分区。
- fdisk大多数运维工作人员已经习惯这个交互模式。
- parted命令在创建删除分区使用命令比较方便,可划分大于2TB的分区,但是功能不是太完善,没有备份还原命令。
- gdisk在分区上命令和fdisk风格一样, 使用方便,学习难度低且功能强大,推荐使用。
如何使用fdisk管理MBR分区:
命令:fdisk 设备名 fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可
a 调整磁盘的启动分区
p 显示当前磁盘的分区信息
d 删除磁盘分区
t 更改分区类型
l 显示所有支持的分区类型
u 切换所显示的分区大小单位
m 查看所有指令的帮助信息
n 创建新分区
q 不保存更改,退出fdisk命令
w 把修改写入磁盘分区表,然后退出fdisk命令
g 新建一个空的GPT分区表
o 新建一个空的DOS分区表
创建分区的步骤
1.创建分区的条件----分析系统磁盘是否能正常创建分区
lsblk 显示系统块设备信息
2.磁盘管理
fdisk /dev/nvme0n1 磁盘管理创建分区
识别分区表-----reboot
3.指定文件系统类型---格式化
mkfs.xfs /dev/nvme0n1p5
mkfs.ext4 /dev/nvme0n1p6
4.使用--挂载
#临时挂载
mount /dev/nvme0n1p5 /mnt
#移除挂载
umount 设备名
umount 挂载点目录
umount /mnt
#查看
mount 所有的挂载点信息
df -h 文件系统使用情况
free -m 查看内存使用情况
#开机挂载(永久挂载)
vim /etc/fstab
/dev/nvme0n1p6 /p6 ext4 defaults 0 0
mount -a 重新读取/etc/fstab,刷新挂载状态
使用gdisk管理GPT分区:
gdisk命令工具默认将磁盘划分为GPT格式的分区
步骤1:执行gdisk命令→输入n指令创建新分区。
步骤2:指定分区编号(默认是未使用的最小分区编号)
步骤3:指定新分区开始的位置和结束位置。
步骤4:显示已创建的分区信息。
步骤5:输入w子命令将分区设置写入分区表→当提示最终确认时,输入“y”
步骤6: 执行partprobe命令,使操作系统内核获知新的分区表信息
使用parted划分分区: parted的2种使用方式
格式化
格式化的目的: 是为了形成文件系统!
命令格式:
mkfs|mkfs.xfs|mkfs.ext4 [选项] 分区的设备名
常用的选项有:
-t 文件系统类型——当命令名为mkfs时,指定要创建的文件系统的类型(如:xfs 、ext4、vfat等)。当命令 名为mkfs.xfs 、mkfs.ext4等时,不需要该选项。
-c——建立文件系统前先检查坏块。
-V——输出建立文件系统的详细信息。
注意:如果已有其他文件系统创建在此分区,必须在mkfs.xfs 命令中加上选项-f强行进行格式化
挂载
挂载分区(或文件系统)
挂载命令:mount [-t 文件系统类型] 设备名 挂载点目录
卸载分区
要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载。卸载磁盘分区的命令为:
umount 挂载点目录或存储设备名
设置系统启动时的自动挂载
手动挂载的分区会在系统重启后失效,若用户需要永久挂载分区,则需要通过编辑/etc/fstab文件来实 现。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂 载到指定的目录。
1>通过分区文件名来挂载
2>通过UUID来挂载
每一个被格式化的分区都有一个唯一的UUID,那么你在挂载的时候,可以指定UUID来挂载
查看UUID:blkid
[root@server ~]# tail -3 /etc/fstab
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=3053c19a-fda0-46e3-99ae-4e164821f23e /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
对应字段的含义
设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identi?er) 挂载目录 指定要挂载到的目录,需在挂载前创建好 格式类型 指定文件系统的格式,比如Ext3、Ext4 、XFS、SWAP、iso9660 (此为光盘设备)等 **权限选项 **若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async 是否备份 若为1则开机后使用dump进行磁盘备份,为0则不备份 是否自检 若为1则开机后自动进行磁盘自检,为0则不自检
|