Linux文件的查找和打包以及压缩

文件的查找

文件查找的用处,在我们需要文件但却又不知道文件在哪里的时候

文件查找存在着三种类型的查找

1、which或whereis:查找命令的程序文件位置

2、locate:也是一种文件查找,但是基于数据库的查找

3、find:针对与文件名进行查找

查找文件的程序文件位置(which/whereis)

但我们使用命令时,其实系统是自动调用了关于其命令的程序,但为什么我们使用命令时,不需要输入路径而是直接输入命令呢?

因为在系统还有一个环境变量的存在,比如在使用ls时,环境变量就会帮助我们将ls补充为/usr/bin/ls

在shell编程中就可以将/usr/bin/ls作为ls程序的绝对路径,写在脚本中

但我们又怎么知道ls对应的是/usr/bin/ls呢?就是使用which或是whereis来查找的,语法:which 命令/whereis 命令

[root@localhost ~]#which ls
[root@localhost ~]#whereis ls

image-20240929220310660

通过数据库来查找文件位置(locate)

在我们的系统当中,存在着一个专门存放文件位置的数据库,这个数据库会在开机的时候自动刷新来记录我们的文件的位置

这种通过数据库查找的方法还是需要依赖与"locate"命令,语法:locate 查找的大概文件名;如下

[root@localhost ~]#locate host

image-20240929222531210

哎!突然发现会上图所示的报错,其原因已经很明显了,是因为没有”/var/lib/mlocate/mlocate.db“这个文件或者说是目录

因为locate是基于数据库来查询的,所以我们可以大胆的猜测一下是数据库没有更新的问题,使用数据库手动更新命令"updatedb"来进行更新,也可以直接重启系统

事实上,但我们创建一个新文件时,数据库中也是没有该新文件的信息的,同样需要手动更新数据库或重启系统来解决

如下,我们使用"updatedb"来手动更新数据库,并且来使用locate来查看数据中记录对与host的内容,因查看结果过多,我们将其产生的信息重定向到一个文件当中

[root@localhost ~]# updatedb 
[root@localhost ~]# locate host > 1.txt
[root@localhost ~]#updatedb

产生如此多内容的原因是,在"locate host"输入的时候,系统会在数据库中检索host这个关键字,最后将路径带有host的文件全部列出来

在系统中,有一个极为特殊的目录/tmp,因为其目录性质是临时的。所以数据库是不会在这里面去寻找东西的;换句话说,一般情况下你是不会在垃圾桶里捡东西的

文件查找(find)

find工具是一个非常强大的文件查找工具

它可以支持按文件名查找、按文件大小查找、按文件对于在根目录的深度进行查找、按文件的属主属组进行查找、按文件类型进行查找等操作

并且我们还可以使用find对查找到的文件进行查找后的处理,如查找到之后删除等操作

我们可以将find工具理解为Windows中的查找工具

语法:find [path] [options] [expression] [action];path表示在哪个文件路径下查找;options表示查找对应的选项,如对应查找需求(文件名字、大小、属主等)

expression用来解释选项的内容、action在查找文件之后的动作

按照文件名查找(-name/-iname)

按文件名查找我们可以使用-name选项

如下,我们需要在/etc目录下对文件"hosts"进行查找,

[root@localhost ~]#find /etc -name "hosts"

image-20240930113158647

但选项-name并不会对查找的文件区分大小写,并且Linux是大小写区分的系统,也就是说并不会查找如"Hosts"这种文件

但我们可以在这前面加一个选项"-i"成为"-iname",这样就可以在文件名大小不缺定的情况下进行查找,如下

[root@localhost ~]#find /etc -iname "hosts"

image-20240930115530449

按照文件大小查找(-size)

环境准备,使用dd配合/dev/zero,在/etc/sysconfig目录下创建一个大小为121M的文件名为123.txt,然后使用-size选项查找出该文件

[root@localhost ~]#dd if=/dev/zero of=/etc/sysconfig/123.txt bs=1M count=121

/dev/zero是一个可以提供无限字节流的文件,经常用于我们的测试当中

image-20240930121017473

紧接着我们就开始对该文件进行查找,使用find搭配-size选项,在/etc目录下查找文件大小大于120M的文件

[root@localhost ~]#find /etc -size +120M

image-20240930121256471

反之,若是我们想查找小于120M的,则为"find /etc -size -120M";若是我们想查找刚刚好为120M的文件,则为"find /etc -size 120M"

按照目录的深度进行查找

目录的深度就是文件的层级,换句话说就是有多少个目录套目录,该方法可以限制其查找范围

