Linux常用命令 | find
作者简介
李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。
一、前言
自己平时比较喜欢记笔记,工作四五年,笔记上千篇。最近离职了,加上职场瓶颈,准备好好复盘和整理一下相关的笔记、梳理一下知识点,可能后面有一系列的博文输出,从基础到进阶。
二、find命令
find命令是Linux系统管理员工具库中最强大的工具之一,可以使用find命令根据权限、类型、日期、所有权、大小等搜索文件和目录,它还可以与grep或sed等其他工具结合使用。
语法:
find [options] [path...] [expression]
三、实践
1、按文件名查找
find / -name access.log
2、通过扩展名查找文件 -name
find . -name “*.txt” #在当前目录下查找所有txt后缀文件
3、按权限查找文件 -perm
find . -perm 755 -print #查找当前目录下755权限的文件 find . -perm -007 -print #查找所有用户都可以读、写、执行的文件
4、按所有者查找文件 -group / -nogroup / -user / -nouser
find ~ -group lile -print #查找~目录下所属者为lile的文件 find /home -group -print #查找属主账户已经被删除的文件,查找在/etc/passwd里已经没有了的账户 find ~ -user lile -print #查找~目录下所属者为lile的文件 find /home -nouser -print #查找属主账户已经被删除的文件,查找在/etc/passwd里已经没有了的账户
5、按修改日期查找文件 -mtime
find . -mtime -3 -print #查找更改时间在3天之内的文件 find . -mtime -2 -print #查找更改时间在2天之前的文件
6、按类型查找文件 -type
find . -type d -print #查找当前目录下的所有目录 find . ! -type d -print #查找当前目录下除了目录的其他所有类型文件
7、按大小查找文件 -size
find . -size 100c -print 查找当前目录下文件长度为100字节的文件 find . -size +1000000c -print 查找当前目录下文件大于1M字节的文件 find . -size +10 -print 查找当前目录下超过10块的文件(1块=512字节)
8、排除某个目录 -prune
find /shell -path "/shell/tt" -prune -o -print #查找在/shell目录下除了tt目录的其他 find /shell -path "/shell/tt" -prune -o -name "*.txt" -print #查找在/shell目录下除了tt目录的txt文件
9、目录与文件先后顺序 -dept
find /shell -depth -print #有dept:先处理目录下的子内容,再处理目录本身 #无dept:先处理目录本身,然后处理目录下的子内容
10、正则查找
find . -name "[A-Z]*" -print #查找当前目录及子目录中查找文件名以大写字母开头的文件 find . |xargs grep "YZS" #查找某个文件夹下面的哪些具体文件包含某一个字段 find . -regextype "posix-egrep" -regex ".*\.(cc|h)" |xargs cat |grep -v ^$ |wc -l
11、查找并对结果做相关操作 -exec / -xargs
find . -type l -exec ls -l {} \; #找到为文件类型为软连接的文件 find . -type f -print | xargs file #文件分类 find / -name "core*" -print | xargs echo "">/tmp/core.log #找到内存信息转储文件coredump,然后保存到/tmp/core.log下 find . -name "*.txt" -print0 | xargs -0 rm -rf #找到后删除,慎用 find / -path '/etc/ssl/certs' -prune -o -name *.pem | xargs -i cp {} ./pem #找到后并拷贝 cat file.txt | xargs #将多行转换成单行 cat file.txt | xargs -n 3 #指定每行的参数数量 每次执行需要x个参数 echo "splitXsplitXsplitXsplit" |xargs -d X #用自己指定的分隔符进行分割 echo "splitXsplitXsplitXsplit" |xargs -d X -n 2 #用自己指定的分隔符进行分割,并且指定每行输出的数量 cat args |xargs -I {} bash cecho.sh p {} 1 #从cat里读取数据,每读到一个就替换一次
12、匹配多个文件
find . \( -name "*.txt" -o -name "*.pdf" \)
13、find排除某个目录
find / -path '/etc/ssl/certs' -prune -o -name *.pem #find 查找路径 -path '排除目录路径' -prune -o ....
四、find时间点问题
find与时间有关的选项有-atime(访问时间)、-ctime(创建时间)、-mtime(属性修改时间),参数为后面跟的时间n;
find . -atime n 这里的n表示n天之前的“一天之内”被访问过的文件
find . -atime +n 列出在n天之前(不包含n天本身)被访问过的文件
find . -atime -n 列出在n天之内(包含n天本身)被访问过的文件
实例:
假如现在的时间点为20171209的15:00整,那么下面几个查询表示的具体时间范围
1:创建文件
touch -a -d "2021-01-01 15:00" a.txt touch -a -d "2021-01-02 15:00" b.txt touch -a -d "2021-01-03 15:00" c.txt touch -a -d "2021-01-04 15:00" d.txt touch -a -d "2021-01-05 15:00" e.txt touch -a -d "2021-01-06 15:00" f.txt touch -a -d "2021-01-07 15:00" g.txt touch -a -d "2021-01-08 15:00" h.txt
2:以下三条命令得到的结果分别为:
find . -atime 2 找出两天之前的一天内被访问文件(距离现在的 -72小时 ~~ -48小时 之间)
find . -atime -2 找出距离此时两天之内的被访问的文件(距离现在的前48小时之内)
find . -atime +2 找出两天之前,不包括两天之前的一天(也就是不包括-2和2的)之前的被访问的文件(离此时72小时之前)
3、图形分析
五、学习交流
欢迎大家关注我的公众号,一起交流、学习。