概述
Linux系统上一切皆文件,那么随着时间的推移和管理的服务器增加,在众多的文件中,如何找到我们需要的文件,这就需要用到文件查找命令了。本章就分享下关于文件查找命令的一些内容和压缩解压缩的相关内容。
具体分为一下几个部分:
1、文件查找命令
2、压缩解压缩
3、find实际效果演示
第一章 文件查找命令
1、文家查找locate命令
locate命令:
查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db依赖于事先构建的索引;
索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updatedb);
索引构建过程需要遍历整个根文件系统,极消耗资源;
工作特点:
查找速度快;
模糊查找;
非实时查找
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
更新locate数据库:updatedb (生产环境不能随便执行,特别消耗资源)
locate语法:(搜索关键字支持标准正则表达式)
语法:locate [OPTION] KEYWORD
选项
-i 执行区分大小写的搜索
-n X 只列举前X个匹配项目
例如:
locate foo
搜索名称或路径中带有“ foo”的文件
locate -r ‘\.foo$’
使用Regex来搜索以“ .foo”结尾的文件
2、文件查找命令find
find命令:实时查找工具,通过遍历指定路径完成文件查找;(支持文件名通配符)
工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录
语法格式:
find [OPTION]… [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录,要注意用户要对目录具有rx权限,默认是递归去搜索
排除目录find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print
用 -path ‘/PATH’ -a -prune -o 然后接上一个搜索条件,去排除搜索的目录,表示搜索的时候不搜索该目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
查找条件:
根据文件名和inode查找:
-name "文件名称":支持使用glob
*, ?, [], [^]
-iname "文件名称":不区分字母大小写
-inum 数字 按inode号查找
-samefile FILENAME 相同inode号的文件
-links 数字 链接数为n的文件
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找:
-type TYPE:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
根据文件大小来查找:
-size [+|-]#UNIT 常用单位: k, M, G
#UNIT: (#-1, #],如: 6k
-#UNIT: [0,#-1], 如: -6k
+#UNIT: (#,∞), 如: +6k
根据时间戳:以“天”为单位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系0表示不关注
例如:
find -perm 755 会匹配权限模式恰好是755的文件
只要当任意人有写权限时, find -perm +222就会匹配
只有当每个人都有写权限时, find -perm -222才会匹配
只有当其它人( other)有写权限时, find -perm -002才会匹配
组合条件:
与: -a 不指定默认就是-a的关系
或: -o
非: -not, !
德·摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
条件加括号时,括号要转义 \( \)
搜索时排除目录
find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print
用 -path ‘/PATH’ -a -prune -o 然后接上一个搜索条件,去排除搜索的目录,表示搜索的时候不搜索该目录
处理动作:
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ ls -l”命令
-delete:删除查找到的文件;
-fls /PATH/TO/FILE:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题
find | xargs COMMAND
第二章 压缩与解压缩
1、压缩解压缩:
<1>gzip、gunzip、zcat
gzip(默认压缩、解压时会删除源文件)
语法:gzip [OPTION]… FILE…
选项:
-d 解压缩,相当于gunzip
-# 压缩时,指定压缩比,默认为6 ,最大9,数字越大压缩比越大
-c 压缩时可以将压缩过后的内容输出到标准输出。可以利用重定向输出到指定文件,实现压缩时保留原文件:
gzip -c /test/11.xx > /nwc/11.gz
zcat可以在不解压的情况下查看.gz压缩的文件
<2>bzip2、bunzip2、bzcat
bzip2(默认压缩、解压缩时会删除源文件)
语法:bzip [OPTION]… FILE…
选项:
-d 解压缩,相当于bunzip2
-# 压缩时,指定压缩比,默认为6 ,最大9,数字越大压缩比越大
-k 保留源文件,使用时无需输出重定向即可保留源文件
bzcat 可以在不接呀的情况下直接查看.bz2的压缩文件的内容
<3>xz、unxz、xzcat
另外一组算法lzma、unlzma、lzcat
语法:xz [OPTION]… FILE…
选项:
-d 解压缩,相当于unxz
-# 指定压缩比,默认6,最大9,数字越大压缩比越大
-k 保留源文件,使用时无需输出重定向即可保留源文件
xzcat 可以不解压的情况下,直接查看.xz压缩文件的内容
注意:以上三款压缩工具,都只能压缩文件,无法压缩目录,要压缩目录,就需要用到tar了
2、归档:tar、cpio,默认不会删除源文件
<1>tar
语法:tar [OPTION]… FILE…
选项:(选项中-可以省略)
-c 创建归档,一般与-f一起用,f必须要在选项最后一位,跟上归档后的文件名
例如:tar -cf /tmp/myetc.tar /etc/
表示对/etc/目录做归档,归档后的文件是/tmp/myetc.tar
-x 展开归档,与f选项一起用,f必须要在最后一位,指明需要展开的文件,这时,展开的文件放在当前目录下,如果要指定展开后文件的存放位置,要用-C选项
例如:tar -xf /tmp/myetc.tar 表示展开这个文件到当前目录
tar -xf /tmp/myetc.tar -C /nwc/myetc/展开这个文件到/nwc/myetc/目录
-t 不展开归档的情况下,查看归档文件的文件列表,与-f一起使用,指明要查看的归档文件
例如:tar -tf /tmp/myetc.tar
-f /PATH/TO/SOMEFILE.tar 指定归档后的文件名,展开时被展开的文件名
-C /PATH/TO/SOMEWHERE 展开时,指明展开后文件存放的路径
3、归档并压缩:tar
-z 调用gzip工具压缩
-j 调用bzip2工具压缩
例如:(gzip工具,-z选项)
tar -zcf /tmp/myetc.tar.gz /etc/
表示将/etc/目录利用gzip压缩,归档至/tmp/目录下,叫做myetc.tar.gz文件
tar -zxf /tmp/myetc.tar.gz 解压并展开该文件到当前目录,可用-C指定展开后文件存放的目录(展开时可以不用指明-z,系统会自动识别压缩方式,自动进行解压缩)
tar -xf /tmp/myetc.tar.gz -C /nwc/
例如:(bzip2工具,-j选项)
tar -jcf /tmp/myetc.tar.bz2 /etc/
表示将/etc/目录利用bzip压缩,归档至/tmp/目录下,叫做myetc.tar.bz2文件
tar -jxf /tmp/myetc.tar.bz2 解压并展开该文件到当前目录,可用-C指定展开后文件存放的目录(展开时可以不用指明-j,系统会自动识别压缩方式,自动进行解压缩)
tar -xf /tmp/myetc.tar.bz2 -C /nwc/
例如:(xz工具,-J选项)
tar -Jcf /tmp/myetc.tar.xz /etc/
表示将/etc/目录利用xz压缩,归档至/tmp/目录下,叫做myetc.tar.xz文件
tar -Jxf /tmp/myetc.tar.xz 解压并展开该文件到当前目录,可用-C指定展开后文件存放的目录(展开时可以不用指明-J,系统会自动识别压缩方式,自动进行解压缩)
tar -xf /tmp/myetc.tar.xz -C /nwc/
4、zip/unzip:(能压缩并归档文件和目录,windows、linux、unix都支持)
例如:
zip /tmp/myetc.zip /etc/ 表示对/etc目录归档压缩,压缩后的名字是/tmp目录下的myetc.zip
unzip /tmp/myetc.zip 解压该文件
5、cpio复制 从或到文件
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“ .cpio”或者“ .tar”结尾的文件。
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
实例
将etc目录备份:
find ./etc -print |cpio -ov >etc.cpio
内容预览
cpio –tv < etc.cpio
要解包文件
cpio –iv <etc.cpio
cpio –idv < etc.cpio
第三章 find实际效果演示
1、查找/var目录下属主为root,且属组为mail的所有文件
# find /var -type f -a -user root -a -group mail -ls
2、查找/var目录下不属于root、lp、gdm的所有文件
# find /var -type f -a -not -user root -a -not -user lp -a -not -user gdm -ls
# find /var -type f -a -not \( -user root -o -user lp -o -user gdm \) -ls
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
# find /var -type f -a -mtime -7 -a -not -user root -a -not -user postfix -ls
# find /var -type f -a -mtime -7 -a -not \( -user root -o -user postfix \) -ls
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
# find / \( -nouser -o -nogroup \) -a -atime -7 -ls
5、查找/etc目录下大于1M且类型为普通文件的所有文件
# find /etc -size +1M -a -type f -ls
6、查找/etc目录下所有用户都没有写权限的文件
# find /etc -not -perm /222 -ls 可理解为任何一类用户有写权限都不行
7、查找/etc目录下至少有一类用户没有执行权限的文件
# find /testdir/ -not -perm -111 -ls (可理解为可以有多个用户没有执行权限,但不能所有都有执行权限)
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
# find /testdir -perm -113 -ls
原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/36053
评论列表(1条)
文章对当天所学的知识点,有了一个完整的梳理与总结,对于文件查找而言,find命令至关重要了,这是我们笔试中必考的知识点,需要我们多加练习,熟练掌握。