【Linux】Linux命令行大冒险:寻找、搜索与压缩的神奇之旅

2024-09-03 07:36

本文主要是介绍【Linux】Linux命令行大冒险:寻找、搜索与压缩的神奇之旅,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  欢迎来到 CILMY23 的博客

🏆本篇主题为:Linux命令行大冒险:寻找、搜索与压缩的神奇之旅

🏆个人主页:CILMY23-CSDN博客

🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营

🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注


前言:

我们也进入指令的结尾了,本篇主要讲述以下指令:

1.find 指令(⭐)         2. grep 指令 (⭐)         3. zip && unzip 指令         4.tar 指令


目录

find 指令 

查找指定目录下对应文件 

查找指定目录下所有对应文件 

什么是通配符? 

​编辑总结一下:

grep 指令

扩展选项:

grep + -i

grep + -n

 grep + -v

 zip && unzip 指令

什么是打包压缩?

为什么要有打包压缩?

如何打包压缩?

打包对应文件 

解压到指定目录 

tar 指令 

打包 

 解包

解包到指定路径

​总结


find 指令 

find 命令用于在指定目录下查找文件和目录。它具有强大的搜索功能,可以根据名称、类型、大小、修改时间等多种条件进行查找。

💫💫指令:find

💫💫功能:在指定目录下查找文件和目录

我们之前还学过一个,查找命令的指令 ----- which,这是专门拿来查找命令的

例如:which ls 

如图所示,它无法查找文件

find 的基本用法

find 路径 -name 文件名 

示例:

查找指定目录下对应文件 

该命令会在整个文件系统中查找所有名为 a.txt 的文件,并输出其路径。如果 a.txt 存在于多个位置,命令会列出所有找到的路径。

那如果我们想查找所有对应的文件呢? 

查找指定目录下所有对应文件 

这时候就要用到通配符 *。

什么是通配符? 

在 Linux 和其他类 Unix 系统中,通配符(Wildcard)是一种特殊字符,用于匹配文件名或路径中的一个或多个字符。通配符可以在命令行中使用,以便更灵活地处理文件和目录。 

常见的通配符如下:

  1. *(星号)

  • 匹配零个或多个字符。
  • 例如,*.txt 匹配当前目录下所有以 .txt 结尾的文件,如 file1.txt、document.txt 等。
  • a* 匹配所有以 a 开头的文件,如 apple、
  1. ?(问号)

  • 匹配一个单独的字符。
  • 例如,file?.txt 匹配 file1.txt、fileA.txt,但不匹配 file12.txt。

所以我们想查找指定目录下的所有.txt文件就可以用通配符

我查找了根目录 / 底下的所有 txt 文件。 

 甚至我们刚刚创建的 aa.txt 文件 和 a.txt 文件也有。

 通过上述两个例子,我们可以发现,find 查到文件,以绝对路径的形式出现了。

这也说明一件事:fnd是真正的在系统的树形结构中进行文件查找的! ,这也反向说明了Linux的文件系统结构是树, Linux树形结构特点:子区域还是一棵树。 

因此,我们也可以实现which的类似效果:

因为指令大多存放在 /usr/bin 的目录下,所以我们可以在这个目录下指定查找,例如:

which 其实是指定在 (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) 这些路径下查找的,所以它像限定好的 find 一样。


总结一下:

Linux下find命令在目录结构中搜索文件,并执行指定的操作。并且提供了相当多的查找条件,功能很强大。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

grep 指令

 那因为我们是新创建的服务器,并没有我们上次创建的大文件,这边我们继续伪造一个大文件。(详细的可以参考链接)。

grep 是一个非常强大的命令行工具,用于在文件中搜索特定的字符串或模式。它广泛用于文本处理和数据分析,能够快速查找和过滤信息。

💫💫指令:grep

💫💫功能:在文件中搜索字符串,将找到的行打印出来

💫💫基本用法:grep 字符串 文件

grep 的使用如下: 

 可以看到屏幕上打印了很多关于字符串”999“的行。

扩展选项:

接下来我们就要对 grep 进行一个详解了,首先我们先创建一个 test.txt 文件,利用 nano 对其输入内容。

text 文件内容如下:

上选项: 

grep 选项:

  • -i : 忽略大小写的不同,所以大小写视为相同
  • -n : 输出行号
  • -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行

grep + -i

这个可以忽略大小写,也就是无论我们的文件中,这三个字符字母到底有没有大小写,都可以查找出来。同样的,也包括你要搜索的字符串的大小写。

grep + -n

这个大家应该很熟悉了,我们在讲解 cat 的时候就有用过,在刚刚的操作也使用过。它可以在屏幕上打印的时候加上行号。

操作如下: 

 grep + -v

如果是使用-v选项,那它就是在反向选择,也就是显示出没有 '搜寻字符串' 内容的几行。

例如:

当然,上述的选项可以组合在一起,这样就变成了,输出行号的其他信息。

 zip && unzip 指令

什么是打包压缩?

打包压缩将多个文件和目录合并成一个单一文件的过程,同时通过压缩算法减少文件的大小。这个过程通常分为两个步骤:

  • 打包:将多个文件和目录合并成一个归档文件,常见的格式有 .tar、.zip、.rar 等。
  • 压缩:使用压缩算法减少文件的存储空间。

为什么要有打包压缩?

 打包压缩有以下几个优点,在长期接触我们的文件中,肯定是要方便使用的。

  • 节省空间:压缩文件可以显著减少所需的存储空间,特别是在存储大量数据时。
  • 便于传输:将多个文件打包成一个文件可以简化文件传输,减少网络传输的时间和带宽消耗。
  • 组织文件:打包可以将相关文件和目录组织在一起,方便管理和备份。
  • 保护数据:某些压缩格式支持加密,提供额外的安全性。

