2014-09-28 252 views
0

我想在C中实现'whereis'命令,但我能够部分实现它。当我在Linux shell中尝试'whereis'时,可以说例如whereis ls ..我得到以下结果在Linux中查找Builtins和命令的可执行文件的路径

$ whereis ls 
/bin/ls 
/usr/share/man/man1p/ls.1p.gz 
/usr/share/man/man1/ls.1.gz 

我能够使用PATH env.variable获得第一个路径。但我不知道如何找到其他两条路径。任何指针如何找到这些路径。

回答

2

在Linux(但不是在所有系统上,如Mac OS)中,whereis搜索在$MANPATH(或一些其他的默认位置)匹配的文件,这对于LS是这样的:

$MANPATH/man(.+)/ls\.\1(\.gz)? 

如果您真的需要知道如何whereis的作品,你可以简单地看一下它的源....

1

man whereis(Ubuntu的11.04),提到以下路径:

 
/{bin,sbin,etc} 
/usr/{lib,bin,old,new,local,games,include,etc,src,man,sbin,X386,TeX,g++-include} 
/usr/local/{X386,TeX,X11,include,lib,man,etc,bin,games,emacs} 
0

另一个通常可用的选项是which。它将返回可执行文件的标准路径和可执行文件名称。例如:

$ which ls 
/usr/bin/ls 

它可以帮助你在你的whereis endevour并且也可用于在脚本设置可执行那里可以位于不同地点的不同分布可移植性:

my_ls=$(which ls 2>/dev/null) 
[ -x "$my_ls" ] || { 
    echo "ls not found" 
    exit 1 
} 
相关问题