大数跨境
0
0

Linux非正常报错(一)command not found

Linux非正常报错(一)command not found Dr.X的基因空间
2018-11-21
1
导读:有本事让Linux非正常报错就要有本事自己修复它!

        新手初学Linux总会云里雾里,甚至在还没有搞清楚这个系统如何操作的时候就因失误让系统非正常报错。今晚我恰好因为自己的失误让系统非正常报错,幸好我只是服务器的普通用户,没有波及到我的师兄师姐们。

        事件的起因在于今晚我源码安装一个软件时,在添加环境变量的过程中粗心地将符号$忘记打了。

        在我没有注意到的时候已经敲完了source ~/.bashrc了,然后就报错了。

        报错都是bash:命令无法找到,上面的命令如ls、vim、less分别都是查看目录下文件,用vim编辑器查看bashrc和查看文件内容。这些都是常用Linux命令,为什么会突然报错?

        要理解报错的原因,我们首先从Shell中的命令行替换知识说起,在Linux系统中使用命令解释器Shell的时候,Shell会在执行命令之前对命令进行一些替换,为什么要进行替换?我们先在自己的Shell中任意敲入一条正确的命令,比如我先敲入cd ~/PT02#进入我的Linux中的一个目录,我们在执行完这条命令之后敲入!!这个命令,会显示什么呢?

        敲完!!后发现输出的是我们上一条命令记录。也就是说在Shell中敲入!!时,Shell会执行输出上一条命令的指令。我们可以理解为Shell自动将我们输入的!!替换为history 1这条命令。当然如果你要问我什么会这样,我目前的水平只能回答,Linux在使用Shell的时候就被规定为这样了。当然,这里我们一定要理解的是,Shell在执行命令的时候会自动发生一些替换

        接下来,我们用这个知识去理解为什么在添加环境变量的时候要输入PATH=$PATH:/路径呢?无论是在用export还是echo的时候,都要这样输入。首先,来观察这条语句,为什么第一个PATH前面没有$,而第二个PATH前面就有$呢?这是因为$在这里指代的是变量替换的意思,比如,在小时候学方程的时候,我们做某一题时用字母去表示一个数,如a=1,那么在这道题中,我们任何时候用a,其实都是知道这个a是等于1的。我们在Shell中定义了一个名为PATH的变量,而这个变量又有自己具体的内容,就是具体的路径,我们将路径赋值到了PATH这个变量里。那么计算机如何识别我们第二次想用PATH的时候只是单纯想写这个词还是想用这个变量呢?所以就设置了使用$符号来引导变量,让计算机知道$符号后面接的内容是我们定义过的变量,它就回溯去找之前这个变量被赋值了什么内容。

         所以我们在写环境变量的时候PATH=$PATH:/路径可以解释为先定义了一个叫PATH的变量,这个变量储存了一条路径的内容,我们将这个变量写入~/.bashrc里储存着。那么以后在用某个软件时,Shell就会自动去寻找~/.bashrc里面储存的变量内容,一条一条去寻找,直到找到为止。所以我们使用echo $PATH打印出这个变量一共储存了什么内容,比如我的就是这样的

        这就是我所有源码安装的软件的环境变量。当我使用某个软件时,Shell就会自动去PATH变量里一条一条找我的软件路径,然后找到对应路径后在去这个路径里打开它。如果我们在添加环境变量时没有输入$那么Shell就不知道这是一个变量,如果我们还将这个错误的内容保存进~/.bashrc里,那么Shell就会一遍一遍去遍历我们输入的命令,因为储存了一个错误的命令在里面,就会发生抱错,从而产生command not found,即Shell因为我们错误的输入内容不知道我们接下来输入的几乎所有命令是什么了。理解了这个原理,我就给出解决方法,首先在终端输入

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

这样可以暂时性地让Shell不去遍历,保证我们其他命令可以暂时使用。一但我们关闭终端再进去的时候依然会报错。接下来我们要赶紧修改我们在bashrc里输入的错误环境变量,用vim打开bashrc

vim ~/bashrc

找到刚刚输错的那个第二个PATH前面没有$的行,按一下I键,进行插入内容,加入$后按Esc键,再按一个大写锁定键,最后按两下Z退出,这下就修复了~/.bashrc里储存的错误内容,一切恢复正常。

        这下算是修复了因为自己的粗心而导致的非正常报错,也算是给自己一个教训!

【声明】内容源于网络
0
0
Dr.X的基因空间
【中国科学院博士】10年生命科学数据挖掘研究经验,关注生物医药领域体外诊断(IVD)方向,如肿瘤早筛、传染病未知病原快速检测中的技术创新及其与人工智能(AI)的赋能应用
内容 176
粉丝 0
Dr.X的基因空间 【中国科学院博士】10年生命科学数据挖掘研究经验,关注生物医药领域体外诊断(IVD)方向,如肿瘤早筛、传染病未知病原快速检测中的技术创新及其与人工智能(AI)的赋能应用
总阅读0
粉丝0
内容176