• 技术文章 >运维 >linux运维

    linux查询文件的命令有哪些

    青灯夜游青灯夜游2022-03-24 18:57:18原创422

    linux查询文件的命令:1、locate,用于查找符合条件的文件,语法“locate [选择参数] [样式]”;2、find,用来在指定目录下查找文件,语法“find [OPTION]... [查找路径] [查找条件] [处理动作]”。

    本教程操作环境:linux5.9.8系统、Dell G3电脑。

    linux查询文件的常用命令有两个:

    locate

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行。

    1. 命令格式:

    locate [选择参数] [样式]

    2.命令功能:

    locate命令可以在搜寻数据库时快速找到档案,locate为模糊查找,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)

    locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,locate查询文件时,会去搜索/var/lib/mlocate/mlocage.db,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*” 或”?”等)来指定范本样式,如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括 子目录在内的所有档案。

    locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。

    3.命令参数:

    4.使用实例:

    实例1:搜索etc目录下所有以sh开头的文件

    [root@CentOS7 ~#]locate /etc/sh       
    /etc/shadow
    /etc/shadow-
    /etc/shells
    [root@centos7 ~#]locate -r "/etc/\sh "  # 正则,锚定词首
    /etc/shadow
    /etc/shadow-
    /etc/shells
    [root@centos7 ~#]

    实例2:忽略大小写

    [root@centos7 ~#]locate -i ~/d
    /root/Desktop/root/Documents/root/Downloads
    /root/d1
    /root/dd
    /var/lib/pcp/pmdas/root/domain.h
    [root@centos7 ~#]

    实例3:更新数据库

    [root@centos7 ~#]locate ~/a
    /root/anaconda-ks.cfg
    [root@centos7 ~#]updatedb
    [root@centos7 ~#]locate ~/a
    /root/a.sh
    /root/anaconda-ks.cfg
    [root@centos7 ~#]

    find

    1. 主要用途:

    find命令是一个实时查找工具,通过遍历指定路径而完成对文件的查找;在使用该命令时,如果不选定参数,则在当前目录下查找子目录与文件并显示之;另外,任何位于参数之前的字符串,都将视为欲查找的目录名。由于是实时遍历查找,find有如下特性:精确实时查找,速度慢可能只搜索用户具备读取和执行权限的目录。

    2.find语法:


    3.查找条件:

    4.处理动作:

    find |xargs COMMAND

    5.常用参数:

    文件名和inode类:

    属主属组类:

    文件类型类:

    逻辑组合条件类:

    组合条件:

    摩根定律:

    1.png

    2.png

    文件大小类:

    -size [+|-]#UNIT
        常用单位:k,M,G 
    #UNIT: (#-1,#]
        如:5M 表示 (4M,5M]
    -#UNIT: [0,#-1]
        如:-5M 表示 [0,5M]
    +#UNIT: (#,oo)
        如:+5M 表示 (6M,oo)

    关于文件大小类的解释:为什么-size 5M 还是找精确的5M而是表示(4M,5M], 试想文件的大小指什么?是指文件数据的大小还是包括了元数据后的大小,那你找元数据的大小有意义吗?但文件的大小肯定是包含元数据大小的,而我们一般以文件大小找文件时往往考虑的是文件数据的大小;另外,精确查找一定大小的文件意义不大;所以这里的大小会有1个单位的浮动。

    时间戳类:

    以”天”为单位:
        -atime [+|-]#        
            #: [#,#+1)
            +#: [#+1,oo)        
            -#: [0,#)
        -mtime    
        -ctime
    以“分钟”为单位:
        -amin    
        -mmin    
        -cmin

    3.png

    关于时间戳类的解释:为什么-atime 3 表示的是 [3,4),这个就很好解释了,我们这儿所说的时间是指时间段而非时刻,一“天”与一“分钟”都是指一个时间段,只有[3,4)这个半闭半开的区间才能完整地表示第三天。

    权限类:

    -perm [/|-]MODE
        MODE: 精确匹配权限
        /MODE: 任何一类(u,g,o)对象的权限中只要能一位匹配即可,属于或关系。以前用'+',CentOS 7以'/'替代之
        -MODE: 每一类对象都必须同时拥有指定权限,属于与关系 
        0:表示不关注

    示例:

    6.使用示例:

    实例1:将配置文件备份到指定目录下并添加扩展名.org

    [root@localhost ~]# find . -name "*.conf" -exec cp -r {} /testdir/{}.org \; 
    [root@localhost ~]# cd /testdir/
    [root@localhost testdir]# ls
    a.conf.org  b.conf.org
    [root@localhost testdir]#

    实例2:.提示删除存在时间超过3天以上的属主为young的临时文件

    [root@localhost ~]# find /tmp -ctime +3 -user young -exec rm -fr {} \;
    [root@localhost ~]#

    实例3:在主目录中查找可被其它用户写入的文件

    [root@localhost ~]# find ~ -perm -002
    /root/num
    [root@localhost ~]# find ~ -perm -002 -exec chmod o-w {} \;
    [root@localhost ~]# ll num
    --w--w---- 1 root root 35 Jan 21 05:55 num

    实例4:查找/var目录下属主为root,且属组为mail的所有文件

    [root@localhost ~]# find /var -user root  -group mail -ls #默认关系就是与
    1179652    4 drwxrwxr-x   2 root     mail         4096 Jan 23 11:04 /var/spool/mail

    实例5:查找/var目录下不属于root、lp、gdm的所有文件

    [root@localhost ~]# find /var ! -user root ! -user lp ! -user gdm

    实例6:查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

    [root@localhost ~]# find /var/ -mtime -7 ! -user root ! -user postfix -ls
    1179676    4 drwx------   3 daemon   daemon       4096 Jan 23 11:04 /var/spool/at
    524399    4 drwx------   2 nginx    nginx        4096 Jan 23 03:16 /var/log/nginx
    524413    0 -rw-r--r--   1 nginx    root            0 Jan 23 03:16 /var/log/nginx/access.log
    524391    0 -rw-r--r--   1 nginx    root            0 Jan 21 03:44 /var/log/nginx/error.log
    132174    4 drwx------   3 nginx    nginx        4096 Jan 21 03:44 /var/lib/nginx
    132175    4 drwx------   7 nginx    nginx        4096 Jan 21 03:44 /var/lib/nginx/tmp
    132173    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/client_body
    132219    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/proxy
    132221    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/uwsgi
    132222    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/scgi
    132220    4 drwx------   2 nginx    root         4096 Jan 21 03:44 /var/lib/nginx/tmp/fastcgi

    实例7:查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

    [root@bash ~]# find / -nouser -o -nogroup -a -atime -7

    实例8:查找/etc目录下大于1M且类型为普通文件的所有文件

    [root@bash ~]# find /etc/ -size +1M -type f
    /etc/selinux/targeted/policy/policy.29
    /etc/udev/hwdb.bin

    实例9:查找/etc目录下所有用户都没有写权限的文件

    [root@bash ~]# find /etc/ ! -perm /222
    /etc/pki/ca-trust/extracted/java/cacerts
    /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
    /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
    /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
    /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
    /etc/lvm/profile/cache-mq.profile
    /etc/lvm/profile/cache-smq.profile
    /etc/lvm/profile/command_profile_template.profile
    /etc/lvm/profile/metadata_profile_template.profile
    /etc/lvm/profile/thin-generic.profile
    /etc/lvm/profile/thin-performance.profile
    /etc/openldap/certs/password
    /etc/gshadow
    /etc/dbus-1/system.d/cups.conf
    /etc/shadow
    /etc/gshadow-
    /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
    /etc/shadow-
    /etc/udev/hwdb.bin
    /etc/machine-id
    /etc/pam.d/cups
    /etc/sudoers

    实例10:查找/etc目录下至少有一类用户没有执行权限的文件

    [root@bash ~]# find /etc/ ! -perm -111 # 至少有一类用户没有就是所有用户都没有

    实例11:.查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

    [root@bash ~]# find /etc/init.d -perm -113
    /etc/init.d

    或者

    [root@bash ~]# find /etc/init.d -perm -111 -perm -002
    /etc/init.d

    实例12:摩根定律找出/tmp目录下,属主不是root,且文件名不以f开头的文件

    [root@centos7 ~]#find /tmp \( -not -user root -a -not -name 'f*' \) -ls

    [root@centos7 ~]#find /tmp -not \( -user root -o -name 'f*' \) -ls

    实例13:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件

    [root@bash ~]# find /etc -path '/etc/sane.d' -prune -o -name '*.conf'

    实例14:匹配文件路径或文件

    [root@bash ~]# find /usr/ -path '*local'
    /usr/bin/abrt-action-analyze-ccpp-local
    /usr/share/doc/postfix-2.10.1/examples/qmail-local
    /usr/share/aclocal
    /usr/libexec/postfix/local
    /usr/local

    实例15:基于正则表达式匹配文件路径

    [root@bash ~]# find . -regex ".*txt$"              
    ./.mozilla/firefox/4dqu966q.default/revocations.txt
    ./vimrc/spf13-vim/LICENSE.txt
    ./a.txt

    相关推荐:《Linux视频教程

    以上就是linux查询文件的命令有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:linux 查询文件
    上一篇:linux怎么删除非空目录 下一篇:linux没有ifconfig怎么办
    Web大前端开发直播班

    相关文章推荐

    • 什么是linux设备文件• linux怎么查看系统是不是64位• linux删除ip地址的命令是什么• linux怎么查看安装目录• linux能挂载ntfs硬盘吗• 怎么修改linux文件内容

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网