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 操作 {} \;

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

有问题评论区交流~

相关推荐
用户3946235365243 分钟前
Uboot - DM框架
linux
liulilittle4 分钟前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
烁34723 分钟前
Docker
运维·docker·容器
IT WorryFree1 小时前
AsciiDoc + Antora开局
运维
网络中的夜鹰1 小时前
轩辕镜像一键安装Docker和Docker Compose脚本
运维·docker·容器
27669582921 小时前
泡泡玛特app 腾讯企业加固/支付宝加固脱修frida rpc调用
网络·网络协议·rpc·frida·泡泡玛特·ppmt·泡泡玛特app-rpc调用
x***r1511 小时前
.NET 10 SDK 安装教程(dotnet-sdk-10.0.100-win-x64详细步骤)
java·服务器·前端
鹤落晴春1 小时前
RH124问答5:管理本地用户和组
linux·运维·服务器
其实防守也摸鱼2 小时前
软件安全与漏洞--Windows底层原理与软件逆向工程基础
linux·网络·数据库·算法·安全·安全架构·软件安全与漏洞
薛定猫AI2 小时前
【深度解析】OpenRouter Fusion API 技术拆解:多模型融合架构的能力边界与工程实践
网络·架构