locate :

locate 是一个文件查找命令,其主要特点是:快速,模糊匹配,维护一个在/var/lib/mlocate/mlocate.db的数据库,该数据库存放系统每个文件的信息,每次查找文件会直接去数据库内查找,所以速度很快,该数据库由系统自己生成,并设置有任务计划,每天凌晨自动更新,所以使用locate并不能查找不久前创建的文件,如果一定要使用locate查到刚刚创建的文件,可以手动执行updatedb命令更新数据库

locate 用法比较简单:

   locate [option] FILENAME 会在全盘查找包含FILENAME的文件或目录

[test@mail ~]$ locate ifconfig
/sbin/ifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
/usr/share/zsh/4.2.6/functions/_ifconfig

   -i 查找时忽略大小写

[root@mail tmp]# locate -i RPMPKGS
/var/log/rpmpkgs
/var/log/rpmpkgs.1
/var/log/rpmpkgs.2
/var/log/rpmpkgs.3
/var/log/rpmpkgs.4


find :

find 也是一个文件查找命令,其主要特点是:实时,精确,支持众多的查询条件,在查找文件会遍历指定的目录及子目录,查找速度较慢


基本用法:

find PATH  OPTIONS FILENAME [ACTION]

查找条件:OPTIIONS

  -name FILENAME 根据文件的名称进行查找,名称可以使用* ? [] 等进行通配

例如:查找/etc目录下名字是inittab的文件  

[root@mail ~]# find /etc -name inittab
/etc/inittab

        或者查找/etc下面以init开头的文件

[root@mail ~]# find /etc/ -name init*
/etc/mail/spamassassin/init.pre
/etc/initlog.conf
/etc/selinux/targeted/contexts/initrc_context
/etc/sysconfig/init
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/init.d
/etc/inittab
/etc/rc.d/init.d
/etc/iscsi/initiatorname.iscsi

  -iname FILENAME 在根据文件名称查找的同时忽略文件名的大小写

       例如:查找/tmp/script目录下不区分大小写名叫abc的文件

[root@mail ~]# find /tmp/scripts/ -iname abc
/tmp/scripts/aBC
/tmp/scripts/abC
/tmp/scripts/abc
/tmp/scripts/Abc
/tmp/scripts/ABC



  -regex  PATTERN 基于正则表达式来匹配文件名称

   例如:查找/tmp/script目录下以er结尾的文件

[root@mail ~]# find /tmp/scripts -regex .*er
/tmp/scripts/lover
/tmp/scripts/liver


  -user 根据文件的属主进行查找

例如:查找/tmp目录下属主是user1的文件

[root@mail tmp]# find /tmp -user user1 -ls
1962304    0 -rw-r--r--   1 user1    user1           0  5月 20 21:09 /tmp/file1
1962296    0 -rw-r--r--   1 user1    user1           0  5月 20 21:09 /tmp/file2
1962307    0 -rw-r--r--   1 user1    user1           0  5月 20 21:09 /tmp/file3


  -group 根据文件的属组进行查找  

例如:查找/tmp/scripts目录下属组是user1的文件

[root@mail scripts]# find /tmp/scripts -group user1 -ls
1962295    0 -rw-r--r--   1 root     user1           0  5月 18 17:47 /tmp/scripts/lover
1962294    0 -rw-r--r--   1 root     user1           0  5月 18 17:47 /tmp/scripts/liver

  -uid 根据文件的属主的uid进行查找

例如:查找/tmp/scripts目录下uid是0的文件

[root@mail scripts]# find /tmp/scripts/ -uid 0 -ls
1962279    4 drwxr-xr-x   2 root     root         4096  5月 18 17:47 /tmp/scripts/
1962270    4 -rw-r--r--   1 root     root           14  5月 16 19:01 /tmp/scripts/work1.sh
1962295    0 -rw-r--r--   1 root     user1           0  5月 18 17:47 /tmp/scripts/lover
1962294    0 -rw-r--r--   1 root     user1           0  5月 18 17:47 /tmp/scripts/liver

  -gid 根据文件的属组的gid进行查找

例如:查找/tmp/scripts目录下gid是0的文件

[root@mail scripts]# find /tmp/scripts/ -gid 0 -ls
1962279    4 drwxr-xr-x   2 root     root         4096  5月 18 17:47 /tmp/scripts/
1962270    4 -rw-r--r--   1 root     root           14  5月 16 19:01 /tmp/scripts/work1.sh


  -nouser 查找没有属主的文件

