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

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

有问题评论区交流~

相关推荐
从零开始学习人工智能2 小时前
《8076 能通 9003 却超时?一次 Docker 容器跨网段排障小记》
运维·docker·容器
咕噜企业分发小米2 小时前
阿里云与华为云服务器哪个更利于人工智能?
服务器·阿里云·华为云
物联网软硬件开发-轨物科技2 小时前
【轨物新闻】轨物科技光伏清洁机器人智能控制和运维解决方案正式上线华为鲲鹏解决方案市场
运维·科技·机器人
一周困⁸天.2 小时前
DevOps
运维·devops
飞机火车巴雷特2 小时前
PyCharm通过跳板机连接隔离内网服务器
运维·服务器
峥嵘life2 小时前
Android16 EDLA 认证测试BTS过程介绍
android·java·linux
yenggd2 小时前
华为sr-mpls TE配置案例
网络·华为
yenggd2 小时前
华为+sr-mpls BE简单配置案例
运维·网络·华为
专注VB编程开发20年2 小时前
vb.net宿主程序通过统一接口直接调用,命名空间要一致
服务器·前端·.net