当前位置: 首页 > news >正文

Linux入门——入门常用基础指令(3)

文章目录

  • 入门常用基础指令(3)
    • grep指令
    • 压缩解压
      • 打包压缩的必要性
      • zip/unzip指令
      • 关于rzsz的操作
      • tar指令(重要)
    • bc指令
    • uname指令
    • shutdown指令
    • history指令
    • 几个常用的热键
      • ctrl c和ctrl d
      • ctrl + r
      • Tab按键

入门常用基础指令(3)

入门Linux的常用指令还是比较多的。本篇文章是Linux入门部分的第三篇,也是最后一篇。

grep指令

语法: grep [选项] 搜寻字符串 文件
功能:在文件中搜索字符串,将找到的行打印出来

常用选项:

-n 将字符串在原文件中的行数打印
-i 忽略字符串的大小写进行寻找匹配
-v 反向选择 将不匹配的进行输出

这个指令的用途就是将输入的字符串从文本中过滤出来,因为有些文件很大,我们如果要去里面一个个的翻是很难的,所以可以用这个指令进行过滤。

为了进行验证,我们可以自行生成一个比较大的文本文件。有两种方法进行快速生成:

  1. 使用c/c++程序,使用文件操作,将指定内容输出到指定文件内即可。
  2. 使用脚本命令,这里可以上网找一下,不做讲解。

为了方便,在这里使用了一个脚本命令行:

cnt=0; while [ $cnt -le 2000 ]; do echo "hello $cnt"; let cnt++; done > temp.txt

这个时候在temp.txt这个文件里面会生成n行文本,每一行都是hello + 数字n
数字n从0~2000。这个指令可以直接拿去用。

我们先来试着过滤一下,把所有带9的文本过滤出来:

在这里插入图片描述
我们还顺带使用了-n选项把行号给输出出来,表示这些被过滤出的字符串在原文的第几行。

我们也可以使用-v选项把不带9的字符串过滤出来:
在这里插入图片描述


接下来我们测试一下-i选项。这个选项是可以忽略搜索字符串的大小写的,所以我们需要修改一下temp.txt文件里面的内容。使用之前讲过的nano工具就可以了。

tips:这里的修改就是将部分的字符串的字符改成大写,也修改一下前面hello的单词。具体怎么改看想要的测试效果,这里只做一个简单演示。

在这里插入图片描述
我们将那些改动过的地方进行过滤出来,就改了这几行。我们来测试一下运行结果:

在这里插入图片描述
我们将带有hello(不区分大小写)的文本行过滤出来放到管道文件中。再从管道文件中进行过滤,看是否能够过滤出来我们刚刚修改的那些字符串。经过我们的验证发现是成功的。

再验证一下是否可以把不是hello(不区分大小写)的字符串过滤出来。
在这里插入图片描述

所以grep的本质我们可以当成一个文本过滤器。这是非常好用的。

压缩解压

这个功能其实很多时候我们在Windows系统下经常使用,在传输文件夹的时候,如果一个文件夹太大了,就会考虑把它压缩后再来发送。这个功能我们平时是在Windows下的GUI图形化界面下使用的。我们之前也说了,GUI的底层也是通过一些指令完成的,只不过上层被封装成图形化界面了而已。

这个部分我们将学习如何在Linux系统下进行打包和压缩操作。

打包压缩的必要性

在讲解压缩解压命令之前,我们先来了解一下为什么需要进行打包压缩。

首先,打包压缩是什么?
打包的本质就是将文件进行合并,压缩通过特定的压缩算法将文件的大小进行压缩。本意是为了减小文件的大小。

为什么要这么干呢?
因为有时候会面临着传输文件的问题。文件进行传输是需要通过网络的。但是网络有时候可能会堵塞,会出问题,会丢包。

如果我们传的文件太多了,很快能会导致一个问题,就是有可能个别的文件可能会缺失。如果传输的是一个应用,丢失了一个配置型文件,那就很麻烦了。那整个软件都白下了。

所以为了防止上面地情况发生,需要对所有文件进行打包。但是打包也会面临着一个问题,就是打包后地文件可能是很大的。这上传速度和下载速度肯定会慢,而且会占据空间。所以需要进行对文件的压缩,这样子可以把整个文件夹地体积减小。占用空间小了,传输也快了。下载后再进行解压就可以正常使用了。所以打包压缩还是很有必要的。

