runlevel、systemd和init

2023-10-12 08:18
文章标签 init systemd runlevel

本文主要是介绍runlevel、systemd和init,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

init这个其实也是一个命令,用来修改当前的runlevel,
runlevel是一个有趣的概念,linux本身是一个多任务多用户的操作系统,而它本初的样子就是一个普通的命令行,你可以通过在terminal中输入sudo init 3来更改当前的runlevel。看看会发生什么。
输入

cd /etc/ && find . -type d -name "rc*" 2 > /dev/null

一般情况下应该会看到像这样的
在这里插入图片描述
或许在某些版本中还可以看到rc.local的文件夹。
这个数字0-6就是对应到runlevel,因此runlevel有7个(暂且不用考虑rc.s,这个文件夹的启动权限高于其他七个)
(rc的意思是runlevel control)
对应结果如下:
0: shutdown
1:emergency.target
2-4:multi-user.target
5:graphical.target
6:reboot
因此你可以较容易知道你的linux启动过程中至少不会是在runlevel为0或者6的情况下,(因为这样你的linux不可能会成功启动),那么你当前的runlevel是多少呢?
事实上,如果可以登录的时候可以看到GUI,那就代表runlevel为5,因为是以图形界面的方式打开并且工作的。
输入

runlevel

就可以知道当前是在什么runlevel。
接着上面所说,
在什么runlevel就会启动哪个rc*.d里面的脚本,虽然里面的其实仅仅是一些link文件,指向/etc/init.d中的脚本,但是其实效果是一样的。
再可以说下init和systemd。
init是较早版本的linux中的用于完成系统启动、配置的程序。
systemd则是目前的用于取代init的程序。
但是目前,二者基本同时存在。
因为initd的使用还是比较频繁的。很多是时候我们也几乎习惯了/etc/init.d/*** start/stop/restart/status ...这样的使用,所以这个命令还是被保留了下来。
但是其实systemd也是非常强大并且好用的。
上述的命令在systemd中可以表示成
systemctl restart/start/enable/disable/mask(注销)/unmask/status …service/target
在systemctl中每个服务被分为service、target…
其中主要所要用到的还是service。
每个服务在systemctl中要添加一下后缀.service、.target等来明确。
如果不知道确切的名字

systemctl list-unit-files --type=... -all 

然后正则表达式匹配一下用以缩小搜索范围。
systemd还有一些有趣的功能,
systemd analyze
可以查看系统启动所耗时间,并且大致告诉那些部分耗了多久时间,
详细的

systemd analyze blame

不过需要说得是其中有些服务因为耗时很短,在systemd看来几乎就没耗时间,所以不会显示出来。
还有一些使用,
例如:
电源管理:
systemctl reboot 重启
systemctl poweroff 关机
systemctl hibernate 休眠
systemctl suspend 待机/挂起
修改runlevel:
initd中应该是:
sudo init 0-6
systemd中是:
systemctl poweroff -> 0
systemctl isolate multi-user.target / systemctl isolate runlevel3.target-> 2-4
systemctl isolate graphical.target / systemctl isolate runlevel5.target ->5
systemctl reboot ->6
使用systemctl来使用服务比service、initd在系统维护、重大系统问题解决等方面会有更多好处。

这篇关于runlevel、systemd和init的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194526

相关文章

4.15 版本内核调用 init_timer()函数出错

linux/include/linux/timer.h4.15 之前版本struct timer_list {14 /*15 * All fields that change during normal runtime grouped to the16 * same cacheline17 */18 struct hl

Windows11上使用WSL2,提示:系统尚未使用systemd作为初始化系统(PID 1)启动

前言 略 报错信息 System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down 解决方法 使用如下命令 # windows终端,执行如下命令wsl --update# 登录ubuntu系统,执行如下命令s

Python方法:__init__,__new__,__class__的使用详解

转自:https://blog.csdn.net/qq_26442553/article/details/82464682 因为python中所有类默认继承object类。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际

Ubuntu20.04使用systemd配置Gogs开机启动

先说现象,大家用sudo systemctl start gogs是不是和我一样? ubuntu@raspberry-pi:~$ sudo systemctl status gogs● gogs.service - GogsLoaded: loaded (/lib/systemd/system/gogs.service; enabled; vendor preset: enabled)Acti

_no_init的作用

__no_init用于禁止系统启动时的变量初始化,什么情况下需要用这个关键字使系统禁止变量的初始化,禁止变量初始化用在什么场合,为什么要这样做,有什么意义吗? 1、看门狗复位的现场恢复,如果初始化了就完全不可恢复了 2、使用nvram保存数据,需要连续记录的。    我有个变量,需要在系统意外复位时,这个变量值能保留,所以采用__no_init来实现,只是上电的时候这个值不是零

iOS中alloc与init

面向对象的3大特性,封装继承和多态. 我遇到过封装相关的问题,因为初级封装简单,常常暴露出被你封装的接口,进一步进行高级封装隐藏接口的时候才发现,封装是一门学问,而这门学问得从最基础的alloc与init讲起.   FatherModel.h #import <Foundation/Foundation.h>@interface FatherModel : NSObject@en

优雅的写init方法

怎么写出高质量的init方法,以下是demo可参考实现,代码实现。 public class BaseTestController {private UnitTest unitTest;public void init(String url, String accessToken){unitTest = UnitTest.getNewInstance();unitTest.setHost(ur

Android14音频进阶之定制ramdisk文件系统init服务(八十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧

cocos2dx场景切换中init、onEnter、onEnterTransitionDidFinish的调用顺序

这些方法调用的先后顺序如下(使用 replaceScene 方法): 1. 第2个场景的 scene 方法 2. 第2个场景的 init 方法 3. 第2个场景的 onEnter 方法 4. 转场 5. 第1个场景的 onExit 方法 6. 第2个场景的 onEnterTransitionDidFinish 方法 7. 第1个场景的 dealloc 方

深入理解jvm--Java中init和clinit区别完全解析

init和clinit区别 ①init和clinit方法执行时机不同 init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法,也就是在jvm进行类加载—–验证—-解析—–初始化,中的初始化阶段jvm会调用clinit方法。 ②init和clinit方法执行目的不同 init is t