linux文件查找find命令
linux文件查找find命令
1、文件查找
基本介绍
在文件系统上查找符合条件的文件
linux上常见的文件查找工具:find命令
查找分类
实时查找
精确查找
基本语法
find [options..] [查找的路径] [查找条件] [处理动作]
查找的路径:指定查找目标文件具体路径。默认为当前目录
查找条件:指定的查找标准,可以是文件名、大小、类型、权限、属组或者属主等标准进行查找。默认为找出指定路径下的所有文件
处理动作:对查找符合的文件做什么操作。默认输出至屏幕
查找条件有哪些
根据文件名查找:
-name “文件名称”:文件名称支持使用glob,也就是可以是用*、?、[]、[^]。使用-name进行文件查找时,是严格区分文件大小写的
使用案例
[root@oldboy ~]# find /etc -name "fs*"
/etc/fstab
-iname “文件名称”:文件名称支持glob,使用-iname进行查找时,不区分文件的大小写
-regex PATTERN:以PATTERN去匹配整个路径字符串,而不仅仅是文件名称
根据文件的属组、属主查找
-user USERNAME:查找属主为USERNAME的文件
-group GROUPNAME:查找属组为GROUPNAME的文件
-uid UID:查找属主为指定UID号的文件
-gid GID:查找属组为指定GID号的文件
-nouser:查找没有属主的文件(即用户已经被删除,在文件属性中的属主列属性中只剩下一个UID)
-nogroup:查找没有属组的文件(即属组已经被删除,在文件属性中属组列属性只剩下一个GID)
注意:当我们把一个用户删除时,属于这个用户的文件的属组或者属主都变成相应的UID号了
根据文件类型查找
-type TYPE
TYPE包含下列几种
f:普通文件
d:目录文件
l:符号链接文件
s:套接字文件
p:管道文件
b:块设备文件
c:字符设备文件
组合条件查找
-a:与(可以省略)
-o:或
-not或者 ! :非
注意
组合条件查找时有时需要把组合条件执行了再执行处理动作,因此,这个是组合条件就需要加括号(括号需要转义)避免出错。因为组合条件可能和后边的处理动作产生歧义,造成意想不到的效果
产生这样结果的原因:通过处理动作执行后的结果会被输入到屏幕上,而组合条件没有加括号的话,只有组合条件中的最后一个条件与处理动作进行组和输出了
案例演示
[root@oldboy ~]# find /home -nouser -o -nogroup -ls -rw-r--r-- oldboy Jul /home/oldboy/.bash_profile -rw-r--r-- oldboy Jul /home/oldboy/.bashrc -rw-rw-r-- oldboy Mar /home/oldboy/.txt drw-r----- oldboy Mar /home/oldboy/test -rw------- oldboy Dec : /home/oldboy/.viminfo -rw------- oldboy Mar /home/oldboy/.bash_history -rw------- oldboy Mar /home/oldboy/.history -rw-r--r-- oldboy Jul /home/oldboy/.bash_logout drwxrwxr-x oldboy Dec : /home/oldboy/script -rw-rw-r-- oldboy Dec : /home/oldboy/script/functions [root@oldboy ~]# find /home -nouser -ls drwx------ Jan : /home/gentoo -rw-r--r-- Jul /home/gentoo/.bash_profile -rw-r--r-- Jul /home/gentoo/.bashrc -rw-r--r-- Jul /home/gentoo/.bash_logout drwx------ Mar : /home/com -rw-r--r-- Jul /home/com/.bash_profile drwxr-xr-x Mar /home/com/.mozilla drwxr-xr-x Aug /home/com/.mozilla/extensions drwxr-xr-x Aug /home/com/.mozilla/plugins -rw-r--r-- Jul /home/com/.bashrc -rw-r--r-- Jul /home/com/.bash_logout [root@oldboy ~]# find /home -nogroup -ls drwx------ Jan : /home/gentoo -rw-r--r-- Jul /home/gentoo/.bash_profile -rw-r--r-- Jul /home/gentoo/.bashrc -rw-r--r-- Jul /home/gentoo/.bash_logout -rw-r--r-- oldboy Jul /home/oldboy/.bash_profile -rw-r--r-- oldboy Jul /home/oldboy/.bashrc -rw-rw-r-- oldboy Mar /home/oldboy/.txt drw-r----- oldboy Mar /home/oldboy/test -rw------- oldboy Dec : /home/oldboy/.viminfo -rw------- oldboy Mar /home/oldboy/.bash_history -rw------- oldboy Mar /home/oldboy/.history -rw-r--r-- oldboy Jul /home/oldboy/.bash_logout drwxrwxr-x oldboy Dec : /home/oldboy/script -rw-rw-r-- oldboy Dec : /home/oldboy/script/functions drwx------ Mar : /home/com -rw-r--r-- Jul /home/com/.bash_profile drwxr-xr-x Mar /home/com/.mozilla drwxr-xr-x Aug /home/com/.mozilla/extensions drwxr-xr-x Aug /home/com/.mozilla/plugins -rw-r--r-- Jul /home/com/.bashrc -rw-r--r-- Jul /home/com/.bash_logout [root@oldboy ~]# find /home -nouser -o -nogroup /home/gentoo /home/gentoo/.bash_profile /home/gentoo/.bashrc /home/gentoo/.bash_logout /home/oldboy/.bash_profile /home/oldboy/.bashrc /home/oldboy/.txt /home/oldboy/test /home/oldboy/.viminfo /home/oldboy/.bash_history /home/oldboy/.history /home/oldboy/.bash_logout /home/oldboy/script /home/oldboy/script/functions /home/com /home/com/.bash_profile /home/com/.mozilla /home/com/.mozilla/extensions /home/com/.mozilla/plugins /home/com/.bashrc /home/com/.bash_logout [root@oldboy ~]# find /home \( -nouser -o -nogroup \) -ls drwx------ Jan : /home/gentoo -rw-r--r-- Jul /home/gentoo/.bash_profile -rw-r--r-- Jul /home/gentoo/.bashrc -rw-r--r-- Jul /home/gentoo/.bash_logout -rw-r--r-- oldboy Jul /home/oldboy/.bash_profile -rw-r--r-- oldboy Jul /home/oldboy/.bashrc -rw-rw-r-- oldboy Mar /home/oldboy/.txt drw-r----- oldboy Mar /home/oldboy/test -rw------- oldboy Dec : /home/oldboy/.viminfo -rw------- oldboy Mar /home/oldboy/.bash_history -rw------- oldboy Mar /home/oldboy/.history -rw-r--r-- oldboy Jul /home/oldboy/.bash_logout drwxrwxr-x oldboy Dec : /home/oldboy/script -rw-rw-r-- oldboy Dec : /home/oldboy/script/functions drwx------ Mar : /home/com -rw-r--r-- Jul /home/com/.bash_profile drwxr-xr-x Mar /home/com/.mozilla drwxr-xr-x Aug /home/com/.mozilla/extensions drwxr-xr-x Aug /home/com/.mozilla/plugins -rw-r--r-- Jul /home/com/.bashrc -rw-r--r-- Jul /home/com/.bash_logout
案例演示
找出/tmp目录下,属主不是root,并且文件的名字不是www的文件
find /tmp ! \( -user “root” -o -name “www” \) -ls
根据文件大小来查找
-size [+|-]num:指定文件的大小来进行查找。num表示文件的大小,后边可以跟一个单位,单位包括k、m、g
使用注意:
①当我们给定数字和单位,那么去找寻文件时表示查询的文件的大小范围在大于这个给定数字减一到这个给定数字之间的任何值
②如果使减号后面跟数字加单位,表示找寻的文件大小是从0开始到给定数字减一的所有文件
③如果使用加号后面跟数字加单位,表示去找寻的文件是从当前给定数字到无穷大之间的所有文件的大小
使用案例
查找/tmp目录下,大小是3k的文件
find /tmp -size 3k -type f
注意:这里打印出的文件可能并非大小只是3k的文件,包括大于2k,小于等于3k的文件
根据文件时间戳查找
以天为单位
-atime [+|-] num:查询访问时间
-mtime [+|-] num:查询修改时间
-ctime [+|-] num:查询文件属性改变时间
一分钟为单位
-amin [+|-] num:查询访问时间
-mmin [+|-] num:查询修改时间
-cmin [+|-] num:查询文件属性改变时间
注意上面具体的时间参数在下面给出了
注意:
+num:表示指定天数大于等于num+1天之前
num:如果只是数字,没有加减号,那么表示大于等于我们给定的前num这个天数,小于给定num天数加1
-num:从当前开始(即大于等于0)到前三天,但是不包括前第三天即小于num天数
图示这些关系
根据文件权限来查找
-perm [-|/] MODE
MODE:没有加号或者减号,表示精确权限匹配权限
MODE前给定了加号(/)或者减号( - )表示
/MODE:任何一类对象(u、g、o)的权限中只要有一个匹配即可。CentOS7.x中+号的MODE形式已经被废弃了。改用的是斜线/
案例演示
找寻/tmp目录下的所有文件的文件属性在其他组的权限上具有执行权限的文件
find /tmp -perm /001 -ls
找寻/tmp目录下的所有文件的文件属性在属组的权限上具有写或者读权限的文件
find /tmp -perm /060 -ls
-MODE:每一类对象(u、g、o)必须同时拥有为其制定的权限标准
案例演示
找寻/tmp目录下所有文件的文件属性在其他组的权限上具有可写、可执行或者可读、可写、可执行的文件
find /tmp -perm -003 -ls
处理动作
-print:默认的处理动作,显示到屏幕上
-ls:类似于对查询到的文件执行ls -l命令
-delete:删除查询到的文件,谨慎使用
-fls FILE:查询到的所有文件的长格式信息保存值指定的PATH文件中
-ok COMMAND {} \; :对查询到的每个文件执行由COMMAND指定的命令。但是这个命令在对每个文件进行命令之前都会交互是的与用户进行确认。注意:大括号与反斜线之间必须要有空格,否则报错。相对安全
-exec COMMAND {} \; :对查询到的每个文件执行由COMMAND指定的命令。但是这个不会跟用户进行交互式确认。注意:大括号与反斜线之间必须要有空格,否则报错。比较不安全
注意:花括号{ }的表示的是引用find查询到的文件,而\;表示固定格式
使用案例
查询/tmp目录下三分钟之前修改过的文件,并且将文件名改为以.new结尾
[root@oldboy ~]# find /tmp -type f -cmin - /tmp/fstab /tmp/issue [root@oldboy ~]# find /tmp -type f -cmin - -exec mv {} {}.new \; [root@oldboy ~]# find /tmp -type f -cmin - /tmp/fstab.new /tmp/issue.new
注意:find传递查询到的文件传递给后面指定的命令时,是一次性查询到所有符合条件的文件,并且一次性传递给后面的命令。这个时候要注意,有些命令不能接受过多的参数,因此可能造成溢出,此时命令可能就会执行失败。那么怎么规避这个问题呢?使用xargs命令
find | xargs COMMAND
这条命令表示:通过find命令查询到所有文件通过管道交给xargs,然后后面命令执行时,一次给命令一个参数,直至xargs给完所有内容
locate查找文件工具
非实时查找或者叫数据库查找,他不是去遍历文件系统上的所有文件,而是一开始将所有的文件做成一个索引存放在数据库中,locate就是用来查询数据库而完成查找的
locate文件的查找依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(这个是一个周期性任务)。
locate的查询速度很快。因为他是通过数据库索引进行查找的,但是他的查找不够精确,因为,文件索引在数据库中的构建需要系统自动进行,而且是在系统比较空闲时进行的,因此,当我们创建一个文件后,通过locate去查找,可能不会找到。但是我们可以手动更新数据库
手动更新文件索引数据库使用的命令updatedb。注意:文件索引的构建是非常消耗资源的,因为他要遍历整个根文件系统。当系统比较繁忙时禁止使用这个命令,因为可能其他服务无法工作
工作特点
查找速度查找
模糊查找:路径下出现某个关键词都会把相应的路径打印出来
非实时查找,非精确查找
locate基本语法
ocate keyword
使用介绍
locate就是根据keyword关键词进行查找,她会找出包含keyword所有路径
2、find的练习
查询/var/目录下属主为root且属组为mail的文件或者目录
find /var/ -user “root” -a -group “mail”
查询/usr下属主不为root、bin、或者hadoop的所有文件或者目录
find /usr -not \( -user root -o -user “bin” -o -user “hadoop” \)
find /usr -not -user root -a -not -user bin -a -not -user haddop
查询当前系统上没有属主或者属组且最近一周内曾被访问过的文件或者目录
find / -nouser -a -nogroup -a -atime -7
注意:问题的或者有不同的含义
查询/etc/目录下最近一周内其内容被修改过,同时属主不为root,也不是hadoop的文件或者目录
find /etc -not -mtime -7 -a -not \( -user root -o -user hadoop \)
find /etc -not \( -mtime -7 -o -user root -o -user hadoop \)
查询/etc/目录下大于1M且类型为普通文件的所有文件
find /etc -size +1m -type f
查询/etc/所有用户都没有写权限的文件
find /etc/ -not -perm /222
查询/etc/下至少有一类用户没有执行权限的文件
find /etc/ -not -perm -111
查询/etc/init.d/下,所有用户都有执行权限且其他用户有些权限的文件
find /etc/init.d/ -perm -113
linux文件查找find命令的更多相关文章
- linux文件查找-find命令
find命令:用于在文件树中查找文件,并作出相应的处理 1.find命令的格式: find pathname -options [-print -exec -ok ...] {}\ 2.find命令的 ...
- linux 文件查找 find命令详解
一,从索引库查找文件:locate 索引库:操作系统会周期性的遍历根文件系统,然后生成索引库 手动更新索引库:updatedb 语法:locate [OPTION]... PATTERN... 只匹配 ...
- 13.Linux文件查找-find命令
find 命令的基本语法如下: 命令 路径 选项 表达式 动作 find [path...] [options] [expression] [action] 查找 地区 妹纸 18-25岁 约? (1 ...
- Linux下的文件查找类命令(转载)
如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令: http://blog.csdn.net/sailor201211/articl ...
- Linux文件查找命令find,xargs详述【转】
转自:http://blog.csdn.net/cxylaf/article/details/4069595 转自http://www.linuxsir.org/main/?q=node/137 Li ...
- Linux文件查找命令find用法整理(locate/find)
Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...
- Linux文件查找.md
Linux 文件查找 在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 w ...
- 第1章 Linux文件类基础命令
1. 关于路径和通配符 Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,相对路径不从根开始写,还可能使用路径符号. 路径展开符号: . :(一个点)表示当前目录 .. :(两个点)表示上 ...
- linux 文件查找,which,whereis,locate,find
linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...
随机推荐
- linux常用命令 运算命令
linux的运算命令 expr命令,对整数进行运算 > expr的运算必须用空格间隔开 > \* 表示转义字符 > 保持先乘除后加减,如果需要优先运算则需要加命令替换符 > 也 ...
- mysql密码遗失
仅以本地数据库测试 本地数据库密码遗失,百度上的方法很麻烦,想着没有用的一个本地库(localhost),就想删库重建,navicat上点击数据库,删除链接.然后在新建库,同名同端口的,此时密码已经制 ...
- 开发企业微信打卡API笔记
获取企业微信打开API上面的数据 根据企业ID和打卡模块的secret获取access_token 打卡传参body为json格式的字符传 创建打卡对象把参数写入,useridlist为list格式. ...
- 解决Charles https抓包显示<unknown>
用mac电脑开发安卓的都应该知道青花瓷吧~(不知道的都是小菜鸡,邪恶.jpg) Charles类似Windows版的Fiddler(没用过Fiddler的都是小菜鸡中的战斗机,嘲笑.png),基本用法 ...
- C# [LINQ] Linq Expression 获取多格式文件
using System; using System.IO; using System.Linq; using System.Linq.Expressions; internal static str ...
- SQL循环表里的数据
select * into #t1 from Userinfodeclare @id varchar(2000);while (exists(select ProjectID from #t1))be ...
- JavaScript常用数组操作方法,包含ES6方法
一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3]; var arr2 = [4,5]; ...
- 用generator 根据oracle表生成java代码,数据库与代码字段不一致
前两天用generator生成java代码时发现,生成的javabean和数据库里的字段对应不上,不是少几个就是有几个字段不一样,感觉很怪异,后来发现日志里边这个表转换成bean是日志打印了好几遍,所 ...
- 北航OO第一单元总结
我本着公平公开公正的态度作出以下评价: 1.面向对象真的很修身养性 2.有一个好的身体非常重要 3.互相hack可以暴露人的阴暗面 好了,步入正题. 一.作业分析 1.第一次作业分析 1.1类图 1. ...
- java 的重写(覆盖) 和重载的区别
方法的的重写(覆盖) 在类继承中,子类可以修改从父类继承来的行为,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的:名称.返回类型.参数列表.如果在子类中定义一个方法,其方法名称.返回值 ...