为什么在“-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语句中的命令。
不管选项按什么顺序出现在命令行上,这种方法都适用。

目录
相关文章
|
28天前
|
Kubernetes Shell Docker
在K8S中,如果容器没有bash命令,如何进⼊容器排查问题?
在K8S中,如果容器没有bash命令,如何进⼊容器排查问题?
|
1月前
|
缓存 Shell 开发工具
Git Bash⭐一、安装软件,与Git Bash基础命令
Git Bash⭐一、安装软件,与Git Bash基础命令
|
29天前
|
Shell Linux
在Linux中,哪⼀个bash内置命令能够进行数学运算?
在Linux中,哪⼀个bash内置命令能够进行数学运算?
|
29天前
|
缓存 Shell Linux
在Linux中,bash shell 中的 hash 命令有什么作用?
在Linux中,bash shell 中的 hash 命令有什么作用?
|
1月前
|
存储 Shell
Bash 脚本中的 `hash` 命令
【8月更文挑战第19天】
9 0
|
3月前
|
Shell Linux 开发工具
Anaconda安装后报错 -bash: conda: command not found 如何处理
【6月更文挑战第26天】Anaconda安装后报错 -bash: conda: command not found 如何处理
712 4
|
3月前
|
Shell Linux 开发工具
Anaconda安装后报错 -bash: conda: command not found 如何处理
【6月更文挑战第17天】Anaconda安装后报错 -bash: conda: command not found 如何处理
224 4
|
3月前
|
Unix Shell Linux
技术经验分享:Bash脚本命令使用详解
技术经验分享:Bash脚本命令使用详解
28 0
|
3月前
|
Shell Linux 开发工具
Anaconda安装后报错 -bash: conda: command not found 如何处理
【6月更文挑战第20天】Anaconda安装后报错 -bash: conda: command not found 如何处理
228 0
|
4月前
|
监控 安全 Shell
防止员工泄密的措施:在Linux环境下使用Bash脚本实现日志监控
在Linux环境下,为防止员工泄密,本文提出使用Bash脚本进行日志监控。脚本会定期检查系统日志文件,搜索敏感关键词(如"password"、"confidential"、"secret"),并将匹配项记录到临时日志文件。当检测到可疑活动时,脚本通过curl自动将数据POST到公司内部网站进行分析处理,增强信息安全防护。
164 0