find命令与sort命令的使用方法

[复制链接]

826

主题

826

帖子

446

积分

中级会员

Rank: 3Rank: 3

积分
446
分享到:
发表于 2022-6-21 11:01:07 | 显示全部楼层 |阅读模式
find命令
Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
参数说明 :

find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-type 按照文件类型去查找
b:块设备文件;
c:字符设备文件;
d:目录文件;
p: 命名管道;
f: 普通文件;

l: 符号链接文件;
-exec 相当于shell执行命令比如rm,mkdir,touch,等
-mtime 修改时间之前的文件,比如3天之前的,一般用于日志清理进行匹配
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-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 d0000/.git00/.git/objects00/.git/objects/pack00/.git/objects/52[root@zhaocheng ~]# find 00 -type f00/eureka-service-target.zip00/eureka.yaml00/.git/config00/.git/description00/.git/objects/52/c6e76bc253b21e1e59074e5730edb74b0af3991>访问时间(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/bakfind命令与grep命令连用,找出/root下以filetest的文件,找出以halt的行
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;#halt:x:7:0:halt:/sbin:/sbin/haltfind命令与sed命令连用,找出/root下以filetest的文件,找出以halt的行,将它的以#开头的注释删除掉
[root@localhost ~]# find /root/ -name "filetest" -exec grep "halt" {} \;|sed 's/^#/halt&/' halt#halt:x:7:0:halt:/sbin:/sbin/haltfind命令与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 -sh46M ??./eureka-service/target/eureka-service.jar40M ??./eureka-service.zip40M ??./.git/objects/c8/aeecf5dbe33c9e24a049738fcccc2aa8b4ff10找出/目录下大于50M的文件并查看文件大小,进行倒着排序,type类型一般用户指定f为文件,或者d为目录,-size大小,xargs进行管道统计,sort -n是指定数字,r是倒着排序
[root@zhaocheng ~]# find / -type f -size +50M |xargs du -sh |sort -nrfind: ‘/proc/8705/task/8705/fdinfo/6’: No such file or directoryfind: ‘/proc/8705/fdinfo/5’: No such file or directory500M ?/opt/binary_pkg.gz268M ?/opt/binary_pkg/image.tar.gz157M ?/data/soft/logstash-7.5.0.tar.gz136M ?/var/lib/rpm/Packages136M ?/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 -20642 ??.126 ??./git-eureka86 ??./pp81 ??./99/.git81 ??./9981 ??./88/.gituniq 命令删除文件中的重复行。 uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。
用法:uniq[选项]…(输入[输出]]

从输入(或标准输入)中过滤相邻的匹配行,
写入到输出(或标准输出)。
以这个文件为示例
[root@zhaocheng ~]# cat filetestroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/halt参数解释
-c ?????按出现的次数计算前缀行数
-d ????只打印重复的行
-D ????打印所有重复的行
如果没有选项,匹配的行将合并到第一个出现的行。
[root@zhaocheng ~]# uniq filetestroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinhalt: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 filetestroot:x:0:0:root:/root:/bin/bash-D将所有的重复的行都打印出来,-d只将重复的行打印一次
[root@zhaocheng ~]# uniq -D filetestroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashsort

用法:排序[选项]…[文件]…

或者:[选项]…——files0-from = F

将所有文件的排序连接写入标准输出。
-b ?忽略每行前面开始出的空格字符。
-c ?检查文件是否已经按照顺序排序。
-f ??排序时,忽略大小写字母。
-M ?将前面3个字母依照月份的缩写进行排序。
-n ?依照数值的大小排序。
-o ?<输出文件> ?将排序后的结果存入指定的文件。
-r ??以相反的顺序来排序。
-t ??<分隔字符> ?指定排序时所用的栏位分隔字符。
-k ?选择以哪个区间进行排序。
[root@zhaocheng ~]# sort filetestadm:x:3:4:adm:/var/adm:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/haltroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bash这里换成数字的话,那么就需要使用sort -n去进行排序
[root@zhaocheng ~]# sort -n number.txt 2357566580-r的话就是进行倒序进行排列
[root@zhaocheng ~]# sort -n -r number.txt 8065567532比如在我们的linux/var/log下有很多的日志文件,比如有系统的计划任务的,等等,但是里面的文件也比较多,可以通过sort去排序,方便查看
[root@k8s-master1 log]# du -sh * |sort -n -r755M ?messages236K ?wtmp132K ?cron-20200216132K ?cron-20200209132K ?cron-20200202132K ?cron-2020012668K ??cloud-init.log52K ??cron36K ??dmesg34M ??audit25M ??sa8.0K ?tuned8.0K ?boot.log-20191021sort -u可以也可以进行排序以及去重
[root@zhaocheng ~]# sort -u filetestadm:x:3:4:adm:/var/adm:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinhalt:x:7:0:halt:/sbin:/sbin/haltroot:x:0:0:root:/root:/bin/bash将我们的输出的内容进行保存,这里就需要-o,存储到指定文件
[root@zhaocheng ~]# sort -n -r number.txt -o number.txt [root@zhaocheng ~]# cat number.txt 986589087656553464
云专线_海外IDC http://www.vecloud.com/

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表