文件查找

1、which:可执行文件的查找

通常通过PATH环境变量到该路径内找可执行文件,所以一般找到的就是命令的存放路径。

常见选项:
 -a:将所有有PATH目录中的可以找到的指令均列出,而不是第一个被找到的指令名称。

但是which只可以找到PATH所规范的目录,有的命令是bash内置的就不会被查找到。可以试下使用type来判断命令的类型。
example 1:

[nebula6@master ~]$ type which 
which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[nebula6@master ~]$ which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
	/bin/alias
	/usr/bin/which

2、locate:文件名的查找

常见选项:
	-i:忽略大小写
	-r:后面可以接正则

locate的查找速度是非常快的
但是locate使用是有限制的,因为使用locate寻找的数据是由已创建的数据库/var/lib/mlocate里面的数据所查找到的,不用去硬盘中找,所以很快。
但是数据库一般一天才会更新一次,所以一般新建的文件不会立即被查找到,必须要更新数据库,如何手动更新数据库呢?
使用命令updatedb就可以了。updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就更新整个数据库文件了!因为updatedb会去读取硬盘,所以一般比较费时间。
example 1

[root@master ~]# touch today_locate
[root@master ~]# locate today_locate
[root@master ~]# updatedb
[root@master ~]# locate today_locate
/root/today_locate

example 2

[root@master ~]# touch ac_locate{1,2,3,4,5}
[root@master ~]# locate -r "ac_locate*"
[root@master ~]# updatedb
[root@master ~]# locate -r "ac_locate*"
/root/ac_locate1
/root/ac_locate2
/root/ac_locate3
/root/ac_locate4
/root/ac_locate5

但是遇到一个问题:我在/tmp下面创建的文件,同样的方法确还是查找不到?原因?

3、whereis:寻找特定的文件

常见选项:
	-b:只查找二进制格式的文件
	-m:只找在manual路径下的文件
	-s:只找source源文件
	-u:查找不在上述三个里面的文件

example 1

