Linux_6_文件查找与打包压缩

这篇具有很好参考价值的文章主要介绍了Linux_6_文件查找与打包压缩。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件查找与打包压缩

1文件查找

在文件系统上查找符合条件的文件
文件查找: locate, find
非实时查找(数据库查找): locate
实时查找: find

1.1 locate

locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库
索引构建过程需要遍历整个根文件系统,很消耗资源

工作特点:

  • ​ 查找速度快
  • ​ 模糊查找
  • ​ 非实时查找
  • ​ 搜索的是文件的全路径,不仅仅是文件名
  • ​ 可能只搜索用户具备读取和执行权限的目录

格式:


locate [OPTION]...[PATTERN].

常用选项

-i	不区分大小写的搜索
-n N 只列举前N个匹配项目
-r	使用基本正则表达式

例:

locate -n 3 -r '\.sh$'	使用正则表达式找到前三个以.sh结尾的文件
/boot/grub2/i386-pc/modinfo.sh
/data/scripts/BMI_cal.sh
/data/scripts/CHOOK_RABBIT.sh

1.2 find

find 是实时查找工具,通过遍历指定路径完成文件查找

工作特点:

  • ​ 查找速度略慢
  • ​ 精确查找
  • ​ 实时查找
  • ​ 查找条件丰富
  • ​ 可能只搜索用户具备读取和执行权限的目录

条式:

find [OPTION]... [查找路径] [查找条件] [处理动作]
  • 查找路径: 指定具体目标路径,默认为当前目录

  • 查找条件: 指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

  • 处理动作: 对符合条件的文件做操作,默认输出至屏幕

1.2.1 指定搜索目录层级

-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
-mindepth level 最小搜索目录深度

例:

find /data -maxdepth 2	查找/data下的1级和2级目录(data本身不算1级)
/data
/data/.passwd.swp
/data/.passwd.swo
/data/.passwd.swn

1.2.2对每个目录先处理目录内的文件,再处理目录本身

-depth-d

例:

find /data
/data	目录
/data/.passwd.swp	文件
/data/.passwd.swo	文件
/data/.passwd.swn	文件

find /data -depth
/data/.passwd.swp	文件	
/data/.passwd.swo	文件
/data/scripts/BMI_cal.sh	目录
/data/scripts/work_menu.sh	目录
/data/scripts/show_sys_info.sh

1.2.3根据文件名和inode查找

-name			文件名称	支持使用glob,如 * ? [] [^]通配符,要加""
-iname		文件名称	不区分字母大小写
-inum n		按inode号查找
-samefile name	相同inode号的文件
-links n 	链接数为n的文件
-regex"ATTERN"	以PATTERN匹配整个文件路径,而非文件名称

例:

find /etc -name "*passwd*"	通配符,要加""
/etc/pam.d/passwd
/etc/security/opasswd
/etc/passwd-

#find / -inum 333 -ls	显示节点编号为333的文件与目录,-ls显示详细属性
      333      0 dr-xr-xr-x   9  root     root            0 Jul 25 15:11 /proc/98
      333      0 drwxr-xr-x   2  root     root            0 Jul 27 22:14 /sys/devices/system/memory/memory15/power

1.2.4 根据属主、属组查找

-user USERNAME	查找属主为指定用户(UID)的文件
-group GRPNAME	查找属组为指定组GID)的文件
-uid UserlD		查找属主为指定的UID号的文件
-gid GrouplD	查找属组为指定的GID号的文件
-nouser		查找没有属主的文件
-nogroup	查找没有属组的文件

1.2.5根据文件类型查找

-type TYPE

TYPE可以是以下形式

f: 普通文件
d: 目录文件
l: 符号链接文件
s: 套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件

例:

find /data -type d -ls
      128      0 drwxr-xr-x   3  root     root          225 Jul 26 12:37 /data
      138      0 drwxr-xr-x   2  root     root          212 Jul 27 17:07 /data/scripts

1.2.6空文件或目录

-empty

例:

find /etc -empty -ls

1.2.7组合条件

-a-o-not !

例:

#find /etc/ -type d -o -type l |wc -l
665
#find /etc/ -type d -o -type l -ls|wc -l	#此时相当于-type l 与-ls中间加了个-a,而-a优先级高于-o,只显示这两个之间的文件
260
#find /etc/ \( -type d -o -type l \) -ls|wc -l	可以加上\(\)解决
665