但是我们这里先不做打包和压缩地区分,我们暂且的统一认为它们两个是同一个步骤,即我们重用的生成压缩包操作,后序将统一简称为“压缩”。

但是由于当前市面上的压缩工具有很多种,压缩算法其实也各不相同。这也导致了压缩包的文件类型其实是各不相同的,但是我们在Linux中最常用的也就两种,所以我们只需要重点学习这两种打包压缩的方式和其对应的解压操作即可。

接下来,我们一起来看看Linux中常用的两种压缩方法。

zip/unzip指令

第一种就是常见的zip压缩方式。
在Linux下:zip为压缩指令,而unzip是解压指令。

但是要是用这个指令是需要安装工具的,我们可以使用zip --version查看一下当前主机zip的版本,看看是否有安装zip工具。如果提示出来没有需要进行安装。
可以使用指令:yum install -y zip进行安装。

tips:当前我使用的系统是Centos 7.x版本的,所以可以是使用上面的那个指令进行安装。但是由于Centos系统在2024年就已经停止维护了,所以后序会转到Ubuntu系统。如果是ubuntu系统就把yum换成apt就可以了。

我们先来看如何进行压缩:
压缩需要使用到zip指令:
语法: zip [选项] 压缩文件.zip(压缩后的) 目录或文件

这里我们要注意的一个事情:
即我们在上一篇文章中讲到过,Linux操作系统下是不会以文件的后缀名来进行文件的类型区分的。所以我们这里压缩后的文件即使不带.zip的后缀也是可以的。

但是我们又说过,虽然Linux系统下不区分,但是不代表我们使用的工具是不认识的:

我们把之前用于实验的Hello.c进行压缩。

//Hello.c#include <stdio.h>const char *dev="/dev/pts/0";int main()
{int cnt = 10;FILE *fp = fopen(dev, "w");if(fp == NULL){printf("open %s error!\n", dev);return 1;}while(cnt--){fprintf(fp, "%s %d\n", "hello world" ,cnt);sleep(1);}fclose(fp);return 0;
}

在这里插入图片描述
在这里我们来看,即使我们压缩一个新的文件出来,我们命名不带.zip的后缀。但是zip这个工具再压缩后,我们查看当前目录下的文件发现,会自动带上后缀。

所以在这里的建议是,为了能够比较好的进行区分,所以还是建议文件与后缀进行匹配。这样子是更方便的,要不然打开一看全没有后缀,很难用肉眼去区分出是什么类型的文件了。


我们来试着解压一下,然后看是否能够正常使用这个程序:
解压需要用到unzip指令:

直接在当前目录下解压:
语法:unzip xxx.zip
在这里插入图片描述
如果我们不指定目录直接解压的话,会默认解压到当前路径下。但是这里会面临着一个问题:
我们用过解压的都知道,一个文件被解压后,它的名字其实是不变的,变的是后缀。

因为当前目录下存在着Hello.c这个文件,对H.zip进行解压后,H.zip里面的那个被压缩的Hello.c被解压后会导致命名冲突了,一个目录下是不允许有同名的文件出现的。所以在有重复文件的目录下,系统会给出几个选项让我们选择:

repalce就是覆盖文件,这里系统是问我们是否覆盖这个已有的文件:

[y]es - 对当前项执行操作(确认)
[n]o - 跳过当前项(不执行操作)
[A]ll - 对所有剩余项执行相同操作(不再逐个询问)
[N]one - 跳过所有剩余项(不再逐个询问)
[r]ename - 重命名当前项(通常会接着提示输入新名称)

但是unzip的语法是不允许我们自行输入被压缩后的文件的名字的,是需要我们与系统进行输入的交互输入r来进行自动命名的。这点需要注意一下。

在这里插入图片描述
或者直接进行覆盖也是可以的。这个可以自行选择。

当然,解压当然不只是可以解压到当前路径下,也是可以解压到指定路径的,使用-d选项:
语法:unzip xxx.zip -d 指定路径(目录)

在这里插入图片描述
我们发现就直接给解压到pos2这个目录下了。只不过因为pos2里面没有重名的文件,所以系统不会弹出刚刚那样的一些选项。


