Linux文件查找:find和locate命令入门

Linux文件查找:find和locate命令入门

服务器上找文件,不知道在哪个目录?

别一个个目录翻了,用find和locate命令快速定位。

find命令

find是最强大的查找命令,可以按各种条件搜索。

基本用法:

bash 复制代码
find 目录 -name "文件名"

例子:

bash 复制代码
# 在当前目录及子目录找所有.log文件
find . -name "*.log"

# 在/var目录找nginx.conf
find /var -name "nginx.conf"

# 忽略大小写
find /home -iname "readme.md"

按类型查找

bash 复制代码
# 只找文件
find /var -type f -name "*.log"

# 只找目录
find /home -type d -name "config"

# 只找链接
find /usr -type l

类型参数:

  • f:普通文件
  • d:目录
  • l:符号链接

按时间查找

bash 复制代码
# 7天内修改过的文件
find /var/log -mtime -7

# 7天前修改的文件
find /var/log -mtime +7

# 最近24小时修改的文件
find /var/log -mtime 0

# 最近1小时修改的文件
find /var/log -mmin -60

时间参数:

  • mtime:修改时间(天)
  • mmin:修改时间(分钟)
  • atime:访问时间
  • ctime:状态改变时间

按大小查找

bash 复制代码
# 大于100M的文件
find /home -size +100M

# 小于1M的文件
find /home -size -1M

# 刚好100M的文件
find /home -size 100M

# 找大文件并显示大小
find /home -size +100M -exec ls -lh {} \;

大小单位:

  • c:字节
  • k:KB
  • M:MB
  • G:GB

找到后执行操作

bash 复制代码
# 删除7天前的日志
find /var/log -name "*.log" -mtime +7 -delete

# 修改权限
find /var/www -type f -exec chmod 644 {} \;

# 显示详细信息
find /home -name "*.txt" -exec ls -l {} \;

# 移动文件
find . -name "*.bak" -exec mv {} /backup/ \;

组合条件

bash 复制代码
# 同时满足(-a 或直接连写)
find /var -name "*.log" -size +10M

# 满足其一(-o)
find /home -name "*.jpg" -o -name "*.png"

# 取反(!)
find /var -type f ! -name "*.log"

实用场景

找大文件清理磁盘:

bash 复制代码
find / -type f -size +500M 2>/dev/null | head -20

找最近修改的文件:

bash 复制代码
find /var/www -type f -mmin -30

清理临时文件:

bash 复制代码
find /tmp -type f -mtime +3 -delete

批量改权限:

bash 复制代码
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

locate命令

locate比find快很多,但需要先建立索引。

安装:

bash 复制代码
# Ubuntu
apt install mlocate

# CentOS
yum install mlocate

更新索引:

bash 复制代码
updatedb

使用:

bash 复制代码
locate nginx.conf

几乎秒出结果,比find快得多。

缺点: 索引不是实时的,新文件可能搜不到,需要先updatedb。

find vs locate

特点 find locate
速度 慢(实时搜索) 快(查索引)
实时性 实时 需要更新索引
条件 支持各种条件 只能按名称
操作 可以-exec执行操作 只能查找

选择:

  • 知道大概位置,用find
  • 全盘搜索文件名,用locate
  • 需要按条件过滤,用find
  • 需要对结果执行操作,用find

which和whereis

找命令在哪:

bash 复制代码
# 找命令的位置
which nginx
# /usr/sbin/nginx

# 找命令、源码、手册的位置
whereis nginx
# nginx: /usr/sbin/nginx /etc/nginx /usr/share/man/man8/nginx.8.gz

远程文件搜索

有时候需要在多台服务器上找文件,我用星空组网把服务器连起来,批量搜索:

bash 复制代码
for ip in 10.26.1.{10..15}; do
    echo "=== $ip ==="
    ssh root@$ip "find /var/log -name 'error.log' -size +100M"
done

比一台台登录快多了。

命令速查

场景 命令
按名称找 find /path -name "*.log"
按大小找 find /path -size +100M
按时间找 find /path -mtime -7
只找文件 find /path -type f
只找目录 find /path -type d
找到后删除 find /path -name "*.tmp" -delete
快速定位 locate 文件名

小结

find命令核心用法:

bash 复制代码
find 目录 -name "名称" -type 类型 -size 大小 -mtime 时间 -exec 操作 {} \;

记住最常用的几个参数就够日常用了。

有问题评论区交流~

相关推荐
开开心心就好7 小时前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
惊讶的猫7 小时前
OpenFeign(声明式HTTP客户端)
网络·网络协议·http·微服务·openfeign
火车叼位7 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
css趣多多7 小时前
add组件增删改的表单处理
java·服务器·前端
予枫的编程笔记7 小时前
【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖
linux·sed·grep·awk·shell编程·文本处理三剑客·管道命令
Sheep Shaun7 小时前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区
Tfly__8 小时前
在PX4 gazebo仿真中加入Mid360(最新)
linux·人工智能·自动驾驶·ros·无人机·px4·mid360
野犬寒鸦8 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
陈桴浮海8 小时前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible
迎仔8 小时前
06-存储设备运维进阶:算力中心的存储管家
运维