我是系统上的非特权用户,因此我在我的主目录中安装了一些软件。除了添加~/.local/usr/bin
到 my 之外PATH
,我还添加~/.local/usr/share/man
到 my 中MANPATH
,以便我可以查询这些包的手册页。
例如,这样的命令之一是cgdb
.
man cgdb
工作正常,它从我的MANPATH
环境变量中获取手册页。
但是apropos cgdb
( man -k cgdb
, whatis cgdb
) 不起作用。
$ apropos cgdb
cgdb: nothing appropriate
man apropos
我当时读到man whatis
可以使用重新生成whatis数据库makewhatis
,但这似乎只能由系统目录中的特权用户来完成。我找不到任何方法在用户空间中执行此操作。
是否可以在非特权用户指向的非系统目录上使用apropos
(又名)?man -k
MANPATH
FWIW:这是在 CentOS 6 服务器上
$ uname -osrv
Linux 2.6.32-754.11.1.el6.x86_64 #1 SMP Tue Feb 26 15:38:56 UTC 2019 GNU/Linux
$ lsb_release -d
Description: CentOS release 6.6 (Final)
答案1
apropos
通常会读取预先生成的索引文件以提高速度,而不是搜索每个联机帮助页。
这意味着每当添加联机帮助页时都需要更新索引文件。
在 CentOS 6 上,系统手册页每晚通过/etc/cron.daily/makewhatis.cron
.
现在makewhatis
是意思是能够使用该-o
标志让您指定自己的目录。然而它似乎不起作用......
% makewhatis -v $HOME/man -o $HOME/man/whatis
about to enter /home/sweh/man
skipping /var/cache/man - whatis file is readonly
% cat man/whatis
%
然而,makewhatis
它是一个脚本,因此可以复制它并修改它以指定新路径:
% diff mymakewhatis /usr/sbin/makewhatis
69c69
< DEFWHATISDIR=$HOME/man
---
> DEFWHATISDIR=/var/cache/man
现在:
% ./mymakewhatis -v $HOME/man
about to enter /home/sweh/man
adding /home/sweh/man/man1/smbsh.1
我们可以看到它现在有一个条目:
% cat man/whatis
smbsh (1) - Allows access to remote SMB shares using UNIX commands
并apropos
工作:
% man -k smbsh
smbsh (1) - Allows access to remote SMB shares using UNIX commands