1. Linux组成

1. Linux组成

1.1. Linux: kernel+rootfs

kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

rootfs:程序和glibc(库)

库:函数集合, function, 调用接口(头文件负责描述)

程序:二进制执行文件

1.2. 内核设计流派:

  • 单内核(monolithic kernel):Linux 把所有功能集成于同一个程序
  • 微内核(micro kernel):Windows, Solaris 每种功能使用一个单独子系统实现

2. linux启动流程图

系统启动和内核管理-Centos6插图

3. Centos6(5)启动流程1

系统启动和内核管理-Centos6插图1

3.1. 详细过程

  1. 加载BIOS的硬件信息,获取第一个启动设备
  2. 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
  3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
  4. 核心执行init程序,并获取默认的运行信息
  5. init程序执行/etc/rc.d/rc.sysinit文件
  6. 启动核心的外挂模块
  7. init执行运行的各个批处理文件(scripts)
  8. init执行/etc/rc.d/rc.local
  9. 执行/bin/login程序,等待用户登录
  10. 登录之后开始以Shell控制主机

3.2. 解释

  1. POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测
    • ROM:BIOS,Basic Input and OutputSystem,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、 开机加电自检程序和系统启动自举程序等
    • RAM:CMOS互补金属氧化物半导体,保存各项参数的设定按次序查找引导设备,第一个有引导程序的设备为本次启动设备
  2. bootloader: 引导加载器,引导程序
    • windows:ntloader,仅是启动OS
    • Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
      • LILO:LInux LOader :早期的,现在不用了
      • GRUB: GRand Unified Bootloader
        • GRUB 0.X: GRUB Legacy, GRUB2

3.3. GRUB相关

MBR:第一个扇区

  • 前446字节 bootloader
  • 中间64字节 分区表
  • 最后2字节 55AA

GRUB

  • primary boot loader : 1st stage,1.5 stage
  • secondary boot loader :2nd stage,分区文件