我们已查找网卡的配置文件作为例子,网卡的配置文件为/etc/sysconfig/network-scripts/ifcfg-ens33

其层级逐步表示为"/"根目录表示为第一层,/etc表示为第二层,/etc/sysconfig表示为第三层,/etc/sysconfig/network-script表示为第四层

所以如果我们设置了查找目录深度为4的时,也就只能查看到"/etc/sysconfig/network-script"目录下的文件

在对目录的深度进行查找的时候,我们经常搭配着其他选项进行查找,如配合着"-name"进行查找,就可以查找指定目录范围的指定文件

想要同时使用两个选项查询,还要加上-a选项,才能同时使用两个选项进行查询,如下

[root@localhost ~]# find / -maxdepth 4 -a -name "ifcfg-ens33"

image-20240930124013469

但若是将范围该为3,则代表只查询到/etc/sysconfig下的内容,所以必然是查询不到"ifcfg-ens33";图片如下

image-20240930124142314

按照文件的属主和属组进行查找

环境准备:创建用户jack,创建组hr,在/home创建新文件text.txt,将text.txt的属主和属组分别该为jack和hr

[root@localhost ~]#useradd jack
[root@localhost ~]#groupadd hr
[root@localhost ~]#touch text.txt
[root@localhost ~]#chmod jack.hr text.txt

属主的选项为-user,与英译的意思是相同的;同样的属组的选项为-hr;如下

[root@localhost ~]#find . -user  "jack"		//在当前目录下查找所有属主为jack的文件
[root@localhost ~]#find . -group  "hr"		//在当前目录下查找所有属组为hr的文件

image-20241004120617851

按照文件类型来查找

让我们来复习一下什么是文件类型

在使用"ll"或"ls -l"后,我们可以看到文件的详细信息,其中开头的第一列就表达的是文件类型

文件类型有很多种,如以"d"开头的是目录,"-"则是普通的文件,"b"开头的则是块文件用于表示磁盘的硬件

在按照文件类型来查找文件的时候,我们应该用的是选项是-type,英译过来正好是类型的意思,以此来方便记忆

但在-type后面 还要指定我们查找的是什么文件类型,如普通文件为"f",块文件为"b",目录为"d"以此类推;如下

[root@localhost ~]#find / -type f | head		//在根目录下查找文件类型为普通文件,并且只显示其前十行
[root@localhost ~]#ll /boot/grub2/device.map	//验证是否正确
[root@localhost ~]#find / -type d | head		//在根目录下查找文件类型为目录,并且只显示其前十行

image-20241005165034973

按照文件的权限来查找

文件的权限有三种,属主、属组、其他人,其中可赋予的权限为可读可写可执行,分别用rwx来表示

我们通常数字来区分不同人(属主、属组、其他人)所拥有的权限,rwx分别对应的数字是421

如属主可读可写可执行,属组可读可写,其他人可读可写所表示的数字为766

而按照文件权限所查找的选项是-perm,其中permission为权限的意思;实例如下

[root@localhost ~]#find ./ -perm 666		//在当前目录下查找权限为666的文件
[root@localhost ~]#find ./ -perm 666 -ls	//如果没有-ls选项,以文件详细的方式显示出来

image-20241005180104518

找到后的处理的动作

通过前面从find查找练习,我们可以发现,我们平常查找之后的动作默认是-print,就是打印出来

但可以在查找后加上一些关于动作的选项,使得我们可以查找到文件后可以进行删除、复制等操作;如下

查找后删除

[root@localhost ~]#find ./  -perm 666 -delete		//将当前目录下查找出来的权限为666的文件删除

image-20241005182036964

查找后复制

我们先来看命令,然后在来逐个解析其意思

[root@localhost ~]#find ./  -perm 666 -ok cp -rvf {} /tmp \;

在上述命令中因为使用的cp的查找后动作,所以"find ./ -perm 666"的查找结果会被放到后面的"{}"内进行复制

-ok表示我们现在需要使用外接选项(如cp),同时表示在复制时我们要使用yes在确认复制,或使用no来使复制停止

-r表示递归复制即如果复制的是目录,将会使其的子目录一同复制

-v表示将复制过程显示出来,如果没有这个选项就不会有下图中"./text.txt -> /tmp/text.txt"的显示

-f表示cp这条命令不用进行确认可以直接复制

;是该命令的固定格式,必须要有才能成功执行该命令

image-20241005182528160

文件的打包和压缩

文件的打包和解包

文件的打包

在我们对服务器进行管理时,通常会遇到需要转移多个文件的情况

