bash命令缓存导致命令执行失败的问题

1、问题背景

        为了修复老版本 vsftpd 的安全漏洞,需要把生产环境上 vsftpd 版本升级到 vsftpd-3.0.5,因为直接使用 rpm 包的方式进行升级还涉及到下层依赖包的升级(生产环境上的依赖包版本不能随意变更,可能会影响其他上层应用),所以打算采用源码编译的方式进行升级,在本地一个相同环境上基于vsftpd-3.0.5 源码编译出对应可执行二进制文件,再用该配置文件替换生产环境上老版本的可执行二进制文件。

2、问题现象

        本地基于 vsftpd-3.0.5 源码编译出对应可执行二进制文件后,找了个环境进行测试,测试环境自带的老版本 vsftpd-2.2.2 的可执行二进制文件在 /usr/sbin/ 路径下,现在将它删掉,然后直接将本地编译好的新版本 vsftpd-3.0.5 的可执行二进制文件拷贝到 /usr/local/sbin/ (放的目录跟原来不一样,是因为实际生产环境上对应的文件在这个目录下),但是拷贝完之后,执行 vsftpd 命令查看版本发现命令执行不了,报错找不到对应的二进制文件,但是which是可以查看到该命令正确的二进制文件路径的,PATH环境变量里边也有该路径

3、问题原因

        仔细看命令报错可以看到找vsftpd二进制文件时还是去 /usr/sbin/下去找到的,跟which查出来的不一致,很容易联想到是缓存问题导致执行命令时还去老的路径去查,但之前对这块也没有深入了解,所以学习一下。

        bash会把历史执行过的命令对应二进制文件路径缓存下来,这样下次执行的时候就不需要再从PATH中指定的各个路径中查找了,大大加快了命令执行的效率,这个缓存可以通过以下几条命令来管理:

        查看bash缓存中记录的命令及其二进制路径:hash -l

        删除bash缓存中指定命令的记录:hash -d <command>

        删除bash缓存中所有命令的记录:hash -r

        正常情况下bash命令缓存当然是好的,但像这种可执行文件路径发生变化的场景,就会出现缓存未更新导致命令执行失败的问题。

        通过 hash -l 命令可以验证,上边新版本的 vsftpd 二进制文件找不到就是因为之前执行vsftpd命令时已经缓存了其二进制文件路径 /usr/sbin/vsftpd ,因此升级后再次执行该命令时默认直接从缓存中记录的老路径查找二进制文件,当然找不到了

4、解决方案

        针对上述这种问题,最快的解决方案就是直接使用 hash -d 手动删除对应命令的历史缓存,这时再执行对应命令,就可以找到新版本的二进制文件了, 再使用 hash -l 命令可以验证缓存中的命令路径已经更新,如上边 vsftpd 命令缓存删除后就可以正常执行了:

        另一种方案就是退出当前会话,然后重新登录,内存中的命令缓存也会被自动刷新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Point-LIO】基于Ubuntu20.04的ROS1平台的Point-LIO部署Mid-360激光雷达

0、前言 Mid360参数 1、代码拉取 2、代码编译运行 文件结构 编译流程&#xff1a; 1、先编译livox_ros_driver2 2、编译整个工程文件 3、运行launch文件&#xff08;livox_ros_driver2&#xff09; 成功启动&#xff1a; 3、实物运行 看得出来&#xff0c;在rviz…

mac终端自定义命令打开vscode

1.打开终端配置文件 open -e ~/.bash_profile终端安装了zsh&#xff0c;那么配置文件是.zshrc&#xff08;打开zsh配置&#xff0c;这里举&#x1f330;使用zsh&#xff09; sudo open -e ~/.zshrc 2.在zshrc配置文件中添加新的脚本&#xff08;这里的code就是快捷命令可以进…

SAP导出表结构并保存到Excel 源码程序

SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果

python学习——格式化字符串

在Python中&#xff0c;格式化字符串是一种将变量插入到字符串中的方法&#xff0c;使得字符串的构建更为灵活和方便。以下是一些常见的格式化字符串的方法&#xff1a; 文章目录 1. 使用百分号 % 格式化2. 使用 str.format() 方法3. 使用 f-string (格式化字符串字面量)格式说…

Flink日志配置