德·摩根定律

  • ​ (非A) 或 (非B) = 非(A且B)
  • ​ (非A) 且 (非B) = 非(A或B)

示例:

!A -a !B = !(A -o B)
!A -o !B = !(A -a B)

例:

#find ! -user joyce -a ! -user root
./mysql/mysql-community-client-8.0.32-1.el8.x86_64.rpm
./mysql/mysql-community-client-debuginfo-8.0.32-1.el8.x86_64.rpm
./mysql/mysql-community-client-plugins-8.0.32-1.el8.x86_64.rpm
等价于:
#find ! \( -user joyce -o -user root \)
./mysql/mysql-community-client-8.0.32-1.el8.x86_64.rpm
./mysql/mysql-community-client-debuginfo-8.0.32-1.el8.x86_64.rpm
./mysql/mysql-community-client-plugins-8.0.32-1.el8.x86_64.rpm

#find / \( -not -user root -a -not -name 'f*' \) -ls	查找属主不是root且名不是f开头的文件
#find / -not \( -user root -o  -name 'f*' \) -ls	等价

1.2.8 排除日录

-path	dir	 -a  -prune

例: 查找/下所有名字以.conf结尾的文件,但不查找/usr和/etc目录

#find /  \( -path '/usr' -o -path '/etc' \) -a -prune -o  -name "*.conf"
/boot/loader/entries/34f09f8df29847998143d560b2af24fb-4.18.0-348.el8.x86_64.conf
/boot/loader/entries/34f09f8df29847998143d560b2af24fb-0-rescue.conf
/run/NetworkManager/resolv.conf

1.2.9根据文件大小来查找

-size [+|-] #UNIT
	常用单位: k,M,G,c (byte) ,注意大小写敏感
#UNIT  (#-1,#]
	如	6k 表示(5k,6k]
-#UNIT [0,#-1]-6k 表示[0,5k]
+#UNIT (#,8)
	如	+6k 表示(6k,∞)

例:

#find / -size 10M 查找9M-10M的文件
/var/cache/dnf/epel-updateinfo.solvx
/usr/lib/firmware/qcom/sdm845/adsp.mbn
/usr/lib/modules/4.18.0-348.el8.x86_64/vmlinuz
/usr/share/fonts/google-noto-emoji/NotoColorEmoji.ttf

1.2.10根据时间戳

以“天”为单位

-atime[+|-]#	读时间
	#	[#,#+1)
	+#	[#+1,∞]
	-#	[O,#)
-mtime			修改时间
-ctime			属性修改时间

以“分钟”为单位

-amin
-mmin
-cmin

1.2.11 根据权限查找

-perm [/或-]MODE

MODE	精确权限匹配,必须是MODE才行
/MODE	任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从CentOs 7开始淘汰
-MODE	每一类对象都必须同时拥有指定权限,与关系
0 表示不关注

说明:

  • ​ find -perm 755 会匹配权限模式恰好是755的文件
  • ​ 只要当任意人有写权限时,find -perm /222就会匹配
  • ​ 只有当每个人都有写权限时,find -perm -222才会匹配
  • ​ 只有当其它人 (other) 有写权限时,find -perm -002才会匹配

例:

#find /data/ -perm -444 -ls| head -5	权限三个都得有读权限
      128      0 drwxr-xr-x   3  root     root          225 Jul 26 12:37 /data/
      132     12 -rw-r--r--   1  root     root        12288 Jul  7 20:41 /data/.passwd.swp
      136      4 -rw-r--r--   1  root     root         2640 Jul  8 16:58 /data/passwd
#find /data/ -perm /444 -ls| head -5	权限任意一个有4即可
      128      0 drwxr-xr-x   3  root     root          225 Jul 26 12:37 /data/
      132     12 -rw-r--r--   1  root     root        12288 Jul  7 20:41 /data/.passwd.swp
      135      4 --w-r--r--   1  root     root           51 Jul  8 10:46 /data/issue.bak
