对于初次切换到 Linux 系统的朋友来说,如果想要从命令行界面执行查找文件的任务的话,那么,locate 和 find 是两个需要了解的命令。虽说这两个命令都可以满足查找文件的操作,不过却是各有所长,在选择上不妨兼而用之。
  1. locate:该命令在运行时需要后台索引的数据库作为支撑,在 Ubuntu 中这个数据库文件位于 /var/cache/locate/locatedb。一般来说,这个数据库文件每天是通过 cron 自动更新的。如果不幸没有得到更新,那么可以执行 sudo updatedb 来手动更新。 假如我想要在系统中查找一个名为 linux.html 的文件,那么可以这样执行命令:locate linux.html。locate 搜索文件的速度很快,一会儿就会把结果列出来。locate 有一个十分有用的选项 -r,它可以让你在搜索文件时使用正则表达式。
  2. find:这是另一个 Linux 系统中重要的文件查找命令。find 命令的功能很强大,其一般使用方法为:find 位置 -name 文件名称。例如,我要在 / 这个根目录中查找 linux.html 文件,可以执行 find / -name linux.html。你除了可以按文件名称来使用 find 查找文件外,也可以根据文件大小(通过 -size n 选项指定)、时间(如 -atime n 表示查找 n 天前访问过的文件)来搜索文件。 此外,find 命令同样支持在搜索文件时使用正则表达式,你只需指定 -regex 选项即可。

locate

功能说明: 查找文件。 
语 法:locate [-d <数据库文件>][--help][--version][范本样式...]
补充说明:locate指令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合乎范本样式条件的文件或目录。 
参 数
-d<数据库文件>或--database=<数据库文件> 设置locate指令使用的数据库。locate指令预设的数据库位于/var/lib/slocate目录里,文件名为slocate.db,您可使用这个参数另行指定。 
--help 在线帮助。 
--version 显示版本信息。
 
find
功能说明: 查找文件或目录。
语 法:find [目录...][-amin <分钟>][-anewer <参考文件或目录>][-atime <24小时数>][-cmin <分钟>][-cnewer <参考文件或目录>][-ctime <24小时数>][-daystart][-depyh][-empty][-exec <执行指令>][-false][-fls <列表文件>][-follow][-fprint <列表文件>][-fprint0 <列表文件>][-fprintf <列表文件><输出格式>][-fstype <文件系统类型>][-gid <群组识别码>][-group <群组名称>][-help][-ilname <范本样式>][-iname <范本样式>][-inum <inode编号>][-ipath <范本样式>][-iregex <范本样式>][-links <连接数目>][-lname <范本样式>][-ls][-maxdepth <目录层级>][-mindepth <目录层级>][-mmin <分钟>][-mount] 
[-mtime <24小时数>][-name <范本样式>][-newer <参考文件或目录>][-nogroup][noleaf] [-nouser][-ok <执行指令>][-path <范本样式>][-perm <权限数值>][-print][-print0][-printf <输出格式>][-prune][-regex <范本样式>][-size <文件大小>][-true][-type <文件类型>][-uid <用户识别码>][-used <日数>][-user <拥有者名称>][-version][-xdev][-xtype <文件类型>]
补充说明:find指令用于查找符合条件的文件。任何位于参数之前的字符串都将被视为欲查找的目录。
参 数
-amin<分钟> 查找在指定时间曾被存取过的文件或目录,单位以分钟计算。 
-anewer<参考文件或目录> 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录。 
-atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24小时计算。 
-cmin<分钟> 查找在指定时间之时被更改的文件或目录。 
-cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。 
-ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算。 
-daystart 从本日开始计算时间。 
-depth 从指定目录下最深层的子目录开始查找。 
-expty 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录。 
-exec<执行指令> 假设find指令的回传值为True,就执行该指令。 
-false 将find指令的回传值皆设为False。 
-fls<列表文件> 此参数的效果和指定"-ls"参数类似,但会把结果保存为指定的列表文件。 
-follow 排除符号连接。 
-fprint<列表文件> 此参数的效果和指定"-print"参数类似,但会把结果保存成指定的列表文件。 
-fprint0<列表文件> 此参数的效果和指定"-print0"参数类似,但会把结果保存成指定的列表文件。 
-fprintf<列表文件><输出格式> 此参数的效果和指定"-printf"参数类似,但会把结果保存成指定的列表文件。 
-fstype<文件系统类型> 只寻找该文件系统类型下的文件或目录。 
-gid<群组识别码> 查找符合指定之群组识别码的文件或目录。 
-group<群组名称> 查找符合指定之群组名称的文件或目录。 
-help或--help 在线帮助。 
-ilname<范本样式> 此参数的效果和指定"-lname"参数类似,但忽略字符大小写的差别。 
-iname<范本样式> 此参数的效果和指定"-name"参数类似,但忽略字符大小写的差别。 
-inum<inode编号> 查找符合指定的inode编号的文件或目录。 
-ipath<范本样式> 此参数的效果和指定"-ipath"参数类似,但忽略字符大小写的差别。 
-iregex<范本样式> 此参数的效果和指定"-regexe"参数类似,但忽略字符大小写的差别。 
-links<连接数目> 查找符合指定的硬连接数目的文件或目录。 
-iname<范本样式> 指定字符串作为寻找符号连接的范本样式。 
-ls 假设find指令的回传值为True,就将文件或目录名称列出到标准输出。 
-maxdepth<目录层级> 设置最大目录层级。 
-mindepth<目录层级> 设置最小目录层级。 
-mmin<分钟> 查找在指定时间曾被更改过的文件或目录,单位以分钟计算。 
-mount 此参数的效果和指定"-xdev"相同。 
-mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算。 
-name<范本样式> 指定字符串作为寻找文件或目录的范本样式。 
-newer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。 
-nogroup 找出不属于本地主机群组识别码的文件或目录。 
-noleaf 不去考虑目录至少需拥有两个硬连接存在。 
-nouser 找出不属于本地主机用户识别码的文件或目录。 
-ok<执行指令> 此参数的效果和指定"-exec"参数类似,但在执行指令之前会先询问用户,若回答"y"或"Y",则放弃执行指令。 
-path<范本样式> 指定字符串作为寻找目录的范本样式。 
-perm<权限数值> 查找符合指定的权限数值的文件或目录。 
-print 假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有"./"字符串。 
-print0 假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行。 
-printf<输出格式> 假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式可以自行指定。 
-prune 不寻找字符串作为寻找文件或目录的范本样式。 
-regex<范本样式> 指定字符串作为寻找文件或目录的范本样式。 
-size<文件大小> 查找符合指定的文件大小的文件。 
-true 将find指令的回传值皆设为True。 
-typ<文件类型> 只寻找符合指定的文件类型的文件。 
-uid<用户识别码> 查找符合指定的用户识别码的文件或目录。 
-used<日数> 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算。 
-user<拥有者名称> 查找符合指定的拥有者名称的文件或目录。 
-version或--version 显示版本信息。 
-xdev 将范围局限在先行的文件系统中。 
-xtype<文件类型> 此参数的效果和指定"-type"参数类似,差别在于它针对符号连接检查。