d find linux

2017-08-10 08:32:58 m0_38121874 阅读数 37430

一、概述:
因为Linux下面一切皆文件,经常需要搜索某些文件来编写,所以对于linux来说find是一条很重要的命令。linux下面的find指令用于在目录结构中搜索文件,并执行指定的操作。它提供了相当多的查找条件,功能很强大。在不指定查找目录的情况下,find会在对整个系统进行遍历。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间。

1、命令格式
find [查找目录] [查找规则] [查找完后的操作]
即:find pathname -option [-print -exec -ok …]

2、命令功能
用于在文件树中查找文件,并做相应的处理,(有可能访问磁盘)。

3、命令参数
(1)pathname:表示所要查找的目录路径,例如”.”表示当前目录,”/”表示根目录。
(2)-print:将find找到的文件输出到标准输出。
(3)-exec:对找到的文件执行exec这个参数所指定的shell命令,相应的形式为:-exec command {} \; 将查到的文件进行command操作,”{}”就代替查到的文件。

注意:
1)”{}”和”\”之间有一个空格。
2)-ok:和-exec的作用相同,只不过-ok更加安全一点,在执行每一个命令之前,系统会让用户确定是否执行。

二、查找规则:
1、根据文件名查找
(1)-name :根据文件名进行查找,区分大小写精确查找。
【例】
这里写图片描述

(2)-iname:根据文件名查找,不区分大小写
【例】
这里写图片描述

(3)文件名通配符:
“*”:通配任意的字符,可以是任何东西。
【例】
这里写图片描述

(4)”?”:可表示任意单个字符
【例】
这里写图片描述
注:与上例比较得知,空不为单字符,所以不能查找“file”文件。

(5)”[]”表示通配括号里面的任意一个字符,注意[]里面的内容会被解析成单个字符。
【例】
这里写图片描述

2、根据文件的时间戳信息查找文件
在根据时间戳信息查找的时候,所有的time都是以天为单位,min都是以分钟为单位。+n表示n以前,-n表示n以内。

(1)以最近一次存取的时间为参数
1)-atime:
A、find pathname -atime +n //表示n天前存取过的文件
B、find pathname -atime -n //表示以当前时间为起点前n天内存取过的文件

2)-amin :
A、find pathname -amin +n //表示n分钟前存取过的文件。
B、find pathname -amin -n //表示以当前时间为起点前n分钟内存取过的文件。
【例】
这里写图片描述

(2)以最近一次修改的时间为参数
1)-mtime:
A、find pathname -mtime +n //表示n天前修改过的文件
B、find pathname -mtime -n //表示以当前时间为起点前n天内修改 过的文件

2)-mmin:
A、find pathname -mmin +n //表示n分钟前存取过的文件
B、find pathname -mmin -n //表示以当前时间为起点前n修改 内存取过的文
【例】
这里写图片描述

(3)以最近一次更改的属性为参数
1)-ctime:
A、find pathname -ctime +n //表示n天前更改 过的文件
B、find pathname -ctime -n //表示以当前时间为起点前n天内更改 过的文件

2)-cmin:
A、find pathname -cmin +n //表示n分钟前更改过的文件
B、find pathname -cmin -n //表示以当前时间为起点前n分钟内更改 过的文件
【例】
这里写图片描述

3、根据文件所属用户和所属组来查找文件
(1)根据文件所有者查找文件:-user
【例】
这里写图片描述

(2)根据所有者所在的组查找:-group
【例】
这里写图片描述

4、根据nouser或nogroup查找
(1)查找无有效属主的文件:-nouser
find pathname -nouser
(2)查找无有效属组的文件:-nogroup
find pathname -nogroup
5、-perm :根据权限来查找文件
【例】
这里写图片描述

6、根据uid和gid查找文件
(1)根据文件的uid查找:-uid
(2)根据文件所在组的gid查找:-gid

7、-type:根据文件类型查找文件
(1)普通文件:f
find pathname -type f
【例】
这里写图片描述

(2)目录文件:d
find pathname -type d
【例】
这里写图片描述

(3)链接文件:l
find pathname -type l
(4)块设备文件:b
find pathname -type b
(5)字符设备文件:c
find pathname -type c
(6)管道设备文件:p
find pathname -type p
(7)套接字文件:s
find pathname -type s

8、根据文件大小查找文件:-size
(1)find pathname -size +n //表示大于n字节的文件
(2)find pathname -size -n //表示小于n字节的文件
(3)find pathname -size n //表示等于n字节的文件
【例】
这里写图片描述

9、按照参考文件的更改时间查找
-newer :file1//查找更改时间比file1的更改时间距离当前时间近的文件
【例】
这里写图片描述

