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

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

有问题评论区交流~

相关推荐
爱莉希雅&&&44 分钟前
Docker 部署 MySQL 双主双从同步架构详细笔记
linux·运维·数据库·mysql·docker·架构·主从同步
Alex艾力的IT数字空间8 小时前
在 Kylin(麒麟)操作系统上搭建 Docker 环境
大数据·运维·缓存·docker·容器·负载均衡·kylin
嵌入式学习和实践8 小时前
虚拟机 Ubuntu 磁盘扩容完全指南:从原理到实践,一步到位
linux·ubuntu·磁盘扩容
陳10308 小时前
Linux:进程间切换与调度
linux·运维·服务器
lcreek8 小时前
Linux 虚拟文件系统的建立与使用全过程解析
linux·虚拟文件系统·vfs
寒秋花开曾相惜9 小时前
(学习笔记)第四章 处理器体系结构
linux·网络·数据结构·笔记·学习
疏星浅月9 小时前
虚拟内存三大核心作用详解
linux·c语言·arm开发·嵌入式硬件
邂逅星河浪漫10 小时前
【银行内网开发-管理端】Vue管理端+Auth后台开发+Nginx配置+Linux部署(详细解析)
linux·javascript·css·vue.js·nginx·html·前后端联调
JJay.10 小时前
Android BLE 稳定连接的关键,不是扫描,而是 GATT 操作队列
android·服务器·前端
SilentSamsara10 小时前
TCP 三次握手:连接建立失败的那些坑
运维·服务器·网络·网络协议·tcp/ip