linux find与grep命令

linux系统 find文件查找命令与grep文件内容查找命令

  • find命令根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等
  • grep根据文件的内容进行查找,会对文件的每一行按照给定的模式进行匹配查找

一.find 命令常用场景:

1.按照文件名查找

  • find / -name httpd.conf 在根目录下查找文件httpd.conf,表示在整个硬盘查找
  • find /home -name httpd.conf  在/home目录下查找文件httpd.conf
  • find /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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值