#find /data/ -perm /044 -ls| head -5	权限后两个任意一个有4即可
      128      0 drwxr-xr-x   3  root     root          225 Jul 26 12:37 /data/
      132     12 -rw-r--r--   1  root     root        12288 Jul  7 20:41 /data/.passwd.swp
      135      4 --w-r--r--   1  root     root           51 Jul  8 10:46 /data/issue.bak

[root@CentOS8 ~]#find /data/ -perm -002	查找other里带有写权限的,和下面等价
[root@CentOS8 ~]#find /data/ -perm /002

1.2.12 处理动作

-print	默认的处理动作,显示至屏幕,不加也默认执行了这个隐藏动作
-ls		类似于对查找到的文件执行“s -I"命令
-fls file		查找到的所有文件的长格式信息保存至指定文件中,相当于ls > file
-delete	删除查找到的文件,并不交互,慎用
-ok CMD {}\;	对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交与式要求用户确认
-exec CMD {}\;	对查找到的每个文件执行由COMMAND指定的命令
{}		用于引用查找到的文件名称自身

例:

#ls
f1.txt  f2.txt  f3.txt  issue.bak  
#find /data/ -name 'f*' -ok  rm {} \;	find查找/data/下以f开头的文件并删除,{}代表前面find找到的文件,-ok开始标志\;表示结束标志
< rm ... /data/f1.txt > ? y
< rm ... /data/f2.txt > ? y		使用-exec不适应-ok,则不交互直接执行 
< rm ... /data/f3.txt > ?
#ls
f3.txt  issue.bak

1.3参数换xargs

xargs CMD 参数

例:

#find -name '*.txt'|xargs ls -Sl	将当前目录下找到的*.txt文件传递给ls作为参数以排序。(注意:ls不支持标准输入,无法使用管道传输 )
-rw-r--r--  1 root root 15 Jul 28 00:19 ./f1.txt
-rw-r--r--  1 root root 15 Jul 26 12:37 ./nianling.txt
-rw-r--r--. 1 root root 12 Jul 23 20:34 ./f3.txt
-rw-r--r--  1 root root  0 Jul 28 00:19 ./f2.txt

#echo {1..10}
1 2 3 4 5 6 7 8 9 10
#echo {1..10}|xargs -n1
1
2
3
4
5
6
7
8
9
10
#echo {1..10}|xargs -n4
1 2 3 4
5 6 7 8
9 10


#seq 10
1
2
3
4
5
6
7
8
9
10
#seq 10|xargs
1 2 3 4 5 6 7 8 9 10

#echo user{1..5}|xargs -n1 useradd	批量创建账号,注意使用-n1将参数分成一行一行,因为useradd一次只能接受一个参数
#echo user{1..5}|xargs -n1 userdel -r	批量删除账号

当文件名为"a b" 或 "c d"时,xargs默认以空格 作为文件名分隔符,此时会出现找不到文件a文件b文件c文件d的问题
#find -print0 | xargs -0 rm 使用0(nul)作为分隔符,这样rm时不会出现问题

2压缩和解压缩

2.1 compress和uncompress

这两个工具来源于ncompress包,需要事先yum

格式

compress options [file ...]
uncompress file.Z 			解压缩

常用选项

-d	解压缩,相当于uncompress
-c	结果输出至标准输出,不删除原文件
-v	显示详情

例:

#compress -c file.txt > f.txt.Z  压缩file.txt至f.txt.Z,但保留原文件
#compress -dc f.txt.Z > f2.txt   解压缩f.txt.Z到f2.txt

zcat file.z 不显式解压缩的前提下查看文本文件内容,也可以重定向到文件中,即解压缩

2.2 gzip和gunzip

格式:

gzip [OPTION]... FILE
gunzip	FILE

常用选项:

-k 	keep,保留原文件,C8上才有
-d	解压缩,相当于gunzip
-c	结果输出至标准输出,保留原文件不改变
-#	指定压缩比,#取值为1-9,值越大压缩比越大

例:

#cat f4 | gzip > f4.gz	支持管道

2.3 bzip2和bunzip2

来自于bzip2包

格式:

bzip2 [OPTION]... FILE...
bunzip2	FILE

常用选项

-k	keep,保留原文件
-d	解压缩
-c	结果输出至标准输出,保留原文件不改变
-#  压缩比,取值1-9,默认为9

