欢迎各位兄弟 发布技术文章
这里的技术是共享的
常见的系统故障排除:
1,确定问题的故障特征 (不能启动?某个命令无法正常执行?程序能够启动,但总是出现异常行为等)
2,重现故障(故障发生的可能性有哪些?人为的让故障再发生一次)
3,使用命令或工具收集进一步信息,以确定故障的真正根源
4,排除不可能的原因
5,定位故障:
从简单的问题入手
一次尝试一种方式
原则
1,备份原文件
2,尽可能借助于工具
可能会出现的故障有:
1,管理员密码忘记 (进入单用户模式,直接改密码)
2,系统无法正常启动
a,grub损坏了(MBR损坏,grub配置文件丢失,Stage2阶段的文件损坏)
b,系统初始化故障(某文件系统无法正常挂载,驱动不兼容,系统时钟问题等)
grub:编辑模式 进入1级别 emergency ( emergency 紧急情况) ,
它是不会执行 rc.sysinit这个脚本的,所以但凡是rc.sysinit里面的问题,emergency 通通会略过它
因此只要不加载这个脚本rc.sysinit,额外的工作不执行,那我们的系统就不会崩溃,此时进入系统后
手动修复rc.sysinit,(一般先注释掉,系统启动之后再说)就可以了
(如果文件系统无法正常挂载,(一般先注释掉rc.sysinit里面的相关内容,系统启动之后再说)
(如果驱动不兼容,把装载的模块指令注释掉,在modprobe.conf或rc.sysinit)
c,服务故障也有可能会导致系统无法正常启动
d,图形界面故障 (不重要,可以略过)
e,用户无法登录系统(账号密码错了,bash程序故障)
3,命令无法运行,( 比如 export PATH=$PATH:/data/bin )(一不小心写成了 export PATH=/data/bin)
(此时执行 ls 都执行不了了)
(1,可以重新手动指定就可以了, export PATH=/bin:/sbin/:.............)
(2,只要修改不是改的配置文件,那么退出系统(关掉当前shell),重新登录就可以了(如果退出不了的话,就重新启动一个虚拟终端,重新登录就可以了))
(如果改了配置文件,重新登录也不行了,这个时候千万不能登出去(因为登出去的话,mingetty什么的都无法执行了,就无法再登录进来了),而是直接使用完整路径
/bin/ls /bin (/bin/ls /usr/bin) (就可找到grub)
比如找到了 /usr/bin/vim 命令 (于是 /usr/bin/vim /etc/profile)(或者编辑其它文件) 这样就可以通过编辑来修复了
PATH变量的损坏最多只是导致命令找不到,其实只需要使有绝对路径来尝试打开配置文件,编辑这个配置文件,然后重新登录即可
4,编译软件过程无法继续(开发环境缺少基本组件等)
装上开发环境就可以了,装上去后未必能够正常编辑,一定要看编译最后所报的错误
(比如某一个头文件没有,某一个开发库没有),此时google 一下这个头文件或开发库,它就会告诉你这个头文件或开发库是由哪个rpm包提供的,或者是哪个项目提供的,此时只需要安装对应的rpm包即可
假如一不小心,把默认级别设定为0或6,
启动的时候传入一个参数,进行单用户模式(级别1),然后修改/etc/inittab 改为3即可
假如一不小心,删了 /etc/rc.d/rc3.d (或者/etc/rc.d/init.d)
当运行到3级别的时候,总是提醒 no more process in this level
仍然是启动的时候传入一个参数,进行单用户模式(级别1),尝试修复目录系统
假如某个服务故障了导致启动停止,怎么办?
比如 sendmail,一旦系统时钟调整的时候,调整的不对的话,(往前调,或往后调),可能导致sendmail配置文件的时间戳检查无法通过
,一旦有这种错,就会发现sendmail服务卡在那儿了,无法进行下去了,
有几种办法:
1),重启启动系统,进行单用户模式(级别1),关了sendmail服务,在那个级别下,不让sendmail服务启动
2),修复一下sendmail,修复一下sendmail配置文件的时间戳
3),重启系统,看到 红色的 Red Hat 的时候 ,连续不断的按住 I 键,进入交互式模式,
一旦进入交互式模式,很麻烦,因为每一个服务都要问你要不要启动,因此,到了 sendmail这一项时,直接敲 I ,不启动即可
rc.local脚本语法错误或出现逻辑错误,怎么办?(进单用户模式,因为单用户不会启动rc.local服务)
[root@localhost rc.d]# pwd
/etc/rc.d
[root@localhost rc.d]# ls rc1.d/
K01dnsmasq K15svnserve K75netfs K89iscsid
K01setroubleshoot K20nfs K80kdump K89netplugd
K01smartd K24irda K85mdmonitor K89pand
K02avahi-daemon K25squid K85mdmpd K89rdisc
K02avahi-dnsconfd K25sshd K85messagebus K90bluetooth
K02NetworkManager K30sendmail K85rpcgssd K90network
K02rhsmcertd K44rawdevices K85rpcidmapd K91capi
K03rhnsd K50netconsole K86nfslock K91isdn
K03yum-updatesd K50tux K87irqbalance K92ip6tables
K05anacron K50xinetd K87mcstrans K92iptables
K05atd K60crond K87multipathd K95firstboot
K05conman K69rpcsvcgssd K87portmap K95kudzu
K05saslauthd K72autofs K87restorecond K99microcode_ctl
K10cups K73ypbind K88auditd K99readahead_early
K10dc_server K74acpid K88pcscd K99readahead_later
K10psacct K74apmd K88syslog K99vmware-tools
K10xfs K74haldaemon K88wpa_supplicant S13cpuspeed
K12dc_client K74ipmi K89dund S26lvm2-monitor
K15gpm K74nscd K89hidd S99single
K15httpd K74ntpd K89iscsi
单用户模式下,只启动 S13cpuspeed S26lvm2-monitor S99single 这三个服务
所以说单用户模式下,基本不启动任何服务
[root@localhost rc.d]#
单用户模式下不会启动 rc.local服务,
所以在单用户模式,修复下 rc.local 文件就可以了
系统初始化过程
POST-->BIOS(启动设备顺序依次找其MBR中的bootloader)-->kernel(initrd,rootfs,/sbin/init)-->/etc/inittab 完成系统初始化,并打印成功提示符
模拟grub 即mbr损坏,(覆盖掉mbr),一定不会覆盖它的分区表,不然整个磁盘里面的所有的数据都找不回来
先备份mbr
如果分区表坏了,/root 当然也找不到了,所以最好放到其它磁盘上去,以便将来恢复
[root@localhost ~]# dd if =/dev/sda of=/root/mbr.backup count=1 bs=512 (if和等于号之间没有空格)
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0235271 seconds, 21.8 kB/s
You have new mail in /var/spool/mail/root
[root@localhost ~]#
(不包括分区的应该是446 这里我们写成200)
[root@localhost ~]# dd if =/dev/zero of=/dev/sda count=1 bs=200 (if和等于号之间没有空格)
1+0 records in
1+0 records out
200 bytes (200 B) copied, 1.3797e-05 seconds, 14.5 MB/s
[root@localhost ~]#
[root@localhost ~]# sync 同步到磁盘上
[root@localhost ~]#
[root@localhost ~]# shutdown -r now 重启系统
mbr损坏的可能性是非常常见的,windows也是这样子的
mbr损坏了,里面的任何程序和命令都访问不到了
mbr损坏:
1,借助别的主机修复,把磁盘拆下来,借助于别的主机来修复
2,使用紧急救援模式:(救援模式也是一个小linux)使用grub的安装命令就可以了,借助于紧急救援模式,进入原来的根文件系统,就能实现
a, boot.iso ( 要确保整个网络当中有一台主机可以提供安装环境的(相当于安装光盘))
b, 使用完整的系统安装光盘,可以进入紧急救模式就行
boot: linux rescue 进入紧急救援模式,只是运行了一个基于光盘的类似于win PE 一样的系统,要想执行修改,有可能需要切换到真正的根才可以, grub损坏了,与根是没有关系的,只要根在,那么所有命令都可以执行,因此可以直接安装grub
但是在紧急救援模式下,可能提示很多信息,比如你是不是要配置网络属性? 根文件系统 挂载到 救援模式的小linux 的一个特定的目录下 一般是 /mnt/sysimage 目录下(只读的方式挂载的),如果需要修改内容的话,需要重新挂载为读写方式(有时是直接挂载为读写的) 挂载完成之后,由于我们的源linux系统不是启动起来的,所以很可能探测不到某些特殊的硬件,比如切换到/mnt/sysimage目录,想通过光盘来复制一些文件并且安装,你会发现系统识别不了光盘(因为rc.sysinit中有一步是激活udev,udev就是专门用来创建设备文件的)(问题是切换过来的根文件系统 /mnt/sysimage 本身是没有rc.sysinnit脚本的执行过程)
( chroot /mnt/sysroot ,dev目录下是不会有什么文件的,因为/mnt/sysroot 它是切换过来的虚根,只是把它当作根来用了,因此它不是一个启动意义上的系统,因此它的dev目录下不会有对应的设备文件的,没以设备文件,自然不能识别设备了,假如我们需要用到设备怎么办? 手动创建设备文件就可以了
mknod
)
重启后进入了光盘模式,(因为 mbr 被我们人为损坏了,硬盘进不去,自然就进入光盘模式了)
我们拆掉光盘吧
先关机再拆光盘
开机 找不到mbr,反正系统无法正常进入了
我们再关机,装上光盘
启动源linux
此时,硬盘启动不了了,于是就从光盘启动了
boot: 后面输入 linux rescue 敲回车
选择完成之后,它会尝试运行 anaconda ,在 anaconda的主使下,会启动一个小的linux,并将其作为我们的工作环境
启动网络接口
配置eth0网卡
我们启用ipv4,禁用ipv6
指定一个ip地址吧
配置网关和dns服务器(只配置一个吧)
接下来就会尝试试图启动eth0 , 启动完成之后,提醒我们已进入了 rescue(紧急救援)模式
此时小linux尝试 找 源linux,并且把linux根挂载到 /mnt/sysimage
continue(确认没有问题,就挂载 (读写挂载)) Read-only(只读方式挂载) Skip(不想让小linux系统搜索,自己搜索,就跳过,)
这里我们选择 continue
选择哪个是源linux的根
己经挂载到了 /mnt/sysimage 如果你想切换过去操作的话 ,就执行 chroot /mnt/sysroot
下面的图说明己经切换过去了
# grub
grub 命令提示符下
查找 grub 所在的盘
grub> find (hd0,0)/ (找内核所在的分区) (斜杠后面要输Tab键) 发现了 vmlinuz (内核) 和 initrd.gz 说明,它就是我们的根
看上面 find (hd2,0) 应该是正确的
grub > root (hd2,0) (这个功能是设定根) (根就是内核所在的分区)
安装grub (应该是指安装第一阶段吧)
grub > setup (hd2)
(只需要指定设备hd2,它会检查第二阶段 stage2 是否存在 )
grub > quit 退出grub
执行 sync 同步命令
reboot 重启系统
(此时,是不是可以把光盘拆掉?退出光盘?)
其实我们这里没有用到网络功能,虽然我们刚刚配置了半天
grub配置文件丢失(或损坏,或配置文件里面出现了语法错误等等):
(通过键入以下的几个命令,手动唤起或手动启动系统即可)
如果grub配置文件丢失了,系统启动的时候,会给我们一个grub提示符
grub> find (hd2,0) find 内存所在的分区
grub> root (hd2,0) 如果没问题了,设定根
grub> kernel /vmlinuz-version ro root=/dev/vol0/root rhgb quiet
grub> initrd /initrd-version (initrd的版本号要与vmlinuz版本号要对应匹配)
grub> boot (boot 引导)启动起来了
启动起来后,在grub的目录下,重建一个配置文件就可以了
grub.conf 内容
default=0 # 选定一个默认启动的操作系统
timeout=10 # 超时时间间隔
#splash img图像文件有没有无所谓,它只是装饰
#隐不隐藏菜单也无所谓,它也是装饰
title RHEL 5.8 # RHEL 5.8 是随便写的
root (hd0,0)
kernel /vmlinuz-2.6.18-371.el5 ro root=/dev/vl10/root quiet # rhgb 有没有无所谓 quiet 有没有也无所谓,rhgb,quiet 都称为内核参数
initrd /initrd-2.6.18-371.el5.img
/boot/grub下面的某个文件丢了,假如stage2丢了,怎么办?(应该也是进入单用户模式)
stage2是可以从某个目录下复制而来的,
[root@localhost ~]# locate stage2
/boot/grub/stage2
/usr/share/grub/i386-redhat/stage2
/usr/share/grub/i386-redhat/stage2_eltorito
kernel panic:内核恐慌 ( panic 恐慌 ) 一旦看到kernel panic,等于是判了死刑
[root@localhost ~]# mv /boot/grub/grub.conf /root
[root@localhost ~]# sync
[root@localhost ~]# ll /boot/grub/
重启系统
[root@localhost ~]# shutdown -r now
重启后停在grub命令提示符下不动了
grub> find (hd0,0)/ 后面跟着Tab 看能不能找到内核所在的分区 (内核必须能够被 grub找到,否则grub无法启动系统的)
grub > root (hd0,0) (这个功能是设定根) (根就是内核所在的分区)
grub > kernel /vm Tab补全可以看到 kernel /vmlinuz-2.6.18-371.el5 (后面的什么 ro root 等等就不用指了 )
grub > initrd /ini Tab补全可以看到 kernel /initrd-2.6.18-371.el5.img (注意版本一定要与kernel指定的内核匹配) 然后敲回车
grub > boot 敲回车,进行启动,启动起来后,手动去建grub.conf的文件
启动后 进行登录
# cp /root/grub.conf /boot/grub
[root@localhost ~]# cd /etc/rc.d/rc3.d/
[root@localhost rc3.d]# ls
K01dnsmasq K80kdump S11auditd S26lvm2-monitor
K02avahi-dnsconfd K85mdmpd S12restorecond S28autofs
K02NetworkManager K87multipathd S12syslog S55sshd
K05conman K88wpa_supplicant S13cpuspeed S56cups
K05saslauthd K89dund S13irqbalance S56rawdevices
K10dc_server K89netplugd S13iscsi S56xinetd
K10psacct K89pand S13portmap S80sendmail
K12dc_client K89rdisc S14nfslock S85gpm
K15httpd K91capi S15mdmonitor S90crond
K15svnserve K99readahead_later S18rpcidmapd S90xfs
K20nfs S00microcode_ctl S19rpcgssd S95anacron
K24irda S03vmware-tools S22messagebus S95atd
K25squid S04readahead_early S23setroubleshoot S97rhnsd
K50netconsole S05kudzu S25bluetooth S97rhsmcertd
K50tux S07iscsid S25netfs S97yum-updatesd
K69rpcsvcgssd S08ip6tables S25pcscd S98avahi-daemon
K73ypbind S08iptables S26acpid S99firstboot
K74ipmi S08mcstrans S26apmd S99local
K74nscd S09isdn S26haldaemon S99smartd
K74ntpd S10network S26hidd
S99firstboot 第一次安装完启动的服务(只运行一次,以后从来不会再运行)
S99smartd 跟设备驱动探测相关的(自动识别硬件特性的相关服务)
S99local
[root@localhost rc3.d]#
[root@localhost rc3.d]# cd ../rc5.d/
[root@localhost rc5.d]# pwd
/etc/rc.d/rc5.d
[root@localhost rc5.d]# ls
K01dnsmasq K80kdump S12restorecond S28autofs
K02avahi-dnsconfd K85mdmpd S12syslog S55sshd
K02NetworkManager K87multipathd S13cpuspeed S56cups
K05conman K88wpa_supplicant S13irqbalance S56rawdevices
K05saslauthd K89dund S13iscsi S56xinetd
K10dc_server K89netplugd S13portmap S80sendmail
K10psacct K89pand S14nfslock S85gpm
K12dc_client K89rdisc S15mdmonitor S90crond
K15httpd K91capi S18rpcidmapd S90xfs
K15svnserve S00microcode_ctl S19rpcgssd S95anacron
K20nfs S03vmware-tools S22messagebus S95atd
K24irda S04readahead_early S23setroubleshoot S96readahead_later
K25squid S05kudzu S25bluetooth S97rhnsd
K50netconsole S07iscsid S25netfs S97rhsmcertd
K50tux S08ip6tables S25pcscd S97yum-updatesd
K69rpcsvcgssd S08iptables S26acpid S98avahi-daemon
K73ypbind S08mcstrans S26apmd S99firstboot
K74ipmi S09isdn S26haldaemon S99local
K74nscd S10network S26hidd S99smartd
K74ntpd S11auditd S26lvm2-monitor
rc5.d 下面也有 S99local 服务
[root@localhost rc5.d]#
[root@localhost rc5.d]# ll
[root@localhost rc5.d]# ls ..
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
rc rc1.d rc3.d rc5.d rc.local
[root@localhost rc5.d]#
[root@localhost rc5.d]# cd ..
[root@localhost rc.d]# pwd
/etc/rc.d
[root@localhost rc.d]# ll
总计 112
drwxr-xr-x 2 root root 4096 11-22 21:36 init.d
-rwxr-xr-x 1 root root 2255 2013-05-14 rc
drwxr-xr-x 2 root root 4096 11-22 21:36 rc0.d
drwxr-xr-x 2 root root 4096 11-22 21:36 rc1.d
drwxr-xr-x 2 root root 4096 11-22 21:36 rc2.d
drwxr-xr-x 2 root root 4096 11-22 21:36 rc3.d
drwxr-xr-x 2 root root 4096 11-22 21:36 rc4.d
drwxr-xr-x 2 root root 4096 11-22 21:36 rc5.d
drwxr-xr-x 2 root root 4096 11-22 21:36 rc6.d
-rwxr-xr-x 1 root root 220 2013-05-14 rc.local
-rwxr-xr-x 1 root root 27034 2013-08-16 rc.sysinit
[root@localhost rc.d]#
[root@localhost rc.d]# vim rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
任何写在这个里面的内容,开机都会自动执行一次的,每一次开机都会自动执行,
所以我们想让系统开机以后自动完成某些任务,而这些任务本身我们无法使用服务来实现,把它们写到这里面,是最好的解决方案,
后期的好多功能都要依赖于这个文件来完成的,因此一不小心,在这个里面写了错误的命令的话,有可能导致系统也无法正常启动的
比如一不小心,在里面写了reboot,会反复重启吧
[root@localhost rc.d]# ls /etc/rc.local
/etc/rc.local
[root@localhost rc.d]# ls -l /etc/rc.local
lrwxrwxrwx 1 root root 13 11-22 19:27 /etc/rc.local -> rc.d/rc.local
[root@localhost rc.d]#
许多人编辑的时候 都是 vim /etc/rc.local,编辑是同一个文件
[root@localhost rc.d]# vim /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
万一在 /etc/rc.local 文件中写了某个命令,导致系统无法启动怎么办?(进单用户模式,因为单用户不会启动rc.local服务)
假如一不小心 删了/bin/bash
[root@localhost ~]# rm /bin/bash
rm:是否删除 一般文件 “/bin/bash”? y
[root@localhost ~]# sync
[root@localhost ~]#
[root@localhost ~]# reboot
Broadcast message from root (pts/0) (Tue Jan 1 14:49:31 2019):
The system is going down for reboot NOW!
虚拟主机窗口
关机是要执行对应级别下面的脚本的 rc0.d 下面的所有的脚本,由于bash程序没了,所以所有的bash脚本就无法执行了,
由上图 /etc/rc.d/rc 脚本执行不了了
只能手动重启了
甚至连1级别都进不了了
因为在1级别下,在/bin 目录下,是需要运行shell的(sh是bash的链接),因为bash没了,所以sh也就执行不了了
所以只能进入紧急救援模式 安装下bash (从哪里获得bash的rpm安装包呢? 挂载光盘?)
先重启
设定光盘为第一启动盘 (是为了进入到紧急救援模式)
boot: linux rescue 敲回车
此时已连接好了光盘,并且进入了紧急救援模式
下面的目的就是装bash软件包
bash软件包就在我们的光盘上,
而紧急救援模式(这个小linux) 就在我们的光盘上,
所以不要挂载光盘了?还是要挂载的,切记是要挂载的
# ls /
# ls /mnt
# ls /mnt/source
# ls /mnt/runtime (里面的内容就是我们的小系统)
# ls /mnt/sysimage (就是我们的根所在的目录)
# ls /
# ls /dev (/dev 目录下没有cdrom,所以不能挂载光盘)
(cdrom 通常(通常指的是hd的设备?)都是指向 hdc的链接)
(如果是光盘是sata口的话,就另当别论了)(我们这里仍然以hdc为例)
(光盘不能挂载到/mnt目录下,因为/mnt/sysimage 是我们的真正的根,要用到)
(这里我是建一个/media 目录, 把光盘挂载到/media 目录下 )
# mkdir /media
# mount /dev/hdc /media (记住这里光盘 不是 /dev/cdrom,而是 /dev/hdc)
# cd /media
# ls
# cd Server/
# ls | grep bash
# rpm -ivh --replacepkgs bash-3.2-32.el5_9.1.i386.rpm (这里未执行)
(虽然我们刚刚删除了 /bin/bash,但是/bin/bash这个软件包还存在,所以我们
使用 --replacepkgs 替换软件包, ) (但这里不能执行,因为一执行的话,就会安装在当前的
紧急救援的小linux上,而且这个小linux 到底支不支持还不知道)
# rpm -ivh --replacepkgs --root /mnt/sysimage bash-3.2-32.el5_9.1.i386.rpm
(早期使用 --root /mnt/sysimage 把/mnt/sysimage 当作根来装bash)
重装好了
能 chroot 进行了,说明 sh指令能够正常执行了,说明bash肯定有的了
# chroot /mnt/sysimage (切换到源linux)
# ls /bin | grep bash
# exit 退出,切换到紧急救援小linux
我们也可以基于网络来安装 bash
(我们不能接上光盘,但是知道网络服务器上有 bash,此时只需切换到对应的服务器里面,把bash 下载到
本地就可以了,安装方式过程是与上面的光盘安装是一样的,马哥说不用演示了)
当然可以chroot 过来 进行安装bash
# chroot /mnt/sysimage (但是没有bash,chroot 是不能切换过来的(因为它默认使用bash切换过来的),
所以使用其它的shell作为sh程序)
如果损坏的不是bash,比如损坏的是mingetty 这个程序,它照样登录不了,不可能给你提示登录界面的,
因为单用户级别下是不会启动mingetty程序的,所以此时进入单用户级别就可以解决问题,但是进入单用户以后
(单用户不会启用网络的),需要手动启动网络服务,而后连到服务器上将mingetty程序下载到本地,然后重新安装,
跟刚才一样( --replacepkgs )
上面讲的就是可执行程序丢失了(或损坏了),如何修复
reboot 重启一下,改下硬盘启动优先
第一个窗口
[root@localhost ~]# export PATH=/data/bin
[root@localhost ~]#
[root@localhost ~]# ls
-bash: ls: command not found
[root@localhost ~]#
[root@localhost ~]# vim
-bash: vim: command not found
[root@localhost ~]#
重新登录一个新窗口就可以了
第二个新窗口
[root@localhost ~]# ls
第一个窗口
假设我们修改了 vim /etc/profile PATH=/data/bin
然后 source /etc/profile
[root@localhost ~]# vim
-bash: vim: command not found
[root@localhost ~]# export PATH=/b
[root@localhost ~]# export PATH=/bin:/sbin:/usr/bin:/usr/sbin (这四个的话,大多数命令都可以找到)
in:/sbin:/usr/bin:/usr/sbin
[root@localhost ~]# ls
anaconda-ks.cfg dropbear-2013.56.tar.bz2 mkdir
bincopy.sh fstab sysroot.gz
boot.iso install.log tiny.1.gz
busybox-1.20.2 install.log.syslog tiny.2.gz
busybox-1.20.2.tar.bz2 ks.cfg tiny.3.gz
cofig-2.6.28.5-i686.cfg ks.cfg-bak tiny.4.gz
Desktop linux-2.6.38.5.tar.gz tiny.5.gz
dropbear-2013.56 mbr.backup tiny.8.gz
[root@localhost ~]#
[root@localhost ~]# ls /usr/bin | grep vim
rvim
vim
vimdiff
vimtutor
[root@localhost ~]# /usr/bin/vim /etc/profile (直接使用vim吧)
[root@localhost ~]# vim /etc/profile (修复PATH环境变理就可以了)
export PATH=/bin:/sbin:/usr/bin:/usr/sbin 对管理员来讲 还有 /usr/local/bin /usr/local/sbin
还可能有其它的
许多时候,我们是配置文件的错,所以我们每隔一段时间需要备份一下 /etc 下面的所有文件
万一损坏了,我们可以恢复过来
版本控制软件,任何时候,修改配置文件,一旦改坏了,还可以恢复到改之前的版本上去
svn,git 这两个非常著名的版本控制工具,是开发人员常有的工具