linux sysvinit/upstart/systemd关闭Xserver的不同方式

本文介绍在不同的Linux初始化系统中(包括sysvinit、upstart和systemd)如何切换运行级别,涉及临时更改当前运行级别及永久设置默认运行级别的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sysvinit

方式一、只会改变当前的运行级别,对下次启动没有影响

$ init 3

方式二 、改变默认的运行级别,对下次启动有影响

$ vim /etc/inittab

id:5:initdefault: ==> id:3:initdefault:(5为GUI,3为命令行)

upstart

方式一 、只会改变当前的运行级别,对下次启动没有影响

# 关闭相应的GUI服务
$ /etc/init.d/lightdm stop
或
$ /etc/init.d/gdm stop 
或
$ /etc/init.d/kdm stop

方式二、改变默认的运行级别,对下次启动有影响

$ vim /etc/init/rc-sysinit.conf 
DEFAULT_RUNLEVEL=3    # 命令行模式
or
DEFAULT_RUNLEVEL=5    # 图形化模式

systemd

Ubuntu 从 15.04 开始使用 systemd 替代 upstart,不存在运行级的概念。
默认启动到命令行界面可通过修改默认 target 为 multi-user.target 实现

 

  • 如何设置为 multi-user 模式?
  • 即 更改当前运行级别,对下次启动没有影响
$ systemctl isolate multi-user.target
或
$ systemctl isolate runlevel3.target

 

  • 如何设置 开机默认 为 multi-user 模式,不进入 graphical 模式?
  • 即 更改默认运行级别,对下次启动有影响
# /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
$ sudo systemctl set-default multi-user.target
或
$ sudo systemctl set-default runlevel3.target

或
# /lib/systemd/system/default.target -> /lib/systemd/system/multi-user.target
$ ln -sf /lib/systemd/system/multi-user.target /lib/systemd/system/default.target

 

参考网址:

Ubuntu16.04如何默认启动字符界面

【參考 初始化 init 系统 的 進化史】

浅析 Linux 初始化 init 系统,第 1 部分: sysvinit

浅析 Linux 初始化 init 系统,第 2 部分: UpStart

浅析 Linux 初始化 init 系统,第 3 部分: Systemd

 

 

 

