0
点赞
收藏
分享

微信扫一扫

初学者应该掌握的Linux命令

妖妖妈 2022-05-05 阅读 122

目录

一、前言

二、强大好用的SHELL

三、 执行命令的必备知识

四、常用系统工作命令

五、系统状态检测命令

六、查找定位文件命令

七、文本文件编辑命令

八、文件目录管理命令


 一、前言

        首先介绍系统内核和Shell终端的关系与作用,然后介绍Bash解释器的4大优势并学习Linux命令的执行方法。经验丰富的运维人员能够通过合理地组合适当的命令与参数,来更精准地满足工作需求,迅速得到自己想要的结果,还可以尽可能地降低系统资源消耗。

        本文精挑细选出读者有必要首先学习的数十个Linux命令,它们与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。

二、强大好用的SHELL

        一台完整的计算机是由运算器、控制器、存储器、输入/输出等多种硬件设备共同组成的,而能让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用。

        与修改Windows系统中的注册表类似,直接改动内核参数的难度比较大,而且一旦“手滑”还有可能导致系统直接崩溃。因此不建议同学们直接去编辑内核中的参数,而是用基于系统调用接口开发出来的程序或服务来管理计算机,以满足日常的工作需要。

        如图2-1所示,人类是无法直接控制硬件的(想象一个人捧着块硬盘自言自语的滑稽场景)。硬件设备由系统内核直接管理,但由于内核的复杂性太高,在访问时存在较大的风险,因此用户不能直接访问内核。虽然通过调用系统提供的API(应用程序编程接口)就能实现某个功能,但哪怕实现“将一条信息通过互联网传输给别人”这样简单的任务,都要手动调用几十次API接口,使用起来太不切实际。而最外层的服务程序则是最贴近于用户端的,这些服务程序是集成了大量API接口的完整软件,微信、QQ就是这样的服务程序。

                                                                图2-1 用户与硬件

        讲到这里,相信大家已经能够明白服务程序对用户和硬件所能发挥的作用了。如果把整台电脑比喻成人类社会,那么服务程序就是一名翻译官,负责将用户提出的需求转换成硬件能够接收的指令代码,然后再将处理结果反馈成用户能够读懂的内容格式。这样一来一回,用户就能使用硬件资源了。 

        看到被一层层“包裹”起来的硬件设备,大家有没有感觉像一只蜗牛的壳呢?英文中的壳叫作Shell,我们在行业中也将用户终端程序称之为Shell,方便好记。

        Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器,这个Bash解释器主要有以下4项优势:

大家可以在今后的学习和生产工作中细细体会Linux系统命令行的美妙之处,真正从心里爱上它们。

        必须肯定的是,Linux系统中有些图形化工具(比如逻辑卷管理器[Logical Volume Manager,LVM])确实非常好用,极大地降低了运维人员出错的概率,值得称赞。但是,很多图形化工具其实只是调用了命令脚本来完成相应的工作,或往往只是为了完成某种特定工作而设计的,缺乏Linux命令原有的灵活性及可控性。再者,图形化工具相较于Linux命令行界面会更加消耗系统资源,因此经验丰富的运维人员甚至都不会给Linux系统安装图形界面,在需要开始运维工作时直接通过命令行模式远程连接过去。不得不说,这样做确实挺高效的。

三、 执行命令的必备知识

既然Linux系统中已经有了Bash这么好用的“翻译官”,那么接下来就有必要好好学习一下怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根据实际情况来灵活调整各种命令的参数。比如,我们切寿司时尽管可以用菜刀,但米粒一定会撒得满地都是,因此寿司刀上设计的用于透气的圆孔就是为了更好地适应场景而额外增加的参数。当您学完本书并具备一定的工作经验之后,一定能够领悟Linux命令的奥秘。

常见的执行Linux命令的格式是下面这样的。

命令名称:就是语法中的“动词”,表达的是想要做的事情,例如创建用户、查看文件、重启系统等操作。

命令参数:用于对命令进行调整,让“修改”过的命令能更好地贴合工作需求,达到事半功倍的效果。就像买衣服一样,衣服的尺码总会感觉偏大或偏小,要么只能将就着穿,要么就再裁剪修改一下,而这种对命令进行“裁剪”的行为就是加参数。例如创建一个编码为888的用户、仅查看文件的前20行、重启系统前先提醒其他用户等。参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用“--”与“-”作为前缀(示例请见表2-1)。

                                        表2-1  Linux命令参数的长格式与短格式示例

长格式man --help
短格式man -h

命令对象:一般指要处理的文件、目录、用户等资源名称,也就是命令执行后的“承受方”。例如创建一位叫小明的用户、查看一个叫工资表的文件、重启一个IP为192.168.10.10的系统等。

在Linux相关的图书中,我们会约定俗成地将可选择的、可加或可不加的、非必需的参数使用中括号引起来,例如“man [命令参数]”;而命令所要求的、必须有的参数或对象值,则不带中括号。这样一来,读者可以更好地理解下面出现的命令格式。

