一.find命令详解
概述
Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
find下的时间戳:
Linux下的3个时间:
atime: (access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用。(执行一些可执行文件或脚本)
mtime: (modify time)显示的是文件内容被修改的最后时间,比如用vi编辑时就会被改变。(也就是Block的内容)
ctime: (change time)显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)
mtime 改变 ctime会变
relatime 可以设置atime的改变
stat命令,可以显示文件具体信息:
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 等工具,创建出来的文件后缀名也不一样。