[root@master ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
[root@master ~]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz

whereis与locate一样都是基于数据库进行查找的。所以速度非常快。

4、find:最强大的查找命令

find查找速度比较慢,是直接读取硬盘的。

常见选项:
  1、与时间有关的参数:
  		-mtime  days:在days天之前的“一天内”被更改过的文件
  		-mtime +days:在days天之前(不含days自身)被更改过得文件名
  		-mtime -days:在days天内被更改过得文件名
  		-newer file : 比file 文件还要新的文件名
  		-ctime days:将days天之前一天内改变、新增的文件或者目录列举出来 
  		-aitme days:将将days天之前一天内存取过得文件或者目录列出来

在这里插入图片描述

  • +4:代表大于或者等于5天前的文件名
  • -4:代表小于或者等于4天内的文件名
  • 4:代表4-5天那一天的文件名

example 1
查找/home目录下面最近一周内其内容被修改过,且属主不是root用户也不是nebula用户的文件或目录:

[root@master ~]# find /home -mtime -7 -a -not -user root -a -not -user nebula
/home/nebula1
/home/nebula2
/home/nebula5
/home/nebula5/.bash_history
/home/cat1
/home/nebula6

example 2
查找/etc下面比/etc/passwd更新的文件或者目录:

[root@master ~]# find /etc -newer /etc/passwd
/etc
/etc/group
/etc/gshadow
/etc/shadow
/etc/group-
/etc/gshadow-
/etc/cron.daily
/etc/sudoers
/etc/updatedb.conf
常见选项:
 2、与用户或者用户组有关的参数:
 		-uid  num:UID为num这个用户的文件或目录
 		-gid num:GID为num这个组的文件或目录
 		-user name :用户名为name的文件或者目录
 		-group name:组名为name的文件名或者目录
 		-nouser:文件所有者不存在的文件名,可以看做孤儿,比如:删除了某个用户,但是没有加-r,其家目录依然存在。
 		-nogroup:寻找文件的拥有群组不存在于/etc/group的文件名或者目录。

example 1
查找/home下的“孤儿”:

[root@master ~]# find /home -nouser 
/home/nebula7
/home/nebula7/.bash_logout
/home/nebula7/.bash_profile
/home/nebula7/.bashrc
常见选项:
 3、与文件权限及名称有关的相关参数:
 		-name  filename :查找文件名为filename的文件
 		-size [+/-]SIZE:查找比SIZE还要大或者小的文件,
 		-type TYPES:查找文件的类型是TYPES的文件
 				f:普通文件
 				d:目录
 				l:链接文件
 				b,c:设备文件
 				s:套接字文件
 	    -perm  -mode:查找文件权限“必须要全部包括mode的权限”的文件。
 	      比如:查找744的文件,777也会被列出来,755也会。
 	    -perm /mode:查找文件权限“包含任一mode的权限”的文件。比如查找600文件时,400也会被列出,200也会

-perm这个参数还可以找出特殊权限的文件,suid,sgid都可以被设置在二进制程序上。

常见选项:
   4、其他可进行的操作:
   		 -exec command :command为其他命令,-exec后面可再接其他命令来处理查找到的结果
   		 -print :将结果打印在屏幕上
区分:-exec参数是一个一个传递的
	  	 文件有空格字符也能处理
	  	 -xargs:一次将参数传给命令,可以使用-n控制参数的个数

example 1
查找/目录下属主为root,且属组为nebula的所有文件或目录:

[root@master tmp]# find / -user root -a -group nebula
/proc/3026
/proc/3026/task
/proc/3026/task/3026
/proc/3026/task/3026/net
/proc/3026/task/3026/attr

example 2
查找/etc/下面大于2M且类型为普通文件的所有文件:

[root@master tmp]# find /etc -size +2M -type f -exec ls -lh {} \;
-r--r--r--. 1 root root 7.5M Oct 31 21:38 /etc/udev/hwdb.bin
-rw-r--r--. 1 root root 3.6M Jul 31 21:55 /etc/selinux/targeted/policy/policy.31
-rw-------. 1 root root 3.6M Jul 31 21:55 /etc/selinux/targeted/active/policy.kern
-rw-------. 1 root root 3.6M Jul 31 21:55 /etc/selinux/targeted/active/policy.linked

example 3
查找/etc目录下面至少有一类用户没有执行权限的文件:

[root@master ~]# find /etc -not -perm /222  -print |xargs  ls -l 
----------. 1 root root     878 Nov  1 14:55 /etc/gshadow
----------. 1 root root     890 Nov  1 14:55 /etc/gshadow-
-r--r--r--. 1 root root      63 Nov 20  2015 /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
-r--r--r--. 1 root root      63 Jul 17 00:45 /etc/ld.so.conf.d/kernel-3.10.0-862.9.1.el7.x86_64.conf
-r--r--r--. 1 root root      33 Jul 27 15:02 /etc/machine-id
-r--------. 1 root root      45 Jul 27 15:02 /etc/openldap/certs/password
-r--r--r--. 1 root root  211943 Jul 31 21:50 /etc/pki/ca-trust/extracted/java/cacerts
-r--r--r--. 1 root root  398934 Jul 31 21:50 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-r--r--r--. 1 root root  243579 Jul 31 21:50 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
-r--r--r--. 1 root root   64711 Jul 31 21:50 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
-r--r--r--. 1 root root  290670 Jul 31 21:50 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
-r--------. 1 root root    1675 Aug 30 15:44 /etc/salt/pki/master/master.pem
----------. 1 root root    1806 Nov  1 14:55 /etc/shadow
----------. 1 root root    1836 Nov  1 14:55 /etc/shadow-
-r--r-----. 1 root root    3937 Nov  1 13:16 /etc/sudoers
-r--r--r--. 1 root root 7780559 Oct 31 21:38 /etc/udev/hwdb.b

example 4
查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有些权限的所有文件:

[root@master ~]# find /etc/init.d -perm -113 -type f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值