RHCSA-A11.查找文件

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCSA-A11.查找文件相关的知识,希望对你有一定的参考价值。

红帽RHCE考试上午-RHCSA(RH134)

servera.example.com 任务

11.查找文件

任务要求

  • 查找属于 harry 用户的所有文件,并拷贝到/root/findfiles 目录

完成步骤

  1. 先创建所需的目录
    mkdir -pv /root/findfiles
  2. 再查找指定的文件并放到之前创建的目录中去
    find / -user harry -type f -exec cp -av {} /root/findfiles \\;
  • 以下脚本作为参考
DIR="/root/findfiles"; [-d $DIR ] || mkdir -pv $DIR
find / -user harry -type f -exec cp -av { } $DIR \\;
ll -a $DIR #检查其中文件所属

注意:1. 查找的路径要确定好,搞明白从哪查;2. 拷贝的时候要使用-a参数保留文件原来的属性

考察的知识点

find搜索查找

  • 相对于locat可以设定更多的搜索条件
  • 比locat的慢
  • 默认是递归,同时包含隐藏文件
  • 从某种角度来讲,可以代替ls

find搜索姿势

  • 默认先处理文件夹,再处理文件夹
    find [选项] [路径] [查找条件] [处理动作]

根据层级搜索文件

  • depth 按层级进行搜索
    • maxdepth 最大层级
    • mindepth 最小层级

find /etc/ -maxdepth 2 -mindepth 2

根据文件名搜索文件

-name "文件名称" #支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
-iname "文件名称" #不区分字母大小写
-inum n #按inode号查找
-samefile name #相同inode号的文件
-links n #链接数为n的文件
-regex "PATTERN" #以正则表达式或者通配符PATTERN匹配整个文件路径,而非文件名称
find -name snow.png
find -iname snow.png
find / -name ".txt"
find /var –name "log*"
[root@centos8 data]#find -regex ".*\\.txt$"
./scripts/b.txt
./f1.txt

按用户搜索

-user USERNAME #查找属主为指定用户(UID)的文件
-group GRPNAME #查找属组为指定组(GID)的文件
-uid UserID #查找属主为指定的UID号的文件
-gid GroupID #查找属组为指定的GID号的文件
-nouser #查找没有属主的文件
-nogroup #查找没有属组的文件

find /home -user sun -ls

根据文件的类型搜索

  • -type 类型 #TYPE可以是以下形式:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件

find /home –type d -ls #查看/home的目录

搜空的文件和文件夹

  • -empty

按组合条件搜索

与:-a ,默认多个条件是与关系
或:-o
非:-not !
## 查找/etc下所有目录或者是链接文件进行统计
[root@centos8 ~]#find /etc/ -type d -o -type l |wc -l
307
## 与的优先级比或者高
[root@centos8 ~]#find /etc/ -type d -o -type l -ls |wc -l
101
[root@centos8 ~]#find /etc/ -type l -ls |wc -l
101
[root@centos8 ~]#find /etc/ \\( -type d -o -type l \\) -ls |wc -l
307
德^摩根定律:
(非A)或(非B) = 非(A且B)

(非A)且(非B) = 非(A或B)

!A -a !B = ! (A -o B)
!A -o !B = ! (A -a B)
  • 找出/tmp目录下,属主不是root,且文件名不以f开头的文件
#找出/tmp目录下,属主不是root,且文件名不以f开头的文件
find /tmp \\( -not -user root -a -not -name 'f*' \\) -ls
find /tmp -not \\( -user root -o -name 'f*' \\) –ls

排除目录

  • -a -prune 排除指定的文件或者目录
  • 查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
find /etc -path '/etc/security' -a -prune -o -name "*.conf"
  • 查找/etc/下,除/etc/security和/etc/systemd,/etc/dbus-1三个目录的所有.conf后缀的文件
#查找/etc/下,除/etc/security和/etc/systemd,/etc/dbus-1三个目录的所有.conf后缀的文件
find /etc \\( -path "/etc/security" -o -path "/etc/systemd" -o -path "/etc/dbus-1" \\) -a -prune -o -name "*.conf"
  • 查找根下文件时排除/proc和/sys目录
#排除/proc和/sys目录
find / \\( -path "/sys" -o -path "/proc" \\) -a -prune -o -type f -a -mmin -1

根据文件大小搜索

  • -size 文件的大小
-size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感
#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]
-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]
+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)
100M 表示100M-1M到100M