但是我们前面讲的都是关于对普通文件的压缩,我们来试试看对目录是否能够正常使用:
假设当前目录下是这样子的,我们可以看到,我故意的把pos1这个目录搞得很复杂:
在这里插入图片描述

注意:pos1中的HELLO.c和hello.c内容一样,TEMP.txt就是刚刚用脚本写出来的大文件,只不过我在这里把行数改小了,行数范围是0 ~ 200。

然后我们试着将这个pos1目录压缩一下,再解压:

在这里插入图片描述
我们发现,是可以正常的进行压缩和解压的。这里因为pos1里面文件太多,如果把它解压到默认路径下改名字很麻烦,所以直接指定压缩到pos2里面了。

此时按正常来说,pos2里面有个pos1目录,pos1目录里面的文件应该是可以使用的,我们使用cat指令看看TEMP.txt文件:
在这里插入图片描述
我们惊奇的发现,没有这个东西,使用tree命令查看结构发现,pos1其实是一个空目录。其实我们刚刚的压缩和解压操作其实根本就是没有成功。

这里的根本原因和rm指令删除目录是一样的,目录是递归定义的,是需要加入递归选项-r才能正常的压缩和解压目录的。
(但是这里也要注意:不是所有的指令操作文件夹都需要添加-r选项,如mv指令)。

所以我们重新进行压缩和解压缩试试:
在这里插入图片描述
我们发现,加上了递归选项的最大区别就是:
被压缩目录中所有的文件都会被显示被打包,即adding状态。而刚刚我们是没有看见的。

然后我们进行解压缩:
在这里插入图片描述
再指定解压到pos2目录下,发现所有的文件都会被显示解压缩的。这里的unzip命令就不需要需要使用递归选项-r了,这点我们注意一下。

关于rzsz的操作

这个部分我们来稍微的讲解一下如何实现Linux系统和Windows系统互传文件。

这个需要使用到一个工具:

sudo yum/apt install -y lrzlz

我们可以需要自行安装这个工具。

将文件发送到发送到Windows系统需要使用指令sz
在这里插入图片描述
使用这个指令后,会自动地弹出一个弹窗,其实就是我们windows系统下的文件系统。

我直接把刚刚这个压缩包发送到我这台机器windows系统的桌面上:

在这里插入图片描述
在这里插入图片描述
我们发现是可以成功的把这个文件传输到我们的windows系统上的。

在这里插入图片描述
内容也是可以被正常的放过来的。这就很方便了。以后如果我们想要把一些文件在两个系统之间互传就非常方便了。

反过来,如果我们想把windows系统上的东西发送到Linux系统上,需要使用指令rz:

在这里插入图片描述
选择要上传的文件就可以了,上传的文件会出现当前这个目录下。在这里就不进行演示了。

tar指令(重要)

上面我们讲完了使用zip指令进行压缩,使用unzip指令进行解压缩。
还有一种比较常见的压缩方式是使用tar指令,这个部分我们一起来看一下。

语法: tar [-cxtzjvf] (如果加了参数f,就立马要在这里写压缩包的名字) 被压缩的文件和目录

选项参数:

-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执⾏过程!
-f :使用档名,请留意,在 f 之后要立即接档名!不要再加参数!
-C : 解压到指定目录
这里一定要注意,如果需要自己定义名字是需要加上参数f的,参数f后面不要再跟其他参数

我们可以看到的是,相较于zip指令,tar指令给定的选项参数更多。而且zip指令是专门用来打包的,需要使用unzip指令来进行解压。但是我们这里的tar指令并不是这样的,我们使用tar指令进行压缩和解压是需要我们自己进行参数选项的输入的。

这里要注意:在 Linux 中,直接使用 tar 命令 不带任何选项 是无法创建或压缩文件的,必须至少指定一个操作选项(如 -c、-x、-t等)。
在这里插入图片描述
从这张图片中我们也是看到,直接使用tar指令是不行的。


因为当前我们是处于入门指令阶段,我们当前只需要掌握几个重要的参数,能够正确的进行解压缩就可以了

1.压缩:使用指令tar -czf (压缩包名) 被压缩的文件或者目录
在这里插入图片描述
这样子我们就成功的将pos1这个目录给压缩了,而且不需要递归选项-r,因为tar指令可以自动识别。