也可以预览,不过使用bzcat file,而不是zcat

2.4 xz和unxz

来自于xz包

格式:

xz [OPTION]... FILE...
unxz	FILE

常用选项

-k	keep,保留原文件
-d	解压缩
-c	结果输出至标准输出,保留原文件不改变
-#  压缩比,取值1-9,默认为6

也可以预览,不过使用xzcat file,而不是zcat或bxzcat

2.5 zip和unzip

zip 可以实现打包目录和多个文件并压缩成一个文件,但可能会丢失文件属性信息,如所有者和组信息,一般建议使用 tar 代替

zip [OPTION]... FILE_back_up  FILE
unzip	默认解包结果输出到屏幕显示,可以使用-p重定向到文件

选项:

-r	对目录进行打包
-d	dir	将文件解包到dir下
-p	管道

默认打包会包括目录本身,如果只想打包其中的文件,需要先进入目录中再进行打包

例:

#cat /var/log/messages | zip message -	(-表示接收前面的标准输出)
  adding: - (deflated 86%)
#ls
message.zip

总结:

  • 压缩比:xz > bz2 > gz > zip > compress
  • zip可以压缩目录,其他都只能压缩文件,且单个文件压缩成单个文件

3打包和解包

3.1tar

tar 即 Tape ARchive磁带归档,可以对目录和多个文件打包成一个,且可以压缩,并且保留文件属性不丢失,常用于备份,推荐使用

格式

tar [OPTION]...	FILE_backup FILE
c	打包 
t	预览 
x	解包 ,不需要加zjJ,通用,但系统上必须事先有安装其他命令
v	显示详细信息,过程
f	后跟要处理的文件
p	保留权限,不加也可以保留
-C	解压到指定位置
z	压缩成gz格式,间接调用gz命令,系统上必须事先有安装
j	压缩成bz2格式,同理
J	压缩成xz格式,同理
--exclude=FILE	排除文件
-T FILE	指定要打包的文件	
-x FILE	指定要排除的文件

注意:tar无法备份ACL权限的文件

默认打包会包括目录本身,如果只想打包其中的文件,需要先进入目录中再进行打包

(1) 创建归档,保留权限
tar -cpvf /PATH/FILE.tar FILE...

(2) 追加文件至归档: 注: 不支持对压缩文件追加
tar -rf /PATH/FILE.tar FILE...

(3)查看归档文件中的文件列表
tar -t -f /PATH/FILE.tar