所有Flink进程都会创建一个日志文本文件,其中包含进程中发生的各种事件的消息。这些日志可以深入了解Flink的内部工作原理,还可以用来检测问题(以警告/错误信息的形式),并帮助调试。 可以通过web界面的JobManager/TaskManager页面访问日志文件。使用的资源提供者(例如YA…

LLM学习笔记(15)LangChain、LlamaIndex、LlamaIndex

Transformer 和 PyTorch 是什么关系&#xff1f; Transformer和PyTorch可以很好地配合使用&#xff0c;但它们并不是同一层面的工具。具体来说&#xff1a; Transformer是一个神经网络的架构&#xff0c;最初用于自然语言处理&#xff0c;但也可以扩展到其他任务&#xff08;…

记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009

项目是个老项目&#xff0c;依赖包也比较大&#xff0c;咱就按正常流程走一遍来详细解决这个问题&#xff0c;先看一下node版本&#xff0c;我用的是nvm管理的&#xff0c;详细可以看我的其他文章 友情提醒&#xff1a;如果项目比较老&#xff0c;包又大&#xff0c;又有一些需…

【Linux】gdb / cgdb 调试 + 进度条

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、Linux调试器-gdb &#x1f31f;开始使用 &#x1f320;小贴士&#xff1a; &#x1f31f;gdb指令 &#x1f320;小贴士&#xff1a; ✨watch 监视 ✨打条件断点 二、小程序----进…

【人工智能】大数据平台技术及应用

文章目录 前言一、大数据平台基本概念及发展趋势1、数据量爆发式增长&#xff0c;发数据蓬勃发展2、大数据到底是什么&#xff1f;3、大数据处理与传统数据处理的差异4、为什么要建立大数据平台&#xff1f;5、大数据平台开源架构-Hadoop6、华为云大数据平台架构 二、大数据技术…

ABAP - 系统集成之SAP的数据同步到OA(泛微E9)服务器数据库

需求背景 项目经理说每次OA下单都需要调用一次SAP的接口获取数据&#xff0c;导致效率太慢了&#xff0c;能否把SAP的数据保存到OA的数据库表里&#xff0c;这样OA可以直接从数据库表里获取数据效率快很多。思来想去&#xff0c;提供了两个方案。 在集群SAP节点下增加一个SQL S…

PHP语法学习(第三天)

老规矩&#xff0c;先回顾一下昨天学习的内容 PHP语法学习(第二天) 主要学习了PHP变量、变量的作用域、以及参数作用域。 今天由Tom来打开新的篇章 文章目录 echo 和 print 区别PHP echo 语句实例 PHP print 语句实例 PHP 数组创建数组利用array() 函数 数组的类型索引数组关联…

映射vim键位,基本功能键位表(未更完)

键位映射&#xff1a;建议使用jj代替esc,毕竟esc离手那么远 linux下修改方法是&#xff1a;vim /etc/vim/vimrc 在该文件尾添加inoremap jj <Esc>该方法可以同样可以用到其他键位映射上 i&#xff1a;表示这个映射是在插入模式&#xff08;insert mode&#xff09;下有效…

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。

需求&#xff1a; 上传文件时&#xff0c;展示进度条实时更新&#xff1a; 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…

MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序

MSSQL2022导入Excel的一个错误&#xff1a;未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序 一、导入情况二、问题发现三、问题解决 最近在安装新版SQLServer SSMS 2022后&#xff0c;每次导入Excel都会出现错误提示&#xff1a;未在本地计算机上注册“Microsoft.AC…

优傲协作机器人 Remote TCP Toolpath URCap(操作记录)

目录 一、新机设置项 1、设置管理员密码 2、设置安全密码 3、设置负载 二、激活 Remote TCP & Toolpath URCap 1、插入U盘 2、打开激活面板 3、导入许可证 4、查看是否激活成功 5、启用功能 三、使用流程&#xff08;官方&#xff09; 步骤一 步骤二 步骤三 …

【日常记录-Java】查看Maven本地仓库的位置

1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项&#xff0c;如jar包、pom文件等。默认情况下&#xff0c;其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…

kafka 配置消息编码格式、解决消费者中文乱码

序列化 kafka 发送消息需要把key 和value 进行序列化处理 一般配置字符串方式&#xff0c;如果消息量大需要优化成其他方式。 代码配置 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("val…

Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链

文章目录 概述1. 环境准备2. 创建自定义上下文3. 创建命令验证用户输入保存用户数据发送欢迎邮件 4. 构建并执行处理链5. 使用处理链6. 运行结果7. 总结 概述 本文档旨在展示如何在 Spring Boot 应用中使用 Apache Commons Chain 来实现一个用户注册的处理链。我们将通过 Chai…

电子商务人工智能指南 2/6 - 需求预测和库存管理

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

OpenAI 推出了 Canvas 和 SearchGPT

今天的故事从 ChatGPT 推出的 Canvas 和 SearchGPT 开始。 ©作者|Ninja Geek 来源|神州问学 ChatGPT 在最近推出了令人兴奋的 Canvas 功能&#xff0c;Canvas 不仅带来了 ChatGPT 界面上的变化&#xff0c;还完全改变了人们撰写文档和书写代码的体验&#xff01; Canvas…