进程模块管理

PAM模块设定语法

PAM是通过由一个与程序名相同的配置文件来实现认证的。当程序运行时,输入密码后,程序会呼叫PAM模块进行认证,PAM模块会在/etc/pam.d/下找到该程序的配置文件,根据配置文件的设定,引用相关的PAM模块进行逐步分析,然后将分析结果回传给程序,程序根据结果来判断程序的下一步执行方向。

 

/etc/pam.d/*:每个程序个别的 PAM 配置文件;

/lib64/security/*PAM 模块文件的实际放置目录;

/etc/security/*:其他 PAM 环境的配置文件;

/usr/share/doc/pam-*/:详细的 PAM 说明文件。

 

PAM验证流程:依据验证类别 (type) 来看,然后先由 login 的设定值去查阅,如果出现include system-auth就转到 system-auth 文件中的相同类别,去取得额外的验证流程就是了。然后再到下 一个验证类别,最终将所有的验证跑完。

 

在线与使用者交谈可使用 write, wall,脱机状态下可使用 mail 传送邮件

 

磁盘配额与进阶文件管理

磁盘配额Quota

 

例行性工作排程

工作排程的种类: at, cron

at at 是个可以处理仅执行一次就结束排程的指令,不过要执行 at 时, 必须要有 atd 这个服务的支援

crontab crontab 这个指令所设定的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。

 

进程管理与SELinux

触发任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个 ID ,称为 PID,同时依据启发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设定

个进程衍生出来的其他进程在一般状态下,也会沿用这个进程的相关权限

 

工作管理:

进行工作管理的行为中,其实每个工作都是目前 bash的子进程,亦即彼此之间是有相关性的。 我们无法以 job control 的方式由 tty1 的环境去管理 tty2bash。 

进行 bash job control 的限制

这些工作所触发的进程必须来自于你 shell 的子进程(只管理自己的 bash)

前景:你可以控制与下达指令的这个环境称为前景的工作 (foreground)

背景:可以自行运作的工作,无法使用 [ctrl]+c 终止他,可使用 bg/fg 呼叫该工作;

背景中执行的进程不能等待 terminal/shell 的输入(input)

 

直接将指令丢到背景中执行的 &,在命令最后加上&意味着将任务丢到背景中去执行,然后可以在前景去执行其他任务,任务完成后会显示。

 

 

将目前的工作丢到背景中暂停:[ctrl]-z

当你在做某项任务时,想要去执行其他操作,可以将现在的任务放到背景中,按[ctrl]-z,工作会被停止。

通过jobs命令可以观察目前的背景工作状态,+ 代表最近被放到背景的工作号码, - 代表最近最后第二个被放置到背景中的工作号码。

 

将背景工作拿到前景中来执行,fg %jobnumber ,先查看当前在背景中的工作,通过fg指令可以将工作提到前景中执行

让工作在背景下的状态变成运作中: bg

管理背景当中的工作:kill -signal %jobnumber

 

脱机管理问题

nohup [指令与参数] <==在终端机前景中工作

nohup [指令与参数] & <==在终端机背景中工作

nohup 可以让在脱机或注销系统后,还能够让工作继续进行

 

进程管理

Linux 的进程呼叫通常称为 fork-and-exec 的流程进程都会藉由父进程以复制 (fork) 的方式产生一个 一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进程的存在。

 

查看进程:toppspstree

主要的signal信号名称和作用:

SIGHUP(1) 启动被终止的进程,可让该 PID 重新读取自己的配置文件,类似重新启动

SIGINT(2) 相当于用键盘输入 [ctrl]-c 来中断一个进程的进行

SIGKILL(9) 代表强制中断一个进程的进行,如果该进程进行到一半,那么尚未完成的部分可能会有半产品产生,类似 vim 会有 .filename.swp 保留下来。

SIGTERM(15)以正常的结束进程来终止该进程。由于是正常的终止,所以后续的动作会将他完成。如果该进程已经发生问题,就是无法使用正常的方法终止时, 输入这signal也是没有用的。

SIGSTOP(19) 相当于用键盘输入 [ctrl]-z 来暂停一个进程的进行

kill 后面直接加数字与加上 %number 的情况是不同,%是代表的工作,数字代表的是进程号

killall [-iIe] [command name] 可以将系统当中所有以某个指令名称启动的进程全部删除

-i interactive 的意思,交互式的,若需要删除时,会出现提示字符给用户;

-e exact 的意思,表示后面接的 command name 要一致,但整个完整的指令

不能超过 15 个字符。

-I :指令名称(可能含参数)忽略大小写。

 

进程的执行顺序:

Linux 给予进程一个优先执行序 (priority, PRI)PRI 值越低代表越优先的意思。PRI 值是由核心动态调整的,用户无法直接调整PRI

PRI(new) = PRI(old) + nice

nice值为负值时,那么该进程就会降低PRI值,亦即会变的较优先被处理

nice值可调整的范围为-20~19

root可随意调整自己或他人进程的Nice值,且范围为-20~19

一般使用者仅可调整自己进程的Nice值,且范围仅为0~19(避免一般用户抢占系统资源)

一般使用者仅可将nice值越调越高,例如本来nice5,则未来仅能调整到大于5

要调整某个进程的优先执行序,就是调整该进程的nice,有两种方式可以调整:

  1. 一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
  2. nice :新执行的指令即给予新的 nice

整某个已经存在的 PID nice 值:用 renice 指令。

nice [-n 数字] command 数字范围-20~19

renice :已存在进程的 nice 重新调整

renice [number] PID

观察内存使用情况:free -m

uname:查阅系统与核心相关信息 uname [-asrmpi]

uptime:观察系统启动时间与工作负载

