find&locate

find&&locate命令详解

文件查找

locate,find

在文件系统上查找符合条件的文件

一、locate:

locate passwd

根据事先构建的索引,实现文件查找

所有包含passwd的路径都会显示出来

依赖于事先构建好的索引库;

系统自动实现(周期性任务)

手动更新数据库(updatedb)

工作特性:

查找速度笔记快

模糊查找

非实时查找//使用的数据库,可能是以前的数据库,没有更新过

locate [OPTION] ... PATTERN...

-A //符合所有PATTERN

-b //只匹配基名

-c //匹配到的文件个数

-r //使用基本正则表达式

注意:索引构建过程需要遍历整个根文件系统,极消耗系统资源

updatedb //更新locate搜索库

二、find

实时查找供,通过遍历指定起始路径下文件系统层级结构完成文件查找

工作特性:

查找速度略慢

精确查找

实时查找

用法:

find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

查找起始路径:指定具体搜索目标起始路径,默认为当前目录

查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件

处理动作:默认为输出到标注输出

查找条件:

表达式:选项和测试

测试:结果通常为布尔型(“true”,“FALSE”)

1.根据文件名查找

-name “pattern” //文件名

-iname “pattern” //忽略大小写

支持glob风格的通配符

*,?,[],[^]

-regex pattern //基于正则表达式查找文件,匹配范围是整个路径,而非基名

非常少用

2.根据文件的属主和属组

-user USERNAME 属主为

-group GRPNAME 属组为

-nouser 没有用户

一个用户创建文件后,删除该用户,以前属主为该用户的文件,的属主会变成该用户原来的UID

-nogroup

-uid UID:查找属主指定的UID的所有文件

-gid GID:查找属组指定的GID的所有文件

3.根据文件的类型查找

-type TYPE:

f,d,l,b,c,p,s

find /dev/ -type b -ls //-ls显示详细信息

4.组合测试

与:-a 默认组合条件

find /tmp -nouser -type f -ls

find /tmp -nouser -a -type f -ls

或:-o

非:-not或者!

find /tmp -not  -type f

5.根据文件的大小查找:比我小的我敢

-size [+|-]#UNIT //小于但包括自己

常用单位:k,M,G

-size 10k //9.01k到10k之间,都会匹配到(#-1,#]之间,半开半闭区间

-#UNIT://小于,且不包括

-size -10k //[0-9k]

+#UNIT://大于且不包括

-size +10k //(#,无穷大)

--------|----------|--------

-UNIT UNIT +UNIT