在初学Linux系统时不会执行命令大多是因为参数比较复杂,参数值需要随不同的命令和实际工作情况而发生改变。所以有读者现在可能会想:“Linux系统中有那么多命令,我怎么知道某个命令是干嘛用的?在日常工作中遇到了一个不熟悉的Linux命令,我又怎样才能知道它有哪些可用参数呢?”接下来,我们就拿man这个命令作为本书中的第一个Linux命令教给读者去学习。对于真正的零基础读者,可以通过图2-2~图2-5来学习如何在RHEL 8系统中执行Linux命令。

默认的主机登录界面中只有我们刚刚新建的普通用户,因此在正式进入系统之前,还需要先单击“Not listed?”选项切换至root管理员身份。这是红帽RHEL 8系统为了避免用户乱使用权限而采取的一项小措施,如图2-2所示。

                                                        图2-2 切换至root管理员身份

         如果使用默认的linuxprobe用户登录到主机中,那么本章后面的一些命令会因为权限不足而无法执行,我们需要有足够的权限才能完成接下来的实验。至于同学们关心的“root管理员和普通用户之间的区别,在生产环境时又该如何选择”的疑问,将会在第5章慢慢讲给大家。

登录成功后,单击桌面左上角的Activities按钮,在左侧弹出的菜单中单击命令行终端图标即可打开Bash解释器,如图2-3所示。

                                                               图2-3 打开命令行终端

在命令行终端中输入man man命令来查看man命令自身的帮助信息,如图2-4所示。

                                                                图2-4 查看man命令的帮助信息

 敲击回车键后即可看到如图2-5所示的帮助信息。

                                                        图2-5 man命令的帮助信息

         小试牛刀成功。大家是不是热情倍增!不过还是要注意Linux系统中的命令、参数、对象都是严格区分大小写的。比如,分别执行几次man命令,大家能看得出来哪个是正确的吗?

在man命令帮助信息的界面中,所包含的常用操作按键及其作用如表2-2所示。

                                                表2-2 man命令中常用按键以及作用

按键作用
空格键向下翻一页
PaGe down向下翻一页
PaGe up向上翻一页
home直接前往首页
end直接前往尾页
/从上至下搜索某个关键词,如“/linux”
?从下至上搜索某个关键词,如“?linux”
n定位到下一个搜索到的关键词
N定位到上一个搜索到的关键词
q退出帮助文档

一般来讲,使用man命令查看到的帮助内容信息都会很长很多,如果读者不了解帮助文档信息的目录结构和操作方法,乍一看到这么多信息可能会感到相当困惑。man命令的帮助信息的结构及其代表意义如表2-3所示。

表2-3                                         man命令中帮助信息的结构以及意义

结构名称代表意义
NAME命令的名称
SYNOPSIS参数的大致使用方法
DESCRIPTION介绍说明
EXAMPLES演示(附带简单说明)
OVERVIEW概述
DEFAULTS默认的功能
OPTIONS具体的可用选项(带介绍)
ENVIRONMENT环境变量
FILES用到的文件
SEE ALSO相关的资料
HISTORY维护历史与联系方式

需要多说一句的是,在输入命令前就已经存在的“[root@linuxprobe~]#”这部分内容是终端提示符,它用于向用户展示一些基本的信息—当前登录用户名为root,简要的主机名是linuxprobe,所在目录是~(这里的~是指用户家目录,第6章会讲解),#表示管理员身份(如果是$则表示普通用户,相应的权限也会小一些)。

额外的4个快捷键/组合键小技巧

Tab键

在Bash解释器的快捷键中,Tab键绝对是使用频率最高的,它能够实现对命令、参数或文件的内容补全。例如,如果想执行reboot重启命令,但一时想不起来该命令的完整拼写,则可以这样输入:

在上面的实验中,先输入了两个字母re,随后敲击了两下Tab键。由于以re开头的命令不止一个,所以系统将所有以re开头的命令全部显示了出来。而第二次输入reb后再敲击Tab键,由于此时没有以reb开头的其他命令,所以系统就显示出了完整的reboot重启命令。

对于文件名也是一样的操作—只需要输入前面的一部分名称,且不存在多个以这部分名称开头的文件名,系统就会自动补全。不仅速度快,而且避免了手动输入有可能出错的问题。

Ctrl+c组合键:当同时按下键盘上的Ctrl和字母c的时候,意味着终止当前进程的运行。假如执行了一个错误命令,或者是执行某个命令后迟迟无法结束,这时就可以冷静地按下Ctrl+c组合键,命令行终端的控制权会立刻回到我们手中。

下述命令的执行效果是每1s刷新一次系统负载情况(先不用管命令的作用),直到按下Ctrl+c组合键时才停止运行。

Ctrl+d组合键:当同时按下键盘上的Ctrl和字母d的时候,表示键盘输入结束。

Ctrl+l组合键:当同时按下键盘上的Ctrl和字母l的时候,会清空当前终端中已有的内容(相当于清屏操作)。

从现在开始,本书后面的内容都是重磅内容。本书将会带领读者掌握大约150个常用的Linux命令,以及50多个热门的命令。这50多个热门的命令是以Linux命令大全网(www.linuxcool.com)的查询阅览量为基础筛选出来的。当然,将这些命令全都放到第2章讲完肯定不现实,所以刘遄老师根据10多年来的运维经验优先筛选出了10多个高频使用的基础命令。由于后面的章节中会反复用到这些命令,因此大家需要好好学习并掌握它们,这样才能在后面章节的学习中做到游刃有余。加油!

