查找命令例如 whereis locate 都有一定的局限性
whereis ls
locate
1.安装locate (和where is很像)
首先要形成db文件才能搜索,凌晨4点更新一次
Linux find命令
find命令是用来在给定的目录下查找符合给定条件的文件
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
一、OPTIONS参数
-P、-L、-H:控制软连接的对待方式,用的不多。不介绍了
二、查找路径
就是个目录路径,相对和绝对都可以。
三、查找条件
(一)、根据名称查找
-name “PATERN”
-iname “PATERN” :不区分名称字母大小写
-regex PATTERN:基于正则表达式的模式查找,匹配的是整个路径,而非单个文件名。
(二)、根据文件从属关系查找:
-user USERNAME:查找属主指定用户的所有文件;
-group GRPNAME:查找属组指定组的所有文件;
-uid UID:查找属主指定的UID的所有文件;
-gid GID:查找属组指定的GID的所有文件;
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
(三)、根据文件的类型查找:
-type:根据不同的文件类型筛选
(四)、根据文件的大小查找:
-size [+|-]#UNIT
常用单位:k, M, G
1、1k时:a3只有15个字节,也被算做1k也查询,即条件符合大于0k ( #-1 ),小于等于1k (#)
2、+1k时:a和a1满足大于1k(#)的条件
3、-62k时:只有a3满足大于等于0,小于等于 61k(#-1)的要求。
(五)、 根据时间戳查找:
按照atime(文件的最后访问时间)、mtime(文件的最后修改时间)、ctime(文件最后改变时间)三个变量来查询:
那么在linux中是怎样的,我们在linux中新建一个文件,然后用stat命令查看文件信息,如下图:
可以从上图看到系统为我们保存了这个的三个时间,分别是Access time、Modify time、Change time,也就是访问时间、修改时间和状态时间。
那么与前面所说的windows下做一个对比:
在windows下,一个文件有:创建时间、修改时间、访问时间。
而在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态时间
注意ctime和文件的权限相关,一般情况下mtime时间更新,ctime会跟着自动更新
以“分钟”为单位:
-amin
-mmin
-cmin
-daystart:时间条件的开始先决条件。如果没有的时候,比较的开始时间为当前时间。如果有此参数,则比较的开始时间为当天的23:59:59。
查询出来的各个文件名称对应时间如下:
(六)、根据权限查找
-perm
-perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足。9位权限之间存在“与”关系;
(1):精确查找。就是匹配权限值完全相等的;
(2):/mode。 只要有一组用户匹配到一个权限即可。
通俗说:就是属主拥有给定属主权限的某一个,或者数组拥有给定权限的某一个,或者其他用户拥有给定权限的某一个即可。
表示属主拥有执行权限
或者数组拥有写权限,
或者其他用户拥有写权限
(3):-mode。并且的关系。
通俗说:就是给定的属主权限必须拥有。并且给定的数组权限必须拥有。并且给定的其他用户权限必须拥有。
表示属主拥有执行权限
并且数组拥有写权限,
并且其他用户拥有写权限
处理动作:
-print:输出至标准输出;默认的动作;
-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
-delete:删除查找到的文件;
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} ; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
-exec COMMAND {} ; :对查找到的每个文件执行由COMMAND表示的命令;
注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;
但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:
find | xargs COMMAND
查找/etc 下 一天之内发生修改的文件:
find /etc/ -type f -mtime -1
查找/etc 下 一天以前发生修改的文件:
类似的atime ctime也可以一样使用
查找综合满足两个条件的文件 (并)
或:用的很少
find 中不太常用 但是又很实用的技巧
通过iNode号查找文件的硬链接 -inum +号
寻找1个小时内修改的文件: -mmin -60
exec小实验:
找寻150分钟之内根目录下修改过的文件并修改期文件名 加上 .bak
-exec mv {} {}.bak ;
注释:{}表示find根据指令要求找到的文件名 脱译
找到/root/ 目录下大于10k的文件并把它ls出来
注释:单位 k小写 M 只能大写 小写会报错 不加单位或者b都不可以
文件名后缀:
基本上,Linux的文件是没有所谓的“拓展名”的,我们刚刚就谈过,一个Linux文件能不能被执行,与x有关,与文件名根本一点关系也没有。这个观念跟Windows 的情况不相同!在Windows 底下,能被执行的档案扩展名通常是 .com .exe .bat 等,而在Linux底下,只要你的权限当中具有 x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行!
但是能执行与能执行成功是不同的。虽然扩展名不起作用但是我们还是希望可以由扩展名了解此文件是什么东西。所以。。。
.sh : 脚本或者批处理文件(scripts)
.Z .tar .tar.gz .zip .tgz : 经过打包的压缩文件。
.html .php :网页相关文件。
小知识:linux中which和whereis的区别
which命令是查找某个命令的完整路径,也就是说它是用来查找可执行文件的,which命令的原理是在当前登录用户的PATH环境变量记录的路径中进行查找。which命令使用例子:
which passwd(查找passwd命令的二进制文件路径)
而whereis命令则是用来快速查找任何文件,注意是任何文件,所以是一个文件搜索命令,它和另一个文件搜索命令locate的功能是一样的。比如如果输入:whereis passwd,那么找到的结果就比which命令找到的内容多,因为which命令只会列出二进制文件路径,而whereis命令会把所有带有passwd字样的文件路径都列举出来。
最新评论