Linux之Find命令详解

Linux系统「文件查找」

Linux系统文件中常用属性为以下内容:名称,大小,权限,属主,属组,修改时间,访问时间等,在庞大的系统中,需要在prompt中查询文件,需要借助其查找工具实现,以此可以查询相同或要求指定属性的文件,Centos及EHLE类系统实现查询工具有:Locate、find工具。

locate工具

`locate` 
    synopsis: locate [option]…PATTERN….
    options:
        -b --basename: 只匹配路径的基名
        -c --count: 统计匹配条件的数量
        -r --regexp:支持正则表达式方式查询

locate工作特性:

优点####

  1. 查询速度快,基于索引表查询,索引表时系统计划或手动使用updatedb命令建立
  2. 不占用系统资源

缺点####

  1. 非实时查询
  2. 模糊查询
  3. 查询的名称匹配路径名称
  4. 索引表建立非常耗用系统资源

find工具

一、工作特点

优点###

  1. 实时查找
  2. 准确查找,遍历整个目录下的所有文件
  3. 可以对查询到的文件进行指定动作,即查看,删除,移动等操作.

缺点####

  1. 查询速度略慢

find命令使用方法

`find` - search for files in a directory hierarhy
    sysnopsis: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

查询条件

查询条件由选项及测试条件组成:
【 测试条件 】
一、以文件名查找
  1. -name pattern : 以文件名查找
  2. -iname pattern: 不区分文件名的大小写,只支持glob风格的查找方式:*,?,[],[^]
  3. -regex pattern: 基于正则表达式查找文件,精确匹配文件名
二、以文件从属关系查找
  1. -user USERNAME : 以用户名查找
  2. -group GROUPNAME : 以组名查找
  3. -uid UID :以UID号查找
  4. -gid GID :以GID查找
  5. -nouser : 查找没有属主的文件
  6. -nogroup : 查找没有属组的文件
三、以文件类型查找
  1. -type TYPE : 以文件类型查找
    1. f : 普通文件
    2. d : 目录文件
    3. b : 块设备文件
    4. c : 字符设备文件
    5. l : 连接文件
    6. s : 套接字文件
    7. p : 管道文件
四、根据文件大小查找
  1. -size [+|-]SIZE : 以文件大小查询,大小包含K,M,G的单位
    1. -size 5M : 精确查找大小为5M的文件,大小上面浮动稍微有偏差
    2. -size -5M : 查询大小小于5M的文件
    3. -size +5M : 查询大小大于5M的文件
五、根据时间查找
  1. -atime [+|-]TIME : 以访问时间(天)查找

  2. -mtime [+|-]TIME : 以数据修改时间(天)查找

  3. -ctime [+|-]TIME : 以元数据修改时间(天)查找

  4. -amin [+|-]TIME : 以访问时间(分钟)查找

  5. -mmin [+|-]TIME : 以数据修改时间(分钟)查找

  6. -cmin [+|-]TIME : 以元数据修改时间(分钟)查找

  7. -newer FILE : 以FILE文件为条件,判断比它新的文件

    • 7 : 准确时间,7表示刚好7(天|分钟)起始位置
    • +7: 7(天|分钟)以前的
    • -7: 7(天|分钟)以内的
六、根据权限查找
  1. -perm MODE : 精确权限查找
    • find . -perm 644
  2. -perm /MODE : 任何一类用户(u,g,o)中的任何一位(r,w,x)符合条件即满足,理解为或关系
    • find . -perm /222 : 查找至少有一个类用户有写权限
    • find . -perm /666 : 查找至少有一个类用户有读写权限
    • find . -perm /001 :查找其他用户有执行权限
  3. -perm -MODE : 每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足,理解为与关系
    • find . -perm -222 : 查找三类用户都有写权限
    • find . -not -perm -222 :至少有一类用户没有写权限
七、 组合条件测试
  1. : -a
    • 默认组合逻辑,可以加-a,也可以取消,例:find . -type f -a -user mariadb,两个条件同时满足
  2. : -o
    • 可以加-o参数,例:find . -type f -o -nouser ,两个条件只满足一个即可
  3. : -not 或者 !表示
    • find . -not -type f,不是普通文件
    • find . ! -type f ,同上
八、处理动作
  1. -print : 默认为打印,不需要添加,输出入屏幕
  2. -ls : 以ls长文件的格式形式输出
  3. -delete : 删除查找到的文件
  4. -fls /PATH/TO/SOMEFILE :把查询到的文件以ls详细信息格式保存到SOMEFILE文件中
  5. -ok COMMAND {} \; : 查找到的文件传递给COMMAND命令,提每步都给用户提示确认操作
  6. -exec COMMAND {} \; : 查找到的文件传递给COMMAND命令,直接修改完成,不给用户确认
注意:find将查找到的文件路径一次性传递给后面的命令,但有很多的命令不能接受过长的参数,导致命令的执行失败,使用如下方式可避免此错误的发生:

find /etc -type f | xargs -i COMMAND : -i参数是由find的结果传给xargs命令后,由-i指定结果代替符

    find /etc -type f | xargs -i cp {} /tmp : -i 指定代替符为{}

选项

一、指定查找目录范围
  1. -maxdepth NUM : 指定最多搜索目录层级到NUM层
  2. -mindepth NUM : 指定最少搜索目录NUM层级
二、查找空文件
  1. -empty : 查询内容为空的文件
    • find ./ -empty : 查找当前目录下的所有空文件
三、排除符号连接
  1. -follow : 排除符号连接

Find与xagrs的命令结合

Usage:

find /etc -type f | xargs -i cp {} /tmp/

    -i : 由xargs接收的参数,由-i声名由后一个命令{}代替

==============

示例
  1. 找出/tmp目录下属主为非root,且文件名包含fstab字符串的文件
    • find /tmp -not -user root -a -name *fstab*
  2. 找出/tmp目录下文件名中不包含fstab字符串的文件
    • find /tmp -not -name *fstab*
  3. 找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件
    • find /tmp -not -user root -a -not -name *fstab*
    • find /tmp -not \(-user root -o -name *fstab*\)
  4. 至少有一周没有访问过的文件
    • find /etc -atime +7 -ls
  5. 24小时内修改过的文件
    • find /etc -mtime -1 -ls
  6. 查找 /var目录下属主为root,且属组为mail的所有文件或目录
    • find /var/ -user root -group mail
  7. 查找/usr目录下不属于root,bin,或者hadoop的所有文件或目录,用两种方法
    • find ./ -not -user bin -not -user user3 -not -user user4
    • find ./ -not \( -user bin -o -user user3 -o -user user4 \)
  8. 查找/etc目录下最近一周其内容修改过, 且属主不是root用户也不是hadoop用户的文件或目录
    • find /etc -mtime -7 -not -user root -not -user hadoop
  9. 查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录
    • find / -atime -7 -nouser -o -nogroup
  10. 查找/etc目录下大于1M且类型为普通文件的所有文件
    • find /etc/ -size +1M -type f -ls
  11. 查找/etc目录下所有用户都没有写权限的文件
    • find /etc/ -type f -not -perm /222 -ls
  12. 查找/etc目录至少有一类用户没有执行权限的文件
    • find /etc/ -not -perm -111 -ls
  13. 查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的所有文件
    • find /etc/ -perm -111 -perm -002
    • find /etc/ -perm -113

摩根定律:

** !A -a !B = !(A -o B)**

** !A -o !B = !(A -a B)**

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容