[0,#-1] (#-1,#] (#,oo)

6.根据时间戳查找//stat查看

以“天”为单位:

-atime [+|-]#

#:过去多少天访问过的文件

#:[#,#-1)//大于

三天之前的事:

-atime # //(96h,72h]之内的时间,的时候

-atime -3 //(72h,0h] 三天之内的事情

-atime +3 //(oo,96h] 三天之前

find /etc/ -atime +7 //一周之内没有被访问过

-mtime 修改时间

find /etc/ -mtime -1 //24h之内修改过的

-ctime 改变时间

以“分钟”为单位

-amin

-mmin

-cmin

7.根据权限查找

-perm [/|-] mode

mode:精确权限匹配

find ./ -perm 644 /必须是

/mode //任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足

find ./ -perm /666 //全都匹配,只要有一个满足即可

find ./ -perm /222 //查找至少一类用户有写权限的文件

-mode //每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;

同时包含该权限

/mode 一般:-mode:包含即可,mode完全对照

或者  与   且

find ./ -not -perm -222  -ls

//至少有一个没有w权限

//所有都有,至少一个没有

处理动作

-print;输出至标准输出,默认的动作;

-ls;类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息

-delete:删除查找到的文件

-fls /PATH/TO/SOMEFILE :匹配到的所有文件的长格式信息保存到指定文件中

-ok COMMAND {} \; : 对查找到的每个文件由COMMAND表示的命令

{} 占位符,引用前面的文件

find ./ -nouser -ok chown wolf.wolf {} \;

-exec COMMAND {} \;  //和ok作用一样,但是不需要用户确认

find ./ -perm /022 -exec mv {} {}.txt \;

{}的作用是用来引用之前匹配到的文件名

注意:find传递查找到的文件路径至后面的命令的时候时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令

但是有些命令不能接受过长的参数,此时命令执行会失败,另一种方式可规避此问题

find | xargs COMMAND

课外作业:xargs的用法

xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。

find /sbin -perm +700 |xargs ls -l

xargs -a test echo //-a读入一个标准文件,输出没有断行,

cat txt | xargs -n2 echo //n命令在执行的时候,用2个argument

-e flag 注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。

1.txt

aaa bbb ccc ddd a b

$ xargs -E ‘ddd‘  -a 1.txt echo

aaa bbb ccc //ddd为结束符,

cat 1.txt -n2 echo

aaa bbb

ccc ddd

a b   //默认分隔符为空格,每两个为一行

-t 先打印命令

ls ./ | xarg.      j/件名

find ~ -name ‘*.log‘ -print0 | xargs -0 rm -f

3. 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接

# cat url-list.txt | xargs wget –c

4. 查找所有的jpg 文件,并且压缩它

# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

5. 拷贝所有的图片文件到一个外部的硬盘驱动

# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory

三、练习:

1.找出/tmp目录下属主为非root的所有文件

2.找出/tmp下文件名中不包含fstab字符串的文件

3.找出/tmp下属主为root,而且文件名不包含fstab字符串的文件

find /tmp/ ! -user root

find /tmp/ ! -name "*fstab*"

find /tmp ! -user root -a ! -name "*fstab*"

find /tmp -not \( -user root -o -iname "*fstab*" \) -ls

//使用的是通配符

1.查找/var目录下属主为root,且属组为mail的所有文件或目录

2.查找/usr目录下不属于root,bin或hadoop的所有文件或目录,用两种方法

3.查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录

4.查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或者目录

5.查找/etc目录下大于1M且类型为普通文件的所有文件

6.查找/etc目录下所有用户都没有写权限的文件

7.查找/etc目录至少由一类用户没有执行权限的文件

8.查找/etc/init.d下,所有用户都有执行权限,且其他用户有写权限的所有文件

1.find /var -user root -a -group mail

2.find /usr -not -user root -a -not -user bin -a -not -user hadoop

find /usr -not \( -user root -o -not -user bin -o -not -user hadoop \)

3.find /etc -mtime -7 -a -not -user root -a -not -user wolf

4.find /  \( -nouser -o nogroup \) -atime -7 -ls

5.find /etc -size +1M -a -type f -ls

find /etc -size +1M -a -type f -exec ls -lh {} \;

6.find /etc/ -not -perm /222 -ls //权限中不包含写权限

7.find /etc/test/ -not -perm -111 -type f -ls

//所有用户多有执行权限

8.find /etc -perm -111 -a -perm -002

find /etc -perm -113 -type f -ls

注意:所有都没有===至少一个有

权限:       -   mode //由歪变直

/640 任何一类用户(ugo)的任何一位满足即可

- 必须包含

mode 精确匹配

find&locate

时间: 2024-08-03 03:00:07

find&locate的相关文章

Mac 下locate命令使用问题WARNING: The locate database (/var/db/locate.database) does not exist.

想在Mac下使用locate时,提醒数据库没创建: WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the d

linux命令(37):locate命令

1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值.(etc/crontab) locate指定用在搜寻符合条件的档案

每天一个Linux之locate命令

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行. 1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locat

find、locate文件查找命令详解

一.locate:根据键值数据库模糊匹配,找路径 1.命令工作模式 (1)模糊查找 依赖于事先构建好的索引库,索引构建过程需要遍历整个根文件系统,占CPU使用资源 (2)无法实施更新 查找的是过去某一时刻更新的数据库文件,查找路径 系统自动更新:一般为每日系统例行性任务完成更新 手动更新数据库:uodatedb (3)查找速度快 通过对创建的索引库的匹配遍历查找文件路径,查询速度哦哒哒增加 2.格式:locate   [OPTION]...  PATTERN- -b:只匹配路径中的基名 -c:统

小蚂蚁学习Linux(4)——链接命令ln、文件搜索命令locate、whereis和which

链接命令ln    (取自link之意) ln  [源文件]    [目标文件]    功能:生成链接文件.    -s 创建软连接 ,不加是创建硬链接 硬链接的特征: 1. 拥有相同的i节点和存储block快,可以看做是同一个文件. 2. 可通过i节点识别 3. 不能跨分区 4. 不能针对目录使用 备注:硬链接只要不把所有文件名删除,删除其中一个不影响其他文件名的使用. 需要注意的是,不建议只用硬链接: 1. 硬链接太过隐蔽,只能通过查看inode节点id号识别 2. 自身的限制也比较多. 替

can't locate ExtUtils/MakeMaker.pm in @INC

[[email protected] FCGI-0.71]# perl Makefile.PL can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at Makef

Centos之文件搜索命令locate

locate命令 locate 文件名 在后台数据库中按文件名搜索,搜索速度更快 /var/lib/mlocate #locate命令所搜索的后台数据库 updatedb 更新数据库 locate搜索速度比较快: [[email protected] ~]# ls 222  anaconda-ks.cfg  牛逼 [[email protected] ~]# locate 牛 -bash: locate: 未找到命令 我们用locate命令的时候 发现 为找到命令,我们用Yum命令远程安装下lo

linux下查找文件或目录(which,whereis,locate,find)

命令 查找对象 查找速度 备注 which 可执行文件  根据PATH变量的内容去寻找可执行文件  不同的PATH配置会有不一样的结果 whereis 程序名的搜索  根据数据库来寻找,速度快  只支持二进制文件,源代码,man手册 locate 文件或目录  根据数据库来寻找,速度快  更新数据库:$sudo updatedb find 文件或目录  在硬盘里寻找,速度慢  NA

Linux文件查找之find&locate

Linux文件查找之find&locate 一.概述 Linux系统核心的思想之一"一切皆文件",对于这么多的文件,如何快速查找过滤呢?下面我们就看看系统提供的文件查找命令find和locat,熟练使用find命令是运维人员的必经之路 二.find的用法及示例 1.find特点 查找速度略慢 精确查找 实时查找 只能搜索有读取和执行权限的目录 2.find用法 用法:find  [options]  [查找路径]  [ 查找条件]  [处理动作] 查找条件: 根据文件类型查找

Linux下which、whereis、locate命令详解

which 命令 which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置.它一般用来确认系统中是否安装了指定的软件. 命令格式: which 可执行文件名称 常用范例: 例一:确认是否安装了 gcc,可以使用如下命令: which gcc 例二:查看 cd 命令的位置路径,可以使用如下命令: which cd 命令可以是下面四种形式之一: 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样. 属于这一类的程序,可以编译成二进制文件,诸如用 C 和