我正在尝试在我的 Debian wheezy 服务器上安装 Asterisk。为此,我首先做了简单的
sudo apt-get install asterisk
这工作得很完美。之后,Asterisk 正在运行,我可以使用以下命令进入它的 CLI:
asterisk -rvvv
经过一番混乱之后,我放弃了星号并重新安装:
sudo apt-get remove --purge asterisk
sudo apt-get install asterisk
这已成功重新安装,并sudo service asterisk status
显示[ ok ] Asterisk PBX is running.
,但我无法再进入 CLI(asterisk -rvvv
显示-bash: asterisk: command not found
)。
所以我尝试使用以下方法从源代码安装它这个简单的指南。所有步骤都顺利,我可以再次启动并运行 asterisk。但是 CLI 再次拒绝启动另一个-bash: asterisk: command not found
)。
有人知道我做错了什么吗?或者有人能给我指出正确的方向吗?欢迎提供所有提示!
答案1
shell 如何找到你的程序
当您foo
在 shell 的命令行中输入内容时,它会查找foo
由 shell 的环境变量定义的一组路径PATH
(您可以通过运行来检查echo $PATH
)。
所以我的猜测很简单:重新安装之前所拥有的星号包的二进制文件asterisk
位于用户列出的位置$PATH
,而之后安装的包将其安装在其他地方。
echo $PATH
您可以通过在 shell 中关联以下输出来轻松检查这一点
$ dpkg -L asterisk | grep bin/asterisk
无论如何,您可以通过指定其完整路径名来运行二进制程序。
Shell 中的路径名解析缓存
另一种可能性(尽管可能性较小)是路径名解析缓存。交互式 shell bash
(包括)只在列表中查找$PATH
一次裸程序的名称,然后记住找到的完整位置。如果您随后从该位置删除该程序,shell 将无法再运行它,即使该程序的文件现在可以在 中列出的其他位置访问$PATH
。
您可以通过在 shellhash -r
中运行来帮助它(请参见help hash
您的bash
提示)。
杂项
请注意,在一般情况下,当你这样做
apt-get remove --purge asterisk
apt-get install asterisk
即执行删除+安装循环,包的版本根据 APT 系统获取的档案,该系统已获悉已安装。也就是说,如果您已通过 直接安装了手动构建的版本dpkg -i ...
,则当您稍后删除并安装同名软件包时,APT 将不会尝试查找和安装此相同版本。
如果你想让你手工构建的asterisk
软件包可用于一般安装,你必须维护一个合适的本地 Debian 存储库(reprepro
这是最简单的工具,另请参阅apt-ftparchive
),让它为你的本地 APT 系统所知,并可能使该存储库中的软件包成为首选,使用APT 偏好。