而且有意思的是,对于tar指令,它的选项是可以不带-的:
在这里插入图片描述


2.解压:使用指令tar -xzf (压缩包名)
在这里插入图片描述
这样子就可以解压成功了。相比于zip指令,好处就是我们可以直接传入我们想要的解压后的名字,就不用进行交互输入了。当然这里默认的解压路径是当前路径下。

如果想要解压到指定路径下:
使用指令:kbd>tar -xzf (压缩包名) -C [指定目录/路径]
在这里插入图片描述

在这里插入图片描述
这里和unzip指令就不一样了,使用的选项是-C(大写)
这样子我们就成功地进行解压了。


这里我们先只讲使用,原理是讲不明白的现在,能够正确的使用就可以了。
还有一个要注意的点是:我们之前说过,尽量让文件类型和后缀进行匹配,这里tar压缩后的文件后缀全名是.tar.gz,这太长了,我们一般写成.tgz

bc指令

这个指令其实很少会用到,其实就是用来作浮点运算的:
在这里插入图片描述
直接输入这个指令,会卡在这个界面,其实就是要我们输入计算式:
在这里插入图片描述
按下回车答案会自行回显。

但是这里要注意,除法的结果默认是取整的。可能需要我们自己去设置小数位。
不过这个指令用的其实是特别特别少的,所以要用的时候查一下使用方法就可以了。

不想使用的时候直接按ctrl + c退出就可以了。

uname指令

这个指令其实也很少用,但是有时候面试的时候会问道,所以还是了解一下。

语法:uname [选项]
功能: uname用来获取电脑和操作系统的相关信息。
补充说明:uname可显示Linux主机所用的操作系统的版本、硬件的名称等基本信息。

常用选项:
-a或‒all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称

有时候面试官会问,如何在Linux主机内查到系统的体系结构和系统版本。

系统版本其实很好理解,因为系统是不断地在迭代升级的。自然会有很多的版本。那上面是系统的体系结构呢?

系统的体系结构简单来说就是计算机系统或软件的整体设计框架,定义了各个组成部分如何组织、交互和协作。其中芯片是比较重要的一个部分。我们在windows系统下也是可以查询的到当前系统的架构的:

在这里插入图片描述
当然可能还会有一些别的信息,比如处理器的型号,核数,又或是32/64位操作系统。这些的都是体系架构的一部分。它们是一个整体。

而在Linux系统下,我们也是可以查询的到的,使用指令uname -a就可以把系统的详细结构展示出来:
在这里插入图片描述
比如我们当前使用的Centos 7.x系统下进行查询,发现内核的三点几的版本。然后是x86_64的架构,其实就是我们常说的64位系统。所以有些系统展示的时候会写成x64。

当然这里是可以查到很多的信息的,如果只想查到系统版本和体系结构,可以使用指令uname -r
在这里插入图片描述
但是需要注意的是,有些系统使用该指令可能查不到版本号,如果查不到建议使用-a选项,这样子可以把电脑和操作系统的信息完整的展示出来。

shutdown指令

这个指令是用来关机的:

语法:shutdown [选项]
常见选项:

-h:将系统的服务停掉后,立即关机。
-r:在将系统的服务停掉之后就重新启动
-t sec:-t 后面加秒数,亦即『过几秒后关机』的意思

但是这里我们要引入一个常识,那就是我们当前使用的是云服务器远程登陆的Linux。而云服务器是永远不会关机的,除非要停机维护:

在云服务器上直接使用 shutdown 或 poweroff 命令通常 不会真正关闭服务器,而是可能导致ssh连接断开,服务器仍然保持运行状态。

反正总而言之就是,建议不要在云服务器上使用这个指令。

history指令

这个指令就厉害了,可以查询到我们历史过往输入过的指令:

在这里插入图片描述
在这里插入图片描述
这也就表明了,其实我们输入的指令是会被Linux系统给记录下来的,要不然没办法做到把历史输入过的命令全部展现出来。

假设我们现在又想使用之前的那个脚本生成一个文件,但是那个脚本命令已经很难通过上下键去翻历史记录了,这个时候我们就可以这样使用:
在这里插入图片描述
使用history指令,将历史记录输入的命令弄到管道文件先,然后再使用grep指令从管道文件中过滤出带while的字符串。这样子就能够找到了。

