Linux系统之find

神龙 2020-02-15

目录

01 Linux系统查找命令

find概述

Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find [路径] [类型] [动作] [内容]

find参数

-name:指定名称

-user:按文件属主查找
-group:按文件属组查找
-path:文件/目录匹配查找
-type:文件类型
  -f   #普通文件
  -d   #目录
  -c   #字符
  -b   #块设备
  -s   #socket
  -l   #链接文件 

-mtime:按修改时间查找
-atime:按文件访问时间查找
-ctime:按文件创建时间查找
#时间数字:+7 七天以前、7 第七天、-7 最近七天

-perm:按权限查找

-maxdepth:查找深度

-size:+10k 大于10k、-100k 小于100k

find名称查找

1.环境模拟

rm -rf /data/
mkdir -p /data
touch /data/{a,b,c}.txt

[ ~]# ls -l /data/
total 0
-rw-r--r-- 1 root root 0 Jan 27 20:35 a.txt
-rw-r--r-- 1 root root 0 Jan 27 20:35 b.txt
-rw-r--r-- 1 root root 0 Jan 27 20:35 c.txt

2.实践

//查找/data目录下a.txt文件
[ ~]# find /data/ -name "a.txt"
/data/a.txt

//查找/data目录下以.txt结尾的文件
[ ~]# find /data/ -name "*.txt"
/data/a.txt
/data/b.txt
/data/c.txt

find类型查找

1.环境模拟

rm -rf /data/
mkdir /data/{dir1,dir2,link} -p
touch /data/{a..c}.txt
ln -s /data/link /data/sort_link

2.实践

-type:文件类型
  -f   #普通文件
  -d   #目录
  -c  #字符
  -b  #块设备
  -s  #socket
  -l  #链接文件 
  
//查找/data目录下的所有普通文件
[ ~]# find /data/ -type f
/data/a.txt
/data/b.txt
/data/c.txt

//查找/data目录下的所有软链接
[ ~]# find /data/ -type l
/data/sort_link

//查找/data目录下的所有目录
[ ~]# find /data/ -type d
/data/
/data/dir1
/data/dir2
/data/link

find大小查找

1.环境模拟

rm -rf /data/
mkdir /data -p
touch /data/{a..f}.txt
seq 100000 >/data/a.txt  
seq 59000 >/data/b.txt     
seq 20000 >/data/c.txt  
seq 999999 >/data/d.txt  
seq 9999999 >/data/e.txt  
seq 999999999 >/data/f.txt 

[ ~]# ls -lh /data/
total 9.3G
-rw-r--r-- 1 root root 576K Jan 27 20:15 a.txt
-rw-r--r-- 1 root root 335K Jan 27 20:15 b.txt
-rw-r--r-- 1 root root 107K Jan 27 20:15 c.txt
-rw-r--r-- 1 root root 6.6M Jan 27 20:16 d.txt
-rw-r--r-- 1 root root  76M Jan 27 20:16 e.txt
-rw-r--r-- 1 root root 9.3G Jan 27 20:16 f.txt

2.实践

-size:+10k 大于10k、-100k 小于100k

//查找/data目录下大于100K并小于300K的文件
[ ~]# find /data/ -size +100k -size -300k |xargs  ls -lh
-rw-r--r-- 1 root root 107K Jan 27 20:15 /data/c.txt

//查找/data目录下大于500K并小于100M的文件
[ ~]# find /data/ -size +500k -size -100M  |xargs  ls -lh
-rw-r--r-- 1 root root 576K Jan 27 20:15 /data/a.txt
-rw-r--r-- 1 root root 6.6M Jan 27 20:16 /data/d.txt
-rw-r--r-- 1 root root  76M Jan 27 20:16 /data/e.txt

//查找/data目录下大于1G的文件
[ ~]# find /data/ -size +1G |xargs ls -lh
-rw-r--r-- 1 root root 9.3G Jan 27 20:16 /data/f.txt

find权限查找

1.环境模拟

