centos启动——/sbin/init 的破坏与修复

本文介绍了当CentOS系统的/sbin/init遭到破坏后,如何分析问题并进行修复。从现象描述,包括正常运行的状况和出现的问题,到深入探讨init的工作流程,再到详细修复步骤,如进入可用系统和检查修复,最终成功解决问题。

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

一、破坏

 rm  -f /sbin/init

二、现象

1.正常项

BISO自检正常
grub正常
内核启动正常

2.开始有问题

在内核启动后
提示错误:
1.cannot set terminal process grup (-1) :Inappropriate  iocal fro for device
    不能设置终端进程grup(- 1):设备的不适当的iocal
2.no job control  in this shell
    这个外壳没有工作控制
3.并且
直接登陆进入了一个没有命令输入显示的shell

这里写图片描述

三、分析

登陆终端是由 init 负责的

init工作的流程是

/sbin/init --> (/etc/inittab) --> 设置默认运行级别 -->
 运行系统初始脚本、完成系统初始化 --> 
 (关闭对应下需要关闭的服务)启动需要启动服务 --> 设置登录终端

四、修复

### 解决 `/usr/sbin/init` 显示异常的问题 当遇到 `/usr/sbin/init` 显示异常的情况时,通常是因为容器内的初始化进程未能正常运行或者配置存在问题。为了排查并解决问题,可以从以下几个方面入手: 1. **确认基础镜像支持 `init` 进程** 使用某些精简版的基础镜像(如 alpine)可能不包含完整的 init 系统组件。建议切换到官方 CentOS 镜像或其他带有完整 init 支持的镜像[^1]。 2. **检查 Docker 容器启动参数** 如果希望使用 `/usr/sbin/init` 来管理服务,则应确保在执行 docker run 命令时指定了合适的入口点和命令。例如: ```bash docker run --privileged -it centos /usr/sbin/init ``` 参数 `--privileged` 提供更高的权限级别给容器,允许其访问更多的系统资源,这对于运行 init 系统来说是必要的。 3. **验证容器内部的服务状态** 登录到正在运行中的容器内查看是否有错误日志输出或未启动的关键服务。可以通过以下方式进入交互模式下的 shell 并诊断问题所在: ```bash docker exec -it <container_id> bash systemctl status dbus.service # 或者其他依赖于 systemd 的服务 journalctl -xe # 查看最近的日志条目 ``` 4. **调整 SELinux 设置** 对于基于 Red Hat/CentOS 的发行版本,默认情况下启用了 SELinux 安全策略模块。这可能会阻止一些操作除非特别授权。如果怀疑此因素影响到了 `/usr/sbin/init` 的行为,尝试临时禁用它来测试效果: 编辑主机上的 `/etc/selinux/config` 文件并将 `SELINUX=enforcing` 修改为 `SELINUX=permissive` 或者直接设置成 disabled 模式重启机器后再试一次容器创建过程。 5. **更新软件包列表及安装缺失依赖项** 确认所有必需的库都已经正确安装到位。有时即使选择了正确的 base image,在构建过程中也可能遗漏了一些重要的 runtime 库而导致功能失效。因此可以在 Dockerfile 中加入如下指令以保持环境最新化: ```dockerfile RUN yum update -y && \ yum install -y epel-release && \ yum clean all ``` 通过上述措施应该能够有效定位并修复 `/usr/sbin/init` 所引发的相关显示异常现象。当然具体实施还需结合实际场景灵活运用这些技巧。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值