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
:小于 NN
:等于 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" 的行,并显示这些行。
-v
(invert 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" |