系统崩溃的小故事
某一天上班的早上,我按照往常一样开机然后输入密码登录(在这里说一下我用的是国产的 Kylin OS)。可是奇怪的是每次我输入完密码之后系统总是会卡的一下再回到登录界面。就这样我反反复复折腾了十几次还是停留在登录界面。WC,今天上午是不是真的没法干活了(又有借口不干活咯!)。
但是在职业操守的驱动下,后来我打电话给网管问是什么情况。
网管说:“啊这,你这一看就知道是你动了环境变量啊!环境变量改错了输入密码就没用。”
我:“啊这,我记得。。。。。。”(想说没动啊,我配置环境变量老熟了,从来没错过啊,但是昨天好像确实改了一下 PATH)
进入单用户模式
网关后来让我用单用户模式检查一下环境变量是否有误。
首先开机疯狂地按 E 键,进入麒麟系统的 GRUB 启动菜单,修改其中的启动参数。话说这个狂按 E 的操作有点像在卡 BUG 啊,试了半天才触发。
然后找到 linux 所在的那一行,在结尾加上 init=/bin/bash 参数:
最后按住 ctrl + x 保存,系统会进入到 root 用户下命令行模式。
检查环境变量
在进入单用户模式之后,我熟练地输入了 sudo vim /etc/profile 的命令,你猜我发现了什么?
昨天在配置 GOPATH 时,我忘记加上 $PATH 参数啦,啊啊啊。现在的 GOPATH 是这样赋值的:
// ...
export GOPATH = /home/user/GOPATH
export PATH = $GOPATH/bin
我恍然大悟,原来是 $PATH 参数的问题。
先来说说什么是$PATH
别把 $PATH 当成一个普通配置项,它更像是 Linux 的“导航系统”——没有它,系统不是坏了,而是“找不到路”。
$PATH 决定了你输入一个命令时,系统去哪些目录里找这个命令。
比如你在终端输入:
ls
系统其实不会“直接执行 ls”,而是做了一件事:按顺序去 $PATH 里的目录找一个叫 ls 的可执行文件。比如 $PATH 可能是:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
那系统会这样找:
/usr/local/sbin/ls/usr/local/bin/ls/usr/sbin/ls/usr/bin/ls✅ 找到了就执行
如果没有 $PATH 会发生什么?我这边直接赋值:
export PATH = $GOPATH/bin
意思说 $PATH 直接被设置为 $GOPATH/bin,之前定义其他的目录都找不到了,所以你输入其他的什么命令得到的结果都是:command not found。
那很有可能就是我把 $PATH 给直接覆盖导致系统缺失了什么重要的命令索引目录,然后我就一直停留在登录界面。
修改环境变量
最后修改了一下环境变量,添加上 $PATH,: 表示拼接符号,这里就是把 $PATH 拼接在最后:
epxort PATH = /home/user/$GOPATH:$PATH
这样我前面的目录的优先级会更高。BUG 修复熟练度 +1😅。
最后我正常进入系统,又可以进行一天快乐的搬砖了。🧱