想一下我们为什么要熟悉Find命令呢?
Whereis和locate都可以用来查找,但是这两个是通过数据库来查因为没有实际查询硬盘所以相当快速,但是也会有其他问题
1)whereis命令只能用于程序名的搜索,而且只搜索二进制文件,man说明文件和源代码文件(省略参数时返回所有信息)
2)Whereis查找的快是因为Linux系统会将系统内所有文件都记录在一个数据库中,当使用Whereis和locate时,会从数据库中查找数据,而不是像find那样,通过遍历硬盘来查找。但是 数据库文件并不是实时更新,默认情况下一星期更新一次,因此用locate和Whereis时有时会找到已经删除的数据或刚刚建立的新文件会找不到,所以虽然find速度慢,但是确实最有效的
1.按文件名查找
如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls”命令就能方便的查找出来,那么使用“find”命令也就没什么卵用。但如果知道了某个文件的文件名,而忘记了放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了plugins这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用
$ find / -name test
就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上目标文件名即可,然后便会显示它的完整路径。
2.无错误查找技巧:
在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但当Linux系统中系统管理员ROOT把某些文件目录设置成禁止访问模式。普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询时会显示”Permissiondenied.”
为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入 find / -name 文件名 2>/dev/null 这个方法是把查找错误提示转移到特定的目录中去。/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了。
$find -name group 2>/dev/null
3.条件查询
在Linux系统下如果在整个硬盘中查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。但如果知道这个文件存放在某个大的目录中,可使用[find /大目录名 -name 目标文件名] 就可以解决这个问题。
$ find /home -name test
上面的命令就是表示在home目录中查询。“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/home”就是只在 home目录下查找文件,所以查找的速度就相应要快很多了。
4.根据部分文件名查找方法:这个方法和在WINDOWS中查找已知的文件名方法是一样的。。
根据文件的特征查询方法:
(1).例如我们知道一个Linux文件大小为1,500 bytes,则
$find / -size 1500c,字符 c 表明这个要查找的文件的以bytes为单位。
(2).不知道文件大小
$find / -size +/-数字(+表示大于这个数字的;-表示小于这个数字大小的)c表示这个文件以字节为单位
5.与时间有关的参数 -atime -mtime -ctime
以-time为例说明
$ find -mtime n:n是数字,标记在n天之前的一天之内的被修改的文件
find−mtime+n:表示在n天之前(不含n天本身)被改过的文件
find -mtime -n :表示在n天之前(含n天本身)被改过的文件
$find / -mtime 0 将过去系统上面24小时有改动的文件列出(0代表目前事件,例如换成3就是三天前的24小时)
6.与用户或用户组名有关的参数
-uid n:n为数字,这个数字是用户的帐号id,即UID
-gid n:n为数字,这个数字是用户组的帐号id,即GID
-user name :name为用户帐号名称
-nouser:寻找文件所有者不在/etc/passed 的人
-no group:寻找文件所有用户组不在/etc/passed 的人
7.与文件权限或名称有关的参数
-type TYPE:查找文件类型为b块设备文件的
-perm mode :查找文件权限刚好为mode的
-perm -mode:查找文件权限,必需全部包含mode的
-perm +mode:查找文件权限,包含任一mode的
8.其他可进行操作
-exec comm 的:comma为其他命令,接其他命令来处理查找到的结果
例如可加ls-l,不能加ll,这个命令不支持命令别名
-print:默认将结果打印到屏幕上的操作