[root@mail tmp]# find /tmp -nouser
/tmp/file1
/tmp/file2
/tmp/file3


  -nogroup 查找没有属组的文件

[root@mail tmp]# find /tmp -nogroup
/tmp/file1
/tmp/file2
/tmp/file3
/tmp/scripts/lover
/tmp/scripts/liver


  -type 根据文件的类型进行查找

  f: 查找类型为普通文件的文件

          即:find PATH -type f

[root@mail scripts]# find /tmp -type f
/tmp/ssh.log
/tmp/file2.bak
/tmp/sess_57d08894caddedd0a8819a33d5215388
/tmp/file1.bak


  d:查找类型为目录的文件

        即:find PATH -type d

[root@mail scripts]# find /tmp -type d
/tmp
/tmp/.font-unix
/tmp/.ICE-unix
/tmp/scripts



  c:查找类型为字符设备的文件

        即:find PATH -type c

[root@mail scripts]# find /dev -type c
/dev/tty14
/dev/tty13
/dev/tty15
/dev/tty17
/dev/tty20


  b:查找类型为块设备的文件

       即:find PATH -type b

[root@mail ~]# find /dev -type b
/dev/md0
/dev/hdc



  l:查找类型为链接的文件

       即:find PATH -type l

[root@mail ~]# find  /etc/rc.d/rc0.d/ -type l
/etc/rc.d/rc0.d/K01dnsmasq
/etc/rc.d/rc0.d/K92iptables
/etc/rc.d/rc0.d/K90bluetooth
/etc/rc.d/rc0.d/K15svnserve



  p:查找类型为管道的文件的文件

          即:find PATH -type p

[root@mail scripts]# find /var/run -type p
/var/run/autofs.fifo-net
/var/run/autofs.fifo-misc


  s:查找类型为套接字文件的文件

       即:find PATH -type s

[root@mail ~]# find /var/run -type s
/var/run/audispd_events
/var/run/dbus/system_bus_socket
/var/run/acpid.socket
/var/run/avahi-daemon/socket
/var/run/pcscd.comm
/var/run/sdp
/var/run/clamav/clamd.socket


  -size  [+|-]

      +10K 表示大于10K的文件

[root@mail ~]# find /var/log -size +10k
/var/log/anaconda.syslog
/var/log/lastlog
/var/log/prelink/prelink.log
/var/log/secure.4
/var/log/maillog
/var/log/audit/audit.log.3
/var/log/audit/audit.log.2
/var/log/audit/audit.log
/var/log/audit/audit.log.1


      -10K 表示小于10K的文件

[root@mail ~]# find /tmp -size -10k
/tmp/mysql.sock
/tmp/.font-unix
/tmp/.font-unix/fs7100
/tmp/sess_f41af2fa1e64c016233fffa28b4ebbbf
/tmp/.ICE-unix
/tmp/zabbix_agentd.pid
/tmp/scripts
/tmp/scripts/mkethalias.sh
/tmp/sess_2eb9102156cd01625c57f50a476ac85d
/tmp/zabbix_agentd.log
/tmp/cmdserver.sock


      [+|-]#M 表示大于或小于#M的文件类似上面的用法

      [+|-]#G 表示大于或小于#G的文件类似上面的用法


  -a 且 组合多个条件,满足所有条件,才能被查找到

   查找/etc 目录下名字是init且是普通文件的文件

[root@mail ~]# find /etc -name init -a -type f
/etc/sysconfig/init



  -o 或 组合多个条件,满足任意条件,就能被查找到

   查找/etc 目录下名字是init或者大小大于1M的文件  

[root@mail ~]# find /etc -name init -o -size +1M
/etc/gconf/schemas/metacity.schemas
/etc/selinux/targeted/modules/active/base.linked
/etc/selinux/targeted/modules/active/policy.kern
/etc/selinux/targeted/modules/active/base.pp
/etc/selinux/targeted/policy/policy.21
/etc/sysconfig/init



  -not 取反 不满足条件,能被查到,满足条件反而不能被查到

   查找/tmp 目录下属主不是root且权限不是777的文件  

[root@mail ~]# find /tmp -not -user root -not -perm  777
/tmp/sess_f41af2fa1e64c016233fffa28b4ebbbf
/tmp/zabbix_agentd.pid
/tmp/sess_2eb9102156cd01625c57f50a476ac85d
/tmp/zabbix_agentd.log



  -atime 最近访问的时间(单位是天)

