Linux非常有趣的单用户模式分析


  单用户模式

    run-level如果等于1的话,就会进入单用户模式了。一般进入单用户模式不用输入密码,所以,如果忘记root密码的话,我们可以进入单用户模式,然后用passwd来更改。

    单用户模式没有网络,那些在chkconfig之中看到的服务也没有启动,进入/etc/rc.d/rc1.d,用ls命令看看里面有些什么文件:

    我们会发现里面只有两个S开头的文件,其他全部是K开头的文件。S是代表start,而K代表kill。

    在Bootloader之中我们有讲到传递给内核的参数有single,会进入单用户模式,那么那种单用户模式与run-level=1的单用户模式有没有什么不同么?

    另外我们好可以在bootloader传递init=/bin/bash给内核,与单用户模式又有什么不同呢。

    第二个问题,还好理解,就是让内核把bash当成init来启动所以init所作的事情是一件也不会做的,内核加载完毕后就会将控制交给shell了。启动信息简短了很多:

    这时候所加载的/应该还只是内核所加载的/,一般我们是以readonly加载的(还记得第一章的那些参数吧),所以在这种环境下的所有文件也是readonly的。当然如果我们想更改文件内容的话,是可以remount根目录/。

    先看看这时候系统都mount了些什么:
    $mount
    /dev/mapper/VolGroup00 on / type ext3 (rw)
    None on /proc type proc (rw)

    我不太明白结果第一行的(rw)是不是read write的含义,不过这时候的/的确是readonly的。

    重新mount根目录/成read write:$mount –o remount rw /

    一切OK,这时候我们可以编辑我们所需要的文件了。不过记住init和shell的功能是大不相同的,这只是一个很不完整的Linux环境,很多东西都不能玩。

    那么bootloader的参数single与run-level=1呢,我们假设/etc/inittab因为种种原因,就丢失了,重新启动后,init得到控制后找不到/etc/inittab,于是要求输入runlevel,可以无论你输入什么1-5,都会死机的,因为init根本不知道要做什么。

    怎么办呢?

    试试传递参数single给内核的方法(不会忘了吧),我们会发现虽然init找不到/etc/inittab,但是却把控制交到了shell的手上。

    真的是很有趣。

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3