在Linux中查找Builtins的路径和命令的可执行文件

时间:2014-09-28 04:02:34

标签: c linux bash shell

我正在尝试在C中实现'whereis'命令。但我能够部分地实现它。当我在Linux shell中尝试'whereis'时,让我说whereis ls ..我得到以下结果

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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}

答案 2 :(得分:0)

通常可用的另一种选择是which。它将返回可执行文件的完全限定路径和可执行文件名。例如:

$ which ls
/usr/bin/ls

它可以帮助您进行whereis尝试,并且对于脚本中的可移植性来说,设置可执行文件位于不同发行版的不同位置也很有用:

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