<think>我们正在比较systemdSysVinit的配置文件存放目录。 根据用户提供的信息和引用: 对于SysVinit: - 引用[4]提到:支持service的程序,安装时会自动在`/etc/init.d`目录添加一个配置文件。例如,执行`service httpd start`时,会开启`/etc/init.d/httpd`配置文件指向的可执行文件。 - 因此,SysVinit的启动脚本目录是`/etc/init.d`。 对于systemd: - 引用[2]提到:迁移时,需要将SysVinit的脚本和配置文件转换为systemd服务文件。 - 引用[1]提到:systemd尽可能减少对shell脚本的依赖,使用了Linux专属技术。 - 根据常见的systemd知识,systemd的配置文件主要存放在两个目录: 1. `/etc/systemd/system/`:系统管理员安装的系统服务配置文件(优先级高)。 2. `/usr/lib/systemd/system/`:发行版提供的默认服务配置文件(优先级低)。 但是,用户特别提到了`/etc/systemd/system/`,所以我们重点对比这个目录。 对比: - SysVinit:使用`/etc/init.d`目录存放启动脚本,这些脚本是shell脚本,每个服务一个脚本。 - systemd:使用`/etc/systemd/system/`目录存放系统管理员自定义的服务配置文件(以`.service`为后缀),此外还有`/usr/lib/systemd/system/`存放默认配置。注意,systemd的配置文件是文本文件(INI格式),而不是shell脚本。 另外,引用[2]还提到了符号链接的重要性:在systemd中,通过创建符号链接来启用服务(例如,`systemctl enable`会在`/etc/systemd/system`的特定target的`.wants`目录下创建指向服务文件的符号链接)。 因此,我们可以总结如下: 1. **SysVinit 启动脚本目录**: - 路径:`/etc/init.d/` - 特点:存放每个服务的启动脚本(shell脚本),脚本中包含启动、停止、重启等操作的函数。这些脚本由init进程按顺序执行。 2. **systemd 配置文件目录**: - 主要目录:`/etc/systemd/system/`(系统管理员配置)和`/usr/lib/systemd/system/`(系统默认配置) - 特点:存放服务单元文件(如`.service`文件),这些文件是INI格式的文本文件,定义了服务的启动命令、依赖关系等。此外,该目录下还有target的配置和符号链接(用于服务启用)。 注意:在systemd中,服务单元文件的查找优先级是:`/etc/systemd/system/`中的配置会覆盖`/usr/lib/systemd/system/`中的同名文件。 另外,在systemd中,服务的管理命令是`systemctl`,而不再使用`service`命令(虽然一些系统为了兼容可能保留了`service`命令,但实际是转发给systemctl)。 为了更清晰地展示,我们可以用表格对比: | 项目 | SysVinit | systemd | |--------------|------------------------------|------------------------------------------| | 配置文件目录 | `/etc/init.d/` | `/etc/systemd/system/`(管理员配置)和`/usr/lib/systemd/system/`(系统默认) | | 文件类型 | Shell脚本 | 单元文件(.service等,INI格式) | | 管理命令 | `service` 和 `chkconfig`等 | `systemctl` | | 启用服务方式 | 在运行级别目录创建符号链接 | 在target的.wants目录创建符号链接 | 根据引用[2]的迁移过程,当从SysVinit迁移到systemd时,需要将`/etc/init.d/`中的脚本转换为systemd的单元文件,并放入上述目录中。 最后,生成相关问题。</think>### systemdSysVinit 配置文件目录对比 #### 1. **SysVinit 启动脚本目录:`/etc/init.d/`** - **作用**:存放所有服务的初始化脚本(Shell 脚本),每个服务对应一个独立文件。 - **文件示例**:`/etc/init.d/httpd`、`/etc/init.d/nginx` - **特点**: - 脚本需手动编写,包含服务启动/停止/重启逻辑(如 `start()`, `stop()` 函数)。 - 通过运行级别目录(如 `/etc/rc3.d/`)的符号链接控制服务自启: ```bash S01httpd -> ../init.d/httpd # 启动顺序01的httpd服务 K20nginx -> ../init.d/nginx # 关闭顺序20的nginx服务 ``` - 管理命令依赖外部工具(如 `service httpd start` 或 `/etc/init.d/httpd start`)[^4]。 #### 2. **systemd 配置文件目录:`/etc/systemd/system/`** - **作用**:存放系统管理员自定义的服务单元文件(`.service`),覆盖默认配置。 - **文件示例**:`/etc/systemd/system/nginx.service` - **特点**: - 使用标准化的 INI 格式文件(非脚本),定义服务属性: ```ini [Unit] Description=Nginx Server After=network.target [Service] ExecStart=/usr/sbin/nginx Restart=on-failure [Install] WantedBy=multi-user.target ``` - 通过 `systemctl enable` 创建符号链接到目标目录(如 `/etc/systemd/system/multi-user.target.wants/`)实现自启[^2]。 - 优先级高于系统默认目录 `/usr/lib/systemd/system/`(存放发行版提供的默认配置)。 --- ### 核心差异总结 | **特性** | **SysVinit (`/etc/init.d/`)** | **systemd (`/etc/systemd/system/`)** | |------------------|---------------------------------------------|--------------------------------------------| | **文件类型** | Shell 脚本 | INI 格式单元文件(`.service`) | | **依赖管理** | 手动设置脚本顺序 | 通过 `[Unit]` 块的 `After`/`Requires` 声明 | | **启用服务** | 在运行级别目录创建符号链接 | `systemctl enable` 自动创建符号链接 | | **修改生效** | 需重启服务或运行级别切换 | `systemctl daemon-reload` 动态加载 | | **资源控制** | 不支持 | 支持 `cgroups` 限制资源(如 `MemoryLimit`)| > **关键区别**: > - SysVinit 的 `/etc/init.d/` 是**可执行脚本集合**,依赖外部工具管理。 > - systemd 的 `/etc/systemd/system/` 是**声明式配置文件目录**,由 `systemd` 直接解析并管理依赖[^1][^2]。 --- ### 迁移注意事项 当从 SysVinit 迁移到 systemd 时: 1. 将 `/etc/init.d/` 中的脚本转换为 `.service` 文件。 2. 自定义配置放入 `/etc/systemd/system/`(优先于 `/usr/lib/systemd/system/`)。 3. 使用 `systemctl daemon-reload` 加载新配置[^2]。 例如,传统 Apache 服务迁移: ```bash # SysVinit 脚本路径 /etc/init.d/apache2 # 转换为 systemd 服务路径 /etc/systemd/system/apache2.service ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值