kernel

  • 自身初始化:
  • 探测可识别到的所有硬件设备
  • 加载最核心的硬件驱动程序(借助于ramdisk或者ramfs加载驱动
  • 以只读方式挂载根文件系统
    • (然后再加载lib/modules下的各种驱动,包括根分区/,文件系统驱动等等,重新加载,不再用img中的驱动。当然此过程也是按需加载)
  • 运行用户空间的第一个应用程序:/sbin/init
    • (init会根据它的配置文件进行初始化,比如启动各种服务,并重新RW挂载根/等)

3.4. 内核相关

  • Linux内核特点:
    支持模块化:.ko(内核对象) kernel object
    如:文件系统,硬件驱动,网络协议等
    支持内核模块的动态装载和卸载
  • 内核组成部分:
    核心文件:/boot/vmlinuz-VERSION-release
    ramdisk:辅助的伪根系统
    CentOS 5 /boot/initrd-VERSION-release.img
    CentOS 6,7 /boot/initramfs-VERSION-release.img
    模块文件:/lib/modules/VERSION-release

3.5. ramdisk管理

ramdisk:

  • 内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动
  • ramdisk –> ramfs 提高速度

CentOS 5 initrd.img

  • 工具程序:mkinitrd

CentOS 6,7 initramfs.img

  • 工具程序:mkinitrd, dracut

3.5.1. ramdisk文件的制作:

  1. mkinitrd命令
    • 为当前正在使用的内核重新制作ramdisk文件 –mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
  2. dracut命令
    • 为当前正在使用的内核重新制作ramdisk文件 – dracut /boot/initramfs-$(uname -r).img $(uname -r)

3.6. 启动注意点:

  1. 第一步POST它是属于BIOS里面的一个功能,第一步实际上直接先运行BIOS,然后直接再运行POST。它就是对各种硬件进行检测,如果没有问题就运行下一步,有问题就会报错。任何计算机(包括linux,windows,unix)系统都会运行这一步,它和系统无关。

  2. BIOS里进行的各种设置(比如启动引导的选择)它是通过RAM来进行修改的,它断电即丢失。但平常我们电脑关机了之后开机它仍未丢失只是因为BIOS里面自带电池,会让它不断电。但是如果一台电脑长时间未插电,电池电量耗光,则所有的设置就会丢失乱套。

  3. 引导设备包括硬盘,U盘,光盘,网卡(从网络中下载引导的资源)

  4. GRUB不仅能引导,还能加密等进行其他操作,实质是软件,在linux里面它就是一个软件包(6之前叫grub,7上就grub2)。 GRUB和LILO不仅可以启动linux,还可以启动windows.(它可以装多系统,启动时选择)

  5. GRUB分别存放在了不同的部分,第一部分就在MBR的0扇区(512字节)中的前446字节中。后面的存放在boot目录下的grub(grub2)文件夹中。注意了第一部分的0扇区部分没有文件系统,它不是文件,就是以01方式存储的二进制。因此它的第一阶段446字节并不是文件,后面的第二阶段才是文件保存的。(1.5阶段

  6. GRUB引导之后想要启动什么系统就把控制权交给什么系统的内核。比如linux kernel.

  7. init启动之后会根据它的配置文件进行初始化,启动各种服务(比如ssh等等)而且会将根/重新RW方式挂载

  8. linux内核也是一个包,它集成了各种文件。除了boot下的文件,在etc下还有配置文件,包括一个调用第三方库的配置文件,剩下的就是各种驱动模块在lib/modules文件夹中

  9. lsmod 可以查看已经加载到内存中的模块文件,由此也可以看出驱动模块是按需加载而非全部加载。只有有需要的时候才会加载它。cat /var/log/messages可以查看相关驱动日志等信息(当然也包括其他的各种信息)。

    • lsusb可以查看USB设备。
    • USB驱动模块是按需加载的,插上USB设备就会加载USB的驱动(usb-storage模块),没有USB设备的时候不加载这个驱动
  10. boot下的vmlinuz文件很小,它只存储了最核心的驱动相关等文件。而那些次要的按需加载的驱动模块就存放在了/lib/modules/VERSION目录中了(主要就在lib/modules下对应的内核版本VERSION文件夹中的kernel文件夹中)。这样做的好处就是减少了最核心的内核文件(驱动等)的大小,开机加载的时候也不会加载那些按需加载的驱动模块,如果都放在此文件里,不仅文件很大,而且开机加载浪费资源加载很多没有必要的驱动文件。

  11. modinfo MODULE_NAME 命令可查看驱动的相关信息,包括所在位置等。

    • 例如:
    # modinfo xfs filename: /lib/modules/3.10.0-1127.el7.x86_64/kernel/fs/xfs/xfs.ko.xz license: GPL description: SGI XFS with ACLs, security attributes, no debug enabled author: Silicon Graphics, Inc. alias: fs-xfs retpoline: Y rhelversion: 7.8 srcversion: B5BFD68E9A4B6F15C8823D1 depends: libcrc32c intree: Y vermagic: 3.10.0-1127.el7.x86_64 SMP mod_unload modversions signer: CentOS Linux kernel signing key sig_key: 69:0E:8A:48:2F:E7:6B:FB:F2:31:D8:60:F0:C6:62:D8:F1:17:3D:57 sig_hashalgo: sha256
  12. 因为各种文件系统的驱动模块不在boot下的vmlinuz文件中(按需加载文件系统,不可能都加载),因此开机经过各种步骤之后,将控制权交给内核之后,它检测完硬件设备然后加载驱动模块的时候,必须要知道驱动模块所在的路径,(此时经过grub的1.5阶段已经知道了找到了各种磁盘和挂载对应等)但是想要找磁盘内的文件必须得利用文件系统来寻找(因为分区之后挂载并使用时必须要指定文件系统)。

    • 但是此时因为没有加载根分区文件系统驱动,便无法挂载根分区(虽然磁盘和分区能找到,他们是根据在grub阶段中的分区表64字节来找的,现在已经是内核阶段了,没有文件系统驱动,所以就没办法加载根分区文件系统,便无法挂载),因此也无法找到各种文件系统的驱动模块包括其他各种驱动等(在根下的lib中,更别说后面的挂载根目录等操作了(总结就是要挂载根目录必须要知道它的文件系统才能挂载,然后根据路径找到各种驱动所在的目录才能加载lib下的各种驱动),造成了相互矛盾。

    • 因此此时需要一个伪文件系统,把某些特定的驱动和文件(计算机启动时需要的)放在了initranfs-VERSION.img文件中(老版本命名为initrd),而根分区的文件系统就在这个伪文件系统img的打包文件中,这个伪文件系统在grub启动时会和内核一并被grub加载到内存中,因此此时内核便可以重新挂载根并且进行初始化,启动服务等操作了。

    • 可以用下面的方式打开查看img文件(6中需要先解压,它是gzip格式,7中不用直接就是cpio压缩格式).

      Centos6: gzip -d -c initramfs-2.6.32-754.el6.x86_64.img >initramfs.img :gzip文件类型,这里如果不用-c的话会显示后缀不对,用-c可直接重定向不用管后缀的问题 ls file initramfs.img : cpio文件类型 cpio --help cpio -tv < initramfs.img |less :查看里面的文件
  13. 注意vmlinuz文件是官方编译完成后的的二进制文件,出厂即给出的,在光盘中直接就存在的(isolinux目录中)。而initramfs文件是根据自己的根的文件系统等等其他信息安装操作系统的时候后期临时生成的文件,并非出厂即带的文件。

  14. 其中光盘中的isolinux中的initrd文件是ramdisk方式的虚拟磁盘(包括centos5),因为不管怎样只要使用磁盘中的文件都需要文件系统,因此从6之后开始就直接改为了虚拟文件系统ramfs,不需要再多此一举先虚拟磁盘,然后挂文件系统驱动,然后再找文件。

  15. 不论是哪一种img(ramfs或者rd)文件,如果被破坏,则计算机启动时无法加载驱动模块,则无法挂载根分区便会导致无法启动。

4. 系统启动详细流程

  1. 系统初始化:
    POST --> BootSequence (BIOS) --> Bootloader(MBR) -->kernel(ramdisk) --> rootfs(只读) --> init(systemd)
  2. init程序的类型:
  • SysV: init, CentOS 5之前
    配置文件:/etc/inittab
  • Upstart: init,CentOS 6
    配置文件:/etc/inittab, /etc/init/*.conf
  • Systemd:systemd, CentOS 7
    配置文件:/usr/lib/systemd/system
    /etc/systemd/system

4.1. 注意点:

  1. 5 6 7版本的init进程分别来自三个不同的rpm包,5中是redhat所写,6中是ubuntu所写,7中是红帽员工所写(systemd但是不属于红帽)。

  2. 5之前版本的/etc/inittab中定义了许多功能,都放在了这个文件中,6中它只有控制开机进入的runlevel功能(其他的功能分散放在了其他位置的文件中),而7中完全不用这个文件了。

  3. 单用户模式只能一个终端一个用户(root)登陆使用,它可以破解root口令。开机的时候按a进入选择模式然后直接输入1(或者S s single) 进入单用户模式即可(centos 6中)。然后此时便可以用passwd命令修改口令或者直接改shadow文件把口令删掉。

  4. cat /etc/rc.d/rc.sysinit:此文件中(5中6中都有)就是开机之后运行的初始化配置脚本

  5. 以5中的/etc/inittab为例, 其中第一行设定好初始runlevel之后,然后设置初始化/etc/rc.d/rc.sysinit脚本,然后按照默认的启动runlevel编号来执行一次性任务/etc/rc.d/rc # 脚本,其中#就是编号。对应编号就会进入到对应/etc/rc#.d/文件夹中执行里面的K*S*开头的脚本.

    • 这些脚本其实都是软链接,它们指向了真正的服务脚本在/etc/init.d/文件夹中(注意/etc/init.d也是个软链接,它指向/etc/rc.d/init.d文件夹)。
    • 只不过这里用K*S*开头代表在这个模式下以K开头的脚本服务停止服务,而以S开头的脚本中的服务启动服务.(这个配置就写在/etc/rc.d./rc脚本中),只要第一次开机启动或者说用init命令切换模式,就会根据此相对应的模式编号文件夹中的KS软链接来关闭或者启动相对应的守护进程。
    • /etc/init.d/文件夹中的脚本 后面加上参数 stop 就相当于停止此服务,start就是启动此服务(正好符合/etc/rc.d/rc脚本中的对应部分命令)
    • 注意:在这里K开头和S开头的脚本是按照ls的顺序来一个一个执行的,有些服务具有关联性的要先启动某个服务再启动它,那么就要把这个服务就要放到比较靠后的顺位中启动,当然关闭的时候就要放到比较前面的顺位来关闭。也就是说K后面的排序越小,S后面的排序就越大。反之亦然。
      • 注意排序是按照ls的排序,也就是先数字,再字母;字母按照字符串比较大小的方式来排序,数字也同样;它都是单个单个比较的,而并不是按照其后面的数字整体大小排序;
      • 比如K10cupsK100test这两个关闭脚本,K100test先运行而K10cups后运行
  6. 接上,如果自己要设置并编写启动脚本,放在/etc/init.d/文件夹中,同时在相对应的想要启动和关闭这个服务的/etc/rc#.d/文件夹中设置软链接,但是尽量吧自己的服务K编号写的比较靠前同时把S编号的脚本写的比较靠后用于避免依赖性的问题比较好。

    • 注意了针对同一个脚本服务的软链接文件K和S在同一个rc#.d文件夹不可能同时存在,不然K开头的就相当于没用了(先执行K然后S将它覆盖启动了)
  7. 利用ntsysv命令可以来控制服务开机启动或者不启动,以及调整启动顺序。不过它默认设置的是当前模式下的服务,星号代表启动,空代表不启动,用空格键设置。可以用ntsysv --level=#(编号)来修改特定模式下的启动服务等

    • 它本质上改的也就是/etc/rc#.d/文件夹中的软链接标志将K和S互换。不过需要注意它必须下次启动才能生效,当前已经启动的不会有影响。
  8. service 服务 status , 就相当于 /etc/init.d/服务 status; 这两个命令等价,只是前面的命令避免了再书写服务路径。status,stop,start等等都是服务脚本的参数。

  9. 这些init.d里面的服务被叫做deamon(守护进程),它和终端以及用户无关,开机即可以设置启动或者不启动。

  10. 参考init.d中的文件格式,可以自己书写服务脚本放在init.d文件夹中并加上执行权限。

    #!/bin/sh # chkconfig: 345 99 2 :这一项最前面的数字代表此项服务第一次加入本机的时候在哪些模式下启动(也就是S的模式,没写的就是K,它只在第一次加入服务时有效,后面用chkconfig更改后就无效了),第二个数字代表启动的S编号数字,第三个代表关闭的K编号数字。 :如果所有模式都是S则写上0123456,所有模式都是off写上-(第一位的数字);后面的两个数字是SK的顺序和它无关 # description: testservice :这一项在5中必须有,在centos6中可以不写了。不过chkconfig在5 6中都必须有。
    • 注意init.d中的脚本不一定都在chgconfig –list中显示出来,有function,还有killall都没有在里面显示,因为它们都不符合格式要求。
    • 因此自己编写的服务脚本一定要符合格式要求才可以。
  11. 如果想要实现自己编写的脚本可以用service 脚本 start|status|stop|restart 等命令,可以参考init.d中其他脚本所写的方式,也可以自己定义函数然后在自己所写的服务脚本里面引用。则就可以用这种命令的格式了。

    • service命令就相当于执行init.d里面的脚本,用service相当于把路径给加上了而已,省得麻烦,至于命令参数什么的都得自己在脚本中写
  12. 写完脚本,加上执行权限之后就可以直接service 脚本名 的方式来执行脚本了,但是chkconfig列表中仍未显示,用chkconfig -add 脚本名 加入服务列表中,它就会按照所写的模式加入。然后可以再用chkconfig [--level 2345] 脚本名 on|off 来调整。

  13. 删除的话同理用chkconfig -del 脚本名的方式来删除,这样才能删除干净,把软链接和–list中都去除。此时脚本还保留在init.d目录中,如果不想要了也可以删掉。

  14. 更简单的方式是把想要运行的简单配置或者程序直接写在/etc/rc.d/rc.local文件中即可,它在2345模式中都被S99Local软链接指向。因此它会开机运行所有服务之后自己再运行。

    • 注意:Centos6上直接写入此文件中即可,centos7上面因为它没有执行权限,所以必须自己加上执行权限
  15. 注意了,centos6中 /etc/rc.d/文件夹中的才是真正的文件,而/etc/下面也有和etc/rc.d文件夹中一模一样的文件,不过/etc下的文件全部都是软链接,指向/etc/rc.d下的文件(或者文件夹)

  16. 复习知识点:软链接文件夹里面的软链接文件其实就是这个软连接文件夹对应的原文件夹内的存储的软链接文件。如果删除掉这个软连接文件夹内的这个软链接文件则其实就是相当于删除掉了原始文件夹内软链接文件也会被删除。

    • 虽然路径在软连接文件夹内和原文件夹内不相同,但是里面的任何文件包括链接文件其实都是同一个。
    • 软链接文件夹内的其他所有类型文件其实也都是一样的,其实都是进入到了真正的软链接文件夹对应的原始文件夹中,然后进行的各种操作;
    • 但是软链接文件和原始文件并不是一个,删除软链接文件则原始文件肯定不会被删除;软链接文件夹其实也是一个软链接文件,就是删除它的时候比较特殊,后面不要加上/,不然有可能失误删除掉其原始文件夹内的文件。
  17. service --status-all 可以看到所有的服务(不论运行不运行)的状态,注意和chkconfig --list的区别。

  18. 继续解释/etc/inittab(centos5中为例)的下一行,其中解释了ctrl+alt+delete三个按键的操作结果就是3秒后关机,而在6则不在这个文件中,在/etc/init/control+alt+delete.conf中。

    • 这三个键的功能最好取消掉(具体看装机后做法一章节)以免错误操作导致系统自动重启(字符界面3模式直接重启,图形界面5模式弹出对话框选择是否重启)
  19. centos5中还有断电关机以及来电取消关机的设置。(非正常断电基本上有UPS电池,它会供电一段时间然后完成必要的工作再关机,如果在这个阶段来电了则取消关机命令)

  20. 接着就是重启6个终端的命令(这也是为何之前kill mingetty命令并不能关掉它的原因,在这里规定了自动重启)。如果想再多开终端,可以继续添加(按ctrl+alt+F1-6,自己添加的话可以更多,其中tty后面的字符代表ctrl+alt后面的FN的数字)

  21. 最后一个是图形界面模式为5,如果改为其他模式则其他模式也可以变成图形模式(注意各种模块rc#.d中的驱动启动情况)。5和3的区别就是在这里,多运行了一个X11协议守护进程。

4.2. init类型

4.2.1. Centos6之前

/sbin/init

运行级别:为系统运行或维护等目的而设定;0-6:7个级别

  • 0:关机
  • 1:单用户模式(root自动登录), single, 维护模式,只能一个终端登陆
  • 2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
  • 3:多用户模式,正常模式;文本界面
  • 4:预留级别;可同3级别
  • 5:多用户模式,正常模式;图形界面
  • 6:重启
    • 默认级别:3, 5
    • 切换级别:init #
    • 查看级别:runlevel ; who -r

4.2.2. init初始化(5之前早期版本)

init读取其初始化文件:/etc/inittab

 初始运行级别(RUN LEVEL)
 系统初始化脚本
 对应运行级别的脚本目录
 捕获某个关键字顺序
 定义UPS电源终端/恢复脚本
 在虚拟控制台生成getty
 在运行级别5初始化X

4.2.3. CentOS 5 的inittab文件

  • 配置文件:/etc/inittab
  • 每一行格式:
id:runlevel:action:process id:是惟一标识该项的字符序列 runlevels: 定义了操作所使用的运行级别 action: 指定了要执行的特定操作 wait: 切换至此级别运行一次 respawn:此process终止,就重新启动之 initdefault:设定默认运行级别;process省略 sysinit:设定系统初始化方式,后面跟文件表明按照此文件配置进行初始化 process:定义了要执行的进程

示例:CentOS 5 的inittab文件

id:5:initdefault: si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ca::ctrlaltdel:/sbin/shutdown -t3 -r now pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down” pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled” 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 x:5:respawn:/etc/X11/prefdm -nodaemon

4.3. CentOS 6 init程序为: upstart, 其配置文件:

/etc/inittab, /etc/init/*.conf,配置文件的语法 遵循 upstart配置文件语法格式,和CentOS5不同

4.3.1. CentOS 6 相关配置文件

/etc/inittab:只设置系统默认的运行级别
id:3:initdefault:

  • 示例: 破解CentOS 6 的root口令操作
/etc/init/control-alt-delete.conf /etc/init/tty.conf /etc/init/start-ttys.conf /etc/init/rc.conf /etc/init/prefdm.conf

4.3.2. Centos6启动流程

  • /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) 清理操作

4.3.3. 说明:

rc N –> 意味着读取/etc/rc.d/rcN.d/

  • K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
  • S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
for srv in /etc/rc.d/rcN.d/K*; do $srv stop done for srv in /etc/rc.d/rcN.d/S*; do $srv start done

4.4. 启动过程总结centos6(5):

BIOS中POST加电自检--> BIOS选择启动设备(Cmos设置)--> 寻找启动设备MBR分区标头以及启动信息bootloader(前446字节)并加载它(grub)--> bootloader(grub)选择指定的内核加载(同时加载initramfs),并移交控制权给内核--> 内核结合initramfs.img文件识别文件系统并挂载根目录--> 内核加载第一个进程/sbin/init --> init根据配置文件(/etc/inittab)运行/etc/rc.d/rc.sysinit脚本(包括设置默认运行级别、完成系统初始化等等)--> 根据不同的运行模式,利用`/etc/rc.d/rc 模式编号` 来运行对应编号下的服务 --> 也就是先关闭对应下需要关闭的服务K* 然后 启动需要启动服务S*(rc#.d各种开启关闭服务,以及最后的rc.loacl服务脚本) --> 设置登录终端

5. 相关命令和服务—{ntsysv,chkconfig}

5.1. chkconfig命令

ntsysv命令

chkconfig命令

  • 查看服务在所有级别的启动或关闭设定情形:

    • chkconfig [--list] [name]
  • 添加:

    • SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
    • chkconfig --add name
      #!/bin/bash #LLLL 表示初始在哪个级别下启动,-表示都不启动 chkconfig: LLLL nn nn
  • 删除:

    • chkconfig --del name
  • 修改指定的链接类型

    • chkconfig [--level levels] name <on|off|reset>
      • --level LLLL: 指定要设置的级别;省略时表示2345
    • 例子: chkconfig atd on :一般都是这样写
  • 注意:chkconfig 服务 on|off ; 代表下次开机启动或者关闭

    • service 服务 start|stop|status 代表当前关闭或者启动 (7中类似用systemctl)

5.2. xinetd管理的服务

service 命令:手动管理服务

  • service 服务 start|stop|restart
  • service –status-all

瞬态(Transient)服务被xinetd进程所管理

  • 进入的请求首先被xinetd代理
  • 配置文件:/etc/xinetd.conf/etc/xinetd.d/<service>
  • libwrap.so文件链接
  • chkconfig控制的服务:
    • 示例:chkconfig tftp on

5.2.1. 超级守护进程xinetd注意点

  1. 比如安装telnet-server服务的时候就会顺便关联这个超级守护进程一并安装。并且在chkconfig --list中可以查看到。如果是off状态,说明xinted无法激活telnet服务也无法关闭它,相当于没有开启监控功能。必须在/etc/xinetd.d/文件夹下的telnet配置文件中修改disabled 为 no之后才可以开启xinetd监护telnet的功能。
    • 当然用**chkconfig telnet on|off** 也可以直接开启关闭telnet,但这里的开启关闭也是对于xinetd服务来说的开启关闭监听telnet功能,本质上也就相当于更改了上面写的配置文件。
  2. 但此时新装好的xinetd服务并没有开启,需要service xinetd start开启xinetd服务之后才可以真正监听telnet服务。注意它和1的区别以及chkconfig xinetd on|off的区别
  3. 此时当由用户访问telnet服务的时候它就会开启telnet服务,当没有用户访问的时候就会自动关闭telnet服务。可用ss -ntlp 或者lsof -i :23来查看是否是xinetd服务在监听此23端口。
  4. Centos7中已经用systemd服务来监听了。xinetd就被淘汰使用了(当然也可以用,不过没必要了)

5.3. 注意点:

  1. 注意BIOS中按照引导设置找到引导设备(硬盘,光盘,U盘,网卡等)之后,然后根据里面的MBR表头的前446字节中的引导信息来进行操作系统的加载引导。这里面目前常用的就是gurb的第一阶段。
  2. 注意了grub是一个引导操作系统的程序,用来启动操作系统,而BIOS也是一个启动引导程序,它包含POST,找到引导硬件等等(详情看其他博客介绍)。BIOS开机就会启动,而后面用不用grub则要看BIOS找到的引导硬件里的引导信息中的bootloader是不是grub程序,注意它俩的区别。
  3. BIOS是和UEFI相对应的,一个16位寻址,一个64位寻址,分别主要用于MBR分区和GPT分区格式的系统引导。 MBR分区格式中,BIOS引导必须将系统装在MBR分区格式的硬盘分区(中,BIOS会找这个硬盘的活动分区(记载了引导程序,也就是ntloader,grub。winloader.exe这种启动程序的分区),然后根据它的设置来启动操作系统。UEFI则是另外的方式,BCD文件夹(windows中用winload.efi)
  4. grub则是和ntloader等引导程序对应的,包含于BIOS下面,属于bootloader,不是和BIOS属于同一个级别的。它在linux中grub作用于MBR分区格式下,作用阶段在BIOS寻找启动设备,然后在硬盘启动(其实其他方式启动用GRUB也是类似这样的MBR过程)的活动分区MBR中找启动信息(前512字节,第一个扇区),它只是用来引导启动操作系统内核,内核启动之后就没它的事情了,就靠内核来运行第一个进程init来进行各种模块驱动等的初始化了。
最后修改日期: 2021年7月7日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。