Unix缓存二进制文件吗?

时间:2016-10-13 12:27:11

标签: linux shell unix

这是我理解的问题,我相信* nix系统很少需要重启。即如果您安装了新的"应用程序"甚至kernal 9/10不需要重启。

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

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

1 个答案:

答案 0 :(得分:5)

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