Linux攻关之基础模块十四 文件查找
文件查找
在文件系统上查找符合条件的文件实现工具:locate find
1.locate
依赖于事先构建好的索引库系统自动实现(周期性任务)手动更新数据库(updatedb)工作特性查找速度快模糊查找非实时查找yum install -y mlocatelocate [option] ... PATTERN ...命令选项-b 只匹配路中的基名Pathbasename(基名) 就是文件路径最后的字段dirname-c 统计出共有多少个符合条件的文件-r BRE注意:索引构建过程需要遍历整个根文件系统,极其消耗资源
2.find
Linux系统文件查找文件查找概述文件名查找文件大小查找时间戳查找文件从属关系查找文件类型查找权限查找组合查找处理动作
find:
实时查询工具,通过遍历指定起始路径下文件系统层级结构完成文件查找工作特性查找速度略慢精确查找实时查找
用法:find [OPTIONS] [查找路径] [查找条件] [处理动作]查找起始路径:指定具体搜索目标起始路径,默认为当前目录查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等进行,默认为找出指定路径下的所有文件处理动作:对符合查找条件作出的操作,例如删除动作,默认为输出至标准输出查找条件表达式:选项和测试测试:结果通常为布尔型(真 or 假)根据文件名查找-name-iname通配符 * ?-regex 基于正则表达式模式查找文件,匹配的是整个路径,而非其名//创建文件[root@zph ~]# touch /etc/sysconfig/network-scripts/{ifcfg-eth0,IFCFG-ETH0}//查找/etc/目录下包含ifcfg-eth0名称文件[root@zph ~]# find /etc -name "ifcfg-eth0"//忽略大小写[root@zph ~]# find /etc -iname "ifcfg-eth0"//查找/etc目录下包含ifcfg- 名称所有文件[root@zph ~]# find /etc -iname "ifcfg-*"[root@zph ~]# find /etc -name "ifcfg-*"根据文件大小查找-size [+/-] 常用单位 k M g//查找大于5M[root@zph ~]# find /etc -size +5M//创建等于5M的文件[root@zph ~]# dd </dev/zero > ./test bs=1M count=5[root@zph ~]# find . -size 5M//查找小于5M的文件[root@zph ~]# find . -size -5M根据时间戳查找atime:access time文件访问时间,从Centos/RHEL6开始,atime更改更新周期 86400秒修改文件内容touch mtime:modify time文件修改时间ctime以天为单位-atime [+/-] find /etc/ -atime 7 恰好七天前被访问的文件find /etc/ -atime -7 七天内被访问的文件find /etc/ -atime +7 七天之前被访问的文件以分钟为单位:-amin-mmin-cmin文件从属关系查找-user 查找属主指定用户的所有文件-group 查找属组指定组的所有文件-uid 查找属主指定UID的所有文件-gid 查找属组指定GID的所有文件-nouser 查找没有属主的文件-nogroup 查找没有属组的文件//查找属主是zph[root@zph ~]# find /home -user zph//查找属组是zph[root@zph ~]# find /home -group zph//查找没有属主[root@zph ~]# find /home -nouser//查找没有属组[root@zph ~]# find /home -nogroup文件类型查找-type TYPETYPE:f 普通文件d 目录文件l 符号链接文件b 块设备文件c 字符设备文件p 管道文件s 套接字文件例子find /etc/ -type f 查找/etc下的所有普通文件根据权限查找-perm [/ -] mode (mode代表权限位)mode 精确权限匹配/mode 任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即可满足; 9位权限之间存在'或'关系 rwxrwxrwx-mode 每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即可满足;9位权限之间存在'与'关系 rwx rwx rwx例子//完全匹配644权限[root@zph ~]# find . -perm 644 -ls//拥有者至少要011(-wx),组010(-w-),其他人100(r--)[root@zph ~]# find /home -perm -324//拥有者至少有r,或者组成员至少有r,或者其他人至少有w权限[root@zph ~]# find /home -perm /442//查找全局可写[root@zph ~]# find . -perm -222 -ls//包含suid[root@zph ~]# find /usr/sbin -perm -4000 -ls//包含gid[root@zph ~]# find /usr/sbin -perm -2000 -ls//包含sticky[root@zph ~]# find /usr/sbin -perm -1000 -ls组合查找与 -a(默认)或 -o非 -not,!!A -a B = !(A -o B)!A -o B = !(A -a B)例子//找出/tmp目录下文件名不包含fastab字符串文件[root@zph ~]# find /tmp -not -iname "*fstab*" -ls//找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件[root@zph ~]# find /tmp -not \( -user root -o -iname "*fstab*" \) -ls // \是为了取消()的特殊含义[root@zph ~]# find /tmp -not -user root -a -not -iname "*fstab*" -ls
处理动作当查找到一个文件后,需要对文件进行如何处理-print 输出至标准输出,默认动作-ls 类似于对查找文件执行ls -l 命令,输出文件的详细信息-delete 删除查找到的文件-fls /PATH/TO/SOMEFILE 把查找的所有文件的长格式信息保存至指定文件中-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND表示的命令,每次操作需要用户进行确认-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND表示的命令,不需要确认例子://拷贝文件[root@zph ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \;//-ok不断提示[root@zph ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \;//删除文件[root@zph ~]# find /etc -name "ifcfg*" -exec rm -rf {} \;[root@zph ~]# find /etc -name "ifcfg*" -delete//本地文件保留最近7天的备份,备份服务器保留3个月find /backup/ -iname "*.bak" -mtime +7 -deletefind /backup/ -iname "*.bak" -mtime +90 -delete注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令,但是有些命令不能接受过长的参数,此时命令执行失败,另一种方法find | xargs COMMAND
find结合xargs管道是把一个命令的输出传递给另一个命令作为输入,比如 command1 | command2 但是command2仅仅把输出的内容当做字符串输入参数,不能把它当做文件来处理xargs就是为了能够对find搜索到的文件进行操作而编写的,它能把管道传来的字符串当做文件交给其后的命令执行[root@zph ~]# find /etc/ -name "hosts" | cat/etc/hosts[root@zph ~]# find /etc/ -name "hosts" -exec cat127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6注意:在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此执行下去。在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高,而使用xargs命令只有一个进程,另外,在使用xargs命令时,究竟是一次获取所有参数,还是分批取得参数,以及每一次获取参数的数目,都会根据 该命令的选项以及系统内核中相应的可调参数来确定xargs 常用选项//-0 ,当stdin含有特殊字元时候,将其当做一般字符,像/空格等,配合find的-print0[root@zph ~]# touch "a b c.txt"[root@zph ~]# find . -name "*.txt" | xargs lsls: 无法访问./a: 没有那个文件或目录ls: 无法访问b: 没有那个文件或目录ls: 无法访问c.txt: 没有那个文件或目录[root@zph ~]# find . -name "*.txt" -print0 | xargs -0 ls./a b c.txt//-a file 从文件中读入作为sdtin[root@zph ~]# cat > 1.txt << EOF> AAA BBB CCC> A B> C D> EOF[root@zph ~]# xargs -a 1.txtAAA BBB CCC A B C D//-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分割的标志,当xargs分析到含有flag这个标志的时候就停止[root@zph ~]# xargs -E 'A' -a 1.txtAAA BBB CCC[root@zph ~]# cat 1.txt | xargs -E 'A'AAA BBB CCC//-n num 后面加次数,表示命令在执行的时候一次用的参数,默认是用所有的.也就是xargs和exec最显著的区别[root@zph ~]# cat 1.txt | xargs -n 2AAA BBBCCC AB CD//-p 操作具有可交互性,每次执行command都交互式提示用户选择,当每次执行一个参数时会询问一次用户 特别类似于find的 -ok[root@zph ~]# cat 1.txt | xargs -p echo AAA BBB CCC A B C D ?...yAAA BBB CCC A B C D//-t 查看xargs的具体执行过程//-i 或者是 -I 这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替使用find复制若干文件到指定目录解法一:[root@zph ~]# find . -name "*.txt" | xargs -t cp -t /tmp/注:cp -t 是将 后面的/tmp/作为目标解法二:[root@zph ~]# cp -v `find /root -name "*.txt"` /tmp[root@zph ~]# cp -v $(find /root -name "*.txt") /tmp解法三:[root@zph tmp]# find -name "*.txt" -exec cp -v {} /tmp/ \;解法四:[root@zph ~]# find . -name "*.txt" | xargs -I {} cp -v {} /var/tmp/
Linux攻关之基础模块十四 文件查找相关推荐
- Linux攻关之基础模块十 特殊权限
Linux特殊权限 Linux系统特殊权限 set_uid set_gid sticky粘滞位 权限属性chattr 进程掩码umask 1.Linux系统特殊权限 s-uid只对可执行文件生效,可以 ...
- Linux攻关之基础模块十二 进程相关
Linux系统进程管理 什么是进程 进程生命周期 监控和管理进程 静态监控进程 动态监控进程 信号管理进程 后台进程管理 1.什么是进程 进程是已启动的可执行程序的运行实例,进程有以下组成部分分配内存 ...
- Linux攻关之基础模块三 文件命令
1.1 在linux下隐藏文件是以"."开头的,单纯的使用ls命令是看不到的,加上"-a"参数才可以. 删除则可以使用命令:rm -fr .*(删除当前目录下的 ...
- Linux攻关之基础模块四 命令初识
1.问题: (1)切记不要乱删东西 /root 服务器出现异常的原因: 误操作(勤备份,尽量不要在重要的目录里操作(/tmp),企业要求尽量不要使用root用户登录) 系统负载大 (2)快照 2.Li ...
- Linux攻关之基础模块九 系统基本权限
Linux系统权限 Lin系统基本权限 Linux系统特殊权限 Linux系统ACL Linux系统权限 r-- 100 4 -w- 010 2 --x 001 1chown:Linux中用来改变某个 ...
- Linux攻关之基础模块七 命令总结
1.帮助命令 man info help --help man info 手册页,较详细的帮助 help:内部命令帮助 -help:外部命令帮助 2.文件和目录操作命令 ls du tree mkdi ...
- Linux攻关之基础模块五 Vim
vim基本介绍 vim模式介绍 vim命令模式 vim编辑模式 vim末行模式 vim视图模式 vim环境变量 vim扩展知识 1.vi与vim vi与vim的区别 vi不显示高亮颜色语法 vim显示 ...
- Linux攻关之基础模块一 系统准备
1.CentOS7.5 修改IP 1.1 ifconfig 查看IP地址 CentOS7修改IP的方法: 第一种:nmtui 第二种:修改网卡配置文件 cat /etc/sysconfig/netwo ...
- Linux(debian7)操作基础(十四)之文本搜索命令grep使用方法
一.简介 grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则 ...
最新文章
- JavaScript 中 Object ,Prototype 相关的属性和方法
- 安装证书服务:为Web站点启用HTTPS
- 持续集成mysql_DevOps安装、部署持续集成
- C#中线程的使用[Thread in C#]
- file命令及Linux重要关键路径介绍
- 【转】医学影像调窗技术!!!!
- 【机器学习】总结:线性回归求解中梯度下降法与最小二乘法的比较
- 爱心的浪漫永不过时—程序猿的小浪漫
- 记录——《C Primer Plus (第五版)》第十一章编程练习第二题
- 读书笔记——5建造者模式(转)
- 一个用户下表、批量授予权限给另一个用户
- 十大常用机器学习算法总结(持续完善)
- tf1.x版RandLA-Net源码解读(5):测试
- HTML网页设计教师评语,服装设计毕业设计指导教师评语
- VS2013 TeeChart_v8 MFC C++ 使用手册干货(一)TeeChart ColorGrid类的简单使用
- bert中文使用总结
- 2021年茶艺师(初级)考试题及茶艺师(初级)最新解析
- Docker(五)进阶:Docker卷(volumes)
- CNN经典分类网络发展历程GoogLeNet、SqueezeNet、ResNet、ResNeXt、DenseNet
- 云端笔记本还是本地笔记本用什么?哪个好用?