关于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 ... 
随机推荐
- ios的位置和方向(来自苹果官方文档,仅供简单参考)
			取得用户的当前位置 Core Location框架使您可以定位设备的当前位置,并将这个信息应用到程序中.该框架利用设备内置的硬件,在已有信号的基础上通过三角测量得到固定位置,然后将它报告给您的代码.在 ... 
- ruby中__FILE__,$FILENAME,$PROGRAM_NAME,$0等类似变量的含义
			ruby中有4个类似的变量(常量),他们分别是: __FILE__,$FILENAME,$PROGRAM_NAME,$0 他们分别在代码中表示神马呢?我们用实际的例子说明一下: x.rb #!/usr ... 
- HDFS的java api操作
			hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ... 
- centos 安装 vsftpd
			1.安装vsftpd yum -y install vsftpd 2.编辑vsftpd的配置文件 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf- ... 
- Java—SSH(MVC)
			Java-SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就是 ... 
- VS 和 VAssistX 常用快捷键
			----------------------------------------------------------------函数跳转-------------------------------- ... 
- 从Freelancer的热门Skill看看你应该学什么?
			以下数据是2012-1-31号数据. Websites, IT & Software: PHP (2402)HTML (1639)SEO(877)MySQL (836)Link Buildin ... 
- (译) JSON-RPC 2.0 规范(中文版)
			http://wiki.geekdream.com/Specification/json-rpc_2.0.html 起源时间: 2010-03-26(基于2009-05-24版本) 更新: 2013- ... 
- OCR智能识别身份信息
			本人研究了两款OCR智能识别的API,下面做详解! 第一款是百度云的OCR识别,填写配置信息,每天有五百次免费的识别次数,适合中小型客户流量可以使用.API文档:http://ai.baidu.com ... 
- 使用 MarkDown & DocFX 升级 Rafy 帮助文档
			最近使用 DocFX 对 Rafy 框架的帮助文档进行了升级. SandCastle 之前 Rafy 框架的帮助文档,是使用 SandCastle 来编写的(https://github.com/EW ... 
