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

  • 相关阅读:
    array and ram
    char as int
    pointer of 2d array and address
    Install SAP HANA EXPRESS on Google Cloud Platform
    Ubuntu remount hard drive
    Compile OpenSSL with Visual Studio 2019
    Install Jupyter notebook and tensorflow on Ubuntu 18.04
    Build OpenCV text(OCR) module on windows with Visual Studio 2019
    Reinstall VirtualBox 6.0 on Ubuntu 18.04
    Pitfall in std::vector<cv::Mat>
  • 原文地址:https://www.cnblogs.com/pw-fan/p/11244360.html
Copyright © 2011-2022 走看看