rm -rf /data/
mkdir /data -p
touch /data/{a..c}.txt
chmod 777 /data/a.txt    
chmod 600 /data/b.txt  
chmod 000 /data/c.txt

2.实践

-perm:按权限查找

[ ~]# ll /data/
total 0
-rwxrwxrwx 1 root root 0 Jan 27 20:20 a.txt
-rw------- 1 root root 0 Jan 27 20:20 b.txt
---------- 1 root root 0 Jan 27 20:20 c.txt

//查找/data目录下权限为777的文件
[ ~]# find /data/ -perm 777  |xargs ls -l
-rwxrwxrwx 1 root root 0 Jan 27 20:20 /data/a.txt

//查找/data目录下权限为600的文件
[ ~]# find /data/ -perm 600  |xargs ls -lh 
-rw------- 1 root root 0 Jan 27 20:20 /data/b.txt

//查找/data目录下权限为000的文件
[ ~]# find /data/ -perm 000  |xargs ls -lh   
---------- 1 root root 0 Jan 27 20:20 /data/c.txt

find用户查找

1.环境模拟

rm -rf /data/
mkdir /data -p
touch /data/{a..d}.txt
chown sa.sa /data/a.txt
chown xmh.xmh /data/c.txt
chown xmh /data/d.txt

[ ~]# ll -l /data/
total 0
-rw-r--r-- 1 sa   sa   0 Jan 27 20:26 a.txt
-rw-r--r-- 1 root root 0 Jan 27 20:26 b.txt
-rw-r--r-- 1 xmh  xmh  0 Jan 27 20:26 c.txt
-rw-r--r-- 1 xmh  root 0 Jan 27 20:26 d.txt

2.实践

-user:按文件属主查找
-group:按文件属组查找

//查找/data目录下属于sa用户的文件
[ ~]# find /data/ -user sa |xargs ls -l
-rw-r--r-- 1 sa sa 0 Jan 27 20:24 /data/a.txt

//查找/data目录下属于root用户的文件
[ ~]# find /data/ -type f  -user root  |xargs ls -l
-rw-r--r-- 1 root root 0 Jan 27 20:26 /data/b.txt

//查找/data目录下属于root用户组的文件
[ ~]# find /data/ -type f -group root |xargs  ls -l
-rw-r--r-- 1 root root 0 Jan 27 20:26 /data/b.txt
-rw-r--r-- 1 xmh  root 0 Jan 27 20:26 /data/d.txt

find时间查找

//时间数字:+7 七天以前、7 第七天、-7 最近七天
-mtime:按修改时间查找
-atime:按文件访问时间查找
-ctime:按文件创建时间查找

//按修改时间查找七天以前的文件
[ ~]# find / -mtime +7

//按文件访问时间查找最近七天的文件
[ ~]# find / -atime -7

//按文件创建时间查找第七天的文件
[ ~]# find / -atime 7

find动作

1.环境模拟

rm -rf /data/
mkdir /data -p
touch /data/{a..z}.txt

2.实践

//结合exec,查找/data目录下类型为 f  且名称为a.txt的文件删除
[ ~]# find /data/ -type f -name "a.txt" -exec rm {} \;

//结合管道,查找/data目录下所有以.txt的文件删除
[ ~]# find /data -type f -name "*.txt" |xargs  rm -rf  

//结合管道,查找/var/log目录,删除15天以前修改过的文件
[ ~]# find /var/log/  -type f  -mtime +15 |xargs rm -f


结合exec:将查找到的文件传给"{}",表示对前面查找到的文件,做"rm"动作
结合管道:将查找到的文件传给管道符xargs rm -f(xanrgs把需要删除的内容变成一行,最后接rm -f 删除,相当于rm -f /data/a.txt /data/b.txt)

find排除目录查找

//排除/usr和/tmp目录
[ ~]# find / ! -path "/usr/*" ! -path "/tmp/*" -type f -name "test_*"

相关推荐

老甘的可读区 / 0评论 2020-02-23