命令与文件的查询 where locate find

命令与文件查询:wherewhereis locatefind

    where:命令查找

    whereislocate:非实时查找工具;依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),手动更新此数据库查找速度快,模糊查找; locate数据库为/var/lib/mlocate,使用updatedb命令更新

    find 文件查找,实时查找;查找速度略慢;精确查找

 

脚本文件名的查询

    which查询执行文件

   语法:which [-a]command

   参数:-a:列出通过PATH查询到的所有命令都列出,而不是只是显示第一个被查询到的命令

    示例:

 
 [root@localhost~]# which cd
 /usr/bin/cd
 [root@localhost~]# which which
 aliaswhich='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
 /usr/bin/alias
 /usr/bin/which

 

文件名查找

(1)whereis查询指定文件

语法: whereis [-bmsu] 文件或目录名

参数:

-b:只查找二进制格式文件

-m:只查找说明文件manual路径下的文件

-s:只查找source源文件

-u:查找不属于上面三个选项外的特殊文件

    示例:  

        [root@localhost~]# whereis ifconfig
        ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

 (2)locate命令

  语法:locate [-ir] keyword

  参数:

  -i:忽略大小写

  -r:后面可接正则表达式的显示方式

  查询已创建数据库/var/lib/mlocate/

  输入updatedb 更新数据库

  示例:

