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 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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。