我正在尝试在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获取第一个路径。但我不知道如何找到另外两条路径。任何指针如何找到这些路径。
答案 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
}