这时,如果一个一个使用mv或cp命令进行转移会因为数量太多而导致太多麻烦

我们可以将我们需要的文件都组合起来,然后统一地打成一个包,方便我们进行多个文件的转移

在这里我们使用tar命令进行打包,同时所有使用tar命令打包后的包,都将会是以tar为后缀的;如下

[root@localhost ~]#tar -cf etc.tar /etc		//将"/etc"打成一个tar包并存放在当前目录下

-c表示创建一个tar包(create创造),-f表示指定解包后的文件名

image-20241005230152279

文件的解包

当我们打好的tar包被转移后,我们需要用到包里面的内容时,因为tar包的存在,所以是没办法直接使用的

这时,需要将tar包进行解包,里面的内容才能正常使用;如下

[root@localhost ~]#tar -xf etc.tar

在进行解包后,解包的内容会默认在当前目录下生成

解包与打包的选项不同在与解包的选项为"-xf",其中-f依旧是指定包的名称,而-x则表示解包

image-20241005230922611

文件的压缩和解压缩

文件的压缩

在上述的打包学习中,只是为将多个文件集中成一个包然后转移,可其包的容量与原目录的容量却没发生变化;如下

这容易导致一些无用的资源却占用着存储空间,所以我们的压缩就应运而生

压缩其实就是将原目录先打成一个包,然后使用压缩工具将该目录包的存储空间减少,从而达到减少存储空间负担的目的

而这样子产生包就叫做压缩包

压缩的工具有三种,分别是gz、bz、xz;这三个打包工具的不同我们在后面的实验中一一道来

首先就是命令选项的不同,但整体命令还是大致一样的;如下

[root@localhost ~]# tar -czvf etc.tar.gz /etc		//gz的压缩包命令
[root@localhost ~]# tar -cjf etc.tar.bz /etc		//bz的压缩包命令
[root@localhost ~]# tar -cJf tec.tar.xz /etc		//xz的压缩包命令

由上述命令可以总结出来,-c和-f选项与打tar包命令含义相同

至于-v则表示在终端上显示压缩的全过程(在这里则是将/etc被打压缩包的内容全部显示出来)

而gz的选项则是-z,换句话说,-z就表示该压缩包打的是gz包,并且我们还看到"etc.tar.gz"压缩包的名字还是以gz为后缀的

以此类推,bz的打压缩包选项为-j(小写);xz的打压缩包选项为-J(大写)

以上是,gz、bz、xz的在命令上的区别,但其实它们三个不同的还不止于此

如果你亲自地去做一遍以上三种包的打压缩包过程,则会发现,三个打包方式所使用的时间将会有明显的不同,为什么呢?

我们使用ll查看这三种方式打出来的包的详细信息,如下

image-20241005233446411

从上图可知,三种打包工具所产生的压缩包容量从大到小依次为gz、bz、xz

而在打包过程中,打gz包所使用的时间最快,其次则是bz,最慢则是xz

所以这相当与我们想要有更小压缩包的体积、更大的容量,势必要失去一些时间,而失去什么则取决不同的生产环境

综上所述,gz、bz、xz的容量与打包时间成反比,所以并不是容量越小越好,还要考虑时间成本的问题

文件的解压缩

在老的Linux版本中,我们解包还要根据gz、bz、xz等压缩包的类型来使用不同的命令选项,就像打压缩包一样,gz或bz的解压缩包的命令选项也是不同的

但在新的Linux版本中,只需要使用一条命令就可以通解所有类型的压缩包,那就是"-xf"通解一切压缩包;如下

[root@localhost ~]# tar -xf etc.tar.gz
[root@localhost ~]# tar -xf etc.tar.bz
[root@localhost ~]# tar -xf etc.tar.xz

以上三条命令都可以在当前目录下解压出一个名为etc的目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

01 设计模式-创造型模式-工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使用工厂模式…

1.2.3 TCP IP模型

TCP/IP模型(接网叔用) 网络接口层 网络层 传输层 应用层 理念:如果某些应用需要“数据格式转换”“会话管理功能”,就交给应用层的特定协议去实现 tip:数据 局部正确不等于全局正确 但是,数据的 全局正…

数码准备记录

1.数据结构 常见的数据结构包括数组、链表、栈、队列、树(如二叉树、B树、B树)、图等 2.队列和栈的区别 队列是一种先入先出的数据结构,即最先加入的元素被最先移除; 栈是一种后进后出的数据结构,即最后加入的元素…

RTMP协议分析

