神龙 2020-02-15
目录
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
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
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
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
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
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
//时间数字:+7 七天以前、7 第七天、-7 最近七天 -mtime:按修改时间查找 -atime:按文件访问时间查找 -ctime:按文件创建时间查找 //按修改时间查找七天以前的文件 [ ~]# find / -mtime +7 //按文件访问时间查找最近七天的文件 [ ~]# find / -atime -7 //按文件创建时间查找第七天的文件 [ ~]# find / -atime 7
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)
//排除/usr和/tmp目录 [ ~]# find / ! -path "/usr/*" ! -path "/tmp/*" -type f -name "test_*"