1024m 表示1023到1024不包括1023
1G    表示0到1G不包括0
dd if=/dev/zero of f1.img bs=1M cont=100

find / -size 100M -ls #找到的是99M-100M不包括99M可以是100M德文件
  • 找大于100M德文件
    find / -size +100 -ls #表示找到的是大于100M单不包括100M的文件

根据时间戳搜索

  • 查找文件或目录时间戳在某个指定的时间点或者在这个时间点之前或者之后多长时间段内的文件或目录

  • 以“天”为单位

-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#

# #表示[#,#+1) 表示当前时间点往前的第#天内的时间戳 
+# #表示[#+1,∞] 表示当前时间点往前的第#天(不包括第#天当天)以前的所有时间戳
-# #表示[0,#) 表示当前时间点到第#天(不包括第#天当天)这段时间

做一个比喻,六环路就是电子围栏

  1. -atime 6 相当于环城地铁 只能在六环主路上跑,不能出去也不能进来,就是从今天24小时内往前的第6天,今天是9月29日,-atime 6 就是9月23日这一天的时间戳
  2. -atime +6 相当于外阜摩托车 禁止进入六环内行驶,包括六环主路都不行,六环路以外到无限远都行,今天是9月29日,-atime +6 就是9月23日0点之前也就是9月22日23:59这一时刻以前的所有时间
  3. -atime -6 被电子围栏限制的共享电动车,不能出六环,上六环主路也不行,只能在6环内,今天是9月29日,-atime -6 就是9月24日0点到现在9月29日当天所有时间的时间戳

曾经沧海 ~ -atime +6 ][ -atime 6 ][ -atime -6 ~ 眼前的苟且 ]

  • 将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
    find . -type f -ctime -20 #最近20天内的文件

  • 查找 /var/log 目录中更改时间在 20 日以前的普通文件,并在删除之前询问它们:
    find /var/log -type f -mtime +20 -ok rm {} \\; #找出20日再往前的所有文件

  • 查找在20天前那一天在/etc下创建的属于 harry 用户的目录,并拷贝目录和其内容到/root/findfiles 目录
    find /etc -uesr harry -type d -ctime -exec cp -av {} /root/findfiles \\;

  • 以“分钟”为单位

-amin
-mmin
-cmin
简名全名中文作用
atimeAccess Time访问时间最后一次访问文件(读取或执行)的时间
ctimeChange Time变化时间最后一次改变文件(属性或权限)或者目录(属性或权限)的时间
mtimeModify Time修改时间最后一次修改文件(内容)或者目录(内容)的时间

注意:时间戳的概念和文件大小的概念类似但相反

根据文件的权限搜索

-perm [/|-]MODE
MODE #精确权限匹配
/MODE #任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从CentOS 7开始淘汰
-MODE #每一类对象都必须同时拥有指定权限,与关系
0 表示不关注
  • -perm
find -perm 600 -ls 搜索权限为600的文件
find -perm /600 -ls 斜杠表示或者,表示所有者有读r4或者写w2的权限都行,但至少有一个
find -perm -600 -ls 横线表示并且,表示所有者必须有r4且必须有w2的权限

并且和或,至少2个权限以上才有意义,只有一个都一样

查找后的处理动作

-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \\; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \\; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
find -name "*.sh" -ok mv {} /opt \\; 问一次移一次
find -name "*.sh" -exec mv {} /opt \\;不问直接移

注意:一旦有-ok 或者有 -exec 后边就必须有 ;结束,这个是语法要求

  • 备份配置文件,添加.orig这个扩展名
    find -name ".conf" -exec cp {} {}.orig \\;
  • 查找存在时间超过3天以上的joe的临时文件并进行删除,删除前需要提示
    find /tmp -ctime +3 -user joe -ok rm {} \\;
  • 在主目录中寻找可被其它用户写入的文件
    find ~ -perm -002 -exec chmod o-w {} \\;
  • 查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
    find /data –type f -perm 644 -name "*.sh" –exec chmod 755 {} \\;

以上是关于RHCSA-A11.查找文件的主要内容,如果未能解决你的问题,请参考以下文章

RHCSA-A12.在文件中查找指定的字符串

RHCSA-A9.配置文件ACL权限

RHCSA-A8.配置文件共享autofs

RHCSA-A13. 创建归档打包压缩文件夹

RHCSA-A6.配置特殊权限的目录

RHCSA-A7.配置NTP时间同步