Linux进程查看及管理(2)

Linux进程查看及管理(2)

CentOS5和6的启动流程:
Liunx中的启动:kernel和rootfs(根文件系统)
kernel:进程管理,内存管理,网络管理功能,驱动程序,文件系统,安全功能(权限模型),
rootfs:glibc(lib,lib64)

库:函数集合,function(功能模块)有其调用接口(头文件是对函数功能或调用参数的功能进行描述)没有直接入口-->需要进行调用:
过程调用:procedure:没有返回值
函数调用:function:有返回值

程序:
完整系统概念:kernel+库+程序

内核设计流派

单内核设计:把所有功能集成于同一个程序,中央集权运作,统一进行使用,如果出现问题导致系统崩溃;效率高!

微内核设计:每一个功能都是一个独立的子系统:使用统一调用完成功能;联邦式运作!效率低,风险低;实现线程模型;

Liunx内核特点:
    支持模块化:.ko
    支持模块化的动态装载和卸载;
    组成部分:核心文件:(/boot/vmlinuz-VERSION-release)
                ramdisk:虚拟硬盘根文件系统;在安装操作系统最后一步生成:
                    CentOS5:/boot/initrd-VERSION-release.img
                    CentOS6:/boot/initramfs-VERSION-release.img
             模块文件:/lib/modules/VERSION-release

    [root@wanghongkai boot]# file /boot/vmlinuz-2.6.32-358.el6.x86_64 
    /boot/vmlinuz-2.6.32-358.el6.x86_64: Linux kernel x86 boot executable bzImage, version 2.6.32-358.el6.x86_64 (mockbuil, RO-rootFS, swap_dev 0x3, Normal VGA

内核模块与内核版本号要严格匹配:
[root@wanghongkai tmp]# cd /lib/modules/
[root@wanghongkai modules]# ls
2.6.32-358.el6.x86_64  2.6.32-642.3.1.el6.x86_64

真正的内核文件都在:
[root@wanghongkai 2.6.32-642.3.1.el6.x86_64]# cd /lib/modules/2.6.32-358.el6.x86_64/kernel/
[root@wanghongkai kernel]# ls
arch  crypto  drivers  fs  kernel  lib  mm  net  sound

CentOS系统启动流程:

POST:加电自检:由ROM芯片上的CMOS程序决定的
    BIOS:基本输入输出系统:Basic Input and Output System
BOOT Sequence:必须有引导加载器:bootloader
        Liunx:LILO:LInux LOaer
               GRUB:GRand Unifrom Bootloader
            GRUB 0.X :GRUB legacy-->CentOS7之前
                                                    GRUB 1.X :GRUB2-->CentOS7
        功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户指定的内核转载进内存空间中;-->解压,展开-->将控制权转交给内核;
    CentOS5.6[root@wanghongkai kernel]# rpm -q grub
    grub-0.97-94.el6_7.1.x86_64

    按次序查找各引导设备,第一个有引导程序的设备即为本次启动用户设备;

MBR:446-->bootloader,64-->fat,2-->55AA
GRUB:必须要识别分区上文件系统!
    bootloader:1st stage
    disk:2nd stage  -->必须要磁盘分区:
[root@wanghongkai ~]# ls /boot/grub/
device.map     grub.conf         minix_stage1_5     stage2
e2fs_stage1_5  iso9660_stage1_5  reiserfs_stage1_5  ufs2_stage1_5
fat_stage1_5   jfs_stage1_5      splash.xpm.gz      vstafs_stage1_5
ffs_stage1_5   menu.lst          stage1             xfs_stage1_5

kernel:需要自解压或grub解压
    第一次加载根-->只读方式加载;
    自身初始化:
        探测可识别到的所有硬件设备:
        加载硬件驱动程序:(有可能会借助于ramdisk加载驱动)
        以只读方式挂载根文件系统:
        运行用户空间的第一个应用程序:/sbin/init
        init程序类型:
            SysV:init,CentOS 5
                配置文件:/etc/inittab

            Upstart:接近于并行启动:init
                配置文件:/etc/inittab,/etc/init/*.conf-->upstart的配置文件;

            Systemd:systemd,CentOS 7由sysctl来启动服务:
                配置文件:/usr/lib/systemd/system,/etc/systemd/system

        ramdisk:
            内核中特性之一:使用缓冲和缓存来对磁盘上的文件访问;
                ramdisk-->ramfs
            CentOS 5 :initrd,工具程序:mkinitrd(脚本)
            CentOS 6 :initramfs,工具程序:mkinitrd,dracut

总结系统初始化:

POST-->BootSequence(BIOS)-->Bootloader(MBR)-->kernel(ramdisk)-->已只读方式(根文件系统)rootfs-->init

CentOS5:运行级别:为了系统的运行或维护等应用目的而设定:
    级别:0-6,7个级别
    0:关机,1:单用户模式-->single,2:多用户模式(启动网络功能),3:多用户模式,正常模式:(文本界面);4:预留级别,5:多用户模式(图形界面);6:重启系统;
默认级别:3,5都是可以的
级别切换:init #
查看级别:runlevel,who -r
[root@wanghongkai ~]# who -r
     run-level 5  2016-07-31 04:26
[root@wanghongkai ~]# runlevel
N 5-->N代表为0

每个级别对应的配置文件:
    每一行定义一种action以及与之对应的process
[root@wanghongkai ~]# cat /etc/inittab 
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
****id:5:initdefault:-->设定默认运行级别!
-->id 用户名,5,运行级别:
    wait:切换至次级别运行一次:
    respwan:此process终止,就重新启动之:
    initdefault:设定默认运行级别:process省略
sysinit:完成系统初始化:设定系统初始化方式,此处一搬为指定/etc/rc.d/rc.sysinit:完成系统初始化:设定系统初始化方式,此处一搬为指定/etc/rc.d/sysinit:完成系统初始化:设定系统初始化方式,此处一搬为指定/etc/rc

chkconfig命令:显示在每个级别下每个服务被传递了stop还是start参数
[root@wanghongkai rc5.d]# chkconfig --list
NetworkManager  0:off   1:off   2:on    3:on    4:on    5:on    6:off
abrt-ccpp       0:off   1:off   2:off   3:on    4:off   5:on    6:off
abrtd           0:off   1:off   2:off   3:on    4:off   5:on    6:off
acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
blk-availability    0:off   1:on    2:on    3:on    4:on    5:on    6:off
修改某个级别参数stop或start
chkconfig --level5 服务名 stop或start

[root@wanghongkai init.d]# cat NetworkManager 
#!/bin/sh
#
# NetworkManager:   NetworkManager daemon
#
****# chkconfig: - 23 84-->❤❤❤依赖于chkconfig修改
# description:  This is a daemon for automatically switching network \
#               connections to the best available connection.
#
# processname: NetworkManager
# pidfile: /var/run/NetworkManager/NetworkManager.pid
#
****### BEGIN INIT INFO-->❤❤❤依赖于Upstart
# Provides: network_manager $network
# Required-Start: messagebus
# Required-Stop: messagebus
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop NetworkManager
# Description: NetworkManager is a tool for easily managing network connections
### END INIT INFO

添加:chkconfig --add name
    SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)
自定义创建启动服务:
1:在/etc/init.d下创建服务以及名称:
2:chkconfig --add name 将服务加入到自启动项中:
3:使用chmod +x 给自定义服务执行权限;

注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;



tty1:2345:respawn:/usr/sbin/mingetty tty1
tty2:2345:respawn:/usr/sbin/mingetty tty2
tty6:2345:respawn:/usr/sbin/mingetty tty6
mingetty会调用login程序

/etc/rc.d/rc.sysinit: 系统初始化脚本
    (1) 设置主机名;
    (2) 设置欢迎信息;
    (3) 激活udev和selinux; 
    (4) 挂载/etc/fstab文件中定义的文件系统;
    (5) 检测根文件系统,并以读写方式重新挂载根文件系统;
    (6) 设置系统时钟;
    (7) 激活swap设备;
    (8) 根据/etc/sysctl.conf文件设置内核参数;
    (9) 激活lvm及software raid设备;
    (10) 加载额外设备的驱动程序;
    (11) 清理操作;

总结:/sbin/init-->(/etc/inittab)-->设置默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应下需要关闭的服务,启动需要启动服务-->设置登录终端;

CentOS6:
    init程序为:upstart 其配置文件;
        /etc/inittab,/etc/init/*.conf

注意:/etc/init/*.conf文件语法,遵循 upstart配置文件语法格式;

启动系统时,设置其运行级别1;
    1:shutdown -r now

原创文章,作者:wostop,如若转载,请注明出处:http://www.178linux.com/30175