Linux的运行级别与解决开机故障一例 ( by quqi99 )

 

                                                                             Linux的运行级别与解决开机故障一例

 

作者:张华  发表于:2012-4-8
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

 

 

         一个真实的案例.

         在更新了一个软件之后,同事的Fedora启不来了, 折腾了好长时间,终于解决了。记录如下,顺便回忆了一下运行级别相关的知识。

         首先,我之前用ubuntu 11.10的时候, 遇过到一次更新了软件,在登录窗口,输入了正确的用户名和密码却进不了图形化界面。那次我是按Alt + F2进入了一个命令行终端,再输入 startx 命令成功进入了图形化界面。造成那次问题的原因是因为我将 /home/hua 作了一个单独的分区,每次在各种Linux系统间重装时都没有格式化 /home/hua 分区的。可能是位于 /home/hua 下的X windows的配置冲突吧。所以这次我首先想到按ctrl+alt+f1~f6进入一个终端,但进不了,失败。

 

         可能是什么原因造成了x windows失败进不了图形化界面的, 同事提示打日志,方法是:

         startx > log.txt 2>&1

         简单地解释一下上面的命令:

         1)startx, 即启动X windows图形化界面

         2) 重定向操作符描述如下:
                > 将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。
                < 从文件而不是从键盘或句柄读入命令输入。
                >> 将命令输出添加到文件末尾而不删除文件中已有的信息。
                >& 将一个句柄的输出写入到另一个句柄的输入中
                <& 从一个句柄读取输入并将其写入到另一个句柄输出中。
                |  从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。

          3) 句柄的代号描述如下:
                STDIN 0 键盘输入
                STDOUT 1 输出到命令提示符窗口
                 STDERR 2 错误输出到命令提示符窗口
                 UNDEFINED 3-9 句柄由应用程序单独定义,它们是各个工具特有的

           不过有个问题,stdout是有缓冲的,而stderr是没有缓冲的,原因很简单,stderr一般是系统发生错误,比如编译一个程序出错,需要立即给出编译错误提示。
所以如果写成  startx > log.txt 2 > log.txt就会出现问题。
所以 2 >& 1就是把 stderr重定向到stdout 由于stdout被重定向到 log.txt,所以最终stderr,stdout均被重定向到log.txt并且解决了两者缓冲区不一致的问题。

 

           现在剩下的问题就是如何进一个命令行窗口执行上述打日志的命令。按Alt + F2进不去。启动级别登场

           1) 首先重启机器,选择从“恢复”模式进入

           2)vi /etc/inittab 看看fedora 16是怎么处理启动级别的。ok,简单,直接执行列命令:

                ln -s /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target

                各运行级别的含义如下,所以将上面的命令模式改为runlevel3

                 runlevel 0:关机,不要设置为默认运行级
                runlevel 1:单用户模式
                runlevel 2:多用户模式,不带NFS
                runlevel 3:完全的多用户模式,如果没有网络连接的话与2相同
                runlevel 4: 未用
                runlevel 5:图形用户模式(runlevel 3 + X 窗口系统“图形用户界面”)。
                 runlevel 6:  重启,不要设成默认运行级

              3) 重启机器,进入运行级别3,输入上面提到的 startx > log.txt 2>&1 命令

              4)查看日志结果 vi log.txt

              5)发现日志文件里提到了一个动态链接库,用ldd命令一看,果然是更新的这个应用软件用了一个动态链接库覆盖了操作系统自带的一个同名的库。删除,OK。

 

 

              如果不想通过上面的方式修改运行级别,还有两种方式:

             1) 命令 /sbin/init RUNLEVEL , 例/sbin/init 3

             2) 在启动的Grub菜单界面中,高亮选中想要启动的系统,按字母E键,定位到kernel坐在行的最后,加上3或者5,然后按回车键确认,最后按字母B键启动系统。

 

              服务与运行级别

              1)我们可以通过命令检查服务在某个运行级别下是否启动, /sbin/chkconfig --list

              2) /sbin/chkconfig --level 35 crond on

              4) 查看服务状态, /sbin/service --status-all

              5)  重启服务, service crond restart

              6) 可用systemctl 看所有服务是否启动成功的状态

              7) 用 systemd-analyze blame 命令看所有服务的启动时间

 

             举个例子,如/etc/rc.local其实是/etc/rc.d/rc.local的软连接,但注意:rc.local头要加上#!/bin/sh

              vi /etc/rc.d/rc.local

                  #!/bin/sh
                  /bak/bin/bso
                  losetup -f --show /bak/kvmimages/nova.img

             ln -s /etc/rc.d/rc.local /etc/rc.local

             systemctl start rc-local.service  启动它

             systemctl status rc-local.service

              下面中/etc/rc后的数字代表的就是启动级别

              [root@zhanghua proc]# vi /etc/rc
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.d/     rc.local

 

20160824更新:

对于Ubuntu,顺序是:lightdm ->  unity-greeter -> X11/Xorg -> ubuntu-desktop

 

ubuntu 18.04中的启动级别切换见 - https://blog.csdn.net/weixin_42776979/article/details/81512370

 

 

               

         
 

 

 

 

 

 

 

 

               

         
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quqi99

你的鼓励就是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值