Linux中常见的文件查询命令有5个

which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;

type:用于区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。type命令其实不能算查找命令;

whereis:只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s);

locate:相当于find -name,可快速查找文件;

find:最常用和最强大的查找命令,可以用它找到任何想找的文件。

注意:

通常find不很常用,因为速度慢!

常都是先使用whereis或者locate来检查,当真的找不到了,才用find查找。

是因为whereislocate是利用数据库来查找数据,所以相当快速,而且没有实际查询硬盘,比较节省时间。

whereislocate寻找的数据是由已创建的数据 /var/lib/ 中查找。但是数据库的更新默认是每天更新一次(不同系统可能会有差异),所以当新建文件或删除文件后去查找该文件,whereislocate会告诉你文件“not found”,因为必须更新数据库了。

要手动更新数据库的方法也很简单,直接输入updatedb即可。updatedb命令回去读取/etc/updatedb.conf中的配置,然后去硬盘里面进行查找文件名操作,最后更新整个数据库文件。

1、which命令

[root @localhost ~]#which [-a] command
参数解析:
-a:将所有由PATH目录中可以找到的目录均列出来
[root@localhost Test]# which ifconfig
/sbin/ifconfig
[root@localhost Test]# su - rhx
[rhx@localhost ~]$ which ifxonfig
/usr/bin/which: no ifxonfig in (/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/rhx/bin)

为什么会显示不存在呢?这是因为which根据用户所设置的PATH变量内的目录去查找可执行文件,所以不同的用户所设置的PATH设置内容就不一样了。

2、whereis

文件查找时优先使用where和locate命令,当找不到的时候才会使用find,因为find命令查找速度较慢,因为find命令直接查找硬盘,而whereis命令使用的查找方式不同,Linux将系统内的所有文件都记录在一个数据库文件中,使用whereis 或者locate 命令会以此数据库进行查找,但是如果数据库没有更新,则会出现新建文件查询不到的情况发生

[root @localhost ~]#where [-bmsu] command
参数解析:
-b :只查找二进制格式的文件
-m :只查找在说明文件manual路径下的文件
-s :只查找source文件
-u :查找不在上述三个选项当中的其他特殊文件
[root@localhost rhx]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@localhost rhx]# su - rhx
[rhx@localhost ~]$ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

发现whcih命令一般普通用户找不到的ifoncifg,使用whereis 命令可以找到,这是因为系统中存在ifconfig这个文件,但是普通用户的PATH中并没有加入到/sbin

3、locate

[root @localhost ~]#locate [-ir] command
参数解析:
-i :忽略大小写
-r :后面可接正则表达式的显示方式

注意:whereis 和 locate 命令查找的数据是由 创建的数据库/var/lib/mlocate/里面的数据所查找的

但是数据库的更新是一天/次,因此在未更新之前,找不到新建的文件,通过手动进行更新

[root@localhost ~]# updatedb

updatedb 命令回去读取/etc/updatedb.conf 这个文件的设置,然后再去硬盘里进行查找文件名的操作,接着进行文件整个数据库文件的更新

4、find

find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作。下面来看看find命令的各种应用场景和基本用法。

[root @localhost ~]#find [PATH] [option] [option] [action]
[root@localhost ~]# find . print

.指定当前目录,.. 指定父目录。这是Unix文件系统中的约定用法。

-print指明打印出匹配文件的文件名(路径)。当使用 -print时,'\n'作为用于对输出的文件名进行分隔。就算你忽略-print,find命令仍会打印出文件名。-print0指明使用'\0'作为匹配的文件名之间的定界符。当文件名中包含换行符时,这个方法就有用武之地了。find 非常强大,下面一一介绍

a、根据文件名或者正则表达式搜索

选项–name的参数指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用。*.txt能够匹配所有以.txt结尾的文件名。选项 -print在终端中打印出符合条件(例如 -name)的文件名或文件路径,这些匹配条件通过find命令的选项给出。

[root@localhost Test]# find /home/ -name "*.txt" -print
/home/rhx/Test/tmp.txt

find命令有一个选项 -iname(忽略字母大小写),该选项的作用和 -name类似,只不过在匹配名字时会忽略大小写

.如果想匹配多个条件中的一个,可以采用OR条件操作

[rhx@localhost Test]$ find . \( -name "*.txt" -o -name "*.sh" \) -print

这里由于使用转义,将括号进行转义,括号左右两边需要加上括号,否则会出现如下错误

\(以及\)使用转义,将 -name "*.txt" -o -name "*.pdf"视为一个整体

选项-path的参数可以使用通配符来匹配文件路径。-name总是用给定的文件名进行匹配。-path则将文件路径作为一个整体进行匹配。

[rhx@localhost Test]$ find /home -path "*/slynux/*" -print

