Linux学习之十九(文本文件查找)

本文详细介绍了 Linux 下 find 命令的使用方法,包括如何根据文件名、属主、属组、文件类型、文件大小及时间戳等条件进行文件查找。此外,还提供了多个实用示例帮助读者更好地理解和运用 find 命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本查找:
    grep,egrep,fgrep
文件查找:
    locate:非实时,模糊匹配,查找是根据全系统文件数据库进行的;查找速度快
        updatedb:手动生成文件数据库
    find:实时、精确、遍历指定目录中的所有文件完成查找,速度慢;支持多种查找标准;
        格式:find 查找路径 查找标准 查找到以后的处理动作
            查找路径:默认为当前目录
            查找标准:默认为指定路径下的所有文件
            查找后处理动作:默认为显示
        匹配标准:
            -name 'FILENAME' :对文件名左精确匹配
                例:[root@Ourlab ~]# find /etc -name 'passwd'
                    /etc/passwd
                    /etc/pam.d/passwd
                支持文件名通配:*、?、[]等
                    例:[root@Ourlab ~]# find /etc -name '*passwd'
                        /etc/passwd
                        /etc/security/opasswd
                        /etc/pam.d/passwd

            -iname 'FILENAME':文件名匹配时不区分大小写
            -regex PATTERN:基于正则表达式进行文件名匹配
            
            -user USERNAME:根据属主查找
                例:
            -group GROUPNAME:根据属组查找
            
            -uid UID:根据UID查找
            -gid GID:根据GID查找
            
            -nouser :查找无属主的文件
            -nogroup:查找无属组的文件
            
            -type:根据文件类型查找文件
                f:普通文件
                    例:[root@Ourlab ~]# find /tmp -type f
                        /tmp/vmware-root/vmware-apploader-2918.log
                        /tmp/vmware-root/vmware-apploader-3194.log
                d:目录文件
                    例:[root@Ourlab ~]# find /tmp -type d
                        /tmp
                        /tmp/keyring-qtWyIv
                c:字符设备
                b:块设备
                l:链接文件
                p:管道设备
                s:套接字设备
            
            -size:根据文件大小查找文件,默认单位是字节
                [+|-]#:表示大于或小于指定的#字节
                    如:[+|-]#k:表示大于或小于#k.
                #k:表示查找大于(#-1)k,小于等于#k大小的文件
                #M:表示查找大于(#-1)M,小于等于#M大小的文件
                #G:表示查找大于(#-1)G,小于等于#G大小的文件
        组合条件:
            -a:
            -o:
            -not:
            
                例:[root@Ourlab ~]# find /tmp -nouser -a -type d
                例:[root@Ourlab ~]# find ./ -not \( -user user1 -o -user user2 \) #表示查找属主不是user,也不是user2的文件

        根据时间戳查找文件:
            -mtime #:距现在时间刚好#天修改过
            -ctime #:距现在时间刚好#天改变过
            -atime #:距现在时间刚好#天访问过
                例:[root@Ourlab ~]# find ./ -atime 5
                
            -atime [-ctime | -mtime][+|-]#:表示距现在是时间#天前或#天内
                    例:[root@Ourlab ~]# find ./ -atime +5
            -mmin #:距现在时间刚好#分钟修改过
            -cmin #:距现在时间刚好#分钟改变过
            -amin #:距现在时间刚好#分钟访问过
            -amin[-cmin | -mmin][+|-]#:表示距现在是时间#分钟前或#分钟内
        
        -perm MODE
            MODE:精确匹配权限
            /MODE:只要任意一位权限匹配既满足条件
            -MODE:文件权限能完全包含此mode时才能符合条件
    动作:
        -print:显示
        -ls:类似ls -l的形式显示每一个文件的详细信息
        -ok COMMAND {} \; 每一次操作都需要用户确认
        -exec COMMAND {} \;每一处操作不需要用户确认
            例:[root@Ourlab test]# find ./ -perm -004 -exec chmod o+w {} \;
        
课后练习:
1、查找/var目录下属主为root并且属组为mail的所有文件;
[root@Ourlab ~]# find /var -user root
2、查找/usr目录下不属于root、bin或student的文件;
[root@Ourlab ~]# find /usr -not \( -user root -o -user bin -o -user student \)
3、查找/etc目录下最近一周内内容修改过且不属于root及student的用户的文件;
[root@Ourlab ~]# find /etc -atime -7 -a -not \( -user root -o -user student \)
4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;
[root@Ourlab ~]# find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;
[root@Ourlab ~]# find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;
[root@Ourlab ~]# find /etc -not -perm /222 -ls
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值