Linux 下终端自动退出案例分析

(首发地址:学习日记 https://www.learndiary.com/2024/03/linux-terminal-auto-exit/

在今天的分享中,淘宝网店"学习日记小店"店主,专门从事 Linux 服务的 learndiary,向我们介绍了一个关于 Ubuntu 20.04 操作系统中遇到的特定问题案例------用户无法正常打开终端以及 TTY 文本终端登录后会自动退出的情况。本文基于"通义千问"归纳视频字幕生成文本修改。视频演示:【Linux 下终端自动退出案例分析】 https://www.bilibili.com/video/BV1KJ4m1j7eT/

Linux 下终端自动退出案例分析

一位客户联系到 learndiary,反映了该问题,并提供了一段视频作为证据。视频显示,在输入正确的账户密码后,用户能够登录 TTY 终端,但紧接着就会被强制退出。为了诊断问题,learndiary 首先建议客户重启计算机,并通过 Grub 菜单的高级选项进入 Recovery Mode,然而即便是在恢复模式下的 root 选项登录,问题依然存在,登录后也会立即退出。

接着,learndiary 指导客户使用 Ubuntu 20.04 的启动U盘进入试用模式(Try Ubuntu)。在该环境中,尝试使用 chroot 命令进入硬盘系统以便排查故障。不过,当尝试chroot /mnt 时,却遇到了 segmentation fault(段错误)的问题。为了解决这一问题,learndiary 尝试将 LiveUSB 系统中的 /usr 目录内容复制到硬盘系统的相应位置,以替换可能存在错误的部分。但即使如此,仍然无法正常进入 chroot 环境。chroot 进入硬盘系统的主要命令如下(参见文末参考链接):

复制代码
sudo mount /dev/sda5 /mnt -v
sudo mount /dev/sda1 /mnt/boot/efi -v
for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i -v; done
sudo chroot /mnt

经过一系列探索,learndiary 发现通过更改 chroot 后的默认 shell 为 /bin/sh 而非 /bin/bash,可以成功进入硬盘系统。然而,尽管尝试了重新安装 bash 包(apt reinstall bash),问题仍未得到解决,同时确认了/root/.bashrc配置文件并无异常。

最后,通过在 chroot 进硬盘系统中,使用 apt purge bash 彻底卸载 bash 包及其配置文件,再重新安装 bash 及连带卸载的其他包。问题得到解决。

在后面的案例回顾中,learndiary 发现走了一些弯路。他先是假设图形终端也无法打开,但实际上图形界面应该是可以正常启动的,只是终端功能失效。第一个教训在于没有充分询问客户所有可能的相关情况。

第二个弯路则在于,虽然已能通过 /bin/sh 成功进入 chroot 环境,并且已替换 /usr 目录,但他未直接考虑到可能是 bash 的全局配置文件出错。事实上,问题根源应该在于 /etc/bash.bashrc 这个配置文件存在问题,如存在循环引用的函数导致了问题发生。如果早些关注到这个配置文件,只需编辑它即可解决问题,而无需重新安装整个 bash 包。

最直接的解决方案应该是在图形界面下打开终端,通过按 Ctrl+C 中断可能导致退出的进程,然后编辑 /etc/bash.bashrc 文件,将引发问题的如循环引用函数部分注释掉,从而恢复终端的正常使用。

总结来说,本次分享揭示了一个在 Ubuntu 20.04 Linux 系统中由于 bash 配置文件错误导致终端无法正常使用的案例,以及解决此类问题时的一些常见误区和正确应对方法。通过逐步排除故障和深入分析配置文件,就能够成功解决这类 Linux 终端自动退出的问题。

参考链接:

  1. GrubEFI Reinstall: https://wiki.debian.org/GrubEFIReinstall
相关推荐
琥珀色糖6 小时前
Linux守护进程
linux·终端·守护进程·会话·进程组
开心大爆炸10 小时前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun211 小时前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
苏生Susheng11 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
Ruiery12 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
分支预测失败12 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
GeW12 小时前
RHCE学习拿证计划:锁定核心考点,实现备考效率最大化
linux
snow@li12 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
苏生Susheng12 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
额额额对了12 小时前
Linux 进程间通信(IPC)核心机制:消息队列、共享内存与信号量详解
linux·网络·网络协议