linux 中工作时,常常会遇到找不到文件的问题。这个文件可能是可执行文件,也可能是配置文件,或驱动文件等等。这类问题很常见,它们有相同的解决思路,具体步骤如下:

确认文件是否存在

sudo updatedb
	 locate filename

未安装 locate 命令时,可以通过 find 来查找文件(这通常会花费较长时间)。

文件存在

这里可能存在的问题是缺少某些库文件,或者没有设定某个环境变量,其它情况视具体情况而定。其中又以没有设定环境变量(使用系统默认值)问题为多,这时可以查看程序的帮助文档中 ENVIRONMENT 部分的叙述,根据叙述设定环境变量,并将环境变量的设定放到 用户或系统的 bash 配置文件中, 就能解决问题。

缺少库的情况可以通过安装库的方式来解决,具体需要安装哪个库请谷歌或百度。

文件不存在

当文件不存在时,可以以错误信息在百度或谷歌中检索,确定需要下载的文件或安装包,安装缺失的包或将文件放到正确的位置便能够解决问题。对于缺少包的问题,如果 apt-getyum 无法找到安装包,那么首先更新源,然后 update,这之后再次进行安装,仍旧无法找到包,那么可以在网络上寻找。

下面是环境变量文设定导致程序执行失败的一个具体示例:
bibtex无法找到.bst与.bib文件的问题

在使用 beamer 文档类编写 ppt 文档的时候,使用 bibtex 生成参考文献时发生错误,错误提示找不到 plain.bst style 文件与我引用的 math.bib 文件。

使用 locate 在本地磁盘中查找相关文件发现这些文件存在,既然这样那么我想应该是没有设定 bibtex 程序使用的环境变量导致的问题。man bibtex,在 manual 中发现了三个相关变量。

  • BSTINPUTS
    以该变量指定的 path 查找 .bst 文件,未设置该变量则使用系统默认路径查找。设置该变量后成功找到 plain.bst style 文件。
  • BSTINPUTS
    以该变量指定的 path 查找 .bib 文件,未设置该变量则使用系统默认路径查找。设置该变量后成功找到 math.bib 文件。
  • TEXMFOUTPUT
    bibtex 无法将输出文件放到当前目录时,会尝试将文件放到该变量指定的路径。

问题解决!

上面的例子也说明了环境变量的重要性。我们很多时候都只关心命令行参数,而忽略了环境变量对程序执行的影响。就 c 语言来讲,除了常见的 argcargv 所表示的命令行参数表之外,还存在着 environ 环境变量表。不依赖特定环境变量的程序不容易出现问题,依赖特定环境变量的程序在环境变量缺失时可能会产生严重错误,这可以说是依赖造成的问题。

默认的环境变量设定并不能解决所有问题,有时候你必须自己配置环境变量,在这种问题产生时环境变量的作用就显得十分重要了。

要真正控制程序执行的话,程序的执行环境也应该得到考虑。更进一步的讨论可以参考 《APUE》第三版第7章的内容。