四、常用系统工作命令

您现在阅读的这本书是刘遄老师在经历了数十期的培训授课后总结而成的,您可能无法在本节中找到某些之前见过的命令。但不用担心,之所以这样安排,原因是我们在努力地将Linux命令与实战相结合,真正让读者在实操中理解技术,而不是单纯地把命令堆砌到书中让读者去硬背。

刘遄老师用了近一年的时间把最常用的Linux命令进行汇总、归纳、整理、分类后,把这些常用的命令合理安排到了后续章节中,然后采用以练代学的方式来加深读者的理解和掌握。从数年的培训成果反馈来看,这种方式相当有效,因此也相信这种方式肯定适合您的学习。

1.echo命令

echo命令用于在终端设备上输出字符串或变量提取后的值,语法格式为“echo [字符串] [$变量]”。

这是Linux系统中最常用的几个命令之一,它的操作却非常简单,执行“echo字符串”或“echo $变量”就行,其中$符号的意思是提取变量的实际值,以便后续的输出操作。

例如,把指定字符串“LinuxProbe.com”输出到终端屏幕的命令为:

该命令会在终端屏幕上显示如下信息:

下面使用“$变量”的方式提取出变量SHELL的值,并将其输出到屏幕上:

2.date命令

date命令用于显示或设置系统的时间与日期,语法格式为“date [+指定的格式]”。

用户只需在强大的date命令后输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大致了解到每个文件的备份时间了。date命令中常见的参数格式及其作用如表2-4所示。

表2-4                                               date命令中的参数及其作用

参数作用
%S秒(00~59)
%M分钟(00~59)
%H小时(00~23)
%I小时(00~12)
%m月份(1~12)
%p显示出AM或PM
%a缩写的工作日名称(例如:Sun)
%A完整的工作日名称(例如:Sunday)
%b缩写的月份名称(例如:Jan)
%B完整的月份名称(例如:January)
%q季度(1~4)
%y简写年份(例如:20)
%Y完整年份(例如:2020)
%d本月中的第几天
%j今年中的第几天
%n换行符(相当于按下回车键)
%t跳格(相当于按下Tab键)

按照默认格式查看当前系统时间的date命令如下所示:

按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date命令如下所示:

将系统的当前时间设置为2020年11月1日8点30分的date命令如下所示:

再次使用date命令并按照默认的格式查看当前的系统时间,如下所示:

date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的早晚,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:

3.timedatectl命令

timedatectl命令用于设置系统的时间,英文全称为“time date control”,语法格式为“timedatectl [参数]”。

发现电脑时间跟实际时间不符?如果只差几分钟的话,我们可以直接调整。但是,如果差几个小时,那么除了调整当前的时间,还有必要检查一下时区了。timedatectl命令中常见的参数格式及作用如表2-5所示。

表2-5                                               timedatectl命令中的参数以及作用

参数作用
status显示状态信息
list-timezones列出已知时区
set-time设置系统时间
set-timezone设置生效时区

查看系统时间与时区的方法如下:

如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:

如果时间还是不正确,可再手动修改系统日期:

而如果想修改时间的话,也很简单:

4.reboot命令

reboot命令用于重启系统,输入该命令后按回车键执行即可。

由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好是以root管理员的身份来重启,普通用户在执行该命令时可能会被拒绝。reboot的命令如下:

5.poweroff命令

poweroff命令用于关闭系统,输入该命令后按回车键执行即可。

与上面相同,该命令也会涉及硬件资源的管理权限,因此最好还是以root管理员的身份来关闭电脑,其命令如下:

6.wget命令

wget命令用于在终端命令行中下载网络文件,英文全称为“web get”,语法格式为“wget [参数] 网址”。

借助于wget命令,可以无须打开浏览器,直接在命令行界面中就能下载文件。如果您没有Linux系统的管理经验,当前只需了解一下wget命令的参数以及作用,然后看一眼下面的演示实验就够了,切记不要急于求成。后面章节将逐步讲解Linux系统的配置管理方法,可以等掌握了网卡的配置方法后再来进行这个实验操作。表2-6所示为wget命令中的参数以及参数的作用。

表2-6                                                wget命令中的参数以及作用

参数作用
-b后台下载模式
-P下载到指定目录
-t最大尝试次数
-c断点续传
-p下载页面内所有资源,包括图片、视频等
-r递归下载

尝试使用wget命令从本书的配套站点中下载本书最新的PDF格式的电子文档。执行该命令后的下载效果如下:

接下来,使用wget命令递归下载www.linuxprobe.com网站内的所有页面数据以及文件,下载完后会自动保存到当前路径下一个名为www.linuxprobe.com的目录中。该命令的执行结果如下:

7.ps命令

ps命令用于查看系统中的进程状态,英文全称为“processes”,语法格式为“ps [参数]”。

