您的位置:首页 > 运维架构 > Linux

Linux中find用法

2016-05-17 23:35 537 查看
Linux下查找文件的命令有两个;locate 和 find

首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件进行模糊匹配,在精确度上来说差了点,简单介绍下它的两个选项:
#locate
-i //查找文件的时候不区分大小写 比如:locate –i passwd
-n //只显示查找结果的前N行 比如:locate -n 5 passwd
Linux中find常见用法示例:

一、根据文件名查找
# -name //根据文件名查找(精确查找)
# -name "*.txt" //根据关键字查找
# -iname //根据文件名查找,但是不区分大小写
# -name a* 在当前目录下查找以a开始的文件






二、?表示 通配任意的单个字符




# -user username #按文件属主来查找
# -group groupname #按组来查找



三、根据文件类型查找
-type -name
f // 普通文件
d //目录文件
l //链接文件
b //块设备文件
c //字符设备文件
p //管道文件
s //socket文件
eg.find .-type d|sort //查找当前所有目录并排序






四、根据文件权限查找文件
-perm
#find /tmp -perm 755 //查找在/tmp目录下权限是755的文件

#find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的 匹配写权限就行
#find /tmp -perm -222 //表示必须所有类别用户都满足有写权限



五、按文件大小查找

find / -size 250c (查找1,50字节大小的文件,c表示字节)
find / -size +2500c (查找大于1,500字节大小的文件,+表示大于)
find / -size +2500c (查找小于1,500字节大小的文件,-表示小于)



六、按时间查找

modification time(mtime)
当该文件的“内容数据”更改时,就会更新这个时间。 内容数据指的是文件的内容,而不是文件的属性或权限。
status time(ctime)
当该文件的“状态”(status)改变时,就会更新这个时间。举例来说,像是权限与属性被更改了,都会更新这个时间。
access time(atime)
当“该文件的内容被取用”时,就会更新这个读取时间(access)。举例来说,我们使用cat去读取/etc/man.config,就会更新该文件的atime了。

访问一个目录其atime改变,mtime ,ctime不变;
修改一个目录:在一个目录下touch一个文件,mtime与ctime会改变,atime不一定会变;
# find / -mtime -n +n 文件数据的最后修改时间(n为天数) (-n为n天内,+n为n天前)
# find / -atime -n +n文件数据的最后存取时间(n为天数)
# find / -ctime -n +n 文件数据的最后更改时间(n为天数)

# find / -mmin -n +n文件数据的最后修改时间(n为分钟)(-n为n分钟内,+n为n分钟前) # find / -amin -n +n文件数据的最后存取时间(n为分钟) # find / -cmin -n +n 文件数据的最后更改时间(n为分钟)

例如:
# find /Bit -mtime -2 在/Bit下查最近两天内改动过的文件
# find /Bit -atime -1 查/Bit下1天之内被存取过的文件
# find /Bit -mmin -500 在/Bit下查最近500分钟内改动过的文件





ls -lc filename 列出文件的 ctime
ls -lu filename 列出文件的 atime
ls -l filename 列出文件的 mtime



七、使用mindepth和maxdepth限定搜索指定目录的深度 在root目录及其子目录下查找test文件。
在root目录下及其最大2层深度的子目录中查找test文件.
在root目录下及其最大3层深度的子目录中查找test文件.
在3-5层中优先查找文件内容名为test的文件




八、其他例子
1、无错误查找:
# find / -name access_log 2 >/dev/null
2、逻辑
-and 条件与 -or 条件或
3、查找字符串
# find . -name '*.html' -exec grep 'mailto:'{}
4、其它:
# find / -empty 空白文件、空白文件夹、没有子目录的文件夹
# find / -false 查找系统中总是错误的文件
# find / -fstype type 找存在于指定文件系统的文件,如type为ext2
# find / -gid n 组id为n的文件
# 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 -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
# find . -size +3000k -exec ls -ld {} ;
# find *.c -exec cp '{}' /tmp ';'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux find