命令与文件查询:where,whereis, locate,find
where:命令查找
whereis,locate:非实时查找工具;依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),手动更新此数据库(updatedb)查找速度快,模糊查找
find: 文件查找,实时查找;查找速度略慢;精确查找
脚本文件名的查询:
which查询执行文件
语法:which [-a]command
参数:-a:列出通过PATH查询到的所有命令都列出,而不是只是显示第一个被查询到的命令
示例:
[[email protected]~]# which cd /usr/bin/cd [[email protected]~]# 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:查找不属于上面三个选项外的特殊文件
示例:
[[email protected]~]# 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包 [[email protected]~]# 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 {} \;
无需用户确认
示例
#根据文件名查找 [[email protected]~]# find / -name functions /etc/rc.d/init.d/functions /tmp/test/functions /usr/lib/tuned/functions #根据用户查找 [[email protected]~]# find /home/ -user root /home/ /home/lost+found #寻找文件所在组不在/etc/group中的文件 [[email protected] ~]# 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 #根据文件类型查找: [[email protected] ~]# find /tmp/ -type d /tmp/ /tmp/.Test-unix /tmp/.font-unix /tmp/test /tmp/.ICE-unix /tmp/.XIM-unix /tmp/.X11-unix #根据文件大小查询 [[email protected] ~]# find /tmp/-size 1k /tmp/test/test_grep /tmp/test/test_vim [[email protected] ~]# find /tmp/ -size 3k [[email protected] ~]# find /tmp/ -size -3k /tmp/test/test_grep /tmp/test/test_vim #根据时间戳: [[email protected] ~]# find /tmp/ -atime +3 -ls 390928 4 -rw-r--r-- 1 root root 71 Aug 31 07:48/tmp/test/test_grep [[email protected] ~]# find /tmp/ -atime 3 -ls [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# find /tmp/test/ -perm -222 -ls 390477 16 -rw-rw-rw- 1 root root 13430 Sep 7 00:26 /tmp/test/functions #至少有一类对象包含w权限 [[email protected] ~]# 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 #处理动作 [[email protected] ~]# 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目录下不属于root、bin或hadoop的所有文件;
#find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
3、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
#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
如有错误,敬请指正!
谢谢!