#文件查找和压缩
##一、在文件系统上查找符合条件的文件
###locate命令
查询系统上预建的文件索引数据库。
索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb),索引数据库路径/var/lib/mlovate/mlocate.db二进制文件,不要cat查看。工作特点:
- 查找速度快,因为寻找的数据是由已建立的数据库/var/lib/molvate/提供,不用去硬盘当
中存取数据
- 模糊查找
- 非实时查找
- 搜索文件的全路径,不仅仅是文件名
- 可能只搜索用户具备读取和执行权限的目录
格式: locate KEYWORD
选项:
-i 不区分大小写的搜索
-n N 只列举前n个匹配项目
-r 使用正则表达式
例:搜索名称或路径中带有conf的文件
locate –r `\.conf$`
###find命令
- 工作特点:
- 查找速度略慢
- 精确查找
- 实时查找
- 可能只搜索用户具备读取和执行权限的目录
- 格式: find [option]…[查找路径][查找条件][处理动作]
查找路径:指定具体路径;默认为当前路径
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找
出指定路径下的所有文件
按搜索层数查找:
-maxdepth level 最大搜索目录深度,指定目录为第1级
-mindepth level 最小搜索目录深度
例:搜索/data/目录的第二层目录。需要最大深度和最小深度一起用
[root@V9centos7 /data]#find /data -maxdepth 2 -mindepth 2
/data/txt1/txt2
根据文件名和iNode查找:
-name “file”: 精确匹配,可以使用通配符
-iname “file”: 忽略大小写
-inum n: 按inode号查找
-samefile “file”: 查找相同的文件(indoe相同)
-links n: 链接数为n的文件
-regex“PATTERN”: 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
例1:查看.sh的文件
[root@V9centos7 ~]#find -name "*.sh"
./bin/newhello.sh
./bin/useradd.sh
./bin/systeminformation.sh
./bin/useradd2.sh
./bin/vreatescript.sh
./taxt.sh
例2:查看链接数为5的文件
[root@V9centos7 ~]#find -links 5
./.cache/gnome-software/3.22
例3:利用正则表达式查.sh后缀的文件
[root@V9centos7 ~]#find -regex ".*\.sh$"
./bin/newhello.sh
./bin/useradd.sh
./bin/systeminformation.sh
./bin/useradd2.sh
./bin/vreatescript.sh
./taxt.sh
根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME:查找属组为指定用户(GID)的文件
-uid UserID: 查找属主为指定的UID号的文件
-gid GroupID: 查找属组为指定的GID号的文件
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
例1:查找文件所有者和所属组都是v9的文件
find -user v9 -group v9
例2:查看没有属主和/或属组的文件
find -nouser -nogroup
find -nouser -o -nogroup
根据文件类型查找:
-type TUPE
f :普通文件
d :目录文件
l :符号链接文件
s :套接文件
b :块设备文件
c :字符设备文件
p :管道文件
-empty : 空文件或目录
例:查看当前目录为空的.changed文件
find -empty -type f -name "*.changed"
组合条件
与:-a
或:-o
非:-not,!
德•模梗定律
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)
!A -a !B=!(A -O B)
!A -O !B=!(A -a B)
例:找到 /data文件夹中非a开头和非f开头的文件,并显示
find /data ! \(-name "*f" -o -name *a") -ls
匹配与排除目录
-path 匹配文件路径或者文件
-prune 将某目录排除
例:查找/etc下,除/etc/sane.d目录其他所有.conf后缀的文件
find /etc/ -path "/etc/sane.d" -a -prune -o -name '*.conf'
根据文件大小来查找
-size [+|-]#UNIT 常用单位:k,M,G,c(byte)
#UNIT:(#-1,# ] 如:6k表示(5k,6k ]
-#UNIT:[0,#-1] 如:-6k表示[0,5k]
+#UNIT:(#,∞) 如:+6k表示(6k, ∞)
例1:查找/data下8M的文件,查找结果为,7M<结果≤8M
find /data -size 8M
例2:find /data -size 1024,其搜索结果为,1023<结果≤1024
根据时间戳 :
以“天”为单位
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
#:[#,#+1)
代表#-#+1的那一天
+#:[#+1, ∞]
代表大于等于#+1天前的文档
-#:[0,#)
代表小于等于#天内的文档
以“分钟”为单位
-amin
-mmin
-cmin
根据权限查找
-perm [/|-] MODE
MODE:精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,从
centos6使用+MODE
-MODE:每一类对象都必须同时拥有指定权限,与关系,不能少于指定权限值,
多可以,与精确匹配不同
例1:find -perm 755会匹配权限模式恰好是755的文件
例2:find -perm -222会匹配最低为所有人有写权限的所有文件
例3:find -perm /222会匹配u或g或o有写权限的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \;:对查找到的每个文件执行有COMMAND指定的命令,对于每个文件
执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \;:对查找到的每个文件执行有COMMAND指定的命令
{}:用于引用查找到的文件名自身
例1:将文件夹中others的写权限去掉,{}表示find查找到的结果,\;表示结束语
find -perm -002 -exec chmod o-w {} \;
例2:将/data文件夹中所有a开头的文件,加上.txt后缀
find /data -name "a*" -exec mv {} {}.txt \;
###参数替换xargs
由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs命令
用法:xargs用于产生某个命令的参数,xargs可以读入标准输入(stdin)的数据,并且以空格或回车符将stdin的数据分隔成为参数(arguments)
例1:ls命令不能接受标准输入,用xargs命令将标准输出传给ls作为参数。
find /data -perm /700 |xargs ls -l
例2:使用xargs,突破参数太长的限制,执行命令。创建N多个文件,并删除。
echo {1..1000}|xargs touch
echo {1..1000}|xargs rm
###Gnome 搜索工具
图形化搜索工具,位置→搜索文件......
•命令
•内容
•用户/组群
•大小
•修改时间
##二. 压缩、解压缩及归档工具
压缩原理,将出现频率高的字符串,用单个字母代替(jpg不适合压缩),压缩算法在不断优化,可能不同。
1、file-roller 图形界面的压缩工具
2、compress/cuncompress: 后缀.Z
目前已经淘汰,遇到.Z的压缩文件可以通过命令znew
将该文件转出gzip的格式。
外部命令: compress [-dfvcVr][-b maxbits] [file...]
参数: -d 压缩文件 解压后,解压缩后原有文件就删除了
-c file 压缩过程不生成压缩包,需要重定向到压缩文件
-v 显示详情
解压命令: uncompress file 重定向可以保留旧的内容
命令: zcat 把文件解出来在屏幕打印 重定向得到文件
3、gzip/gunzip 后缀.gz
对目录压缩,是指将所有文件分别进行压缩
格式: gzip option... file...如果没有文件则将标准输入压缩传给标准输出
选项: -d:解压缩,相当于gunzip
-c:将压缩或解压缩的结果输出到标准输出,可通过重定向处理
-#:1-9,指定压缩比,值越大压缩比越大,-1最快,压缩比最差,默认-6
解压命令: zcat 解压并打印到屏幕,重定向得到文件
gunzip 解压完原始文件就不在了
gzip -d
例3.1:将/etc/下文件services,复制到实验目录/data下,用gzip压缩。默认状态下原本的文件会被
压缩成.gz的文件名,源文件就不在了,可通过重定向保留原文件
[root@V9centos7 /data]#gzip -c services > servixes.gz
原文件:-rw-r--r--. 1 root root 136088 Aug 8 16:33 services.gz
压缩后:-rw-r--r--. 1 root root 136088 Aug 8 16:33 services.gz
4、bzip2/bunzip2: 后缀.bz2
格式:bz2 option... file...
选项: -k:keep,保留原始文件
-c:将压缩或解压缩的结果输出到标准输出,可通过重定向处理
-d:解压缩
-#:1-9,压缩比,默认为9
解压命令:bzcat 可以重定向得到解压文件
bunzip2
bz2 -d
例4.1:将例3.1中的文件services文件使用bzip2压缩,与gzip相比压缩比更高
[root@V9centos7 /data]#bzip2 -cv services>services.bz2
压缩后-rw-r--r--. 1 root root 123932 Aug 8 16:58 services.bz2
5、xz/unxz: 后缀.xz
较新,兼容性可能不好,压缩比高,运算时间长
格式:xz option... file...
选项:
-l:列出压缩文件的相关信息
-k:keep,保留原文件
-c:将压缩或解压缩的结果输出到标准输出,可通过重定向处理
-d:解压缩
-#:1-9,压缩比
解压:xzcat 可以重定向得到解压文件
unxz
xz -d
例5.1:将例3.1中的文件services文件使用xz压缩,比bzip2压缩比更高
[root@V9centos7 /data]#xz -kv services
压缩后-rw-r--r--. 1 root root 99608 Aug 8 16:33 services.xz
6. zip/unzip
可以打包整个目录,打包时将文件改为相对路径,解压时会解压在生成压缩目录,
防止误操作覆盖原文件,压缩比一般。
打包压缩 zip –r /testdir/sysconfig etc/sysconfig/
生成的文件(可换) 目标目录
解包解压缩 unzip sysconfig.zip
cat /var/log/messages|zip messages –
'-'代表管道前的输出结果
unzip -p message>message 不加-p解压得到原文件名,-p打印出来重定向,可以换文件名
7、tar(Tape Archive,磁带归档的缩写)
使用tar压缩后,同样每个文件名都没了根目录,主要是为了安全,使用tar备份/root/etc下的数据可能会需要压缩回来使用,在tar所记录的文件名就是解压缩后的实际档名,拿掉了根目录,假设将备份的数据在/tmp解开,那么解压缩的档名就会变成/tmp/etc/xxx,但如果没有拿掉目录,解压缩后档名就是绝对路径,数据会覆盖到到/etc/xxx去,原本的/etc/下的数据就会丢失。
格式tar[option]…
五个独立的选项,可以和别的命令连用,但一次只能用其中一个
-c:建立一个压缩文件
-x:解开一个压缩文件
-t:查看压缩文件里面的文件
-r:向压缩文件末尾追加文件
-u:更新压缩包中的文件
7.1 创建归档
tar -cpvf /PATH/TO/SOMEFILE.tar FILE...
c:创建打包文件,可搭配-v查看过程中被打包的档名
v:将压缩/解压过程正在处理的文件名显示处理
f:f后面要立刻接要被处理的档名,不可以再加参数,建议独立写
p:保留备份数据的原本权限与属性
p:(大写p)可以保留绝对目录压缩
7.2 追加文件至归档:不支持对压缩文件追加
tar -r –f /PATH/TO/SOMEFILE.tar FILE...
7.3 查看归档文件中的文件列表
tar -t –f /PATH/TO/SOMEFILE.tar FILE...
例:仅解压单一文件
第一步 过滤出来想要找的文件 tar -ztv -f etc.tar.gz |grep "shadow"
第二步 根据档名解压 tar -zxv -f /data/etc.tar.gz etc/shadow
7.4 解压归档
tar -x -r /PATH/TO/SOMEFILE.tar
tar -x -r /PATH/TO/SOMEFILE.tar -C /PATH/
选项 -x:解开压缩文件的参数指令
-C:大写C,解压到特定目录
| 压缩文件 | 解压命令 |
|---|---|
| *.tar | tar -xvf |
| *.gz | gzip -d或gunzip |
| *.tar.gz | tar -xzf |
| *.bz2 | bzip2 -d或bunzip2 |
| *.tar.bz3 | tar -xj |
| *.Z | uncompress |
| *.tar.xz | tar -xJF |
7.5 结合压缩工具实现:归档并压缩
-j:bzip2 , -z: gzip , -J:xz
例:备份/etc目录到/data目录下,使用tar命令,gzip压缩
tar -zpcv -f /data/etc.tar.gz /etc
PS:文件命名时,为了方便记忆,档名这里如果不加-z,-j,-J的话,取*.tar,j选项,取名为*.tar.bz2,选项z取名为*.tar.gz,选项J取名为*.tar.xz。
7.6 -exclude排除文件
tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2/app
tar zvcf mybackup.tgz -T /root/includefilelist X/root/excludefilelist
选项:--exclude= 排除选项后的文件
-T 选项指定输入需要打包的文件列表
-X 选项指定包含要排除的文件列表
PS:当需要排除或增加很多文件时,可以将需要打包的文件路径写入一个路径文件,利用-T和-X读取路径文件,一起操作
例:打包/etc/sysconfig/,除去n开头的文件
第一步:将n开头的文件重定向至ls /etc/sysconfig/n* -d > exclude.txt
第二步:将要打包的文件路径写入另一个读取目录list.txt
tar zcvf sysconfig.tgz -T /data/line.txt -X /data/exclude.txt
生成的打包文件 打包的读取目录 排除的文件目录
8、cpio
功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件
格式:cpio[选项]>文件名或者设备名
cpio[选项]<文件名或者设备名
选项:
-o :将文件拷贝打包成文件或者将文件输出到设备上,需要重定向生成文件
-O :输出到指定的归档文件名
-A :向以存在的归档文件中追加文件
-i :解包,将打包文件解压或将设备上的备份还原到系统,标准输入的内容
-l :对指定的归档文件名解压
-t :预览,查看文件内容或者输出到设备上的文件内容
-F :使用指定的文件名代替标准输入或输出
-v :显示打包过程中的文件名称
-d :解包生成目录,在cpio还原时,自动的创立目录
-c :一种较新的存储方式
##三、分割文件
splist :分割一个文件为多个文件
格式:split -b Size -d tar-file-name prefix-name
被分割文件 生成文件名
-d 加上分割出来的文件名为01、02...
不加分割出来的文件名为a、b、c...
例:split -b 1M -d mybackup.tgz mybackup-parts
split -b 1M mybackup.tgz mybackup-parts
合并:cat mybackup-parts* >mybackup.tar.gz
##四、本章练习
1、查找/var目录下属主为root,且属组为mail的所有文件
[root@V9centos7 ]#find /var -user root -a -group mail
/var/spool/mail
2、查找/var目录下不属于root、postfix、gdm的所有文件
[root@V9centos7]#find /var ! ( -user root -o -user gdm -o -user postfix ) -ls
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
find /var -mtime -7 ! ( -user root -o -user postfix ) -ls
4、查找当前系统没有属主或属组,且最近一周内曾被访问过的文件
find / -nouser -o -nogroup -a -atime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc -type f -size +1M
6、查找/etc目录下所有用户都没有写权限的文件
find /etc ! -perm /222 -ls
7、查找/etc目录下至少有一类用户没有执行权限的文件
find ! -perm -111 -ls
8、查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的文件
find /etc/init.d -perm -113
本文详细介绍了在Linux系统中查找文件的各种方法,包括locate命令的快速模糊查找,find命令的精确实时查找,以及参数替换工具xargs的使用。此外,还探讨了常见的压缩和归档工具,如gzip、bzip2、xz、zip、tar等的使用方法和特点,以及如何结合tar与其他压缩工具进行文件的归档和压缩。文章最后提到了文件分割以及一些查找文件的实践练习。
2785

被折叠的 条评论
为什么被折叠?



