为什么在“-bash: XX: command not found”下常用命令如“cat”,“ls”变得不可用?

简介: 先看这个信息 “-bash: XX: command not found” 直译过来就是bash找不到相应的命令前文里我们提到这个问题是由于"PATH"设置出错导致我们输入这些常用命令如"ls","cat","vim"等我们之前解决这个问题的方法是 '键入"export PATH=/usr/bin.

先看这个信息

“-bash: XX: command not found”

直译过来就是bash找不到相应的命令
前文里我们提到这个问题是由于"PATH"设置出错
导致我们输入这些常用命令如"ls","cat","vim"等
我们之前解决这个问题的方法是

'键入"export PATH=/usr/bin:/usr/sbin:/bin:/sbin"'

那么关键信息就是这个名为"PATH"的变量
首先我们在初始化的系统(阿里云自带的centos)下键入
"echo $PATH"

image

出现了以下结果

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

我们根据给出的路径进行查找

/usr/local/sbin

image

什么也没

/usr/local/bin

image

还是什么都没

/usr/bin以及最后的 /bin

image

刷的一下,满满的绿色,有意思的是这两个文件夹显示完全内容一样,有兴趣的可以用“pwd”和"mkdir"试试

我们来 “find” 一下

image

果不其然,我们常用的命令都在这里
不过我们之前用来解决问题的"export"看起来并不在这里,这一点我们之后再谈

现在我们找到了放置常用命令 "ls","vim"等的放置地
下一步我们来找一下为什么"PATH"设置错误后所有的"/bin"路径下的命令都变成不可用的了

首先我们要知道这几个文件

/etc/profile
$HOME/.bash_profile
$HOME/.bashrc

其中 /etc/profile文件是系统上默认的bash shell的主启动文件,系统上的每个用户登录时都会执行这个启动文件
让我们打开它看看

image

我们需要看的是它的头和尾

头部

image

头部"pathmunge"函数的作用:判断当前系统的PATH中是否有该命令的目录,如果没有,则判断是要将该目录放于PATH之前还是之后。
什么情况下没有呢?我们可以看看这里的case语句:
根据冒号分割的参数“$1”是的话则通过否则判断“$2”的参数,是的话通过,不是的话将“$1”代表的参数放至末尾。

尾部

image

尾部使用for语句来迭代/etc/profile.d目录下的所有文件。这为Linux系统提供了一个放置特定应用程序启动文件的地方。
当用户登录时,shell会执行这些文件。我们可以去看看。

image

现在让我们回到一开始的问题,

为什么在“-bash: XX: command not found”下常用命令如“cat”,“ls”变得不可用?

答:因为用来查询命令的“PATH”环境变量设置出错(多半是格式出错导致的路径覆盖)
导致Linux系统执行/etc/profile文件中的"pathmunge"函数找不到对应的路径。
于是放置于原先路径下的常用命令就变得不可用了。

PS
/usr 软件放置处 与我们常用的软件有关
/root(/,根目录) 开机系统相关
/bin 放置一些系统必备脚本

case语句会检查每个参数是不是有效选项。是的话就执行对应case语句中的命令。
不管选项按什么顺序出现在命令行上,这种方法都适用。

目录
相关文章
|
6月前
|
关系型数据库 MySQL Shell
【Linux命令】-bash: mysql: command not found
【Linux命令】-bash: mysql: command not found
56 0
|
2月前
|
Shell Linux
sudo bash -c 'cat > /etc/profile.d/env.sh'
sudo bash -c 'cat > /etc/profile.d/env.sh' << EOF 是一个Linux命令行命令,用于创建一个名为 /etc/profile.d/env.sh 的文件,并将以下内容写入该文件:
42 4
|
2月前
|
Linux Shell
mac/linux提示bash: telnet: command not found
mac/linux提示bash: telnet: command not found
|
4月前
|
Shell 应用服务中间件 开发工具
bash: vi: command not found
bash: vi: command not found
|
9月前
|
Shell
bash: accelerate: command not found
bash: accelerate: command not found
1603 3
|
10月前
|
Ubuntu 关系型数据库 MySQL
提示-bash: command not found的解决方法集锦
提示-bash: command not found的解决方法集锦
|
10月前
|
JavaScript Shell Linux
-bash: grunt: command not found去环境变量添加nodejs的路径
-bash: grunt: command not found去环境变量添加nodejs的路径
85 0
|
11月前
|
Shell Linux
Linux pip命令报错 -bash: pip: command not found
Linux pip命令报错 -bash: pip: command not found
255 0
|
4月前
|
Linux Shell Windows
4:Bash shell命令-步入Linux的现代方法
4:Bash shell命令-步入Linux的现代方法
53 0
|
8月前
|
Ubuntu 安全 Linux
不用安装虚拟机,直接在Windows上面运行Linux Bash Shell,嗯!真香!!!
不用安装虚拟机,直接在Windows上面运行Linux Bash Shell,嗯!真香!!!
153 0