linux系统 find文件查找命令与grep文件内容查找命令
- find命令根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等
- grep根据文件的内容进行查找,会对文件的每一行按照给定的模式进行匹配查找
一.find 命令常用场景:
1.按照文件名查找
find / -name httpd.conf
在根目录下查找文件httpd.conf,表示在整个硬盘查找find /home -name httpd.conf
在/home目录下查找文件httpd.conffind /home -name '*server*'
在/home目录下查找文件名中含有字符串server的文件,使用通配符*(0或者任意多个)find . -name 'server*'
在当前目录下查找文件名开头是字符串server的文件
2.按照文件特征、属性查找
find / -amin -10
查找在系统中10分钟内访问的文件(access time)find / -atime -2
查找在系统中2天内访问的文件(access time)find / -mmin -5
查找在系统中5分钟内修改过的文件(modify time)find / -mtime -1
查找在系统中24小时内修改过的文件(modify time)- 备注:Linux系统中文件的三种时间属性
find / -size -100k
查找出小于100kb的文件(c:字节,w:双字,k:KB,M:MB,G:GB)find / -size +100M
查找出大于100M的文件find / -user mysql
查找在系统中属于mysql这个用户的文件,一般可以再加上组合条件,缩小范围查找find / -group hadoop
查找在系统中属于 group为hadoop的文件find / -empty
查找在系统中为空的文件或者文件夹
3.使用混合查找方式查找文件
一般组合参数有: -and(-a),-or(-o)
find /tmp -size +10M -and -mmin -5
在/tmp目录下查找大于在这里插入代码片10M并在5分钟内修改的文件find / -name *.server -or -name *.conf
在系统中查找以.server或.conf结尾的文件find /tmp ! -user hadoop
在/tmp目录中查找所有不属于hadoop用户的文件
4.find与xargs命令组合使用
xargs是给命令传递参数的一个过滤器,可以将前一个命令产生的输出作为后一个命令的参数
-
例如删除某些文件
find /opt/data -name '*.sql' |xargs rm -rf
; find产生的输出(/opt/data目录下的所有sql文件)作为rm的参数。 -
例如将指定类型文件打包
find /opt/data -name '*.txt' |xargs tar -czf 2019.tar.gz
将文件解压到/tmp/2019目录下用 命令:tar -zcvf 2019.tar.gz -C /tmp/2019
5.find与exec配合使用案例exec
选项后面跟要执行的命令或脚本,一个-exec
只能执行一个命令,而且必须在命令后面加上终结符,终结符有两个;
和+
shell将find到的文件逐个执行一次command命令。如果想让find到的文件一次性执行完command命令,可以使用+
号代替\;
一个find后面可以有多个-exec ommand命令,所以必须要有终结符分割 -
每天定时删除指定目录下的30天前的大于10M日志文件:
00 22 * * * find /home/infa/log -type f -name "*.log" -mtime +30 -size +10M -exec rm -rf {} \;
备注:其中{}
代表前面find查找出来的文件,配合rm -rf
指令,逐个删除查到的文件;-exec
参数后面跟command命令,它的终止一般以;
为结束标志的,分号是shell的命令分隔符,所以要加反斜杠转义下 -
清空日志文件:
find /home/infa/log -type f -name detail.log -exec "echo '' > {}" \;
-
查找文件移动到指定目录下:
find /home/infa/log -name *.log -exec mv {} /tmp/log \;
-
递归备份文件:
find /home/hadoop/ktl_wks -name file -exec cp {}{,.bak} \;
备注:cp filename{,.bak}
等同于cp filename filename.bak
把filename备份成filename.bak;另外大括号边是没有空格的,否则就不是扩展了。
二、grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
基本格式:grep 搜索字符串 [filename] 、grep 正则表达式 [filename]
注意:在输入要搜索的字符串时最好使用双引号;在模式匹配使用正则表达式时,注意使用单引号
grep 常用参数:
-a
:将 binary 文件以 text 文件的方式查找关键字
-c
:统计找到 ‘搜索字符串’ 的次数
-i
:忽略大小写的不同,所以大小写视为相同
-n
:显示匹配字符串的行号
-v
:反向选择,即显示出没有 ‘搜索字符串’ 内容的那一行
–color=auto
:将找到的关键词部分加上颜色
grep "error" 201905*.log
输出201905月所有log文件中包含error的行grep -c "password" info.txt
输出匹配行的计数,输出文档中含有password字符的行数grep -n"password" info.txt
显示所有匹配password的行和行号grep -vn"password" info.txt
输出所有不包含password的行grep -i "ab" test.sh
输出所有含有ab或AB的字符串的行,忽略大小写grep '^[^username]' info.txt
不匹配行首是username的行
^
匹配正则表达式的开始行,^test
和\<test
匹配以test开头的内容
$
匹配正则表达式的结束行,test$
和test\>
匹配以test结尾的内容
^$
匹配空行
\<
从匹配正则表达式的行开始
>
到匹配正则表达式的行结束
[ ]
单个字符;如[A] 即A符合要求
[ - ]
范围 ;如[A-Z]即A,B,C一直到Z都符合要求
.
所有的单个字符
\
忽略正则表达式中特殊字符的原有含义
在linux的命令中,查看某个进程状态时使用grep ps -ef|grep dtllst