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