[+|-] # 表示大于或小于#天没有被访问的文件

   查找/tmp 目录下30没有被访问的文件

[root@mail ~]# find /tmp -atime +30
/tmp/cmdserver.sock

       查找/tmp 目录下今天被访问过的文件


[root@mail ~]# find /tmp -atime -1
/tmp
/tmp/mysql.sock
/tmp/.font-unix
/tmp/.font-unix/fs7100
/tmp/.ICE-unix
/tmp/scripts
/tmp/scripts/mkethalias.sh

  -ctime 最近文件属性修改的时间(单位是天)类似atime用法

  -mtime 最近文件内容修改的时间(单位是天)类似atime用法

  -amin 最近访问的时间(单位是分钟)类似atime用法

  -cmin 最近文件属性修改的时间(单位是分钟)类似atime用法

  -mmin 最近文件内容修改的时间(单位是分钟类似atime用法


  -perm

      MODE :精确匹配,权限需要完全一下才匹配

[root@mail scripts]# find /tmp/scripts/ -perm 600 -ls
1962300    4 -rw-------   1 root     root          494  5月 10 20:30 /tmp/scripts/1.sh
1962305    4 -rw-------   1 root     root          500  5月 10 20:26 /tmp/scripts/2.sh

       -MODE :权限需要包含指定权限才能匹配

[root@mail scripts]# find /tmp/scripts/ -perm -755 -ls
1962279    4 drwxr-xr-x   2 root     root         4096  5月 18 17:47 /tmp/scripts/
1962287    0 -rwxrwxrwx   1 root     root            0  5月 18 17:32 /tmp/scripts/abC
1962325    4 -rwxr-xr-x   1 root     root          498  5月 10 20:06 /tmp/scripts/4.sh

      /MODE :任意一位匹配就满足条件



处理动作 [ACTION]

  -print :将查找到的文件显示出来(默认选项)

[root@mail scripts]# find /etc/ -name grub.conf -print
/etc/grub.conf


  -ls 将查找到的文件,按照ls -l 的格式显示出每个文件的详细信息

[root@mail scripts]# find /etc/ -name grub.conf -ls
4286129    0 lrwxrwxrwx   1 root     root           22  2月 28 03:03 /etc/grub.conf -> ../boot/grub/grub.conf


  -exec COMMAND  {} ;\ 将执行的结果当做参数传递给COMMAND执行,无需确认,直接执行

[root@mail scripts]# find /tmp/ -name file1 -exec mv {} {}.bak \;
[root@mail scripts]# ll /tmp
总计 12
srwxrwxrwx 1 root  root     0 03-09 00:35 cmdserver.sock
-rw-r--r-- 1  5001  5001    0 05-20 21:09 file1.bak


  -ok COMMAND {} ;\ 将执行的结果当做参数传递给COMMAND执行,每一步都会请求你确认

[root@mail scripts]# find /tmp/ -name file2 -ok mv {} {}.bak \;
< mv ... /tmp/file2 > ? y
[root@mail scripts]# ll /tmp
总计 12
srwxrwxrwx 1 root  root     0 03-09 00:35 cmdserver.sock
-rw-r--r-- 1  5001  5001    0 05-20 21:09 file2.bak


which:

which 是查找并显示bash命令的完整路径,which会在环境变量设定的位置查找指定的命令

   基本用法:    which COMMAND

   查找find命令的完整路径

[root@mail ~]# which find
/usr/bin/find

   有时候我们使用which查找一个命令的完整路径的时候,由于该命令使用了别名,which也会将该别名信息显示出来,如果不想让which现在别名信息可以使用 --skip-alias

[root@mail ~]# which ls
alias ls='ls --color=tty'
    /bin/ls
[root@mail ~]# which --skip-alias ls
/bin/ls


whereis:

whereis 是查找一个命令的二进制文件,源文件,已经man手册文件

   基本用户: whereis [-bmsu] [-BMS Directory -f] FILENAME

whereis命令常用选项含义如下:

       -b   定位可执行文件。
       -m   定位帮助文件。
       -s   定位源代码文件。

[root@mail ~]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz


[root@mail ~]# whereis -b ls
ls: /bin/ls


[root@mail ~]# whereis -s ls
ls:


[root@mail ~]# whereis -m ls
ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz


这篇文章是个人一些学习中的总结,仅代表个人的理解,如有不足之处,还望见谅...