10、maxdepth和mindepth
(1)-maxdepth
1)-maxdepth n : 搜索深度距离当前目录最多n个子目录深度
【例】
这里写图片描述

(2)-mindepth
2)-mindepth n :搜索深度距离当前目录至少n个子目录深度
【例】
这里写图片描述

11、查找路径下为空的文件或文件夹:-empty
【例】
这里写图片描述

12、按照硬连接的数目进行查找
(1)-link n :硬连接连接数等于n的文件或目录
【例】
这里写图片描述

(2)-link +n :硬连接连接数大于n的文件或目录
【例】
这里写图片描述

(3)-link -n :硬连接连接数小于n的文件或目录
【例】
这里写图片描述

13、-a、-o,-not(也就是与、或、非)
(1)-a:连接两个不同的条件(即两个条件必须同时为真)
【例】
这里写图片描述

(2)-o:连接两个不同的条件(两个条件只要满足一个即可)
【例】
这里写图片描述

(3)-not:对条件进行取反
【例】
这里写图片描述

14、查找完成之后的操作
(1) -exec command {} \;: 其中,”{}”就代表查找之后返回的文件。
【例】
这里写图片描述

(2)-ok command {} \;-ok相对于-exec而言更安全一点,会让用户确定所要执行的操作。
【例】
这里写图片描述

2017-03-27 07:13:01 sd_bit19 阅读数 7033

  今天我们来分享一下Linux下的find的用法。

   Linux下的find命令是用来在目录文件中搜索文件,并能够执行指定操作。因此对于一切皆文件的Linux系统来说,查找文件的find命令是非常重要的。熟练掌握find命令能够帮助你更好的使用和管理Linux下的文件。

   下面我们来介绍功能强大且地位不低的find命令的各种用途和命令格式及选项,并逐一给出用例。

   首先介绍一下find命令的格式:

 

图一 find命令格式

    其次find命令的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。使用方法见下图:

 

图二 find与逻辑运算符

最后介绍find的相关命令选项,用例就不详细给出了,格式如图一:

(1)用文件名查找文件

  -name 字串: 查找文件名匹配所给字串的所有文件。

  -lname 字串: 查找文件名匹配所给字串的所有符号链接文件。

(2)用ID号查找文件

  -gid n:查找属于ID号为 n 的用户组的所有文件。   

  -uid n:查找属于ID号为 n 的用户的所有文件。

(3)按照所属,权限,路径查找文件

   -group 字串:查找属于用户组名为所给字串的所有的文件。

   -user 字串: 查找属于用户名为所给字串的所有的文件。

  -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

  -path 字串: 查找路径名匹配所给字串的所有文件。

(4)按照大小查找文件

-empty :查找大小为 0的目录或文件。

-size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位,缺省为 b,代表512字节的块。

(5)按照文件类型

  -type x 查找类型为 x 的文件 .

  -xtype x 与 -type 基本相同,但只查找符号链接文件。

而类型x可能 为下列字符之一:

     b:块设备文件;

     c:字符设备文件;

     d:目录文件;

     p: 命名管道;

     f: 普通文件;

     l: 符号链接文件;

(6)以时间为条件查找

  -amin n: 查找n分钟以前被访问过的所有文件。

  -atime n: 查找n天以前被访问过的所有文件。

  -cmin n: 查找n分钟以前文件状态被修改过的所有文件。

  -ctime n: 查找n天以前文件状态被修改过的所有文件。

  -mmin n: 查找n分钟以前文件内容被修改过的所有文件。

  -mtime n: 查找n天以前文件内容被修改过的所有文件。

(7)命令参数

   -print:将搜索结果输出到标准输出。

   -exec:对搜索的结构指令指定的shell命令。

   -ok: 和-exec相似,但是用更为安全的模式来执行该参数给出的shell命令。执行命令前会有相应提示。

 

   分享如上,愿各位各从所欲,皆得所愿。^_^

 

 

2015-06-11 11:14:45 qqliyunpeng 阅读数 3730

作者: 李云鹏(qqliyunpeng@sina.cn) 
版本号: 20170124 
更新时间: <2017-01-24> 
原创时间: <2015-06-11> 
版权: 本文采用以下协议进行授权,自由转载 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,转载请注明作者及出处.


一般格式:



·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;


说明:
#-print 将查找到的文件输出到标准输出
#-exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格

#-ok 和-exec相同,只不过在操作前要询用户


option选项:



-name   filename             #查找名为filename的文件