估计读者在第一次执行这个命令时都要惊呆一下—怎么会有这么多输出值,这可怎么看得过来?其实,高手通常会将ps命令与第3章的管道符技术搭配使用,用来抓取与某个指定服务进程相对应的PID号码。ps命令的常见参数以及作用如表2-7所示。

表2-7                                                  ps命令中的参数以及作用

参数作用
-a显示所有进程(包括其他用户的进程)
-u用户以及其他详细信息
-x显示没有控制终端的进程

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux系统中有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

除了上面5种常见的进程状态,还有可能是高优先级(<)、低优先级(N)、被锁进内存(L)、包含子进程(s)以及多线程(l)这5种补充形式。

当执行ps aux命令后通常会看到如表2-8所示的进程状态。表2-8只是列举了部分输出值,而且正常的输出值中不包括中文注释。

表2-8                                                            进程状态

USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
进程的所有者进程ID号运算器占用率内存占用率虚拟内存使用量(单位是KB)占用的固定内存量(单位是KB)所在终端进程状态被启动的时间实际使用CPU的时间命令名称与参数
root10.00.524474010636?Ss07:540:02/usr/lib/systemd/
systemd --switched-root --system --deserialize 18
root20.00.000?S07:540:00[kthreadd]
root30.00.000?I<07:540:00[rcu_gp]
root40.00.000?I<07:540:00[rcu_par_gp]
root50.00.000?I<07:540:00[kworker/0:0H-kbl
root60.00.000?I<07:540:00[mm_percpu_wq]
root70.00.000?S07:540:00[ksoftirqd/0]
root80.00.000?I07:540:00[rcu_sched]
root90.00.000?S07:540:00[migration/0]
………………省略部分输出信息………………

8.pstree命令

pstree命令用于以树状图的形式展示进程之间的关系,英文全称为“process tree”,输入该命令后按回车键执行即可。

前文提到,在执行ps命令后,产生的信息量太大又没有规律,很难让人再想看第二眼。如果想让进程以树状图的形式,有层次地展示出进程之间的关系,则可以使用pstree命令:

9.top命令

top命令用于动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。

前面介绍的命令都是静态地查看系统状态,不能实时滚动最新数据,而top命令能够动态地查看系统状态,因此完全可以将它看作是Linux中“强化版的Windows任务管理器”。top是相当好用的性能分析工具,该命令的运行界面如图2-6所示。

                                                        图2-6  top命令的运行界面

在图2-6中,top命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下。

10.nice命令

nice命令用于调整进程的优先级,语法格式为“nice优先级数字 服务名称”。

在top命令输出的结果中,PR和NI值代表的是进程的优先级,数字越低(取值范围是-20~19),优先级越高。在日常的生产工作中,可以将一些不重要进程的优先级调低,让紧迫的服务更多地利用CPU和内存资源,以达到合理分配系统资源的目的。例如将bash服务的优先级调整到最高:

11.pidof命令

pidof命令用于查询某个指定服务进程的PID号码值,语法格式为“pidof [参数] 服务名称”。

每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程。例如,执行如下命令来查询本机上sshd服务程序的PID:

12.kill命令

kill命令用于终止某个指定PID值的服务进程,语法格式为“kill [参数] 进程的PID”。

接下来,使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止sshd服务。

但有时系统会提示进程无法被终止,此时可以加参数-9,表示最高级别地强制杀死进程:

13.killall命令

killall命令用于终止某个指定名称的服务所对应的全部进程,语法格式为“killall [参数] 服务名称”。

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果用kill命令逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。下面以httpd服务程序为例,来结束其全部进程。由于RHEL 8系统默认没有安装httpd服务程序,因此大家此时只需看操作过程和输出结果即可,等学习了相关内容之后再来实践。

如果在系统终端中执行一个命令后想立即停止它,可以同时按下Ctrl + C组合键(生产环境中比较常用的一个组合键),这样将立即终止该命令的进程。或者,如果有些命令在执行时不断地在屏幕上输出信息,影响到后续命令的输入,则可以在执行命令时在末尾添加一个&符号,这样命令将进入系统后台来执行。

五、系统状态检测命令

作为一名合格的运维人员,要想更快、更好地了解Linux服务器,必须具备快速查看系统运行状态的能力,因此接下来会逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法。这些命令都超级实用,还请读者用心学习,加以掌握。

1.ifconfig命令

ifconfig命令用于获取网卡配置与网络状态等信息,英文全称为“interface config”,语法格式为“ifconfig [参数] [网络设备]”。

使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容):

2.uname命令

uname命令用于查看系统内核版本与系统架构等信息,英文全称为“unix name”,语法格式为“uname [-a]”。

在使用uname命令时,一般要固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、压制时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息:

顺带一提,如果要查看当前系统版本的详细信息,则需要查看redhat-release文件,其命令以及相应的结果如下:

3.uptime命令

uptime命令用于查看系统的负载信息,输入该命令后按回车键执行即可。

uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分),负载值越低越好:

4.free命令

free命令用于显示当前系统中内存的使用量信息,语法格式为“free [-h]”。

为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。表2-9所示为在刘遄老师的电脑上执行free -h命令之后的输出信息。需要注意的是,输出信息中的中文注释是作者自行添加的内容,实际输出时没有相应的参数解释。

表2-9                                            执行free -h命令后的输出信息

内存总量已用量空闲量进程共享的内存量磁盘缓存的内存量缓存的内存量可用量
totalusedfreesharedbuffersbuff/cacheavailable
Mem:1.9Gi1.4Gi99Mi20Mi450Mi348Mi
Swap:2.0Gi80Mi1.9Gi

如果不使用-h(易读模式)查看内存使用量情况,则默认以KB为单位。这样一来,服务器如果有几百GB的内存,则换算下来就会是一大长串的数字,真不利于阅读。

5.who命令

who命令用于查看当前登入主机的用户终端信息,输入该命令后按回车键执行即可。

这3个简单的字母可以快速显示出所有正在登录本机的用户名称以及他们正在开启的终端信息;如果有远程用户,还会显示出来访者的IP地址。表2-10所示为执行who命令后的结果。

表2-10                                          执行who命令的结果

登陆的用户名终端设备登陆到系统的时间
roottty22020-07-24 06:26 (tty2)

6.last命令

last命令用于调取主机的被访记录,输入该命令后按回车键执行即可。

Linux系统会将每次的登录信息都记录到日志文件中,如果哪天想翻阅了,直接执行这条命令就行:

7.ping命令

ping命令用于测试主机之间的网络连通性,语法格式为“ping [参数] 主机地址”。

即便大家没有学习过Linux系统,相信也肯定见过别人使用ping命令。执行ping命令时,系统会使用ICMP向远端主机发出要求回应的信息,若连接远端主机的网络没有问题,远端主机会回应该信息。由此可见,ping命令可用于判断远端主机是否在线并且网络是否正常。ping命令的常见参数以及作用如表2-11所示。

表2-11                                                 ping命令中的参数以及作用

参数作用
-c总共发送次数
-l指定网卡名称
-i每次间隔时间(秒)
-W最长等待时间(秒)

我们使用ping命令测试一台在线的主机(其IP地址为192.168.10.10),得到的回应是这样的:

测试一台不在线的主机(其IP地址为192.168.10.20),得到的回应是这样的:

8.tracepath命令

tracepath命令用于显示数据包到达目的主机时途中经过的所有路由信息,语法格式为“tracepath [参数] 域名”。

当两台主机之间无法正常ping通时,要考虑两台主机之间是否有错误的路由信息,导致数据被某一台设备错误地丢弃。这时便可以使用tracepath命令追踪数据包到达目的主机时途中的所有路由信息,以分析是哪台设备出了问题。下面的情况就很清晰了:

9.netstat命令

netstat命令用于显示如网络连接、路由表、接口状态等的网络相关信息,英文全称为“network status”,语法格式为“netstat [参数]”。

只要netstat命令使用得当,便可以查看到网络状态的方方面面信息。我们找出一些常用的参数让大家感受一下。netstat命令的常见参数以及作用如表2-12所示。

表2-12                                                  netstat命令中的参数以及作用

-a显示所有连接中的Socket
-p显示正在使用的Socket信息
-t显示TCP协议的连接状态
-u显示UDP协议的连接状态
-n使用IP地址,不使用域名
-l仅列出正在监听的服务状态
-i显示网卡列表信息
-r显示路由表信息

使用netstat命令显示详细的网络状况:

使用netstat命令显示网卡列表:

10.history命令

history命令用于显示执行过的命令历史,语法格式为“history [-c]”。

history命令应该是运维人员最喜欢的命令。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,可以使用-c参数清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。总之,history命令有很多有趣的玩法等待您去开发。

历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容:

要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:

11.sosreport命令

sosreport命令用于收集系统配置及架构信息并输出诊断文档,输入该命令后按回车键执行即可。

当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,抑或让他们能提前了解某些复杂问题。在下面的输出信息中,加粗的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员即可:

六、查找定位文件命令

工作目录指的是用户当前在系统中所处的位置。由于工作目录会牵涉系统存储结构相关的知识,因此第6章将详细讲解这部分内容。读者只需简单了解一下这里的操作实验即可,如果不能完全掌握也没有关系,毕竟Linux系统的知识体系太过庞大,每一位初学人员都需要经历这么一段时期。

1.pwd命令

pwd命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。

使用pwd命令查看当前所处的工作目录:

2.cd命令

cd命令用于切换当前的工作路径,英文全称为“change directory”,语法格式为“cd [参数] [目录]”。

这个命令应该是最常用的一个Linux命令了。可以通过cd命令迅速、灵活地切换到不同的工作目录。除了常见的切换目录方式,还可以使用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd~”命令切换到当前用户的家目录,抑或使用“cd~username”命令切换到其他用户的家目录(就像在游戏中使用了“回城”技能一样)。例如,使用下述的cd命令切换进/etc目录中:

同样的道理,可使用下述命令切换到/bin目录中:

此时,要返回到上一次的目录(即/etc目录),可执行如下命令:

还可以通过下面的命令快速切换到用户的家目录:

3.ls命令

ls命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。

所处的工作目录不同,当前工作目录下能看到的文件肯定也不同。使用ls命令的-a参数可以看到全部文件(包括隐藏文件),使用-l参数可以查看文件的属性、大小等详细信息。将这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

