linux命令行故障排除方法详解

发布时间:2020-03-25编辑:脚本学堂
本文介绍了linux系统中使用命令行进行故障排除的方法,通过ctrl + alt + f2进入到一个控制台,然后在命令行下操作,有需要的朋友参考下。

linux系统中,桌面冻结该怎么办?
在使图形环境更稳定的过程中,复合窗口管理器是一个巨大的进步。
但是,有时候你们漂亮的linux图形化桌面锁起来了,那么你会怎么办?你所要做的是通过ctrl + alt + f2进入到一个控制台。这个控制台和你的图形环境是互相独立的。

假如你知道是什么锁住了你的桌面,你可以找到它的进程号并杀死它。
比如,当我在我的海豚图形文件管理器中连接到一个远端网络共享时,网络连接中断了,海豚图形文件管理器锁住了我整个桌面。所以我进入控制台模式,运行下列命令来找到它的进程号:
 

复制代码 代码示例:
$ ps aux | grep dolphin
carla 9218 ?  Sl  0:00 /usr/bin/dolphin   
     --icon system-file-manager -caption Dolphin

这表明carla拥有这个进程,她能够使用下面的命令来杀死这个进程:
$ kill 9218
假如root或者不同的使用者拥有这个进程,那就使用命令:sudo kill 9218
现在,在你的键盘上按下向上箭头按键去回到上一条命令,按下Enter键去重新运行,看我们的杀死命令是否有效,是否杀死了那个进程。如果,没有杀死,那就使用更霸道的命令:
$ kill -9 9218
-9发送SIGKILL信号,这个信号是不能被忽略的,是直接送到内核的(个人理解nuclear option)。
假如你发现一个失控进程已近催生了子进程。为了防止你所杀死的子进程再次由它产生,你需要去杀死父进程,因为它产生子进程,这样可以防止它再产生子进程。(假如你不熟悉这些术语,那么你有同伴了,我也不熟悉这些术语(原作者的观点))。添加-f选项来在树状图中看父进程和子进程的关系,就像plex媒体服务器这个简短的例子:
 

root 1776 /bin/sh -e /proc/self/fd/9
plex 1803   _ /bin/sh /usr/sbin/start_pms
plex 1804     _ ./Plex Media Server
plex 1970     _Plex Plug-in [com.plexapp.system]
plex 2645     _ /usr/lib/plexmediaserver
plex 2690     _ Plex Plug-in
 

所以,你可以用sudo kill 1776去干掉上述所有的进程。
大多数linux发行版有六个控制台:tty1~tty6.tty7通常是你的x会话(x window 图形界面),所以你可以按ctrl + alt + f7来重返你的图形界面。

谁是罪魁祸首?
假如你不确定哪个进程造成了这个问题,试试古老而有用的top命令:
 

复制代码 代码示例:
$ top 
top - 12:07:33 up 4:13, 7 users, load average: 0.56, 0.38, 0.34
[...]
PID USER  VIRT  RES   %CPU %MEM  COMMAND
6399 carla  493m 27m 94.2 0.2 konsole
4386 carla 1937m 819m  2.0  5.1 firefox
1511 root   613m 189m  1.3  1.2  Xorg
 

上述结果指出Konsole是麻烦制造者,因为它占用了94.2%的cpu。你可以很清楚的看到这个进程的id号:6399,来吧,杀死这个进程。

记录保存一天
大多数服务器记录他们的活动。假如你查看/var/log,你会发现一系列的日志文件如CPUS,boot,dmesg,kern.log,syslog,和udev.当你安装服务的时候,他们通常有可配置的日志记录,所以你可以从调试信息的紧急程度来选择放日志文件的地点及日志文件的详细程度。下面是调试信息等级:
debug
info
notice
warning
error
critical
alert
emergency
emergency输出最少量的信息。
debug输出最多的信息。
info是一个很好的每天记录等级,记录日常活动以及警告和错误。
debug可以是压倒性的,所以当你在研究一个问题时,一个好的策略是打开调试,然后当问题被解决时将问题写到info中。你将在哪里做这些呢?看一下/etc这个目录。个人的服务都有自己的配置文件,比如/etc/cups/cupsd.conf。如果你的linux是古老的syslogd,这个syslog在/etc/syslog.conf中配置。如果你有新的rsyslogd,你的syslog在/etc/rsyslog.conf中配置。
人们并不是很喜欢去读日志文件。但是在要解决问题的时候,他们不得不读。有个好方法是,你可以用grep命令让错误信息自动出现。
$ grep -i error /var/log/syslog
任何文本字符串都将帮助你快速的找到你所需要的信息,如下这个例子是网络管理经常做的:
 

复制代码 代码示例:
$ grep -i networkmanager /var/log/syslog
Dec 10 14:54:50 studio NetworkManager[1402]: 
   (eth1): DHCPv4 state changed bound -> renew
Dec 10 14:54:50 studio NetworkManager[1402]:     
   address 192.168.10.182
Dec 10 14:54:50 studio NetworkManager[1402]:
   prefix 24 (255.255.255.0)
 

一旦你找到看起来有用的信息,你可以参考你的文档,看看是怎么回事,并通过谷歌查询跟多的信息。

但是,图形应用程序没有日志
大部分图形应用部产生日志文件,这是可悲的和没有帮助的。但是,你任然可以从命令行运行应用程序来查看一些命令输出,如我最喜欢的游戏:超级TuxKart:
 

复制代码 代码示例:
$ supertuxkart 
Irrlicht Engine version 1.8.0 Linux 3.8.0-19-generic
  #30-Ubuntu SMP Wed May 1 1  
6:35:23 UTC 2013 x86_64 [FileManager] Data files will be fetched from:
    '/usr/share/games/supertuxkart'
[FileManager] Addons files will be stored in   
   '/home/carla/.local/share/supertuxkart/addons'.

Debian要求所有的程序有一个man手册,所以如果你使用的是Debian,Ubuntu或者他们的衍生系统,你可以使用man手册。如果没有man手册或其它文件,试试-h参数(比如 superuxkart -h)来查看帮助菜单。当然,我不可能面面俱到,所以我举了个例子。

但是具体是什么原因导致图形界面挂掉要具体问题具体分析。你可能是丢失了一个库或者系统发生了冲突,具体命令行会告诉你。