虚拟机的ubunt系统在登录界面循环往复,登录不进去问题

一、前言

      大早上的,兴冲冲的打开虚拟机,结果死活登不上。此时确定密码是没问题的。网上百度一下才知道原来是环境变量的原因。突然想起来昨天刚安装golang环境,修改了环境变量的/etc/environment文件。那么问题就很明显了,改回来。

关于搭建golang的环境:
https://blog.csdn.net/ljfphp/article/details/81044500

二、解决过程

1、从图形界面转到命令行

此处根据操作系统各不相同。建议尝试ctrl+alt+ F1~F6,博主试了好久才发现自己是:

ctrl+alt+F4

2、新的问题

      改成命令行之后,进行登录。此时我们发现能够登录成功。但是在我们进行操作,比如ls或者vim或者sudo的时候,报错:

//连sudo 命令都用不了了
The command could not be located because '/usr/bin/sudo' is not included in the PATH environment variable.

      这就是问题产生的原因:环境变量PATH错误。联想到修改/etc/environment文件时确实对PATH进行过操作,所以解决问题的最简单的方法就是让/etc/environment恢复到修改之前的状态。

3、path的作用

Linux有PATH,在windows下配置过JDK的也肯定注意到windows也有path,这个PATH到底是做什么用的呢? 下面解释一下:

      当我们在命令行(Linux下的terminal或者tty1~6,windows下的cmd中)输入一个命令时,实际上执行的是一个程序。比如使用 ls 命令,实际上是运行 ls 这个程序,它的功能是列出当前目录下的内容。但是,默认情况下搜寻要运行的程序时,仅是在当前目录下寻找的。而我们平时使用的命令不论在哪个目录下都能执行,难道是每个目录下都有这些命令的拷贝?当然不是,这样对空间的浪费太严重了。

      现在操作系统采取的普遍做法是,通过PATH变量指定命令存放的位置。一旦使用某个命令时,按照PATH中制定目录的顺序去搜寻指令对应的程序。所以正常情况下,使用echo $PATH查看环境变量PATH的内容如下:

分号 “:” 表示分隔符,分隔各个目录。

由于PATH错误,我在使用指令时系统不能正常到存放指令的目录中去寻找,因此会提示:Command not found.

4、解决方案

      很人性化的是,系统会提示我们要使用的指令存放的正确位置,比如使用clear时提示的:Command ‘clear’ is available in ‘/usr/bin/clear’。clear命令是存放在’/usr/bin’目录下的。

要编辑/etc/environment,正常情况下使用的命令是:sudo vim /etc/environment

      现在,系统找不到sudo 命令,也找不到vim命令,所以只能人工指定它们的绝对路径了。sudo 和 vim 都是存放在’/usr/bin’目录下的,所以sudo和vim的绝对路径分别是:/usr/bin/sudo /usr/bin/vim

因此要编辑/etc/environment要使用的命令应该这样写: /usr/bin/sudo /usr/bin/vim /etc/environment

      只需要把自己之前添加的内容删除掉就可以了(最好是能修改成正确的,搞不定也要至少恢复原状吧),然后保存重启系统。

正常状态下重启使用:sudo reboot

当然现在也不行,要使用/usr/bin/sudo /sbin/reboot

三、修改过程

1、原来的环境变量

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/var/go

此处可以看出,添加PATH都是直接用:+路径的方式,我这里的第二行算是重新定义了个PATH,估计是这里的问题,所以改为:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/go/bin"
export GOPATH=/var/go

      改成之后,重启系统试一下,发现可以正常登陆了。(PS:我这里是因为这个原因,大家根据各自的实际情况操作。如果实在不行,就先恢复环境变量的原状,然后再修改)

四 、关于linux的环境变量目录

网上看到有人修改/etc/profile,有人修改/etc/environment,那么究竟有什么区别呢?

答:

•/etc/profile —— 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置;

•/etc/environment —— 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量;

•/etc/bashrc —— 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取;

•~/.profile —— 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的.bashrc文件;

•~/.bashrc —— 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取;

此处可以看出:

    /etc/profile 是所有用户的环境变量(用户环境)
   /etc/enviroment是系统的环境变量(系统环境)

      也就是说咱们修改 /etc/environment的话,相当于修改的系统环境,不管是哪个用户登进来,都是使用相同的环境变量。而修改/etc/profile的话,针对的是用户的环境变量

      OK,总之算是解决了登录问题。碰到的问题千千万,记录一下,希望能帮到需要她的人,也给自己做个笔记。

end

猜你喜欢

转载自blog.csdn.net/LJFPHP/article/details/81061079