find命令

一.find命令详解

概述

Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

find下的时间戳:

de18d40197d2b17bf782de8a05acce9e7df.jpg

Linux下的3个时间:

atime: (access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用。(执行一些可执行文件或脚本)

mtime: (modify time)显示的是文件内容被修改的最后时间,比如用vi编辑时就会被改变。(也就是Block的内容)

ctime: (change time)显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)


mtime 改变 ctime会变
relatime 可以设置atime的改变

stat命令,可以显示文件具体信息:

6db2ab1e4caee631bf61a9d1c752ca54a41.jpg

which whereis locate (yum install -y mlocate) 不常用的模糊查询 updatedb(更新数据库)
ctrl +u 删除光标之前的  ctrl +e 把光标移动最后 ctrl +a 把光标移到开始

1.语法

find 路径 [参数] [输出形式]

2.参数:

-exec find命令对匹配的文件执行该参数所给出的其他linux命令。相应命令的形式为' 命令 - and' {} \;,注意{ }和\;之间的空格。
-ok 和- exec的作用相同,只不过和会人交互而已,OK执行前会向你确认是不是要执行。
find命令主要参数:
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了- depth选项,那么-prune选项将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍-mtime选项,上面有介绍。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth 查找最大目录层数 如 1,即只查找一层目录
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

3.示例

①通过名字查询

find /etc/ -name "sshd_config"

②通过名字模糊查询

find /etc/ -name "sshd*"

③通过名字查询目录

find /etc/ -type d -name "sshd*"

④通过名字查询文件

find /etc/ -type f -name "sshd*"

⑤查询软连接(l)、块设备(b)、字符设备(c)

find /etc/ -type l 
find /dev/ -type b 
find /dev/ -type c

⑥查询一天以内的文件内容被修改的文件

find /etc/ -type f -mtime -1

⑦查询一天以前的文件内容被修改的文件

find /etc/ -type f -mtime +1

⑧查询一天以内最后访问的文件

find /etc/ -type f -atime -1

⑨查询一天以内文件有所变动的文件(权限,内容,时间,拥有者,所属组等)

find /etc/ -type f -ctime -1

⑩查询一天以内名字为“*.cnf”的文件,这里"*.cnf"是正则模糊查询,表示以cnf结尾的文件。

find /etc/ -type f -mtime -1 -name "*.cnf"

⑪-o,并列表示满足其中之一。

find /etc/ -type f -o -mtime -1 -o -name "*.cnf"

⑫通过inode号查询文件

find / -type f -inum 33583395

⑬查询60分钟以内的文件

find /root/ -type f -mmin -60

⑭查询60分钟以内的文件并以ls -l输出出来,{}表示输出内容。

find /root/ -type f -mmin -60 -exec ls -l {} \;

⑮查询150分钟以内的文件并以mv输出出来,一个{}是源文件,第二个{}是目标文件。

find /root/ -type f -mmin -150 -exec mv {}{}.bak \;

⑯查询小与10k的文件并以ls -lh输出出来。

find /root/ -type f -size -10k -exec ls -lh \;

⑰查询大于10M的文件并以ls -lh输出出来,这里只能是大写M。

find /root/ -type f -size +10M -exec ls -lh \;

 

二.文件名后缀

一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据文件的后缀就能判断文件的类型。但在Linux一个文件是否能被执行,和后缀名没有太大的关系,主要看文件的属性有关。但我们了解一下Linux文件的后缀名还是有必要的,特别是我们自己创建一些文件,最好还是加后缀名,这样做的目的是仅仅是为了我们的在应用时方便。

现在的Linux桌面环境和Windows一样智能化,文件的类型是和相应的程序关联的。在我们打开某个文件时,系统会自动判断用哪个应用程序打开。如果从这方面来说,Linux桌面环境和Windows桌面没有太大的区别。

在Linux中,带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行,从这方面来说,Linux的扩展名没有太大的意义。

file.tar.gz file.tgz file.tar.bz2 file.rar file.gz file.zip ... ... 这些大家都熟悉,是归档文件。要通过相应的工具来解压或提取;

file.PHP 这个大家都知道吧,是能用php语言解释器进行解释,能用浏览器打开的文件;

file.so 这类是库文件;

file.doc file.obt 这是OpenOffice 能打开的文件;

... ...

用一些工具创建的文件,其后缀也不相同,就看我们用什么工具了,比如 Gimp,gedit,OpenOffice 等工具,创建出来的文件后缀名也不一样。

转载于:https://my.oschina.net/ccLlinux/blog/1827015

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值