2014-09-28 238 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 
} 
相關問題