如何打包压缩?

在我们的xshell上,我们可以使用zip进行打包,然后使用unzip进行解压缩。

我们可以使用如下指令安装,当然如果你没有管理员权限,可以在前面加上sudo。 同理也可也安装unzip。

 💫💫指令:zip

💫💫功能:将目录或文件压缩成zip格式

💫💫基本用法:zip 压缩文件名 压缩文件

 示例:

在下图中,我们使用zip压缩了csdn目录。

我们创建了一个zip_test方便我们进行测试,接下来我们使用mv把这个zip压缩包移动进该目录中。 

 

现在我们进入该文件夹中,进行解压。 

💫💫指令:unzip

💫💫功能:将目录或文件解压缩

💫💫基本用法:unzip 需要解压缩文件

示例:

解压操作如图所示,我们可以使用unzip + 文件名。 

但是我们发现一个问题,为什么我们的csdn中的文件没有打包进来?

原先的文件有四个。 

如果我们想都拷贝过来,我们就需要增加一个扩展选项: 

扩展选项:

💫💫指令:zip -r

实操如下: 

查看后,果然所有的文件都被打包过来了。 

 

打包对应文件 

当然我们也可以使用通配符,在指定目录下,打包对应文件

例如:

我们可以单个选择文件,就是在后面添加文件名,那如果我们使用通配符 * , 则可以全选打包。 

解压到指定目录 

通过上述操作,我们知道  unzip 文件名 ,它是默认解压到当前文件夹,而我们加选项 -d,就可以解压到指定目录下。

扩展选项:

💫💫指令:unzip -d

💫💫功能:解压到指定目录下

 实操如下:

至此zip 和 unzip 的打包压缩我们就讲解到这。

问题小结: 

文件后缀都是zip吗?

是的,压缩包在压缩的时候是需要固定后缀的。所以.zip 固定起来就行了。另外呢,在我们现实生活中, 有不同的压缩包,对应的是不同的算法和压缩工具。像rar,zip,7z等等这些。

接下来我们要讲解一个重量级的选手---- tar

tar 指令 

tar 是一个用于打包和压缩文件的命令行工具,广泛用于 Linux 和 Unix 系统中。它的全称是 "tape archive",最初用于将文件归档到磁带上,但现在主要用于创建和管理归档文件。现在可以用来打包或者解包。

💫💫指令:tar

💫💫功能:打包/解包,可以不打开它,直接看内容

💫💫基本用法:tar [选项] 压缩文件名 压缩文件

打包 

 tar 和 zip 一样,可以单选文件,也可以全打包。

我们在命令框中,直接使用选项的组合进行打包。 

命令解析如下:

  • tar:调用 tar 命令,用于打包和压缩文件。
  • -c:表示创建一个新的归档文件(create)。
  • -z:表示使用 gzip 压缩归档文件。
  • -f:表示指定归档文件的名称,后面紧跟着要创建的文件名。
  • tar.tgz:这是要创建的压缩归档文件的名称,通常以 .tgz 或 .tar.gz 结尾。
  • *:表示当前目录下的所有文件和子目录。

如果我们想查看打包了哪些内容,就可以直接在组合上加 -v

我们可以看到,屏幕上输出了本次打包的文件。 

 解包

如果我们要使用tar命令进行解包,那我们就需要使用选项 -xzf 进行解包。 

 如图所示:

解包到指定路径

和unzip 一样 如果需要解包到指定路径,我们需要在末尾添加选项,不同的是,这里添加的是-C。

我们创建一个 tar_test 的目录,接下来使用 -C 解压到该文件夹下。 

 总结

zip 和 unzip 以及 tar 的用法。 

 打包压缩的另一个用途就是用于网络传输

我们可以输入以下命令进行安装。 

这样当我们在屏幕上输入 sz tar.gz 的时候,就可以选择我们的路径了。 

 传输完成后,我们可以看到桌面多了一份压缩包。

同时,我们可以使用rz从我们的Windows系统中,接收文件。

 


全文总结:

1. fnd是真正的在系统的树形结构中进行文件查找的! 

2.find 查到文件,以绝对路径的形式出现了

3. Linux树形结构特点:子区域还是一棵树。 

4.在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间

5.grep 可以在文件中搜索字符串,将找到的行打印出来,其中选项 -i 可以忽略大小写,-n 可以输出行号,-v 可以反向输出其他行列。(grep 搜索仅仅只针对文件内容搜索)

6. zip -r 用于打包目录以及目录的所有文件,unzip 进行对应的解压,unzip -d 可以解压到指定目录下。

7. tar -czf 可以进行打包文件,tar -xzf 可以进行解包文件,加选项 -v 可以查看打包/解包内容。

8.为什么要有打包压缩?这是为了方便网络传输

注:我利用alias 别名重命名了我的ll,和虚拟机一样看的比较爽一点。这时候我的 ll 指令相当于 ls -l -a指令。


 🛎️感谢各位同伴的支持,本期文件查找和打包压缩专题就讲解到这啦,下期我们将进入Linux的权限,如果你觉得写的不错的话,可以给个一键三连,点赞,收藏+评论,可以的话还希望点点关注,若有不足,欢迎各位在评论区讨论。       

这篇关于【Linux】Linux命令行大冒险:寻找、搜索与压缩的神奇之旅的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132415

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta