Linux服务与进程实体化

2023年 10月 13日 27.6k 0

1 Linux 操作系统的启动流程和 init 进程

1.1 Linux 开机启动流程

Linux 操作系统中,不管软件还是命令还是服务脚本,都是一个个的脚本,用过就消失了。

Linux 中是 systemd 启动进程。

  • 单击开机按钮,就是给计算机通电

  • 一台计算机是由多个零件拼凑成的,通过 BIOS(输入输出系统) 发现 CPU,内存,硬盘,网卡,主板拼凑

    主要两大功能:检查和发现所有硬件设备以及找到硬件的一个起点(也就是引导设备),也就是操作系统存在硬盘上,所以就是要先找到硬盘作为第一个启动,把硬盘作为起点

  • 硬盘作为起点,但上面数据太多,MBR 是硬盘加载后第一个被读到的数据。里面记录着整个硬盘的分区,就是让计算机先大体了解一下硬盘的整体框架,知道了框架后,才能开始读其他的数据

  • 通过 MBR,计算机大体了解了硬盘的框架,接下来是读数据,硬盘上的视频音乐对启动系统是无用的,只有和操作系统本身相关的数据才是计算机急需的。

    所以需要一个引导程序,由它来负责找到操作系统的准确位置,这个引导程序就是 GRUB

  • GRUB 作为引导程序,最终目的是找到操作系统,GRUB 下一步会引导到 Linux 内核,平时说的操作系统 Linux,其实 Linux 这个词原本指的就是它的内核 kernal,或者说是 驱动程式,而驱动是为了调度所有计算机硬件而存在的,只有内核才能称作 Linux,后面启动的命令行、图形界面、各种服务、工具其实是 Linux 的附属品,所以 GRUB 的下一步是引导内核启动,也就是启动 Linux

  • Linux 内核启动,平常使用的各种工具服务都是进程,所有的进程都要有一个统一的起点,init 是作为Linux 操作系统启动的第一个程序,后续各种服务进程其实都是被 init 再启动起来。

  • 1.2 第一个启动的进程 systemd

    init 是一个统称,作为第一个启动的程序,这个 init 程序从 Linux 诞生开始就在不断地更新,目前新一代的 init 系统叫做 systemd。

    init 程序在不断发展中有很多的版本。

    systemd 是最新一代的 init 程序。

    • 查看 systemd

      进程 PID 是 1,说明是头一个进程,老版本的 CentOS 第一个进程叫做 init

      ps -ef | grep systemd
      

    pstree		-- 把 Linux 下面所有进程按照一个树形结构显示出来,进程比喻成 树枝
    

    2 CentOS 7.x 专属服务管理器 systemd

    进程是操作系统的最小组成单位,太多进程混在一起的话不容易识别,于是有了服务的概念。服务:就是把某种特定的进程或者一些特定的进程包装一下,变成更容易读懂的形式。

    systemd 既可以代表 CentOS 7.x 的第一个进程,同时也是 CentOS 7.x 的一个独特的服务体系框架。

    2.1 systemctl 探索 systemd

    systemd 是CnetOS 7.x 的第一个进程,是所有其他进程的父进程。其实 systemd 更多的功能是管理和维护,也就说 Linux 完全开启后,systemd 会维护着整个系统下的进程或者说是所有服务。

    第一行 systemd Utilities 意思是 systemd 的自带工具,有了这些工具,可以轻松地访问 systemd。这些工具中,systemctl 是 systemd 最重要的命令。systemctl 可以轻松访问 systemd 发送指令,让 systemd 去做各种各样的工作

    • list-units:展示出单位,--type=service 指定类型是服务的

      上图输出太多有删减,systemctl 展示了 systemd 下管理的所有服务单位 Unit

      在 LInux 下的所有的进程,服务,配置等这些元素统称为 Unit,也就是一个单位。

      这些单位被赋予了不同的类型。上图中显示的单位类型都是 service名称中用后缀表示

      所有的服务都被抽象成一个个的Unit单位。

    2.2 用systemctl 来探索服务的背后

    用 systemctl 向一个服务发出指令,例如:启动,停止,重启一个服务

    systemctl cat + 服务名称		-- 可以查看一个服务的详细信息
    
    ExecStart=/usr/sbin/sshd -D $OPTIONS当执行 启动ssh服务的时候,发生的动作,可以看出,启动SSH服务其实就是运行了一个sshd的命令ps -ef | grep sshd		
    -- 查看 sshd,SSH服务的背后就是一个进程
       root       5198   4708  0 08:35 pts/0    00:00:00 grep --color=auto sshd
    
    systemctl status + 服务名称		-- 用来查看某一个服务当前的状态
    

    systemd 提供的另一个重要工具:journalctl,用来统一记录 systemd 中所有的 Unit 的日志信息,方便进行排错。

    journalctl -xe		-- 显示信息
    

    2.3 systemd 的启动项设置

    在 Linux 中设置一个启动项非常重要。

    systemctl enable sshd.service 	
    -- 在开机时启用服务systemctl disable sshd.service 	  
    -- 在开机时禁用服务
    

    systemd 下的服务如果想启动起来,必须有对应的文件,否则手动自动都启动不起来

    systemd 下的服务配置文件都保存在 /usr/lib/systemd/system 下,然而 Linux 本身启动只关注另一个目录:/etc/systemd/system,所以,要想启动需要将配置文件放于两个文件夹中,两个文件不必要各放一个,创建一个软链接即可。

    看看那些服务是开机启动的

    systemctl list-unit-files|grep enabled

    2.4 target 运行级别

    其实 target 代表一组 Units,就是实实在在的东西,例如:一个 SSH 服务,一个 VSFTR 服务,target 就是特定的很多个 Units 拼成一组。

    systemd 下的一个服务想让他启动就得在 /etc/systemd/system 下创建一个软链接,然后用 ls 命令查看是找不到 sshd.service 的软链接

    用 find 命令可以看到:

    sshd.service 是有的,只不过存在于一层子目录下面:multi-usr.target.wants,说明 sshd.service 包含在 multi-user 这个 target 组中。开机启动 multi-user 组顺带就会把 sshd.service 也给启动了。在定义一个 systemd Unit 时,它的配置文件中会指明这个 Unit 属于那个 target。

    所谓的运行级别,不过指的就是一个 target 组设置成开机启动,下面用 systemctl 显示所有的 Units,并指定 Unit 的类型为 target

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论