-perm                        #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname            #按组来查找
-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n               #按文件访问时间来查GIN: 0px">
-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2              找文件,-n指n天以内,+n指n天以前 
-ctime    -n +n           #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-nogroup                  #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2             #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c]                  #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c]                   #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                       #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %;                   #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                     #查文件时不跨越文件系统mount点
-follow                     #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中

-prune                     #忽略某个目录


一些实例:



$find   ~   -name   "*.txt"   -print          #在$HOME中查.txt文件并显示

$find   .    -name   "*.txt"   -print
$find   .    -name   "[A-Z]*"   -print       #查以大写字母开头的文件
$find   /etc   -name   "host*"   -print    #查以host开头的文件
$find   .   -name   "[a-z][a-z][0–9][0–9].txt"    -print   #查以两个小写字母和两个数字开头的txt文件
$find   .   -perm   755   -print
$find   .   -perm -007   -exec ls -l {} \;   #查所有用户都可读写执行的文件同-perm 777
$find   . -type d   -print
$find   .   !   -type   d   -print 
$find   .   -type l   -print
$find   .   -size   +1000000c   -print        #查长度大于1Mb的文件
$find   .   -size   100c  -print                     # 查长度为100c的文件
$find   .   -size   +10   -print                      #查长度超过期作废10块的文件(1块=512字节)
$cd /
$find   etc   home   apps    -depth   -print   | cpio   -ivcdC65536   -o   /dev/rmt0
$find   /etc -name "passwd*"   -exec grep   "cnscn"   {}   \;   #看是否存在cnscn用户
$find . -name "yao*"   | xargs file
$find   . -name "yao*"   |   xargs   echo    "" > /tmp/core.log
$find   . -name "yao*"   | xargs   chmod   o-w
======================================================
find   -name april*                              #在当前目录下查找以april开始的文件
find   -name   april*   fprint file          #在当前目录下查找以april开始的文件,并把结果输出到file中
find   -name ap* -o -name may*      # 查找以ap或may开头的文件
find   /mnt   -name tom.txt   -ftype vfat   #在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find   /mnt   -name t.txt ! -ftype vfat         #在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find   /tmp   -name wa* -type l                #在/tmp下查找名为wa开头且类型为符号链接的文件
find   /home   -mtime   -2                   #在/home下查最近两天内改动过的文件
find   /home    -atime -1                     #查1天之内被存取过的文件
find   /home -mmin    +60                  #在/home下查60分钟前改动过的文件
find   /home   -amin   +30                  #查最近30分钟前被存取过的文件
find   /home   -newer   tmp.txt           #在/home下查更新时间比tmp.txt近的文件或目录
find   /home   -anewer   tmp.txt         #在/home下查存取时间比tmp.txt近的文件或目录
find   /home   -used   -2                      #列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find   /home   -user cnscn                  #列出/home目录内属于用户cnscn的文件或目录
find   /home   -uid   +501                    #列出/home目录内用户的识别码大于501的文件或目录
find   /home   -group   cnscn              #列出/home内组为cnscn的文件或目录
find   /home   -gid 501                         #列出/home内组id为501的文件或目录
find   /home   -nouser                          #列出/home内不属于本地用户的文件或目录
find   /home   -nogroup                       #列出/home内不属于本地组的文件或目录
find   /home   -name tmp.txt  -maxdepth   4   #列出/home内的tmp.txt 查时深度最多为3层
find   /home   -name tmp.txt   -mindepth   3   #从第2层开始查
find   /home   -empty                          #查找大小为0的文件或空目录
find   /home   -size   +512k                #查大于512k的文件
find   /home   -size   -512k                 #查小于512k的文件
find   /home   -links   +2                     #查硬连接数大于2的文件或目录
find   /home   -perm   0700                #查权限为700的文件或目录
find   /tmp   -name tmp.txt   -exec cat {} \;
find   /tmp   -name   tmp.txt   -ok   rm {} \;
find    /   -amin    -10       #查找在系统中最后10分钟访问的文件
find    /   -atime   -2          #查找在系统中最后48小时访问的文件
find    /   -empty               #查找在系统中为空的文件或者文件夹
find    /   -group   cat       #查找在系统中属于 groupcat的文件
find    /   -mmin   -5         #查找在系统中最后5分钟里修改过的文件
find    /   -mtime   -1        #查找在系统中最后24小时里修改过的文件
find    /   -nouser             #查找在系统中属于作废用户的文件

find    /   -user    fred       #查找在系统中属于FRED这个用户的文件


回到索引

