文件查找工具:locate和find
2017-03-29 23:25
369 查看
locate
locate命令主要依赖于事先构建好的索引库。索引库中收集了系统中所有文件的路径信息。索引库一般通过系统的周期性任务实现自动更新,也可使用updatedb命令进行手动更新。更新索引库是一个很消耗系统资源的操作,一般在系统空闲时进行。locate在进行文件查找时,根据给出的指定字符串,在索引库中进行查找,并打印出绝对路径中包含该字符串的文件,提高了查找速度的同时,避免了遍历文件系统带来的系统资源的消耗。但带来的是文件查找的非实时性。如果某个文件创建后没有进行索引库的更新,那么索引库中没有该文件的信息,使用locate命令也将查找不到该文件。
基于locate这样的工作原理,使得它具有 查找速度快、模糊查找和非实时查找 的特点。
虽然locate命令是模糊查找的,但我们可以通过灵活使用-b选项和正则表达式的位置锚定,以实现精准查找。
locate使用格式及常用选项:
SYNOPSIS:locate [OPTION]… PATTERN…
OPTIONS:
-b:只匹配路径中的基名;
-c:统计出共有多少个符合条件的文件;
-r:使用基本正则表达式 (BRE) 进行匹配;
PATTREN:
locate的匹配模式默认使用glob风格,当使用-r选项时,可使用基本正则表达式模式进行匹配。
locate使用示例:
使用locate查找绝对路径中包含“mailx”的文件:[root@localhost ~]# locate 'mailx' /usr/bin/mailx /usr/share/doc/mailx-12.5 /usr/share/doc/mailx-12.5/AUTHORS /usr/share/doc/mailx-12.5/COPYING /usr/share/doc/mailx-12.5/README /usr/share/man/man1/mailx.1.gz
使用locate查找基名中包含“mailx”的文件:
[root@localhost ~]# locate -b 'mail' /usr/bin/mailx /usr/share/doc/mailx-12.5 /usr/share/man/man1/mailx.1.gz
locate使用glob匹配模式查找文件:
[root@localhost ~]# locate -b 'mail?' /usr/bin/mailq /usr/bin/mailx
locate启用基本正则表达式,查找基名为“mail”和“mailx”的文件:
[root@localhost ~]# locate -br '^mailx\?$' /usr/bin/mail /usr/bin/mailx /var/mail /var/spool/mail
find
find命令是一个文件实时查找工具。它通过遍历指定路径下的文件系统层级结构完成文件查找。此外,它还能对查找到的文件进行一些处理动作。find命令查找具有查找准确、实时性查找的特点,但消耗的系统资源较多,查找速度略慢。
find使用格式及常用选项:
SYNIPSIS:
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
OPTIONS:
查找起始路径:指定搜索范围;缺省时默认为当前目录。
查找条件:指定的查找标准,可以更加文件名、大小、类型、从属关系、权限等待标准进行;缺省时表示查找指定目录下的所有文件。
处理动作:对符合查找条件的文件做出的操作;默认为输出至标准输出。
查找条件:
根据文件名查找:
-name “pattern”:根据文件名精准查找,区分大小写;-iname “pattern”:根据文件名精准查找,不区分大小写;
pattern支持glob风格匹配模式。
-regex pattern:基于正则表达式模式查找文件,匹配的是整个路径,而非文件或目录的基名。
匹配/etc目录下基名为"passwd"的文件或目录(区分大小写): [root@localhost ~]# find /etc -name passwd /etc/passwd /etc/pam.d/passwd 匹配/etc目录下基名为"passwd"的文件或目录(区分大小写): [root@localhost ~]# find /etc -iname passwd /etc/passwd /etc/pam.d/passwd /etc/Passwd
根据文件从属关系查找:
-user USERNAME:查找属主为指定用户的所有文件;[root@localhost ~]# find /home -user Kamin
-group GRPNAME:查找属组为指定组的所有文件;
[root@localhost ~]# find /home -gruop Kamin
-uid UID:查找属于指定UID的文件;
[root@localhost ~]# find /home -uid 1000
-gid GID:查找属于指定GID的文件;
[root@localhost ~]# find /home -gid 1000
-nouser:查找没有属主的文件;
[root@localhost ~]# find /home -nouser
-nogroup:查找没有属组的文件;
[root@localhost ~]# find /home -nogruop
根据文件的类型查找:
-type TYPE:f:普通文件
d:目录文件
l:符号链接文件
b:块设备文件
c:字符设备文件按
p:管道文件
s:套接字文件
[root@localhost ~]# find /home -type d /home /home/Kamin
组合查找:
与:-a,默认的组合逻辑或:-o
非:-not,!
根据文件的大小查找:
对于一个大小为1500byte大小的文件,其文件大小大于1K、小于2K。在Linux中以K为单位进行查看时,显示它的大小为2K。Linux系统在无法准确显示文件大小时,趋向于使用费一个大一点的值来表示。当find命令根据文件大小进行查找时,便是以这个偏大一点的值来为标准进行查找的。举例说,当我们查找一个2K的文件时,系统将查找范围内找出大于1K,小于等于2K的文件。
-size [+|-]#UNIT(UNIT可为k, M, G):
-#UNIT:文件大小范围为 (#-1, #];
-#UNIT:文件大小范围为 [0, #-1];
+#UNIT:文件大小范围为 (#, ∞];
查找/etc目录下大小约为(1,2]k的文件:
[root@localhost ~]# find /etc -size 2k -ls |head 135032790 4 -rw-r--r-- 1 root root 1982 6月 10 2014 /etc/vimrc 134320287 4 -rw-r--r-- 1 root root 1518 6月 7 2013 /etc/aliases 134320289 4 -rw-r--r-- 1 root root 1602 6月 7 2013 /etc/csh.cshrc
根据时间戳查找:
以“天”为单位进行查找;-atime [+|-]#:
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
与根据文件大小查找类似,
-atime 2表示查找48小时至72小时范围内访问过的文件;
-atime -2表示查找48小时内访问过的文件;
-atime +2表示查找最近访问时间超过72小时的文件。
以“分钟”为单位:
-amin
-mmin
-cmin
以“分钟”为单位与以“天”为单位类似。
根据权限查找:
-perm [/|-]modemode:精确权限匹配;
/mode:任何一类用户(u, g, o)的任何一位权限(r, w, x)符合条件即满足;9位权限之间存在”或”关系。
-mode:每一类用户(u, g, o)的权限中的每一位(r, w, x)同时符合条件即满足;9位权限之间存在“与”关系。
处理动作:
-print:输出至标准输出,这是默认的动作;-ls:类似于对查找到的文件执行 “ls -l” 命令,输出文件的详细信息;
-delete:删除查找到的文件;
-fls /PATN/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} \:对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
-exec COMMAND {} \:对查找到的每个文件执行由COMMAND表示的命令,不必与用户交互确认;
find在执行处理动作时,是将查找到的文件路径一次性送到处理动作命令的,而有些命令不支持过长的参数,会造成错误。使用
find | xarg COMMAND可避免这种错误。
相关文章推荐
- shell脚本中if与case使用,查找文件locate与find的使用,压缩,解压及归档工具
- Linux基础之文件查找工具:locate、find
- Linux 系统之文件查找工具--- locate、 find详解
- 文件查找工具locate和find的使用分析
- 文件查找工具locate与find
- 文件查找命令 find locate
- Linux的五个文件查找命令:find,locate,whereis,which,type
- Linux 强大的文件查找工具之find
- linux下的文件查找——type whereis which find locate
- Unix 下的查找文件的工具 find
- linux中Find、whereis、locate、which查找文件命令总结
- 如何查找Linux文件 存放在哪(地点) locate find whereis which 命令
- linux中Find、whereis、locate、which查找文件命令总结
- Linux 强大的文件查找工具之find
- 文件查找工具find
- 一天一linux命令(12) which whereis locate find 查找文件和目录
- 如何查找Linux文件 存放在哪(地点) locate find whereis which 命令
- Linux内、外部命令的使用、文件权限、文件查找(find、locate、grep)
- Linux命令:文件查找相关 Whereis、find和locate+updatedb
- Linux五个文件查找命令--which、whereis、find、locate和type