关于find命令的一些知识
在服务器运维的过程中,我们会用到这样一个命令,关于这个命令,你知道多少呢?接下来,咱们一起来研究一下它的用途。
find命令主要用来在硬盘上搜索文件, find命令主要用于文件查找,列出当前目录及子目录下所有的文件和文件夹
格式:find path -option "keyword" [-print] [-exec -ok command] {} \;
path: 查找路径 ;该命令用于在指定路径中查找符合条件的文件,搜索路径可以是多个目录,不同目录之间用空格分割
-option: 选项
"keyword": 关键字
command: 需要执行的命令
-exec command] {} \;将查到的文件执行command操作,注意{}和\;之间有空格
-ok和-exec的作用一样,只是-ok在执行前会询问用户是否执行操作
find . -name "*" | xargs grep -i "passwd"(自己工作中用的最多的实例,-i的作用是不区分大小写)
find -name "t*" -perm 744 //查找当前目录下文件名以t开头的,且文件属性主具有读、写、执行权限的文件。。。。
find还有-exec选项,对匹配文件执行该参数过给出的shell命令。
例如:find /etc/ -type f -name "rc*" -exec ls -l {} \; //注意{}和\之间有空格。。。
由此可见:可以接多个选项参数
目录路径:表示以此目录作为根目录逐级往下搜索
1.目录介绍:
如果find不指定目录,则默认从当前所在的目录开始搜索
$find
$find .
以上两个结果一样
. 一个点表示当前目录,也可以使用 ./ 来表示;
.. 两个点表示父目录,也可以 ../ 来代表。
如果需要从根目录开始查找:/
find . 遍历输出当前目录下的所有文件(夹)及子文件(夹)
find / 遍历输出根目录下的所有文件(夹)及子文件(夹)
find ./ 遍历输出当前目录的下一级路径的所有文件(夹)及子文件(夹)
也可以是/opt/qmfsun之类的路径
find中的目录可以指定多个搜索目录
$ind /usr /home /tmp -name "*.java";在/usr /home /tmp三个目录中查找以.java结尾的文件
如果对某个目录没有访问权限的话,就会报错,提示: find: /tmp/qmfsun:Permission denide
2. 需要搜索的关键字
3.主要选项参数:
注意:
a)每一个选项前面跟随一个横杠-
$find /doc -name '*bak' -exec rm -rf {} \; //从 /doc 目录开始往下找,找到凡是文件名结尾为 bak的文件,把它删除掉。
注意:-exec 选项是执行的意思,rm -rf是删除命令,{ } 表示文件名,“\;”是规定的命令结尾。
find命令默认情况下是区分大小写的,可以通过-iname或者在grep中添加-i参数来忽略大小写
-name :指定按照文件名查找文件,查找时文件名大小写敏感。只能搜索到文件名,如果需要搜索文件内容里包含的特定字符串,需要用grep(用的最常见)
-iname: 查找时不区分文件名大小写
$ find . -iname U*
users users2
#如果执行find . -name U*将不会找到匹配的文件
find -iname "MyCProgram.c";所有不区分大小写的文件名为“MyCProgram.c”的文件
查找当前用户主目录下的所有文件:下面两种方法都可以使用
$ find . -name "*.log";从当前目录中查找扩展名为.log的文件。需要说明的是,缺省情况下,find会从指定的目录搜索,并递归的搜索其子目录
./install.log
grep差多个字符串
ps -e|grep -E ‘grant_server|commsvr|tcpsvr|dainfo’ 查找多个字符串的匹配(grep -E相当于egrep)
使用grep匹配“与”或者“或”模式
grep命令加- E参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为2 1 9或2 1 6,方法如下:
CODE:
[sam@chenwy sam]$ grep -E '219|216' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234
find -perm,根据文件的权限来查找文件,有三种形式,是位"与", + /是位"或"
find -perm mode
find -perm -mode
find -perm /mode(+符号的作用与 / 符号相同,但是现在新版 GNU findutils 中不支持使用该符号)
三者区别:
-perm -mode :查找的档案属性『必须要全部囊括 mode 的属性』的档案,举例来说,
我们要查找 -rwxr--r-- ,亦即744 的档案,使用 -perm -744,
当一个档案的属性为 -rwxr-xr-x ,亦即 755时,也会被列出来,
因为 -rwxr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm +mode :查找档案属性『包含任一 mode 的属性』的档案,举例来说,我们查找
-rwxr-xr-x ,亦即 -perm +755 时,但一个档案属性为 -rw-------
也会被列出來,因為他有 -rw.... 的属性存在
总用量 0
-rwxrwxrwx 1 root root 0 6月 9 20:30 1.txt 777
-rwxrwxr-x 1 root root 0 6月 9 18:58 2.txt 775
-rwxr-xrwx 1 root root 0 6月 10 00:10 3.txt 757
-r-xrwxrwx 1 root root 0 6月 10 00:10 4.txt 577
-r-xr-xrwx 1 root root 0 6月 10 00:10 5.txt 557
-r-xr-xr-x 1 root root 0 6月 10 00:10 6.txt 555
[root@test test1]# find . -perm 700 //没有这个权限的文件
[root@test test1]# find . -perm -700
.
./3.txt
./1.txt
./2.txt
[root@test test1]# find . -perm -712 //2.txt主要是-rwxrwxr-x中的其他用户没有w权限
./3.txt
./1.txt
[root@test test1]# find -perm 755 //也没有这个文件
find -perm +222 //找u或者g或者o三个中,至少一个有可写权限的
find -perm -222 //找u,g和o三个中都有可写的权限文件
find -perm -002 //找权限至少o可以写的
find -perm -222 u g o 全都可写才匹配
-perm按文件权限查找。例如:-perm -777, -perm –a+x(user, group, other 都具有write属性)
find plsql -type f -perm -ug=rw -exec ls -l {} \; 2>/dev/null //将查找可由“other”和组写入的文件
或者
find plsql -type f -perm -220 -exec ls -l {} \; 2>/dev/null
-rw-rw-rw- 1 bluher users 4303 Jun 7 2004 plsql/FORALLSample/doc/otn_new.css
-rw-rw-rw- 1 bluher users 10286 Jan 12 2005 plsql/FORALLSample/doc/readme.html
-rw-rw-rw- 1 bluher users 22647 Jan 12 2005
find plsql -type f -perm /ug=rw -exec ls -l {} \; 2>/dev/null //查找由用户、组或二者共同写入的文件:
或者
find plsql -type f -perm /220 -exec ls -l {} \; 2>/dev/null
-rw-r--r-- 1 bluher users 21473 May 3 16:02 plsql/regexpvalidate.zip
-rw-rw-rw- 1 bluher users 4303 Jun 7 2004 plsql/FORALLSample/doc/otn_new.css
-rw-rw-rw- 1 bluher users 10286 Jan 12 2005 plsql/FORALLSample/doc/readme.html
-rw-rw-rw- 1 bluher users 22647 Jan 12 2005 plsql/FORALLSample/src/config.sql
find /etc -perm 640 精确匹配,其权限必须是640
find /etc -perm /640三组权限中有任意一组匹配都行
find /etc -perm -640含有该权限的都得匹配
-perm -222 可查找出666,只要含有222权限的都可以
-perm -400只要属主有读权限即可,其他任意权限
-perm /400属主有读权限,其他没有任何权限;符合这三组都可
find . -perm 700 是说恰好为 700, rwx------
find . -perm -700 是说第一组满足 7 就可以了,后两组无所谓,因此 rwx------ 和 rwxrwxrwx 都会入选
find . -perm +700 是说第一组每一位有一个满足就可以了,因此 r-x------ 也会入选,范围又扩大很多
# find . -perm 111 -print //表示在当前目录下搜寻所有者、同组成员及其他成员均为可执行权限的文件及文件夹
# find . -perm -111 -print //表示在当前目录下搜寻所有者、同组成员及其他成员均含有可执行权限的文件及文件夹
#find . -perm /111 -print //表示在当前目录下搜寻所有者、同组成员及其他成员中至少一个角色含有可执行权限的文件及文件夹
+ 针对 三个权限位中的任意 一位
- 针对 三个权限位中的全部 三位
MODE 也是针对三位的
[root@localhost ~]# ls -lh test
total 0
-r--r--r-- 1 root root 0 Oct 10 20:50 test1
-rwxr--r-- 1 root root 0 Oct 10 20:50 test2
-rw-r--r-- 1 root root 0 Oct 10 20:50 test3
-rw-r--r-- 1 root root 0 Oct 10 20:50 test4
[root@localhost ~]# find test -perm 644 | xargs ls -hld
-rw-r--r-- 1 root root 0 Oct 10 20:50 test/test3
-rw-r--r-- 1 root root 0 Oct 10 20:50 test/test4
[root@localhost ~]# find test -perm +644 |xargs ls -lhd
drwxr-xr-x 2 root root 1.0K Oct 10 20:50 test //找到这个,是因为find中没有指明查找的类型,即没有-type f的原因
-r--r--r-- 1 root root 0 Oct 10 20:50 test/test1
-rwxr--r-- 1 root root 0 Oct 10 20:50 test/test2
-rw-r--r-- 1 root root 0 Oct 10 20:50 test/test3
-rw-r--r-- 1 root root 0 Oct 10 20:50 test/test4
[root@localhost ~]# find test -perm -644 | xargs ls -lhd
drwxr-xr-x 2 root root 1.0K Oct 10 20:50 test
-rwxr--r-- 1 root root 0 Oct 10 20:50 test/test2
-rw-r--r-- 1 root root 0 Oct 10 20:50 test/test3
-rw-r--r-- 1 root root 0 Oct 10 20:50 test/test4
查找文件
find ./ -type f
查找目录
find ./ -type d
查找名字为test的文件或目录
find ./ -name test
查找名字符合正则表达式的文件,注意前面的‘.*’(查找到的文件带有目录)
find ./ -regex .*so.*\.gz
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称)
find ./ -type d -print -exec ls {} \;
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
find ./ -type d -ok ls {} \;
查找目录并列出目录下的文件(将找到的目录添加到ls命令后一次执行,参数过长时会分多次执行)
find ./ -type d -exec ls {} +
查找文件名匹配*.c的文件
find ./ -name \*.c
打印test文件名后,打印test文件的内容
find ./ -name test -print -exec cat {} \;
不打印test文件名,只打印test文件的内容
find ./ -name test -exec cat {} \;
查找文件更新日时在距现在时刻二天以内的文件
find ./ -mtime -2
查找文件更新日时在距现在时刻二天以上的文件
find ./ -mtime +2
查找文件更新日时在距现在时刻一天以上二天以内的文件
find ./ -mtime 2
查找文件更新日时在距现在时刻二分以内的文件
find ./ -mmin -2
查找文件更新日时在距现在时刻二分以上的文件
find ./ -mmin +2
查找文件更新日时在距现在时刻一分以上二分以内的文件
find ./ -mmin 2
查找文件更新时间比文件abc的内容更新时间新的文件
find ./ -newer abc
查找文件访问时间比文件abc的内容更新时间新的文件
find ./ -anewer abc
查找空文件或空目录
find ./ -empty
查找空文件并删除
find ./ -empty -type f -print -delete
查找权限为644的文件或目录(需完全符合)
find ./ -perm 664
查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
find ./ -perm -664
查找用户有写权限或者组用户有写权限的文件或目录
find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w
查找所有者权限有读权限的目录或文件
find ./ -perm -u=r
查找用户组权限有读权限的目录或文件
find ./ -perm -g=r
查找其它用户权限有读权限的目录或文件
find ./ -perm -o=r
查找所有者为lzj的文件或目录
find ./ -user lzj
查找组名为gname的文件或目录
find ./ -group gname
查找文件的用户ID不存在的文件
find ./ -nouser
查找文件的组ID不存在的文件
find ./ -nogroup
查找有执行权限但没有可读权限的文件
find ./ -executable \! -readable
查找文件size小于10个字节的文件或目录
find ./ -size -10c
查找文件size等于10个字节的文件或目录
find ./ -size 10c
查找文件size大于10个字节的文件或目录
find ./ -size +10c
查找文件size小于10k的文件或目录
find ./ -size -10k
查找文件size小于10M的文件或目录
find ./ -size -10M
查找文件size小于10G的文件或目录
find ./ -size -10G
关于find命令的一些知识的更多相关文章
- vi命令的基础知识
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,先说说一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您 ...
- Sass控制命令及函数知识整理
2017-07-07 20:17:17 最底部附结构图(实在是结构图太长了没办法) 2017-06-22 09:11:43 一.Sass的控制命令 1.@if语句 @if 指令是一个 SassSc ...
- L014-第三关课前linux命令及基础知识考试手把手实战解答小节
又是一周啊,以后保持一周一个微博吧. 这是一个堂解答考试题的课,那么就以题目来展开吧! 1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求用命令获得644这 ...
- Sqlite常用命令及基本知识
sqlite菜鸟教程:http://www.runoob.com/sqlite/sqlite-tutorial.html 常用命令: .sqlite3 --从dos命令模式进入sqlite命令 ...
- linux 常用命令及零散知识
磁盘管理常用命令 fdisk -l //展示磁盘使用情况 df -h //展示目录挂载情况 du -sh //查文件.文件夹的总大小 scp /home/a.txt /home/b.tx ...
- ping命令知识 Ping命令工作原理详解
在网络应用中,ping网速与IP地址等都是非常常用的命令,但大家知道ping命令的工作原理吗?要知道这其中的奥秘,我们有必要来看看Ping命令的工作过程到底是怎么样的.下面介绍下ping命令的详细知识 ...
- Git学习笔记01--常用Git命令、cmd命令及Git总结性知识
资源:外国网友制作的 Git Cheat Sheet 第二次学习廖雪峰老师的Git教程,学习过程中把教程中涉及到的Git命令及总结性知识记录下来方便二次复习. 知识点 所有的版本控制系统,其实只能跟踪 ...
- 《Linux基础知识及命令》系列分享专栏
<Linux基础知识及命令>系列分享专栏 本专题详细为大家讲解了Linux入门基础知识,思路清晰,简单易懂.本专题非常适合刚刚学习Linux的小白来学习,通过学习该专题会让你由入门达到中级 ...
- Hadoop 之Hbase命令
一.常用命令:(hbase shell 进入终端) 1.创建表: create 'users','user_id','address','info' 表users,有三个列族user_id,addre ...
随机推荐
- LeetCode(41)-Rectangle Area
题目: Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defin ...
- IT轮子系列(三)——如何给返回类型添加注释——Swagger的使用(二)
前言 一般对外提供API,都会统一一个返回类型,比如所有的接口都统一返回HttpResponseMessage.这样当我们在方法上添加///注释时,是无法清楚的知道都返回字段都又那些以及它们的数据类型 ...
- insertion sort list (使用插入排序给链表排序)
Sort a linked list using insertion sort. 对于数组的插入排序,可以参看排序算法入门之插入排序(java实现),遍历每个元素,然后相当于把每个元素插入到前面已经排 ...
- WebApi PUT、DELETE请求时出现405 - 不允许用于访问此页的 HTTP 谓词。
开发时,新建WebApi项目需要用到Restful规范,此时请求有POST\PUT\DELETE\GET等请求 此时需要在web.config中加入 <system.webServer> ...
- string to int
problem describe: given a string , first find the first word which is not white space;then there wil ...
- php坏境安装Xdebug详情步骤
原创,转载请注明出处! Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况,可以说是程序员必备的一个工具之一.好了,进入正题: 1.下 ...
- 分布式缓存管理平台XXL-CACHE
<分布式缓存管理平台XXL-CACHE> 一.简介 1.1 概述 XXL-CACHE是一个分布式缓存管理平台,其核心设计目标是"让分布式缓存的接入和管理的更加的简洁和高效&quo ...
- AE的空间分析(转载)
1.1 ITopologicalOperator接口 1.1.1 ITopologicalOperator接口简介ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算以 ...
- Java父类对象调用子类实体:方法重写与动态调用
众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例 ...
- 0511JS流程练习
一.输入三个数,判断大小 var one = prompt("请输入第一个数"); var two = prompt("请输入第二个数"); var three ...