Linux的find命令详解和三个时间

Posted leno米雷のcoding记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的find命令详解和三个时间相关的知识,希望对你有一定的参考价值。

这次解释一下三个Linux文件显示的三个时间,然后展示一下find命令的各个功能

在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtime

  • modification time(mtime):

   当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别

  • status time(ctime)

   当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,给我的感觉更像是change time,但这么说也不完全对,因为只有当更新文件的属性或者权限的时候才会更新这个时间,更改内容的话是不会更新这个时间的

  • accesstime(atime)

   当使用这个文件的时候就会更新这个时间

那么为什么我使用vim打开一个文件的时候,atime没有改变呢?因为在我当前的版本中,有了relatime的概念,如果我们频繁的对文件进行读取访问,就会频繁的修改atime,然后频繁的访问磁盘I/O,性能下降的很厉害,说实话,慢!用了relatime参数之后,除非atime早于mtime或者ctime,否则atime不会被更新

悲剧,中文的linux三个时间都翻译过来了。。。

 

 

find指令详解,它有很多功能,很强大,实时性很强,每找一个文件都会十分老实地去磁盘中寻找,所以它又很慢。。。

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \\;

PS:[]中的是可以没有的,就是附加选项

-path:就是文件的路径啦

-option:就是下面要说明的各个参数,参数后面有的会有操作数,需要注意

-print:find命令将匹配的文件输出到标准输出。

-exec : -ok是-exec的一个选项,加上之后执行command时会询问用户

{} \\:注意是反斜杠,大括号和反斜杠之间有一个空格

-;:注意!!!!分号必不可少!!!

 

  • 先来一个例子

这里显示出了我写的一个命令,快看!分号不能少(因为我老是忘记,所以多写几遍),因为ls -l本身就不会询问用户(rm命令会询问,试试rm吧),所以自然用不了-ok,当我把-ok去掉之后,就可以正常执行ls -l了,

find命令参数详解

 find命令有很多参数,下面就用截图来一一说明

  • -name   filename             #查找名为filename的文件,和下面的放在一张图里面了
  • -perm                        #按执行权限来查找,使用权限查找的时候使用权限码就可以了

  • -user    username             #按文件属主来查找
  • -group groupname            #按组来查找

  • -mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
  • -atime    -n +n               #按文件访问时间来查GIN: 0px">
  • -ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

看到这里的-n之后就理所当然的想到+n是n天之后?我仔细想了想,我怎么可能在未来创建文件。。。

 

找到的几乎都是同样的文件,原因是我很少去linux里面创建新的文件,而是把windows的文件直接通过磁盘共享拿过去。。。

  • -nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在

咱好像没有这样的文件啊

  • -nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存

这样的似乎也没有

  • -newer   f1 !f2               #查更改时间比f1新但比f2旧的文件,使用的时候要注意f1和f2前面都应该有-newer参数才行

  • -type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件

我先建立了一个管道文件,然后搜索类型为管道文件的文件(。。。)

  • -size      n[c]               #查长度为n块[或n字节]的文件

这个我就不截图了。。

  • -depth                       #使查找在进入子目录前先行查找完本目录

给我的感觉而言,这个更像是遍历该文件夹下所有文件的样子,遇到子目录的时候先不进入子目录遍历,而是遍历完当前文件夹下的所有文件之后再去遍历子目录(就是子文件夹)下的文件,这样不断地递归。。。这不就是个层序遍历么?

  • -fstype:查找位于某一类型文件系统中的文件,文件系统类型可在/etc/fstab中找到

这个参数是什么意思没有太理解,测试了一下什么也没有找到,我都不知道应该怎么测试他

  • -mount                       #查文件时不跨越文件系统mount点

这个参数似乎是不允许进入子目录进行查找的,我试了一下,子目录下的文件说是查找不到

 

  • -follow                      #如果遇到符号链接文件,就跟踪链接所指的文件

当有硬链接的时候就不跟踪了,下面有个实例,file_hard是硬链接,file_ln是符号链接,当我把软连接删除,就不会跟踪到./test/file这个链接文件了,证明硬链接是不能跟踪的

  • -cpio                         #对匹配的文件使用cpio命令,将他们备份到磁带设备中

在普通的查找结果之后,把该文件备份写到磁盘上。。。

  • -prune                       #忽略某个目录

 这个就不用说了吧。。。。

 

 

最后强烈希望各位批评指正!!我还有很多不懂得地方,指出来我会超感谢的!


以上是关于Linux的find命令详解和三个时间的主要内容,如果未能解决你的问题,请参考以下文章

linux find命令查找当前目录下7天前的文件但排除所有目录

linux下find和grep命令详解

Linux常用命令详解 find

详解Linux——find命令(stat+exec+xargs+dd命令)

Linux find 命令详解

Linux命令——find命令详解