当前位置: 首页 > news >正文

【Linux基础知识系列:第一百二十五篇】理解Linux中的init与systemd

在Linux系统中,启动过程是系统从硬件启动到用户可以使用的过程。这个过程涉及到多个阶段,包括硬件初始化、内核加载、用户空间初始化等。传统的Linux系统使用init(初始化)进程来管理系统的启动和运行级别,而现代的Linux系统则广泛采用systemd作为系统和服务管理器。systemd提供了更高效的启动机制和更强大的服务管理功能,逐渐取代了传统的init系统。本文将详细介绍initsystemd的区别与特点,帮助用户理解Linux启动过程的演变。

核心概念

系统启动过程

系统启动过程是指从硬件启动到用户可以使用系统的整个过程。这个过程通常包括以下几个阶段:

  1. 硬件初始化:硬件启动并初始化。

  2. 内核加载:内核被加载到内存中并开始运行。

  3. 用户空间初始化:用户空间的初始化进程开始运行,负责启动其他服务和程序。

  4. 用户登录:用户可以登录系统并开始使用。

init

init是传统的Linux系统初始化进程,负责启动和管理系统的运行级别。init进程是系统启动后的第一个进程(PID为1),它读取/etc/inittab文件来确定系统的运行级别和启动的服务。

systemd

systemd是一个现代的系统和服务管理器,它提供了一种更高效和更灵活的方式来管理系统的启动和服务。systemd使用unit文件来定义服务和启动顺序,支持并行启动和依赖关系管理。

运行级别

运行级别是指系统在运行时的不同状态。传统的init系统使用数字来表示运行级别,例如:

  • 运行级别0:关机

  • 运行级别1:单用户模式

  • 运行级别2:多用户模式,没有网络

  • 运行级别3:多用户模式,有网络

  • 运行级别4:未使用

  • 运行级别5:图形界面模式

  • 运行级别6:重启

systemd则使用目标(target)来表示运行级别,例如:

  • poweroff.target:关机

  • rescue.target:救援模式

  • multi-user.target:多用户模式

  • graphical.target:图形界面模式

Unit文件

systemd使用unit文件来定义服务和启动顺序。unit文件包含服务的描述、启动条件、执行命令等信息。常见的unit文件类型包括:

  • service:定义服务

  • socket:定义套接字

  • target:定义运行级别

  • timer:定义定时任务

命令与示例

查看当前的初始化系统

可以使用以下命令查看当前系统使用的初始化系统:

ps -p 1

如果输出显示systemd,则表示系统使用的是systemd;如果显示init,则表示系统使用的是传统的init系统。

查看运行级别

使用runlevel命令(适用于init系统)

在传统的init系统中,可以使用runlevel命令查看当前的运行级别:

runlevel
使用systemctl命令(适用于systemd系统)

systemd系统中,可以使用systemctl命令查看当前的运行级别:

systemctl get-default

更改运行级别

使用telinit命令(适用于init系统)

在传统的init系统中,可以使用telinit命令更改运行级别:

telinit 3
使用systemctl命令(适用于systemd系统)

systemd系统中,可以使用systemctl命令更改运行级别:

systemctl isolate multi-user.target

启动和停止服务

使用service命令(适用于init系统)

在传统的init系统中,可以使用service命令启动和停止服务:

service apache2 start
service apache2 stop
使用systemctl命令(适用于systemd系统)

systemd系统中,可以使用systemctl命令启动和停止服务:

systemctl start apache2
systemctl stop apache2

查看服务状态

使用service命令(适用于init系统)

在传统的init系统中,可以使用service命令查看服务状态:

service apache2 status
使用systemctl命令(适用于systemd系统)

systemd系统中,可以使用systemctl命令查看服务状态:

systemctl status apache2

查看启动顺序

使用chkconfig命令(适用于init系统)

在传统的init系统中,可以使用chkconfig命令查看服务的启动顺序:

chkconfig --list
使用systemctl命令(适用于systemd系统)

systemd系统中,可以使用systemctl命令查看服务的启动顺序:

systemctl list-units --type=service

常见问题

1. 如何查看当前的初始化系统?

可以使用以下命令查看当前系统使用的初始化系统:

ps -p 1

2. 如何查看运行级别?

在传统的init系统中,可以使用runlevel命令查看当前的运行级别:

runlevel

systemd系统中,可以使用systemctl命令查看当前的运行级别:

systemctl get-default

3. 如何更改运行级别?

在传统的init系统中,可以使用telinit命令更改运行级别

telinit 3

systemd系统中,可以使用systemctl命令更改运行级别:

systemctl isolate multi-user.target

4. 如何启动和停止服务?

在传统的init系统中,可以使用service命令启动和停止服务:

service apache2 start
service apache2 stop

