开发者学堂课程【Linux企业运维实战 - 入门及常用命令:Linux面试必备-find文件查找企业级用法进阶】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/550/detail/7618
Linux面试必备-find文件查找企业级用法进阶
内容介绍:
一、find命令的搜索条件回顾
二、查找条件
三、处理动作
四、参数替换xargs
五、find示例
六、练习
七、Gnome 搜索工具
八、压缩、解压缩及归档工具
一、find命令的搜索条件回顾
1、指搜索层级
-maxdepth level最大搜索目录深度,指定目录为第1级
2、根据文件名和inode查找:
-name"文件名称”:支持使用glob
*
,?,
[]
,
[
^
]
-iname"文件名称”:不区分字母大小写
-inum n按inode号(节点编号)查找
3、根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME:查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
4、根据文件类型查找
- type TYPE
·f:普通文件
·d:目录文件
·l:符号链接文件
·s:套接字文件
·b:块设备文件
·c:字符设备文件
·p:管道文件
5、空文件或目录
-empty
find /app-type d -empty
6、组合条件
与:-a
或:-o
非:-not,!
7、德摩根定律:
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)
8、根据文件大小来查找
-size[+ -]#UNIT
常用单位:k,M,G,c(byte)
#UNIT:(#-1,#]
如:6k表示(5k6k]
-#UNIT:[0,#-1]
如:-6k表示[0,5k]
+#UNIT:(#,oo)
如:+6k表示(6k,oo)
二、查找条件
(一)根据时间戳:
以“天”为单位:
-atime [+|-]#
#:[#,#+1]
+#:[#+1,100]
-#:[0,#]
-time
-crime
以“分钟”为单位:
-amin
-mmin
-cmin
·示例:
使用命令查看三个时间,如atime
[root@centos7 ~]#
ls -l - -time=atime b.txt
-rw-r- -r - -, 1 root 0 Apr 6 17 :55 b.txt
atime、ctime、mtime 也可以作为搜索条件,以天为单位,也支持“+、-”或直接写一个数字。
atime [3,3+1)表示三天到四天,不包括四天
[3+1,oo)表示四天到无穷
[0,3)表示0天到三天
若是添加一个用户,查找 etc 下的改变文件,使用以分钟为单位的amin、mmin、cmin,查找最近1分钟之内改过的文件
[root@centos7 ~]#
useradd hehe
[root@centos7 ~]#
find /etc/ -mmin -1
/etc/
/etc/group
/etc/gshadow
/etc/passwd
/etc/profile.d/f1
/etc/profile.d/env.sh
[root@centos7 ~]#
ll /etc/profile.d/f1
[root@centos7 ~]#
Stat /etc/profile.d/f1
[root@centos7 ~]#
date
(二)根据权限查找:
-perm/-]MODE
MODE:精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰
MODE:每一类对象都必须同时拥有指定权限,与关系
0表示不关注
·find -perm 755 会匹配权限模式恰好是755的文件
·只要当任意人有写权限时,find -perm +222就会匹配
·只有当每个人都有写权限时,find -perm -222才会匹配
·只有当其它人(other)有写权限时,find -perm -002才会匹配
示例:
1、在当前目录中搜索权限为666 的文件
[root@centos7 ~]#
find -perm 666 -ls
[root@centos7 ~]#
chmod 666 f1*
[root@centos7 ~]#
ll
./fstab
./f2
每一个权限由三个用户组合而成,分别为所有者权限、所属组权限、other权限
[root@centos7 ~]#
u=6 g=6 o=6
2、也可以表示或者关系权限:/MODE或-MODE
3、同时存在的权限,以下编写f1符合条件(包含关系):
[root@centos7 ~]#
chmod 777 f1
f1依然符合权限
[root@centos7 ~]#
find -perm -666 ls
[root@centos7 ~]#
u=10 g=10 o=10 111
有“-”表示交集 “/”表示并集
无“-”或“/”表示精确关系
[root@centos7 ~]#
find -perm 666 -ls
[root@centos7 ~]#
find -perm 002 -ls
表示精确匹配002条件
[root@centos7 ~]#
find -perm /002 -ls
表示包含002条件(或者关系)
[root@centos7 ~]#
find -perm 002 -ls
表示002条件三者取交集
在00的基础上-002 与 /002 结果一样
[root@centos7 ~]#
-222 -010010010
表示222三者(所有者、所属组、other)都要有写权限的文件
[root@centos7 ~]#
find -perm +222
表示222三者有一个有写权限的文件即可
三、处理动作
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令
{}:用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
·示例:
1、删除文件delete
[root@centos7 ~]#
find -perm -002 -delete
[root@centos7 ~]#
find -perm -002 -ls
[root@centos7 ~]#
ls
删除不提示,谨慎使用
2、-fls file:查找到的所有文件的长格式信息保存至指定文件中
[root@centos7 ~]#
find -perm /222 -ls
> /root/find.log
[root@centos7 ~]#
cat /root/find.log
或者
[root@centos7 ~]#
find -perm /222 -fls /root/find2.log
3、
-
o
k
COMMAND
{} \
删除命令:
[root@centos7 ~]#
find -name “f*”
设置删除的时候询问一下使用-ok,大括号{ }代表着find命令搜索出来的文件名(find特有)
[root@centos7 ~]#
find -name “f*” -ok rm {} \ ;
移动命令(批量执行不再询问):
[root@centos7 ~]#
find -name “f*” -exec mv {} /mnt/ \ ;
[root@centos7 ~]#
ls /mnt
在mnt下进行查询,并重命名:
[root@centos7 ~]#
find -name “f*” -exec mv {} {}.bak \ ;
复制到别的目录下,并重命名:
[root@centos7 ~]#
find /mnt -name “f*” -exec cp {} /data/{} .orig \ ;
[root@centos7 ~]#
ls /data
面试题:找一个10m以上的文件并删除或移动文件
[root@centos7 ~]#
find / -size +10M -exec mv {} /data/ \ ;
四、参数替换xargs
·由于很多命令不支持管道来传递参数,而日常工作中有这个必要,所以就有了xargs命令
·xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为arguments
·注意:文件名或者是其他意义的名词内含有空格符的情况
·有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
Isf*|xargs rm
find /sbin -perm +700 |ls -l 这个命令是错误的
find /sbin -perm +7000 | xarg ls -l
find和xargs格式:find | xargs COMMAND
·示例:
文件太多如何解决:
[root@centos7 ~]#
mkdir /boot/test
[root@centos7 ~]#
cd /data
[root@centos7 ~]#
touch
使用xargs命令加选项,用特定选项,使用管道传给xargs
[root@centos7 ~]#
touch f
{1..524288}
xargs前面有一个命令,会生成一串字符串,传给xargs,收到后切割成一些字段,再传给下一个命令
[root@centos7 ~]#
echo f{1…524288} |
xargs
[root@centos7 ~]#
echo f{1…1000} |
xargs echo
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
参数依然太长,就认为指定一个0,xargs切割成回车换行,分别单独传输
[root@centos7 test]#echo f{1..524288} | xargs -0 touch
设置结果每两个为一行(两个一组)
[root@centos7
test
]#
echo f{1…1000} |
xargs -n2 touch
f1 f2
f3 f4
f5 f6
f7 f8
f9 f10
[root@centos7
test
]#
cd /boot/test
一次传一个
[root@centos7
test
]#
echo f
{1….100000000} |xargs -n1 touch
[root@centos7
test
]#
ls
f1 f10 f2 f3 f4 f5 f6 f7 f8 f9
一次生成100个,效率更高
[root@centos7
test
]#
echo f
{1….100000000} |xargs -n
100
touch
单条很简单的命令堆叠在一起就容易出现错误
五、find示例
1、备份配置文件,添加.orig这个扩展名
find -
name
“
*.
conf
"
-
exec cp
{}
.
orig
\
2、提示删除存在时间超过3天以上的oe的临时文件
find
/tmp
-ctime
+3
-user
joe
-ok
rm
{} \ ;
3、在主目录中寻找可被其它用户写入的文件
find
/
-perm
-002
-exec
chmod
o-w
{} \ ;
4、查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data -type f -perm 644 -name "*.sh" -exec chmod 755
{} \ ;
5、查看/home的目录
find /home
-type
d
-ls
六、练习
1、查找/ar自录下属主为root,且属组为mail的所有文件
2、查找/var目录下不属于root、lp、gdm的所有文件
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
5、查找/etc目录下大于1M且类型为普通文件的所有文件
6、查找/etc目录下所有用户都没有写权限的文件
7、查找/etc目录下至少有一类用户没有执行权限的文件
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
七、Gnome 搜索工具
1、位置->搜索文件.………
2、图形化搜索工具,可搜索
命令
内容
用户/组群
大小
修改时间
八、压缩、解压缩及归档工具
file-roller
compress/uncompress:.Z
gzip/gunzip:.gz
bzip2/bunzip2:.bz2
xz/unxz:.
xz
zip/unzip
tar
Cpio
(一)compress/uncompress
1、compress[-dfvcVr] [-b maxbits] [file..]
-d:解压缩,相当于uncompress
-c:结果输出至标准输出不删除原文件
-v:显示详情
2、uncompress解压缩
3、zcat file.Z >file
示例:
1、使用compress命令压缩文件
[root@centos7 ~]#
cp messafes m
[root@centos7 ~]#
compress m
[root@centos7 ~]#
ll
total 680
压缩比大给概为5:1
2、解压缩
[root@centos7 ~]#compress -d m.z
3、使用c选项,在压缩时并不删除原文件
[root@centos7 ~]#
compress -c m
> m.z
[root@centos7 ~]#
ll
4、使用zcat进行文件解压缩
[root@centos7 ~]#
zcat m.z > mm
[root@centos7 ~]#
ll
(二)gzip/gunzip
1、gzip[OPTION]...FILE..
-d:解压缩,相当于gunzip
-c:将压缩或解压缩的结果输出至标准输出
-#:1-9,指定压缩比,值越大压缩比越大
2、zcat:不显式解压缩的前提下查看文本文件内容实例:
3、示例:
gzip -c messages >messages.gz
gzip -c-d messages.gz> messages
zcat
messages.gz
>messages
(1)
[root@centos7 ~]#
gzip m
[root@centos7 ~]#
cd /data
(2)压缩并保留原文件
[root@centos7 ~]#
gzip -c m
> m.gz
(3) 压缩比变化
[root@centos7 ~]#
gzip -9 mm
[root@centos7 ~]#
gunzip mm.gz
(三)bzip2/bunzip2/bzcat
1、bzip2[OPTION]...FILE...
-k:keep,保留原文件
-d:解压缩
-#:1-9,压缩比,默认为9
2、bzcat:不显式解压缩的前提下香看文本文件内容
3、示例:
(1)[root@centos7 ~]#
bzip2 m
[root@centos7 ~]#
ll
(2) [root@centos7 ~]#
bunzip2 m
(3) [root@centos7 ~]#
file m.bz2
(4) 假如改文件名,可以用bunzip2 解压缩
[root@centos7 ~]#
mv m.bz2 a
[root@centos7 ~]#
bunzip2 a
(5)[root@centos7 ~]#
cp m.gz mm.txt
[root@centos7 ~]#
gunzip mm.txt
不执行
[root@centos7 ~]#
mv mm.txt mmm.gz
[root@centos7 ~]#
gunzip mmm.gz
压缩工具后缀要精确使用
(四)xz/unxz/xzcat
1、xz[OPTION]...FILE…
-k:keep,保留原文件
-d:解压缩
-#:1-9,压缩比,默认为6
2、xzcat:不显式解压缩的前提下查着文本文件内容
3、实例:
[root@centos7 ~]#
xz mm
[root@centos7 ~]#
ll
压缩比更强
(五)tar工具
1、tar(Tape ARchive,磁带归档的缩写)
2、tar[OPTION]..
(1)创建归档
tar
-cpvf
/PATH/TO/SOMEFILE.tar
FILE...
(2)追加文件至归档:注:不支持对压缩文件追加
tar-r-f/PATH/TO/SOMEFILE.tarFILE...
(3)查看归档文件中的文件列表
tar
-t
-f
/PATH/TO/SOMEFILE.tar
(4)展开归档
tar
-x
-f/PATH/TO/SOMEFILE.tar
tar-x-f/PATH/TO/SOMEFILE.tar-C/PATH/
(5)结合压缩工具实现:归档并压缩
-
j:bzip2,
-z:gzip,-J:xz