aws --version 错误:bash:/usr/bin/aws:没有此文件或目录

aws --version 错误:bash:/usr/bin/aws:没有此文件或目录

我遇到了 AWS CLI 安装问题,但在网上找不到解决方案。

也就是说,我按照 AWS 安装文档的指导安装了 awscliv2。安装完成后,当我输入命令aws --version我收到以下错误:

bash:/usr/bin/aws:没有此文件或目录

然而,当我使用完整路径输入命令时/usr/local/bin/aws --version,它工作正常,返回版本信息。

命令哪个 aws返回完整路径,因此只需输入亚马逊应该可以工作但是却不行。

我通过符号链接破解了一个解决方案。

更详细地,请观察下面我的命令行会话,并发表评论,如果可以的话,请回答我在最后一行提出的问题:

[2021-03-28 19:04:55 root:~]# #dga- 我已下载并解压 AWS 安装,如下所示:
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html

[2021-03-28 17:34:53 root:~]# ls -l aws
总计 80
drwxr-xr-x 11 root root 4096 3月24日 21:39 dist
-rwxr-xr-x 1 root root 4047 3月24日 21:28 安装
-rw-r--r-- 1 root root 1465 3 月 24 日 21:28 README.md
-rw-r--r-- 1 root root 68271 3月 24 21:28 THIRD_PARTY_LICENSES

[2021-03-28 17:35:00 root:~]# # 我按照上面的 AWS 链接中的说明安装了 AWS CLI……

[2021-03-28 17:35:00 root:~]# ./aws/install -i /usr/local/aws-cli -b /usr/local/bin
您现在可以运行:/usr/local/bin/aws --version

[2021-03-28 19:09:10 root:~]# 哪个 aws
在 /usr/local/bin/aws

[2021-03-28 19:09:23 root:~]# /usr/local/bin/aws --version
aws-cli/2.1.32 Python/3.8.8 Linux/5.4.0-1041-aws exe/x86_64.ubuntu.18 提示/关闭

[2021-03-28 19:09:39 root:~]# aws --version
bash:/usr/bin/aws:没有此文件或目录

[2021-03-28 19:10:21 root:~]# #dga- 什么?这怎么可能?一个谜。

[2021-03-28 19:11:01 root:~]# ls -l /usr/local/bin/aws
lrwxrwxrwx 1 root root 37 3月 28 17:35 /usr/local/bin/aws -> /usr/local/aws-cli/v2/current/bin/aws

[2021-03-28 19:13:45 root:~]# ls -l /usr/local/aws-cli/v2/current/bin/aws
lrwxrwxrwx 1 root root 11 3 月 28 日 17:35 /usr/local/aws-cli/v2/current/bin/aws -> ../dist/aws

[2021-03-28 19:14:03 root:~]# ls -l /usr/local/aws-cli/v2/current/dist/aws
-rwxr-xr-x 1 root root 4414504 3月 28 17:35 /usr/local/aws-cli/v2/current/dist/aws

[2021-03-28 19:14:31 root:~]# # 请注意,/usr/local/aws-cli/v2/current 本身是一个符号链接:

[2021-03-28 19:15:07 root:~]# ls -l /usr/local/aws-cli/v2/current
lrwxrwxrwx 1 根 根 28 月 28 日 17:35 /usr/local/aws-cli/v2/current -> /usr/local/aws-cli/v2/2.1.32

[2021-03-28 19:15:31 root:~]# # 假设 AWS 的未来更新会将上述“当前”符号链接修改为 /usr/local/aws-cli/v2/XYZ 形式的未来路径,其中 XYZ > 2.1.32

[2021-03-28 19:21:03 root:~]# ls -l /usr/local/aws-cli/v2/2.1.32
共 8
drwxr-xr-x 2 root root 4096 3月28日 17:35 bin
drwxr-xr-x 11 root root 4096 3月28日 17:35 dist

[2021-03-28 19:27:31 root:~]# ls -l /usr/local/aws-cli/v2/2.1.32/dist/aws
-rwxr-xr-x 1 root root 4414504 3月28日 17:35 /usr/local/aws-cli/v2/2.1.32/dist/aws

[2021-03-28 19:27:58 root:~]# #dga- 因此上述路径是“当前”符号链接引用的可执行文件。

[2021-03-28 19:28:53 root:~]# #dga- 这是我的全部 HACK,用于解决上述完全胡说八道的谜团......

[2021-03-28 19:29:40 root:~]# #dga- 再次强调,以下是我们不希望看到的事情发生:

[2021-03-28 19:30:09 root:~]# aws --version
bash:/usr/bin/aws:没有此文件或目录

[2021-03-28 19:30:24 root:~]# pushd /usr/bin
/usr/bin ~

[2021-03-28 19:31:27 root:/usr/bin]# 密码
/usr/bin

[2021-03-28 19:31:35 root:/usr/bin]# ln -s /usr/local/aws-cli/v2/current/bin/aws

[2021-03-28 19:31:54 root:/usr/bin]# ls -l aws
lrwxrwxrwx 1 root root 37 3月 28 19:31 aws -> /usr/local/aws-cli/v2/current/bin/aws

[2021-03-28 20:20:13 root:/usr/bin]# #dga- 这是我的黑客技术,它似乎有效:

[2021-03-28 20:20:13 root:/usr/bin]# popd
〜/ usr / bin

[2021-03-28 20:20:19 root:~]# aws --version
aws-cli/2.1.32 Python/3.8.8 Linux/5.4.0-1041-aws exe/x86_64.ubuntu.18 提示/关闭

[2021-03-28 20:21:28 root:~]# #dga- 一些额外的背景信息:

[2021-03-28 20:47:36 root:~]# cat /etc/issue
Ubuntu 18.04.5 LTS

[2021-03-28 20:47:39 root:~]# uname -a
Linux bamboo.oceanpark.com 5.4.0-1041-aws #43~18.04.1-Ubuntu SMP 星期六 3 月 20 日 15:47:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

[2021-03-28 20:47:44 root:~]# #dga- 有人能向我解释一下为什么需要进行黑客攻击吗?

答案1

事实证明,问题在于 bash 缓存了以前安装的旧版本 1 aws cli 中的路径 /usr/bin/aws。在执行问题中显示的命令之前,我已删除旧版本的 aws,从而删除了 /usr/bin/aws。我安装的新版本 2 aws cli 将 aws 安装到了不同的路径 /usr/local/bin/aws。该which aws命令返回了该新路径,但 bash 仍将 /usr/bin/aws 缓存为 aws 可执行文件的路径。

因此,我了解到which <command>可以返回一条路径,但是 bash 可以解析<command>为以前不再存在的路径,因为删除旧路径不会更新 bash 缓存!(我甚至不知道 bash 有缓存!)

bash 缓存可以(并且在这种情况下应该)通过 进行更新,hash aws然后通过 进行验证hash -t aws

此外,AWS CLI 安装文档应该建议hash aws在完成 awscli2 安装后执行操作。

看:

https://unix.stackexchange.com/questions/5609/how-do-i-clear-bashs-cache-of-paths-to-executables

答案2

我遇到了同样的问题。我关闭了终端会话并重新打开它,aws 命令正常工作。

相关内容