一. 前言
本篇博客使用的 Linux 操作系统是 centos ,用来学习Linux 的 Linux 系统的内核版本和系统架构信息版本如下所示:
上图的主要结构为:主版本号-次版本号 修正次数,3.10.0 是操作系统的主版本号;当我们在维护一段Linux源代码时,它的修正次数足够多时,次版本号就会递增一次;当次版本号修正足够多时,主版本号就会递增一次。
当次版本号为偶数时,代表着这是稳定版本;当次版本号为奇数时,代表着这是测试版本。
二. 常见的基本指令
1. whoami 指令
whoami 指令的功能是查看自己的云服务器账号名。
输出 root 表示当前是以 超级管理员(root用户) 身份操作系统。若想要为自己的云服务器添加用户,可以使用 adduser 指令,语法格式为:adduser 要添加的用户名;为新添加的云服务器用户设置密码,可以使用 passwd 指令,语法格式为:passwd 用户名,之后便是输入密码,需要注意的是输入的密码并不会在显示器上显示出来,如下所示:
以 wangwu 的身份来访问云服务器,如下图所示:
若想禁止某些用户使用自己的云服务器,可以删除该用户,使用的指令为 userdel ,语法格式为:userdel -r 要删除的云服务器用户,如下所示:
当 wangwu 想访问该云服务器的时,输入访问密码,会出现如下图所示的弹窗:
2. pwd 指令
pwd 指令的功能:查看用户当前所在的目录/路径,如下图所示:
上图所示的 / 称之为 Linux 中的根目录。在 Linux 系统中,标识文件唯一性是通过路径标识的,无论是 windows 还是 Linux 系统,我们登陆成功后都会默认处在一个默认的路径下。
3. mkdir 和 touch 指令
mkdir 指令的语法格式为:mkdir 文件夹/目录,功能为:在当前路径下新建一个空文件夹/目录。怎么知道这个文件夹/目录新建好了呢?可以使用 ls 指令查看当前路径下所存在的文件和文件夹,如下图所示:
若我们想要新建文件,可以使用 touch 指令,该指令的语法格式为:touch 文件名,功能为:在当前路径下新建一个文件,如下所示:
4. ls 指令
ls 指令的功能是:查看当前目录下所存在的文件或文件夹。接下来讲解文件相关的基本知识 --- 若在 Windows 系统中新建一个空文件,这个文件会不会占据磁盘空间?不管是什么文件,文件的属性信息是不是数据?是的,既然是数据,那也就意味着需要空间来存储,所以一个空文件会占据磁盘空间。特别需要注意的是,文件不等于文件内容,文件 = 文件的内容 + 文件的属性(元数据),空文件代表文件的内容为空,文件的属性信息需要空间来存储,所以今后对文件的操作无非是两种操作 —— 对文件的内容操作,对文件的属性操作。那么使用 ls 指令显示的是文件的属性还是内容呢?显示的是文件的文件名,文件名是文件属性,所以 ls 显示的是文件的属性。只不过 ls 默认只显示文件的文件名这一个属性,若想要显示文件的其它属性,使用 ls -l 指令查看一个文件更详细的属性,如下图所示:
0 表示文件的大小 后面的表示文件的创建时间.
除了 -l 选项之外,还有 -l -a,也可以写成 -la 或者 -al ,ls -l -a 指令的功能为:列出当前目录下的所有文件,包括以 . 开头的隐含文件,如下图所示:
上图所示的 . 和 .. 表示的两个隐藏文件,文件名为 . 和 .. 。Linux系统中可以存在隐藏文件,隐藏文件往往以 . 开头;Windows系统中也存在隐藏文件,隐藏文件的图标颜色会浅一些。接下来验证确实存在隐藏文件:创建一个以 . 开头的文件,观察 ls 指令是否能将这个新建的文件显示出来,如下图所示:
在Linux系统当中,文件的类型不由文件的后缀决定。文件的类型由属性的第一个字符决定;文件属性中,以 d 开头的表示该文件为目录文件;以 – 开头的表示该文件为普通文件(普通文件:二进制可执行程序,图片,视频音频等,动静态库)。若想要详细的查看指定文件对应的文件类型,可以输入 file 文件名 指令,如下图所示:
虽然在Linux操作系统当中,文件的类型不由文件的后缀决定,但是不代表Linux不用后缀,文件带上后缀,可读性更强,同时操作系统中的一些工具关心文件的后缀。
5. cd 指令
在了解 cd 指令之前,需要知道 Linux 系统中路径的相关知识 --- 在Linux系统中,磁盘上的文件和目录被组成⼀棵目录树,每个节点都是目录或文件,其中普通文件⼀定是目录树的叶子节点,目录可能是叶子(空目录),也可能是路径上的节点。以前曾提到标识文件唯一性是通过路径标识的,那么为什么路径具有唯一性?因为在多叉树的结构下,任何一个结点只有的一个父结点,所以从根目录到目标文件定位时,路径就是唯一的。路径有两种:一种是绝对路径,一种是相对路径 --- 绝对路径:从根目录开始定位目标文件的路径方式;相对路径:从当前所处的目录为参照点,定位目标文件的路径方式,一旦当前所处的目录发生变化,相对路径可能会失效。那么对于一个确定/具体的相对路径,相对路径能不能保持唯一性?答案是相对路径能唯一标识。绝对路径和相对路径都能对指定的文件进行唯一的路径标识,绝对路径可以理解为是一个确定位置的相对路径,绝对路径是特殊的相对路径。在实践中,对于配置文件,要配置各种路径,建议使用绝对路径;否则,常规操作统一使用相对路径。Linux系统中,一个 . 通常表示当前路径,两个 . 通常表示上级路径。
cd 指令的语法:cd 目录名,功能为:改变工作目录,将当前工作目录改变到指定的目录下。如下图所示:
cd . 指令的功能为:显示当前路径,其中 . 的意义是执行当前路径下的指定程序,如下图所示:
cd .. 指令的作用为:回退到上级路径,如下图所示:
cd 绝对路径 该指令的功能为:切换到目标路径下,如下图所示:
cd ~ 指令的功能为:进入到当前用户的家目录,命令中的 ~ 表示用户的家目录,如下所示:
在centos系统中,root账号的家目录为 /root;普通用户账号的家目录为 /home/xxx。
cd - 指令的功能为:回退到上次所处的路径,如下图所示:
6. tree 指令
tree 路径 的功能为:查看指定路径下文件的树状结构,如下所示:
若发现 tree 指令使用不了,那可能是应为用户的操作系统没有安装 tree 命令,tree 命令系统是默认没有安装的,安装指令为:centos:yum install -y tree;ubantu:apt install -y tree。
7. stat 指令
stat 文件名 指令的功能为:显示指定文件的更多信息,比 ls 指令显示的信息还要多,包括三种时间,简称acm时间,这三种时间分别为访问(access),修改(modify),改变(change),如下图所示:
touch 文件名(已经在当前目录下存在)指令的功能为:更改指定文件的时间,如下图所示:
mkdir -p 要创建的一串目录 指令的功能为:在当前路径下创建一串目录,如下图所示:
8. rm 指令
rm 普通文件的文件名 指令的功能为:删除指定的普通文件(对于管理员,删除文件时会弹出选项,让你选择是否删除,Y/y表示yes,N/n表示no;普通用户不会),如下图所示:
若觉得每次删除文件时都需要自己同意有些麻烦,可以使用 rm -f 普通文件的文件名 指令,该指令的功能为:强制删除指定普通文件(不会弹出选项,让你选择是否删除)。需要注意的是 Linux 中没有回收站,删除的文件不能还原。
以上是删除普通文件的指令,删除文件夹也有对应的指令。rm -r 文件夹的文件名 指令的功能为:删除指定的文件夹(这里的 r 是递归单词的首字母 --- recursion),与使用 rm 普通文件的文件名 指令相同,对于管理员,删除文件时会弹出选项,让你选择是否删除,Y/y表示yes,N/n表示no;普通用户不会,如下图所示:
一个一个同意也太麻烦了吧,有一次性删除指定文件夹的指令吗?rm -rf 文件夹的文件名 指令,该指令的功能为:强制删除指定的文件夹,如下图所示:
知道 rm -rf 指令可以强制删除指定的文件后,有人可能会想可不可以删除根目录呢?当然可以,rm -rf / --- 强制删除根目录(对于云服务器删除根目录之后,可以重装系统)。
总结:删除普通文件时,使用 rm命令;删除文件夹,使用 rm -rf命令。
9. man 指令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机手册获取帮助。man 指令就是用来帮助用户查找开发手册的,语法为:man 选项,若想要查找 tree 指令和 ls 指令,可以使用 man tree 和 man ls 指令,查找结果如下图所示:
按Q键可以退出开发手册。在Linux中 printf 也是一个指令,使用 man printf 指令可以查找到 printf 指令的相关信息,如下图所示:
printf 指令可以格式化显示我们对应的数据,如下图所示:
倘若不清楚 man 指令本身,可以查找开发手册,输入 man man 指令,输入之后可以发现如下图所示的内容:
图中的1~9数字是开发手册的章节编号,输入 man 指令默认从第一章开始查找,第一章找不到会依次往下去查找,输入 man printf 指令时,实际上是就是从第一章找到的 ;输入 man 3 printf 指令时,就从第三章查找,查找的部分内容如下图所示:
最多用到的是第1,2,3章,可能会用到第7章。若有些指令查找不到,可能是系统未安装 man ,安装指令为:Centos版本:yum install -y man-pages;Ubantu版本:apt install -y man-pages。
10. 其它指令
之前曾提到 Linux 系统下一切皆文件,那么理解一下以下两种操作:向显示器打印 和 从键盘读取数据,基于 Linux 系统下一切皆文件来理解,(1)向显示器打印 -- 既然Linux系统下一切皆文件,那么显示器可以理解为是文件,所以向显示器打印可以理解为向显示器文件进行写入;(2)从键盘读取数据 既然Linux系统下一切皆文件,那么键盘可以理解为键盘文件,所以从键盘读取数据可以理解为从键盘文件中读取数据。
1. echo 指令
echo 待打印的数据 指令的功能为:默认往显示器上打印对应的数据,如下图所示:
echo 指令与 printf 指令差不多,只不过 printf 指令支持格式化输出,按照用户的需求去输出对应的数据。既然 echo 指令是默认往显示器上打印数据,那么是否可以控制它往其他文件中打印数据呢?当然可以,对应指令为 echo 数据 > 文件名,功能为:将对应的数据打印至对应的文件中。需要注意的是:若在当前路径下文件不存在,那么会在此路径下新建该文件,并将对应的数据写入至该文件中,如下图所示:
如何知道数据写入至该文件中了呢?使用 cat 指令即可,cat 文件名 功能为:显示指定文件中的内容,如下图所示:
对于 echo 数据 > 文件 指令中的 > ,这里的 > 称之为 输出重定向。
若再次往该文件中写入数据,会发生什么呢?如下图所示:
由上图可以发现,文件中的内容发生了改变,由此我们可以知道,若文件中存在数据,再次往该文件中写入数据时,先将原数据清空,再写入新数据,清空数据后光标会回到起始位置。若只想将文件中的内容清空,该怎么做呢? 输入 >文件名 指令即可。如下图所示:
若想要保留文件中的原数据,向文件中新增内容,该怎么办呢?可以使用 echo 数据 >> 文件名 指令,该指令的功能为:往指定文件中新增数据(会自动将新增数据写入下一行),如下图所示:
echo 数据 >> 文件名 中的 >> 称之为 追加重定向,需要注意的是没有 >>> 。
当我们通过 Xshell 软件登陆我们的云服务器时,我们就会得到终端。既然 Linux 系统下一切皆文件,那么终端也是一个文件,终端文件一般放在 /dev/pts 路径下,如下图所示:
上图只是我们打开了一个终端,若再打开一个终端,结果如下图所示:
若将打开的终端关闭一个,结果如下图所示:
接下来我们再次打开两个终端文件,结果如下图所示:
我们在当前终端中输入 echo “hello Linux” 指令时,是将hello Linux写入至当前终端上,若想将数据写入到其它终端上,可以借助输出重定向,假如想要将数据写入0,1,2号终端,指令可以这样写 --- echo 数据 > /dev/pts/*(数字),分别向 0,1,2号终端写入数据,结果如下图所示:
由此可以知道,不仅可以向普通文件输出重定向,也可以向终端文件输出重定向。
2. cat 指令
cat 文件名 指令的功能为:显示指定文件的内容。如下图所示:
cat -n 普通文件名 指令,功能为:显示查看文件的行数,如下图所示:
cat 指令主要用来查看小文件的内容,倘若查看的内容过长,就会导致刷屏。
cat 指令是正序显示指定文件的内容,与之相对应的是 tac 指令,功能为:逆序显示目标文件中的内容,如下图所示:
在使用 cat 指令时,后面的选项是用户自己输入,倘若不输入,直接按下回车键,那么输入光标会停在该行的开头,等待用户的输入;之后,用户输入什么,就在显示器上输出什么,如下图所示:
这是从键盘文件上读取数据,那么可以从其它文件中获取数据吗?可以,cat < 文件名 指令,该指令的功能为:从指定文件中读取数据,将其输出到显示器上,如下图所示:
cat < 文件名中的 < 称之为 输入重定向。
3. cp 指令
cp 指令的语法为:cp [ 选项 ] 源文件或目录 目标文件或目录,功能为:将源头文件中的数据拷贝到目标文件中(可以带路径)。
若目标文件不存在,则会在当前路径下新建该文件,并将数据拷贝到该文件中,如下图所示:
若不指定目标文件,指定一条路径,则会在该路径下,新建与源头文件同名的文件,并将源头文件中的数据拷贝到该文件中,如下图所示:
之前拷贝的是一个普通文件,若拷贝一个目录呢?并且目录不为空呢?则需要指令 --- cp -rf 源目录 目标目录(可以带路径),功能为:(强制将源目录中的内容拷贝到目标目录中)若目标目录不存在,则会新建目标目录,再将源目录中的内容拷贝到目标目录中。如下图所示:
4. mv 指令
mv 指令是 move 的缩写,可以用来移动文件或者将文件改名;语法为:mv [ 选项 ] 源文件或目录 目标文件或目录,功能有多种:
1. 若目标文件/目录为路径,则将源文件/目录,移动到该路径下,如下图所示:
需要注意的是移动目录时,不需要 -rf,这与 cp 和 rm 不一样。
2. 若目标文件/目录为具体的文件/目录的名称,则将源文件/目录的名称重命名为目标文件/目录的名称,如下图所示:
3. 若目标文件为路径+目录名,且该目录并不存在,则将源目录移动至该路径下,并将源目录的文件名重命名,如下图所示:
5. less head tail 指令
在介绍 less head tail 指令之前,先向 test.txt 文件中写入 0~1000 的数字,使用指令:cnt=0; while [ $cnt -le 1000 ]; do echo "hello ${cnt}"; let cnt++; done 。
1. less 指令
less 文件名 指令的功能为:查看文件内容时,不会加载整个文件;支持上下查看指定文件的内容(按上下键,或者回车键(下翻)),查看内容的同时也支持搜索关键字(搜索方式 -- /关键字),按n键会跳转到具有关键字的下一行。按Q键退出查看状态。
2. head 指令
head -参数 文件名 功能为:查看文件的前参数行的内容,如下图所示:
若不写参数,默认查看文件的前10行的内容,如下图所示:
3. tail 指令
tail -参数 文件名 功能为:查看对应文件的后参数行的内容,如下图所示:
若不写参数,默认查看文件的后10行的内容,如下图所示:
6. 管道 |
知道如和查看文件的开头和结尾的内容了,那么文件的中间内容怎么查看呢?假设文件中共有1001行内容,想要查看第500行到第510行的内容,应该怎么做?可以先将文件中的0~510行的内容拷贝到另一个文件中,再读取第500行到510行的内容,具体的操作如下图所示:
倘若要查看的内容很多呢?岂不是每次查看这些内容时,都需要一个临时文件,然后再tail一下?实际上不需要这么麻烦,借助管道 | 即可,具体操作如下图所示:
这样一来根本不需要临时文件,就可以查看第500行到510行的内容了。我们将这种可以集联指令的 | 称之为管道;管道顾名思义有一个或多个出入口构成,专门用来传送资源的,在计算机中,数据就是资源,之前曾提到在Linux中一切皆为文件,那么head -511 test.txt | tail -11 指令可以理解为将head-511 test.txt 获取的数据写入至管道文件中,然后tail -11 再从管道文件中获取数据。根据 | 的功能,我们可以通过 | 集联各种指令来达到用户想要的效果(指令的执行是从左往右),单独的指令看起来功能不怎么行,但是多个指令的联合使用效果就很显著了。
11. 时间相关的指令
1. date 指令
date 指令的功能为:显示Linux系统的当前时间,如下图所示:
用户可以设定想要显示的格式,格式设定为⼀个加号后接数个标记,如:%H:小时(00..23),%M:分钟(00..59),%S:秒(00..61),%X:相当于%H:%M:%S,%d:日(01..31),%m:月份(01..12),%Y:完整年份(0000..9999),%F:相当于%Y-%m-%d(- 换成 / 也可以)。这些都并不常用,最常用的是 date +%s 指令,功能为:获取当前计算机的时间戳,如下图所示:
上图所显示的一串数字 1755176746 就是时间戳,什么是时间戳呢?Unix时间戳是从1970年1月1日的午夜(UTC/GMT的午夜)(0时0分0秒)开始所经过的秒数,不考虑闰秒;时间戳的本质就是一个计数器,每隔1秒就增加1。
若已经获取到了时间戳,如何将其转化为用户所能理解的年月日的形式呢?将时间戳转化为时间的指令为:date 想要显示的时间格式 -d @时间戳,如下图所示:
若将时间戳输入为0,会产生什么结果呢?如下图所示:
咦?时间戳不是从1970年的1月1日0时0分0秒开始计时吗?这里的时为什么是8时?因为这里显示的北京时间,北京位于东八区,这里的8时是时差。
2. cal 指令
cal 指令的功能为:显示公历(阳历)日历,语法格式为: cal 参数;主要用到的参数有:-3,-j,-y,下面分别使用这三个参数。
-3 功能为:显示系统前⼀个月,当前月,下⼀个月的月历;若不添加 -3,单独的 cal 指令显示的结果是当前月份的天数,如下图所示:
-j 功能为:显示在当年中的第几天(⼀年日期按天算,从1月1号算起,默认显示当前月在⼀年中的天数),使用结果如下图所示:
-y 功能为:显示当前年份的日历,使用结果如下图所示:
若想要查看某一年的日历,在 cal 指令的后面加上要查看的年份即可。
12. 查找相关的指令
1. find 指令
find 指令的语法为:find 路径 选项,功能为:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)。常用选项为:-name ,功能为:按照文件名查找文件,如下图所示:
此外还可以像下图所示使用:
查找的结果都是以 .txt 为后缀的文件,其中*称之为通配符,使用通配符时需要用单引号或者双引号将其引用。
find 指令不仅可以用来查文件,也可以查指令。接下来查一下 ls 指令,如下图所示:
一开始查 ls 指令时,会发现很慢,这是因为 find 是在目录树中查找的。观察查看的结果,发现 ls位于 /usr/bin/ls 路径下,那么目录中是否存在该路径呢?
由上图可以发现,目录中确实存在着这么一条路径;这样是否可以说明我们所学习的指令实际上就是文件,所以使用 ls 指令时,也可以写成路径的形式 /usr/bin/ls ,如下图所示:
总结:大部分指令的本质是Linux系统中固定目录下的可执行文件。
为什么说是大部分指令,而不是所有指令呢?就目前学习的指令中,cd 指令就不是可执行文件,如下图所示:
2. which 指令
find 指令是广泛查找文件/指令,除此之外 Linux 系统还提供了专门用来查找指令的指令 --- which 指令,该指令语法格式为:which 指令,功能为:搜索系统指定的命令。功能结果如下图所示:
使用 which 指令来查找对应的指令会发现比 find 快许多,因为 which 指令默认在 /usr/bin/ 路径下查找,所以 which 指令相当与 find /usr/bin -name xxx(usr 是 user 用户的意思,bin 是 binary 二进制的意思)。那么之后是否可以将用户自己编写的可执行文件拷贝到 /usr/bin/ 路径下,再在桌面上生成一个快捷方式?可以,但是不建议,因为这样会污染系统的命令池。之后访问自己编写的可执行文件时,在文件的前面加上 ./ 。
3. whereis 指令
除了 find 和 which 指令之外,还有 whereis 指令,它是介于 find 指令和 which 之间,它的功能为:用于找到程序的源、⼆进制文件或手册。功能结果如下图所示:
Whereis 查找的路径范围比 which 广,但是 whereis 指令用得非常少。
4. alias 指令
在使用 which 指令查找 ls 指令时,结果为:
上图中的 /usr/bin/ls 我们见过了,但是 alias ls=’ls –color=auto’ 是什么?alias ls=’ls -color=auto’ 中的 alias 是别名的意思,alias 指令的语法格式为:alias 别名='指令'。Linux系统允许给一个指令或者一个指令带若干个选项进行取别名操作。下面实际的使用 alias 指令,给 ls -a -l 取别名为 AY,之后使用 AY ,就能得到与 ls -a -l 指令一样的功能,如下图所示:
接下来对比 ls 和 /usr/bin/ls 之间的区别,如下图所示:
由上图可以发现使用 ls 查看的结果,文件夹显示的彩色;而使用 /usr/bin/ls 查看的结果,文件夹不是彩色,这又是为什么?这是因为使用 ls 指令时,实际上使用的是 alias ls=’ls --color=auto’。
总结:在执行指令时,会优先搜索别名,不会再在/usr/bin/xx。
别名设置好了,如何取消别名呢?将别名设置为空即可,如:alias AY=''。如下图所示:
对一条指令取别名之后,那么别名存在哪呢?是以怎样的形式存在呢?是否存在于 /usr/bin/ 路径下呢?接下来进行验证,对 ls –color=auto 起别名为 AY ,验证结果如下图所示:
由上图可以发现 AY 的功能与 ls 的一样,但是 AY 却不存在于 /usr/bin/ 路径下,接下来我们再打开一个终端,使用 AY,会发现如下图所示的结果:
找不到AY指令,这是为什么呢?因为用户取的别名是内存级的,不存在与真实的文件之中,重新登陆之后就没有了。介绍了 alias 指令,那么在实际过程中如何使用它呢?在实际使用中,不要随意的对指令取别名,特殊的情况下使用alias指令。
5. grep 指令
grep 指令的语法格式为:grep [ 选项 ] 搜寻字符串 文件,功能为:功能:用来执行文本处理的命令,它这个工具称之为行文本过滤工具根据提供的关键字,把一个大文本当中包含该关键词的内容,以行数打印出来。接下来来演示其功能,将 test.txt 文件中包含‘55’关键字的内容打印出来,结果如下图所示:
grep 指令也可以和其它的指令搭配使用,如打印10行到100行之间包含5的内容,结果如下图所示:
grep 指令常用的选项有:-v,-n,-i;接下来逐一介绍:
-v 选项其功能为:反向选择,亦即显示出没有'搜寻字符串'内容的那一行,如不打印10行到20行之间包含5的内容,结果如下图所示:
-n 选项其功能为:顺便输出行号,如下图所示:
grep 默认对大小写敏感,若想要忽略大小写的不同,可以使用选项 -i 选项。
grep 指令的世家应用场景:查看日志信息,进程。ps axj 指令的功能为:查看系统的所有进程,部分查看结果如下图所示:
打印进程中包含 ‘ssh’ 关键字的信息,如下图所示:
13. top 指令
top 指令的功能为:查看操作系统当前所执行的任务(与windows系统中的任务管理器一样),部分查看信息如下图所示:
按 Q 键退出查看。top 指令的相关选项:-d: 刷新的时间间隔;-n: 刷新的次数,如:top -d 2 -n 4 的意思为每隔2秒刷新一次,总共刷新4次,如下图所示:
此外还有 top 指令的升级版指令 --- htop 指令,该指令系统中默认没有安装该指令,安装指令为:Centos版本:yum install htop Ubuntu版本:apt install htop。部分查看信息如下图所示:
按 Q 键退出查看。
14. 打包和压缩指令
打包的意思为:把多个文件或文件夹收集到一起,变成一个单一的文件;目的:将许多零散的文件整合成一个单独的文件,便于管理和传输。压缩的意思为:把文件或文件夹的体积变小,以节省存储空间或便于传输;目的:通过特定的算法,减小文件的大小(体积),以节省硬盘空间或减少网络传输时间。
1. zip 和 unzip 指令
zip 指令的语法为: zip 压缩文件.zip 目录或文件,功能为:将目录或文件压缩成zip格式;unzip 指令的语法为:unzip 压缩文件,功能为:将压缩包解压缩。zip 和 unzip 在系统上可能是默认没有安装的,安装指令为:Centos环境:yum install -y zip unzip Ubuntu 环境:apt install -y zip unzip。接下来讲解打包非空目录,将一个非空目录压缩成 zip 格式,打包压缩单独的文件的方法与非空目录并无二异,如下图所示:
将非空文件 test 打包成 test.zip ,这样在根目录下就生成了 test.zip 压缩包,将该压缩包移动到 8_15 文件夹中,接下来对该压缩包解压缩,解压缩结果如下图所示:
发现解压缩之后只有 test 文件夹,其中的 a,b,c,d 文件夹呢?我们的目的是将 test 文件夹中的内容压缩为一个压缩包,现在由结果来看,简单的 zip test.zip test 操作并没有达到我们的目的,为什么不能呢?因为目录是一个树状结构,要想打包压缩,需要递归式的打包压缩,所以要想将整个test 文件打包压缩需要这样写 zip -r test.zip test,即打包压缩非空文件的指令为 zip -r 压缩文件.zip 非空文件。接下来再次压缩 test 文件,如下图所示:
将 test.zip 文件夹移动到 8_15 文件夹中,下面来解压缩该压缩包,观察是否达到了我们的目的:
若想将多个文件压缩成一个压缩包,指令需要这样写 zip -r 压缩文件.zip 多个文件,将 exp.txt hello.txt linux.txt 压缩为 linux.zip 压缩文件,如下图所示:
我们解压缩 test.zip 时,默认解压到当前的路径下,若想要解压缩到指定文件中,指令需要这样写 unzip 压缩文件 -d 指定的目录/路径,将 linux.zip 解压缩到 8_15 文件夹的 test 文件夹中,如下图所示:
2. rz 和 sz 指令
这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件,系统是默认没有安装这两个指令的,安装指令为:Centos环境:yum install -y lrzsz Ubuntu环境:apt install -y lrzsz。现在将 windows 机器中的图片通过 Xshell 传输到 Linux 机器上,输入 rz 指令,再回车,就会弹出窗口,要你选择传输的文件,如下图所示:
传输完毕后,会弹出如下图所示的窗口:
之后可以再根目录下查看到我们上传的文件,如下图所示:
若传输的文件中包含文字信息,需要用 rz -E 指令。
除此之外,还可以将要传输的文件拖拽到 XShell 上,Linux 会自动调用 rz -E 指令,如下图所示:
rz 指令介绍完毕后,接下来介绍 sz 指令,先创建一个 hello.c 的文件,再输入 sz hello.c 指令,会弹出一个窗口,如下图所示:
sz 指令是将 Linux 机器上的文件传输到 windows 机器上,弹出的窗口需要你选择将 hello.c 文件传输到哪一路径下,比如我选择传输到桌面上,传输完毕的结果为:
现在在我的桌面上就存在着 hello.c 文件,如下图所示:
在介绍 zip 和 unzip 指令时,生成了 linux.zip 压缩包,现在将该压缩包传输到 windows 机器的桌面上,如下图所示:
之后桌面上就存在着 linux.zip 压缩包,如下图所示:
解压缩该压缩包,其中的内容如下图所示:
3. tar 指令
tar 指令尤其重要,在linux系统下,大部分压缩包的文件形式是 .tar.gz 简写为 tgz 。tar 指令的语法格式为: tar 参数 文件或目录,常用参数及其功能:-c:建立⼀个压缩文件(create的意思);-z:打包的同时并且压缩;-f:f 后面紧跟的就是文档名,不能再加参数;-v:显示压缩过程;-x:解压缩文件,以上的参数平常是一起使用的,最常见的组合为:czf 和 xzf,语法格式分别为:tar czf 压缩文件.tgz 文件,tar xzf 压缩包。下面将 8_15 文件夹中的 test 文件压缩为 test.tgz压缩包,如下图所示:
使用 tar 指令生成压缩包时,并没有像使用 zip 指令时显示压缩过程,若想要显示压缩过程,选项为 cvzf ,语法格式为:tar cvzf 压缩文件.tgz 文件,如下图所示:
接下来使用 xzf 参数对 test.tgz 压缩包进行解压,如下图所示:
若想要将压缩包解压到指定文件中,需要指令 tar xzf 压缩包 -C 指定文件,如下图所示:
总结:压缩:tar czf target.tgz xxx 解压缩:tar xzf target.tgz。
4. 其它
如何确定自己的机器是 Ubuntu 还是 Centos?Centos环境---输入指令:cat /etc/redhat-release;Ubuntu环境---输入指令:cat /etc/lsb*,我的机器输入指令之后的结果如下图所示:
还有其它的指令,如 cat /etc/os-release,这个方法更简洁,我的机器显示的结果如下图所示:
若想要在两台 Linux 机器上进行传输工作,需要用到指令:scp src.tgz 用户名@目标云服务器(ip地址):目标路径,之后会显示 password ,需要你输入目标云服务器特点账号(用户名)的密码,并且密码不回显。
15. bc 指令
bc指令的功能为:计算(浮点数也可以),如下图所示:
输入 quit 或者 ctrl + c 终止该指令。
16. 系统信息查询指令
如果有人问:如何查看你的 Linux 机器的体系结构?这本质上问的是如何查看你的 Linux 机器的CPU 架构,再终端输入 uname -m 指令即可。
1. uname -a 指令
uname -a 指令的功能为:打印当前操作系统的主要信息,我的操作系统的查看结果如下图所示:
Linux含义:表示您使用的操作系统内核是Linux区别于其他系统(如 Windows 的 NT 内核或 macOS 的 Darwin 内核);hcss-exs-3ea8 是这台服务器在网络中的主机名(我的云服务器是华为云的);3.10.0:这是主内核版本号;-1160.119.1:这是发行版(此处是 Red Hat/CentOS)为内核添加的定制和补丁版本号 ;el7 是centos_release7的简写,所以el7就表示该机器为centos环境;.x86_64:表示这是一个为 64 位 x86 架构处理器编译的内核;Tue Jun 4 14:43:51 UTC 2024:这是编译构建该内核的确切时间(2024年6月4日,星期二,UTC时间14:43:51)。
Windows操作系统也可以查看其基本信息,鼠标选择此电脑,点击鼠标右键,点击属性,即可查看。
2. uname -r 指令
uname -r 指令的功能为:显示当前机器的内核版本和架构,如下图所示:
X86 是32位机器,x86_64 是64位机器,有些人的 X86_64 可能会显示为 X64 。
3. 其它指令
查看 cpu 的信息 --- 输入指令:cat /proc/cpuinfo,显示的部分信息如下图所示:
查看内存的信息 --- 输入指令:cat /proc/meminfo,显示的部分信息如下图所示:
lscpu 指令的功能为:显示CPU(中央处理器)架构信息,显示的部分信息如下图所示:
17. shutdown 指令
云服务器的关机指令:shutdown 选项,常见选项: -h --- 将系统的服务停掉后,立即关机;-r ---在将系统的服务停掉之后就重新启动;-t sec --- -t 后面加秒数,即过几秒后关机的意思。但是建议云服务器不要关机,云服务器禁止关机;倘若云服务器被你关机了,可以去相关的云服务器平台上查找,会有网页端的开机操作。
三. 结言
除了常用的指令之外,还有常用的快捷方式,接下来逐一介绍:
ctrl + R 作用为:搜索历史命令,按上下键进行上下搜索;若搜素到了目标指令,按Tab键就会在机器上显示出来,按下回车键,就会执行该指令。
! 在 Shell 中称作历史扩展或事件指示器,它的主要功能为:快速调用、修改或重复之前执行过的命令。主要使用 !指令的开头字母,其功能为:执行以特定字符串开头的最近一条命令,如下图所示:
以及 !! ,其功能为:执行上一条命令,如下图所示:
前文介绍的指令只是我们学习 Linux 系统中的一部分,随着后续的学习,掌握的指令也会越来越多,指令只要多用,用着用着就熟悉了。