[转帖]Linux查找文件6个高效工具
Linux查找文件6个高效工具
https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等。
1. 前言
我们使用Linux过程中,经常会有搜索文件的需求,那么Linux命令下有哪些工具可以快速查找文件呢?先来了解一下这些工具:
1.1 find命令
Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。
1.2 locate命令
Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。
1.3 grep命令
Linux grep命令用于查找文件里符合条件的字符串。grep也可以根据文件名查找文件,但一般用于查找文件内的内容。
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
1.4 whereis命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
1.5 which命令
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
1.6 type命令
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
1.7 总结
>
which 查看可执行文件的位置。
whereis 查看文件的位置。
locate 配合数据库查看文件位置。
find 实际搜寻硬盘查询文件名称。
type 区分命令类型
>
2. find命令使用案例
2.1 根据文件名查找
查找zcwyou.txt这个文件,从/开始查找,即在Linux所有挂载的分区和目录中查找。
[root@zcwyou ~]# find / -name zcwyou.txt
只查找.txt结尾的文件
[root@zcwyou ~]# find / -name '*.txt'
查找txt和pdf结尾的文件
[root@zcwyou ~]# find . -name "*.txt" -o -name "*.pdf"
2.2 从某个目录开始查找文件
从当前用户的家目录开始查找
[root@zcwyou ~]# find ~ -name zcwyou.txt
从当前目录开始查找
[root@zcwyou ~]# find . -name zcwyou.txt
从/var目录开始查找
[root@zcwyou ~]# find /var -name zcwyou.txt
2.3 忽略大小写
查找文件名带有abc的文件,忽略大小写
使用选项-iname
[root@zcwyou ~]# find / -iname \*abc\*
2.4 根据文件类型查找
使用选项-type
查找某一类型的文件,例如:
b – 块设备文件。
d – 目录。
c – 字符设备文件。
p – 管道文件。
l – 符号链接文件。
f – 普通文件。
在/etc目录下查找所有的目录,并打印出来
[root@zcwyou ~]# find /etc -type d -print
在当前目录下查找除目录以外的所有类型的文件
[root@zcwyou ~]# find . ! -type d -print
在/etc目录下查找所有的符号链接文件
[root@zcwyou ~]# find /etc -type l -print
2.5 基于目录深度搜索
查找当前目录及向下最大深度限制为3的所有文件
[root@zcwyou ~]# find . -maxdepth 3 -type f
2.6 基本文件时间查找
使用格式:
find . -type f 时间类型
UNIX/Linux文件系统每个文件都有三种时间类型:
访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间 (-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间 (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
搜索最近七天内被访问过的所有文件
[root@zcwyou ~]# find . -type f -atime -7
搜索恰好在七天前被访问过的所有文件
[root@zcwyou ~]# find . -type f -atime 7
搜索超过七天内被访问过的所有文件
[root@zcwyou ~]# find . -type f -atime +7
搜索访问时间超过10分钟的所有文件
[root@zcwyou ~]# find . -type f -amin +10
找出比file.log修改时间更长的所有文件
[root@zcwyou ~]# find . -type f -newer file.log
2.7 根据文件大小查找
使用格式:
find . -type f -size 文件大小
文件大小单元:
b——块(512字节)
c——字节
w——字(2字节)
k——千字节
M——兆字节
G——吉字节
查找大于10KB的文件
[root@zcwyou ~]# find . -type f -size +10k
查找小于30M的文件
[root@zcwyou ~]# find . -type f -size -30M
搜索等于55MB的文件
[root@zcwyou ~]# find . -type f -size 55M
2.8 查找后删除
删除当前目录下所有.test文件
[root@zcwyou ~]# find . -type f -name "*.test" -delete
2.9 根据文件权限/所有权进行匹配
当前目录下搜索出权限为755的文件
[root@zcwyou ~]# find . -type f -perm 755
找出当前目录下权限不是600的php文件
[root@zcwyou ~]# find . -type f -name "*.php" ! -perm 600
找出当前目录用户zcwyou拥有的所有文件
[root@zcwyou ~]# find . -type f -user zcwyou
找出当前目录用户组zcwyou拥有的所有文件
[root@zcwyou ~]# find . -type f -group zcwyou
3. find结合其他工具
3.1 借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户zcwyou
[root@zcwyou ~]# find .-type f -user root -exec chown zcwyou {} \;
{} 用于与 -exec 选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除
[root@zcwyou ~]# find $HOME/. -name "*.txt" -ok rm {} \;
示例中的-ok 和 -exec 行为一样,不过它会给出提示,是否执行相应的操作。
3.2 与xargs结合
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
[root@zcwyou ~]# find . -type f -print | xargs file
在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
[root@zcwyou ~]# find / -name "core" -print | xargs echo "" >/tmp/core.log
用grep命令在所有的普通文件中搜索hostname这个词
[root@zcwyou ~]# find . -type f -print | xargs grep "hostname"
删除当前目录下30天以前的所有东西
[root@zcwyou ~]# find . -ctime +30 -exec rm -rf {} \;
或者
[root@zcwyou ~]# find ./ -mtime +30 -print|xargs rm -f -r
删除文件大小为零的文件
[root@zcwyou ~]# find ./ -size 0 | xargs rm -f &
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
4. locate命令
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库,CentOS7数据库的位置在/var/lib/locatedb,CentOS6数据库位置在/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,默认情况下每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
以CentOS7.5最小化安装为例,默认情况下,系统并没有集成该工具,需要手动安装它:
安装locate工具:
[root@zcwyou ~]# yum -y install mlocate
看到以下输出表明安装成功:
Total download size: 113 k
Installed size: 379 k
Downloading packages:
mlocate-0.26-8.el7.x86_64.rpm | 113 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : mlocate-0.26-8.el7.x86_64 1/1
Verifying : mlocate-0.26-8.el7.x86_64 1/1
Installed:
mlocate.x86_64 0:0.26-8.el7
Complete!
更新数据库,即把系统中所有文件信息写入数据库/var/lib/mlocate/mlocate.db
[root@zcwyou ~]# updatedb
查看以.txt结尾的文件:
[root@zcwyou ~]# locate *.txt
输出结果:
/root/abc.txt
/root/cisco1.txt
/root/cisco2.txt
/root/compress.txt
/root/cp1.txt
/root/cp2.txt
/root/cut.txt
/root/cut2.txt
/root/diff1.txt
/root/diff2.txt
/root/test.txt
/root/zcwyou.txt
5. grep命令查找文本内容
5.1 根据内容查找
显示所有以d开头的文件中包含test的行。
[root@zcwyou ~]# grep 'test' d*
显示在aa,bb,cc文件中匹配test的行。
[root@zcwyou ~]# grep 'test' aa bb cc
显示所有包含每行字符串至少有5个连续小写字符的字符串的行
[root@zcwyou ~]# grep ‘[a-z]\{5\}’ aa
显示/usr/src目录下的文件(不含子目录)包含test的行
[root@zcwyou ~]# grep test /usr/src
显示/usr/src目录下的文件(包含子目录)包含test的行
[root@zcwyou ~]# grep -r test /usr/src
在zcwyou.txt文件中查找整个单词,而不是字符串的一部分(如匹配’test’,而不是’tester123’),
[root@zcwyou ~]# grep -w test zcwyou.txt
不区分大小写地搜索。默认情况区分大小写
[root@zcwyou ~]# grep -i test zcwyou.txt
查找关键字test,列出包括test的文件名,在当前目录找
[root@zcwyou ~]# grep -l test *.txt
查找关键字test,列出不包括test的文件名,在当前目录找
[root@zcwyou ~]# grep -L test *.txt
5.2 以递归的方式查找符合条件的文件
在/var/log及其子目录里,查找带有shutdown关键字的文件
[root@zcwyou ~]# grep -r shutdown /var/log
5.3 反向查找
通过”-v”参数可以打印出不符合条件行的内容。
查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
[root@zcwyou ~]# grep -v test *test*
6. whereis命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis命令的使用实例:
查看pwd命令程序所有的位置以及说明文件所在的位置
[root@zcwyou ~]# whereis pwd
输出结果:
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz
7. which命令
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
[root@zcwyou ~]# which wget
输出结果:
/usr/bin/wget
8. type命令
查找wget程序的位置
[root@zcwyou ~]# type wget
输出结果:
wget is /usr/bin/wget
查找du程序的位置,使用选项-p,相当于which命令
[root@zcwyou ~]# type -p du
输出结果
/usr/bin/du
查找cd程序的位置,显示为builtin,即为Linux内置命令
[root@zcwyou ~]# type cd
输出结果表明,cd命令为系统集成命令。
cd is a shell builtin
查找ll程序的位置
[root@zcwyou ~]# type ll
输出结果表示,ll是ls -l的别名。
ll is aliased to `ls -l –color=auto’
[转帖]Linux查找文件6个高效工具的更多相关文章
- [转] Linux 查找文件内容
Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件g ...
- Linux 查找文件
find 查找目录 -name "文件名"find / -name "php.ini"locate 文件名locate php.ini 一:locate命令 l ...
- Linux 查找文件内容、替换
有的时候我们经常性的需要在 linux 某一个目录下查找那些文件里包含我们需要查找的字符,那么这个时候就可以使用一些命令来查找,比如说 grep 1.grep 查询 1.1. 主要参数 [option ...
- Linux 查找文件命令 find whereis locate
Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利 ...
- Linux查找文件夹下包含某字符的所有文件
Linux grep 命令用于查找文件里符合条件的字符串.grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示 ...
- Linux查找文件内容小技巧
目录 grep ag linux系统查找文件内容最常见的命令有grep和ag grep grep是比较常见的查找命令 # 在当前目录的py文件里查找所有相关内容 grep -a "broad ...
- Linux 查找文件的正确方式
Linux 系统中查找文件的命令有 which.whereis.locate 和 find 等,本文对这四条命令进行简单的介绍.列举了一些简单的使用方式. which 在 PATH 变量中定义的全部路 ...
- Linux查找文件、文件夹
https://www.jianshu.com/p/f3a46e5c96ba 查找目录:find /(查找范围) -name '查找关键字' -type d 查找文件:find /(查找范围) -na ...
- linux查找文件夹命令
查找命令: 查找根目录下查找文件夹名称叫www.91cnm.com的目录地址 find / -name www.91cnm.com -d 1 查找/var/www/目录下叫index.php的文件 f ...
随机推荐
- Redis配置文件中bind参数
前言 我们都知道,redis 的配置文件中,默认绑定接口是 127.0.0.1,也就是本地回环接口,所以是无法从外网连接 redis 服务的.如果想要让外网也能连接使用服务器上的 redis 服务,可 ...
- [CSP-S模拟测试]:走路(期望DP+分治消元)
题目传送门(内部题100) 输入格式 第一行两个整数$n,m$,接下来$m$行每行两个整数$u,v$表示一条$u$连向$v$的边.不保证没有重边和自环. 输出格式 $n-1$行每行一个整数,第$i$行 ...
- 使用vlc 或 ffmpeg发布RTP/UDP视频服务
一.FFmpeg 测试环境Centos 发布端: ffmpeg -re -stream_loop -1 -i test.ts -vcodec copy -acodec copy -f rtp_mpeg ...
- 学号 20175329 《Java程序设计》第10周学习总结
20175329 <Java程序设计>第十周学习总结 教材学习内容总结 线程与进程 进程时程序的一次动态执行过程.线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程. J ...
- 新版uni-app 在微信小工具调试遇到报错解决方案
问题描述:我在运行到微信小程序是运行报错打不开微信小程序报错如下图 结局方案:将微信小程序安全设置开启如下图
- pycharm创建.py文件时,自动添加头文件注释
File->settings->Editor->Code Templates->Python Script 添加以下代码: #!/usr/bin/env python # -* ...
- Oracle 12C 物理Standby 主备切换switchover
Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...
- GNU项目
目标在于建立一个完全相容于UNIX的自由软件环境.发展GNU系统的计划,最早由理查德•斯托曼在1983 年启动,它是自由软件基金会最早致力的目标.最近一个GNU系统版本,是于2011年4月1日释出的G ...
- -moz-box-shadow
css的box-shadow是用来添加边框阴影效果的. 属性值详解: 1.inset可选值,默认阴影在盒子外使用inset后,阴影在盒子内,即使指定边框或者透明边框,阴影依然存在. 2.<off ...
- [ubuntu]android SDK 与Gradle环境的安装与配置|搭建android基础开发/构建环境
系统环境: linux:ubuntu18 已配置jdk 环境变量 切换到root账户 sudo su 安装Android-sdk (0)准备工作 切换到/usr/local目录: /usr/local ...