netstat :追踪网络或插槽文件 netstat -[atunlp]

dmesg :分析核心产生的讯息

vmstat :侦测系统资源变化

 

具有 SUID/SGID 权限的指令执行状态

SUID 的权限其实与进程的相关性非常的大

SUID 权限仅对二进制程序(binary program)有效;

执行者对于该程序需要具有 x 的可执行权限;

本权限仅在执行该程序的过程中有效 (run-time)

执行者将具有该程序拥有者 (owner) 的权限。

当执行者去执行具有SUID权限的文件时,执行者会暂时获得文件owner的权限,权限仅仅在执行文件时有效。当触发进程后,会进入一个新的进程获取一个新的PID,该 PID 产生时透过 SUID 来给予该 PID 特殊的权限设定。

 

fuser:藉由文件(或文件系统)找出正在使用该文件的进程

fuser [-umv] [-k [i] [-signal]] file/dir

-u :除了进程的 PID 之外,同时列出该进程的拥有者;

-m :后面接的那个档名会主动的上提到该文件系统的最顶层,对 umount 不成功很有效

-v :可以列出每个文件与进程还有指令的完整相关性

-k :找出使用该文件/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID

-i :必须与 -k 配合,在删除 PID 之前会先询问使用者意愿

-signal:预设是 SIGKILL (-9)  

lsof :列出被进程所开启的文件档名

lsof [-aUu] [+d]

-a :多项数据需要同时成立才显示出结果时

-U :仅列出 Unix like 系统的 socket 文件类型;

-u :后面接 username,列出该使用者相关进程所开启的文件;

+d :后面接目录,亦即找出某个目录底下已经被开启的文件!

pidof :找出某支正在执行的程序的 PID

pidof [-sx] program_name

-s :仅列出一个 PID 而不列出所有的 PID

-x :同时列出该 program name 可能的 PPID 那个进程的 PID

 

 

系统开机的流程:

1. 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置;

2. 读取并执行第一个开机装置内 MBR boot Loader (亦即是 grub2, spfdisk 等程序)

3. 依据 boot loader 的设定加载 Kernel Kernel 会开始侦测硬件与加载驱动程序;

4. 在硬件驱动成功后,Kernel 会主动呼叫 systemd 程序,并以 default.target 流程开机;

 

BIOS, boot loader kernel 载入

开机管理程序被称为 Boot LoaderBoot Loader 程序安装在开机装置的第一个扇区 (sector) 内,也就是MBR (Master Boot Record, 主要启动记录区)

bootloader的功能:

提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能!

载入核心文件:直接指向可开机的程序区段来开始操作系统;

转交其他 loader:将开机管理功能转交给其他 loader 负责。

最终boot loader的功能就是加载 kernel 文件

 

加载核心侦测硬件与 initramfs 的功能

当我们由bootloader的管理而开始读取核心文件后,接下来,Linux就会将核心解压缩到主存储器当中,并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等等。此时Linux核心会以自己的功能重新侦测一次硬件,而不一定会使用BIOS侦测到的硬件信息核心此时才开始接管BIOS后的工作了

由于模块放置到磁盘根目录内,因此在开机的过程中核心必须要挂载根目录,这样才能够读取核心模块提供加载驱动程序的功能。非必要的功能且可以编译成为模块的核心功能,目前的Linuxdistributions都会将他编译成为模块。因此USB,SATA,SCSI...等磁盘装置的驱动程序通常都是以模块的方式来存在的。核心根本不认识SATA磁盘,所以需要加载SATA磁盘的驱动程序,否则根本就无法挂载根目录。但是SATA的驱动程序在/lib/modules内,根本无法挂载根目录怎么读取到/lib/modules/内的驱动程序,要通过虚拟文件系统。能够透过bootloader来加载到内存中,然后这个文件会被解压缩并且在内存当中仿真成一个根目录,且此仿真在内存当中的文件系统能够提供一支可执行的程序,透过该程序来加载开机过程中所最需要的核心模块,通常这些模块就是USB,RAID,LVM,SCSI等文件系统与磁盘接口的驱动程序。

 

核心与核心模块:

核心: /boot/vmlinuz /boot/vmlinuz-version

核心解压缩所需 RAM Disk/boot/initramfs (/boot/initramfs-version)

核心模块: /lib/modules/version/kernel /lib/modules/$(uname -r)/kernel

核心原始码: /usr/src/linux /usr/src/kernels/ (要安装才会有,预设不安装)

建立文件:

depmod [-Ane]

-A :不加任何参数时, depmod 会主动的去分析目前核心的模块,并且重新写入

/lib/modules/$(uname -r)/modules.dep 当中。若加入 -A 参数时,则 depmod会去搜寻比 modules.dep 内还要新的模块,如果真找到新模块,才会更新。

-n :不写入 modules.dep ,而是将结果输出到屏幕上(standard out)

-e :显示出目前已加载的不可执行的模块名称

显示当前系统加载了多少模块:lsmod

查阅在核心内的模块检查某个模块文件

modinfo [-adln] [module_name|filename]

-a :仅列出作者名称;

-d :仅列出该 modules 的说明 (description)

-l :仅列出授权 (license)

-n :仅列出该模块的详细路径

 

核心模块的加载与移除

insmod [/full/path/module_name] [parameters]

rmmod [-fw] module_name

-f :强制将该模块移除掉,不论是否正被使用;

如果无法直接加载或移除该模块,直接使用 modprobe 来处理模块加载

modprobe [-cfr] module_name

-c :列出目前系统所有的模块

-f :强制加载该模块;

-r :类似 rmmod

 

posted @ 2019-07-25 15:06  pw_fan  阅读(413)  评论(0编辑  收藏  举报