• 文件查找


    文件查找

    grep: 文件内容过滤
    find: 文件查找,针对文件名

    一、命令文件
    # which ls //从PATH环境变量 (echo $PATH)
    # whereis vim

    [root@localhost ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/htop/bin/:/root/bin

    二、任意文件
    A. locate (查询的数据库: /var/lib/mlocate/mlocate.db)
    计划任务:每天自动更新数据库 /etc/cron.daily/mlocate.cron
    手动更新数据库:updatedb
    # locate ifcfg-eth0
    # locate ifcfg-enp0s25

    B. find
    find [options] [path...] [expression] [action]

    ===expression===
    按文件名:
    [root@CentOS7 ~]# find /etc -name "ifcfg-eth0"
    [root@CentOS7 ~]# find /etc -iname "ifcfg-eth0" //-i忽略大小写
    [root@CentOS7 ~]# find /etc -iname "ifcfg-eth*"

    按文件大小:
    [root@CentOS7 ~]# find /etc -size +5M //大于5M
    [root@CentOS7 ~]# find /etc -size 5M
    [root@CentOS7 ~]# find /etc -size -5M
    [root@CentOS7 ~]# find /etc -size +5M -ls //-ls找到的处理动作

    指定查找的目录深度:
    -maxdepth levels
    -mindepth levels
    [root@CentOS7 ~]# find / -maxdepth 3 -a -name "ifcfg-eth0"

    按时间找(atime,mtime,ctime):
    [root@CentOS7 ~]# find /etc -mtime +5 //修改时间超过5天
    [root@CentOS7 ~]# find /etc -mtime 5 //修改时间等于5天
    [root@CentOS7 ~]# find /etc -mtime -5 //修改时间5天以内

    按文件属主、属组找:
    [root@CentOS7 ~]# find /home -user jack //属主是jack的文件
    [root@CentOS7 ~]# find /home -group hr //属组是hr组的文件
    [root@CentOS7 ~]# find /home -user jack -group hr
    [root@CentOS7 ~]# find /home -user jack -a -group hr
    [root@CentOS7 ~]# find /home -user jack -o -group hr

    [root@CentOS7 ~]# find /home -nouser
    [root@CentOS7 ~]# find /home -nogroup
    [root@CentOS7 ~]# find /home -nouser -o -nogroup

    按文件类型:
    [root@CentOS7 ~]# find /dev -type f //f普通
    [root@CentOS7 ~]# find /dev -type d //d目录
    [root@CentOS7 ~]# find /dev -type l //l链接
    [root@CentOS7 ~]# find /dev -type b //b块设备
    [root@CentOS7 ~]# find /dev -type c //c字符设备
    [root@CentOS7 ~]# find /dev -type s //s套接字
    [root@CentOS7 ~]# find /dev -type p //p管道文件

    按文件权限:
    [root@CentOS7 ~]# find . -perm 644 -ls
    [root@CentOS7 ~]# find . -perm -644 -ls
    [root@CentOS7 ~]# find . -perm -600 -ls
    [root@CentOS7 ~]# find . -perm -222 -ls //全局可写
    [root@CentOS7 ~]# find /usr/bin /usr/sbin -perm -4000 -ls //包含set uid
    [root@CentOS7 ~]# find /usr/bin /usr/sbin -perm -2000 -ls //包含set gid
    [root@CentOS7 ~]# find /usr/bin /usr/sbin -perm -1000 -ls //包含sticky

    按正则表达式:
    -regex pattern
    [root@CentOS7 ~]# find /etc -regex '.*ifcfg-eth[0-9]'
    .* 任意多个字符
    [0-9] 任意一个数字

    [root@localhost ~]# find /etc -regex '.*ifcfg-enp0s25'
    /etc/sysconfig/network-scripts/ifcfg-enp0s25

    [root@localhost ~]# find /etc -regex '.*ifcfg-enp0s[0-9]+'
    /etc/sysconfig/network-scripts/ifcfg-enp0s25


    ==找到后处理的动作 ACTIONS: (默认动作-print)==
    -print
    -ls
    -delete
    -exec 后面跟自定义的shell命令
    -ok 后面跟自定义的shell命令
    [root@CentOS7 ~]# find /etc -name "ifcfg*"
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -print
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -ls
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp ;
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp ;

    [root@CentOS7 ~]# find /etc -name "ifcfg*" -exec rm -rf {} ;
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -delete

    扩展知识:find结合xargs
    [root@CentOS7 ~]# find . -name "yang*.txt" |xargs rm -rf
    [root@CentOS7 ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp


    find作业:
    1. 将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变

    2. 将/etc目录复制到/var/tmp/
    将/var/tmp/etc中的所有目录设置权限777(仅目录)
    将/var/tmp/etc中所有文件权限设置为666

    3. 以下命令的区别是什么?
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -exec rm -rf {} ;
    [root@CentOS7 ~]# find /etc -name "ifcfg*" -exec rm -rf {} +
    终结符有两个:“;”和“+”。
    其中“;”会对每一个find到的文件去执行一次cmd命令。而”+“让find到的文件一次性执行完cmd命令。

    案例1:
    [root@CentOS7 ~]# mkdir dir1
    [root@CentOS7 ~]# touch dir1/file{1..20}

    [root@CentOS7 ~]# find /root/dir1 -name "file5"
    [root@CentOS7 ~]# find /root/dir1 ! -name "file5"

    [root@CentOS7 ~]# find /root/dir1 -name "file5" -o -name "file9"
    /root/dir1/file5
    /root/dir1/file9

    [root@CentOS7 ~]# find /root/dir1 -name "file5" -o -name "file9" -ls
    1466515 0 -rw-r--r-- 1 root root 0 6月 5 11:15 /root/dir1/file9

    [root@CentOS7 ~]# find /root/dir1 -name "file5" -ls -o -name "file9" -ls
    1466499 0 -rw-r--r-- 1 root root 0 6月 5 11:15 /root/dir1/file5
    1466515 0 -rw-r--r-- 1 root root 0 6月 5 11:15 /root/dir1/file9

    [root@CentOS7 ~]# find /root/dir1 ( -name "file5" -o -name "file9" ) -ls
    1466499 0 -rw-r--r-- 1 root root 0 6月 5 11:15 /root/dir1/file5
    1466515 0 -rw-r--r-- 1 root root 0 6月 5 11:15 /root/dir1/file9

    [root@localhost ~]# find /root/dir1 ( -name "file5" -o -name "file9" ) -exec rm -rvf {} ;
    removed ‘/root/dir1/file5’
    removed ‘/root/dir1/file9’

    文件打包及压缩

    建议针对目录cd yang

    Demo: 复制未打包的文件到远程主机
    [root@yangs ~]# du -sh /etc
    39M /etc
    [root@yangs ~]# time scp -r /etc root@192.168.5.32:/tmp //将/etc目录...

    ===打包,压缩===
    [root@yangs ~]# tar -czf etc1.tar.gz /etc //-z 调用gzip
    [root@yangs ~]# tar -cjf etc2.tar.bz2 /etc //-j 调用bzip2
    [root@yangs ~]# tar -cJf etc3.tar.xz /etc //-J 调用xz
    [root@yangs ~]# ll -h etc*
    -rw-r--r--. 1 root root 8.7M 3月 12 00:08 etc1.tar.gz
    -rw-r--r--. 1 root root 7.5M 3月 12 00:08 etc2.tar.bz2
    -rw-r--r--. 1 root root 4.8M 3月 12 00:09 etc3.tar.xz

    ===解压,解包===
    [root@yangs ~]# tar -tf sys.tar.xz
    [root@yangs ~]# tar -xzvf etc1.tar.gz
    [root@yangs ~]# tar -xvf etc1.tar.gz //无需指定解压工具,tar会自动判断
    [root@yangs ~]# tar -xvf etc2.tar.bz2 -C /tmp //-C重定向到//tmp目录
    [root@yangs ~]# tar xf etc3.tar.xz


    ==解压zip
    [root@yangs ~]# unzip xxx.zip
    ====================================================================================

    案例1:mysql物理备份及恢复
    [root@localhost ~]# tar -cJf /backup/mysql.tar.xz /var/lib/mysql
    [root@localhost ~]# tar -xf /backup/mysql.tar.xz -C /

    案例2:mysql物理备份及恢复
    [root@localhost ~]# cd /var/lib/mysql
    [root@localhost mysql]# tar -cJf /backup/mysql.tar.xz *
    [root@localhost mysql]# tar -xf /backup/mysql.tar.xz -C /var/lib/mysql

    案例3:host A /etc (海量小文件) --------> host A /tmp
    [root@localhost ~]# tar -czf - /etc |tar -xzf - -C /tmp

    案例4:host A /etc (海量小文件) --------> host B /tmp
    常规方法:
    [root@localhost ~]# scp -r /etc 172.16.20.21:/tmp

    建议方法:
    ==host B 监听端口==
    [root@hostb ~]# systemctl stop firewalld.service
    [root@hostb ~]# nc -l 8888 |tar -xzf - -C /tmp

    ==host A ==
    [root@localhost ~]# tar -czf - /etc | nc 172.16.20.21 8888
    tar: Removing leading `/' from member names

  • 相关阅读:
    奋斗了一晚上,搞定了Ant
    我很成功,我很失败
    管理复杂性
    Rapid framework(SSH)数据流概述
    Strtus2 Convention Plugin学习(转)
    16X16 经典silk图标 (famfamfam.com)
    v512 Oracle数据库实用教程 演示用ppt(转pdf)
    RapidFramework使用Oracle的步骤
    oracle 找出最耗资源的sql (dolphin_ygj)
    jquery validate 中文化
  • 原文地址:https://www.cnblogs.com/thelovelybugfly/p/12054904.html
Copyright © 2020-2023  润新知