2018-11-15 11:48:29 hetoto 阅读数 54309
find /etc/ -name passwd      ##查找/etc/下名称中带有passwd的文件
find /etc -maxdepth 1 -name passwd     ##查找/etc/下名称中带有passwd的文件,查找一层。
find /etc -name *.conf       ##查找/etc/下名称中带有*.conf的文件(下面显示的是部分)
find /etc -maxdepth 2 -name *.conf  ##查找/etc/下名称中带有*.conf的文件,且查找两层,包括一层(下面显示的是部分)
find /etc -maxdepth 2 -mindepth 2 -name *.conf  ##查找/etc/下名称中带有*.conf的文件,且只查找第二层
find /mnt -group tony             ##查找/mnt中所有组是tony用户的文件
find /mnt -user student -group student  ##查找/mnt中所有人和所有组都是student的文件
find /mnt -not -user student      ##查找/mnt中所有人不是student用户的文件
find /mnt -not -user student -o -group tony   ##查找/mnt中所有人不是student用户或者所有组是tony用户的文件
find /mnt -size 20K       ##查找/mnt文件大小近似20k的文件
find /mnt -size +20K      ##查找/mnt文件大小大于20k的文件
find /mnt -size -20K      ##查找/mnt文件大小小于20k的文件
find /mnt -type d         ##按type查找/mnt中目录
find /mnt -type f         ##按type查找/mnt中文件
find /mnt -cmin 10        ##查找/mnt中十分钟左右修改的
find /mnt -cmin +10       ##查找/mnt中十分钟以上修改的
find /mnt -cmin -10       ##查找/mnt中十分钟以内修改的
find /mnt -ctime 10       ##查找/mnt中十天左右修改的
find /mnt -ctime +10      ##查找/mnt中十天以上修改的
find /mnt -ctime -10      ##查找/mnt中十天以内修改的
find /mnt/ -perm 444      ##查找/mnt文件权限为444的文件
find /mnt/ -perm -444     ##查找/mnt中user有读的权限且group有读的权限且other有读的权限的文件。(三个条件,u.g.o至少要读的权限即r--r--r--)
find /mnt/ -perm -004     ##查找/mnt中other有读权限的文件(一个条件,o至少有读的权限)
find /mnt/ -perm -644     ##查找/mnt中user有读写的权限且group至少有读权限且other有读的权限的文件。(四个条件,rw-r--r--)
find /etc/ -name *.conf -exec cp -rp {} /mnt \;   ##把/etc/目录下名称中带有.conf的文件递归复制到/mnt下
find /mnt -name "*.conf" -exec rm -fr {} \; ##删除/mnt名称中带有.conf的文件
find / -group mail -exec cp -rp {} /mnt \; ##把/目录下的组属于mail的文件复制到/mnt
find /etc/ -name passwd      ##查找/etc/下名称中带有passwd的文件


 

find /etc -maxdepth 1 -name passwd     ##查找/etc/下名称中带有passwd的文件,查找一层。

find /etc -name *.conf       ##查找/etc/下名称中带有*.conf的文件(下面显示的是部分)


 

find /etc -maxdepth 2 -name *.conf  ##查找/etc/下名称中带有*.conf的文件,且查找两层,包括一层(下面显示的是部分)


 

find /etc -maxdepth 2 -mindepth 2 -name *.conf  ##查找/etc/下名称中带有*.conf的文件,且只查找第二层

举例:
useradd tony
cd /mnt touch file{1..5} ##建立五个file文件
chown student.student /mnt/file1 ##改变file1所有人和所有组都为student
chown root.student /mnt/file2 ##改变file2的所有组为student
chown tony.student /mnt/file3 ##改变file3所有人为tony,所有组为student
chown root tony /mnt/file4 ##改变file4所有组为tony


 

监控命令: watch -n 1 ls -lR /mnt

find /mnt -group tony             ##查找/mnt中所有组是tony用户的文件


 

find /mnt -user student -group student  ##查找/mnt中所有人和所有组都是student的文件

find /mnt -not -user student -o -group tony   ##查找/mnt中所有人不是student用户或者所有组是tony用户的文件


 

find /mnt -not -user student      ##查找/mnt中所有人不是student用户的文件


 

find /mnt -not -user student -o -group tony   ##查找/mnt中所有人不是student用户或者所有组是tony用户的文件

举例:
cd /mnt
rm -fr *
dd if=/dev/zero of=file1 bs=1 count=10240
dd if=/dev/zero of=file2 bs=1 count=20480
dd if=/dev/zero of=file3 bs=1 count=40960

find /mnt -size 20k      ##查找/mnt文件大小近似20k的文件


 

find /mnt -size +20k      ##查找/mnt文件大小大于20k的文件


 

find /mnt -size -20k      ##查找/mnt文件大小小于20k的文件

