find文件查找

问题:

find: 只查找文件

grep: 筛选文件里面的内容

 

1.find名称查找

[root@www.oldboyedu.com ~]# find ./ -name "*eth0" #查找当前目录下名称为 *eth0

[root@www.oldboyedu.com ~]# find ./ -iname "*eth0" #忽略大小写的查询方式

 

2.find大小查找

#查找/etc目录下文件大于5M,然后使用-ls参数以长格式显示(-ls和系统的ls不是一个命令)

[root@www.oldboyedu.com ~]# find /etc -size +5M -ls

#查找/etc目录下文件大于5M,使用系统的ls来以长格式显示

[root@www.oldboyedu.com ~]# find /etc -size +5M |xargs ls -lh

 

查找/etc目录下小于1b的文件

[root@www.oldboyedu.com ~]# find /etc -size -1b|xargs ls -l

 

3.find类型查找

f 文件

d 目录

l 链接

p 管道文件

s socket文件

c 字符设备

b 块设备

 

查找当前目录下类型是文件的,并忽略大小写的名称查找为 *-eth0,都以长格式显示

[root@www.oldboyedu.com ~]# find ./ -type f -iname "*-eth0" -ls

查找当前目录下类型是目录的,并忽略大小写的名称查找为 *-eth0,都以长格式显示

[root@www.oldboyedu.com ~]# find ./ -type d -iname "*-eth0" -ls

 

查找/bin下类型是链接文件的,忽略大小写查找名称为b*的,以长格式显示

[root@www.oldboyedu.com ~]# find /bin/ -type l -iname "b*" -ls

 

[root@www.oldboyedu.com ~]# find /dev/ -type b -ls

[root@www.oldboyedu.com ~]# find /dev/ -type c -ls

 

PS:类型有了,最好还有name或size,如下

[root@www.oldboyedu.com ~]# find /etc/ -type f -size +3M -name "hw*"

 

 

 

4.find时间查找

[root@xuliangwei ~]# for i in {01..28};do date -s 201904$i && touch file-$i;done

 

+7,以当前时间为主,查找7天以前的内容(保留了最近7天的数据) 不会打印当天的文件

[root@www.oldboyedu.com ~]# find ./ -type f -name "file*" -mtime +7

[root@www.oldboyedu.com ~]# find ./ -type f -name "file*" -mtime +7 -delete

 

-7,查找最近7天的文件,不建议使用(会打印当天的文件)

[root@www.oldboyedu.com ~]# find ./ -type f -name "file*" -mtime -7

 

找第7天文件(不会打印当天的文件)

[root@www.oldboyedu.com ~]# find ./ -type f -mtime 7

./file-21

 

#本地文件保留最近7天的备份文件, 备份服务器保留3个月的备份文件(实际使用方案)

find /backup/ -iname "*.bak" -mtime +7 -delete

find /backup/ -iname "*.bak" -mtime +90 -delete

 

 

5.find用户查找

#查找home目录下,类型是目录的并且属主是jack的,同时只查找一层

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -user jack

 

#查找home目录下,类型是目录的并且属组是hr的,同时只查找一层

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -group hr -ls

 

#查找home目录下,类型是目录的并且属主是jack属组是hr的,同时只查找一层

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -user jack -group hr -ls

 

#查找home目录下,类型是目录的要么属主是jack,要么属组是hr

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -user jack -o -group hr|xargs ls -ld

 

#查找home目录下,类型是目录没有属主的

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -nouser -ls

#查找home目录下,类型是目录没有属组的

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -nogroup -ls

 

#查找home目录下,类型是目录没有属主或没有属组

[root@www.oldboyedu.com ~]# find /home/ -maxdepth 1 -type d -nouser -o -nogroup |xargs ls -ld

 

 

6.find权限查找

精确查找文件的权限为644

[root@www.oldboyedu.com ~]# find ./ -type f -perm 644

 

#包含444权限即可 -444

[root@www.oldboyedu.com ~]# find ./ -type f -name "file*" -perm -444

 

#查找全局可写(每位权限必须包含w)

[root@xuliangwei ~]# find . -perm -222 -ls

#包含set uid

[root@xuliangwei ~]# find /usr/sbin -perm -4000 -ls

#包含set gid

[root@xuliangwei ~]# find /usr/sbin -perm -2000 -ls

#包含sticky

[root@xuliangwei ~]# find /usr/sbin -perm -1000 -ls

 

 

 

Action动作:

-delte,只能删除文件,如果要删除目录,需要保证目录为空,否则无法删除

[root@www.oldboyedu.com ~]# find ./log/ -type f -name "*.log" -delete

 

