linux - Unix 缓存二进制文件吗?

标签 linux shell unix

这是我理解的问题,我相信 *nix 系统很少需要重启。也就是说,如果您安装了新的“应用程序”甚至内核 9/10,则不需要重新启动。

我最近安装了一个随机组件(liquidsoap 依赖项)我需要从源代码:camlp4-4.03-1 并注意到以下内容:

pi@raspberrypi:~ $ /usr/local/bin/camlp4 -v
Camlp4 version 4.03.0
pi@raspberrypi:~ $ camlp4 -v
Camlp4 version 4.01.0
pi@raspberrypi:~ $ which camlp4
/usr/local/bin/camlp4

我对版本不匹配感到难过?对于什么似乎是同一个文件? 当前目录中没有“camlp4”:)

HW: Raspberry Pi 3
OS: Raspbian Jessie (up to date)


请求添加的信息:

pi@raspberrypi:~ $ find / -name camlp4
/usr/local/lib/ocaml/site-lib/camlp4
/usr/local/lib/ocaml/camlp4
/usr/local/bin/camlp4
/usr/lib/ocaml/camlp4
/usr/share/doc/camlp4
/usr/bin/camlp4
/home/pi/apps/camlp4
/home/pi/apps/camlp4/camlp4-4.03-1/_build/camlp4
/home/pi/apps/camlp4/camlp4-4.03-1/camlp4
/home/pi/apps/ocamlfind/findlib-1.6.2/site-lib-src/camlp4

pi@raspberrypi:~ $ type -a camlp4
camlp4 is /usr/local/bin/camlp4
camlp4 is /usr/bin/camlp4

pi@raspberrypi:~ $ which camlp4
/usr/local/bin/camlp4
pi@raspberrypi:~ $ /usr/bin/camlp4 -v
Camlp4 version 4.01.0
pi@raspberrypi:~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

提供的测试解决方案:

pi@raspberrypi:~ $ /usr/local/bin/camlp4 -v
Camlp4 version 4.03.0
pi@raspberrypi:~ $ camlp4 -v
Camlp4 version 4.01.0
pi@raspberrypi:~ $ which camlp4
/usr/local/bin/camlp4
pi@raspberrypi:~ $ hash -r
pi@raspberrypi:~ $ camlp4 -v
Camlp4 version 4.03.0

最佳答案

大多数 shell 确实维护了二进制文件的缓存以针对给定命令启动,以避免每次都搜索 PATH,而 which 并不知道这一点缓存,它解释了您观察到的差异。刷新缓存的方式因 shell 而异。对于 bashdash,您应该执行 hash camlp4。对于 zsh,这是 rehash

关于linux - Unix 缓存二进制文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020974/

相关文章:

c++ - 定时器挂起主线程

Linux Bash Shell 读取日志文件将每一行与文件的重置进行比较

c - mktime() 返回大量秒数

linux - 检查 Linux BAT 中的重复应用程序

c - 如何从 C 文件更改终端中的目录

linux - 为什么 Linux 二进制文件的虚拟内存地址从 0x8048000 开始?

php - 如果我在一个 sh 文件中有 2 个 php 脚本,我可以确定第二个脚本只会在第一个脚本完成后才开始运行吗?

mysql - 如何将多个mysql查询的输出存储在两个不同的excel表中?

c++ - 使用 C 扫描 wifi 网络

linux - Linux/Unix 中的触摸命令