正则表达式是通配符匹配的高级形式,它可以指定文本模式。我们借助这种模式来匹配文本及进行打印。使用正则表达式进行文本匹配的一个典型例子就是从一堆文本中解析出所有的E-mail地址。E-mail地址通常采用name@host.root这种形式,所以可以将其一般化为[a-z0-9]+@[a-z0-9]+.[a-z0-9]+。符号+ 指明在它之前的字符类中的字符可以出现一次或多次。

b、根据文件名或者正则表达式搜索

[rhx@localhost Test]$ find . ! -name "*.txt" -print
.
./SleepingProgram.sh
./1.3.2.sh
./save
./save/SleepingProgram.sh
./save/DEBUG.sh
./save/ProgramRunningTime.sh
./ProgramRunningTime.sh
./sh1.3.sh
./1.11.1.sh
./arr.sh
./CharacterSeparator.sh
./Func.sh

c、根据目录深度进行搜索

find命令在使用时会遍历所有的子目录。可以采用深度选项-maxdepth和 -mindepth来限制find命令遍历的目录深度。大多数情况下,只需要在当前目录中进行搜索,无须再继续向下查找。对于这种情况,使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为1;当需要向下两级时,深度可以设置为2;其他情况可以依次类推。可以用-maxzdepth指定最大深度。与此相似,也可以指定一个最小的深度,告诉find应该从此处开始向下查找。如果想从第二级目录开始搜索,那么就使用 -mindepth设置最小深度。使用下列命令将find命令向下的最大深度限制为1:

[rhx@localhost Test]$ find . -maxdepth 1 -name "s*" -print

该命令列出当前目录下的所有文件名以s打头的文件。即使有子目录,也不会被打印或遍历。与之类似,-maxdepth 2最多向下遍历两级子目录。-mindepth类似于 -maxdepth,不过它设置的是find开始遍历的最小深度。这个选项可以用来查找并打印那些距离起始路径一定深度的所有文件。例如,打印出深度距离当前目录至少两个子目录的所有文件:

[rhx@localhost Test]$ find . -mindepth 2 -name "s*" -print

d、根据文件类型进行搜索

Unix类系统将一切都视为文件。文件具有不同的类型,例如普通文件、目录、字符设备、块设备、符号链接、硬链接、套接字以及FIFO等。

-type可以对文件搜索进行过滤。借助这个选项,我们可以为find命令指明特定的文件匹配类型。

[rhx@localhost Test]$ find . -type d -print
.
./save

e、根据文件时间进行搜索

Linux系统下,每一个文件都有三个时间戳,分别是atime,ctime,mtime

atime:访问时间,用户最近一次访问该文件的时间

ctime:文件属性(权限,所有者)最后一次变换的时间

mtime:修改时间,文件内容最后一次被修改的时间

三个时间中以mtime使用较多,这就mtime进行讲解,其他的相同

-mtime n:n为数字表示n天前的那一天被修改的文件,注意 0 表示24小时之内修改内容的文件

-mtime +n:  列出在n天之前(不包含n本身)被更改的文件名

-mtime -n:  列出n天之内(不包含n本身)被更改多的文件名

-newer file:file 是一个已经存在的文件,列出比 file 文件还要新的文件名

[rhx@localhost Test]$ find . -mtime 0
.
./SleepingProgram.sh
./1.3.2.sh
./test.txt
./exam.txt
./save
./save/SleepingProgram.sh
./save/DEBUG.sh
./save/ProgramRunningTime.sh
./ProgramRunningTime.sh
./sh1.3.sh
./1.11.1.sh
./arr.sh
./CharacterSeparator.sh
./Func.sh
./tmp.txt

f、根据文件大小进行搜索

根据文件大小进行文件筛选

[rhx@localhost Test]$ find . -type f -size +2k    #大于2k
[rhx@localhost Test]$ find . -type f -size -2k    #小于2k
[rhx@localhost Test]$ find . -type f -size 2k     #等于2k

g、根据文件权限和所有者进行搜索

-uid n : n为数字,这个数字是用户的账号ID,即是UID,这个UID记录在/etc/passwd中与账号名称对应的数字
-gid n:  n为数字,这个数字是用户组名的ID,即是GID,这个GID记录在/etc/group
-user name :name 为用户名,如 root用户,普通用户 rhx
-nouser :寻找文件的所有者不存在 /etc/passwd 中
-nogroup :寻找文件的用户组不在/etc/group在的文件
[rhx@localhost Test]$find /home -user rhx           #找出用户在系统中的所有文件,很常用[rhx@localhost Test]$find /home -nouser             #找出不属于任何人的文件

-perm mode:查找文件权限等于mode的文件
[rhx@localhost Test]$find . -type f -name "s*" ! -perm 777 -print 

h、执行的其他操作

-exec command:其中command为其他的命令,-exec 后面可以再接其他命令来处理查找的结果
-print :将结果打印到屏幕上这个操作时默认的操作,因此不写也会打印在屏幕上