-ok,可以执行任何自定义命令,但是会提示是否确认.

[root@www.oldboyedu.com ~]# find /etc/ -name "ifcfg*" -ok cp -vp {} /tmp \;

 

-exec

[root@www.oldboyedu.com ~]# find /etc/ -name "ifcfg*" -exec cp -vp {} /tmp \;

[root@www.oldboyedu.com ~]# find log/ -type d -exec cp -rpv {} /tmp \;

[root@www.oldboyedu.com ~]# find test/ -type f -exec rm -f {} \;

 

#xargs将前者命令查找到的文件作为一个整体传递后者命令的输入

[root@xuliangwei ~]# touch file.txt

[root@xuliangwei ~]# find . -name "file.txt" |xargs rm -f

[root@www.oldboyedu.com ~]# find . -name "file.txt" |xargs -I {} cp -rvf {} /tmp

 

 

--------------------------------------------------------------------------------

#1.测试exec和xargs的删除速度

[root@www.oldboyedu.com ~]# find ./|wc -l

18034

 

#2.exec是将查找到的文件,一个一个删除

[root@www.oldboyedu.com ~]# time find ./ -exec rm -rf {} \;

real 0m0.960s

user 0m0.051s

sys 0m0.880s

 

#3.xargs是将文件整体作为一个目标,一次删除

[root@www.oldboyedu.com ~]# time find ./ |xargs rm -fr

real 0m0.514s

user 0m0.047s

sys 0m0.478s

 

 

问题:

 

1.我仅记得文件里面的内容,但不记得文件在哪,也不记得文件名是什么,怎么办?

find /etc | xargs grep -R "chroot_local_user" --color=auto

#查找/etc目录下的所有文件或目录,将查找到的结果传递给grep命令做筛选.

 

 

 

3.find相关练习题

1.查找/tmp目录下,属主不是root,且文件名不以c开头的文件

[root@www.oldboyedu.com ~]# find /tmp/ ! -user root ! -name "c*"

/tmp/ttt

 

2.查找/var目录下属主为root,且属组为mail的所有文件

[root@www.oldboyedu.com ~]# find /var/ -type f -user root -a -group mail -ls

 

3.查找/var目录下不属于root、lp、gdm组 的所有文件

[root@www.oldboyedu.com ~]# find /var/ -type f ! \( -group root -o -group lp -o -group gdm \) |xargs ls -ld

 

4.查找/var目录下最近一周修改过的文件,同时属主不为root,也不是postfix的文件

[root@www.oldboyedu.com ~]# find /var/ -type f -mtime -7 ! -user root ! -name "postfix"

 

5.查找/etc目录下大于1M且类型为普通文件的所有文件

[root@www.oldboyedu.com ~]# find /etc/ -type f -size +1M

 

6.将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变

[root@www.oldboyedu.com ~]# find /etc/ -type d -exec mkdir -p /tmp/{} \;

 

7.将/etc目录复制到/var/tmp/,/var/tmp/etc的所有目录权限777/var/tmp/etc目录中所有文件权限666

[root@www.oldboyedu.com ~]# cp -rp /etc/ /var/tmp/

[root@www.oldboyedu.com ~]# find /var/tmp/etc/ -type d -exec chmod 777 {} \;

[root@www.oldboyedu.com ~]# find /var/tmp/etc/ -type f -exec chmod 666 {} \;

[root@www.oldboyedu.com ~]# find /var/tmp/etc/ ! -type d -exec chmod 666 {} \;

 

8.保留/var/log/下最近7天的日志文件,其他全部删除

[root@www.oldboyedu.com ~]# find /var/log/ -type f -mtime +7 -delete

 

9.创建touch file{1..10}10个文件, 保留file9,其他一次全部删除

[root@www.oldboyedu.com ~]# find ./ -type f ! -name "file9" -delete

 

10.解释如下每条命令含义

mkdir /root/dir1

touch /root/dir1/file{1..10}

find /root/dir1 -type f -name "file5"

find /root/dir1 ! -name "file5"

find /root/dir1 -name "file5" -o -name "file9"

find /root/dir1 -name "file5" -o -name "file9" -ls

find /root/dir1 \( -name "file5" -o -name "file9" \) -ls

find /root/dir1 \( -name "file5" -o -name "file9" \) -exec rm -rvf {} \;

find /root/dir1 ! \( -name "file4" -o -name "file8" \) -exec rm -vf {} \;

 

 

find:

1.按照名称查找\大小查找\文件类型查找\时间查找\用户组查找\权限查找\

2.查找之后的文件使用什么动作进行处理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值