如果想要查看目录属性信息,则需要额外添加一个-d参数。例如,可使用如下命令查看/etc目录的权限与属性信息:

4.tree命令

tree命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。

虽然ls命令可以很便捷地查看目录内有哪些文件,但无法直观地获取到目录内文件的层次结构。比如,假如目录A中有个B,B中又有个C,那么ls命令就只能看到最外面的A目录,显然有些时候这不太够用。tree命令则能够以树状图的形式列出目录内所有文件的结构。

我们来对比一下两者的区别。

使用ls命令查看目录内的文件:

使用tree命令查看目录内文件名称以及结构:

5.find命令

find命令用于按照指定条件来查找文件所对应的位置,语法格式为“find [查找范围] 寻找条件”。

本书中会多次提到“Linux系统中的一切都是文件”,接下来就要见证这句话的分量了。在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用如表2-13所示。

表2-13                                             find命令中的参数以及作用

参数作用
-name匹配名称
-perm匹配权限(mode为完全匹配,-mode为包含即可)
-user匹配所有者
-group匹配所有组
-mtime -n +n匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser匹配无所有者的文件
-nogroup匹配无所有组的文件
-newer f1 !f2匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune忽略某个目录
-exec …… {}\;后面可跟用于进一步处理搜索结果的命令(下文会有演示)

这里需要重点讲解-exec参数的重要作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理。它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数有特殊要求,因此虽然exec是长格式形式,但它的前面依然只需要一个减号(-)。

根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中(详见第6章)。如果要想获取该目录中所有以host开头的文件列表,可以执行如下命令:

如果要在整个系统中搜索权限中包括SUID权限的所有文件(详见第5章),只需使用-4000即可:

6.locate命令

locate命令用于按照名称快速搜索文件所对应的位置,语法格式为“locate文件名称”。

使用find命令进行全盘搜索虽然更准确,但是效率有点低。如果仅仅是想找一些常见的且又知道大概名称的文件,不如试试locate命令。在使用locate命令时,先使用updatedb命令生成一个索引库文件,这个库文件的名字是/var/lib/mlocate/mlocate.db,后续在使用locate命令搜索文件时就是在该库中进行查找操作,速度会快很多。

第一次使用locate命令之前,记得先执行updatedb命令来生成索引数据库,然后再进行查找:

使用locate命令搜索出所有包含“whereis”名称的文件所在的位置:

7.whereis命令

whereis命令用于按照名称快速搜索二进制程序(命令)、源代码以及帮助文件所对应的位置,语法格式为“whereis命令名称”。

简单来说,whereis命令也是基于updatedb命令所生成的索引库文件进行搜索,它与locate命令的区别是不关心那些相同名称的文件,仅仅是快速找到对应的命令文件及其帮助文件所在的位置。

下面使用whereis命令分别查找出ls和pwd命令所在的位置:

8.which命令

which命令用于按照指定名称快速搜索二进制程序(命令)所对应的位置,语法格式为“which命令名称”。

which命令是在PATH变量所指定的路径中,按照指定条件搜索命令所在的路径。也就是说,如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。下面查找一下locate和whereis命令所对应的路径:

七、文本文件编辑命令

通过前面几个小节的学习,读者应该已经掌握了切换工作目录及对文件的管理方法。在Linux系统中,一切都是文件,对服务程序进行配置自然也就是编辑程序的配置文件。如果不能熟练地查阅系统或服务的配置文件,那以后工作时可就真的要尴尬了。本节将讲解几条用于查看文本文件内容的命令。至于相对比较复杂的文本编辑器工具,将在第4章与Shell脚本一起讲解。

1.cat命令

cat命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”,语法格式为“cat [参数] 文件名称”。

Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件。cat这个命令也很好记,因为cat在英语中是“猫”的意思,小猫咪是不是给您一种娇小、可爱的感觉呢?

如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数:

2.more命令

more命令用于查看纯文本文件(内容较多的),语法格式为“more [参数] 文件名称”。

如果需要阅读长篇小说或者非常长的配置文件,那么“小猫咪”可就真的不适合了。因为一旦使用cat命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用more命令来查看。more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容;还可以使用空格键或回车键向下翻页:

3.head命令

head命令用于查看纯文本文件的前N行,语法格式为“head [参数] 文件名称”。

在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想查看文本中前10行的内容,该怎么办呢?head命令就能派上用场了:

4.tail命令

tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为“tail [参数] 文件名称”。

我们可能还会遇到另外一种情况,比如需要查看文本内容的最后10行,这时就需要用到tail命令了。tail命令的操作方法与head命令非常相似,只需要执行“tail -n 20文件名称”命令就可以达到这样的效果:

tail命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新的日志文件时,这特别有用,此时的命令格式为“tail -f文件名称”:

5.tr命令

tr命令用于替换文本内容中的字符,英文全称为“transform”,语法格式为“tr [原始字符] [目标字符]”。

在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用cat命令读取待处理的文本,然后通过管道符(详见第3章)把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:

6.wc命令

wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”,语法格式为“wc [参数] 文件名称”。

