文件查找

小编在学这堂课的前一天夜里打嗝打了半宿,第二天上课的时候迷迷糊糊,所以,导致文件查找这章我放了好久的鸽子。

这里是回看视频摘出来的笔记。如有理解有偏差,请留言。

本篇只有3个命令,重点是find,时间有限的朋友可以只看find命令。这太过重要了。

whereis命令

在一些特定的目录搜索,搜索二进制文件、帮助文件、源文件等

选项:

不加任何选项就会列出所有文件。

-b           只搜索二进制文件

-m           只搜索帮助文件

-s         只搜索源文件

-l           列出whereis搜索的路径,也就是whereis会在这些路径下搜索内容

-u         不是上述三类文件的其它类型文件。

locate命令

用来快速搜索文件的工具,是根据索引数据库搜索的。数据路位置/var/lib/mlocate/mlocate.db

1、新系统可能没有这个数据库,updatedb命令可以手工更新数据库

2、updatedb这个命令会消耗大量的IO    需要在系统不繁忙的时候更新

3、updatedb命令会根据/etc/updatedb.conf的设定取搜索硬盘内的文件名,并保存在/var/lib/mlocate目录下的数据库内。

locate命令            主要用来搜索静态文件

-i        不区分大小写搜索

-r        使用基本正则表达式

-b        只搜索文件名,而不搜索全路径。默认是搜索全路径

-c        计数

-n #    只显示前几个搜索结果

-S        显示locate数据库信息

备注:

locate不能指定文件搜索路径,要想指定搜索路径需要手工使用正则表达式指定,祥看示例

locate不是实时搜索,而且是模糊搜索

locate默认会搜索文件的全路径,不仅仅是文件名,意思是如果目录包含某个关键词,目录下的所有文件都会被搜索到

locate只会搜索当前用户能访问到的目录,意思是如果某个用户对某个目录没有访问权限,该目录就不会被搜索

示例说明:指定搜索路径{

[root@CentOS7 scripts]#locate -r "^/data/scripts/.*\.sh"

/data/scripts/FOOT.sh

/data/scripts/adddescrption.sh

/data/scripts/arg.sh

/data/scripts/arg2.sh

/data/scripts/argsnum.sh

/data/scripts/backup_etc.sh

/data/scripts/bim.sh

/data/scripts/checkdisk.sh

/data/scripts/checkint.sh

/data/scripts/createuser.sh

/data/scripts/df_warning.sh}

find命令

实时查找,精确查找,查找条件丰富,只搜索具有权限的目录

find [OPTIONS]  [查找路径]    [查找条件]    [处理动作]

_默认是递归搜索,默认是搜索当前目录_

选项:

-maxdepth #         最大搜索深度,指定搜索目录下搜索到第几级

-mindepth #        最小搜索深度,

-depth或-d        一般是先搜索文件夹,再去搜索文件夹内的文件。如果加上该选项-d,就会先搜索文件,在搜索目录

查找条件:

根据文件名搜索

-name 文件名      根据文件名搜索,精确匹配而不是模糊搜索。支持通配符

如果想要模糊搜索,可以使用   "*文件名*"   建议在使用通配符的时候要加上双引号,要不会产生各种莫名奇妙的问题

-iname 文件名      不区分大小写搜索

-inum INODE         根据INODE节点号搜索,可以用来搜索硬链接

-samefile 文 件名     搜索相同节点编号的文件,需要注意的是,需要搜索同一分区内的相同节点编号

-links    #          根据链接数为#这个条件进行搜索

-regex "PATTERN"      以PATTERN匹配整个文件路径,而非文件名称

根据属性信息搜索

-user    用户名         根据所有者搜索

-group    组名          根据所属组搜索

-nouser    用户名     搜索没有所有者的文件

-nogroup 组名        搜索没有所属组的文件

-uid   UID               根据UID查找

-gid   GID               根据GID查找

根据文件类型搜索

-type  TYPE            根据文件类型搜索

TYPE:

d            查找文件类型为目录的所有文件

f            查找文件类型为普通文件的所有文件

p            查找文件类型为管道文件的所有文件

s            查找文件类型为套接字的所有文件

c            查找文件类型为字符设备的所有文件

b            查找文件类型为块设备的所有文件

l            查找文件类型为软连接的所有文件

搜索空文件或目录

-empty                搜索空文件或者文件夹

组合条件

-a    与            默认就是按照并且条件搜索多个条件

-o    或

-not|!  非

因为与的优先级高于或的优先级,可以使用()扩起或的选项以提高或的优先级,()需要转义写成\( \)

德*摩根定律:

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

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

排除特定目录搜索

-path 排除文件夹路径 -a -prune -o -name 文件名    指定不搜那些文件夹

例:

find / \( -path "/sys" -o -path "/proc"\) -a -prune -o -name "*.conf"

# 搜索除/proc和/sys目录以外的所有路径下的以.conf结尾的文件

