find、locate、which
前两个是查找文件的,后面一个是针对命令的。
which只能查找命令的位置,可以用于做u+s提权,卸载某命令,做新的环境变量配置等等
里面可以看见的是命令是否别名,位置。
如果不使用别名,我们可以用\加上命令,就是执行命令本身。
先说说locate和find的区别:
1、locate是查找数据库里面的数据,速度比find快,但是数据可能不准确,因为数据库里面的内容,数据库不会实时更新,数据库在/var/lib/mlocate/mlocate.db里面,如果我们现在删除掉一个文件或者新建掉一个文件,用locate查找是不准确的,如果坚持用locate查找,应该先用updatedb,更新数据到数据库里面
locate并不能实时查找到,而是要通过做的缓存来查找。
而find就可以实时查找到,是因为find是遍历一次文件
2、locate操作比较少,没有find操作多,功能不够find强大。
一、locate
查找etc下以sh开头的文件
locate也可以使用通配符*
-i是不区分大小写
locate 感觉是不能用来查找在tmp下的文件或者目录,可能tmp下的东西不会写进数据库里面
二、find
find涉及 的操作就比较多,除了查找还可以在查找完之后做一系列操作,还可以多条件的筛选
1、按时间查找 -mtime
假如我们查找24小时内被修改过的文件可以用
!!在非root下用这个命令会出现权限问题
-mtime +n :列出在 n 天之前(不含 n 天本身)被更改的文件;
后面可以接上操作
-mtime -n :列出在 n 天之內(含 n 天本身)被更改过的文件;
可以看见我刚刚创建的File1文件~
2、按文件名找文件
find和locate有点不同 的是
locate可以打头字母寻找文件,而 find不可以,如果想这样只能使用通配符*
– iname 可以不区别大小写
3、按属主属组查找
-user与-group
如果是-group 和-user一起用,一定要都匹配上才会找到文件,是与操作,不是或操作
-nouser 不属于任何人的文件
一些被删除的用户会遗留下属于他们的文件或者是进程文件
4、按大小找、按文件名字找
-size
-name
如果找不到就不显示出来
-size
如果不输入单位,默认是k
查找四舍五入是4k的文件
四舍五入是4M的文件
大于4M的文件
小于1k的
5、按文件类型找
d目录文件
f 普通文件
b 是块设备文件、c 字符设备、s 套接字、p 管道以此类推
查看并打印某个目录的普通文件:
6、按文件权限
-perm
7、深度 -maxdepth
0 是目前那个目录文件,1是文件下一个深度,2 是可以再看多一个深度,以此类推
7、find后面可以加的操作
-print -ls -delete (-exec -ok) 后面接shell命令
find /tmp/ -type f -exec cat {} \; 可以用于查看某目录下的文件
发现生效了,而且并没有区别,说明复制成功了!
-ok和-exec的区别是有没有交互,交互会每一个文件都询问。安全性会比较高~
exec现在可以用xargs替代,两者的区别是exec选项是找到一个操作一次,可能会造成内存不够,而xargs是找完了,用管道传过去,进行操作(对于小文件两个都差不多,对于大的文件推荐使用xargs)
!!与或非操作
查找/etc 下的非 目录文件并且叫passwd的文件
(非和与操作)
或操作
! -type d 表示非目录 ! -type f表示非普通文件 等等
直接执行命令比用find再用命令要快