分类: LINUX
2010-01-27 11:31:01
一个命令,可能有两种实现,比如ftp:
1. /usr/bin/ftp
2. /usr/kerberos/bin/ftp
他们对应的manpage不同,对应的rpm包也不同。
manpage:
1. /usr/share/man/man1/ftp.1.gz
2. /usr/kerberos/man/man1/ftp.1.gz
rpm包:
1. ftp
2. krb5-workstation
那么,如何确定使用ftp命令时,被使用的命令是哪个;使用man ftp时,被使用的manpage是哪个呢?
方法如下:
1. 确定manpage
a) 最简单的方法,直接确定:
[root@RHEL-5 cmt-3.0]# man --path ftp
/usr/kerberos/man/man1/ftp.1.gz
(或者man –w; manpath)
或者
a) 确定搜索路径:
[root@RHEL-5 cmt-3.0]# man --path
/usr/kerberos/man:/usr/local/share/man:/usr/share/man:/usr/local/man
可以得到man的搜索路径。
b) 确定具体路径:
[root@RHEL-5 cmt-3.0]# man -aW ftp | xargs ls -l
-rw-r--r-- 1 root root 10291 Sep 12 01:59 /usr/kerberos/man/man1/ftp.1.gz
-rw-r--r-- 1 root root 9053 Sep 13 2006 /usr/share/man/man1/ftp.1.gz
[root@RHEL-5 cmt-3.0]# man -aW ftp | xargs ls -l | head -1 | awk '{print $NF}'
/usr/kerberos/man/man1/ftp.1.gz
2. 确定命令
a) 确定搜索路径:
不能使用whereis,而应该看PATH
[root@RHEL-5 cmt-3.0]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
可以确定搜索路径。
b) 结合上面已经确定的ftp的manpage的具体路径,可以确定ftp的rpm包。
[root@RHEL-5 cmt-3.0]# rpm -qf /usr/kerberos/man/man1/ftp.1.gz
krb5-workstation-1.6.1-17.el5
之后确定包含的ftp命令:
[root@RHEL-5 cmt-3.0]# rpm -ql krb5-workstation | grep ftp
/etc/pam.d/gssftp
/etc/xinetd.d/gssftp
/usr/kerberos/bin/ftp
/usr/kerberos/man/man1/ftp.1.gz
/usr/kerberos/man/man8/ftpd.8.gz
/usr/kerberos/sbin/ftpd
c) 结合a)得到的ftp的搜索路径,因为/usr/kerberos/bin在/usr/bin之前,可以看出默认的ftp命令是/usr/kerberos/bin/ftp,而不是使用whereis ftp得到的/usr/bin/ftp:
[root@RHEL-5 cmt-3.0]# whereis ftp
ftp: /usr/bin/ftp /usr/share/man/man1/ftp.1.gz
这样的话,确认了ftp的默认命令和默认manpage。而且它们的确是统一的。但manpath和PATH的对应关系,需要通过/etc/man.conf和man man进一步理解。