(4展开文档
tar xf /PATH/FILE.tar
tar xf /PATH/FILE.tar -C /PATH

(5) 结合压缩工具实现: 归档并压缩
z	压缩成gz格式,间接调用gz命令,系统上必须事先有安装
j	压缩成bz2格式,同理
J	压缩成xz格式,同理

例:

#tar c /var | tar x -C /data/	相当于cp,将/var目录复制到/data/下,但速度更快

3.2split

split命令可以分割一个文件为多个

-b	指定分割大小
-d	指定文件后缀为数字,00 01 ...

例:

#split -b 1K shopping-table.sql /data/shopping-table
#ll /data -h
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableaa
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableab
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableac
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tablead
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableae
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableaf
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableag
-rw-r--r--  1 root root 1.0K Jul 28 14:41 shopping-tableah
-rw-r--r--  1 root root 1002 Jul 28 14:41 shopping-tableai

#cat	/data/shopping-table00* > /data	合并为一个

3.3cpio

  • cpio 是历史悠久的打包和解包工具,不过目前也已较少使用

  • cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio"或者“.tar”结尾的文件

格式:

cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名

常用选项:

-o	output模式,打包,对内存的数据输出到文件中,将标准输入传入的文件名打包后发送到标准输出
-i	input模式,解包,对磁盘里文件输入到内存,标准输入传入的打包文件名解包到当前目录
-t	预览,查看标准输入传入的打包文件中包含的文件列表
-o filename 输出到指定的归档文件名
-A	向已存在的归档文件中追加文件
-I filename 对指定的归档文件名解压
-F filename 使用指定的文件名替代标准输入或输出
-d	解包生成目录,在cpio还原时,自动建立目录
-v	显示打包过程中的文件名称

例:文章来源地址https://www.toymoban.com/news/detail-691307.html

#将etc目录备份
find ./etc -print | cpio -ov > bak.cpio

#将/data内容追加bak.cpio
find /data | cpio -oA -F bak.cpio

#内容预览
cpio -tv < etc.cpio

#解包文件
cpio -idv < etc.cpio

到了这里,关于Linux_6_文件查找与打包压缩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux实践室】Linux文件打包和解压缩实战指南:tar打包命令操作详解(文末送书)

    🌈个人主页: 聆风吟_ 🔥系列专栏: Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 有时,我们会在Linux系统中将多个文件打包成一个单独的文件,通过本节的学习,我们将学会如何在Linux系统中将多个文件/目录打包生成一个文件。 本节任务:使用

    2024年04月29日
    浏览(45)
  • 【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 【语法】 : date [OPTION] ... [+FORMAT] 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后面结束个标记,其中常用的标记列表如下 %H

    2024年02月05日
    浏览(37)
  • Linux中文件的打包压缩、解压,下载到本地——zip,tar指令等

    目录 1 .zip后缀名:         1.1 zip指令         1.2 unzip指令 2 .tar后缀名 3. sz 指令 4. rz 指令 5. scp指令 语法:zip [namefile.zip]  [namefile]... 功能:将目录或者文件压缩成zip格式 常用选项:         -r : 递归处理,将指定目录下的所有文件和子目录一并处理。 语法:unzip [namefil

    2024年01月24日
    浏览(51)
  • 探索Linux世界:基本指令(文件查看、时间相关、grep、打包压缩及相关知识)

    今天继续介绍一些指令 语法 :cat [选项] [文件] 功能 : 查看目标文件的内容 -b 对非空输出行编号 -n 对输出的所有行编号 -s 不输出多行空行 示例 : 查看单个文件内容: 显示文件内容并附带行号: 创建新文件并写入内容: 追加内容到文件末尾: 和 我们下面就会细讲啦,大

    2024年03月14日
    浏览(44)
  • Linux tar命令教程:文件打包和压缩的神器(附案例详解和注意事项)

    tar(Tape ARchive),用于在linux中打包和备份文件。它可以将多个文件和目录打包成一个tar文件,也可以从tar文件中提取文件和目录。此外,它还可以与gz,bzip2,xz等压缩工具结合使用,进行文件和目录的压缩和解压。 tar命令在各个Linux发行版中均通用。包括但不限于 Ubuntu、

    2024年01月17日
    浏览(56)
  • Linux学习(3):查找指令、压缩和解压

    find -name 按照文件名进行查找 find -user 指定用户名 find -size 指定文件大小 1.按文件名 : 根据名称查找 /home 目录下的 hello.txt 文件 2.按拥有者 : 查找 /opt 目录下,用户名称为 nobody 的文件 3. 查找整个linux系统下大于200M的文件( +n 大于 -n小于 n等于) ps . ls -lh -h 选项以人类可读的格

    2024年01月23日
    浏览(40)
  • tar 打包压缩命令(linux压缩命令)

    ​ tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。 1、打包 案例:将app目录打包 案例:将microboom目录打包并压缩

    2024年02月12日
    浏览(48)
  • Linux打包(归档)和压缩

    归档 ,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。 通常,归档会和系统(数据)备份联系在一起,不过,有关数据备份的内容,之后进行说明。 和归档文件类似

    2024年02月11日
    浏览(30)
  • linux tar打包压缩解压命令学习

    Linux系统中tar是最常用的打包工具,通过打包工具可以压缩/解压 比如常见的压缩包格式 如下: tar 未压缩文件 只是做了一个打包而已 tar.gz 使用gzip算法格式压缩的压缩包 tar.bz2 bz2格式压缩包 tar.xz xz格式压缩 参数介绍 tar 的参数很多 列出几个比较常用的记录一下。 格式 tar

    2024年02月04日
    浏览(49)
  • Linux下的打包和压缩/解压解包

    打包呢就是把所有东西装在一起,然后压缩就是将这一包东西给它合理摆放,腾出更多的空间,以便放更多的东西。 压缩可以将如果东西是一定的情况下,占用更小的体积,如果空间固定那么压缩就会使这个空间能装更多的东西。这种就像要开学去学校的你,带很多东西,一

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包