Linux中find和grep的所有用法

1、find命令—查找文件和目录

find用于在文件系统中搜索文件和目录,支持按名称、大小、时间、权限等条件进行筛选。

基本语法
find [搜索路径] [搜索条件] [操作]
  • [搜索路径]:指定要搜索的目录(如 /home. 代表当前目录)。
  • [搜索条件]:可以是文件名、大小、类型、修改时间等。
  • [操作]:对找到的文件执行操作,如删除、移动等。
常见选项
1.1按名称查找
find /path -name "filename"
查找example.txt文件(区分大小写):
find /home -name "example.txt"
查找example.txt文件(忽略大小写):
find /home -iname "example.txt"
查找多个扩展名的文件:
find /home -type f \( -name "*.jpg" -o -name "*.png" \)
1.2按文件类型查找
find /path -type [d/f/l]
  • -type f:普通文件
  • -type d:目录
  • -type l:符号链接
查找所有目录:
find /etc -type d
查找所有符号链接:
find /home -type l
1.3按大小查找
find /path -size [+/-]N
  • +N:大于 N
  • -N:小于 N
  • N:等于 N
查找 大于100MB的文件:
find / -type f -size +100M
查找小于10KB的文件:
find / -type f -size -10k
1.4按修改时间查找
find /path -mtime [+/-]N
  • +N:N 天前修改
  • -N:N 天内修改
查找过去7天内修改的文件:
find /var/log -type f -mtime -7
查找30天前修改的文件:
find /etc -type f -mtime +30
1.5按权限查找
find /path -perm mode
查找权限为777的文件:
find /home -type f -perm 0777
查找拥有+x执行权限的文件:
find /usr/bin -type f -executable
1.6查找并执行操作
删除所有.log文件:
find /var/log -name "*.log" -delete
查找并批量删除:
find /home -type f -name "*.tmp" -exec rm -f {} \;
查找并批量移动:
find /home -type f -name "*.jpg" -exec mv {} /backup/ \;

在/home 目录及其子目录下查找所有.jpg文件,并将它们移动到 /backup/目录。

2、grep命令—搜索文本

grep用于在文本文件中搜索特定的字符串或正则表达式。

基本语法

grep [选项] "模式" 文件名
  • 模式:可以是普通字符串,也可以是正则表达式。
  • 文件名:要搜索的文件。
常见选项
2.1基本搜索
grep "word" file.txt
在log.txt中查找"error":
grep "error" log.txt
2.2忽略大小写
grep -i "word" file.txt
查找warning ,区分大小写 :
grep "warning" syslog.txt
2.3显示行号
grep -n "word" file.txt
查找"error"并显示行号:
grep -n "error" log.txt
2.4递归搜索
grep -r "word" /path
在 /var/log 目录下所有文件中搜索 "failed":
grep -r "failed" /var/log
2.5使用正则表达式
grep -E "regex" file.txt
匹配error或warning:
grep -E "error|warning" long.txt
匹配所有以 "error" 开头的行
grep -E "^error" log.txt
2.6仅显示匹配的文件
grep -l "word" *.txt
列出包含 "error" 的文件:
grep -l "error" *.log

这个命令的作用是在当前所有的.log文件中搜索包含"error"的行,并仅显示包含匹配内容的文件名

参数解析:

  • grep:用于搜索文件内容的命令。
  • -l(小写 L):仅显示匹配的文件名,不显示匹配的具体内容。
  • "error":要搜索的字符串(区分大小写)。
  • *.log:指定搜索范围,匹配所有以 .log 结尾的文件。
2.7反向匹配(排除匹配行)
grep -v "debug" file.txt

"debug" 就是要排除的内容的行 ,在 file.txt 中查找 不包含 "debug" 的行,并显示这些行。

  • -vinvert match,反向匹配):排除包含匹配内容的行,只显示 不匹配 的行。
2.8统计匹配次数
grep -c "word" file.txt
统计在log.txt文件中 "error" 出现的次数:
grep -c "error" log.txt

3.find + grep 组合使用

查找.log 文件并在其中搜索 "error":
find /var/log -name "*.log" | xargs grep "ERROR"
查找/etc目录下包含 "root" 的所有文件:
find /etc -type f -exec grep -l "root" {} \;

        我们来拆解一下这个有点长的命令 :

find /etc -type f 
  • find /etc:在 /etc 目录及其子目录中搜索。
  • -type f:只匹配普通文件(即排除目录、符号链接等)。

这部分的作用是找到 /etc 目录下面的所有普通文件。

-exec grep -l "root" {} \ ;
  • -exec:对 find 命令找到的每个文件执行后面的命令。
  • grep -l "root" {}
    • grep -l "root":搜索文件中是否包含 "root",并且仅显示匹配文件的文件名(不显示匹配内容)。
    • {}:代表 find 找到的每个文件。每找到一个文件,{} 就会被替换为该文件名。
  • \;:结束 -exec 命令,并告知 find 命令的参数列表已经结束。

总结:

命令作用示例
find查找文件和目录find /home -name "*.txt"
grep在文件内容中搜索grep "error" log.txt
find + grep结合使用`find /var/log -name "*.log"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值