理论 总体介绍 RTMP协议是应⽤层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建⽴完成后,RTMP协议也要客户端和服务器通过“握⼿”来建⽴基于传输层链接之上的RTMP Connection链…

Collection 单列集合 List Set

集合概念 集合是一种特殊类 ,这些类可以存储任意类对象,并且长度可变, 这些集合类都位于java.util中,使用的话必须导包 按照存储结构可以分为两大类 单列集合 Collection 双列集合 Map 两种 区别如下 Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两…

Electron-(二)桌面应用的启动动画创建

一、概述 在很多桌面应用中都会有启动画面的显示。启动画面可以解决在启动时耗时较长,将每一步反馈给用户。另外一方面解决启动过程中的环境检查及检查结果的反馈。 在当今的桌面应用领域,启动动画已成为提升用户体验的重要组成部分。它不仅仅是一个简单…

【Linux】main函数的参数列表从何而来?

Linux系统进程通过exec系列函数启动新程序时,argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数,显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中,main函数的标准参数列表通常如下所示: in…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏,包含多个选项,如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品,每个产品都有一个图片和简短的描述。页面下…

MySQL【知识改变命运】06

前言:在05这节数据结构里面,我们知道select * from 这个操作很危险,如果数据库很大,会把服务器资源耗尽,接下来提到的查询可以有效的限制返回记录 1:分页查询 分页查询可以有效控制一次查询出来的结果集的…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

图像中的数值计算

目录 图像读取与形状图像数据展示图像数据操作超出范围的像素值处理 图像读取与形状 使用cv2.imread函数读取图像文件。图像的形状通过shape属性获取&#xff0c;格式为(高度, 宽度, 颜色通道数)。 import cv2img1 cv2.imread(bg.jpg) img2 cv2.imread(fish.jpg)print(img1…

Linux服务器安装SRAToolkit教程

SRAToolkit是由NCBI&#xff08;美国国家生物技术信息中心&#xff09;提供的一个工具集&#xff0c;用于下载、读取和转换SRA&#xff08;Sequence Read Archive&#xff09;格式的数据文件。这些数据文件包含了大规模的核酸序列数据&#xff0c;对于基因组学研究至关重要。本…

pytorch激活函数介绍

在 PyTorch 中,激活函数(Activation Functions)是神经网络中重要的非线性组件,用于引入非线性,使网络能够学习复杂的函数关系。以下是 PyTorch 中常见的激活函数及其特点: 1. ReLU (Rectified Linear Unit) 函数: torch.nn.ReLU()公式: ReLU(x)=max⁡(0,x)特点: 常用于隐…

python-代码技巧

python-代码技巧 简单tips1、多个列表循环遍历2、使用map对列表中多个文件进行批量操作 仅个人笔记使用&#xff0c;感谢点赞关注 简单tips 1、多个列表循环遍历 dataTypes ["train","test"] dataStations ["1","2","3"…

【C语言】自定义类型:结构体--结构体内存对齐(用于计算结构体的大小)

结构体内存对齐 结构体内存对齐用于计算结构体的大小。 &#xff08;1&#xff09;对齐规则 1&#xff09;&#xff09;结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处。 2&#xff09;&#xff09;其他成员变量要对齐到某个数字&#xff08;对齐数&#…

FFmpeg 4.3 音视频-多路H265监控录放C++开发四 :RGB颜色

一 RGB 的意义&#xff1f; 为什么要从RGB 开始讲起呢&#xff1f; 因为最终传输到显卡显示器的颜色都是RGB 即使能处理YUV的API&#xff0c;本质上也是帮你做了从 YUV 到 RGB的转换。 RGB888 表示 R 占8bit&#xff0c;G 占8bit&#xff0c;B 占8bit&#xff0c;也就是每一…

Gin框架操作指南10:服务器与高级功能

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

手撕布隆过滤器:原理解析与面试心得

前言 说来话长&#xff0c;话来说长。前些天我投了一些日常实习的简历&#xff0c;结果足足等了两个礼拜才收到面试通知&#xff0c;看来如今的行情确实是挺紧张的。当时我是满怀信心去的&#xff0c;心想这次一定要好好拷打面试官一番&#xff0c;结果没想到&#xff0c;自我…

腰背肌筋膜炎有哪些治疗方法

腰背肌筋膜炎主要表现为腰背部的疼痛、酸胀、僵硬、活动受限等症状。在疾病初期&#xff0c;症状可能相对较轻&#xff0c;通过休息、保暖、适当的物理治疗等&#xff0c;往往可以缓解症状&#xff0c;此时病情不算严重。如果患者不重视&#xff0c;继续保持不良的生活习惯&…