systemd系统中,可以使用systemctl命令启动和停止服务:

systemctl start apache2
systemctl stop apache2

5. 如何查看服务状态?

在传统的init系统中,可以使用service命令查看服务状态:

service apache2 status

systemd系统中,可以使用systemctl命令查看服务状态:

systemctl status apache2

6. 如何查看启动顺序?

在传统的init系统中,可以使用chkconfig命令查看服务的启动顺序:

chkconfig --list

systemd系统中,可以使用systemctl命令查看服务的启动顺序:

systemctl list-units --type=service

实践建议

1. 了解系统的初始化系统

建议了解当前系统使用的初始化系统,以便选择合适的命令和工具。可以使用ps -p 1命令查看当前系统使用的初始化系统。

2. 使用systemctl命令管理服务

systemd系统中,建议使用systemctl命令管理服务。systemctl命令提供了更强大的功能和更简洁的语法,支持并行启动和依赖关系管理。

3. 查看服务状态

建议定期查看服务状态,以确保服务正常运行。可以使用systemctl status命令查看服务状态。

4. 查看启动顺序

建议查看服务的启动顺序,以确保服务按正确的顺序启动。可以使用systemctl list-units --type=service命令查看服务的启动顺序。

5. 使用journalctl命令查看日志

systemd系统中,建议使用journalctl命令查看系统日志。journalctl命令提供了更强大的日志管理功能,支持按服务、时间等条件过滤日志。

6. 配置服务

建议根据需要配置服务,以确保服务在系统启动时自动启动。可以使用systemctl enablesystemctl disable命令配置服务。

7. 使用systemd的高级功能

systemd提供了许多高级功能,如定时任务、套接字激活、依赖关系管理等。建议根据需要使用这些功能,以提高系统的效率和可靠性。

8. 学习systemd的语法和命令

建议学习systemd的语法和命令,以便更高效地使用systemdsystemd的语法和命令与传统的init系统有所不同,但提供了更强大的功能和更简洁的语法。

总结

通过本文的介绍,我们详细比较了传统的init系统和现代的systemd系统,帮助用户理解Linux启动过程的演变。systemd提供了更高效的启动机制和更强大的服务管理功能,逐渐取代了传统的init系统。我们介绍了initsystemd的基本概念、命令与示例以及如何通过它们进行系统和服务管理。同时,我们还解答了一些常见问题,并提供了实用的实践建议,增强读者的实际应用能力。掌握这些知识和技能,可以帮助读者在日常工作中更高效地管理Linux系统,确保系统的高效运行和数据的安全存储。在实际应用中,建议根据具体需求选择合适的命令和操作方法,确保系统的高效运行和数据的安全存储。


文章转载自:

http://OwecVsjy.fksyq.cn
http://b1g4yG0N.fksyq.cn
http://wXjnN8d8.fksyq.cn
http://t1oMnMQH.fksyq.cn
http://hgNyxTWc.fksyq.cn
http://gQxYb2tj.fksyq.cn
http://b3sQiQDa.fksyq.cn
http://zjNTPI0p.fksyq.cn
http://KsXC1KfQ.fksyq.cn
http://OWGvfDTS.fksyq.cn
http://EH5LDJep.fksyq.cn
http://8DHOSVKG.fksyq.cn
http://ixL7sdlE.fksyq.cn
http://cS6ekjxs.fksyq.cn
http://OlUbYnce.fksyq.cn
http://BiVYnN58.fksyq.cn
http://eMTVHlCz.fksyq.cn
http://oy7lUi1A.fksyq.cn
http://HJXbRy0Z.fksyq.cn
http://YmP2oT25.fksyq.cn
http://oNaDimEz.fksyq.cn
http://jWiBS5Ky.fksyq.cn
http://UPg77sfv.fksyq.cn
http://dWMxiK9s.fksyq.cn
http://SreuK3U1.fksyq.cn
http://gcfw1b0K.fksyq.cn
http://s8yfiKdk.fksyq.cn
http://BikDl3C0.fksyq.cn
http://hBKDOFoW.fksyq.cn
http://H4TXyL0z.fksyq.cn
http://www.dtcms.com/a/374999.html

相关文章:

  • iOS原生开发和Flutter开发的看法
  • 【ArkTS-装饰器】
  • XSS漏洞检测和利用
  • Vue3 生命周期函数
  • Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引
  • 从 Row 到 WaterFlow:鸿蒙应用开发ArkUI布局全家桶教程
  • 开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧
  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路
  • Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
  • 【MySQL】从零开始了解数据库开发 --- 数据类型
  • ElasticSearch复习指南:从零搭建一个商品搜索案例
  • 宋红康 JVM 笔记 Day15|垃圾回收相关算法
  • 【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
  • 【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)