zoukankan      html  css  js  c++  java
  • 进程模块管理

    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

  • 相关阅读:
    html pre 元素
    获取不重复随机数
    CSS查找匹配原理和简洁高效
    排序
    javascript 去数组重复项
    asp.net页面生命周期
    经典 Javascript 正则表达式
    深入理解JavaScript定时机制
    排序简介
    理解 JavaScript 闭包
  • 原文地址:https://www.cnblogs.com/pw-fan/p/11244360.html
Copyright © 2011-2022 走看看