注意:grep、egrep、fgrep命令都文本查找,是查找文件里的内容。

文件查找用locate命令、find命令。


1、locate命令
 是全系统内进行查找,是根据数据库进行的。这个数据库是系统每天晚上自动创建的。

特点:

非实时,模糊匹配,查找是根据全系统文件数据库进行,速度快。

当前对文件的操作,不会在数据库中,所以有些文件用locate搜索不到,但是可用命令手动更新数据库后,再用locate命令查找即可实现实时查找。


updatedb命令:手动更新数据库。



2、find命令:

特点:

实时查找,精确,支持众多查找标准,通过遍历制定中的目录的所有文件完成查找,速度较慢。

find命令格式:

find 查找路径 查找标准 查找到以后的处理动作

(1)查找路径:可省了,默认为当前目录;

(2)查找标准:默认为指定路径下的所有文件;

(3)处理动作:默认为显示;


匹配标准:

1、    -name ‘FILENAME':对文件名精确匹配,默认严格区分大小写;

        支持文件名通配;

    -iname FILENAME':文件名匹配时不区分大小写;

2、    -regex PATTERN:基于正则表达式进行文件名匹配,要同--regextype TYPE指定正则式类型;

3、    -user USERNAEM:根据属主查找文件;

    -group GROUPNAME:根据属组查找文件;


4、   -uid UID:根据uid查找文件,删除用户后可使用;

    -gid GID:根据gid查找文件;

5、    -nouser:查找没有属主的文件;

    -nogroup:查找没有属组的文件;


6、    -type CHART(指定文件类型):

        f:普通文件;

        d:目录文件;

        c:字符设备文件;

        b:块设备文件;

        l:符号(软)链接文件;

        p:管道设备;

        s:套接字文件;

7、    -size  [+|-]#unite(指定文件大小,单位默认为字节)

        #unit:精确大小#unit,单位可为K,M,G;

        +#unit:大于#unit;

         -#unit:小于#unit;

8、组合条件查找:默认为与逻辑;

    -a:与

    -o:或

    -not:非,例如:-not -type d为非目录类型文件;


注意摩根定律:

-not A -a -not B = -not(A -o B)

-not A -o -not B = -not(A -a B)

9、根据文件时间戳查找:

     以天为单位:

    -atime [+|-]#:访问时间;

    -mtime [+|-]#:修改时间;

    -ctime [+|-]#:改变时间;

        #:此刻时间到之前的24小时的一天之内;

        +#:#天之前;

        -#:#天之内;

    以分钟为单位

    -amin [+|-]#:访问时间;

    -mmin [+|-]#:修改时间;

    -cmin [+|-]#:改变时间;

10、    根据权限查找文件    

    -perm [+|-]MODE(MODE用八进制数字表示)

        MODE:表示ugo每一位权限精确匹配;

        /MODE:表示ugo有一位权限符号就匹配(或关系);

        -MODE:表示ugo的权限位只有完全包含就匹配(与关系);


(3)执行动作:默认为-print:显示;

    -ls:类似ls -l的形式显示每一个文件的详细信息;

    -ok COMMAND {} \;交互执行命令,大括号为引用匹配到的文件;

    -exec COMMAND {} \;:不交互执行命令;

    例如:注意语法格式 {} \;

    find ./ -perm -006 -exec chomod o-w {} \;

解释:找权限完全包含other用户拥有读、写权限的文件后,other设为没有写权限;

    find ./ -type d -ok chmod +x {} \;

解释:找类型为目录的文件后,把文件的属主、属组设为拥有执行权限,执行命令前让用户确认;

    find ./ -perm -020 -exec mv {} {}.new \;

解释:找文件权限完全包含为属组有写权限的文件后,重命名为原名后加.new;