这是非常方便的。

几个常用的热键

热键,是一些我们在操作Linux系统的时候常用到的一些安检。其实我们以前接触过,比如ctrl + insert代表着复制,shift + insert代表粘贴,又或是ctrl + c代表终止当前程序,回到正常命令行的输入。

这个部分我们一起来盘点一些经常用到的按键,可以有效地帮助我们快速输入指令。

ctrl c和ctrl d

ctrl + c就不用再多说了,已经用过很多遍了,当我们碰到一些很奇怪的状况,或者一些停不下来的程序时,用这个组合键可以帮助终止程序。

ctrl + d是用来退出登陆的:
键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit。

所以如果想要退出当前主机的登录,可以使用这个快捷键:
在这里插入图片描述
得到的是这个logout的提示,然后会显示Connection closed,代表连接断开了。

ctrl + r

前面我们说到了可以使用history指令配合管道文件和grep指令进行搜索想要的,输入过的命令。但是,这样使用只能展现出来,我们如果希望能直接搜到当前这一行,我们可以自行选择修改或者不修改,然后按下Enter就可以运行的呢?

这个时候可以使用快捷键ctrl + r
在这里插入图片描述
系统会进入这个界面,然后我们输入关键字去搜索就好了:
在这里插入图片描述
我们按下回车就可以使用了。

但是这个键其实用的不算特别多,了解一下即可。

Tab按键

这个按键非常好用。有两种用法,我们一个一个来:

1.输入部分关键字,把所有带有这个部分开头的指令找出来
什么意思呢?

比如有一天我想查看,在当前Linux系统下,所有以wh开头的指令有哪些,我们可以现在命令行出输入wh,然后快速地按两下[Tab]键,系统会自动显示:
在这里插入图片描述
特别是有时候我们可能忘了某个指令的名字了,就可以通过这样的方式查一下。

2.自动补全内容:
在这里插入图片描述
假设当前我们目录下有一个很长名字的目录/文件,我们想要对它进行一些操作,那在命令行部分输入它的名字是很痛苦的,这个时候我们就可以输入它的一部分,然后按一次[Tab]键,这个时候系统会帮我们自动补全。

但是如果按一下没办法补全,就说明当前系统认为的是第一种情况,即系统认为你想要找以你输入的开头的所有指令,系统会等待你按下第二次[Tab]键。

在这里插入图片描述
假设当前我输入到这里觉得很困难,就可以按一下[Tab]键,系统可以自动补全:
在这里插入图片描述
从最后一个斜杠可以看出,这个是系统自动补全的。因为如果是自己输入文件进行删除,我们是很少在结尾输入一个/的。这个时候就很方便了。

其实[Tab]键这个作用还是很常见的,Windows系统下其实也会经常用到。这里了解一下。

相关文章:

  • 贫血模型与充血模型:架构设计的分水岭
  • 分库分表内容
  • 智能制造全场景数字化解决方案
  • 跨境电商每周信息差—5.26-5.30
  • 换行符在markdown格式时异常2
  • Ollama(1)知识点配置篇
  • 保险行业数字化应用解决方案
  • DiTAR: Diffusion Transformer Autoregressive Modeling for Speech Generation
  • 网易 - 灵犀办公文档
  • 【术语扫盲】BSP与MSP
  • React 事件处理与合成事件机制揭秘
  • 前端基础之《Vue(17)—路由集成》
  • 正点原子Z20 ZYNQ ​​​开发板​​发布!板载FMC LPC、LVDS LCD和WIFI蓝牙等接口,资料丰富!
  • LangChain表达式(LCEL)实操案例1
  • MathWorks无法注册,显示no healthy upstream(已解决)
  • PyQt6基础_QCharts绘制饼状图
  • 【nn.GroupNorm】
  • MQTT协议,EMQX部署,MQTTX安装学习
  • 苹果签名工具
  • 每天掌握一个Linux命令 - curl
  • 做p2p理财网站/搜索引擎优化岗位
  • 古镇中小企业网站建设/系统优化方法
  • 网站备案抽查通过/网络推广网址
  • 网站收录问题/百度查看订单
  • 株洲网站建设方案咨询/优化营商环境应当坚持什么原则
  • 企业管理软件销售/搜索引擎优化管理实验报告