每次我在课堂上讲到这个命令时,总有同学会联想到一种公共设施,其实这两者毫无关联。wc命令用于统计文本的行数、字数、字节数等。如果为了方便自己记住这个命令的作用,也可以联想到上厕所时好无聊,无聊到数完了手中的如厕读物上有多少行字。

wc的参数以及相应的作用如表2-14所示。

表2-14                                                   wc命令中的参数以及作用

参数作用
-l只显示行数
-w只显示单词数
-c只显示字节数

在Linux系统中,/etc/passwd是用于保存所有用户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇:

7.stat命令

stat命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”,语法格式为“stat文件名称”。

大家都知道,文件有一个修改时间。其实,除了修改时间之外,Linux系统中的文件包含3种时间状态,分别是Access Time(内容最后一次被访问的时间,简称为Atime),Modify Time(内容最后一次被修改的时间,简称为Mtime)以及Change Time(文件属性最后一次被修改的时间,简称为Ctime)。

下面使用state命令查看文件的这3种时间状态信息:

8.grep命令

grep命令用于按行提取文本内容,语法格式为“grep [参数] 文件名称”。

grep命令是用途最广泛的文本搜索匹配工具。它虽然有很多参数,但是大多数基本上都用不到。刘遄老师在总结了10多年的运维工作和培训教学的经验后,提出的本书的写作理念“去掉不实用的内容”绝对不是信口开河。如果一名IT培训讲师的水平只能停留在“技术的搬运工”层面,而不能对优质技术知识进行提炼总结,对他的学生来讲绝非好事。有鉴于此,我们在这里只讲grep命令两个最常用的参数:

这两个参数几乎能完成您日后80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用man grep命令查询也来得及。

grep命令的参数及其作用如表2-15所示。

表2-15                                              grep命令中的参数及其作用

参数作用
-b将可执行文件(binary)当作文本文件(text)来搜索
-c仅显示找到的行数
-i忽略大小写
-n显示行号
-v反向选择——仅列出没有“关键词”的行。

在Linux系统中,/etc/passwd文件保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令查找出当前系统中不允许登录系统的所有用户的信息:

9.cut命令

cut命令用于按“列”提取文本内容,语法格式为“cut [参数] 文件名称”。

系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:

一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按“列”搜索,不仅要使用-f参数设置需要查看的列数,还需要使用-d参数来设置间隔符号。

接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

10.diff命令

diff命令用于比较多个文件之间内容的差异,英文全称为“different”,语法格式为“diff [参数] 文件名称A 文件名称B”。

在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否相同,还可以使用-c参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:

接下来使用diff --brief命令显示比较后的结果,判断文件是否相同:

最后使用带有-c参数的diff命令来描述文件内容具体的不同:

11.uniq命令

uniq命令用于去除文本中连续的重复行,英文全称为“unique”,语法格式为“uniq [参数] 文件名称”。

由uniq命令的英文全称unique(独特的,唯一的)可知,该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去重)—去除了重复的,保留的都是唯一的,自然也就是“独特的”“唯一的”了。

我们使用uniq命令对两个文本内容进行操作,区别一目了然:

12.sort命令

sort命令用于对文本内容进行再排序,语法格式为“sort [参数] 文件名称”。

有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了,它能够对文本内容进行再次排序。这个命令千万不能只讲理论,一定要借助于实战让大家一看就懂。sort命令的参数及其作用如表2-16所示。

表2-16                                              sort命令中的参数及其作用

参数作用
-f忽略大小写
-b忽略缩进与空格
-n以数值型排序
-r反向排序
-u去除重复行
-t指定间隔符
-k设置字段范围

首先,在执行sort命令后默认会按照字母顺序进行排序,非常方便:

此外,与uniq命令不同,sort命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u参数进行去重操作:

想对数字进行排序?一点问题都没有,而且完全不用担心出现1大于20这种问题(因为有些命令只比较数字的第一位,忽略了十、百、千的位):

最后,我们挑战一个“高难度”的小实验。下面的内容节选自/etc/passwd文件中的前5个字段,并且进行了混乱排序。

不难看出,上面其实是5个字段,各个字段之间是用了冒号进行间隔,如果想以第3个字段中的数字作为排序依据,那么可以用-t参数指定间隔符,用-k参数指定第几列,用-n参数进行数字排序来搞定:

八、文件目录管理命令

目前为止,我们学习Linux命令的过程就像是在夯实地基,虽然表面上“高楼未起”,但其实大家的内功已经相当深厚了。有了上面的知识铺垫,我们将在本节介绍Linux系统日常运维工作中最常用的命令,实现对文件的创建、修改、复制、剪切、更名与删除等操作。

1.touch命令

touch命令用于创建空白文件或设置文件的时间,语法格式为“touch [参数] 文件名称”。

在创建空白的文本文件方面,这个touch命令相当简洁,简捷到没有必要铺开去讲。比如,touch linuxprobe命令可以创建出一个名为linuxprobe的空白文本文件。对touch命令来讲,有难度的操作主要是体现在设置文件内容的修改时间(Mtime)、文件权限或属性的更改时间(Ctime)与文件的访问时间(Atime)上面。touch命令的参数及其作用如表2-17所示。

表2-17                                             touch命令中的参数及其作用

