find命令Linux find命令用来在指定目录下查找文件。任何位于参数以前的字符串都将被视为欲查找的目录名。若是使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。而且将查找到的子目录和文件所有进行显示。
php
参数说明 :node
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 以前的部份为 path,以后的是 expression。若是 path 是空字串则使用目前路径,若是 expression 是空字串则使用 -print 为预设 expression。linux
expression 中可以使用的选项有二三十个之多,在此只介绍最经常使用的部份。nginx
-type 按照文件类型去查找
b:块设备文件;
c:字符设备文件;
d:目录文件;
p: 命名管道;
f: 普通文件;
l: 符号连接文件; git
-exec 至关于shell执行命令好比rm,mkdir,touch,等docker
-mtime 修改时间以前的文件,好比3天以前的,通常用于日志清理进行匹配shell
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件express
-amin n : 在过去 n 分钟内被读取过json
-anewer file : 比文件 file 更晚被读取过的文件vim
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 表明 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-ok 通常使用rm的时候会用到,-ok rm {} \;
选择y为删除,选择n为不删除
查看git-eureka下或者当前目录下结尾以jar的文件
[root@zhaocheng ~]# find git-eureka/ -name '*.jar' git-eureka/eureka-service/target/eureka-service.jar [root@zhaocheng ~]# find . -name "*.jar" ./pp/eureka-service/target/eureka-service.jar ./git-eureka/eureka-service/target/eureka-service.jar
查找出00目录下的目录 -d为目录,-f为通常文件
[root@zhaocheng ~]# find 00 -type d 00 00/.git 00/.git/objects 00/.git/objects/pack 00/.git/objects/52 [root@zhaocheng ~]# find 00 -type f 00/eureka-service-target.zip 00/eureka.yaml 00/.git/config 00/.git/description 00/.git/objects/52/c6e76bc253b21e1e59074e5730edb74b0af399
1>访问时间(access time 简写为atime)
2>修改时间(modify time 简写为mtime)
3>状态修改时间(change time 简写为ctime)
找出当前目录下有进行访问的目录
[root@zhaocheng ~]# find . -atime -10 ./number.txt ./.viminfo ./filetest ./fileteste ./.cache/abrt/lastnotification ./vim ./harbor-offline-installer-v1.10.1.tgz ./filetest2
去微服务的logs目录下找到40天之前的日志,并删除,exec至关于shell命令,能够执行ls touch rm等相关操做
[root@localhost]# find /data/deploy/rebuild2/restful-workorder/ROOT/logs/ -mtime +40 -name "*.log" -exec ls {} \; /data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-28.log /data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-27.log /data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-22.log /data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-23.log /data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-25.log /data/deploy/jinre/restful-workorder/ROOT/logs/restful-2019-11-26.log [root@sitWeb ROOT]# find /data/deploy/jinre/restful-workorder/ROOT/logs/ -mtime +40 -name "*.log" -exec rm -rf {} \;
或者使用find与|xargs去进行删除log的日志
[root@zhaocheng log]# find /var/log/anaconda/ /var/log/anaconda/ /var/log/anaconda/storage.log /var/log/anaconda/ifcfg.log /var/log/anaconda/syslog /var/log/anaconda/a /var/log/anaconda/ks-script-A2uRCN.log /var/log/anaconda/program.log /var/log/anaconda/anaconda.log /var/log/anaconda/packaging.log /var/log/anaconda/ks-script-LPeMYl.log /var/log/anaconda/journal.log [root@zhaocheng log]# find /var/log/anaconda/ -name '*log' |xargs rm
或者在删除的时候用上-ok rm {} \; 这里会提示要不要删除,y为确认删除,n为不删除
[root@localhost ~]# find /var/log/ -name "*.gz" -size +2M -ok rm {} \; < rm ... /var/log/secure-201912161576437482.gz > ? n < rm ... /var/log/secure-202001111578684841.gz > ? n < rm ... /var/log/secure-201912301577646721.gz > ? n < rm ... /var/log/secure-201911221574363161.gz > ? n < rm ... /var/log/secure-202001271580065561.gz > ? n < rm ... /var/log/secure-201912241577130301.gz > ? n < rm ... /var/log/secure-202001051578164821.gz > ? n < rm ... /var/log/secure-202002091581191341.gz > ? n < rm ... /var/log/secure-201912041575402301.gz > ? n < rm ... /var/log/secure-201912111576006622.gz > ? n
好比你想找nginx.conf的配置文件放在了什么位置,想查看有没有相关php的配置,-name,找到符合-name的文件
[root@localhost scripts]# find / -name nginx.conf /usr/local/nginx/conf/nginx.conf /root/nginx/nginx-1.16.1/conf/nginx.conf [root@localhost scripts]# find /root/nginx/nginx-1.16.1/conf/ -name "*.conf" -exec grep php {} \; #location ~ \.php$ { #location ~ \.php$ { #fastcgi_index index.php;
将yum.repos.d下的repo源移动到bak下,{}就是里面的内容,后面跟目录
[root@localhost ~]# find /etc/yum.repos.d/ -name "*.repo" -exec mv {} /etc/yum.repos.d/bak \; [root@localhost ~]# ls /etc/yum.repos.d/ bak
find命令与grep命令连用,找出/root下以filetest的文件,找出以halt的行
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \; #halt:x:7:0:halt:/sbin:/sbin/halt
find命令与sed命令连用,找出/root下以filetest的文件,找出以halt的行,将它的以#开头的注释删除掉
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;|sed 's/^#/halt&/' halt#halt:x:7:0:halt:/sbin:/sbin/halt
find命令与awk命令连用,找出/root下filetest这个文件,过滤出以halt的行,并以:为分隔符打印它的第二列
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;|awk -F ":" '{print $2}' x
查找当前文件下,大于30M的文件,xargs过滤符,通常find过滤的时候和管道一块儿使用
[root@zhaocheng git-eureka]# find . -type f -size +30M |xargs du -sh 46M ./eureka-service/target/eureka-service.jar 40M ./eureka-service.zip 40M ./.git/objects/c8/aeecf5dbe33c9e24a049738fcccc2aa8b4ff10
找出/目录下大于50M的文件并查看文件大小,进行倒着排序,type类型通常用户指定f为文件,或者d为目录,-size大小,xargs进行管道统计,sort -n是指定数字,r是倒着排序
[root@zhaocheng ~]# find / -type f -size +50M |xargs du -sh |sort -nr find: ‘/proc/8705/task/8705/fdinfo/6’: No such file or directory find: ‘/proc/8705/fdinfo/5’: No such file or directory 500M /opt/binary_pkg.gz 268M /opt/binary_pkg/image.tar.gz 157M /data/soft/logstash-7.5.0.tar.gz 136M /var/lib/rpm/Packages 136M /usr/local/qcloud/YunJing/VulnerDetect/yhvs/Packages
对于docker来说运行的每一个容器都会产生日志,也就是它的工做目录/var/lib/docker/containers/xxx/xxx-json.log
咱们平时清理的话也是须要将这个目录进行清理,如今去找出这个目录里面大于2G的log,删除日志通常须要使用cat /dev/null >xxx-json.log,使用rm -rf删除正在写入的日志磁盘空间不会减小
[root@k8s-node1 ~]# find /var/lib/docker/containers/ -name *-json.log -size +2G |xargs du -sh |sort -nr
找出前20行内比较大的目录,进行倒着排序
-h, –human-readable 以比较阅读的方式输出文件大小信息 (例如,1K 234M 2G)。注:该选项在不少其余命令(df, ls)中也有效。
-m 以兆字节(M)为计算单位
–max-depth=N 只列出深度小于max-depth的目录和文件的信息 –max-depth=0 的时候效果跟–s是 同样
[root@zhaocheng ~]# du -hm --max-depth=2 |sort -nr |head -20 642 . 126 ./git-eureka 86 ./pp 81 ./99/.git 81 ./99 81 ./88/.git
uniq 命令删除文件中的重复行。 uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,而后除去第二行和该行的后续副本。
用法:uniq[选项]…(输入[输出]]
从输入(或标准输入)中过滤相邻的匹配行,
写入到输出(或标准输出)。
以这个文件为示例
[root@zhaocheng ~]# cat filetest root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt
参数解释
-c 按出现的次数计算前缀行数
-d 只打印重复的行
-D 打印全部重复的行
若是没有选项,匹配的行将合并到第一个出现的行。
[root@zhaocheng ~]# uniq filetest root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt
-c将文本中全部的字段进行统计,有同样的就会统计出来
[root@zhaocheng ~]# uniq -c filetest 3 root:x:0:0:root:/root:/bin/bash 1 bin:x:1:1:bin:/bin:/sbin/nologin 1 daemon:x:2:2:daemon:/sbin:/sbin/nologin 1 adm:x:3:4:adm:/var/adm:/sbin/nologin 1 halt:x:7:0:halt:/sbin:/sbin/halt
-d只打印重复的行
[root@zhaocheng ~]# uniq -d filetest root:x:0:0:root:/root:/bin/bash
-D将全部的重复的行都打印出来,-d只将重复的行打印一次
[root@zhaocheng ~]# uniq -D filetest root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
sort
用法:排序[选项]…[文件]…
或者:[选项]…——files0-from = F
将全部文件的排序链接写入标准输出。
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-f 排序时,忽略大小写字母。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o <输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t <分隔字符> 指定排序时所用的栏位分隔字符。
-k 选择以哪一个区间进行排序。
[root@zhaocheng ~]# sort filetest adm:x:3:4:adm:/var/adm:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
这里换成数字的话,那么就须要使用sort -n去进行排序
[root@zhaocheng ~]# sort -n number.txt 2 3 5 7 56 65 80
-r的话就是进行倒序进行排列
[root@zhaocheng ~]# sort -n -r number.txt 80 65 56 7 5 3 2
好比在咱们的linux/var/log下有不少的日志文件,好比有系统的计划任务的,等等,可是里面的文件也比较多,能够经过sort去排序,方便查看
[root@k8s-master1 log]# du -sh * |sort -n -r 755M messages 236K wtmp 132K cron-20200216 132K cron-20200209 132K cron-20200202 132K cron-20200126 68K cloud-init.log 52K cron 36K dmesg 34M audit 25M sa 8.0K tuned 8.0K boot.log-20191021
sort -u能够也能够进行排序以及去重
[root@zhaocheng ~]# sort -u filetest adm:x:3:4:adm:/var/adm:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt root:x:0:0:root:/root:/bin/bash
将咱们的输出的内容进行保存,这里就须要-o,存储到指定文件
[root@zhaocheng ~]# sort -n -r number.txt -o number.txt [root@zhaocheng ~]# cat number.txt 9865 890 876 56 55 34 6 4