find /mnt -type d         ##按type查找/mnt中目录

find /mnt -type f         ##按type查找/mnt中文件

find /mnt -cmin 10        ##查找/mnt中十分钟左右修改的
find /mnt -cmin +10       ##查找/mnt中十分钟以上修改的
find /mnt -cmin -10       ##查找/mnt中十分钟以内修改的

find /mnt -ctime 10       ##查找/mnt中十天左右修改的
find /mnt -ctime +10      ##查找/mnt中十天以上修改的
find /mnt -ctime -10      ##查找/mnt中十天以内修改的

举例:
cd /mnt
rm -rf *
mkdir file{1..5}
ls
chmod 000 * ##修改所有file文件的权限为000
chmod 404 file1 ##修改file1文件的权限为404
chmod 444 file2 ##修改file2文件的权限为444
chmod 644 file3 ##修改file3文件的权限为644
chmod 640 file4 ##修改file4文件的权限为640

find /mnt/ -perm 444      ##查找/mnt文件权限为444的文件

find /mnt/ -perm -444     ##查找/mnt中user有读的权限且group有读的权限且other有读的权限的文件。(三个条件,u.g.o至少要读的权限即r--r--r--)


 

find /mnt/ -perm -004     ##查找/mnt中other有读权限的文件(一个条件,o至少有读的权限)

find /mnt/ -perm -644     ##查找/mnt中user有读写的权限且group至少有读权限且other有读的权限的文件。(四个条件,rw-r--r--)

删除/mnt中文件的other的读权限:
方法1
chmod o-r $(find /mnt -perm -004)
方法2
find /mnt -perm -004 -exec chmod o-r {} \;

find /etc/ -name *.conf -exec cp -rp {} /mnt \;   ##把/etc/目录下名称中带有.conf的文件递归复制到/mnt下


 

find /mnt -name "*.conf" -exec rm -fr {} \; ##删除/mnt名称中带有.conf的文件


 

find / -group mail -exec cp -rp {} /mnt \; ##把/目录下的组属于mail的文件复制到/mnt

2017-03-28 14:58:17 D_leo 阅读数 975
Linux下find命令具有强大的查找功能,它可以完成各种情况的查找工作,所以find命令有很多选项。

【命令功能】
     用于在文件数中查找文件,并做出相应的处理(可能访问磁盘)
【命令格式】
     find pathname -options [-print -exec -ok ......]
【命令参数】
     pathname : find 命令所查找的目录路径
     -print:find命令将匹配的文件输出到标准输出
     -exec:find命令对匹配的文件执行该参数所给出的shell命令。相应的命令形式为: 命令 { } \;
     -ok   :和-exec相同,只不过以更安全的方式执行给出的shell
【命令选项】
     -name :按照文件名查找文件
     -perm :按照文件的权限查找文件
      -user :按照文件属主来查找文件

 -group :按照文件所属组来查找文件

 -mtime -n +n :按照文件的更改时间来查找文件,-n表示更改时间距现在n天以内,+n表示更改时间距现在n天以外。(find命令的-atime和-ctime和-mtime选项相同)

     -nogroup :查找无有效的所属组文件
     -nouser :查找无有效的属主 文件

     -type :查找某一类型的文件 b d c p l f

     -size n【c】:查找文件长度为n块的文件,带有c时,表示长度以字节计

     -depth :查找文件时,首先查找当前目录中的文件,然后再其他子目录中查找

     -fstype:查找位于某⼀一类型⽂文件系统中的⽂文件,这些⽂文件系统类 型通常可以在配置⽂文件/etc/fstab中找到,该配置⽂文件中包含了 本系统中有关⽂文件系统的信息。
     -mount:在查找⽂文件时不跨越⽂文件系统mount点。
     -follow:如果find命令遇到符号链接⽂文件,就跟踪⾄至链接所指向的⽂文件。
     -cpio:对匹配的⽂文件使⽤用cpio命令,将这些⽂文件备份到磁带设备中。


find命令的使用实例:
  • 使用find命令查找属主为root且大小为4686c的文件,删除它
          指令:find -uesr root -szie -4687c -size +4685c -ok rm { } \;
          或者 : find -user root -szie 4686c -ok rm { } \;
  • 查找当前所有目录并排序
           指令 :find -type d | sort
  • 查找所有目录中以"prefs"结尾的目录
            指令 : find ./ -type d -name "*prefs"
  • 查找5分钟内被访问过的目录
            指令 : find -type d -mmin +5



Linux中find命令详解

阅读数 4465

Linux find命令详解

阅读数 3089

Linux下find命令详解

阅读数 32726