# 如果没有locate命令需要安装 mlocate包
[root@localhost~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/passwd
 …


(3)find 命令

     find [OPTION]...[查找路径][查找条件][处理动作]

  查找路径: 默认当前路径

  查找条件:默认找出指定路径下的所有文件

  处理动作:对符合条件的文件做什么操作,默认为输出屏幕

 查找条件:

 根据文件名进行查找

      -name "文件名称":支持使用glob通配符

         *,?,[]

      -iname "文件名" 不区分字符大小写,支持glob

      -regex "PATTERN": PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

                                      

 根据属主,属组查找:

   -user USERNAME :查找属于指定用户的文件

   -group GROUPNAME 查找属于指定用户组的文件

                                      

   -uid #:#为数字, 查找指定用户ID的文件

   -gid #:#为数字,查找指定用户组ID的文件

                                      

   -nouser 查找文件的所有者不存在/etc/passwd中的文件

   -nogroup 查找文件的所属用户组不存在/etc/group中的文件

                                      

 根据文件类型进行查找:

   -type TYPE

      -(f) 一般普通文件

      d 目录文件

      l 连接文件

      b 设备文件

      c 设备文件

      p FIFO

      s socket

                            

 组合查找条件:

    与条件:-a

    或条件:-o

    非条件:-not!

                                      

    !A -o !B = !(A -a B) ======非A或非B  等价于 非 (A与B)

    !A -a !B = !(A -o B) ======非A与非B  等价于 非  (A或B)

                            

 根据文件大小查找

    -size [+|-]#UNIT

   单位: k,M,G

    #UNIT (#-1,#] 例如 3k 则查找2k<size<=3k的文件

    +#UNIT (#,+oo) 查找大于#k的文件

    -#UNIT [0,#-1] 查找小于等于#-1大小的文件

                            

 根据时间戳:

  以”天“为单位

    -atime [+|-]# :被访问过的文件

         #:[#,#+1)       #天之前的一天之内被访问过的文件

        +#:[#+1,oo]  #天之前被访问过的文件

         -#:[0,#) #天之内被访问过的文件

    -mtime 文件被修改的时间

    -ctime 文件属性被修改的时间


  以”分钟“为单位

    -amin [+|-]#

        #:[#,#+1)   #分钟之前的那一分钟之内被访问过的文件

        +#:[#+1,oo]:  #分钟之前被访问过的文件

        -#:[0,#)    #分钟之内被访问过的文件

    -mmin

    -cmin

                            

 根据权限查找

   -perm [/|-]MODE

    MODE:精确权限匹配

   /MODE: 任何一类对象(u,g,o)的任何一位权限符合条件即可,

   -MODE: 为每一类对象指定的每一位权限都必须同时存在方位符合条件:隐藏与条件


处理动作:

    -print:默认处理动作

    -ls:类似于对查找到的每个文件做“ls -l”操作

    -delete:删除查找到文件

    -fls /path/to/somefile 把查找到的文件的详细路径信息保存至指定文件中

                                

    -ok COMMAND {} \;

      对每个文件执行指定的命令之前需要用户确认

   -exec COMMAND {} \;

      无需用户确认

 示例

#根据文件名查找
[root@localhost~]# find / -name functions
/etc/rc.d/init.d/functions
/tmp/test/functions
/usr/lib/tuned/functions
 
#根据用户查找
[root@localhost~]# find /home/ -user root
/home/
/home/lost+found
 
#寻找文件所在组不在/etc/group中的文件
[root@localhost ~]# find / -nogroup
find: ‘/proc/3742/task/3742/fd/6’: No such file or directory
find: ‘/proc/3742/task/3742/fdinfo/6’: No such file or directory
find: ‘/proc/3742/fd/6’: No such file or directory
find: ‘/proc/3742/fdinfo/6’: No such file or directory
 
#根据文件类型查找:
[root@localhost ~]# find /tmp/ -type d
/tmp/
/tmp/.Test-unix
/tmp/.font-unix
/tmp/test
/tmp/.ICE-unix
/tmp/.XIM-unix
/tmp/.X11-unix
 
#根据文件大小查询
[root@localhost ~]# find /tmp/-size 1k
/tmp/test/test_grep
/tmp/test/test_vim
[root@localhost ~]# find /tmp/ -size 3k
[root@localhost ~]# find /tmp/ -size -3k
/tmp/test/test_grep
/tmp/test/test_vim
 
#根据时间戳:
[root@localhost ~]# find /tmp/ -atime +3 -ls
390928    4 -rw-r--r--   1 root    root           71 Aug 31 07:48/tmp/test/test_grep
[root@localhost ~]# find /tmp/ -atime 3 -ls
[root@localhost ~]# find /tmp/ -atime -3 -ls
389380    4 drwxrwxrwt   8 root    root         4096 Sep  7 02:04 /tmp/
389466    4 drwxrwxrwt   2 root    root         4096 Aug 20 06:20/tmp/.Test-unix
389465    4 drwxrwxrwt   2 root    root         4096 Aug 20 06:20/tmp/.font-unix
389381    4 drwxr-xr-x   2 root    root         4096 Sep  7 01:03 /tmp/test
390477   16 -rw-r--r--   1 root    root        13430 Sep  7 00:26 /tmp/test/functions
390986    4 -rw-r--r--  1 root     root          103 Sep  7 00:01 /tmp/test/test_vim
389463    4 drwxrwxrwt   2 root    root         4096 Aug 20 06:20/tmp/.ICE-unix
389464    4 drwxrwxrwt   2 root    root         4096 Aug 20 06:20/tmp/.XIM-unix
389462    4 drwxrwxrwt   2 root    root         4096 Aug 20 06:20/tmp/.X11-unix
 
#根据权限查找
#精确匹配权限为644
[root@localhost ~]# find /tmp/test/ -perm 644 -ls
390928    4 -rw-r--r--   1 root    root           71 Aug 31 07:48/tmp/test/test_grep
390986    4 -rw-r--r--   1 root    root          103 Sep 7 00:01 /tmp/test/test_vim
 
#每一类对象权限是同时包含w
[root@localhost ~]# find /tmp/test/ -perm -222 -ls
390477   16 -rw-rw-rw-   1 root    root        13430 Sep  7 00:26 /tmp/test/functions
#至少有一类对象包含w权限
[root@localhost ~]# find /tmp/test/ -perm /222 -ls
389381    4 drwxr-xr--   2 root    root         4096 Sep  7 01:03 /tmp/test/
390477   16 -rw-rw-rw-   1 root    root        13430 Sep  7 00:26 /tmp/test/functions
390928    4 -rw-r--r--   1 root    root           71 Aug 31 07:48/tmp/test/test_grep
 
#处理动作
[root@localhost ~]# find /tmp/test/ -perm 644 -exec ls -l {} \;
-rw-r--r--. 1 root root 71 Aug 31 07:48 /tmp/test/test_grep
-rw-r--r--. 1 root root 103 Sep 7 00:01 /tmp/test/test_vim

 

练习:

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

[root@localhost ~]# find /var -user root -group mail -ls
389436    4 drwxrwxr-x   2 root     mail         4096 Sep  9 07:36 /var/spool/mail
390495    4 -rw-------   1 root     mail         3037 Sep  9 07:36 /var/spool/mail/root


  2、查找/usr目录下不属于rootbinhadoop的所有文件;

#方法 1
[root@localhost ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
2501    4 drwx------ 2 polkitd  root  4096 Jun 10  2014 /usr/share/polkit-1/rules.d
#方法 2
[root@localhost ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop -ls
2501    4 drwx------ 2 polkitd  root   4096 Jun 10  2014 /usr/share/polkit-1/rules.d

                            

  3、查找/etc目录下最近一周内其内容修改过,且属主不为roothadoop的所有文件;

#方法 1
[root@localhost ~]# find /etc -mtime -7 -not -user root -a -not -user hadoop
#方法 2
[root@localhost ~]# find /etc/ -mtime -7 -not \( -user root -o -user hadoop \) -ls

 

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

[root@localhost ~]# find / -nouser -o -nogroup -atime -7
find: ‘/proc/4359’: No such file or directory
find: ‘/proc/4367/task/4367/fd/6’: No such file or directory
find: ‘/proc/4367/task/4367/fdinfo/6’: No such file or directory
find: ‘/proc/4367/fd/6’: No such file or directory
find: ‘/proc/4367/fdinfo/6’: No such file or directory

                              

  5、查找/etc目录下大于20k且类型为普通文件的所有文件;

[root@localhost ~]# find /etc/ -size +20k -type f -ls
....
69  656 -rw-r--r--   1 root     root       670293 Jun  7  2013 /etc/services
562   24 -rw-r--r--   1 root     root        20876 Jun 10  2014 /etc/postfix/access
568   28 -rw-r--r--   1 root     root        27176 Jun 10  2014 /etc/postfix/main.cf
....

 

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

[root@localhost ~]# find /etc/ -not -perm /222 -ls
 166  176 -r--r--r--   1 root     root       179212 Aug 20 06:16 /etc/pki/ca-trust/extracted/java/cacerts
 165  188 -r--r--r--   1 root     root       191772 Aug 20 06:16 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
 163  236 -r--r--r--   1 root     root       240762 Aug 20 06:16 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
 164  188 -r--r--r--   1 root     root       191741 Aug 20 06:16 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
 162  316 -r--r--r--   1 root     root       321332 Aug 20 06:16 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
 539    4 -r--r--r--   1 root     root           63 Mar  6  2015 /etc/ld.so.conf.d/kernel-3.10.0-229.el7.x86_64.conf
1050    4 -r--r-----   1 root     root         4000 Mar  6  2015 /etc/sudoers
  55    4 ----------   1 root     root          387 Sep  7 02:01 /etc/gshadow-
 322    4 -r--r--r--   1 root     root           33 Aug 20 06:20 /etc/machine-id
 566    4 ----------   1 root     root          398 Sep  9 08:04 /etc/gshadow
 421 6200 -r--r--r--   1 root     root      6345977 Aug 20 06:21 /etc/udev/hwdb.bin
 232    4 -r--------   1 root     root           45 Aug 20 06:17 /etc/openldap/certs/password
 440    4 ----------   1 root     root          966 Sep  9 08:04 /etc/shadow
  63    4 ----------   1 root     root          841 Sep  7 02:02 /etc/shadow-

 

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

[root@localhost ~]# find /etc/ -not -perm -111 -ls
    91    4 -rw-r--r--   1 root     root           28 Feb 28  2013 /etc/ld.so.conf
    57    4 -rw-r--r--   1 root     root            9 Jun  7  2013 /etc/host.conf
  1049    4 -rw-r-----   1 root     root         1786 Mar  6  2015 /etc/sudo.conf
   191    8 -rw-r--r--   1 root     root         5090 Jan 25  2014 /etc/DIR_COLORS
   520    4 drwx------   2 root     root         4096 Oct 14  2014 /etc/pki/rsyslog
   271    4 drwx------   2 root     root         4096 Mar  6  2015 /etc/pki/CA/private
   166  176 -r--r--r--   1 root     root       179212 Aug 20 06:16 /etc/pki/ca-trust/extracted/java/cacerts
   144    4 -rw-r--r--   1 root     root          726 Sep 18  2014 /etc/pki/ca-trust/extracted/java/README
   165  188 -r--r--r--   1 root     root       191772 Aug 20 06:16 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
   163  236 -r--r--r--   1 root     root       240762 Aug 20 06:16 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
   164  188 -r--r--r--   1 root     root       191741 Aug 20 06:16 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
   148    4 -rw-r--r--   1 root     root          897 Sep 18  2014 /etc/pki/ca-trust/extracted/pem/README
   162  316 -r--r--r--   1 root     root       321332 Aug 20 06:16 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
   146    4 -rw-r--r--   1 root     root          787 Sep 18  2014 /etc/pki/ca-trust/extracted/openssl/README
   142    4 -rw-r--r--   1 root     root          560 Sep 18  2014 /etc/pki/ca-trust/extracted/README
   150    4 -rw-r--r--   1 root     root          932 Sep 18  2014 /etc/pki/ca-trust/source/README
   140    4 -rw-r--r--   1 root     root          166 Sep 18  2014 /etc/pki/ca-trust/README
   189   12 -rw-r--r--   1 root     root        10923 Mar  6  2015 /etc/pki/tls/openssl.cnf
   ......

 

  8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;

[root@localhost ~]# find /etc/init.d/ -perm -111 -a -perm -002 -ls
597    0 -rwxr-xrwx   1 root     root            0 Sep  9 08:36 /etc/init.d/test


如有错误,敬请指正!

谢谢!

 


你可能感兴趣的:(linux,find,where,locate,whereis)