热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux文件查找命令集:find,locate,wheres,which,type

文章目录前言find命令命令格式:常用选项:举例使用locate命令命令格式使用实例whereis命令使用过程:which命令type命令前言在lin


文章目录

        • 前言
        • find命令
          • 命令格式:
          • 常用选项:
          • 举例使用
        • locate命令
          • 命令格式
          • 使用实例
        • whereis命令
          • 使用过程:
        • which命令
        • type命令


前言

在linux系统中一切皆文件,此时我们想要从海量的文件中快速定位中我们想要的文件来,需要指定的命令来操作。以下为收集的各个命令,以及其优劣,使用方式。


find命令

centos下:rpm包findutils-4.5.11-3.el7.x86_64
find是最常用也是最强大的查找命令,它可以查找任何类型的文件。


命令格式:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
在这里插入图片描述


常用选项:

  • -name:按文件名来查找文件
  • -user:按照文件的属主来查找文件
  • -group:按照文件所属的组来查找文件
  • -perm:按照文件权限来查找文件
  • -prune:不在当前指定目录中查找

举例使用

已知文件stdio.h存放在/usr大目录下的多个子目录,cd /usr目录下
find -name "stdio.h" 表示在当前目录查找文件名称为stdio.h的文件
在这里插入图片描述
find . -path ./include -prune -o -name "stdio.h" 在当前目录查及其子目录查找名称为stdio.h的文件,但是跳过include目录;
这里的-o参数表示或关系,即两者中只要有一个表达式满足true即可输出;
-a-not,-a表示只要有一个表达式不满足则不输出,-not表示对查找的结果进行取反
在这里插入图片描述
find . -path ./include -o -name "stdio.h" -print 将匹配到的内容文件输出到标准输出中
在这里插入图片描述
find / -user ceph 查找文件所有者为ceph的文件
find / -nouser -a -nogroup 查找系统中不属于任何人,任何用户组的文件(对于该部分文件需要保持警惕)
在这里插入图片描述
find /usr -mtime -4查找文件更新日时在距现在时刻4天以内的文件
find /usr -mtime +4 查找文件更新日时在距现在时刻5天以上的文件
find /usr -mtime 4查找文件更新日时在距现在时刻4天以上5天以内的文件

find / -type [c] 根据文件属性进行查找
其中[c]包括如下属性:


  • p 管道文件/run/systemd/initctl/fifo
  • b block块设备文件,类似与/dev/sdb磁盘盘符这种
  • c 字符设备,类似于/dev/tty63
  • d directory 目录文件
  • f regular file 普通文件
  • l symbolic link 链接文件
  • s socket 套接字文件

find / -size +10M 按照文件大小进行查找,+表示大于10M的文件,-表示小于10M的文件,同时还支持K,G,b(512B的块大小)的单位查找


locate命令

centos下:rpm包为mlocate-0.26-5.el7.x86_64
locate命令实际是"find -name"的另一种写法,但是查找方式跟find不同,它比find快得多。
因为它不搜索具体目录,而是在一个数据库(/var/lib/mlocate/mlocate.db)中搜索指定的文件。次数据库含有本地文件的所有信息,此数据库是linux系统自动创建的,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,默认情况下为每天更新一次,所以用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件之前手动的用updatedb命令更新数据库。


命令格式

locate [OPTION]... [PATTERN]...
在这里插入图片描述
主要使用的参数含义如下:


  • -A 打印所有匹配到的文件
  • -b 精确匹配需要查找的文件,即如果文件命中包含我们要查找的则不打印
  • -c 仅打印匹配到文件个数
  • -d --database DBPATH 指定自己的文件数据库
  • -e 打印当前系统存在的想要查找的文件
  • -i 忽略匹配出来的文件的差异
  • -m 已经被忽略了,为了向后兼容
  • -l count 或者 -n count 限制输出的条数
  • -r 支持普通的正则匹配,类似locate -r ceph-osd.[0-9] 查找ceph-osd.后面有一个数字的文件
  • -w 精确匹配,默认不加也是精确匹配

使用实例

这里关于参数详细的使用就不多说,以上都已经提到
这里简单说一下locate的正则匹配,基本的正则符号参考正则符号
举例:
locate -r ceph-osd.[0-9].log$ 查找以包含ceph-osd的字符串,且在ceph-osd.和.log之间有一个数字,且以log字符串结尾的文件
在这里插入图片描述
我们在使用locate的很多时候发现一个新的文件locate不到,关于locate命令的基本查找过程上面也已经提到,因为locate的文件获取是从操作系统定时更新的数据库中获取,但是新的文件可能还没有更新到数据库(还没有被系统设置的定时任务去更新数据库),此时我们需要手动更新以下该数据库。
关于mlocate.db数据库的更新任务在路径为/etc/cron.daily/mlocate中,内容如下

#!/bin/sh
nodevs=$(renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"

我们做出如下测试

[root@node2 ~]# echo "i am a man" >test.cron
[root@node2 ~]# locate test.cro
[root@node2 ~]# updatedb 手动跟新数据库
[root@node2 ~]# locate test.cron 手动更新即可发现我们创建的文件已经存在
/root/test.cron

whereis命令

centos下的rpm包util-linux-2.23.2-26.el7.x86_64
whereis命令只能用于搜索二进制文件(-b)、源代码文件(-s)、说明文件(-m)。如果省略参数则返回所有的信息
使用起来也是非常简单


使用过程:

[root@node2 ~]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -b locate
locate: /usr/bin/locate
[root@node2 ~]# whereis -m locate
locate: /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -s locate
locate:[root@node2 ~]#

该命令能够方便编译机上的组件以及对应源码的查找


which命令

which命令是在PATH变量指定的路径中搜索指定的系统命令的位置。用echo $PATH可显示当前PATH变量的值

[root@node2 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/root/perl5/bin:/b_iscsi/bn_cli:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@node2 ~]# which locate
/bin/locate

type命令

type命令主要用于区分一个命令到底是shell自带的还是外部独立的二进制文件提供的。如果是shell自带的则会提示此命令为shell buildin,否则会列出命令的位置。例如:cd为shell自带的命令,当用which查找时,which会按照PATH变量设置的路径进行搜索,如果不是shell自带命令,则结果会显示no cd in...;用type cd则显示cd为shell buildin命令。ssh不是shell自带命令,用type时会显示ssh的路径。

[root@node2 ~]# type cd
cd is a shell builtin
[root@node2 ~]# type find
find is hashed (/bin/find)

推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • 用聪明的方式学习 Vim
    来自量子位Vim难学难用?但事实是,它依旧受许多程序员的欢迎。或许,只是你的「打开方式」不对。最近,在GitHub上便出现了 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 动手写一个OpenVPN的wrapper来优化OpenVPN性能
    动手写一个OpenVPN的wrapper来优化OpenVPN性能 ... [详细]
author-avatar
mobiledu2502899157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有