码迷,mamicode.com
首页 > 其他好文 > 详细

命令与文件的查询 where locate find

时间:2015-09-07 07:12:59      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:find locate where whereis linux

命令与文件查询:wherewhereis locatefind

    where:命令查找

    whereislocate:非实时查找工具;依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),手动更新此数据库(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 -a !B = !(A -o 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

    -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的所有文件;

   #find /var/ -user root -group mail -ls

 

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

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

                            

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

   #find /etc -mtime -7 -not -user root -a -not -user hadoop

 

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

   # find / \( -nouser -o -nogroup \) -atime +7

                              

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

   # find /etc/ -size +20k -type f

                              

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

   #find /etc/ -not -perm /222 -ls

 

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

   #find /etc/ -not -perm -111 –ls

 

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

   #find /etc/init.d/ -perm -111 -a -perm -002 -ls


如有错误,敬请指正!

谢谢!

 


命令与文件的查询 where locate find

标签:find locate where whereis linux

原文地址:http://rogerwang.blog.51cto.com/5326353/1692014

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!