find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -name "*.conf"

根据文件大小搜索

-size [+|-] #UNIT

常用单位k M G c(byte)  注意大小写

6k    表示 (5k,6k],包括6K不包括5K

-6k     表示 [0k,6-1k],包括0k也包括5k,两个之间

+6k     表示(6K,oo),不包含6k

-size 1024k和-size 1M的区别

-size 1024k        会搜索到1023k到1024k之间的文件

-size 1M        会搜索到0到1M之间的文件

根据时间戳查找

-atime [+|-]#

+10    表示11天以前的文件

-1    表示最近一天内的文件

10    表示10天到11天内,

-mtime [+|-]#

-ctime [+|-]#

-mmin  [+|-]#    表示按分钟搜索

-amin  [+|-]#

-cmin  [+|-]#

根据权限搜索

-perm [/|-] MODE

MODE:精确权限匹配

/MODE    任何一类(u g o)对象的任何一位权限(r w x)中,只要能匹配一位权限就能搜索到,是或的关系

-MODE    表示任何一类(u g o)对象的权限中r w x三者都完满条件才匹配,是并且的关系

如果MODE中三类对象中有一位是0,表示对应该类对象无论有没有权限无所谓

备注,在centos7后,+的写法开始淘汰,使用/代替了

find -perm 755          会精确搜索权限是755的文件

find -perm /222      只要任何一类用户有写权限就会匹配。或者说,至少有一类用户有写权限就会匹配

find -perm /111      只要任何一类用户有写权限的就会匹配。或者说,至少有一类用户有执行权限就会匹配

find -perm /666      只要任何一类用户有读或者有写权限就会匹配。

find -perm /001      其他用户有执行权限的文件才会匹配

find -perm /002      其他用户有写权限的文件才会匹配

find -perm -222      只有当文件的所有者、所属组、其他人三类用户都有写权限才会匹配

find -perm -002      只要其它人具有写权限就会匹配,和find -perm /002的作用相同

find -perm -022      所属组和其他人都具有写权限就会匹配

find -perm 002       只匹配 --- --- -w-权限的文件

处理动作

-print            默认,会把搜索结果打印屏幕,默认是以空格作为分割符。可以使用pring0选项改成使用nul作为分隔符

-ls                把搜索的文件的详细属性显示出来

-fls /PATH/TO/FILE        查找到的每个文件长格式显示保存至指定文件,相当于 -ls > /PATH/TO/FILE

-delete            把搜索到的文件删除,太危险,慎用

-ok COMMAND {} \;    对查找到的每个文件交由COMMAND指定的命令执行,但是在执行前会交互式提问

-exec COMMAND {} \;    对超找到的每个文件交由COMMAND指定的命令执行,不会交互提问直接执行

{} 指的是find搜索的的文件,可以想成一个变量,此变量引用find搜索到的文件

\;    交由COMMAND执行 必须要有\;结束

find /data -exe rm {} \        删除搜索到的文件

find /var -size +10M -mtime +10 -ok mv {} /data \    把在VAR下搜索到的大于10M时间超过10天之前的文件移动到data目录下

find /data -name "*.txt" -exec cp {} {}.bak \;        批量加后缀。注意双{}的使用

小技巧:利用find 和 mv 组合批量加后缀名:

; "复制代码")

[root@CentOS7 tmp]# ll

total 0

-rw-r--r-- 1 root root 0 May 3 05:40 a \-rw-r--r-- 1 root root 0 May 3 05:40 b \-rw-rw-rw- 1 root root 0 May 3 05:40 c \-rw-r--r-- 1 root root 0 May 3 05:40 d \-rw-r--r-- 1 root root 0 May 3 05:40 e \-r-------- 1 root root 0 May 3 05:40 f \-rw-r--r-- 1 root root 0 May 3 05:40 g

\[root@CentOS7 tmp\]# find . -type f -exec mv {} {}.haha \\; #小技巧利用find和mv组合批量加后缀名

\[root@CentOS7 tmp\]# ll

total 0

-rw-r--r-- 1 root root 0 May 3 05:40 a.haha \-rw-r--r-- 1 root root 0 May 3 05:40 b.haha \-rw-rw-rw- 1 root root 0 May 3 05:40 c.haha \-rw-r--r-- 1 root root 0 May 3 05:40 d.haha \-rw-r--r-- 1 root root 0 May 3 05:40 e.haha \-r-------- 1 root root 0 May 3 05:40 f.haha \-rw-r--r-- 1 root root 0 May 3 05:40 g.haha

\[root@CentOS7 tmp\]#

; "复制代码")

练习:

1、查找/var目录下属主为root,且属组为mail的所有文件或目录;

find /var -user root -a -group mail -ls

2、查找/usr目录下不属于root,bin或hadoop的所有文件或目录;用两种方法;

find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls

find /user -not -user root -a -not -user bin -a -not -user hadoop -ls

3、查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;

find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls

find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls

4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录;

find \( -nouser -o -nogroup \) -a -atime -7 -ls

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

find /etc/ -size +1M -a -type f -ls

6、查找/etc目录下所有用户都没有写权限的文件;

find /etc -not -perm /222 -type f -ls

7、查找/etc目录至少有一类用户没有执行权限的文件;

find /etc -not -perm -111 -type f -ls

8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件;

find /etc/init.d -perm -113 -type f -ls

linux查找以h结尾的文件,linux中文件查找的常用命令相关推荐

  1. 合并文件夹中子目录_01 Linux之统计文件夹中文件个数以及目录个数

    案例分析: 今天遇到了一个需要统计路径下目录个数的问题 如果一个一个的去数会很麻烦,找到了一篇文章刚好提到这个,于是我将方法整理了一下. 该方法的链接: Linux统计文件夹中文件个数以及目录个数_S ...

  2. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  3. linux系统中如何查看日志 (常用命令)

    linux系统中如何查看日志 (常用命令) cat  tail -f 日 志 文 件 说    明  /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用 ...

  4. C语言(CED)查找最接近的元素(分治法/二分查找):在一个非降序列中,查找与给定值最接近的元素。(递归实现)

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 一.题目大意 查找最接近的元素(分治法/二分查找):在一 ...

  5. python读取文件夹-Python按顺序读取文件夹中文件

    参考资料: 涉及到文件操作,我们有时候会读取一个文件夹中的所有的文件.这些文件可能是文件名完全混乱的,也可能是完全格式化的(如1.png,2.png...).下面介绍Python中的几种按顺序(假如有 ...

  6. QListWidget读取本地文件夹中文件并显示名字,双击读取xml数据

    文章目录 前言 一.读取本地文件并显示 二.双击读取数据 前言 本文主要是为了解决QListWidget读取本地文件夹中文件,并且显示的问题.然后双击读取其中xml数据 一.读取本地文件并显示 如下的 ...

  7. 使用java对文件夹中文件后缀进行修改

    使用java对文件夹中文件后缀进行修改 在网上找到的项目资料,本打算学习下,结果给的资料是ziw格式,需要使用为知笔记才能打开,百度半天没有找到为知笔记的下载方式,但是看到可以转换格式为zip,然后进 ...

  8. 文件服务器恢复测试,基于文件传输中文件损坏检测和恢复办法.doc

    基于文件传输中文件损坏检测和恢复办法 基于文件传输中文件损坏检测和恢复办法 摘 要:在网络上文件传输是一种常见的应用,讨论在文件传输完成后检测错误和恢复数据的办法. 关键词:文件传输;文件校验;恢复 ...

  9. 文件夹中文件名称的获取,并相应的添加或删除对应的文件夹或文佳

    1.获取文件夹中文件夹的名称,并添加或删除对应的文件夹 <1> 获取文件夹的名称 fldPath = "相对应的路径名称" dirInfo = New Director ...

  10. 用bat批量改文件夹中文件的名字

    目录 获取需要文件夹中文件的所有文件路径 通过excel按规律改变名字 用ren 连接旧文件名和新文件名 把连接好的命令复制粘贴到txt,后改txt后缀为bat,完成! 获取需要文件夹中文件的所有文件 ...

最新文章

  1. ubuntu 配置 jdk 环境
  2. python高阶函数filter_python 高阶函数之filter
  3. 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 (关于数据类型-隐性转换的小陷阱)
  4. c语言现代方法15章答案(自己做的,更新中)
  5. php 取出多重数组中的一列_PHP获取数组中指定的一列实例
  6. java队列实现限流,java中应对高并发的两种策略
  7. HTMLTestRunner.py内容
  8. java list to byte_java – 将ArrayList转换为byte []
  9. pandas聚合group函数
  10. cad字体安装_三种CAD缺失字体解决方法,让你不在为寻找字体而烦恼
  11. 趣味小问题2——规律型勾股数
  12. 软件开发人员如何记笔记
  13. 苹果用Android发文,安卓和苹果怎么传文件 安卓和苹果传文件详细教程
  14. 如何用viso画波浪线、以及带箭头的波浪线。
  15. mysql的prepared_statement
  16. 计算机课说话检查200字,上课说话200字检讨书
  17. 【C++】野指针及其危害
  18. Rust代码检查工具Clippy原理浅析
  19. 中软国际卓越培训中心(北京)
  20. php知识点之php文件上传

热门文章

  1. Git(12)-- Git 分支 - 分支简介
  2. 基于Python-turtle库绘制皮卡丘、多边形、星空
  3. Android 系统服务列表
  4. Android写log到文件模版
  5. Android dalvik GC相关的属性详解
  6. postgis之获取二进制的长度
  7. C#之DotfuscatorCommunity
  8. 自己动手Centos7搭建wordpress网站步骤(LNMP+wordpress)
  9. vue openlayer 实现加载底图
  10. C语言---数字迷宫