命令解释
这个命令在linux中是一个比较强大的功能,它会在你指定的文件夹下可以很精确的查找某一个文件。但是它同时有一个缺点,就是会效率会比较低,所以我推荐当你去查找某个文件或者想知道某个命令的路径时,先用whereis
和locate
这两个命令先去试试,如果真查不到,再使用此命令。
find 根据时间来查找文件
命令说明
[root@localhost ~]# find [PATH] [option] [action]
参数:
与时间有关的参数:-atime、-ctime 和 -mtime。我们取其中 mtime 来举例
-mtime n : n 为数字,意义在 n 天之前的 “当天” 被更改的文件。
-mtime +n : 列出 n 天之前(不包含 n 天本身)被修改过的文件。
-mtime -n : 列出 n 天之内(包含 n 天本身)被修改过的文件。
-newer file : file 为一个存在的文件,列出比 file 还要新的文件。
命令举例
例子一:将过去24小时内有改动的文件都列出来。
[root@localhost ~]# find / -mtime 0
# 0代表当前的时间,所以查找的是现在开始到24小时前被修改过内容的文件都会被列出来。
例子二:寻找 /etc 下面的文件,如果比 /etc/passwd 新就列出来
[root@localhost ~]# find /etc -newer /etc/passwd
我们来具体了解下数字的意义:
- ex> find /var -mtime +4
:代表查找出大于等于5天前的文件。
- ex> find /var -mtime -4
:代表查找出小于或者等于4天内的文件。
- ex> find /var -mtime 4
:代表查找出4~5那一天的文件。
find 根据用户和用户组来查找文件
命令说明
参数:
-uid n : n 为数字,这个数字是用户的账号 ID,即 UID,这个 UID 是记录在 /etc/passwd 里面与账号名称对应的数字。
-gid n : n 为数字,这个数字是用户组名的 ID,即 GID,这个 GID 是记录在 /etc/group 中。
-user name : name 为用户账号名称。如 wenjie。
-group name : name 为用户组名称。如users。
-nouser : 寻找文件的所有者不存在 /etc/passwd 的文件。
-nogroup : 需找文件的用户组不存在 /etc/group 的文件。
看到上面的命令说明,你或许会有个疑问。难道还会有所有者、用户组不存在的文件?答案是,有可能的。比如有一个用户在系统下创建了一个文件或目录,然后由于某种原因,这个用户或者用户组被删掉了,系统中就会出现一个无主的文件。
命令举例
例子三:查找 /home 下面属于 wenjie 这个用户的文件
[root@localhost ~]# find /home -user wenjie
# 这个命令还蛮常用的,当我们需要知道某个文件夹下查找出某个用户的所有文件。
例子四:查找系统中不属于任何人的文件
[root@localhost ~]# find / -nouser
find 根据文件名称、权限、大小参数来查找文件
命令说明
参数:
-name filename : 查找文件名为 filename 的文件
-size [+-]SIZE : 查找比 SIZE 还要大(+)或小(-)的文件。
SIZE 的单位有 c:代表 byte、k:代表 1024bytes、M:代表 MB、G:代表 GB。所以我们要找比50 KB还要大的文件
就是:“-size +50k”
-type TYPE : 查找文件类型为 TYPE 的。类型主要有:
* 一般正规文件(f)
* 设备文件(b,c)
* 目录(d)
* 连接文件(l)
* socket(s)
* FIFO(P)
-perm mode : 查找文件权限“刚好等于” mode 的文件,举例来说:
-rwsr-xr-x 的属性为 4755
-perm -mode : 查找文件权限“必须要全部包含” mode 的文件,举例来说:
我们要查找 -rwxr-xr-- 的数字为 0754
如果还有一个文件的权限为 -rwxrwxr-x 的数字为 0775 同样也会列出来
因为 -rwxrwxr-x 的权限已经包含 -rwxr-xr-- 的权限了。
-perm +mode : 查找文件权限“包含任一” mode 的文件,举例来说:
我们要查找权限 -rwxr-xr-x 的数字为 0755时,
但文件权限 -rw------- 的数字为 0600 文件也会列出来,
因为它有 -rw... 的权限。
命令举例
例子五:查出文件名为 passwd 的这个文件
[root@localhost wenjie]# find / -name passwd
# 利用 -name 这个参数来查找
例子六:找出 /var 目录下文件类型为 Socket 的文件名有哪些
[root@localhost wenjie]# find /var -type s
# 这个命令可以查找出比较怪异的文件
# 比如: socket 与 FIFO 文件,可以用 find /var -type s 或 -type p 来找!
例子七:查找文件当中含有 SGID 或 SUID 或 SBIT 的属性
[root@localhost wenjie]# find / -perm +7000
# 所谓的 7000 就是 ---s--s--t,所以只要含有 s 或 t 的就都列出来
# 假如想找含有 ---s--s--t 的所有三个权限,那么得使用 -7000
例子八:查找出系统大1MB的文件
[root@localhost wenjie]# find / -size +1000k
find 其他参数
命令说明
参数:
-exec command: command 为其他命令,-exec 后面可再接其他的命令来处理查找的结果。
-print : 将结果打印到屏幕上,这个操作是默认操作
命令举例
例子九:将上列找到的文件使用 ls -l 列出来
[root@localhost wenjie]# find / -perm 0400 -exec ls -l {} \;
# 那个 -exec 后面 ls -l 就是额外的命令,命令不支持别名。
# 所以仅能使用 ls -l,不可以使用 ll。
上面这个范例各个参数的意义:
- {}
代表是“由 find 找到的内容”,就是经过 find
查找的内容会被放置到 {}
位置中。
- -exec
一直到 \;
是关键字,代表 find
额外命令的开始( -exec
)到结束( \;
),在这中间的就是 find
命令内的额外命令。在上面那个例子中就是 “ls -l {}”
。
- 因为“ ; ”在 bash 环境下是有特殊意义的,因此利用反斜杠来转义。