命令与文件查询:where,whereis, locate,find
where:命令查找
whereis,locate:非实时查找工具;依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),手动更新此数据库查找速度快,模糊查找; 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目录下不属于root、bin或hadoop的所有文件;
#方法 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目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
#方法 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
如有错误,敬请指正!
谢谢!