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

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

文章目录

        • 前言
        • 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=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "rootfs" { print $2 }')
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)

更多相关:

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...

  • 在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下)     一、方法一:使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况; 二、方法二:使用快捷键; F7快捷键查看所有执行过的命令 F3:调出上一条执行过的命令,调出后直接回车即可执行; F...

  • 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法。 1、clear命令、这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。 2、Ctrl+l(小写的L)、这是一个清屏的快捷键,这个是笔者...

  • LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句 前提是,搜索已经使用的命令,否则是查不出来结果的。 ctrl+r 用途:反向搜索执行过的命令。(reverse-i-search) 1、任何目录下按住ctrl + r 2、输入历史命令中的字符串 ,比如 输入shut 会检索...

  • 刚开始接触linux,总有些简单的问题不知道怎么搞定,先将目前汇总的解决方法叫做"linux入门-1",后续在使用过程中逐步总结。   1. 连接 ADSL : sudo pon dsl-provider 断开 ADSL: sudo poff 查看 ADSL 状态: plog 2. dpkg 命令 dpkg 是 Debia...

  • 文章目录NVME 和 AHCI 性能比较NVME-CLI nvme工具使用1. 安装2. 命令综述3. 基本命令演示4. NVME 固件设备升级...

  • 顺序查找基本思想属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素。这是最基本的查找方法,也是时间复杂度最高的查找算法。在数据过多时,这种方法并不适用。代码实现分块查找基本思想属于顺序查找的改进方法,又叫索引顺序查找。将n个元素分成m块(m<=n),每个块中元素可以没有顺序,但是m个块之间是有序排列,所以...

  • 注:本文内容参考《35 Practical Examples of Linux Find Command》 网址:http://www.tecmint.com/35-practical-examples-of-linux-find-command/ Linux 查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数...

  • find 按时间查找 转载▼  分类: linuxShell日记 -mtime 修改时间-ctime 改变时间-atime 访问时间-mtime +5 至少5天之前修改过的文件,至少5天没修改过-mtime -5 5天之内修改过的文件-mtime 5  刚好5天前修改的文件  -perm 按权限查找 -perm  001 精确...

  • 前两篇 《程序员必知8大排序3大查找(一)》 《程序员必知8大排序3大查找(二)》 三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈) 一、顺序查找的基本思想: 从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到...

  •         Find从英语字面上的意思译过来是发现,找到的意思,它在linux中作为文件查找命令也十分形象,Find虽说只是个命令,但其功能非常强大。        好,下面来说说Find,先来说说它的基本语法格式:find [查找路径]  [查找标准]  [处理动作]查找标准:        -name 文件名称查找 ...