我正在尝试更新我创建的单个目录。我正在使用updatedb
,因此可以通过命令找到它locate
。
使用的命令:
updatedb --localpaths='/frodo/lib/modules/3.12.3-031203-generic/kernel'
输出:
updatedb: unrecognized option '--localpaths=/frodo/lib/modules/3.12.3-031203-generic/kernel'
与以下结果相同:
updatedb --localpaths=
updatedb: unrecognized option '--localpaths='
从man updatedb
:
--localpaths='path1 path2...' Non-network directories to put in the database. Default is /.
--localpaths
当明确指定为选项时,为什么会出现此错误?
系统信息:
updatedb --version updatedb (mlocate) 0.26 Copyright (C) 2007 Red Hat, Inc. All rights reserved. This software is distributed under the GPL v.2. This program is provided with NO WARRANTY, to the extent permitted by law. lsb_release -a LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64: core-3.0-noarch:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2- noarch:core-4.0-amd64:core-4.0-noarch Distributor ID: Ubuntu Description: Ubuntu 13.10 Release: 13.10 Codename: saucy uname -r 3.12.3-031203-generic
编辑:我已经成功使用updatedb -U /frodo/lib/modules/3.12.3-031203-generic/kernel
,但我仍然想知道为什么--localpaths
手册中的 不被识别。
这个替代选项不在手册中,但可以在updatedb -h
.
-U, --database-root PATH the subtree to store in database (default "/")
答案1
updateb 有两种流行的实现。其中之一是来自 GNU findutils。另一个是移动定位。它们支持不同的命令行选项和配置文件,特别是对于updatedb
程序。
看来updatedb
您系统上的命令是来自 mlocate 的命令,但手册页是来自 findutils 的命令。通常,Ubuntu有一个系统(继承自Debian)称为备择方案这保证了当一个程序有多个实现时,程序的选择和手册页的选择是一致的。但是,在这种情况下,updatedb
手册页不会记录在替代项列表中,只有locate
可执行文件、locate
手册页和updatedb
可执行文件会记录在替代项列表中。这是因为updatedb
手册页位于不同的部分:findutils 将其放在第 1 部分,而 mlocate 将其放在第 8 部分。因此man 1 updatedb
显示updatedb(1)
手册页,因为它是第 1 部分中唯一的updatedb
手册页。并man updatedb
显示第 1 部分中的手册页因为那是第一个匹配的部分。可以说,这是 mlocate 中的一个打包错误:findutils 和 mlocate 包维护者应该同意将手册页放在updatedb
同一部分中,并且 mlocate 应该为其手册页声明一个替代方案;由于 mlocate 放入updatedb
了/usr/bin
,它的手册页应该在第 1 节中。就目前情况而言,您可以使用 来查看 mlocate 的手册updatedb
页man 8 updatedb
。
mlocate 的实现updatedb
没有与 findutils 的完全相同的选项--localpaths
。您可以创建一个单独的数据库并使用选项指定它包含的子树--database-root
,或者运行updatedb --database-root / --database-root /frodo/lib/modules/3.12.3-031203-generic/kernel
.