参数作用
-a仅修改“读取时间”(atime)
-m仅修改“修改时间”(mtime)
-d同时修改atime与mtime

接下来,先使用ls命令查看一个文件的修改时间,随后修改这个文件,最后再查看一下文件的修改时间,看是否发生了变化:

如果不想让别人知道我们修改了它,那么这时就可以用touch命令把修改后的文件时间设置成修改之前的时间(很多黑客就是这样做的呢):

2.mkdir命令

mkdir命令用于创建空白的目录,英文全称为“make directory”,语法格式为“mkdir [参数] 目录名称”。

除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套层叠关系的文件目录:

3.cp命令

cp命令用于复制文件或目录,英文全称为“copy”,语法格式为“cp [参数] 源文件名称 目标文件名称”。

大家对文件复制操作应该不陌生,几乎每天都会使用到。在Linux系统中,复制操作具体分为3种情况:

复制命令基本不会出错,唯一需要记住的就是在复制目录时要加上-r参数。cp命令的参数及其作用如表2-18所示。

表2-18                                               cp命令中的参数及其作用

参数作用
-p保留原始文件的属性
-d若对象为“链接文件”,则保留该“链接文件”的属性
-r递归持续复制(用于目录)
-i若目标文件存在则询问是否覆盖
-a相当于-pdr(p、d、r为上述参数)

接下来,使用touch命令创建一个名为install.log的普通空白文件,然后将其复制为一份名为x.log的备份文件,最后再使用ls命令查看目录中的文件:

4.mv命令

mv命令用于剪切或重命名文件,英文全称为“move”,语法格式为“mv [参数] 源文件名称 目标文件名称”。

剪切操作不同于复制操作,因为它默认会把源文件删除,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命名操作:

5.rm命令

rm命令用于删除文件或目录,英文全称为“remove”,语法格式为“rm [参数] 文件    名称”。

在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,要想删除一个目录,需要在rm命令后面加一个-r参数才可以,否则删除不掉。rm命令的参数及其作用如表2-19所示。

表2-19                                               rm命令中的参数及其作用

参数作用
-f强制执行
-i删除前询问
-r删除目录
-v显示过程

下面尝试删除前面创建的install.log和linux.log文件,大家感受一下加与不加-f参数的区别:

6.dd命令

dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,语法格式为“dd if=参数值of=参数值count=参数值bs=参数值”。

dd命令是一个比较重要而且比较有特色的命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然,如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,每次在课堂上解释它时都充满哲学理论的色彩。因为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此常常使用它作为dd命令的输入文件,来生成一个指定大小的文件。dd命令的参数及其作用如表2-20所示。

表2-20                                               dd命令中的参数及其作用

参数作用
if输入的文件名称
of输出的文件名称
bs设置每个“块”的大小
count设置要复制“块”的个数

例如,用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件。在理解了这个命令后,以后就能随意创建任意大小的文件了:

dd命令的功能也绝不仅限于复制文件这么简单。如果想把光驱设备中的光盘制作成iso格式的镜像文件,在Windows系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像:

考虑到有些读者会纠结bs块大小与count块个数的关系,下面举一个吃货的例子进行解释。假设小明的饭量(即需求)是一个固定的值,用来盛饭的勺子的大小是bs块的大小,而用勺子盛饭的次数则是count块的个数。小明要想吃饱(满足需求),则需要在勺子大小(bs块大小)与用勺子盛饭的次数(count块个数)之间进行平衡。勺子越大,用勺子盛饭的次数就越少。由上可见,bs与count都是用来指定容量的大小,只要能满足需求,可随意组合搭配方式。

7.file命令

file命令用于查看文件的类型,语法格式为“file文件名称”。

在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,但是它们又不像Windows系统那样都有后缀,因此很难通过文件名一眼判断出具体的文件类型,这时就需要使用file命令来查看文件类型了。

8.tar命令

tar命令用于对文件进行打包压缩或解压,语法格式为“tar参数 文件名称”。

在网络上,人们越来越倾向于传输压缩格式的文件,原因是压缩文件的体积小,在网速相同的情况下,体积越小则传输时间越短。在Linux系统中,主要使用的是.tar、.tar.gz或.tar.bz2格式,大家不用担心格式太多而记不住,其实这些格式大部分都是由tar命令生成的。tar命令的参数及其作用如表2-21所示。

表2-21                                               tar命令中的参数及其作用

参数作用
-c创建压缩文件
-x解开压缩文件
-t查看压缩包内有哪些文件
-z用Gzip压缩或解压
-j用bzip2压缩或解压
-v显示压缩或解压的过程
-f目标文件名
-p保留原始的权限与属性
-P使用绝对路径来压缩
-C指定解压到的目录

首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式的参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。刘遄老师一般使用“tar -czvf压缩包名称.tar.gz要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf压缩包名称.tar.gz”。下面我们逐个演示打包压缩与解压的操作,先使用tar命令把/etc目录通过gzip格式进行打包压缩,并把文件命名为etc.tar.gz:

接下来将打包后的压缩包文件指定解压到/root/etc目录中(先使用mkdir命令创建/root/etc目录):

举报

相关推荐

0 条评论