文件查找
查找指定文件的位置,而非内容。 Attention:grep是文本查找工具 1.locate 系统定时索引所有文件,将索引信息存入相关数据库,locate查找此数据库 因为locate进行的是数据库查找,因而速度很快,但是不准确,这是一种非实时查找 #locate 文件命中关键字 #locate -n 10 passwd 显示带有passwd关键字的文件,目录除外,并且是前10行 #locate c passwd 统计文件名中带有passwd关键字的所有文件的个数 #updatedb 手动生成locate所依赖的数据库 2.find #find PATH [criteria..] [action] PATH 一般为目录,省略时默认当前目录,根目录/ #find /etc -name "passwd" 递归子目录 找到文件名为passwd的文件 #find 显示当前目录下的文件 包括隐藏文件 criteria 查找标准 -name "string" 严格区分大小写 -iname "string" 不区分大小写 以上两种均支持globbing文件匹配 Attention *:任意长度的任意字符 ?:任意单个字符 []:匹配指定字符集的单个字符 [^]:匹配除了指定字符集的单个字符 字符集的表示方法: 1.罗列指定的字符例如aeiou 2.数字和字母支持一下方式 1-9;a-z,A-Z 不能将find的输出结果简单通过管道输送给其他命令 即 find /tmp -user redhat|ls -l 此种写法是错误的 应该使用命令替换即使用反引号 ls -l `find /tmp -user redhat` -group GROUP_NAME 在指定目录下匹配属组为GROUP_NAME的文件 -uid UID 在指定目录下匹配uid为UID的文件 -gid GID 在指定目录下匹配gid为GID的文件 -nouser 在指定目录下匹配没有属主的文件 -nogroup 在指定目录下匹配没有属组的文件 无属主和属组的文件的产生:一个用户建立了一些文件,而后用户被删除了。他建立的这些歌文件就成为无属主或无属组的文件 如果只当原来属主或属组的ID 也一样可以执行操作 -type f 匹配普通文件 d 匹配目录 L 匹配软链接 b 匹配块设备文件 c 匹配字符设备文件 p 匹配管道文件 s 匹配套接字文件 -size num[k|M|G] 10M exactly匹配10M >9M <10M 也认为是10M -10M 小于10M +10M 大于10M -atime num 访问时间 -mtime num 修改时间 -ctime num 改变时间 以上三种单位是Day -amin num -mmin num -cmin num 以上三种单位是Minute num 匹配[Day|Minute] -num 匹配num[Day|Minute]以内 +num 匹配至少num[Day|Minute]以前 -perm permit 权限 num 此num由3个8进制位组成 num 表示按照num严格匹配三种用户的权限 +num /num 表示将代表UGO三个组的用户的8进制位表示成为3个二进制位,置零的二进制位表示此位不匹配,文件是什么都可以 置一的二进制位表示此位必须匹配,文件必须有此权限 而后文件的三种用户至少有一组满足上述条件就符合条件 简单说,就是讲num翻译成rwx的形式,只要文件的三组权限只要有一组跟num对应组除非-意外的一样就符合条件 -num 表示将代表UGO三个组的用户的8进制位表示成为3个二进制位,置零的二进制位表示此位不匹配,文件是什么都可以 置一的二进制位表示此位必须匹配,文件必须有此权限 而后文件的三种用户必须都满足上述条件就符合条件 简单说,就是讲num翻译成rwx的形式,只要文件的三组权限每一组跟num对应组除非-意外的一样就符合条件 Attention:+num 里面含有或条件 -num里面含有与条件,与not连用时注意逻辑关系 +754 表示,文件属主有rwx的权限或者文件属组有rx的权限,有没有w权限无所谓或者文件其他用户有r的权限有没有其他权限无所谓,这样的文件符合条件 -754 表示,文件属主有rwx的权限且 文件属组有rx的权限,有没有w权限无所谓且 文件其他用户有r的权限有没有其他权限无所谓,这样的文件符合条件 组合条件 -a 与 默认 -o 或 -not 优先级 -not>-a>-o 此处慎重考虑,特别是非或 非与结合时候 Cu(A∩B)=CuA∪CuB Cu(A∪B)=CuA∩CuB Action -p print 默认 -ls 以长格式显示 查看文件以执行命令 -ok 会提醒确认执行操作 command {}空格\; -exec (execute) command {}空格\; 查找到的文件一个一个传过来 通过{}引用 \; 命令结束符 Attention 1.find可以通过管道传送个,但其后面只能跟xargs命令 find /etc -perm 644 |xargs 命令 2.find / -nouser -a -nogroup -atime -3 -exec chown root:root {} \; 此命令看似是将系统根目录下的没有属主且没有属组的文件并且最近一次访问时间是在3天以内的文件属主属组改为root 实则不然,-nogroup会与 -atime +3结合然后才与-nouser想与 此时需要将命令改造一下 find / \(空格-nouser -a -nogroup空格\) -atime -3 -exec chown root:root {}空格\; 注意()需要\来转义而且注意空格的存在 3.当前目录下以某个inode号为索引删除文件 find . -inum=16 -exec rm {}空格\; -inum 用来指定inode号