开发者学堂课程【Linux文件管理命令:文件查找和压缩】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/591/detail/8348
文件查找和压缩
内容介绍
一、使用 locate 命令
二、使用 find 命令
三、压缩和解压缩工具
一、使用 locate 命令
1.文件查找
在文件系统上查找符合条件的文件
文件查找:locate,find
非实时查找(数据库查找):locate
实时查找:find
[root@centos7 profile.d] #cd
[root@centos7 ~] #type locate
locate is /usr/bin/locate
[root@centos7 ~] #locate --help
Usage:locate [OPTION]... [PATTERN]..
Search for entries in a mlocate database.
[root@centos7~] #locate test.sh
/data/bin/test.sh
/usr/sbin/alsabat-test.sh
/usr/share/doc/gdisk-0. 8. 6/gdisk_test.sh
/usr/share/firewal1d/tests/firewal1-cmd_test.sh
//usr/share/firewalld/tests/firewa11-offline-cmd_test.sh
利用 locate 搜文件,速度很快,原因是因为依赖 locate 数据库,把之前的文件建立在数据库中,基于数据库搜索。
这个文件并不能像平时的文件一样增加和删除,不会立即更新与找到[root@centos7~] #locate aaa
/usr/share/man/man3/ldns_rdf2buffer_str_aaaa.3.gz
/var/cache/fontconfig/614d1caaa4d7914789410f6367de37ca-1e64.cache-4
/var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-1e64.cache-4
[root@centos7~] #updatedb
[root@centos7~] #11 /var/1ib/mlocate/mlocate.db
-rw-r-----1 root slocate 3389075 oct 10 17: 32/var/lib/mlocate/mlocate.db[root@centos7~] #date
Wed oct 10 17: 32: 48 CST 2018
[root@centos7~]#locate aaa
/root/aaa
/usr/share/man/man3/1dns_rdf2buffer_str_aaaa. 3.gz
/var/cache/fontconfig/614d1caaa4d7914789410f6367de37ca-1e64.cache-4
/var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-1e64.cache-4
2.locate 命令
locate KEYWORD
有用的选项
-1不区分大小写的搜索
>-n N 只列举前 N 个匹配项目
-r 使用正则表达式
示例
搜索名称或路径中带有“conf”的文件
locate conf
使用 Regex 来搜索以“.conf”结尾的文件
locate -r \.conf$'
二、使用 find 命令
实时查找工具,通过遍历指定路径完成文件查找
1.工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录
2. 语法:
find[OPTION]. . . [査找路径][查找条件][处理动作]
直找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行,默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
3.查找条件
指搜索层级 -maxdepth level 最大搜索目录深度,指定目录为第1级 -mindepth level 最小搜索目录深度。
先处理目录内的文件,再处理目录
-depth
(1)根据文件名和 inode 查找:
-name"文件名称”:支持使用glob
*, ? , 0. [^]
-iname"文件名称”:不区分字母大小写
-inum n 按 inode 号查找
-samefile name 相同 inode 号的文件
-links n 链接数为 n 的文件-regex “PATTERN”:以 PATTERN 匹配整个文件路径,而非文件名称
[root@centos7 ~] #find --maxdepth 1/data
find:unknown predicate"--maxdepth
[root@centos7~] #find -maxdepth 1 /data
find:paths must precede expression: /data
Usage: find [-H] -L] [-P] [-olevel] [-D_help|tree|search|stat|rates|opt|exec] [path....
[root@centos7~] #find
/data -maxdepth 1
/data
/data/bin
/data/f1.sh
(2)根据属主、属组查找:
-user USERNAME: 查找属主为指定用户(UID) 的文件
-group GRPNAME: 查找属组为指定组(GID) 的文件
-uid UserlD: 查找属主为指定的 UID 号的文件
-gid GrouplD 查找属组为指定的 GID 号的文件
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
(3)根据文件类型查找:
Itype TYPE:
·f:普通文件
·d:目录文件
·1:符号链接文件
·S:套接字文件
·b:块设备文件
·C:字符设备文件
·p:管道文件
(4)空文件或目录
-empty
find/app-type d -empty
组合条件:
与:-a
或:-0
非:-not,!
德·摩根定律:
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)
示例:
!A-a! B=! (A-o B)
!A-o! B=! (A-a B)
find 示例:
find-name snow.png
find-iname snow.png
find/-name "*.txt"
find/var-name "*log*"
find -user joe -group joe
find-user joe -not-group joe
find -user joe -o -user jane
find -not \ ( -user joe -o -user jane \)
find/-user joe -o -uid 500
找出/tmp 目录下,属主不是 root, 且文件名不以f开头的文件 find/tmp\ (-not-user root-a-not -name 'f: V-Isfind/tmp-not\ (-user root-o -name 'f*'U -ls)
排除目录
示例:
查找/etc/下,除 /etc/sane.d 目录的其它所有。conf 后缀的文件 find/etc-path '/etc/sane.d'-a-prune-o-name "*.conf"
查找/etc/下,除/etc/sane.d 和 /etc/fonts 两个目录的所有。conf 后缀的文件
find/etc\(-path"/etc/sane.d"-o-path"/etc/fonts"V-a-prune-o-name"*.conf"
(5)根据文件大小来查找:
-size [+|-] #UNIT
常用单位:k,M,G,c(byte)
#UNIT: (#-1,#]
如:6k表示(5k,6k]
-#UNIT: [0,#-1]
如:-6k 表示[0, 5k]
+#UNIT: (#,O)
如:+6k 表示(6k,0O)
4.处理动作
-exec COMMAND{}\; 对查找到的每个文件执行由 COMMAND 指定的命令
{}用于引用查找到的文件名称自身
find 传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令的交体。