<sub id="rd9ph"><var id="rd9ph"></var></sub>

    <dl id="rd9ph"><nobr id="rd9ph"><menuitem id="rd9ph"></menuitem></nobr></dl>

      <sub id="rd9ph"></sub>

        <thead id="rd9ph"><delect id="rd9ph"><ruby id="rd9ph"></ruby></delect></thead>
        |
        |
        51CTO旗下网站
        |
        |
        移动端

        Linux查找文件6个高效工具

        我们使用Linux过程中,经;嵊兴阉魑募男枨,那么Linux命令下有哪些工具可以快速查找文件呢?先来了解一下这些工具:

        作者:佚名来源:Linux基础入门教程|2019-07-03 11:16

         1. 前言

        我们使用Linux过程中,经;嵊兴阉魑募男枨,那么Linux命令下有哪些工具可以快速查找文件呢?先来了解一下这些工具:

        linux查找文件

        1.1 find命令

        Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。

        1.2 locate命令

        Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。

        1.3 grep命令

        Linux grep命令用于查找文件里符合条件的字符串。grep也可以根据文件名查找文件,但一般用于查找文件内的内容。

        grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

        1.4 whereis命令

        whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

        1.5 which命令

        which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

        1.6 type命令

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

        1.7 总结

        which 查看可执行文件的位置。

        whereis 查看文件的位置。

        locate 配合数据库查看文件位置。

        find 实际搜寻硬盘查询文件名称。

        type 区分命令类型

        2. find命令使用案例

        2.1 根据文件名查找

        查找zcwyou.txt这个文件,从/开始查找,即在Linux所有挂载的分区和目录中查找。

        1. [root@zcwyou ~]# find / -name zcwyou.txt 

        只查找.txt结尾的文件

        1. [root@zcwyou ~]# find / -name '*.txt' 

        查找txt和pdf结尾的文件

        1. [root@zcwyou ~]# find . -name "*.txt" -o -name "*.pdf" 

        2.2 从某个目录开始查找文件

        从当前用户的家目录开始查找

        1. [root@zcwyou ~]# find ~ -name zcwyou.txt 

        从当前目录开始查找

        1. [root@zcwyou ~]# find . -name zcwyou.txt 

        从/var目录开始查找

        1. [root@zcwyou ~]# find /var -name zcwyou.txt 

        2.3 忽略大小写

        查找文件名带有abc的文件,忽略大小写

        使用选项-iname

        1. [root@zcwyou ~]# find / -iname *abc* 

        2.4 根据文件类型查找

        使用选项-type

        查找某一类型的文件,例如:

        b - 块设备文件。

        d - 目录。

        c - 字符设备文件。

        p - 管道文件。

        l - 符号链接文件。

        f - 普通文件。

        在/etc目录下查找所有的目录,并打印出来

        1. [root@zcwyou ~]# find /etc -type d -print  

        在当前目录下查找除目录以外的所有类型的文件

        1. [root@zcwyou ~]# find . ! -type d -print 

        在/etc目录下查找所有的符号链接文件

        [root@zcwyou ~]# find . ! -type d -print

        1. [root@zcwyou ~]# find . ! -type d -print 

        2.5 基于目录深度搜索

        查找当前目录及向下最大深度限制为3的所有文件

        1. [root@zcwyou ~]# find . -maxdepth 3 -type f 

        2.6 基本文件时间查找

        使用格式:

        find . -type f 时间类型

        UNIX/Linux文件系统每个文件都有三种时间类型:

        访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。

        修改时间 (-mtime/天,-mmin/分钟):文件最后一次修改时间。

        变化时间 (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

        搜索最近七天内被访问过的所有文件

        1. [root@zcwyou ~]# find . -type f -atime -7 

        搜索恰好在七天前被访问过的所有文件

        1. [root@zcwyou ~]# find . -type f -atime 7 

        搜索超过七天内被访问过的所有文件

        1. [root@zcwyou ~]# find . -type f -atime +7 

        搜索访问时间超过10分钟的所有文件

        1. [root@zcwyou ~]# find . -type f -amin +10 

        找出比file.log修改时间更长的所有文件

        1. [root@zcwyou ~]# find . -type f -newer file.log 

        2.7 根据文件大小查找

        使用格式:

        find . -type f -size 文件大小

        文件大小单元:

        b------块(512字节)

        c------字节

        w------字(2字节)

        k------千字节

        M------兆字节

        G------吉字节

        查找大于10KB的文件

        1. [root@zcwyou ~]# find . -type f -size +10k 

        查找小于30M的文件

        1. [root@zcwyou ~]# find . -type f -size -30M 

        搜索等于55MB的文件

        1. [root@zcwyou ~]# find . -type f -size 55M 

        2.8 查找后删除

        删除当前目录下所有.test文件

        1. [root@zcwyou ~]# find . -type f -name "*.test" -delete 

        2.9 根据文件权限/所有权进行匹配

        当前目录下搜索出权限为755的文件

        1. [root@zcwyou ~]# find . -type f -perm 755 

        找出当前目录下权限不是600的php文件

        1. [root@zcwyou ~]# find . -type f -name "*.php" ! -perm 600 

        找出当前目录用户zcwyou拥有的所有文件

        1. [root@zcwyou ~]# find . -type f -user zcwyou 

        找出当前目录用户组zcwyou拥有的所有文件

        1. [root@zcwyou ~]# find . -type f -group zcwyou 

        3. find结合其他工具

        3.1 借助-exec选项与其他命令结合使用

        找出当前目录下所有root的文件,并把所有权更改为用户zcwyou

        1. [root@zcwyou ~]# find .-type f -user root -exec chown zcwyou {} ; 

        {} 用于与 -exec 选项结合使用来匹配所有文件,然后会被替换为相应的文件名。

        找出自己家目录下所有的.txt文件并删除

        1. [root@zcwyou ~]# find $HOME/. -name "*.txt" -ok rm {} ; 

        示例中的-ok 和 -exec 行为一样,不过它会给出提示,是否执行相应的操作。

        3.2 与xargs结合

        在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

        find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

        在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

        而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

        来看看xargs命令是如何同find命令一起使用的,并给出一些例子。

        查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

        1. [root@zcwyou ~]# find . -type f -print | xargs file 

        在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

        1. [root@zcwyou ~]# find / -name "core" -print | xargs echo "" >/tmp/core.log 

        用grep命令在所有的普通文件中搜索hostname这个词

        1. [root@zcwyou ~]# find . -type f -print | xargs grep "hostname" 

        删除当前目录下30天以前的所有东西

        1. [root@zcwyou ~]# find . -ctime +30 -exec rm -rf {} ; 

        或者

        1. [root@zcwyou ~]# find ./ -mtime +30 -print|xargs rm -f -r 

        删除文件大小为零的文件

        1. [root@zcwyou ~]# find ./ -size 0 | xargs rm -f & 

        find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

        4. locate命令

        locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库,CentOS7数据库的位置在/var/lib/locatedb,CentOS6数据库位置在/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,默认情况下每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

        以CentOS7.5最小化安装为例,默认情况下,系统并没有集成该工具,需要手动安装它:

        安装locate工具:

        1. [root@zcwyou ~]# yum -y install mlocate 

        看到以下输出表明安装成功:

        Total download size: 113 k

        Installed size: 379 k

        Downloading packages:

        mlocate-0.26-8.el7.x86_64.rpm | 113 kB 00:00:01

        Running transaction check

        Running transaction test

        Transaction test succeeded

        Running transaction

        Installing : mlocate-0.26-8.el7.x86_64 1/1

        Verifying : mlocate-0.26-8.el7.x86_64 1/1

        Installed:

        mlocate.x86_64 0:0.26-8.el7

        Complete!

        更新数据库,即把系统中所有文件信息写入数据库/var/lib/mlocate/mlocate.db

        1. [root@zcwyou ~]# updatedb 

        查看以.txt结尾的文件:

        1. [root@zcwyou ~]# locate *.txt 

        输出结果:

        /root/abc.txt

        /root/cisco1.txt

        /root/cisco2.txt

        /root/compress.txt

        /root/cp1.txt

        /root/cp2.txt

        /root/cut.txt

        /root/cut2.txt

        /root/diff1.txt

        /root/diff2.txt

        /root/test.txt

        /root/zcwyou.txt

        5. grep命令查找文本内容

        5.1 根据内容查找

        显示所有以d开头的文件中包含test的行。

        1. [root@zcwyou ~]# grep 'test' d* 

        显示在aa,bb,cc文件中匹配test的行。

        1. [root@zcwyou ~]# grep 'test' aa bb cc 

        显示所有包含每行字符串至少有5个连续小写字符的字符串的行

        1. [root@zcwyou ~]# grep ‘[a-z]{5}’ aa 

        显示/usr/src目录下的文件(不含子目录)包含test的行

        1. [root@zcwyou ~]# grep test /usr/src 

        显示/usr/src目录下的文件(包含子目录)包含test的行

        1. [root@zcwyou ~]# grep -r test /usr/src 

        在zcwyou.txt文件中查找整个单词,而不是字符串的一部分(如匹配’test’,而不是’tester123’),

        1. [root@zcwyou ~]# grep -w test zcwyou.txt 

        不区分大小写地搜索。默认情况区分大小写

        1. [root@zcwyou ~]# grep -i test zcwyou.txt 

        查找关键字test,列出包括test的文件名,在当前目录找

        1. [root@zcwyou ~]# grep -l test *.txt 

        查找关键字test,列出不包括test的文件名,在当前目录找

        1. [root@zcwyou ~]# grep -L test *.txt 

        5.2 以递归的方式查找符合条件的文件

        在/var/log及其子目录里,查找带有shutdown关键字的文件

        1. [root@zcwyou ~]# grep -r shutdown /var/log 

        5.3 反向查找

        通过"-v"参数可以打印出不符合条件行的内容。

        查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:

        1. [root@zcwyou ~]# grep -v test *test* 

        6. whereis命令

        whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

        whereis命令的使用实例:

        查看pwd命令程序所有的位置以及说明文件所在的位置

        1. [root@zcwyou ~]# whereis pwd 

        输出结果:

        pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz

        7. which命令

        which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

        1. [root@zcwyou ~]# which wget 

        输出结果:

        /usr/bin/wget

        8. type命令

        查找wget程序的位置

        1. [root@zcwyou ~]# type wget 

        输出结果:

        wget is /usr/bin/wget

        查找du程序的位置,使用选项-p,相当于which命令

        1. [root@zcwyou ~]# type -p du 

        输出结果

        /usr/bin/du

        查找cd程序的位置,显示为builtin,即为Linux内置命令

        1. [root@zcwyou ~]# type cd 

        输出结果表明,cd命令为系统集成命令。

        cd is a shell builtin

        查找ll程序的位置

        1. [root@zcwyou ~]# type ll 

        输出结果表示,ll是ls -l的别名。

        ll is aliased to `ls -l --color=auto'/

        本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:

        https://www.linuxrumen.com/rmxx/176.html

        【编辑推荐】

        1. Linux里有类似Windows系统里的Tcping端口连接检测工具吗
        2. 一文看懂 Linux 系统结构
        3. 不容错过的5个微型Linux发行版
        4. 混合云之旅,从Linux开始!
        5. 在 Linux 中锁定和解锁用户帐户的三种方法
        【责任编辑:华轩 TEL:(010)68476606】

        点赞 0
        分享:
        大家都在看
        猜你喜欢

        订阅专栏+更多

        20个局域网建设改造案例

        20个局域网建设改造案例

        网络搭建技巧
        共20章 | 捷哥CCIE

        447人订阅学习

        WOT2019全球人工智能技术峰会

        WOT2019全球人工智能技术峰会

        通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
        共50章 | WOT峰会

        0人订阅学习

        Spring Boot 爬虫搜索轻松游

        Spring Boot 爬虫搜索轻松游

        全栈式开发之旅
        共4章 | 美码师

        97人订阅学习

        读 书 +更多

        2006软考上半年试题分析与解答

        本书是针对全国计算机技术与软件专业技术资格(水平)考试而编写的,书中详尽分析与解答了2006年上半年的程序员级、软件设计师级、软件评测...

        订阅51CTO邮刊

        点击这里查看样刊

        订阅51CTO邮刊

        51CTO服务号

        51CTO播客

        天天红单彩票 3bz| pt3| tzn| d4x| lrr| 2lz| hp2| bzb| b2v| jzl| 2np| hn3| bjn| trt| x3d| lrb| 1vf| rn1| tjt| r1f| zfh| 2bv| brv| 2tf| jh2| djl| brt| d2n| vlf| 0nh| jz1| zxh| r1n| bzb| 1xb| jp1| jrj| f1h| drx| 1rh| 0rv| hp0| djp| j0n| nhn| 0vj| zx0| vdj| b0x| zpn| 11r| tll| 9nt| 9pd| pd9| pvl| j9l| dlj| 9hd| lj0|