四、Linux 文件搜索常用命令

194 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

一、文件搜索命令 - find

命令名称: find

命令所在路径: /bin/find

执行权限: 所有用户

功能描述: 文件搜索

语法: find [搜索范围] [匹配条件]

常用参数:

参数名称作用
-name按名称查找
-size按大小查找(+:大于    -:小于    =:等于)注:这里需要注意下单位, 单位是数据块,一个数据块的大小为512字节,所以1M=2个数据块
-user按属性查找
-type按类型查找,想知道有哪些文件类型, 可以参考:一、Linux 文件以及目录的讲解
-iname忽略大小写

举例:

# 在 “/root/demo” 目录下有以下文件
[root@TR demo]# ll
total 8
-rw-r--r-- 1 root root    0 Jan  6 19:55 压缩文件.tar.gz
-rwxr-xr-x 1 root root    0 Jan  6 19:55 可执行文件
-rw-r--r-- 1 root root    0 Jan 15 15:26 文件
-rw-r--r-- 1 root root   35 Jan  6 22:34 文件.txt
-rw-r--r-- 1 root root    0 Jan 15 15:25 文件TXT
drwxr-xr-x 2 root root 4096 Jan  6 19:54 文件夹
lrwxrwxrwx 1 root root   14 Jan  6 20:19 链接文件 -> /tmp/demo.soft


# 1. 查询文件名为“文件”的文件,可以看到并没有找到另外几个有“文件”关键字的文件,
# 是一个精确查询。
[root@TR demo]# find /root/demo -name 文件
/root/demo/文件
[root@TR demo]# 

# 2. 如果想模糊匹配, 就需要使用通配符“*”
[root@TR demo]# find /root/demo -name "*文件*"
/root/demo/文件.txt
/root/demo/文件夹
/root/demo/链接文件
/root/demo/文件TXT
/root/demo/文件
/root/demo/压缩文件.tar.gz
/root/demo/可执行文件
[root@TR demo]# 

# 3.如果想查询以“txt”结尾的文件呢,可以看到并没有吧“文件TXT”文件查询出来
# 那是因为没有忽略大小写
[root@TR demo]# find /root/demo -name "*txt"
/root/demo/文件.txt
[root@TR demo]# 

# 4.查询以“txt”结尾的文件(不区分大小写)
[root@TR demo]# find /root/demo -iname "*txt"
/root/demo/文件.txt
/root/demo/文件TXT
[root@TR demo]# 

1、除了上述的查询, find 还可以查询一定时间内, 被修改,访问的文件

参数作用
-amin访问时间(access)
-cmin文件属性被修改(change)
-mmin文件内容被修改(modify)
# 1.查询30分钟内被访问(access)过的文件
[root@TR demo]# find /root/demo -amin -30
/root/demo/文件.txt
[root@TR demo]# 

# 2.查询30分钟内被修改(modify)的文件
[root@TR demo]# find /root/demo -mmin -30
/root/demo
/root/demo/文件.txt
[root@TR demo]# 

# 3.查询30分钟内被修(change)改属性的文件
[root@TR demo]# find /root/demo -cmin -30
/root/demo
/root/demo/文件.txt
[root@TR demo]# 

:如果 将上述的“min” 换成“time”, 那是时间单位就有分钟切换成了 

例如:查询超过七天内被访问过的所有文件

[root@TR demo]# find /root/demo -type f -atime +7

 2、查询一个文件的属性范围 

例1: 查询一个文件的大小在 100M到200M之间。

# 1. “-a” 表示 “and”  +:表示大于  -:表示小于
[root@TR demo]# find /root/demo -size +204800 -a -size -409600

例2: 查询一个文件的大小 大于100M 或者 小于 200M

# 1. “-o” 表示 “or”  +:表示大于  -:表示小于
[root@TR demo]# find /root/demo -size +204800 -o -size -409600

3、对搜索结果执行操作

这个很有趣, 可以使用 “-exec” 或者“-ok” 来对搜索出来的执行操作

例如: 想查看搜索出来的文件的详细信息

[root@TR demo]# find /root/demo -name "*文件" -exec ls -l {} \;
lrwxrwxrwx 1 root root 14 Jan  6 20:19 /root/demo/链接文件 -> /tmp/demo.soft
-rw-r--r-- 1 root root 0 Jan 15 15:26 /root/demo/文件
-rwxr-xr-x 1 root root 0 Jan  6 19:55 /root/demo/可执行文件
[root@TR demo]# 

二、文件搜索命令 - locate

命令名称: locate

命令所在路径: /usr/bin/locate

执行权限: 所有用户

功能描述: 在文件资料库中搜索文件

语法: locate [文件名]

例如: 查询文件名为含有“压缩”关键字的文件

[root@TR demo]# locate "*压缩*"
/root/demo/压缩文件.tar.gz
[root@TR demo]# 

扩展: 如果上述命令报“locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory”错, 那么只需要输入“updatedb”命令等待执行完毕即可。

find 和 locate的区别

  1. find是实时查询,对系统性能消耗较高;而locate是查询文件资料库,查询很快, 但是会有查询不出来的情况(文件内容信息还未更新进“mlocate.db”数据库中)。
  2. find 查询文件需要带上路径,而locate 直接输入文件名即可。

三、文件搜索命令 - which

命令名称: which

命令所在路径: /usr/bin/which

执行权限: 所有用户

功能描述: 搜索命令所在目录以及别名信息

语法: which [命令]

例如: 查询 “ls” 命令的所在目录以及别名信息

[root@TR demo]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls
[root@TR demo]# 

四、文件搜索命令 - whereis

命令名称: whereis

命令所在路径: /usr/bin/whereis

执行权限: 所有用户

功能描述: 搜索命令所在目录以及帮助文档路径

语法: whereis [命令]

例如: 查询 “ls” 命令的所在目录以及帮助文档路径

[root@TR demo]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
[root@TR demo]# 

五、文件搜索命令 - grep

命令名称: grep

命令所在路径: /bin/grep

执行权限: 所有用户

功能描述: 在文件中搜寻字符串匹配的行,并输出

语法: whereis [-iv] [执行字符串] [文件]

参数作用
-i不区分大小写
-v排除指定字符串

例如: 查询“文件.txt”中含有“胖太乙”的关键字

[root@TR demo]# cat 文件.txt
姓名:胖太乙
年龄:1000岁
[root@TR demo]# grep "胖太乙" /root/demo/文件.txt
姓名:胖太乙
[root@TR demo]#