Linux面试必备-find文件查找企业级用法进阶| 学习笔记

简介: 快速学习Linux面试必备-find文件查找企业级用法进阶

开发者学堂课程【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,Gc(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、-ok 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  -n100 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

相关文章
|
2天前
|
Linux Shell Python
如何计算 Linux 上文件中的空行数?
【5月更文挑战第11天】
7 0
|
3天前
|
Linux API
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
|
3天前
|
Linux
如何在 Linux 中递归更改文件的权限?
【5月更文挑战第10天】
14 3
|
3天前
|
监控 Linux 数据处理
|
3天前
|
Linux
Linux如何查询较大文件的方法
【5月更文挑战第8天】Linux如何查询较大文件的方法
6 0
|
4天前
|
Linux 程序员 Shell
【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法
【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法
|
4天前
|
Linux Shell
Linux操作系统下查找大文件或目录的技巧
Linux操作系统下查找大文件或目录的技巧
10 2
|
1月前
|
存储 安全 Java
大厂面试题详解:java中有哪些类型的锁
字节跳动大厂面试题详解:java中有哪些类型的锁
63 0
|
2天前
|
存储 Java
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
42 23
|
5天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
16 0