热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Linux之文件查找命令

Linux中常见的文件查询命令有5个which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果;type:用于区分某个命令到底是由shel

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 :将结果打印到屏幕上这个操作时默认的操作,因此不写也会打印在屏幕上
[rhx@localhost ~]$ find . -type f -size -2k -exec ls -l {} \;

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

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

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


推荐阅读
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • 对于初次购买阿里云服务器的新手用户来说,如何高效地利用服务器资源并成功部署网站是一个重要的课题。本文将详细指导您完成从购买服务器到网站上线的六个关键步骤。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文详细探讨了 HAProxy 的基本概念及其与 LVS(Linux Virtual Server)的比较,特别是在内核空间与用户空间的工作差异。文章还深入介绍了 HAProxy 独有的数据结构——弹性二叉树,以及其在高并发场景下的表现。 ... [详细]
  • 当Ubuntu虚拟机的存储空间不足时,可以通过VMware轻松地为其添加新的硬盘。本文详细介绍了从关闭虚拟机、添加新硬盘到分区、格式化及挂载整个过程的操作步骤。 ... [详细]
  • 本文介绍了如何使用Workman框架构建一个功能全面的即时通讯系统,该系统不仅支持一对一聊天、群组聊天,还集成了视频会议和实时音视频通话功能,同时提供了红包发送等附加功能。 ... [详细]
  • 本文探讨了Python的csv模块在不同操作系统上生成文件时,默认使用DOS风格的行尾字符(即'')的问题,并提供了如何修改这一行为的方法。 ... [详细]
  • 本文介绍了如何将Linux系统中的YUM源更换为阿里云镜像源,包括网络连通性测试、原YUM源的移除、阿里云YUM源的配置以及缓存的更新等步骤。 ... [详细]
  • FTP作为一种传统的文件传输协议,广泛用于不同设备间的文件交换。然而,随着网络安全需求的提升及传输效率的要求,选择合适的FTP客户端变得尤为重要。本文将介绍如何利用WinSCP这款强大且安全的工具,实现两台电脑之间的文件高效传输。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 面对快应用开发时需要获取摘要值的需求,但官方API并未直接提供相应支持。通过探索发现,利用第三方加密库crypto-js可有效解决此问题。本文将详细介绍如何集成并使用该库来实现摘要值的获取。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 如何更换Anaconda和pip的国内镜像源
    本文详细介绍了如何通过国内多个知名镜像站(如北京外国语大学、中国科学技术大学、阿里巴巴等)更换Anaconda和pip的源,以提高软件包的下载速度和安装效率。 ... [详细]
author-avatar
丽君朝婷8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有