注意:-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号 是不可缺 少 的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠进行转义 即  \;{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名.

[rhx@localhost ~]$ find . -type f -size -2k -exec ls -l {} \;

该语法较为特殊,这里一一解析:

{} 表示由 find 查找的内容,其结果会放置在 {} 中

-exec ls -l  {} \;是关键字,表示 find  其他命令的开始(-exec)一直到结束( \; ),这中间就是其他

例如将查找到的*.sh文件存放到一个新文件 all_sh_files.txt  中

[rhx@localhost Test]$ find . -type f -name "*.sh" -exec cat {} \;>all_sh_files.txt

Linux之文件查找命令相关推荐

  1. Linux 执行文件查找命令 which 详解

    某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which  查看可执行文件的位置 whereis 查看文件的位置 locate   配合数据库查看文件位置 find   实际搜寻硬盘查 ...

  2. Linux下文件查找命令find笔记

    在Linux命令下如果需要快速自己系统所需要处理的文件,可以通过find命令快速进行检索. 如果想在某个路径下查找相应的文件可以执行如下命令: find path -name filename # p ...

  3. linux中文件查找命令

    1.find 最强大的查找命令,可以查找任何文件:命令格式如下: find <指定目录> <指定条件> <指定动作> - <指定目录>: 所要搜索的目录 ...

  4. Linux shell: 文件查找命令find,xargs详述 转载

    总结:zhy2111314 来自:LinuxSir.Org 整理:北南南北 摘要: 本文是find 命令的详细说明,可贵的是针对参数举了很多的实例,大量的例证,让初学者更为容易理解:本文是zhyfly ...

  5. linux j查找文件位置,Linux下的文件查找命令——find

    Linux下几个常见的文件查找命令: which       查看可执行文件的位置 whereis    寻找特定文件,查看文件的位置 locate       配合数据库查看文件位置 find    ...

  6. (转载)linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令 转载于和感谢:linux下的find文件查找命令与grep文件内容查找命令 目录 1.前言 1.1 find命令和grep命令的区别 2. ...

  7. Linux文件查找命令find,xargs详述

    Linux文件查找命令find,xargs详述 总结:zhy2111314 来自:LinuxSir.Org 整理:北南南北 摘要: 本文是find 命令的详细说明,可贵的是针对参数举了很多的实例,大量 ...

  8. linux 查找只读文件夹,Linux系统中查找命令find的使用方法(二)

    今天达内Linux培训小编要继续跟大家分享关于Linux系统中中查找命令find的使用方法的文章.在上文中小编提到,Linux查找命令是Linux系统中很重要也是很常用的命令之一.Linux的查找命令 ...

  9. linux进入文件全文搜索命令,Linux 文件查找命令详解

    大家好,我是"孤云幕雨":祝大家中秋快乐,今天给大家带来的是<Linux文件查找命令> 一.locate:依赖于事先构建的索引 v依赖于事先构建的索引:索引的构建是在系 ...

最新文章

  1. 【译】Spring 官方教程:使用 Restdocs 创建 API 文档
  2. (视觉和激光传感器)SLAM 做室内GPS与室外真实GPS在无人机上的对比
  3. MySQL作为Kubernetes服务,可从WildFly Pod访问
  4. java alarm api_JAVA抽象类及接口使用方法解析
  5. 《Android游戏编程入门经典》——14.4节问与答
  6. weiPe系统启动盘还原
  7. (十)stm32 GPIO口复用,重映射 RCC_APB2Periph_AFIO
  8. 2021-7-20 Cityscape 数据集从19分类到4分类BiSeNetv1-v2训练验证和测试一条龙
  9. 张三丰是小龙女的儿子的详细证明及理论依据(转)
  10. sphinx安装及使用
  11. iOS性能优化之耗电量
  12. 【转载】API:简单实现多人聊天室
  13. Matlab使用高阶求解器解决天体力学问题
  14. system pause
  15. 红黑树进阶—左倾红黑树(LLBR)介绍
  16. linux 视频采集软件,视频采集、截图多媒体处理工具FFmpeg
  17. 文字,Logo到模型制作详解
  18. 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》导读
  19. 2022-08-11 EasyPoi如何导出数据量较大的Excel
  20. 开发汤姆猫app(没有语音只有点击)

热门文章

  1. js中如何通过身份证号计算出生日期和年龄
  2. Python函数之初体验
  3. ACM 进阶计划~~转
  4. 用java程序将GBK字符转成UTF-8编码格式(转)
  5. nrf51822蓝牙芯片ble_app_proximity程序总结
  6. python解析并读取PDF文件:函数总结
  7. ios多线程开发的常用三种方式
  8. 源代码编译安装Apache2
  9. 《研磨设计模式》chap9 原型模式Prototype
  10. 区块链BaaS云服务(8)京东 智臻链