四、Linux 文件搜索常用命令

一、文件搜索命令 - 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]# 

你可能感兴趣的