Python 网络自动化入门指南(二)

原文:Introduction to Python Network Automation

协议:CC BY-NC-SA 4.0

三、更多 Python 练习

罗马人借用了一个古老的雅典概念,并把它变成了一句谚语:“Repetito master sturdiorum”,意思是“重复是一切学习之母。”在前一章中,您练习了基本的 Python 概念,但是在本章中,您将获得更多关于更相关的主题和场景的练习。练习的某些部分将包含与你在本书后半部分将要写的脚本直接相关的内容。当我们做本章中的每个练习时,让你的手指打字,但是让你的大脑思考某个练习如何帮助你自动完成部分工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为练习做准备

本书假设您是使用 Python 的网络自动化新手。当我们看一个典型的 IT 工程师的日常任务时,系统工程师和网络工程师不需要像 DevOps 工程师那样多打字。这只是工作的性质,因为 DevOps 工程师总是在移动,编写代码和创建应用作为各种项目的一部分。换句话说,对于大多数阅读本书的非 DevOps IT 人员来说,您的时间将花在安装、配置和解决您所在领域的各种问题上。在工作时间找时间练习将是一项挑战,因为学习编码和开发自动化应用是没有报酬的。然而,几乎所有的企业 IT 团队都在试图推动他们的 IT 工程师开始学习编程语言并自动化重复性的任务。作为一名优秀的员工和模范 IT 工程师,您可能一直在利用工作时间之外的时间学习 Python。在第一次尝试时,并不是所有人都能理解可编程性概念或学习 Python 基础知识;只要坚持不懈,不断尝试,直到你做到。克服挑战的唯一方法是通过更多的练习。如果您有具体的 Python 挑战,请养成在 Google 上搜索该主题并进一步阅读相关内容的习惯。现在,让我们使用相关的例子获得更多的 Python 实践。

在第二章,你学习了 Python 的基础知识。本章将帮助你进行更多的练习,为使用 Python 进行网络自动化做好准备。你练习得越多,你就会越好。

练习 3-1:将一个列表和一个元组连接成一个列表

| ① | `>>> fruits = ['apple', 'orange', 'mango']``>>> vegetables = ('broccoli', 'potato', 'spinach')``>>> favorites = fruits + list(vegetables)``>>> print(favorites)``['apple', 'orange', 'mango', 'broccoli', 'potato', 'spinach']` |
说明
| ① | 在列表中创建一个变量,在元组中创建一个变量。使用`list()`方法将元组转换成列表。将一个列表和一个元组连接并合并成一个列表。 |

练习 3-2:使用 Python 作为计算器

| ① | `>>> eigrp, ospf, rip = 90, 110, 120``>>> path1, path2, path3 = 3, 6, 9``>>> admin_distance = (eigrp * path1) + (ospf * path2) + (rip * path3)``>>> print(admin_distance)``2010` |
说明
| ① | 使用 Python 作为计算器,计算管理距离。 |

练习 3-3:做一些基本的字符串格式()练习

| ① | `>>>` `name = 'Hugh'``>>>` `age = 15``>>>` `detail = 'His name is %s and he is %d.'``>>>` `print(detail %(name, age))``His name is Hugh and he is 15.` | | ②#1#2#3#4 | `>>>` `Name, age, height = 'Hugh', 15, 174.5``>>>` `detail = ('His name is {}, he is {} and {} cm tall.'.format(name, age, height))``>>>` `print(detail)``His name is Hugh, he is 15 and 174.5 cm tall.``>>>` `detail = ('His name is {0}, he is {1} and {2} cm tall.'.format(name, age, height))``>>>` `print(detail)``His name is Hugh, he is 15 and 174.5 cm tall.``>>>` `detail = ('His name is {name}, he is {age} and {height} cm tall.'.format(name='Joshua', age=16, height=178))``>>>` `print(detail)``His name is Joshua, he is 16 and 178 cm tall.``>>>` `detail = ('His name is {0}, he is {age} and {height} cm tall.'.format('Michael', age=12, height=170))``>>>` `print(detail)``His name is Michael, he is 12 and 170 cm tall.` | | ③ | `>>>` `person = {'height':174.5, 'name':'Hugh', 'age':15}``>>>` `print('{name} is {age} years old and {height} cm tall.'.format(**person))``Hugh is 15 years old and 174.5 cm tall.` |
说明
| ① | 这是一个基本的字符串(`%s`)和数字(`%d`)格式示例。 | | ② | #1.`format()`示例:默认参数#2.`format()`示例:位置参数#3.`format()`示例:关键字参数#4.`format()`示例:混合参数 | | ③ | 这是一个`str.format(**mapping)`的例子。这是 Python 中使用的参数解析的一个例子,所以要特别注意例子中使用的两个星号。 |

练习 3-4:询问用户名

用 Notepad++写代码,如图 3-1 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-1。

用户输入,感谢用户

| ① | `# ex3_4.py``print('Please enter your name: ')``name = input()``print('Thank you, ', name)` |
说明
| ① | 创建一些询问用户名的 Python 代码。您将使用它作为用户名和密码工具开发的基础。当你询问某人的名字时,你会得到一些乐趣。 |

练习 3-5:获取用户名:版本 1

编写代码并保存为ex3_5.py,在 Notepad++中运行代码。(见图 3-2 )

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-2。

用户输入,说“嗨”

| ① | `#ex3_5.py``name = input('Please enter your name: ')``print(f'Hi, {name}.')` |
说明
| ① | 重申一下`ex3_4.py`,在`ex3_5.py`写一些简化代码。代码行的数量已经减少。在本练习中,您将学习如何将两行代码缩减为一行代码,并使用缩写格式方法。 |

练习 3-6:获取用户名:版本 2

在 Notepad++上,输入以下代码,将文件另存为ex3_6.py并运行代码。(见图 3-3 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-3。

用户输入,获取格式正确的输入

| ① | `#Ex3_6.py``import re``name = input("Enter your name: ")``while True:``while not re.match("^[a-zA-Z]+$", name):``name = input("Enter your name: ")``else:``print(name)``exit()` |
说明
| ① | 使用`ex3_5.py`作为基础,您刚刚创建了一个简单的 Python 应用,它根据一些要求询问某人的姓名。您已经导入了`re`(正则表达式)内置 Python 模块,以强制用户提供一个以字母开头的名称,该名称只接受字母。`^[a-zA-Z]+$`表示以一个或多个字母开头并以一个字母结尾的任何字符。因此,yomu 不能输入数字或特殊字符作为名称。如果用户不能遵守这条规则,脚本会一直询问,直到用户提供预期的响应。一旦收到正确的响应,就会打印出名字并退出应用。你将在第九章学到更多关于正则表达式的知识。整整一章将致力于学习正则表达式以及如何使用`re`模块。脚本完全是关于数据处理以及我们如何处理它们。我们必须掌握正则表达式,克服对正则表达式的恐惧,才能成为自信的编程工程师。 |

练习 3-7:获取用户名:版本 3

输入代码并在 Notepad++上将文件保存为ex3_7.py。运行如图 3-4 所示的代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-4。

用户输入,将用户名脚本放入函数中

| ① | `# ex3_7.py``import re``def get_name():`1 `name = input("Enter your name: ")`1 `while True:`2 `while not re.match("^[a-zA-Z]+$", name):`3 `name = input("Enter your name: ")`2 `else:`3 `print(name)`3 `exit()``get_name()` |
说明
| ① | 创建`ex3_7.py`脚本并运行它,学习如何基于`ex3_6.py`创建函数并将其转换成函数。最后一条语句`get_name()`将触发脚本运行。这是与`ex3_6.py`相同的脚本,但是我们已经将它转换成一个函数,这样你就可以理解迭代过程。 |

练习 3-8:添加临时文件路径,将 ex3_7.py 作为模块导入,然后运行脚本

| ① | `C:\Users\brendan>` `python``Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32``Type "help", "copyright", "credits" or "license" for more information.``>>>``import``Enter your name:` `Brendan``Brendan``C:\Users\brendan>` | | ② | `# If your script is under a different folder, for example, under 'C:\Users\brendan\Documents\'. You have to manually add the Filepath using append.``>>>` `import sys``>>>``sys.path.append('C:\\Users\\brendan\\Documents\\')``>>>` `print(sys.path)``['', 'C:\\Python39\\python39.zip', 'C:\\Python39\\DLLs', 'C:\\Python39\\lib', 'C:\\Python39', 'C:\\Python39\\lib\\site-packages',``'C:\\Users\\brendan\\Documents\\'``>>>` `import ex3_7.py``9``Enter your name: Ryan``Ryan` |
说明
| ① | 如果在 Python 安装过程中选择了将 Python 3.9 添加到路径,则应该能够将 Python 脚本作为模块调用,并在 Windows 操作系统上的任何位置运行它。如果您忘记了,您可以选择添加一个临时文件路径,如示例②所示。 | | ② | 打开 Python 命令提示符并添加临时文件路径,以便 Python 可以读取在练习 3-7 中创建的 Python 模块。这里,您添加了一个新的(临时)文件路径,并导入了一个自定义模块,以便从您的解释器会话中运行,从而了解导入和自定义模块是如何工作的。 |

练习 3-9:使用逗号在字符串之间添加空格

| ① | `>>` `print('Around' + 'the' + 'World' + 'in' + '100' + 'days.')``AoundtheWorldin100days.` `# by default, no spaces are added when '+' is used``>>>``print('Around ' + 'the ' + 'World ' + 'in ' + '100 ' + 'days.')``Around the World in 100 days` `.``>>>` `print('Around', 'the', 'World', 'in', '100', 'days.')``Around the World in 100 days.` `# adds spaces automatically` |
说明
| ① | 练习前面的练习并比较输出。请注意,在上一个练习中使用了逗号,并且输出在字符串之间添加了空格。 |

练习 3-10:练习 if;if 和 else 和 if,elif,和 else

| ① | `>>>` `y = 5``>>>` `if x > y:``...     print('x is greater than y.')``...``>>>` `# No output as if the statement was False``>>>` `x = 3``>>>` `y = 5``>>>` `if x < y:``...` `print('x is less than y.')``...``x is less than y.` `# prints output as if the statement was True``>>>` `y = 5``>>>` `if x >= y:``...     print('x is greater or equal to y.')``...` `else:``...` `print('x is smaller than y.')``...``x is smaller than y.` `#  prints output of else statement``>>>` `x = 3``>>>` `y = 5``>>>` `z = 3``>>>` `if x < y > z:``...` `print('y is greater than x and greater than z.')``...``y is greater than x and greater than z.` `# all conditions met``>>>` `x = 5``>>>` `y = 10``>>>` `if x < y:``...` `print('x is smaller than y.')``...` `elif x > y:``...` `print('x is greater than y.')``...``else``...` `print('x is equal to y.')``...``x is smaller than y.` `# if the statement was satisfied` |
说明
| ① | 你刚刚练了`if`;`if`和`else`;以及`if`、`elif`和`else`。这些练习是不言自明的;这是 Python 的一大魅力。 |

练习 3-11:练习 end= ’ ’

| ① | `>>>` `for n in range (1, 11):``...` `print(n)``...``1``2``3``[omitted for brevity]``9``10``>>>` `for n in range (1, 11):``...``print(n,``...``12345678910``>>>``>>>` `for n in range (1, 11):``...``print(n, end=' ')``...``1 2 3 4 5 6 7 8 9 10``>>>``>>>` `for n in range (1, 11):``...``print(n, end=',')``...``1,2,3,4,5,6,7,8,9,10,``>>>``>>>` `for n in range (1, 11):``...``print(n, end='/')``...``1/2/3/4/5/6/7/8/9/10/``>>>``>>>` `for n in range (1, 11):``...``print(n, end='|')``...``1|2|3|4|5|6|7|8|9|10|``>>>` |
说明
| ① | 用`end=`练习每个`for ~ in range`语句,并比较结果的变化。 |

练习 3-12:练习音域内的~音

| ① | `>>>` `for n in range (2, 11):``...` `print(("Creating VLAN") + str(n))``...``Creating VLAN2 Creating VLAN3 Creating VLAN4 Creating VLAN5 Creating VLAN6 Creating VLAN7 Creating VLAN8 Creating VLAN9 Creating VLAN10` |
说明
| ① | 当您必须循环通过几条线路来向网络设备添加配置时,`for ~ in range()`变得非常方便。我们将在后面的 Python 网络自动化实验中应用前面的代码。试着熟悉这个例子。 |

练习 3-13:为线 in ~练习

| ① | `>>>` `txt1 = "Seeya later Alligator"``>>>` `for line in txt1:``...` `print(line)``...``S``e``e``[omitted for brevity]``o``r``>>>` `txt1 = "Seeya later Alligator"``>>>` `for line in txt1:``...` `print(line, end='')``...``Seeya later Alligator` |
说明
| ① | 对于字符串,可以使用`for line in ~`方法,对于数字会得到和`for n in range()`方法一样的效果。 |

练习 3-14:使用 split()方法

| ① | `>>>` `txt1 = "Seeya later Alligator"``>>>``print(txt1.split())``['Seeya', 'later', 'Alligator']``>>>``print(txt1.split( ))``['Seeya', 'later', 'Alligator']``>>>` `print(txt1.split('e', 1))``['S', 'eya later Alligator']` `#splits at first instance of 'e``>>>` `txt2 = (txt1.split('e', 1))``>>>``print(txt2[0])``S``>>>` `txt3 = (txt1.split('a', 3))``>>>``print(txt3)``['Seey', ' l', 'ter Allig', 'tor']``>>>``print(txt3[1])``L` |
说明
| ① | 当与正则表达式一起使用时,对字符串索引和拼接进行足够的练习会成为一个强大的工具。不幸的是,要成为一名优秀的程序员,我们必须熟悉一般的数据处理:数据收集、数据处理和数据流控制。 |

练习 3-15:练习 lstrip()、rstrip()、strip()、upper()、lower()、title()和大写()

| ① | `>>>` `australia = ' terra australis incognita '``>>``print(australia.title())``Terra Australis Incognita``>>>``print(australia.rstrip().upper())``TERRA AUSTRALIS INCOGNITA``>>>``x = (australia.lstrip().lower())``>>>``print(x.capitalize())``Terra australis incognita``>>>``print(australia.strip().upper())``TERRA AUSTRALIS INCOGNITA` |
说明
| ① | 您刚刚完成了大写和小写以及脱衣法练习。你能想出一些有趣和相关的单词让你练习吗?通过改变单词使其对你有更多的意义,给你的练习增添一些乐趣。 |

练习 3-16:创建一个文件并以四种不同的方式读取它

| ① | `>>>` `with open('test123.txt', 'w') as f:``...` `f.write('This is line 1.\nThis is line 2.\nThis is line 3.\n')``...``48` | | ② | `>>>` `with open('test123.txt', 'r') as f:``...` `lines = f.readlines()``...` `print(lines)``...``['This is line 1.\n', 'This is line 2.\n', 'This is line 3.\n']` | | ③ | `>>>` `with open('test123.txt', 'r') as f:``...` `lines = list(f)``...` `print(lines)``...``['This is line 1.\n', 'This is line 2.\n', 'This is line 3.\n']` | | ④ | `>>>` `f = open('test123.txt', 'r')``>>>` `lines = f.readlines()``>>>` `print(lines)``['This is line 1.\n', 'This is line 2.\n', 'This is line 3.\n']``>>` `f.close()` | | ⑤号 | `>>>` `f = open('test123.txt', 'r')``>>>` `lines = list(f)``>>>` `print(lines)``['This is line 1.\n', 'This is line 2.\n', 'This is line 3.\n']``f.close()` |
说明
| ① | 在`w`模式下创建`test123.txt`,写点东西。 | | ② | 这是用一个`readlines()`例子的`open`方法。 | | ③ | 这是用一个`list()`例子的`open`方法。 | | ④ | 这是一个简单的`open()`方法和一个`readlines()`例子。使用后请务必关闭文件。 | | ⑤号 | 这是一个简单的`open()`方法和一个`list()`例子。确保发出`f.close()`关闭文件。 |

练习 3-17:阅读和输出文件以获得更详细的理解

| ① | `>>>` `with open('test123.txt', 'w') as f:``...` `f.write(' this is a lower casing line.\n')``...``33``>>>` `with open('test123.txt', 'r') as f:``...` `print(f.read())``...``this is a lower casing line.` | | ② | `>>>` `with open('test123.txt', 'a') as f:``...` `f.write('THIS IS AN UPPER CASING LINE. \nThisIsACamelCasingLine.\n')``...``58` | | ③ | `>>>` `with open('test123.txt', 'r') as f:``...` `print(f.read())``...``this is a lower casing line. THIS IS AN UPPER CASING LINE.``ThisIsACamelCasingLine` `.``>>>` `with open('test123.txt', 'r') as f:``...` `print(f.readline())``...``this is a lower casing line.``>>>` `with open('test123.txt', 'r') as f:``...` `print(f.readlines())``...``[' this is a lower casing line. \n', 'THIS IS AN UPPER CASING LINE .\n', 'ThisIsACamelCasingLine.\n']` | | ④ | `>> >>>` `with open('test123.txt', 'r') as f:``...` `print(f.read().lower().strip())``...``this is a lower casing line. this is an upper casing line. thisisacamelcasingline.` | | ⑤号 | `>>>` `with open('test123.txt', 'r') as f:``...` `x = (f.read().lower().strip())``...` `y = set(x.split())``...` `print(y)``...` `print(len(y))``...``{'lower', 'casing', 'a', 'this', 'is', 'upper', 'thisisacamelcasingline.', 'an', 'line.'} 9` |
说明
| ① | 创建一个新的`test123.txt`文件。由于文件以`w`模式打开,它将覆盖在练习 3-17 中创建的文件。按照本书中所示的相同方式写入文件。 | | ② | 您可以在一种模式下向文件中写入更多内容。 | | ③ | 尝试在三种不同的模式下读取和打印:`read()`、`readline()`、`readlines()`。你看出区别了吗? | | ④ | 练习使用其他方法来操作字符串和空格。 | | ⑤号 | 您将同时使用`set()`和`split()`方法来计算文件中的单词和字符总数。 |

练习 3-18:使用 getpass()模块和用户输入

对于本练习,打开 Python IDLE(解释器)编写代码。

| ① | `>>>` `import getpass``>>>` `def get_pwd():``...` `username = input('Enter username : ')``...` `password = getpass.getpass()``...` `print(username, password)``...``>>>` `get_pwd()``Enter username :` `admin``Password: **********``admin mypassword` |
说明
| ① | 使用`import`加载`getpass`库。使用`def`把你的密码改成一个函数。然后用`input()`功能询问用户名;然后使用`getpass.getpass()`模块询问用户的密码。输入密码时,`getpass()`模块会隐藏输入的密码。为了测试,我们打印出了用户名和密码。当创建 SSH 和 Telnet 到网络设备的登录请求时,`getpass()`模块很方便。 |

练习 3-19:理解编码和解码的区别

| ① | `>>>` `text_1 = 'Network Automation'``>>>` `print(text_1)``Network Automation``>>>` `byte_1 = text_1.encode()``>>>` `print(byte_1)``b'Network Automation '` | | ② | `>>>` `byte_2 = b'Mission completed.'``>>>` `print(byte_2)``b'Mission completed. '``>>>` `text_2 = byte_2.decode()``>>>` `print(text_2)``Mission completed.` |
说明
| ① | 计算机以比特(0 和 1)进行通信,计算机以字节处理文件。但我们人类希望以明文形式与机器交流,因此需要编码和解码。这是一个将字符串转换成字节的简单练习。您将在第十三章的 Telnet Python 实验室练习中看到这一点。特别记下这个练习。 | | ② | 在 Python 3 中,所有字符串都被识别为 Unicode,必须使用`decode()`方法来转换字节,字节是计算机理解的二进制流数据。在路由器和交换机等机器上执行命令时,要注意字节到字符串的转换和字符串到字节的转换,以避免代码执行错误。 |

练习 3-20:用 csv 模块处理 Python 中的 CSV 文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-6。

在 Excel 中检查 2020_router_purchase.csv

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-5。

运行 CSV 脚本在 Windows PowerShell 上创建 Excel 文件

| ① | `# Use the following information to create .py called ex3_20.py and save it to your Documents folder.``# ex3_20.py``import csv``with open ('C://Users//brendan//Documents//2020_router_purchase.csv', 'w', newline='' ) as csvfile:``filewriter = csv.writer (csvfile, delimiter = ',', quotechar = '|', quoting = csv.QUOTE_MINIMAL)``filewriter.writerow (['Site', 'Router_Type', 'IOS_Image', 'No_of_routers', 'Unit_price($)', 'Purchase_Date'])``filewriter.writerow(['NYNY', 'ISR4351/K9', 'isr4300-universalk9.16.09.05.SPA.bin', 4, '$ 9100.00', '1-Mar-20'])    filewriter.writerow(['LACA', 'ISR4331/K9', 'isr4300-universalk9.16.09.05.SPA.bin', 2, '$ 5162.00', '1-Mar- 20'])``filewriter.writerow(['LDUK', 'ISR4321/K9', 'isr4300-universalk9.16.09.05.SPA.bin', 1, '$ 2370.00', '3-Apr- 20'])``filewriter.writerow(['HKCN', 'ISR4331/K9', 'isr4300-universalk9.16.09.05.SPA.bin', 2, '$ 5162.00', '17-Apr-20'])``filewriter.writerow(['TKJP', 'ISR4351/K9', 'isr4300-universalk9.16.09.05.SPA.bin', 1, '$ 9100.00', '15-May-20'])``filewriter.writerow(['MHGM', 'ISR4331/K9', 'isr4300-universalk9.16.09.05.SPA.bin', 2, '$ 5162.00', '30-Jun-20'])` | | ② | 打开 Windows 命令提示符或 Windows PowerShell,运行 Python 代码创建您的 CSV 文件-->(见图 3-5 )。`PS C:\Users\brendan>``cd Documents``PS C:\Users\brendan\Documents>``dir ex3_20.py``#``PS C:\Users\brendan\Documents>``python ex3_20.py``#``PS C:\Users\brendan\Documents>``dir 2020_router_*``#` | | ③ | 使用 Microsoft Excel 打开文件并检查新创建的文件。它看起来应该类似于图 3-6 。 | | ④ | `#` `For Windows users``>>>` `f = open('C://Users//brendan//Documents//2020_router_purchase.csv', 'r')``>>>` `f``<_io.TextIOWrapper name='C://Users//brendan//Documents//2020_router_purchase.csv' mode="r" encoding=``'cp1252'``#` `For Linux users (optional)``>>>` `f = open ('2020_router_purchase.csv', 'r')``>>>` `f``<_io.TextIOWrapper name = ''2020_router_purchase.csv' mode = 'r' encoding = 'UTF-8'>` | | ⑤号 | `>>>` `f = open('C://Users//brendan//Documents//2020_router_purchase.csv', 'r')``>>>` `routers = f.read()``>>>` `routers``'Site,Router_Type,IOS_Image,No_of_routers,Unit_price($),Purchase_Date\nNYNY,ISR4351/K9,isr4300- universalk9.16.09.05.SPA.bin,4,$ 9100.00,1-Mar-20\nLACA,ISR4331/K9,isr4300- universalk9.16.09.05.SPA.bin,2,$ 5162.00,1-Mar-20\nLDUK,ISR4321/K9,isr4300- universalk9.16.09.05.SPA.bin,1,$ 2370.00,3-Apr-20\nHKCN,ISR4331/K9,isr4300- universalk9.16.09.05.SPA.bin,2,$ 5162.00,17-Apr-20\nTKJP,ISR4351/K9,isr4300-``universalk9.16.09.05.SPA.bin,1,$ 9100.00,15-May-20\nMHGM,ISR4331/K9,isr4300-``universalk9.16.09.05.SPA.bin,2,$ 5162.00,30-Jun-20\n'``>>>` `print(routers)``Site,Router_Type,IOS_Image,No_of_routers,Unit_price($),Purchase_Date``NYNY,ISR4351/K9,isr4300-universalk9.16.09.05.SPA.bin,4,$ 9100.00,1-Mar-20``LACA,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,1-Mar- 20``LDUK,ISR4321/K9,isr4300-universalk9.16.09.05.SPA.bin,1,$ 2370.00,3-Apr- 20``HKCN,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,17-Apr-20``TKJP,ISR4351/K9,isr4300-universalk9.16.09.05.SPA.bin,1,$ 9100.00,15-May-20``MHGM,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,30-Jun-20``>>>` `f.close ()` | | ⑥ | `>>> with open('C://Users//brendan//Documents//2020_router_purchase.csv', 'r') as f:``...     routers = f.readlines()``...     for router in routers:``...         print(router, end=(" "))``...``Site,Router_Type,IOS_Image,No_of_routers,Unit_price($),Purchase_Date``NYNY,ISR4351/K9,isr4300-universalk9.16.09.05.SPA.bin,4,$ 9100.00,1-Mar-20``LACA,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,1-Mar- 20``LDUK,ISR4321/K9,isr4300-universalk9.16.09.05.SPA.bin,1,$ 2370.00,3-Apr- 20``HKCN,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,17-Apr-20``TKJP,ISR4351/K9,isr4300-universalk9.16.09.05.SPA.bin,1,$ 9100.00,15-May-20``MHGM,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,30-Jun-20` |
说明
| ① | 使用这些信息创建一个名为`ex3_20.py`的新代码文件。该文件需要保存在您的`Documents`文件夹中。 | | ② | 然后打开您选择的命令提示符,运行 Python 命令,使用`ex3_20.py`脚本创建一个 CSV 文件。 | | ③ | 在 Microsoft Excel 中打开新创建的`2020_router_purchase.csv`文件进行检查。 | | ④ | 如果您打开并阅读该文件,您可以看到 Windows 创建的文件将使用`cp1252`的编码,而在 Linux 上,UTF-8 编码将被用作默认的解码方法。 | | ⑤号 | 使用`read()`读取文件。内容是一长串数据。如果您使用`print()`,那么新的行将显示为单独的行,并且变得更容易阅读。 | | ⑥ | 如果您不想被结尾的`f.close()`语句所困扰,您也可以使用`with open`命令来打开并读取文件。在这个例子中,我们使用`f.readlines()`方法分别读取每一行,然后使用`for`循环调用 CSV 文件中的每一行。花点时间仔细研究一下`read()`、`readlines()`和`readline()`方法之间的区别。 |

练习 3-21:输出 CSV 文件

| ① | `>>>` `f = open('C://Users//brendan//Documents//2020_router_purchase.csv', 'r')``>>>` `for line in f:``...` `print(line.strip())``...``Site,Router_Type,IOS_Image,No_of_routers,Unit_price($),Purchase_Date NYNY,ISR4351/K9,isr4300-universalk9.16.09.05.SPA.bin,4,$ 9100.00,1-Mar-20 LACA,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,1-Mar-20 LDUK,ISR4321/K9,isr4300-universalk9.16.09.05.SPA.bin,1,$ 2370.00,3-Apr-20 HKCN,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,17 -Apr-20``TKJP,ISR4351/K9,isr4300-universalk9.16.09.05.SPA.bin,1,$ 9100.00,15 -May-20``MHGM,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,30 -Jun-20``>>>` `f.close()` |
说明
| ① | 像在普通文本文件中一样,您可以使用`for`循环方法读取每一行并一次打印一行。确保使用`strip()`方法删除任何前导或尾随空格、换行符或制表符。 |

练习 3-22:从 CSV 文件中查找 Cisco ISR 4331 路由器的价格

| ①*#1**#2**#3**#4**#5* | `>>>` `f = open('C://Users//brendan//Documents//2020_router_purchase.csv', 'r')``>>>` `x = f.read().split('\n')``>>>` `x``['Site,Router_Type,IOS_Image,No_of_routers,Unit_price($),Purchase_Date', 'NYNY,ISR4351/K9,isr4300- universalk9.16.09.05.SPA.bin,4,$ 9100.00,1-Mar-20', 'LACA,ISR4331/K9,isr4300- universalk9.16.09.05.SPA.bin,2,$ 5162.00,1-Mar-20', 'LDUK,ISR4321/K9,isr4300- universalk9.16.09.05.SPA.bin,1,$ 2370.00,3-Apr-20', 'HKCN,ISR4331/K9,isr4300- universalk9.16.09.05.SPA.bin,2,$ 5162.00,17 -Apr-20', 'TKJP,ISR4351/K9,isr4300- universalk9.16.09.05.SPA.bin,1,$ 9100.00,15 -May-20', 'MHGM,ISR4331/K9,isr4300- universalk9.16.09.05.SPA.bin,2,$ 5162.00,30 -Jun-20', '']``>>>` `y = x[2]``>>>` `y``'LACA,ISR4331/K9,isr4300-universalk9.16.09.05.SPA.bin,2,$ 5162.00,1-Mar-20'``>>>` `z = y.split(',')``>>>` `z``['LACA', 'ISR4331/K9', 'isr4300-universalk9.16.09.05.SPA.bin', '2', '$ 5162.00', '1-Mar-20']``>>>` `price_4331 = z[4]``>>>` `print(price_4331)``$ 5162.00` |
说明
| ① | 在本例中,您刚刚练习了从 CSV 文件中读取数据并提取特定信息。#1.`read().split()`方法读取文件,分割项目,并将项目保存在每行的列表中。#2. *x* 的索引 2 被分配给变量`y`。#3.再次,`split()`将字符串分解成一个列表。该列表被分配给一个变量`z`。#4.`z`的第五元素或索引 4 元素被分配给一个名为`price_4331`的变量。#5.一台思科 4331 的价格印在屏幕上。 |

练习 3-23:计算购买路由器的总成本:无模块

| ① | `# ex3_23.py``total = 0.0``with open ('C://Users//brendan//Documents//2020_router_purchase.csv', 'r') as f:``headers = next (f)``for line in f:``line = line.strip ()``devices = line.split (',')``devices[4] = devices[4] .strip ('$')``devices[4] = float (devices[4])``devices[3] = int (devices[3])``total += devices[3] * devices[4]``print('Total cost: $', total)` | | ② | `C:\Users\brendan\Documents>` `python ex3_23.py``Total cost: $ 78842.0` |
说明
| ① | 使用在练习 3-23 中学到的方法,创建一个名为`ex3_23.py`的程序来计算路由器的总开销。我们把总数的初始值定为 0.0 美元。使用列表中的索引 3 和索引 4 来查找购买路由器的费用。为了避免计算过程中可能出现的错误,我们使用`header=next(f)`来跳过第一行的标题信息。在各种数据类型之间进行拆分、剥离和转换。将脚本保存在`Document`文件夹中,并确保您更改了文件路径以适应您的计算机设置。 | | ② | 运行 Python 应用,找出购买路由器的总成本。根据我们的剧本,总费用是 78,842 美元。这些练习看起来很深奥而且没有意义,但是在处理有意义的数据和开发实际工作应用时会变得有用。 |

练习 3-24:计算购买路由器的总成本:使用 csv 模块

| ① | `# ex3_24.py``import csv``total = 0.0``with open ('C://Users//brendan//Documents//2020_router_purchase.csv') as f:``rows = csv.reader (f)``headers = next (rows)``for row in rows:``row [4] = row [4].strip ('$')``row [4] = float(row [4])``row [3] = int(row [3])``total += row[3] * row[4]``print('Total cost: $', total)` | | ② | `C:\Users\brendan\Documents>` `python ex3_24.py``Total cost: $ 78842.0` |
说明
| ① | 我们使用 Python 内置的`csv`模块重新创建了同一个应用。首先,导入`csv`模块,并遵循相同的条带化和数据类型转换过程。编程中有一句名言,“剥猫皮的方法不止一种。” | | ② | 运行新代码,但总成本是一样的。 |

正如我们之前讨论的,本章只涵盖了基本的和特定的 Python 主题。我建议您阅读其他基本的 Python 书籍,并深入本书中讨论的主题。干得好!您已经完成了基本的 Python 练习,为一些 Python 网络自动化做好了准备,但更多高级主题将在后面的章节中介绍。

练习 3-25:转换 dd-mmm-yy 并计算天数和年数的差值

在从事网络工作时,您会注意到不同的供应商在他们的软件中有不同的日期和时间格式。一个很好的例子是思科路由器和交换机的日期格式。当我处理从实际的 Cisco IOS 软件中收集的数据时,我不得不花一个小时来转换和处理特定格式的 Cisco IOS 发布日期,并计算出 IOS 映像自发布日期以来的时间。这个练习来自一个真实的生产示例脚本。下面是给出的 IOS 发布日期的格式:12-Jul-17。

目标是操纵日期并将其转换为正确的格式,这样 Python 就可以计算出 IOS 自发布之日起有多长时间了。请注意,您的日期将与本例中给出的结果不同,因为它使用today()作为计算日期。首先遵循示例①,然后遵循迭代示例②。

| ①`#1``#2``#3``#4``#5``#6``#7``#8``#9``#10``#11``#12``#13` | `# Follow this exercise in Python IDLE``>>>` `from datetime import datetime``>>>` `IOS_rel_date = '12-Jul-17'``>>>` `x = IOS_rel_date.replace('-', ' ')``>>>` `y = datetime.strptime(x, '%d %b %y')``>>>` `y``datetime.datetime(2017, 7, 12, 0, 0)``>>>``y.date()``>>>` `y_day = y.date()``>>>` `datetime.today()``datetime.datetime(2020, 4, 15, 11, 56, 3, 370515)``>>>` `datetime.today().date()``datetime.date(2020, 4, 15)``>>>` `t_day = datetime.today().date()``>>>` `delta = t_day - y_day``>>>` `print(delta.days)``1008``>>> years = round(((delta.days)/365), 2)``2.76` | | ② | `# Reiterated and reduced version of example 1:``>>>` `from datetime import datetime``>>>` `x = IOS_rel_date.replace('-', ' ')``>>>` `y_day = (datetime.strptime(x, '%d %b %y')).date()``>>>` `t_day = datetime.today().date()``>>>` `delta = t_day - y_day``>>>` `years = round(((delta.days)/365), 2)``>>>` `print(years)``2.76` |
说明
| ① | #1.从日期时间库中导入日期时间模块。我们需要这个库来完成我们的挑战。#2.以字符串形式输入 IOS 发布日期,开始本练习。#3.用空格替换`-`。#4.使用 datetime 模块的`strptime`方法将`x`转换为正确的日期格式。`%d`代表天数,`%b`代表缩写月份,如一月、六月、七月,`%y`代表缩写年份,没有前两位数字。Python 的 datetime 模块期望日期采用特定的格式,我们正在尝试规范化格式以实现我们的目标。#5.现在输入`y`来检查当前的格式。它有两个由逗号分隔的 0,即小时和分钟。我们必须去掉这两个零。#6.现在使用`y`上的`date()`方法删除小时和分钟信息。在应用之前先检查一下。这是解决一半挑战所需的日期格式。我们现在达到了 50%。#7.现在我们对日期格式满意了,所以把它赋给变量`y_day`。#8.是时候处理今天的日期了。为了找到 IOS 发布以来的天数,我们需要计算出今天是几号,然后减去发布日期。再次使用`datetime()`模块,这次是在`today()`上。#9.如果结果可以接受,那么在后面追加`.date()`以删除时间元素。这将以正确的格式返回日期。#10.现在将 9 号中的对象赋给一个变量`t_day`。#11.两个日期之间的差值为`t_day`–`y_day`。#12.打印结果,它将返回天数的增量。#13.现在将 delta 除以 365 天,将天数转换为年数。使用`round()`功能给出最后两位小数。这个单独的练习将让您对如何处理特定的数据有所了解,在本例中是日期。 | | ② | 该实例是实例 1 的重复版本。我将一些函数压缩成一行,以缩短转换过程。这只是数据操作的一个例子,还有许多其他方法可以完成同样的转换。尽管如此,重要的是理解思维过程,这样你就可以根据你的情况来调整它。最后,如果您有 10 分钟的时间,请访问以下网站,查看有哪些 *strftime* 代码格式: [`https://strftime.org/`](https://strftime.org/) 。 |

探索 Python IDE 环境

完成本章后,您需要开始考虑 Python 代码开发的集成开发环境(IDE)。在文本编辑器中工作很简单,但也有其局限性。在 IDE 中工作并不是强制性的,但是当您编写更复杂和更长的 Python 代码时,当使用文本编辑器(如 Windows 上的 Notepad、EditPlus 或 Notepad++或 Linux 上的 vi、Emacs、Gedit 或 nano)时,您的编码效率会下降。ide 提供了许多标准文本编辑器所没有的特性。当您与团队成员协作时,文档的版本控制突然变得至关重要。许多组织使用带有云存储的 GitHub 作为他们的代码版本控制解决方案。不过,在这个阶段,您不必担心 GitHub 或版本控制。你必须先学会爬行,然后才能走路。因此,在本书的这一部分之外,不再讨论这个话题。在本书中,您不必开始使用 IDE 应用,但是我鼓励您一次探索一个,并找到与您的编码风格最匹配的应用。在企业 Linux 系统上,你很少看到图形用户界面(GUI),所以这里只讨论兼容 Windows 的 ide。为了帮助您探索适用于 Windows 的各种 Python IDEs,请参见表 3-1 。虽然 Jupyter Notebook (Anaconda)不是一个 IDE,但它包含在表 3-1 中,给你提供了学习 Python 的另一条途径。

表 3-1。

Python IDEs 和 Anaconda (Jupyter 笔记本)

|

推荐的 IDE

|

利弊,下载网址

|
| — | — |
| PyCharm* | 优点:功能丰富,直观的用户界面,支持跨平台,专为 Python 打造,免费社区版,对初学者和专家都很友好缺点:付费专业版URL : https://www.jetbrains.com/pycharm/download/ |
| 微软 Visual Studio | 优点:Windows 友好,易于使用(尤其是如果你是 Windows 用户),功能丰富,社区版本免费缺点:界面启动会比较慢。URL : https://visualstudio.microsoft.com/vs/features/python/ |
| 月食 | 优点:多种编程语言支持,熟悉的用户界面,免费缺点 : JRE (JDK)依赖,对初学者来说很难设置,老的 IDEURL : https://www.eclipse.org/downloads/packages/installer |
| 原子 | 优点:由 GitHub 的电子文本编辑器开发,支持跨平台和多种编程语言,通过扩展和插件提供丰富的功能,关于应用编程接口(API)的良好文档,免费,易于使用,轻便但仍然强大缺点:不如 PyCharm 直观,比 PyCharm 更接近文本编辑器URL : https://atom.io/ |
| 崇高正文 3 | 优点:流行的代码编辑器,具有快速、稳定、成熟的用户界面;许多具有模块化方法和可扩展性的特性缺点:不像其他 IDE 那样通用,感觉更像是文本编辑器而不是 IDE,必须购买许可证才能继续使用,没有调试选项URL : https://www.sublimetext.com/3 |
| anaconda–jupyter 笔记型电脑 | 优点:初学者友好,优秀的 Python 学习工具,基于网络,被科学界用于数据分析缺点:不是 IDE,基于网络,系统资源多URL : https://jupyter.org/install |

摘要

这一章很简短,但是包含了比 Python 的print()函数和语法更多的内容。这一章作为一个测试章节,让你对下一章的内容有所了解;通过查看一些新的 Python 模块、处理文件以及使用简单的 Python 代码处理数据,您学习了更多的 Python 基础知识。第 2 和第三章应该作为本书后面介绍的 Python 网络自动化实验室的良好基础。如果你仍然没有完全理解练习的某些部分,可以回头重复练习两到三次。如果你有时间,在你读到第十一章的时候,你应该把这两章的练习重复三遍。第 4 至 6 章将着重于构建虚拟集成的 Python 网络自动化实验室,从安装 VMware Workstation Pro 开始。是时候进入第四章学习 VMware 工作站基础知识和一般虚拟化技术基础知识了。VMware Workstation 及其虚拟化技术将帮助您构建完整的虚拟网络实验室,并作为实验室中虚拟机的粘合剂,因此我建议您完整阅读下一章。

故事时间 2:机器大战人类,第一次对抗

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据维基百科,第一次机器与人类的对抗发生在 19 世纪 70 年代左右的美国,当时一位名叫约翰·亨利的矿工为了修建铁路隧道向自动蒸汽钻机发起挑战。约翰·亨利的故事在美国童谣中流传到了年轻一代。在过去,要钻一条铁路隧道,铁路矿工必须使用锤子、凿子和钻头来打洞,并使用炸药来炸毁陆地以建造隧道。这场人机竞赛在美国变得如此著名,以至于约翰·亨利对抗蒸汽机的故事成了美国民间传说。根据这个故事,隧道挖掘比赛进行了一天半,以钻炸药洞和铺设轨道。

根据这个民间故事,约翰·亨利打败了蒸汽钻,并在捍卫自己的工作时取得了胜利。可悲的是,根据这个故事,约翰·亨利由于疲劳和比赛后的严重压力而死于心脏病发作。当然,第二天和接下来的几天,蒸汽钻继续钻孔。显而易见的是,约翰·亨利和他的同事们的工作正在自动化,美国铁路公司毫不犹豫地用机器取代了矿工。第一次工业革命期间,农业和制造业也发生了同样的事情,人类任务的自动化今天仍在继续,未来也将继续。

根据维基百科,“自动化是一种在最少人工协助下执行流程或程序的技术。”我们都同意自动化总体上提高了人类的生活质量,但自动化硬币总是有两面。约翰·亨利是一个简单的矿工,以挖洞为生,几乎没有接受过机械或机器操作方面的教育。对他来说,学习如何操作重型机械,蒸汽钻,这是 19 世纪 70 年代最新最伟大的技术,是一项挑战。因此,对于这个可怜的家伙来说,从一份旧工作转换到一份新工作几乎是不可能的。看看今天的自动化和 IT 自动化,特别是,现有的工程师已经发现自己处于与 John Henry 相同的情况,并且随着 IT 技术的快速发展,将来会有更多的工程师面临困难。信息技术的进步将取代许多现有的信息技术工作。尽管如此,好消息是,新技术也将为那些不断学习如何在尖端 IT 行业生存的人创造新的工作和机会。如果你的工作实现了自动化,你发现自己失业了,你会因为失业而感到痛苦,但如果你一直在准备过渡到 it 自动化,你可能也会乐在其中。

来源: https://en.wikipedia.org/wiki/John_Henry_ (folklore)

四、VMware Workstation 简介

VMware Workstation Pro 是企业 IT 人员最常用的终端用户桌面虚拟化解决方案之一。它允许 It 工程师从他们自己的 PC/笔记本电脑上构建和测试类似真实世界的虚拟机和网络设备。学习在一台计算机上构建一个功能完整的集成虚拟实验室,并在一台 PC 上掌握 Python 网络自动化基础知识是本书的根本目标。本章旨在向您介绍最流行、最通用的 VMware 产品 VMware Workstation 15 Pro 的基础知识,以及基本的虚拟化概念。阅读本章后,您将获得以下知识:您将了解类型 1 和类型 2 虚拟机管理程序之间的区别,了解提供不同桌面虚拟化解决方案的各种 IT 供应商,了解如何安装 VMware Workstation,了解如何在 VMware Workstation 上执行常规管理,以及了解 VMware Workstation 的网络适配器如何工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

VMware 工作站概览

VMware 于 1998 年在加利福尼亚州的帕洛阿尔托成立,二十多年来,该公司一直在发展壮大并引领着企业虚拟化市场。除了本书的前三章,本书将依赖于 VMware 的桌面虚拟化技术,即 VMware Workstation 15 Pro。在开始学习 Python 自动化之前,您必须对各种 IT 技术保持开放的态度。学习编写 Python 代码并不保证您的网络自动化尝试会成功。您将需要学习正则表达式和 Linux 管理,这些主题通常超出了网络工程师的舒适范围,但是对于编写功能性代码是必不可少的。没错;通往 Python 网络自动化的道路崎岖不平。对于一个初学 Python 的人来说,独自学习 Python 语法可能需要几个月的时间,而且可能需要几年才能称自己是这种编程语言的专家。然而,更大的挑战是将 Pythonic 概念和语法应用到您的工作中。您需要在当前网络和一般 IT 知识的基础上学习和构建 Python 知识。编写 Python 代码只是你旅程的第一步。它要求您更好地理解 Linux、网络、简单的数学、正则表达式、与几个 API 的交互等等。

在时间和资源有限的情况下,您正试图学习使用 Python 在网络自动化领域取得良好开端所需的基本技能,所有学习都将在一台 Windows PC(或一台笔记本电脑)上进行。为此,我们必须利用 VMware 桌面虚拟化解决方案的强大功能。使用 VMware Workstation 15 的原因很简单。它为像您这样的 Python 编程新手提供了一个实用而简单的虚拟实验室,可以在多种场景中学习。

首先,我们必须熟悉基本的虚拟化概念和 VMware Workstation 15 的一些基本功能。即使您是各种虚拟化解决方案(包括 VMware 产品)的长期用户,您也会从本章中学到一些新东西,所以我希望您能完整地阅读本章。读完这一章后,你将毫无问题地理解本书的其余内容,并最终建立一个 Python 网络自动化实验室。在前一章中,您在您的主机 Windows PC 上安装了 Python 3,并在 Windows 10 上学习了 Python 基础知识。但是,在本章和后面的章节中,将指导您使用 VMware Workstation 15 Pro 在同一台 Windows 主机上安装两种版本的 Linux 分发服务器。因此,您也可以轻松地学习 Linux 服务器的 Python 基础,并在第 7 和 8 章开始学习 Linux 基本管理技能。要运行各种操作系统,我们得使用虚拟化技术来帮助我们在同一个主机平台上运行多台机器;VMware Workstation 15 可以帮助我们。作为本章准备工作的一部分,您将在您的 PC 上下载并安装 VMware Workstation 15。之后,您将学习 VMware Workstation 15 的基础知识,然后在以下两章中安装最新版本的 Ubuntu 20 和 CentOS 8 服务器。在整本书中,这些服务器将用于教您 Linux 管理、Python 安装和 Python 模块安装,以及如何将 CentOS 服务器构建为一体化 IP 服务服务器,该服务器可在本书末尾的概念验证(PoC)实验室中用作小刀工具。

您对 VMware Workstation 15 的特性和基本虚拟化功能了解得越多,您就越能更有效地构建这个测试实验室环境。在为企业 IT 解决方案设计和构建 PoC 实验室时,通常只部署昂贵且功能极其强大的设备来测试最简单的概念。有时需要真实的设备,例如,在与硬件相关的系统性能测试中进行压力测试。此外,购买合适设备的采购过程可能需要数周甚至数月时间。如何找到具有足够电源电压和冷却能力的机架空间,以保持您的实验室平稳运行?此外,物理实验室包括使用正确连接器类型的正确电缆,以适应供应商的设备接口,这可能会降低您构建公司的概念验证实验室的速度。通常情况下,公司实验室只有公司的几个人使用,因此浪费了数千美元。这完全是浪费公司的钱,而且,球场的这一边肯定没有绿色 IT。由于过去十年虚拟化技术的进步,越来越多的设备正在迁移到虚拟化平台,正如您所看到的基于云的计算和软件即服务 IT 产品的爆炸式增长,任何 IT 即服务都以这样或那样的形式利用虚拟化技术的力量。

VMware Workstation 15 Pro 是 VMware 最受欢迎的跨平台桌面虚拟化计划,支持 Windows 和 Linux。对于 macOS 操作系统,VMware Fusion 提供了相同的功能。有一个免费版的 VMware Workstation Player,但是它缺少让您的实验室成为一个完整实验室所需的所有功能。因此,您将使用 VMware Workstation 15 Pro。您将在 Microsoft Windows 10 主机系统上安装一系列软件应用,每次安装一个。根据维基百科的数据,2017 年的数据表明,使用 Windows 操作系统帐户的台式机/笔记本电脑用户的比例约为 88%,macOS 用户约占 10%,最后,世界上只有 2%的 Linux 台式机/笔记本电脑用户。从我自己的经验来看,即使在 IT 行业内部,也反映了类似的用户百分比。然而,由于基于 Python 的企业级自动化解决方案是首选的编程语言,Linux 是默认的操作系统,具有更高的灵活性、更高的性能、更低的拥有成本和更好的安全性。

您可以从 VMware 官方网站下载 Workstation 15 Pro Evaluation for Windows,并享受 30 天的免费试用期。30 天后,您可以购买 15.5 版许可证并永久激活评估软件。写这本书的时候,最新的 VMware Workstation for Windows 版本是 15.5.1,build 15018445,但是你下载的版本会更新一些(15.5 版甚至 16.x 版),但是应该还是能和本书推荐的大部分软件一起工作。供您参考,VMware Workstation 的版本 13 从未发布,版本 14 已发布,但它在 GNS3 集成方面有多个错误。奇怪的是,GNS3 和思科 VIRL IOS 软件在 VMware Workstation 12.5.x 或 15.x 上运行最佳,但在 14.x 版本上则不行。因此,如果您正在使用 VMware 14,您必须升级到最新的 VMware Workstation 15.x 版本,以避免出现任何问题。还建议您禁用自动更新功能,以保持您的软件版本始终稳定。这个兼容性建议是基于我的软件兼容性测试。图 4-1 显示了本书中使用的 VMware Workstation 15 Pro 的产品信息(文件名:VMware-workstation-full-15.5.1-15018445.exe)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-1。

关于 VMware Workstation 15 Pro

即使您还不熟悉虚拟化的概念和该软件,学习本章内容也不会有任何问题,因为本书假设您以前没有使用该 VMware 产品的经验。那些不熟悉像这样的桌面虚拟化程序的人仍然可以通读这一章来熟悉这个软件和一些基本的桌面虚拟化概念。对于那些有多年虚拟化经验的人,请浏览本章并跳到下两章,其中包括安装 Ubuntu 20.04 和 CentOS 8 Linux 虚拟机(VM)。

第 1 类与第 2 类虚拟机管理程序

关于虚拟化(虚拟机管理程序)软件,首先要了解的是类型 1 和类型 2 虚拟机管理程序之间的区别。为了解释类型 1 和类型 2 虚拟化软件之间的差异,如果主机硬件不需要单独的操作系统软件,则虚拟化软件直接在主机硬件上执行。它被归类为 1 类虚拟机管理程序。如果托管硬件需要单独的操作系统软件,则被归类为第 2 类虚拟机管理程序。更直白地说,类型 1 虚拟机管理程序通常用于业务用途,类型 2 虚拟机管理程序设计用于个人和实验用途。这并不意味着 Type-2 不应该用于商业用途。但是,在商业环境中,几乎没有理由使用类型 2 虚拟机管理程序而不是类型 1 虚拟机管理程序,因为类型 1 虚拟机管理程序提供了更好的稳定性、高可用性和更好的可扩展性功能。Type-1 虚拟机管理程序系列,也称为裸机,是指发布时没有内置操作系统软件的企业级服务器平台。典型的第 1 类虚拟机管理程序产品包括 VMware 的 ESXi、微软的 Hyper-V for Servers、Citrix 的 XenServer 和 Oracle VM。

相比之下,为桌面应用开发的第二类虚拟机管理程序的示例包括 VMware 的 VMware Workstation、Fusion、Player、Oracle 的 VM VirtualBox(以前为 Sun Microsystems)、Microsoft 的 VirtualPC 和 Red Hat 的企业虚拟化。第二类虚拟机管理程序也称为桌面(或托管)虚拟机管理程序。本书中使用的 VMware Workstation 15 Pro 运行在 Windows 10 主机上,使其成为第 2 类虚拟机管理程序。

用于概念验证实验室的 VMware Workstation Pro

VMware Workstation 15 Pro 是 VMware 的旗舰桌面虚拟化计划。版本 1 发布于 1999 年,最新版本是在撰写本书时的 16 版本。虽然这本书是基于 15.x 版本,但是你基于 16.x 版本搭建实验室不会有问题,安装和使用这个桌面程序是直观的任务,不需要用户培训就可以使用。它支持 Windows 和 Linux 操作系统。运行在操作系统之上的虚拟程序,如 VMware Workstation,有时被称为实验虚拟化程序,最新的软件试用版可从 VMware 的官方下载页面获得。基本安装很简单,只需按几个按钮就可以完成安装。如果您没有有效的许可证,该程序将在 30 天的试用许可证上运行。经过 30 天的试用期后,您可以在购买许可证后继续使用该软件。

当然,在选择实验室使用的桌面虚拟化软件时,您会发现来自微软和甲骨文的其他流行软件。甲骨文的 VirtualBox 和微软的 Hyper-V 被认为是 VMware Workstation 的替代品,但因为软件兼容性和系统稳定性,我们将使用 VMware Workstation 15 Pro。考虑了企业级虚拟化计划,如 VMware 的 ESXi 和微软的 Hyper-V,但此类第 1 类虚拟机管理程序对硬件规格的要求更高。例如,类型 1 虚拟机管理程序软件需要安装在特定于虚拟机管理程序的硬件(裸机)服务器上。此外,您还需要一台单独的客户端 PC 来远程控制服务器,以运行第 1 类虚拟机管理程序软件。此外,第 1 类虚拟机管理程序通常部署在数据中心或公司通信室,并不意味着是移动的。

使用 VMware Workstation 之前

安装 ESXi 6.5 等第 1 类虚拟机管理程序软件时,安装过程中有一些严格的硬件要求。该软件具有检查最低硬件要求的内置过程。幸运的是,对于在您的主机操作系统上安装 VMware Workstation 15 Pro,没有或只有最低限度的硬件先决条件。如果您的计算机的 CPU 和主板支持虚拟化技术,那么您可以开始安装。新型电脑或笔记本电脑的 BIOS 出厂时启用了虚拟化技术选项。如果您使用的是较旧类型的 PC 或笔记本电脑,则需要启用此设置,但这是在 PC 上安装软件之前唯一需要更改的内容。直到最近,VMware 的虚拟化解决方案倾向于支持英特尔的 CPU 架构,而不是 AMD 的 CPU 架构。以我自己的经验来看,英特尔 CPU 在性能、兼容性和效率方面远远优于 AMD CPUs。当然,AMD 最近在 CPU 开发上投入了大量资金,但 AMD CPUs 更适合喜欢 PC 游戏的个人用户。

在安装 VMware Workstation 15 Pro 之前,请确保在进入笔记本电脑/PC 主板的 BIOS 后将虚拟化支持设置为启用,如图 4-2 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-2。

检查英特尔 CPU 主板虚拟化支持设置

如果在 BIOS 中将英特尔 VT(或 AMD-V)的使用设置为禁用,则将设置更改为启用,然后按 F10 键保存更改并正常登录 Windows 10。表 4-1 和 4-2 列出了主要主板和笔记本电脑制造商的 BIOS 条目密钥。进入 BIOS 的功能键或组合键因制造商而异,这里提供了最常见的制造商键供您参考。如果您在表中找不到您的笔记本电脑制造商,请访问制造商的网站并找到 BIOS 信息以更改 BIOS 设置。

表 4-2。

主板的 BIOS 设置入口键

|

制造商

|

BIOS 键/组合键

|
| — | — |
| 亚斯洛克 | F11 |
| 华硕 | F12/F2/F8/F9 |
| 生物星(BIOSTAR) | F7/F9 |
| 康柏电脑公司(美著名电脑制造商) | F10 |
| EMTec 公司 | F9 |
| 富士康 | F7/Esc 键 |
| 十亿字节 | F12 |
| 大功率(High Power)ˌ高压(High Pressure)ˌ高性能(High Performance)ˌ高聚物(High Polymer) | F9 |
| 美国英特尔公司(财富 500 强公司之一ˌ以生产 CPU 芯片著称) | F10 |
| 水平规ˌ水准仪(Level Gauge) | F12 |
| 中规模集成电路(medium-scale integration 的缩写) | F11 |
| 佩帕托伦 | F11 |
| 三星电子 | 经济社会委员会 |
| 其他的 | 请参考相应的供应商网站 |

表 4-1。

笔记本电脑制造商提供的 BIOS 设置入口密钥

|

制造商

|

BIOS 组合键

|
| — | — |
| 宏基电脑公司 | F2/Del(新建)F1/Ctrl+Alt+Esc(旧) |
| 华硕 | F2/F10/Del/Insert/Alt+F10 |
| 康柏电脑公司(美著名电脑制造商) | F1/F2/F10/Del |
| 幽谷 | F1/Del/F12/F3(新)(当戴尔徽标出现在屏幕上时按下)Ctrl+Alt+Enter/Fn+Esc 或 Fn+F1/Ctrl+F11(旧) |
| 电子机器 | F2/Del 键 |
| 日本富士通公司 | 第二子代 |
| 门 | F1/F2 |
| 大功率(High Power)ˌ高压(High Pressure)ˌ高性能(High Performance)ˌ高聚物(High Polymer) | F1/F2/F6/F9/F10/F11/Esc 平板电脑:F10/F12 |
| 联想(电脑的品牌名) | F1/F2/F11(新)Ctrl+Alt+F3/Ctrl+Alt+Ins/Fn+F1 (舊) |
| 水平规ˌ水准仪(Level Gauge) | F10/F11/F12 |
| 三星电子 | F2/F4 |
| 索尼 | f1/F2/F3/辅助 |
| 东芝 | F2/F1/ESC/F12 |
| 其他的 | 请参考相应的供应商网站 |

这里还有一个关于 VMware Workstation 版本的提醒:VMware Workstation 15 Pro 在发布时的最新版本是 15.5.1 build-15018445。另请注意,版本 14 显示了与本书中使用的一些应用的兼容性问题。该问题被确定为 GNS3 Docker 程序下载流程的安全文件和 VIRL 集成要求。请使用与 GNS3 兼容的最新 15.5 版本。本书使用 15.5.1 版,即编写本章时的最新版本 15.5。如果您没有版本 15 的副本,请使用版本 12。版本 12 还与 GNS3、VIRL 软件和 GNS3 Docker 映像兼容且稳定。在本书的第一稿和技术审查之后,VMware 发布了第 16 版。您应该能够使用 16 版或最新版本,并仍然遵循这本书的内容。目前,请使用 VMware Workstation 15.x Pro 或 16.x 或 12.x,但不要使用 14.x。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传阅读本章之前,请在您的 Windows PC 上下载并安装 VMware Workstation 15(或 16) Pro。下载和安装很简单,但是如果您需要帮助,本书提供了下载安装指南的链接。

从以下 URL 下载 VMware Workstation 15/16:

URL: https://www.vmware.com/au/products/workstation-pro/workstation-pro-evaluation.html

“第四章准备工作-安装 VMware Workstation”指南可从以下网址获得:

URL: https://github.com/pynetauto/apress_pynetauto

VMware Workstation 15 Pro 的下一款产品是什么?

作为本章的准备工作,您必须在主机上安装 VMware Workstation 15 Pro。在安装两台 Linux 虚拟服务器和导入 GNS3 VM 之前,我们将为那些不熟悉虚拟化技术和该计划的人快速回顾一下菜单选项。如果您确信自己对 VMware Workstation 功能了如指掌,请跳到第五章。无论如何,你可以把虚拟机(VM)想象成另一台运行在主机操作系统(Type-2)上的独立计算机。用户可以通过 Workstation 15 Pro 的主用户控制台与虚拟机进行交互,并使用各种操作系统安装媒体文件来创建和安装虚拟机,然后配置、导入、导出、控制和管理虚拟机的所有方面。您已经看到了 VMware Workstation 15 Pro 的主用户控制台,并且已经注意到用户界面简洁直观。然而,虚拟机的操作和行为比您最初想象的要复杂得多。虚拟机看起来像一个应用,但它是一台具有真实硬件计算机的许多固有特性的计算机。了解 Workstation 15 Pro 的最佳方式是使用它,但为了让您的学习更容易一些,我们将在下一部分介绍一些与控制台相关的术语。让我们看看用户界面、菜单和虚拟网络编辑器。

快速浏览后,您将被引导至下载和安装几个虚拟机的链接,并使用 GNS3 .ova文件下载和导入一个虚拟机。您必须在本章结束时创建所有三个虚拟机,因为本书的其余部分将依赖这些虚拟机来学习 Linux、学习正则表达式、安装 Python 和网络相关模块,以及学习如何在虚拟实验室中编写 Python 网络自动化脚本。为了模拟真实的实验场景,您将测试各种网络概念,并熟悉最常用的文件共享服务。例如,本书的最后几章将包含基于 CentOS 8 虚拟机的 FTP、SFTP 和 TFTP 服务器的实验场景。

或者,如果您想在这里创建新的虚拟机,然后将它们导出到真实的生产环境中,您可以使用 VMware Converter 软件来实现。虚拟机可以在 VMware Workstation 上预留,然后在以后进行转换,将虚拟机转换为在 VMware 的 vSphere 6.5 上运行的类型 1 虚拟机。现在,我们先来看看 Workstation 15 Pro 的主用户控制台及其菜单。

VMware Workstation 15 Pro 用户控制台

Workstation 15 Pro 用户窗口(或控制台)允许您安装、控制和管理各种类型的虚拟机。图 4-3 显示了 VMware Workstation 15 Pro 的主用户界面和默认按钮。该图将为您提供有关菜单和按键的各种功能的信息。使用该程序不需要特殊技能,安装后您可以轻松地创建和使用虚拟机。现在,让我们学习菜单和主要功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-3。

VMware 工作站,用户窗口

VMware Workstation 15 Pro 的基本操作

图 4-4 描绘了 VMware Workstation 15 Pro 的主用户界面,这是您管理虚拟机的主要界面。与 Windows 10 和 Oracle VirtualBox 上的 Microsoft Hyper-V 相比,VMware Workstation Pro 拥有最友好的用户界面和用户触手可及的强大功能。让我们快速学习一下这个程序最基本的功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-4。

VMware 工作站,主用户窗口

VMware Workstation Pro:基本操作

| ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_4_Fig5_HTML.jpg&pos_id=img-okoAAR8z-1723276965961)图 4-5a。启动 VMware Workstation Pro | **启动 VMware Workstation 15 Pro(图**[](#Fig5)****)**:** **您可以使用 Windows 桌面上的 VMware 快捷方式或 Windows 10 的“开始”菜单启动该程序:开始➤程序➤ VMware ➤ VMware 工作站。** | | ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_4_Fig6_HTML.jpg&pos_id=img-4ARCq68W-1723276965961)图 4-5b。电源选项 1 | **打开/关闭电源,暂停或重置虚拟机(图****4-5b****)**:打开/关闭或暂停虚拟机的一种方法是从虚拟机菜单中选择虚拟机:虚拟机➤电源➤启动来宾。 | | ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_4_Fig7_HTML.jpg&pos_id=img-FroLGyCQ-1723276965961)图 4-5c。电源选项 2 | 打开/关闭、暂停或重置虚拟机的第二种方法是在虚拟机库中选择虚拟机(图 4-5c )。右键单击虚拟机,然后选择电源➤启动来宾。 | | ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_4_Fig8_HTML.jpg&pos_id=img-zhzaibhq-1723276965961)图 4-5d。电源选项 3 | 打开/关闭、暂停或重置虚拟机的第三种方式是使用用户窗口顶部的电源键选项(图 4-5d )。 | | ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_4_Fig9_HTML.jpg&pos_id=img-YtNlo1Lq-1723276965961)图 4-5e。要迁移到虚拟机 | 要移动到虚拟机(从主机),请按 Ctrl+G。要使用正在运行的虚拟机,请使用鼠标左键单击虚拟机控制台或按键盘上的 Ctrl+G(图 4-5e )。 | | ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_4_Fig10_HTML.jpg&pos_id=img-icAyIGnV-1723276965961)图 4-5f。要退出虚拟机 | 要退出虚拟机(将光标移回主机),请按 Ctrl+Alt。要在使用虚拟机时将鼠标光标退出 Windows 主机,请按 Ctrl+Alt 键退出主机(图 4-5f )。 |

更详细的使用说明,请参考 https://docs.vmware.com/en/VMware-Workstation-Pro/15.0/workstation-pro-15-user-guide.pdf

VMware 工作站菜单

表 4-3 一目了然地显示了所有菜单。最常用的功能标有星号(*)。您可能会发现检查功能并跳到创建虚拟机很有帮助。

表 4-3。

菜单一览

|

菜单屏幕截图

|

菜单功能

|
| — | — |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传文件菜单 | **文件菜单:*创建新的虚拟机打开一个新窗口打开虚拟机扫描虚拟机关闭选项卡连接到外部服务器、vCenter 和 vSphere 服务器连接到 vCloud Air 创建 p2v(物理到虚拟)导出到 OVF 文件连接到虚拟磁盘退出 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传编辑菜单 | 编辑菜单:切口复制粘贴虚拟网络编辑器偏好 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传查看菜单 | **查看菜单:*全屏查看统一模式控制台视图使屏幕适合来宾操作系统使屏幕适合窗口自动调整大小自定义视图 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传VM 菜单 | **VM(虚拟机)😗*电源
可移动设备中止发送 Ctrl+Alt+Del 键抓住打字快照管理屏幕捕获经营 VMware 工具安装设置
|
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传标签菜单 | **标签页菜单:**主页前往主屏幕下一个选项卡上一个选项卡 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传帮助菜单 | **帮助:**帮助在线文档支持暗示输入许可证密钥VMware 工作站注册软件更新关于 VMware Workstation |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传虚拟机电源图标 | **虚拟机电源图标:**客人在
客人离开来宾暂停继续来宾通电关机中止重置开机时进入 BIOS |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传发送 Ctrl+Alt+Del 图标 | 向虚拟机发送 Ctrl+Alt+Delete |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传快照图标 | 拍摄此虚拟机的快照将此虚拟机恢复到其父快照管理此虚拟机的快照 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传屏幕模式选项图标 | 显示或隐藏库显示或隐藏缩略图栏进入全屏模式进入统一模式 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传显示或隐藏控制台视图图标 | 显示或隐藏控制台视图 |
| 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传自由拉伸图标 | 自由伸展 |

虚拟网络适配器

初学者问的关于 VMware Workstation 15 Pro 的最常见问题之一是如何使用不同的虚拟网络适配器设置。很难一言以蔽之地提供答案;您可以阅读 VMware 网站上不必要的冗长文档,但我们大多数人没有时间阅读供应商提供的文档。在这里,我们将介绍虚拟机网络入门的基础知识。第一次使用的用户需要知道每个虚拟网络适配器之间有什么不同,以及如何使用每个适配器。解释这一点的最佳方式是查看用户可以使用哪些虚拟网络适配器。尝试理解每种网络适配器类型的定义,然后查看程序中不同的适配器设置,以揭示每个适配器在您的 PC 上是如何配置的。首先,让我们看一下虚拟网络编辑器,查看现成的虚拟网络适配器设置。

虚拟网络编辑器概述

VMware Workstation 在虚拟交换机中提供虚拟网络功能,其中三个虚拟交换机映射到三个特定网络,用户可以根据需要创建多达 17 个虚拟交换机。不同的网络类型将在下一节详细讨论。因此,您可以拥有多达 20 个虚拟交换机(VMnet0 到 VMnet19),每个虚拟交换机代表一个平面网络或子网。就像在真实的生产环境中一样,您可以将多个虚拟机连接到同一个网络(虚拟交换机)。首先,打开虚拟网络编辑器菜单,查看哪些默认连接类型可用。

# 任务

1 启动 VMware Workstation Pro 时,最佳做法是通过右键单击桌面图标并选择“以管理员身份运行”选项来启动程序,如图 4-6 所示。这样,您就可以使用完全管理员级别的权限来启动程序,以更改任何程序设置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-6。

VMware Workstation Pro,以管理员身份运行

1b 如果您不想每次启动程序时都单击“以管理员身份运行”选项,您可以更改快捷方式属性,使程序以管理员模式运行。转到 VMware Workstation Pro 的桌面图标,单击鼠标右键,选择属性,如图 4-7 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-7。

VMware Workstation Pro,快捷图标属性

在快捷方式属性菜单中,单击兼容性,在设置选项下,选中“以管理员身份运行此程序”,然后单击应用和确定按钮。现在你的程序将总是以管理员身份运行(见图 4-8 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-8。

VMware Workstation Pro,更改属性兼容性设置

2 现在,从菜单中打开并查看虚拟网络适配器,选择编辑➤虚拟网络编辑器(图 4-9 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-9。

选择虚拟网络编辑器

3 当虚拟网络编辑器第一次打开时,正如预期的那样,有三个虚拟交换机(VMnets)。与真实的网络适配器一样,虚拟适配器也可以称为虚拟 NIC 或虚拟网络接口。虚拟网络编辑器是管理不同虚拟网络的默认控制塔,如添加/删除网络、启用/禁用 DHCP 等(图 4-10 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-10。

虚拟网络编辑器,默认适配器类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在图 4-10 所示的虚拟网络编辑器窗口中,点击帮助按钮,这将打开 VMware 官方网站上的文档“使用虚拟网络编辑器”

虚拟网络接口描述

这里是我们一直在讨论的不同网络模式和网络术语的快速概述。如果您曾经学习过或研究过思科 CCNA,您应该已经熟悉网络行业中的这些网络术语。如果你正在学习 CCNP 或者完成了 CCNP 的学业,你可能会将这些网络适配器模式与真实的生产环境联系起来。然而,即使您不熟悉网络技术,理解以下解释也不会有任何困难。如前所述,有三个现成的网络适配器,但是您可以根据需要添加或删除更多的适配器。此外,在构建实验室时,可以根据您的喜好指定子网。表 3-4 描述了三种虚拟网络模式和一种用户(定制)模式。

Virtual Network Adapter Modes Explained

默认情况下,在桥接网络适配器模式下,所有虚拟机共享主机的网络连接。默认情况下,桥接网络使用 VMware Workstation 中的 VMnet0,所有计算机使用相同的网关,因此主机使用相同的 DHCP 和 DNS 服务器。主机和虚拟机都通过相同的默认网关地址获取相同的子网 IP 地址。图 4-11 描绘了 VMware Workstation Pro 上的典型桥接网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-11。

VMware 网络适配器,桥接模式

纯主机模式非常适合测试虚拟环境中隔离网络中的两个或更多虚拟机。默认情况下,仅主机模式连接到 VMnet1,虚拟机连接在同一个子网中,在实验网络之外不进行任何交互。您的主机和虚拟机仍然可以通过 VMnet1 进行通信。在图 4-12 中,注意工作站提供 DHCP 服务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-12。

VMware 网络适配器,仅主机模式

默认情况下,网络地址转换(NAT)模式通过 VMnet8 连接。网络地址转换意味着虚拟机的内部 IP 地址和主机的外部 IP 地址是不同的。在外部网络中,您只能看到主机的子网地址。如果主机可以连接到互联网,它就可以与互联网通信。图 4-13 描述了 VMware Workstation Pro 上的 NAT 配置示例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-13。

VMware 网络适配器,NAT 模式

在自定义网络中,您可以选择前面的模式之一,并根据您的情况进行自定义。它与 NAT 模式相同,但默认设置有一些变化。

我们鼓励您花足够的时间了解不同的虚拟网络模式,比较它们与真实物理网络的不同之处,然后想象您如何在 PoC 实验室中使用不同的模式。熟悉每种网络模式如何与您的主机和其他网络交互将有助于您建立一个可以测试更高级 IT 理论的实验室。从菜单中打开虚拟网络编辑器,花些时间探索设置,添加/删除新的虚拟机网络,以及自定义设置。在下一节中,您将更详细地查看虚拟机设置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传为什么要进行概念验证?在 it 领域,缩写 PoC 代表概念证明,它意味着在给定的场景中证明现有的或新的 IT 概念(或问题)。PoC 实验实验室测试某个理论的工作方式与该技术的设计方式相同。为了更好地了解并超越您的同事,您必须在 PoC 实验室中花很多时间,因为您将获得比书本或现实生活场景所能教给您的更广泛的知识。通过学习理论并在 PoC 实验室中测试理论,您总能学到更多东西,因为您不会在真实的生产环境中遇到所有的理论或问题。

揭示每个虚拟网络接口类型

让我们看看每一种类型。

仅限主机的网络

在这种模式下,您的虚拟机与主机和同一子网中的其他虚拟设备共享一个专用网络。如果您的虚拟机不需要主机外部的通信,此模式非常有用。如果您使用默认的仅主机网络,所有虚拟机都将连接到 VMnet1,您可以将 VMnet1 视为一个虚拟网络交换机。在这种模式下,为了方便起见,内置的 DHCP 服务器会向连接到该网络的主机提供 IP 地址。图 4-14 到 4-18 显示了 VMnet1 是如何配置的,相关的配置设置可以在你的主机操作系统上找到。有关 VMware 网络概念的更多说明,请参考以下教程: https://rednectar.net/2011/07/20/vmware-interfaces-tutorial/

图 4-14 显示分配给该网络的现成 VMnet1 子网是 192.168.65.0/24。当然,子网和 CIDR 可以根据需要进行更改。此外,还有一个禁用 DHCP 服务的选项,以便您可以在虚拟机的操作系统中手动分配 IP 地址。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-14。

虚拟网络编辑器,VMnet1 仅主机网络

图 4-15 显示了配置相关网络连接的虚拟机设置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-15。

虚拟机设置,仅主机网络连接

图 4-16 显示了netsh interface ip show addresses "VMware Network Adapter VMnet1"命令的结果,显示了主机 PC 上 VMnet1 的配置设置。正如所料,分配给主机的 VMnet1 适配器的 IP 地址是 192.168.65.1/24,接口度量为 35。接口度量 35 意味着 DHCP 服务配置了此 IP 地址。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-16。

Windows 主机 PC、VMware 网络适配器 VMnet1

如图 4-17 所示,当您启动虚拟机并检查网络接口设置时,DHCP 服务器为您的虚拟机分配的 IP 将来自与您的 VMnet1 网络相同的子网。由于您还没有创建和安装任何虚拟机,您可以在完成第 5 和 6 章的 Linux 安装后检查该设置。注意分配给 Ubuntu VM 的接口名是 ens33Linux 机器的网络适配器名称取决于您的 Linux OS 版本和发行版类型。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-17。

虚拟机,ens33 网络适配器

参考前面的图 4-12 来形象化并帮助您理解仅主机网络模式。现在,您知道在哪里可以找到虚拟机的纯主机虚拟网络信息。接下来,我们来看看桥接模式。

桥接网络

在桥接模式下,虚拟机的行为就好像它是主机所在网络上的另一台计算机,因此虚拟机从真实网络接收 IP 地址。对于默认桥接模式,会分配 VMnet0 网络。如果您使用家庭网络连接到互联网,您的家庭网络路由器通常会提供 DHCP 服务。默认情况下,ISP 提供的互联网调制解调器/路由器的 IP 子网为 192.168.0.0/24 或 192.168.1.0/24,默认网关采用网络上的第一个 IP 地址(. 1)和最后一个 IP 地址(. 254)。在桥接模式下,其他物理计算机可以与您的虚拟机通信,您也可以从一台计算机模拟多台计算机。默认情况下,在桥接网络模式下,您的虚拟机可以通过物理方式与互联网通信,也可以与网络上的虚拟机通信。

图 4-18 显示了虚拟网络编辑器中的默认桥接网络。IP 地址将从主机的物理适配器网络上的真实网络设备分配,因此 DHCP 选项在设置下是灰色的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-18。

虚拟网络编辑器,VMnet0 桥接网络

图 4-19 显示了配置和使用桥接网络的虚拟机设置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-19。

虚拟机设置,桥接网络连接

图 4-20 揭示了来自 DHCP 服务器 192.168.0.1 的主机物理适配器网络配置;在典型的家庭网络中,默认网关兼作 DHCP 服务器。我的主机通过无线连接到互联网,因此 Wi-Fi 3 接口显示为适配器名称,但您的设置将与图 4-20 不同。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-20。

Windows 主机 PC、本地 PC 的互联网适配器(Wi-Fi)

图 4-21 显示了一个虚拟机终端会话,揭示了从家庭网络的 DHCP 服务器接收到的 IP 地址。另外,参考上图 4-11 来形象化并帮助你理解桥接网络模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-21。

虚拟机,ens33 网络适配器

网络地址转换网络

在网络地址转换(NAT)模式下,虚拟机共享主机的 IP 和 MAC 地址。外部网络(Internet)将您的网络视为单一网络身份,内部网络在网络外部不可见。通常,在传统意义上,NAT 用于对外隐藏内部网络,并扩展网络中有用的 IPv4 IP 地址的数量。如果您已经学习了思科 CCNA 路由和交换,了解 NAT 或 PAT 是学习课程的一部分,因此了解这种类型的网络模式也有直接的意义。在本书中,您将在整个实验配置中利用 NAT 的功能,将网络配置保持在最低水平。

让我们看看图 4-22 并回顾一下在 VMware Workstation Pro 配置下 NAT 是如何配置的。在 NAT 模式下,VMware Workstation 提供 DHCP 服务,这意味着在网络内部使用另一个子网;在这种情况下,分配给 NAT 的子网位于 192.168.183.0/24 范围内,这是我们实验室连接到 Internet 和主机的主要方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-22。

虚拟网络编辑器,VMnet8 NAT 适配器

点击图 4-21 中的 NAT 设置按钮;它揭示了下面的 NAT 或 VMnet8 设置。您会注意到该子网的网关 IP 地址是 192.168.183.2,我们可以假设 192.168.183.1 已经分配给主机 PC 上的 VNnet8 适配器;这将在图 4-23 中得到验证。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-23。

虚拟网络编辑器,NAT 设置

图 4-24 显示了一个虚拟机的网络连接配置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-24。

虚拟机设置,NAT 网络连接

图 4-25 显示了 DHCP 服务器的 IP 地址配置;如前所述,192.168.183.1/24 被分配给主机上的 VMnet8。但是,虚拟机的默认网关是 192.168.183.2。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-25。

Windows 主机、VMware 网络适配器 VMnet8

正如预期的那样,VMware Workstation Pro 中 NAT 网络上的虚拟机将分配来自同一 192.168.183.0/24 网络的 IP 地址。在图 4-26 中,192.168.183.129/24 已被分配给 Linux 服务器的 ens33 网络接口。参考上图 4-13 可以帮助你更好的理解 NAT 模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-26。

虚拟机,ens33 网络适配器

摘要

虚拟化技术使云服务成为可能,因此我们讨论了当前虚拟化技术的类型 1 和类型 2 虚拟机管理程序之间的差异。本章还向您介绍了 VMware Workstation 15 Pro,以及我们为什么使用该解决方案而不是其他解决方案。我们还查看了该软件在 Windows PC 上的基本操作,并深入研究了用户可以用来构建虚拟实验室环境以供工作和休闲使用的不同网络模式。现在,您已经了解了 VMware Workstation 的基本功能,是时候下载、安装和创建虚拟机了,即 Ubuntu 20.04 LTS(第五章)和 CentOS 8.1 服务器(第六章)。

五、创建 Ubuntu 服务器虚拟机

在本章中,您将下载最新的 Ubuntu Server 20 可引导映像,以便在 VMware Workstation 实例上安装和创建虚拟机。Ubuntu 是 Debian Linux 衍生发行版,在 Linux 上提供了最好的用户体验。对于大多数 Windows 用户来说,Ubuntu Desktop 将是第一个 Linux 入口。然而,对于这本书,我们将使用 Ubuntu Server 20 来代替,并稍作改动:我们将选择安装一个 UI 来增加我们实验室的灵活性。在本章结束时,您将能够从头开始创建一个 Ubuntu Server 虚拟机,定制操作系统上的选择性设置,拍摄虚拟机的快照,以及克隆虚拟机

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可以使用不同操作系统的可引导映像文件创建虚拟机(VM ),并加载他人预先准备的 VM 映像。如果您选择第二个选项并导入或转换预制的虚拟机,您将错过学习如何从头构建虚拟服务器的机会。无论如何,对于功能更强大的台式机和笔记本电脑,从头构建和安装一个虚拟机并不需要花费太多时间,因此您将会得到从下载映像文件到进行基本配置的整个安装过程的指导。尽管本书中的虚拟机是功能更强大、可扩展的企业和云基础架构及网络解决方案的简化版本,但虚拟机配置概念和技术是相同的。

在过去的五年里,IT 界的流行词是云计算。在其最基本的形式中,云计算将大量强大的服务器压缩到集中或分散的数据中心,通过互联网提供按需服务。一切都在外部,用户通过瘦客户机或运行在远程节点上的应用进行连接。云计算机器的底层是虚拟化技术,理解虚拟化意味着您可以向云服务迈进一步。

在您的笔记本电脑上安装 VMware Workstation 15 Pro 后,您需要为您的首选操作系统下载一个可启动的映像文件来构建虚拟机。这个映像可以是任何风格的 Windows 或 Linux 映像。我们的意图很清楚,我们想摆脱 Windows 操作系统,适应 Linux 操作系统,所以我们的选择是显而易见的。我们将下载 Linux 可安装的映像并开始安装。由于我们还想知道两个最流行的 Linux 发行版之间的区别,即 Ubuntu 和 CentOS,我们将同时使用它们。Ubuntu 是最流行的基于 Debian 的 Linux 发行版之一,CentOS 是最广泛使用的基于 Red Hat 的免费发行版。为了让您对这两个 Linux 发行版有更多的实践经验,本章将安装 Ubuntu Server,然后在下一章安装 CentOS server。这两台服务器将在本书中灵活使用。两个 Linux 发行版之间的基本内核几乎是相同的。尽管如此,如果您同时使用它们,还是可以了解到一些细微的差异,因此安装两者并尝试学习基本的和一般的管理任务将会为您的学习和职业生涯增加更多的价值。

在本章的剩余部分,您将集中精力安装最新的 Ubuntu,它将被用作主要的 Python 网络自动化服务器。当你准备好了,让我们创建一个 Ubuntu Server 20.04 LTS 虚拟机。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传我们在本书中使用了最新的 Ubuntu Server 20.04 LTS 和 CentOS 8.1,但在生产环境中,系统管理员通常会选择使用最新软件的 n–1 版本。n–1 软件概念是使用以前的软件版本来避免错误和软件兼容性问题,目标是五个 9(每年 99.999%的正常运行时间)。此外,如果 n–1 版本没有提供您想要的性能或服务,您可以灵活地升级一个版本。

如果您打算在生产中运行这些服务器,请考虑使用 Ubuntu 18.04 LTS 或 CentOS 7.5 以获得更好的软件兼容性。这对于 CentOS 8 来说更有意义,因为它只支持到 2021 年底,而 CentOS 7.5 仍然支持到 2024 年。你将在第六章中了解更多。

下载并安装 Ubuntu Server 20 镜像

要安装最新的 Ubuntu 服务器,首先需要从 Ubuntu 官方下载网站下载一个可启动的 Ubuntu 服务器镜像(.iso)文件。确保您有可靠的互联网连接进行下载,并按照下一节中的说明进行操作。

LTS:名字有什么意义?

传统上,Ubuntu Linux 服务器版本以 YY 命名。发行年份和月份的 MM 格式。所以,Ubuntu Server 20.04 表明它于 2020 年第四个月首次在市场上发布。LTS 代表长期支持,并表示该软件版本的支持时间为五年,而不是测试版。这与 2018 年第四个月发布的 Ubuntu 18.04 LTS 的命名惯例相同。

下载 Ubuntu Server 20.04 LTS 镜像

|

|

工作

|
| — | — |
| 01 | 打开你最喜欢的网络浏览器,然后进入 Ubuntu 下载页面。预期文件大小约为 908MB。https://www.ubuntu.com/download/serverDownload the Ubuntu server version, which is the 64-bit PC (AMD64) server install image; the downloaded installable filename is ubuntu-20.04-live-server-amd64.iso. See Figure 5-1.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-1。Ubuntu Server 20.04 LTS 图像下载页面 |
| 02 | 要检查下载的 ISO 文件是否已正确下载,请在安装前使用 WinMD5 或类似工具检查 MD5 值。见图 5-2 。WinMD5 can be downloaded for free from here:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-2。Ubuntu Server 20.04 ISO MD5 校验和验证www.winmd5.com/www.winmd5.com/download/winmd5free.zipUbuntu Server 20 LTS MD5 值可在以下链接中找到:https://releases.ubuntu.com/20.04/MD5SUMS您将看到类似这样的内容:MD5 值:f03 d331 c 11136 e 24 C10 c 705 b 7 B3 EFC 39 f 文件名:* Ubuntu-20.04-live-server-amd64 . iso |

安装 Ubuntu Server 20.04 LTS 版

在 VMware Workstation 上安装 Linux 虚拟机很容易,但是您必须学习如何使用不同的可引导 ISO 映像创建和安装各种虚拟机。Ubuntu Server 20.04 的安装过程如下:

|

|

工作

|
| — | — |
| 01 | First, start VMware Workstation 15 Pro using the shortcut icon on the host PC (Windows 10). See Figure 5-3.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-3。VMware 工作站快捷图标 |
| 02 | Then select the File menu and then choose New Virtual Machine, as shown in Figure 5-4.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-4。创建新的虚拟机 |
| 03 | When the New Virtual Machine Wizard window appears, leave “Typical (recommended)” selected and click the Next button at the bottom. See Figure 5-5.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-5。新建虚拟机向导 |
| 04 | In the next window, select “Installer disk image file (iso)” and click the Browse button on the right. See Figure 5-6.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-6。Ubuntu 安装,选择安装介质 |
| 05 | When the Browse for ISO image window appears, navigate to the Downloads folder where you have downloaded and saved the Ubuntu Server 20.04 installable file and select it. Click the Open button at the bottom. See Figure 5-7.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-7。Ubuntu 安装,选择可安装映像 |
| 06 | When you return to the previous screen, click the Next button. See Figure 5-8.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-8。Ubuntu 安装,选定的可安装映像 |
| 07 | Enter your name, user ID, and password and click the Next button. See Figure 5-9.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-9。Ubuntu 安装,输入用户凭证 |
| 08 | Choose a meaningful server name for your Ubuntu server. This example is using the default folder, but if you want to store and run your VMs from another folder, you can change the settings now. ubuntu20s1 is the server name given to my Ubuntu Server 20 server. See Figure 5-10.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-10。Ubuntu 安装,虚拟机文件夹选择 |
| 09 | By default, 20GB will be allocated to your VM. I have enough disk space on my SSD, so I will increase this to 30GB for future use. Also, I prefer to store the virtual disk file as a single file as this makes migration and VM conversions easier. Click the Next button. Since thin provisioning is used, the entire 30GB of disk space is not used, but the disk size will gradually increase on demand while using up the VM’s disk space. See Figure 5-11.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-11。Ubuntu 安装、磁盘大小分配和单一虚拟磁盘文件选项 |
| Ten | On the next screen, click the Finish button with the default setting “Power on this virtual machine after creation” selected. See Figure 5-12.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-12。安装 Ubuntu,完成虚拟机配置 |
| Eleven | The new VM will use the Ubuntu boot image to begin the Ubuntu Server installation on the first screen. See Figure 5-13.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-13。Ubuntu 安装,服务器安装的第一个屏幕 |
| Twelve | Language selection: You are prompted to select a language. English is selected as the default language. If you speak another language, select your native language from the selection. See Figure 5-14.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-14。Ubuntu 安装,默认语言选择 |
| Thirteen | Keyboard configuration: Leave the keyboard configuration at the default settings, highlight the Done button, and hit the Enter key. See Figure 5-15.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-15。Ubuntu 安装,键盘选择 |
| Fourteen | Network connections: If you did change the default network settings during VM creation, your VM will use a Network Address Translation (NAT) network. The first available IP address will be assigned to your VM from VMware Workstation’s NAT DHCP subnet pool, and the default IP range is from 192.168.183.128 to 192.168.183.254. If you changed the subnet, your IP subnet and IP address range will differ from the example shown in this book. If your NAT network’s DHCP service has not been disabled, you will receive a valid IP address similar to Figure 5-16.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-16。Ubuntu 安装,网络连接 |
| Fifteen | Configure proxy: No proxy server is used on the current network, so there is no need to specify a proxy IP address. However, if you connect to the Internet via your company’s proxy server at work, then add the proxy information here. Of course, this information can be changed later. Assuming that you are also connecting via your home network, leave this blank, and let’s move on. See Figure 5-17.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-17。Ubuntu 安装,配置代理 |
| Sixteen | Configure Ubuntu archive mirror: Leave the default selection for this section, then highlight the Done key, and hit the Enter key. See Figure 5-18.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-18。Ubuntu 安装,配置 Ubuntu 归档镜像 |
| Seventeen | Guided storage configuration: Confirm that the /dev/sda size is the same as what you have allocated, then highlight the Done key, and hit the Enter key again. See Figure 5-19.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-19。Ubuntu 安装,引导存储配置 |
| Eighteen | Storage configuration: Once again, review and confirm the configuration, then highlight Done, and hit the Enter key on your keyboard to move to the next screen. See Figure 5-20.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-20。Ubuntu 安装,存储配置 |
| Nineteen | Storage configuration: In the “Confirm destructive action” box, highlight the Continue button and hit the Enter key to complete storage configuration. See Figure 5-21.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-21。Ubuntu 安装、存储配置(确认破坏性操作) |
| Twenty | Profile setup: Fill in your profile with a unique user ID and password. Make the server’s name the same as what you have specified during VM creation; in this case, it is ubuntu20s1 for Ubuntu Server 20 1. Highlight the Done key and hit the Enter key again. See Figure 5-22.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-22。Ubuntu 安装,设置配置文件 |
| Twenty-one | SSH Setup: You will connect to this server via an SSH connection, so installing the OpenSSH server for an SSH connection is recommended. We can install this service after the OS installation, but it makes sense to install the SSH server now rather than later. Use the spacebar to select the “Install OpenSSH server” option, then highlight the Done key, and hit the Enter key again. See Figure 5-23.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-23。Ubuntu 安装,设置 SSH |
| Twenty-two | Featured Server Snaps: If you plan to use any of the services immediately after the installation, make your selections using the spacebar. Docker and PowerShell have been selected in Figure 5-24, as they are often useful services on any Linux server. Once all the selections are made, then highlight the Done key and hit the Enter key on your keyboard.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-24。Ubuntu 安装,特色服务器快照 |
| Twenty-three | Installation complete: Once you get to the final installation screen, click the Reboot option, and press the Enter key to restart your first VM. See Figure 5-25.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-25。Ubuntu 安装,安装完成 |
| Twenty-four | After the reboot, your screen will look similar to Figure 5-26.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-26。Ubuntu 操作重新启动,初始屏幕 |
| Twenty-five | Now use your user ID and password to log into your Ubuntu VM. Now your server is ready to serve you, but how well you will use this server in your study is entirely up to you. See Figure 5-27.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-27。Ubuntu 安装,第一个登录屏幕 |

通过 SSH 登录到新的 Ubuntu 服务器 20

您很快就会发现,通过 VMware Workstation 的控制台屏幕访问新虚拟机非常麻烦。管理我们的服务器的一个更简单的方法是通过 SSH 连接来连接到这个服务器,从我们的 Windows 主机 PC 使用 SSH 客户端软件。这就像系统管理员如何管理他们网络上的系统一样。假设你已经在“网络连接”部分的 Ubuntu 服务器安装过程中记住了服务器分配的 IP 地址。在这种情况下,你有一个敏锐的头脑,但如果你忘记了分配的 IP 地址,让我们找到 IP 地址,这样我们就可以 SSH 到服务器。

| 01a | The first and most straightforward way to find the IP address on an Ubuntu is to issue an IP address or `IP adds` command. A NATted IP address from the VM NAT network should be assigned to your ens33 network adapter. The server in this example received the 192.168.183.129/24 IP address. Your server’s allocated IP address does not have to match, but if you have a valid IP address, that is a good indicator that your VM’s network is working correctly. If you received an IP address from a different subnet or have not received a valid IP address, then you must go back and review your VM network editor or VM network settings. See Figure 5-28.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig28_HTML.jpg&pos_id=img-UOtuzOfe-1723276965970)图 5-28。Ubuntu 操作,使用 ip add 查找服务器 IP 地址 | | 01b | The second and more traditional way to find the IP address on any Linux server is to issue the `ifconfig` command . If you are only starting to transition to Linux OS from Windows OS, you will immediately notice that this command is like an `ipconfig` command at the Windows command prompt. On Ubuntu Server 20.04, we need to install `net-tools` first to enable this command. Run the `sudo apt install net-tools` command to install `net-tools`; this is also an excellent test for your Internet connectivity from the virtual Ubuntu server. See Figure 5-29.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig29_HTML.jpg&pos_id=img-feOlNvOT-1723276965970)图 5-29。Ubuntu 操作,net-tools 安装启用 ifconfig 命令 Once the installation has been completed, issue the `ifconfig` command to check the IP address. Because we installed the Docker service during the Ubuntu installation, the tool even picked up the `docker0` interface and is displaying it in Figure 5-30. But here, we are only interested in the information from the ens33 network adapter, and as expected, an IP address of 192.168.183.129/24 is given to the ens33 adapter with a broadcast address of 192.168.183.255.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig30_HTML.jpg&pos_id=img-voqxJqDX-1723276965970)图 5-30。Ubuntu 操作,使用 ifconfig 查找服务器 IP 地址 | | 02 | Stop here for one moment and think! The gateway IP for the 192.168.183.0/24 subnet is 192.168.183.2, not 192.168.183.1\. 192.168.183.2 is the NAT gateway IP, and 192.168.183.1 is the assigned IP address of the Windows 10 host’s VMnet8 (VMware Network Adapter VMnet8) interface. See Figure 5-31.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig31_HTML.jpg&pos_id=img-s3MvWOzf-1723276965970)图 5-31。Ubuntu 操作,确认 Linux 上的默认网关 You can confirm this information from the Ubuntu server console by running `ip route | grep ^default` (or `ip r | grep ^def`). The meaning of this command is to look at the IP route with a general regular expression (`grep`) and find a string that begins with `^` and the word `default`. See Figure 5-32.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig32_HTML.jpg&pos_id=img-TuUpqox6-1723276965971)图 5-32。Ubuntu 操作,确认 VMware 工作站上的默认网关 Run the `netsh interface ip show addresses "VMware Network Adapter VMnet8"` command from your Windows 10 host PC. See Figure 5-33.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig33_HTML.jpg&pos_id=img-N5HT08CB-1723276965971)图 5-33。Ubuntu 操作,VMnet8 主机 IP 地址 | | 03 | Now, if you have not yet downloaded PuTTY from the Internet, go to PuTTY's home page ([`https://www.putty.org/`](https://www.putty.org/) ) and download a copy of PuTTY. Launch PuTTY from your Windows 10 host and then type in Ubuntu Server’s IP address with port 22 for the SSH connection. Click the Open button at the bottom-right corner of the PuTTY Configuration window. See Figure 5-34.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig34_HTML.jpg&pos_id=img-DyhOAi8C-1723276965971)图 5-34。Ubuntu 操作,SSH 客户端从 PuTTY 登录 | | 04 | The server will send the server’s rsa2 key fingerprint to your PuTTY (SSH) session. Click Yes to proceed to the server’s login screen. See Figure 5-35.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig35_HTML.jpg&pos_id=img-ZTrX2HbU-1723276965971)图 5-35。Ubuntu 操作,接受来自服务器的 PuTTY 安全警报 | | 05 | Enter your username and password and hit the Enter key on your keyboard to log into your Ubuntu server. Now you are connected to your server via SSH. See Figure 5-36.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig36_HTML.jpg&pos_id=img-1ZL6eSzs-1723276965971)图 5-36。Ubuntu 操作,SSH 服务器登录 | | 06 | Customize the PuTTY configuration to suit your preferences. In Figure 5-37, I have changed the font and background color of my PuTTY console session and then saved the settings.![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fgitee.com%2FOpenDocCN%2Fvkdoc-python-pt2-zh%2Fraw%2Fmaster%2Fdocs%2Fintro-py-net-auto%2Fimg%2F492721_1_En_5_Fig37_HTML.jpg&pos_id=img-VeSiSOgA-1723276965971)图 5-37。Ubuntu 操作,油灰背景和字体颜色变化 |

自定义 Ubuntu 服务器

创建你的 Ubuntu Server 20 LTS 虚拟机后,它开箱即用;然而,Ubuntu 默认禁用了一些关键设置。我们希望获得这些设置的完全访问权,以便我们的测试实验室增加更多的灵活性。我们可以调整一些东西,使这个服务器更加用户友好,为您的学习增加更多的价值。如果您在生产环境中运行 Ubuntu 服务器,请不要启用这些设置,因为它们不是最佳做法。由于这是我们的实验室虚拟机,我们将执行一些系统定制。首先,从远程客户端启用root user ssh login;这允许您以 root 用户身份通过 SSH 连接到该服务器,从而节省系统管理时间。第二,安装一个桌面 GUI 这将允许您登录到桌面设置,然后将其用作标准的最终用户机器,并通过 Linux GUI 使用可用的应用。第三,启用根用户 GUI 访问。此功能在默认情况下也是禁用的,但是可能需要 root 用户 GUI 访问服务器才能快速排除故障。

Ubuntu VM 定制 1:在 Ubuntu Server 20.04 上启用根用户 SSH 登录

一般来说,出于安全原因,大多数最新的 Ubuntu 服务器不允许 root 用户登录终端控制台或通过 SSH 登录。尽管如此,这种安全特性在您的实验室场景中经常会降低您的速度,要求您在键入的每个命令前输入sudo,并拒绝您在实验室中灵活工作的权限。因此,我们可以允许 SSH 登录,为您的实验室增加一点灵活性。但是,出于安全考虑,在实际生产环境中,最好禁用根控制台和 SSH 登录。首先,要启用直接根用户 SSH 访问,以您自己的身份登录到您的服务器,并运行命令sudo passwd。键入您的密码,系统会立即提示您输入新的 UNIX 密码。在此输入密码两次将启用 root 用户密码。星号用于说明目的,但密码在您键入时将被隐藏。

|

|

工作

|
| — | — |
| 01 | 通过执行以下任务启用 root 用户密码:pynetauto@ubuntu20s1:~$ sudo passwd``sudo password for pynetauto: **********``Enter new UNIX password:********``Retype new UNIX password:********``passwd: password updated successfully |
| 02 | 前面的操作不会自动允许 SSH 登录到服务器;这需要通过更新 SSH 服务器配置文件来手动启用。要启用 root 用户 SSH 登录,请执行以下步骤:pynetauto@ubuntu20s1:~$ sudo nano /etc/ssh/sshd_config■注意,如果您在此阶段以 root 用户身份登录,则不必在命令前添加sudo。如果你一直在使用旧版本的 Ubuntu,首先你可能需要安装 nano 文本编辑器或者使用 vi 作为你的文本编辑器。 |
| 03 | 以#PermitRootLogin prohibit-password开头的行阻止 root 用户 SSH 登录,我们必须取消对该行的注释以允许 root 用户 SSH 登录。为了简单起见和最佳实践,保留默认行不变,并添加一个新行,因为您可能需要将配置恢复到原始设置。在原始行后添加以下行并保存文件:PermitRootLogin yesSee Figure 5-38.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-38。Ubuntu 虚拟机定制 1,更改 sshd_config |
| 04 | 要使之前的更改生效,您必须重新启动 SSH 服务器服务。pynetauto@ubuntu20s1:~$ sudo service ssh restart |
| 05 | Now from your Windows 10 host PC, launch PuTTY, enter the IP address of your server, and SSH in with port 22. Once you successfully logged into your server via an SSH session, you will see a screen similar to Figure 5-39.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-39。Ubuntu 虚拟机定制 1,根用户 SSH 登录 |

您可以使用一个单行命令向 root 用户授予 SSH 访问权限。只需在终端会话中运行该命令。

sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

[sudo] password for pynetauto: ********

Ubuntu 虚拟机定制 2:安装桌面 GUI 和其他软件包

或者,你可以安装一个桌面图形用户界面在 Ubuntu 服务器上运行。在测试实验室中,GUI 可以提供测试各种 IT 网络场景所需的额外功能,例如通过 web 浏览器测试 HTTPS 连接。在典型的生产环境中,为了提高服务器性能和安全性,Linux 通常被安装为一个没有 GUI 的无头服务器;Linux 服务器的 GUI 不是生产环境中的先决条件。无论如何,你应该知道如何在 Ubuntu Server 上安装 GUI,所以让我们学习如何从最初的 Ubuntu Server 20 终端控制台安装桌面 GUI 和其他软件包。

|

|

工作

|
| — | — |
| 01 | 首先,我们要在新安装的 Ubuntu Server 20.04 上安装tasksel。从 VMware 工作站控制台或 SSH 会话运行以下命令:sudo apt install taskselSee Figure 5-40.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-40。Ubuntu 虚拟机定制 2,安装任务 |
| 02 | 在tasksel安装完成后,你可以通过发出sudo tasksel命令来运行tasksel。这将启动 Ubuntu 包配置应用来选择和安装其他有用的应用;Ubuntu 桌面是这个包管理器下的一个选项。Select “Ubuntu desktop” and move to OK to start the desktop installation. See Figure 5-41.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-41。Ubuntu 虚拟机定制 2,选择“Ubuntu 桌面”(GUI) |
| 03 | Wait until the desktop installation is 100 percent complete, and then issue the sudo reboot command to restart your server. See Figure 5-42.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-42。Ubuntu 虚拟机定制 2,Ubuntu 桌面安装 |
| 04 | After the reboot , you will be prompted with the Ubuntu GUI login interface. Enter your login credentials and log into your server. See Figure 5-43.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-43。Ubuntu 虚拟机定制 2,Ubuntu 桌面登录 |
| 05 | You have successfully installed Ubuntu desktop on an Ubuntu Server. See Figure 5-44.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-44。Ubuntu 虚拟机定制 2,Ubuntu 桌面 GUI |

Ubuntu 虚拟机定制 3:启用根用户 GUI 访问

如果你有敏锐的眼光,你可能注意到了根用户 GUI 登录不起作用,并且你在质疑,我怎样才能启用根用户 GUI 登录?因为这是我们的实验室服务器,我们可以随意探索和定制,所以让我们启用 root 用户 GUI 登录。首先,您必须以普通用户(您自己)的身份登录到服务器来完成这个任务,或者可以选择从 PuTTY 通过 SSH 登录到服务器。

|

|

工作

|
| — | — |
| 01 | Open and edit /etc/gdm3/custom.conf, which is the GDM configuration file, using the nano text editor to allow root login. Add AllowRoot=true, as shown in Figure 5-45, and save the file.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-45。Ubuntu VM 定制 3,更新 gdm3/custom.conf 文件 |
| 02 | Next, edit the PAM authentication daemon configuration file at /etc/pam.d/gdm-password and comment on the specific line that denies root access to the graphical user interface. Use the nano or vi editor and open the /etc/pam.d/gdm-password file. Put # at the beginning of the line, which starts with auth required pam_succeed_if.so user!= root quiet_success, that you are commenting out, which means you are disabling the feature. See Figure 5-46.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-46。Ubuntu VM 定制 3,更新 pam.d/gdm-password 文件 |
| 03 | A mandatory reboot is required here once again. Reboot your Ubuntu server using the sudo reboot command or using the power button on the top-right corner of your Ubuntu desktop. Once the server has been restarted, log in as another user and enter root as the username and enter the root user’s password. See Figure 5-47.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-47。Ubuntu 虚拟机定制 3,根用户 GUI 登录 |
| # | 工作 |
| 04 | Congratulations! You can log into Ubuntu desktop as a root user. See Figure 5-48.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-48。Ubuntu VM 定制 3,Ubuntu 桌面 root 用户登录 |

拍摄虚拟机的快照

将操作系统作为虚拟机运行的最强大功能之一是快照的强大功能。在采用基于 ESXi 和 vCenter 的解决方案的真实生产环境中,拍摄快照和克隆是防止系统故障和从故障中恢复的有效方法。在 VMware 技术领域,其他系统恢复功能包括高可用性、vMotion 和 DRS。但是在 VMware Workstation Pro 解决方案中,我们使用快照和克隆来保存虚拟机的当前状态。快照就像给系统拍照一样,因此您可以将意外或失败的系统更改恢复到虚拟机的主要系统状态。克隆功能允许您对虚拟机进行部分或完整备份,以便在系统出现故障时保留系统状态。

对于 Python 网络自动化实验室,您可以选择使用快照或完整克隆作为故障安全恢复功能。快照将允许我们在实验过程中及时移动到不同的点。在服务器上安装其他软件之前,按照下面的任务制作 Ubuntu 服务器的快照。

|

|

工作

|
| — | — |
| 01 | To take a snapshot of your current server state, from your VMware Workstation menu, select VM ➤ Snapshot ➤ Take Snapshot. See Figure 5-49.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-49。VMware 快照,导航到快照菜单 |
| 02 | Enter the name and tasks performed as a description, and click the Take Snapshot button to create a snapshot, as shown in Figure 5-50.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-50。VMware 快照,创建虚拟机快照 |
| 03 | At the bottom-left corner of the window, the percentage of snapshot progress will be displayed. Once it reaches 100 percent, navigate to the Snapshot Manager from the menu, and confirm the snapshot. See Figure 5-51.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-51。VMware 快照,确认快照 |

克隆虚拟机

现在你有了一个定制的 Ubuntu 虚拟服务器;如果您想创建另一个虚拟机,可以通过克隆同一个虚拟机来实现。与从头安装一个新虚拟机所花费的时间相比,克隆可以让您以闪电般的速度重新创建同一台机器。克隆还可以对当前虚拟机状态进行完整备份,并保留服务器状态。现在我们来看看这个过程。

|

|

工作

|
| — | — |
| 01 | To clone a VM, navigate to VM ➤ Manage ➤ Clone. (See Figure 5-52) Alternatively, you can also start the cloning process within the Snapshot Manager.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-52。VMware 克隆 1,制作克隆 |
| 02 | Leave the default settings and click the Next button. See Figure 5-53.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-53。VMware 克隆 1,克隆源 |
| 03 | Select “Create a full clone” and click the Next button. See Figure 5-54.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-54。VMware 克隆 1,克隆类型,完整克隆 |
| 04 | Rename the cloned VM and click the Finish button. See Figure 5-55.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-55。VMware 克隆 1,重命名克隆的虚拟机 |
| 05 | Now click the Close button. See Figure 5-56.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-56。VMware 克隆 1,关闭虚拟机克隆向导 |
| 06 | You will see another Ubuntu server added to your VM library. See Figure 5-57.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-57。VMware 克隆 1,克隆的虚拟机添加到库中 |
| 07 | Optionally, if you want to copy and duplicate your VM simply, simply copy the folder containing all the VM files to other storage. This method will take up a lot of hard disk space, so if you are using a smaller SSD, then a snapshot is a better option than fully cloning a VM. See Figure 5-58.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 5-58。VMware 克隆 2,将虚拟机文件夹复制到外部驱动器 |

摘要

安装一个 Ubuntu 服务器作为虚拟机是一个简单的过程,但是安装一个图形用户界面是一个选项。现在您已经成功地安装、定制、备份和克隆了一个新创建的 Ubuntu server VM,是时候创建另一个 Linux 服务器作为我们的第二台服务器了。在下一章中,您将按照类似的步骤为 CentOS 8.1 创建一个虚拟机,该虚拟机将作为我们网络自动化实验室的一体化 IP 服务服务器。

六、创建 CentOS 8 服务器虚拟机

在本章中,您将下载 CentOS 8 可引导映像,以便在 VMware 工作站上安装和创建第二个虚拟机。CentOS 8 服务器基于社区版本的 Red Hat Enterprise Linux 8 (RHEL8),这是 Linux 社区用户中最受欢迎的企业 Linux 操作系统之一,因为它具有稳定性和安全性。本章结束时,您将能够从头开始创建 CentOS 8 服务器虚拟机,并使用nmtui包自定义网络设置,从而为您的网络自动化实验室增加灵活性。在准备过程中,您将下载 GNS3 .ova模板文件,然后导入并创建一个 GNS3 VM,用于 Cisco IOS 和 IOSv 映像集成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在前一章中,您创建了一台 Ubuntu 服务器,并学习了如何定制它的设置,使它更适合我们的实验室。本章是本书中较短的章节之一,其中您将使用 CentOS 8 可引导映像创建另一个 Linux 虚拟机。虽然我们可以简单地克隆现有的 Linux VM 来创建更多的虚拟机,但是这阻止了我们学习其他 Linux 发行版的基本操作。因此,我们将下载并安装第二个不同的 Linux 发行版。在第八章中,您将了解如何将该服务器转变为具有多种 IP 服务的服务器,以进行实验室测试。与前面的过程一样,您将搜索并下载可引导映像,然后安装该映像并创建一个虚拟机。创建 CentOS 8 虚拟机后,您将通过 SSH 测试服务器的连接,并学习一种在 Linux 服务器上管理网络适配器的简单方法。为了准备 GNS3 集成,我们需要下载适用于 VMware Workstation 的 GNS3 虚拟机的正确副本,因此使用下载的 GNS3 虚拟机.ova文件,将提前创建 GNS3 虚拟机以实现更平稳的集成。让我们快速创建您的第二个虚拟机。

下载并安装 CentOS 8 服务器映像

下载和安装 CentOS VM 的实际过程与 Ubuntu 20.04 服务器安装相同。与 Ubuntu 20.04 LTS 虚拟机安装一样,您必须首先下载可引导的 CentOS 8 安装映像(.iso)文件。首先,检查您的互联网连接,并按照本章中的步骤在 VMware Workstation 15 Pro 上创建和安装新的 CentOS 8 虚拟机。在写这本书的时候,最新的 CentOS 版本是 8.1.1804。当您阅读本书时,新版本将会推出,但只要您坚持使用主要的 8.x(或 7.x)版本,您将能够按照本书中的说明成功安装 CentOS server。如果您选择下载并安装另一个 CentOS 版本,安装步骤仍然几乎相同。在第八章中,您将安装不同的软件来将本服务器转变为多用途实验室服务器,因此您可能需要遵循针对您的 CentOS 系统版本建议的软件安装程序,因为在本 CentOS 版本上兼容的一个软件版本可能无法在之前或更新的软件版本上兼容。这款 CentOS 虚拟机还可用作多用途实验室服务器,运行多种 IP 服务,为未来的 IT 认证做准备。

随着 IBM 收购 Red Hat,CentOS 服务器的未来开发和支持发生了一些变化。对 CentOS 8 服务器的社区支持将于 2021 年 12 月 31 日停止,社区用户只能使用 CentOS 8 流或 CentOS 的更新流版本。CentOS Stream 的定位介于 Fedora(红帽企业 Linux 的 beta 版)和红帽企业 Linux 之间,所以我们可以说它是红帽企业 Linux 的早期发布版本。如果您在生产中使用 Stream,将会出现从 Red Hat (IBM)获得支持的问题,因为这消除了 Red Hat 支持不再受支持的 CentOS server 版本中的错误或问题的义务。然而,在实验室环境中使用流版本仍然是可以接受的,因为大多数函数将满足我们的测试需求。

首先,让我们从 CentOS 官方网站下载最新的 CentOS 8 安装 ISO 文件。

下载 CentOS 8 服务器映像

|

|

工作

|
| — | — |
| 01 | 从您最喜欢的网页浏览器,前往 CentOS 的官方网站建议,并单击网页上的 x86_64 链接。或者,您可以选择下载 CentOS 流版本。见图 6-1 。URL: https://www.centos.org/download/外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-1。CentOS 官方下载页面 |
| 02 | 接下来,找到离您最近的 CentOS 图像下载服务器,并从 FTP 服务器下载最新的 CentOS 8 ISO。估计的文件大小会因您下载的文件而异,但这里您将下载以–x86-64-dvd1.iso结尾的文件,其大小超过 7GB。在写这本书的时候,最新可用的 CentOS 8 文件是CentOS-8.1.1911-x86_64-dvd1.iso。见图 6-2 。URL: http://isoredirect.centos.org/centos/8/isos/x86_64/外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-2。CentOS 8,官方下载页面镜像示例 |

软件下载完成并保存到您的Downloads文件夹后,您就可以从 VMware Workstation 15 Pro 创建 CentOS 虚拟机了。

安装 CentOS 8 服务器

CentOS 8 服务器虚拟机的安装过程类似于 Ubuntu 服务器的安装过程,所以让我们快速浏览一下这个过程,并创建一个新的服务器虚拟机。

# 任务

01 在您的 VMware 工作站菜单中,选择文件➤新建虚拟机。见图 6-3 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-3。

CentOS 8 安装,创建新的虚拟机

02 当“新建虚拟机向导”出现时,单击“典型(推荐)”选项,然后单击“下一步”按钮。见图 6-4 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-4。

CentOS 8 安装,新虚拟机向导起始页

03 当您回到图 6-5 所示的新建虚拟机向导窗口时,选择“我将稍后安装操作系统”选项。如果您在此选择“安装程序光盘镜像文件(iso)”选项,CentOS 8 镜像将返回Pane is a dead error,您将无法安装操作系统。见图 6-5 。

Note

请确保您在此处选择了“我将稍后安装操作系统”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-5。

CentOS 8 安装,选择“我将稍后安装操作系统”选项

04 根据您在主机上安装的 VMware Workstation 15 的版本,CentOS 8.x 版本可能不可用。如果您遇到这个问题,您可以随时选择您选择的红帽企业 Linux (REHL) 8 64 位版本,因为 CentOS 8 与 RHEL 8 是相同的版本,没有徽标和专有合同。见图 6-6 。

Note

注意,IBM 在 2019 年 7 月收购了红帽。CentOS 一直是当前生产红帽企业版 Linux 的社区版;当 RHEL 遇到一个 bug 时,Red Hat 在三天内为 CentOS 提供了一个修复。这使得 CentOS 像 RHEL Linux 一样可靠,但是用户仍然可以在生产中使用 CentOS。相比之下,CentOS Stream 是 RHEL 预发布的开发预览版或实验版,Fedora 领先于 CentOS Stream,甚至更具实验性。2020 年 12 月 9 日,红帽(IBM)宣布 2021 年底将不再支持 CentOS Linux 8。这不会影响您的实验室环境;但是,避免在生产中部署 CentOS 8。对于您的实验室构建,我们可以在 2021 年后使用 CentOS Stream 或 Fedora 来取代 CentOS 8。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-6。

CentOS 8 安装,操作系统选择

05 在下一个窗口中,按照要求输入用户凭据,然后单击下一步。见图 6-7 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-7。

CentOS 8 安装,输入用户凭据

运用一些想象力,给你的服务器起一个容易识别的有意义的名字。该服务器命名为 CentOS8s1,参考 CentOS8 服务器 1。单击下一步按钮。参见图 6-8 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-8。

CentOS 8 安装、服务器名称和文件夹配置

07 分配所需的空闲磁盘空间;在下面的示例中,30GB 的磁盘空间分配给了 GUI,并将安装其他软件。默认情况下,磁盘设置为精简资源调配,逐渐增加磁盘大小,直到达到 30GB,这样初始磁盘空间就会少很多。此外,单击“将虚拟磁盘存储为单个文件”,以便于以后的文件管理。然后单击下一步。参见图 6-9 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-9。

CentOS 8 安装,分配磁盘容量以供使用

08 单击“Finish”按钮完成虚拟机配置。参见图 6-10

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-10。

CentOS 8 安装,完成配置

现在单击“编辑虚拟机设置”来更改 CD/DVD 选择。见图 6-11 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-11。

CentOS 8 安装,选择“编辑虚拟机设置”

10 单击左窗格中的 CD/DVD (SATA),单击“使用 ISO 映像文件”,然后单击浏览按钮。见图 6-12 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-12。

CentOS 8 安装,选择虚拟机设置

11 选择已经下载到Downloads文件夹中的 CentOS 安装文件,然后点击打开。见图 6-13 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-13。

CentOS 8 安装,选择 CentOS ISO 文件

12 现在,单击“启动该虚拟机”开始 CentOS 安装。见图 6-14

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-14。

CentOS 8 安装,启动虚拟机

13 单击安装 CentOS Linux 8 开始安装。见图 6-15

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-15。

CentOS 8 安装,选择安装选项

14 保留默认语言为英语(美国),然后单击继续进入下一页。见图 6-16

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-16。

CentOS 8 安装,语言选择

15 在安装摘要窗口中,选择系统下的安装目的地,进入并选择操作系统安装盘。见图 6-17

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-17。

CentOS 8 安装,安装摘要

16 突出显示“VMware 虚拟 NVMe 磁盘 30 GiB ”,然后单击“完成”按钮返回到上一个安装窗口。参见图 6-18 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-18。

CentOS 8 安装,安装目标选择

17 接下来,单击“带 GUI 的软件选择服务器”在安装过程中安装额外的软件。参见图 6-19 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-19。

CentOS 8 安装,软件选择

18 在软件选择窗口中,选择带 GUI 的服务器,并选择其他软件,如 FTP 服务器、邮件服务器等。这里,至少安装 FTP 服务器,为以后节省时间。其他 IP 服务将在下一章手动安装。一旦您对自己的选择感到满意,请单击“完成”按钮。

图 6-20 、图 6-21 和图 6-22 显示了您可以在软件选择下选择的附加软件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-22。

CentOS 8 安装,软件选择 3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-21。

CentOS 8 安装,软件选择 2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-20。

CentOS 8 安装,软件选择 1

19 下一步单击网络和主机名。见图 6-23

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-23。

CentOS 8 安装,安装摘要

20 默认情况下,CentOS 服务器的网络适配器是关闭的。单击“开”按钮打开网络适配器。一旦交换机通电,将自动从 NAT 的 DHCP 子网分配一个 IP 地址。图 6-24 收到一个 IP 地址 192.168.183.130/24。确认 DHCP 分配 IP 地址后,单击完成退出。见图 6-24 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-24。

CentOS 8 安装,连接到网络

21 返回安装摘要窗口后,单击开始安装按钮开始操作系统安装。见图 6-25

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-25。

CentOS 8 安装,开始安装

22 下载软件包时,您可以在进入安装模式之前尝试设置 root 用户的密码。单击 Root 密码。见图 6-26

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-26。

CentOS 8 安装,设置 root 用户密码

23 输入两次 root 用户密码,然后单击完成按钮退出。见图 6-27

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-27。

CentOS 8 安装,输入根用户密码

24 当您返回上一屏幕时,CentOS8 服务器安装将开始。现在,等待大约五分钟,安装完成。见图 6-28

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-28。

CentOS 8 安装,正在安装服务器

25 CentOS 8 安装完成后,系统会提示您重新启动。单击 Reboot 重新启动新的 Linux 服务器。参见图 6-29

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-29。

CentOS 8 安装,安装完成并重新启动

26 重新启动服务器后,您将看到初始配置屏幕。单击许可信息,同意最终用户许可协议,免费使用 CentOS。见图 6-30

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-30。

CentOS 8 安装,初始配置窗口

27 单击“我接受许可协议”复选框,然后单击完成。见图 6-31 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-31。

CentOS 8 安装,接受最终用户许可协议

28 当您返回初始设置窗口时,您会注意到许可信息字段中的警告标志已经消失。现在,单击“完成配置”按钮,首次登录 CentOS。见图 6-32 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-32。

CentOS 8 安装,初始设置完成

29 单击下一步。见图 6-33 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-33。

CentOS 8 安装,欢迎窗口

30 单击下一步按钮。见图 6-34 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-34。

CentOS 8 安装,隐私定位服务

31 单击“跳过”按钮跳过在线帐户配置。见图 6-35 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-35。

CentOS 8 安装,在线帐户

32 输入您的详细信息,然后单击下一步。见图 6-36

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-36。

CentOS 8 安装,关于你的屏幕

33 接下来您将被带到密码屏幕。输入两次密码,然后单击“下一步”按钮。见图 6-37 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-37。

CentOS 8 安装,设置密码

34 在准备就绪屏幕上,单击开始使用 CentOS Linux 完成配置。见图 6-38

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-38。

CentOS 8 安装,准备就绪屏幕

35 输入您的密码,然后单击登录按钮。见图 6-39

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-39。

CentOS 8 安装,首次登录

36 你现在会看到入门屏幕。现在关闭窗口并开始使用 CentOS 服务器是安全的。见图 6-40

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-40。

CentOS 8 安装,密码配置

37 启动终端控制台等应用以使用服务器。见图 6-41 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-41。

CentOS 8 安装,首次使用

通过 SSH 登录到新的 CentOS 8 服务器

在 CentOS 8 上,您不需要更改任何设置就可以使用 SSH 连接远程连接到服务器;默认情况下,用户和 root 用户都可以使用 SSH 协议连接到服务器。不要相信我的话。让我们通过在您的主机 Windows 10 上打开 PuTTY 并通过 SSH 连接到主机 Windows 10 桌面服务器来快速验证这一点。

# 任务

1 首先,从主机的 Windows 桌面打开 PuTTY,输入 CentOS 8 虚拟机的 IP 地址。此处显示的示例使用了 IP 地址 192.168.183.130,但是您的 IP 地址可能不同,这仍然没问题。单击打开按钮。见图 6-42 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-42。

CentOS 8 SSH 登录,PuTTY SSH 登录到 CentOS 8

2 当提示 PuTTY 安全警报时,接受 rsa2 密钥,然后单击 Yes 按钮。见图 6-43 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-43。

CentOS 8 SSH 登录,接受 rsa2 服务器密钥

3 现在使用您的用户 ID 和密码来确认 SSH 登录工作正常。见图 6-44 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-44。

CentOS 8 SSH 登录,用户登录

4 或者,启动另一个 PuTTY 会话,这次以 root 用户身份登录。您没有进行任何系统更改,但是 CentOS 8 将允许您使用 SSH 协议连接到服务器。你会发现,就像 Ubuntu 一样,CentOS 有真正的潜力成为你最喜欢的 Linux 发行版系统之一。见图 6-45 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6-45。

CentOS 8 SSH 登录,根用户登录

这就完成了 CentOS 8 的安装和初始设置。在进入下一个话题之前,这里是我对 Linux 操作系统的一些想法。

互联网上的快速调查显示,与 Windows 操作系统相比,个人电脑用户更喜欢 Linux 操作系统的总比例只是很小的一部分;然而,在 IT 服务的企业层面,使用 Linux 操作系统的百分比几乎与微软 Windows 操作系统相等,Linux 系统的普及势头越来越大。如果你是一个刚进入 IT 行业的 IT 技术人员,这实际上是一个重要的消息,因为更多的机会提供给了那些能够驯服和掌握 Linux 作为他们在企业级首选操作系统的人。

我做网络工程师已经很多年了。我承认我对我的 Windows 桌面和服务器操作系统太过舒适了;我也因为拒绝打开思维开始学习 Linux 而感到内疚。当我开始自学 Python 时,这种情况发生了变化,因为我感到沮丧,并努力使用 Windows 操作系统做更多的事情。学习 Python 后,我觉得在 Linux OS 上使用 Python 实现网络自动化比 Windows OS 更容易;因此,如果你真的想把 Python 作为你的职业,开始学习 Linux 吧。对于使用 Python 的网络自动化,Linux 知识是先决条件,而不是选项。基于你丰富的网络知识和经验,同时学习 Python 和 Linux。

在 Linux 上管理网络适配器

例如,如果您想要更改 Linux 机器上的网络设置,请为 CentOS 服务器提供一个静态 IP 地址,这样,在 DHCP 租约到期后,IP 地址不会更改。您可以使用nmtui工具轻松更改该设置。如果您在 Linux 安装过程中忘记打开网络适配器的电源,您可以使用这个工具来更改设置。从 CentOS 快速运行sudo nmtui命令。如果您以sudo用户的身份登录,您可以省略命令前面的sudo

|

|

工作

|
| — | — |
| 01 | You can run the nmtui command from the VMware Workstation Console or PuTTY SSH session. Type in sudo nmtui and hit the Enter key on your keyboard. See Figure 6-46.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-46。CentOS 8 配置,sudo nmtui 命令 |
| 02 | When CentOS’s NetworkManager TUI appears, select “Edit a connection.” See Figure 6-47.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-47。CentOS 8 配置,网络管理器 TUI |
| 03 | Select ens160 and click Edit . See Figure 6-48.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-48。CentOS 8 配置,选择网络适配器 |
| 04 | Click the Automatic option on the right side of IPv4 Configuration and change it to Manual. Click the Show option on the right. See Figure 6-49.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-49。CentOS 8 配置,选择手动配置 |
| 05 | Now enter your server IP address and the NAT gateway’s IP address . Move down and click OK. See Figure 6-50.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-50。CentOS 8 配置,保存手动更改 |
| 06 | Press the Tab key to move down and select Back to return to the first TUI interface. See Figure 6-51.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-51。CentOS 8 配置,背面选项 |
| 06 | Click Quit to save your changes and exit the application . See Figure 6-52.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-52。CentOS 8 配置,保存和退出 TUI |

在此阶段,考虑如何在实验室中使用该服务器并安装任何软件。一旦您对 CentOS 8.1 的当前状态感到满意,Linux 虚拟机定制就会在运行时拍摄虚拟机的快照,或者对关闭的虚拟机文件进行完整克隆。拍摄快照或克隆与之前的 Ubuntu 20 过程相同。在本章的后面,您将从一个ova文件创建第三个虚拟机,这是创建虚拟机的另一种方式。ova文件是 VMware Workstation 和 Oracle VM VirtualBox 使用的虚拟设备。一个ova文件是一个打包的文件,包含用于描述虚拟机的文件,其中包括一个ova描述符文件,可选的 manifest(。MF)和证书文件以及其他相关文件。换句话说,ova文件是另一个虚拟机管理员预先准备的预定义虚拟机模板,用于即时部署特定的服务器。您将从 GNS3 GitHub 网站下载一个 GNS3 VM ova文件,并通过导入该文件创建一个 GNS 3 VM;这是 GNS3 安装和集成的准备步骤,将在第十章中进行。因此,不要在这里跳过 GNS3 虚拟机的创建过程。

通过导入一个。ova 文件

GNS3 VM .ova文件由社区开发者在 www。gns3。org ,用于创建一个虚拟机,托管运行在 GNS3 应用上的网络、安全和系统映像。该服务器是一台 Linux 服务器,旨在减轻 GNS3 物理主机的工作负载,因此仿真 GNS3 设备可以平稳运行,而不会影响底层物理主机。您很快就会发现,GNS3 VM 提供的不仅仅是运行路由器和交换机。它还可以托管容器化的 Linux 服务器等等。GNS3 和 GNS3 VM 是开源的,对每个人都是免费的。在本书中,我们在 Windows 10 上使用 VMware Workstation,因此我们需要下载在 Windows 上工作的 GNS3 VM 文件。在撰写本章时,最新的 GNS3 版本是 v2.2.8,此处将使用该版本,但请尝试下载最新版本的 GNS3 文件,因为较新的版本总是提供性能改进,并且许多错误已被消除。这里我们将使用 GNS3 v2.2.8,以便下载相应的GNS3.VM.VMware.Workstation.2.2.8.zip文件。系统会提醒您再次下载GNS3-2.2.8-all-in-one.exe文件,但您也可以现在下载以节省时间。

从下载并安装 GNS3 虚拟机。ova 文件

下载 GNS3 虚拟机文件和创建 GNS3 虚拟机的过程如下:

|

|

工作

|
| — | — |
| 01 | First, go to GNS3’s GitHub site specified here to download the GNS3 VM file. Download the latest version of the GNS3 VM file . The latest version is GNS3.VM.VMware.Workstation.2.2.8.zip at the time of writing this book. At the time of writing this book, the latest GNS VM release version is 2.2.8. See Figure 6-53.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-53。GNS3 和 GNS3 虚拟机,下载。GitHub 中的 ova 文件https://github.com/GNS3/gns3-gui/releases |
| 02 | Now go to your Downloads folder and unzip the downloaded file in the same location. See Figure 6-54.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-54。解压缩 GNS3 虚拟机。ova 文件到一个文件夹 |
| 03 | Now go back to your VMware Workstation 15 Pro and select the File ➤ Open menu. See Figure 6-55.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-55。VMware 工作站菜单,文件➤打开 |
| 04 | Locate the extracted GNS3 VM .ova file , select the file, and then click Open. See Figure 6-56.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-56。VMware 工作站,GNS3 虚拟机。ova 文件打开 |
| 05 | In the next window, click the Import button to import the GNS3 VM. You can leave the storage path as the default location. See Figure 6-57 and Figure 6-58.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-57。VMware 工作站,GNS3 虚拟机导入外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-58。VMware 工作站,GNS3 虚拟机导入正在进行中 |
| 06 | Now, GNS3 VM has been created on your VMware Workstation 15 Pro and ready for use. You do not have to do anything with this VM at this stage as GNS3 software installation and integration are required for this VM to become useful. See Figure 6-59.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 6-59。安装了 VMware 工作站、GNS3 虚拟机 |

这就完成了以后用于 GNS3 集成的 GNS3 VM 的下载、导入和安装。现在我们已经有了所有需要的虚拟机,我们可以学习 Linux 基础知识、Linux 上的 Python、GNS3 和 Python 网络自动化。现在学习平台差不多完成了。

摘要

在本章中,您下载、安装并创建了 CentOS 8 虚拟机。您测试了新创建的 CentOS 虚拟机的 SSH 登录,并学习了使用nmtui包方法管理网络适配器设置的简单方法。最后,您添加了 GNS3 虚拟机,为以后的 Cisco IOS 集成做准备。现在您有了两种不同风格的 Linux 服务器;你将在第七章学习 Linux 基础知识,然后在第八章学习 Linux 软件安装和管理。

故事时间 3:虚拟机管理程序的起源

之前,您学习了两种不同的虚拟化程序,它们被分为类型 1 或类型 2 虚拟机管理程序。由于硬件和软件,尤其是虚拟化技术的快速发展,围绕云和云计算以及随需应变 IT 概念的大肆宣传应运而生。如果你查阅 hypervisor 的字典定义,你很快就会发现这个词是由两个词组成的复合词: hypervisor 。可以追溯起源到希腊语单词 hyper ,意为上方,而 visor 一词来源于古英法单词 visor ,意为隐藏。维基百科。com 暗示 hypervisor 是单词 supervisor 的变体。根据维基百科, hypervisor 这个词是 supervisors 的 supervisor。单词 hyper 比单词 super 有更强烈的同义词含义,至少在语言学上是这样。

如果你也对 DC 漫画超级英雄角色感兴趣,你知道最强大的角色是超人(虽然很多人会在这里争论)。但如果通过 DC 漫画创作出一个超男角色并使其成名,那么这个超男甚至会比超人还要强大。

为了更现实地理解虚拟化的概念,可以将虚拟机管理程序想象成汽车引擎中使用的润滑剂。典型的内燃机汽车有较大的部件,如发动机和变速器。在一个较大的组件内部,有许多较小的移动部件。将虚拟机管理程序视为汽车引擎的润滑剂,以防止位于较大部件内部的几个较小部件发生摩擦和磨损。虚拟机可以在其托管服务器上平稳运行,很少或没有兼容性问题。虚拟机管理程序对虚拟机隐藏(或伪造)了真实的硬件,认为它是一台真实的计算机,但虚拟机是运行在虚拟机管理程序上的一些文件。在这个意义上,虚拟机监控程序与单词 fabrication 相关联,单词 fabrication 的意思是假的。虚拟机认为它们运行在真正的基于硬件的服务器上,但所有硬件都是文件,因此虚拟机是运行在软件上的一堆文件。

我支持的一些客户环境仍然使用 Cisco 6500/4500 系列企业交换机和 Cisco 9000 系列交换机,它们的大型框架交换机主体中插入了管理模块。如果你正在研究 CCNA,你可能听说过这些企业级交换机。根据打开的操作系统和功能集,这些交换机可以成为路由器、交换机或两者。一些老工程师称这些设备为路由器,因为它们可以支持多个 OSI 层。这些设备中的管理程序是虚拟化技术的模块化硬件版本,作为具有 CPU 和 ram 的独立操作系统运行。甚至在虚拟化技术几年前起飞之前,思科就已经开始使用各种模块进行基于硬件的虚拟化。作为参考,当前网络市场上提供的 Nexus 3K/ 5K/6K/7K 和企业 9K 交换机支持 Python APIs,默认情况下附带 Python 2.7.2 或更新版本。然而,像许多思科产品一样,内置于这些交换机中的 Python 版本有一些限制,并且仅限于您可以使用它做什么。有关这些交换机的更多信息,请访问 Cisco。com ( www .思科。com/c/en/us/products/switches/catalyst-9400 系列-switches/ index。html

七、Linux 基础

在本章中,您将学习 Linux 基础知识,以便快速掌握在第八章中学习的基本 Linux 管理技能。因为您可能已经从事网络自动化工作,所以您不必成为全职的 Linux 管理员。然而,您必须知道您在这些系统上正在做什么,这样您就不会停止运行在 enterprise Linux 系统上的关键服务。其他 Python 网络自动化书籍经常忘记提及一般 Linux 管理技能对于网络自动化的重要性。事实上,Linux 和 Python 网络自动化是齐头并进的。

在这一章中,你将学习如何开始使用 Linux,以及关于目录和文件结构。然后您将学习使用 vi 和 nano 进行基本的文件和目录管理。本章结束时,你将能够使用 Linux 终端和文本编辑器来管理目录和文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传本章没有安装前任务,但本章假设您已经阅读并完成了第 1–3 章节。您将使用之前章节中安装的 Ubuntu Server 20 LTS 和 CentOS 8.1 虚拟服务器。如果您尚未完成这些安装,请返回到前面的章节并创建您的虚拟机。您可以从以下 GitHub 网站下载其他安装指南:

URL: https://github.com/pynetauto/apress_pynetauto

在本章中,您将使用 CentOS 8.1 和 Ubuntu Server 20 LTS 虚拟机学习 Linux 基础知识。图 7-1 显示了本章所需的逻辑实验拓扑。您需要启动并运行两个 Linux 服务器,通过 VMnet8 (NAT)网络连接,并且您的 Windows 主机连接到互联网。VMnet8 网络子网的第三个二进制八位数可能与图中所示的不同。如果是这样,您将在给定的子网内工作,或者您可以从 VMware Workstation 的虚拟网络编辑器中更新 VMnet8 子网,使该子网也位于 192.168.183.0/24 子网中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7-1。

逻辑网络拓扑

为什么要学 Linux?

本章致力于学习 Linux 基础知识。您将了解 Linux 的历史、不同类型的 Linux 发行版、基本的文件和目录管理,以及如何使用 vi/nano 文本编辑器进行基本的 Linux 管理。您可能是一个内容 Windows 用户,或者问“为什么 IT 技术人员应该学习 Linux?”或者“为什么有人要学 Linux?”我对这个问题的简单回答是,作为一个 IT 技术人员学习 Linux 没有什么损失;这包括网络、安全、系统和软件工程师等。目前的 IT 行业缺乏拥有良好 Linux 管理技能的 IT 工程师,这表明如果你既懂 Linux 又懂 Windows 管理,那么会有很多工作机会。

直截了当地说,从微软 Windows 用户的角度来看,试图驯服和掌握 Linux 操作系统(OS)并平稳过渡到 Linux 是一条崎岖的道路。对许多人来说,失去 Windows 或图形用户界面(GUI)是一件大事。如果你已经精通 Linux,那就太棒了;你领先了一步,而且是当之无愧的领先。大约 20 年前,当我得到我的第一份 IT 支持工作时,我遇到了一位导师,他建议我对 Linux 感兴趣,然后从事 Linux 管理员的职业。当时,我对思科网络、统一通信和 Windows 更感兴趣,所以我没有找到一个令人信服的理由认真学习 Linux。直到 2015 年,我才开始对 Python 编码产生兴趣。我意识到我有多后悔没有接受以前导师的建议去学习 Linux。在我们的行业中,很多 IT 工程师,尤其是网络工程师,都会犯同样的错误。我现在和其他 Windows 用户分享我的故事,这样他们就能对 Linux 保持开放的心态。不要错过这个机会。

至少在企业级,很大一部分应用服务器运行在某种基于 Linux 的操作系统上。它可能是亚马逊网络服务(AWS)或云中的脸书或谷歌;应用服务器需要一个安全可靠的操作系统来日复一日地运行。在过去的 15 年中,Linux 服务器的使用量与云的使用量同步大幅增长,大数据业务也获得了发展势头。多年来,在企业 IT 和数据中心环境中,越来越多的企业系统从 Windows 迁移到 Linux。这一趋势背后有许多原因,但仅举几个例子,Linux 提供了更高的性价比;它具有更好的可靠性、安全性、可扩展性、高可用性和灵活性,这是 Windows server 环境所不具备的。Linux 现在是我们生活方式的新标准。2020 年,微软发布了 Windows 10 补丁,内置了 Linux 内核支持,支持 Windows Subsystem for Linux (WSL)。所以,现在你甚至可以在 Windows 上运行 Linux 虚拟机。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传访问 Microsoft Windows 文档网站,阅读有关 WSL 的更多信息。

URL: https://docs.microsoft.com/en-us/windows/wsl/install-win10

如果您已经在企业网络行业工作了一段时间,那么您将对思科技术最为熟悉。仅以思科为例,大约 20 年前,思科的大部分网络、安全和语音服务应用都基于 Windows 2000 和 2003。一个很好的例子是 Cisco 的 IP PABX 服务器,称为 Cisco CallManager(版本 3 和 4.1),它是建立在 Windows 2000 服务器上的。其他例子包括旧的 UCCX、UCCE 和 CiscoWorks 服务器;他们都使用 Windows 服务器作为基础平台。然而,在 2010 年,思科决定放弃 Windows 服务器,转而采用设备模式;它将其许多应用服务器迁移到基于 Red Hat 的 Linux 操作系统(OS)上。甚至在 2010 年之前,思科放弃 Windows 服务器并用 Linux 取而代之的决定就符合 IT 趋势。此外,在 Juniper 的核心操作系统中可以找到 Linux 操作系统的改编版本,如 Junos 和 Palo Alto 的 PAN 产品;它们都使用 Linux 作为基本操作系统。

如前所述,Linux 相对于 Windows 的一些优势包括稳定性、高安全性和较低的拥有成本。Linux 是一个有效的企业操作系统,所有 IT 工程师都必须学习并应用到他们的工作中。并不是所有人都真的想以 Linux 系统管理员为生,但是我们必须知道足够多的知识来保住我们作为 IT 技术人员的工作。在本书中,您希望学习足够的 Linux 基础知识,以便能够轻松地执行基本的实验任务。如果你打算专业学习 Linux 成为一名 Linux 系统管理员,可以系统学习红帽 8 认证。在本书中,我们将学习精选的 Linux 资料,以便开始学习 Python 网络自动化。

要了解一项技术,从一点历史或者它的起源开始总是好的。让我们从一些 Linux 历史开始,了解我们可用的不同类型的 Linux 发行版,研究 Linux 文件和目录结构,并掌握 vi 和 nano 文本编辑器,以便在没有图形用户界面(GUI)帮助的情况下完成工作。但是万一你因为某种原因需要一个 GUI,我们已经在我们的服务器上有了可选的基于 GUI 的 Linux 桌面。在本章的最后,你需要在 Ubuntu 和 CentOS Linux 服务器上执行一些基本的管理。

Linux 的开始

为了理解 Linux,让我们快速回顾一下 Linux 的早期历史,然后回顾一下当今最流行的 Linux 发行版。供您参考,表 7-1 中的时间表只显示了直到 1991 年第一个 Linux 发行版发布之前的最初开发亮点。如果您想找到其他时间线,请参考 https://en.wikipedia.org/wiki/Linux

表 7-1。

早期 Linux 开发时间表

|

|

Linux 开发亮点

|
| — | — |
| One thousand nine hundred and sixty-nine | 与 Ken Thompson、Dennis Ritchie、Douglas Mcilroy 和 Joe Ossanna 在美国电话电报公司实验室首先开发了 UNIX。 |
| One thousand nine hundred and seventy-one | Unix 最初是用汇编语言编写的。 |
| One thousand nine hundred and seventy-three | Dennis Richie 首先使用 C 语言编写了 UNIX。 |
| One thousand nine hundred and eighty-three | 理查德·斯托尔曼引入了 GNU 项目。 |
| One thousand nine hundred and eighty-four | 完整的 UNIX 兼容软件系统。自由软件开发开始了。 |
| One thousand nine hundred and eighty-five | 理查德·斯托尔曼建立自由软件基金会。 |
| One thousand nine hundred and eighty-nine | 引入了通用公共许可证(GNU)。 |
| One thousand nine hundred and ninety | 许多程序是为操作系统开发的。 |
| 1991 年 8 月 25 日 | 当时 21 岁的芬兰学生林纳斯·本纳第克特·托瓦兹公开宣布 Linux 内核的免费版本。1991 年的 Linux 内核是在 GNU GPL 许可下发布的。 |

来源: https://en.wikipedia.org/wiki/Linux

从表 7-1 可以看出,Linux 植根于 UNIX。我们可以猜测,Linux 的语法和操作将与 UNIX 相似。自从 Linus Torvalds 在 1991 年发布免费的 Linux 内核以来,许多 Linux 发行版都是在 GNU 下开发和发布的。有些 Linux 类型是商业驱动的,有些是为社区或个人使用而创建的。大多数 Linux 发行版可以运行商业应用,但也有一些提供了很好的桌面版本,如 Ubuntu desktop。

表 7-2 列出了 2017 年以来最流行的十个 Linux 发行版,以及每个 Linux 类型的一些特征。如果您的企业基础设施需要 Linux 操作系统,最推荐的 Linux 系统是 Red Hat Enterprise Server。如果你必须用它来工作和学习,Ubuntu、CentOS 和 Debian 是非常灵活和用户友好的 Linux 发行版。在这三个非常流行的 Linux 发行版中,Ubuntu 具有最用户友好的特性,如果需要的话,它有一个很棒的 GUI,是初学者的绝佳选择。注意 Ubuntu 是 Debian 的衍生品。CentOS 使用与 Red Hat 和 Fedora 相同的 Linux 内核和软件。这里提到的三个 Linux,Red Hat、CentOS 和 Fedora,都是相同的 Linux 发行版,只是在美学上稍有不同。Fedora 是 Red Hat 的开发版本。红帽是面向大型企业的企业级商业化 Linux,CentOS 是红帽的开源版本。Fedora 提供最新的测试版软件,但缺乏 CentOS 和 Red Hat Linux 的稳定性。因此,在学习 Linux 时,任何版本的 CentOS server 或 CentOS Stream 都应该是 Red Hat 衍生的 Linux 版本的首选 Linux 发行版。Linux 开源版本和商业版本之间的主要区别在于,您是从供应商支持团队获得全面的技术支持,还是从 Linux 开发人员社区获得尽最大努力的支持。现在快速查看表 7-2 并找到您想要使用的 Linux 发行版。大多数 Linux 软件对个人使用是免费的,没有商业限制。

表 7-2。

2017 年十大 Linux 服务器发行版

|

军阶

|

Linux 在这里

|

OS 衍生物

|

用户技能水平

|

优势

|
| — | — | — | — | — |
| one | Ubuntu 服务器 | 基于 Debian 的 | 中间的 | 性能、稳定性、灵活性、DC 支持、安全 |
| Two | 红帽企业 Linux (RHEL) | 基于 Fedora 的 | 先进的 | 供应商支持、性能、安全、云和物联网支持、数据和虚拟化支持 |
| three | 企业服务器 | 基于 RPM | 中间的 | 开源、稳定、安全的云服务支持 |
| four | CentOS | 总部设在 RHEL | 中间的 | 免费社区支持;与没有标志的 RHEL 相同 |
| five | 一种自由操作系统 | 基于 Debian 的 | 中级到高级 | 免费,开源,稳定,教育,商业,政府和非政府组织可以使用 |
| six | Oracle Linux(Oracle 企业 Linux) | 总部设在 RHEL | 先进的 | 免费、开源、云外、中小型企业和企业使用、云和数据中心支持 |
| seven | Mageia | 基于 Mandriva 的 | 中间的 | 免费、稳定、安全、社区支持、一系列软件、MariaDB 支持 |
| eight | 克利罗斯 | 总部设在 RHEL/CentOS | 中级到高级 | 开源、SMB 支持、商业用途、网络网关和服务器支持、web 服务器支持 |
| nine | Arch Linux | 其他的 | 先进的 | 开源、简单、性能优化、稳定、灵活 |
| Ten | slackware | 基于 Slackware | 先进的 | 免费,开源,最接近的 UNIX 系统,简单,稳定 |

来源: https://www.tecmint.com/10-best-linux-server-distributions/

了解 Linux 环境

Linux 是安装在物理或虚拟机上用于个人或商业用途的操作系统(OS)。Linux 桌面和 Linux 服务器的显著区别是图形用户界面。Linux 服务器通常被安装来为用户或企业提供特定的服务,并且通常由精通 Linux 命令的 Linux 管理员来管理。为了获得更好的性能、稳定性和更高的安全性,Linux 通常会安装最低版本的软件。除此之外,Linux 桌面和服务器版本对 Linux 操作系统的每个发布版本使用相同的基本内核。如前几章所示,您可以选择在 Linux 服务器上安装 GUI。在本书的前面,为了学习和方便,您在 Linux 服务器上安装了一个桌面。随着您对 Linux 及其命令行的熟悉,您将慢慢脱离 GUI,能够仅使用命令行运行所有基本的 Linux 管理任务。你会发现,在 Linux 中,一切都是由文件和目录组成的;这是一个免费且非常灵活的操作系统。同样,如果您习惯于通过命令行界面(CLI)来管理 Cisco 设备,那么您会有宾至如归的感觉。即使你没有思科网络背景或零 Linux 经验,你也能跟上;我们将只讨论 Linux 的基础知识,这样您就可以运行实验来结束您的第一次 Python 网络自动化之旅。

了解 Linux 目录和文件格式

前面,我们简要地看了一下 Linux 开发时间表,了解了流行的 Linux 发行版类型。接下来,让我们快速看一下 Linux 目录结构。在 Linux 中,所有的东西都是用文本写的,保存在不同的目录中。由于 Windows 操作系统也可以追溯到*nix,所以 Windows 文件和文件夹结构是相似的。但是 Linux 不像 Windows 一样有C:驱动;相反,它有根文件夹,或者说/.图 7-2 描述了一个通用的 Linux 目录结构以及每个目录中通常存放的文件类型。当然,您可以像在 Windows 操作系统中一样创建自定义目录和文件。如果您忘记了每个目录的用途,请查看该图并将其作为参考点。这个阶段不用全部背下来,但是看一看,看能不能发现什么有趣的东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7-2。

典型的 Linux 目录和文件结构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传图 7-2 显示了一个典型的 Linux 目录结构。不同的 Linux 类型会有稍微不同的目录和文件结构,但是通常彼此是相同的。

图 7-3 显示了 CentOS 8 服务器的根目录。仔细查看并比较列出的目录;你会看到与图 7-2 的相似之处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7-3。

CentOS 8 Linux 目录示例

虚拟化与纳米化

您已经简要了解了典型的 Linux 目录和文件结构。现在让我们考虑一下 Linux 文件和目录管理。已经具备良好 Linux 知识的读者会问:“为什么在这里教如何使用 vi 文本编辑器?”如果你是一个经验丰富的 Linux 用户,你可以跳过这一章的大部分内容,但是在继续阅读第九章之前,请务必阅读第八章,以便在 CentOS 8.1 服务器上安装各种 ip 服务。如果你对 Linux 接触不多,在跳到下一章之前,一定要学习 vi(可视化编辑器)和 nano。您需要熟悉 Linux 文本编辑器,并通过终端控制台或命令行执行大多数任务。在 Linux 服务器上,几乎所有的东西都是由文本文件组成的,您应该使用终端控制台来管理您的日常任务。换句话说,您必须通过命令行熟悉 Linux 文件结构、文件和目录管理。通常,当你在 Linux 服务器上执行一个任务时,你的意图必须是明确的,你确切地知道你想从你的行动中达到什么目的。学习使用 Linux 的文本编辑器对于学习 Python 来说是必不可少的,因为基于脚本的编码需要在您最喜欢的文本编辑器中花费很多时间。

当然,Linux 有各种各样的文本编辑器,但是大多数现代 Linux 系统上的标准文本编辑器是 vi。要想精通 Linux,学习如何使用它不是可有可无的,而是必须的。是的,vi 在黑色背景上缺少用户控件,对于第一次使用 Linux 的用户来说可能有些笨拙。让我们一劳永逸地学习如何使用 vi 编辑器,这样你就不必担心再次学习这个可怕的文本编辑器(无论如何,最初是可怕的)。

在本章中,我们鼓励您使用 vi 和一个名为 nano 的辅助文本编辑器来探索文件和目录管理。这是另一个最适合初学者的 Linux 文本编辑器,因为它使用伪图形布局。与 vi 不同,它不是预装在所有的 Linux 发行版上,但是了解这两者是有好处的。如上所述,学习如何使用 vi 不是可选的。在客户的生产环境中管理企业服务器和网络设备时,它可能是唯一可用的文本。

首先,让我们学习如何使用 vi 文本编辑器,它将成为您选择的主要 Linux 文本编辑器,然后您将学习如何使用 nano 文本编辑器作为您选择的第二个文本编辑器。

vi 简介

我们可以说,Linux 中的 vi 源于 UNIX 中的 vi。Linux 中的 vi 与 UNIX 操作系统中的 vi 几乎相同,因此很清楚 Linux OS 及其应用的起源。首先,vi(“可视化编辑器”)通过将命令和插入模式分开,使用 to 模式来防止无意的编辑。在 vi 中有两种操作模式。

  • 命令模式:这是第一次打开文件的起点。在这种模式下,输入的每个字符都是一个命令,用来改变正在打开的文本文件。

  • 插入模式:这是编辑模式。在这种模式下,键入的每个字符都被添加到文件的文本中;按 Esc 键关闭插入模式并返回命令模式。

第二,在命令模式下,vi 有许多有用的命令,但是您只需要几个命令就可以开始了。表 7-3 包含基本但最有用的 vi 命令。经过一些练习,你的手指会比你的大脑先记住这些命令。

表 7-3。

vi 文本编辑器基本命令

|

Vi 命令

|

描述

|
| — | — |
| 基本的 | vi | 打开 vi 文本编辑器 |
| i | 进入插入模式 |
| 转义字符 | 退出插入模式 |
| :x | 退出 vi 而不保存更改 |
| :q:q! | 退出或强行退出 |
| :w | 写 |
| :wq:wq! | 保存并退出 |
| 移动 | j | 将光标下移一行 |
| 8 键 |
| $ key |
| k | 将光标上移一行 |
| #键 |
| h | 将光标向左移动一个字符 |
| 退格键 |
| !键 |
| l(小写 L) | 将光标向右移动一个字符 |
| 空格键 |
| “钥匙 |
| 0(零) | 将光标移动到当前行的开头(光标行) |
| $ | 将光标移动到当前行的末尾 |
| w | 将光标移动到下一个单词的开头 |
| b | 将光标移回到前一个单词的开头 |
| :0 | 将光标移动到文件中的第一行 |
| :n | 将光标移动到第 n 行 |
| :$ | 将光标移动到文件的最后一行 |
| 复制/粘贴 | dd | 复制(剪切) |
| p | 在光标下粘贴 |
| P | 粘贴到光标上方 |
| 取消 | u | 撤消最后的更改,一个简单的切换 |
| 搜索文本 | /string | 向前搜索文本中出现的字符串 |
| ?string | 向后搜索文本中出现的字符串 |
| n | 移动到搜索字符串的下一个匹配项 |
| N | 以相反方向移动到搜索字符串的下一个匹配项 |

如果你已经浏览了表 7-3 大约五次,并且记住了 vi 的一些关键命令,现在你可以在 Ubuntu 或 CentOS 服务器中打开 VMware Workstation 和 SSH,为本章的第一个练习做准备(图 7-4 )。在真实的生产环境中,系统管理员通常使用 Putty、Tera Term 或 SecureCRT 等 SSH 客户端远程连接到 Linux 服务器和网络设备。您更喜欢使用哪个 Linux 服务器并不重要。尽管我们是在一台计算机上工作,但是请把您的服务器想象成一个远程 Linux 服务器,把您的主机的 Windows 操作系统想象成远程客户机。让我们练习一些基本的 vi 和 Linux 命令。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7-4。

使用 PuTTY 通过 SSH 登录 CentOS 8.1

虚拟仪器基础

对一些人来说,学习如何使用 vi 可能是 Linux 的第一个障碍,但对其他人来说,vi 只是他们必须获得的另一个工具,这样他们就可以自豪地把它挂在腰带上。随着实践的进行,您将熟悉 vi,并且离开发良好的 Linux 管理技能更近了一步。

在输入每个 Linux 命令后,你必须按下键盘上的回车键。在练习的某些部分,您必须按回车键,您可能会看到左箭头(↲)符号。

这里有一个例子::wq (↲).

前面的例子意味着在你输入:wq后,你必须按回车键。

在下面的练习中,用户使用用户名pynetauto通过 SSH 连接登录 CentOS 8.1 服务器。

  1. 查看当前工作目录(pwd),制作一个名为ex_vi的工作目录(mkdir,列出当前工作文件夹中的(ls)文件和目录,将目录(cd)更改为ex_vi目录。最后,再次检查当前工作目录(pwd)。

    目标:学习如何检查、创建和导航到一个新目录。

    ---------------------------------------------------------------------

    [pynetauto@localhost ~]$ pwd

    /home/pynetauto

    [pynetauto@ localhost ~]$ ls

    Desktop Documents Downloads Music Pictures Public Templates Videos

    [pynetauto@ localhost ~]$ mkdir ex_vi

    [pynetauto@ localhost ~]$ ls

    Desktop  Downloads Music   Public   Videos

    Documents ex_vi   Pictures Templates

    [pynetauto@ localhost ~]$ cd ex_vi

    [pynetauto@ localhost ex_vi]$ pwd

    /home/pynetauto/ ex_vi

    ---------------------------------------------------------------------

  2. 当文本文件在 vi 中打开时,您会注意到这是一个合适的极简文本编辑器。vi 最令人兴奋的地方是显示在应用底部的关于文件名和行号的信息。试着在键盘上敲点什么;您不能在命令模式下键入任何内容。转到下一个练习,将数据(文本)添加到该文件中。

    您可以通过键入vi filename然后按回车键来创建一个新文件。

    目标:学习如何创建/打开文件。

    ---------------------------------------------------------------------

    [pynetauto@localhost ex_vi]$ vi myfile01.txt

    ---------------------------------------------------------------------

    当新文件打开时,您会看到空行,每行都有一个波浪号(~),并且在底部有一行显示新文件的文件名和状态。

    ---------------------------------------------------------------------

    ~

    ~

    ~

    "myfile01.txt" [New File]             0,0-1     All

    ---------------------------------------------------------------------

  3. 如果要在文本文件中输入文本,必须首先进入插入模式。首先,按下键盘上的 I 键进入-- INSERT --模式。如果您在左下角看到--INSERT--,那么 vi 现在已经准备好接受您的输入了。

    目标:学习如何在 vi 中进入插入模式。

    按下键盘上的 I 键。

    ---------------------------------------------------------------------

    ~

    ~

    ~

    -- INSERT --                    0,1      All

    ---------------------------------------------------------------------

  4. 现在,在这个文件中键入一些文本,然后按键盘上的 Esc 键退出插入模式并返回到命令模式。一按 Esc 键,就看左下角。-- INSERT --从屏幕上消失,你处于 Ex 模式。现在输入:wq:wq!并按下输入↲键保存更改并退出 vi。

    目标:学习如何在 vi 中通过按:wq ↲来编写、保存和退出文件

    Python lives in the jungle.

    Also, python lives on my computer .

    Have a Pythonic day!

    ~

    :wq

  5. 和前面的例子一样,在对文件进行修改后,您通常希望在退出 vi 时保存修改后的文件。另一种退出 vi 的方法是在命令模式下键入:x

    目标:学习在 vi 中保存和退出文件的另一种方法。

    Python lives in the jungle.

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    :x

  6. 一旦退出 vi 并回到 Linux 终端控制台,发出ls ( list)然后发出cat myfile01.txt来验证更改。

    目标:学习在 vi 中列出当前目录下的(ls)文件,查看文件内容。

    [pynetauto@localhost ex_vi]$ ls

    myfile01.txt

    [pynetauto@localhost ex_vi]$ cat myfile01.txt

    Python lives in the jungle.

    Also, python lives on my computer .

    Have a Pythonic day!

  7. 现在,这里将向您介绍一些新的 Linux 命令来执行以下任务。您将学习如何作为一个sudo用户登录,检查当前的工作目录,找到您的文本文件,将文件复制到根目录,然后返回到普通用户模式。你已经看到了本章接下来的内容。

    目标:学习以 root 用户身份登录,检查文件是否存在,搜索文件,并将文件复制到 root 用户文件夹中。

    [pynetauto@localhost ex_vi]$ pwd

    /home/pynetauto/ex_vi

    [pynetauto@localhost ex_vi]$ su -

    Password: **********

    [root@localhost ~]# pwd

    /root

    [root@localhost ~]# ls myfile*

    ls: cannot access 'myfile*': No such file or directory

    [root@localhost ~]# find / -name myfile*

    /home/pynetauto/ex_vi/myfile01.txt

    [root@localhost ~]# cp /home/pynetauto/ex_vi/myfile01.txt ~/

    [root@localhost ~]# ls myfile*

    myfile01.txt

    [root@localhost ~]# find / -name myfile*

    /root/myfile01.txt

    /home/pynetauto/ex_vi/myfile01.txt

在 vi 中重新打开文件

在这里,您将练习在 vi 中重新打开和关闭文件。

  1. 如果您继续上一个练习,您应该仍然处于 root 用户模式。现在让我们使用su - username回到用户模式。检查当前工作目录,然后移动到原来的ex_vi目录。

    用您自己的用户名替换用户名。现在你应该回到用户的主目录和ex_vi目录。

    目标:学习作为标准用户重新登录。

    [root@localhost ~]# su - pynetauto

    [pynetauto@localhost ~]$ pwd

    /home/pynetauto

    [pynetauto@localhost ~]$ ls

    Desktop  Downloads Music   Public   Videos

    Documents ex_vi   Pictures Templates

    [pynetauto@localhost ~]$ cd ex_vi

    [pynetauto@localhost ex_vi]$ pwd

    /home/pynetauto/ex_vi

  2. 要重新打开一个现有的文件,只需键入vi,后跟文件名。如果你不小心打开了一个文件,不想做任何修改,只需输入:q并按回车键。

    目标:学习从 vi 中重新打开现有文件并退出(退出)而不修改文件。

    [pynetauto@localhost ex_vi]$ ls

    myfile01.txt

    [pynetauto@localhost ex_vi]$ vi myfile01.txt

    Python lives in the jungle.

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    :q ↲

  3. 如果您打开文件,进入插入模式,并开始编辑文件,但决定不保存更改就退出,您可以使用:q!。在这个例子中,“Goodbye.”被添加到第四行,但是我们想放弃它并退出而不保存更改。

    目标:修改文件后学会退出。

    Python lives in the jungle.

    Also, python lives on my computer.

    Have a Pythonic day!

    Goodbye .

    ~

    :q! ↲

    如果你修改了文件,只使用了:q并按下回车键,vi 会要求你在:q后添加!

    Python lives in the jungle.

    Also, python lives on my computer.

    Have a Pythonic day!

    Goodbye.

    ~

    E37: No write since last change (add ! to override)                                     4,8     All

  4. 要查看文件的内容而不在 vi 中打开它,您可以使用catmoreless命令。尝试所有三个命令,但是当您使用less命令时,您可以使用 Ctrl+Z 键退出。

    目标:学习使用catmoreless命令查看文件内容。

    [pynetauto@localhost ex_vi]$ cat myfile01.txt

    Python lives in the jungle.

    Also, python lives on my computer.

    Have a Pythonic day!

    [pynetauto@localhost ex_vi]$ more myfile01.txt

    Python lives in the jungle.

    Also, python lives on my computer .

    Have a Pythonic day!

    [pynetauto@localhost ex_vi]$ less myfile01.txt

    [2]+ Stopped         less myfile01.txt

在 vi 中复制和粘贴一行

您可以使用dd在 vi 中复制一行,并使用 P 键在光标位置下方粘贴一行。或者使用 P 键在光标位置上方粘贴一条线。你可以很容易地记住这个操作。尝试使用 P 键粘贴到光标位置下方,使用 P 键粘贴到光标位置上方。

  1. 再次打开 vi 中的myfile01.txt。将光标移动到第三行,因为您要剪切第三行。

    目的:在 vi 命令模式下移动光标。

    Python lives in the jungle.

    Also, python lives on my computer.

    |Have a Pythonic day!                       # cursor line

    ~

    "myfile01.txt" 3L, 84C                    3,1      All

  2. 连续按两次 D 键。该操作将剪切光标所在的行。

    目标:使用dd.切断活动线上的字符串

    dd

    Python lives in the jungle.

    |Also, python lives on my computer. # cursor line

    ~

    ~

    "myfile01.txt" 3L, 84C                    3,1      All

  3. 现在按 P 键粘贴“有一个 Pythonic 式的一天!”之前“还有,python 在我的电脑上。”您已经成功交换了第二行和第三行。

    目标:将复制的行粘贴到光标位置上方的行。

    P

    Python lives in the jungle.

    |Have a Pythonic day!                       # cursor line

    Also, python lives on my computer.

    ~

    "myfile01.txt" 3L, 84C                    2,1      All

  4. 现在你想在第四行加上同样的句子。将光标移动到第三行位置。

    目标:向下移动光标。

    Python lives in the jungle.

    Have a Pythonic day! # cursor line

    |Also, python lives on my computer.

    ~

    "myfile01.txt" 3L, 84C                    3,1      All

  5. 这次按 P 键粘贴“这是我的文件 01。”第一行以上。

    目标:将复制的行粘贴到光标位置下方的行。

    p

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    |Have a Pythonic day! # cursor line

    ~

    4,1      All

  6. 现在按一次 Esc 键,然后使用:wq保存更改并退出 vi。

    目标:保存更改并退出 vi。

    :wq ↲

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    :wq ↲

撤消 vi 中的最后一个

如果出错,您可以在命令模式下使用:u撤销上一次操作。

  1. :u(撤销)是基本命令之一,因为它允许你撤销你的最后一个操作。在 vi 中,这就像一个开关,撤销和重做你最近的动作。首先,在–INSERT--模式下,重新打开myfile01.txt,在第 5 行输入一些内容,如下所示。

    目标:学习撤销 vi 中的最后一个动作。

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a Pythonic day!

    You can do it!| # cursor line

    ~

    -- INSERT --                        All

    按 Esc 键退出插入模式并返回命令模式。键入:u并按下键盘上的 Enter 键来撤销您的上一个操作。

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer .

    Have a Pythonic day!

    You can do it!

    ~

    :u ↲

    一旦你按下回车键,你刚刚添加的第五行将被删除(撤消)。

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    1 line less; before #1 23:18:48        4,20     All

有些人非常喜欢 vi 编辑器,他们会在 Windows 上安装一个名为 gvim 的 Windows 版本的 vi,并将其用作他们首选的 Windows 文本编辑器。对于大多数新用户来说,你可能需要一段时间来适应 vi。

URL: www。我来了. org/ download. php

在 vi 中搜索文本

vi 编辑器还提供了字符串搜索。您可以在命令模式下使用/string来搜索您正在寻找的字符串。Cisco IOS show命令也提供此功能。例如,在您的 Cisco 路由器上运行show run命令时,您可以使用/line vty跳到线路的末端。

  1. 再次,在 vi 中打开myfile01.txt文件。您可以使用字符串来搜索文本。将光标放在文件的开头,并在命令模式下键入/Python。搜索词将会突出显示。记住 Python 中的 P 是大写字母,所以这个搜索区分大小写。请注意,第三行的单词python没有突出显示。

    目标:学习在 vi 中搜索字符串和浏览文本文件。

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    /Python # cursor line

    按一次回车键,移动到第一个出现的字符串Python。光标移动到搜索单词的第一个字母。

    再输入一次/Python,然后按回车键找到下一个出现的字符串。

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    /Python ↲

    按回车键,然后按一次 N 键,移动到最后出现的字符串Python.

    Python lives in the jungle.

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a |Pythonic day! # cursor line

    ~

    /Python              4,8     All

    按 Shift+N 向后移动。注意左下角的/符号变成了?

    Python lives in the jungle.

    Have a |Pythonic day! # cursor line

    Also, python lives on my computer .

    Have a Pythonic day!

    ~

    ?Python              2,8     All

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传如果想把 vim 做成 IDE,可以参考下面这篇文章做参考。

URL: https://realpython.com/vim-and-python-a-match-made-in-heaven/

在 vi 中显示行号

在 vi 文本编辑器中工作时,一些文本行或代码是可以管理的,但是随着文本/代码行的增加,您很容易迷失在文本/代码行中。为了跟踪当前的工作位置,vi 有一个编号功能。您可以通过在命令模式下键入:set number来打开行编号。

  1. 在 vi 中重新打开myfile01.txt,输入:set number,按回车键。

    目标:启用和禁用行号。

    1 Python lives in the jungle.

    2 Have a Pythonic day!

    3 Also, python lives on my computer.

    4 Have a Pythonic day!

    ~

    :set number ↲

    4,1     All

    注意如果你想关闭编号,在命令模式下键入:set nonumber

    Python lives in the jungle .

    Have a Pythonic day!

    Also, python lives on my computer.

    Have a Pythonic day!

    ~

    :set nononumber ↲

    4,1     All

vi 中有更多的命令,但是您已经完成的练习包含了开始使用 Linux 操作系统所需要的基本知识。接下来,您将了解 nano 文本编辑器。对于大多数 Windows PC 用户来说,在 Linux 操作系统环境下处理文件时,nano 可能是一个更好的文本编辑器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传如果您想了解更多关于 vi 的信息,请访问以下网址了解更多详情:

URL: https://www.tecmint.com/vi-editor-usage/

URL: https://www.washington.edu/computing/unix/vi.html

纳米简介

与 vi 不同,nano 在 Linux 上几乎没有学习曲线;这是一个易于使用的文本编辑器,具有通用和简单的用户界面。默认情况下,nano text editor 安装在大多数较新的 Linux 发行版上,但可能不会安装在较旧的发行版上。它还可以与sudo命令配合使用。在最新的 CentOS 8.1 上,应预装 nano 2.9.8 或更新版本,并可立即使用。如果您使用 Ubuntu Server 20 进行 Linux 练习,您应该已经预装了 nano 4.8 或更高版本。如果没有预装,那么只需要一个简单的yum命令就可以在您的 Linux 机器上安装这个程序。在安装 nano 文本编辑器之前,我们先来看看 nano 中使用的一些键盘命令。这些命令可从 nano 界面获得,因此您不必记住它们。查看表 7-4 中的可用命令,并在进入下一节之前至少阅读一次描述。

表 7-4。

nano 文本编辑器主键

|

命令

|

描述

|
| — | — |
| nano[filename] | 打开编辑器命令。 |
| Ctrl+X | 退出编辑模式组合键。 |
| Y | 按 Ctrl+X 并选择 Y 保存文件。 |
| 普通 | 按 Ctrl+X 并选择 N 忽略编辑。 |
| 取消 | 按 Ctrl+X 并选择取消返回到 nano 编辑器。 |
| Ctrl+K | 复制(剪切)。 |
| Ctrl+U | 浆糊。 |

安装 nano

让我们快速看看如何检查您的 Linux 操作系统是否已经预装了 nano。在下面的例子中,用户名pynetauto用于登录 Linux。如果您在 Linux 安装部分使用了另一个用户名,您的用户名将会不同。

  1. 从您的 Linux 终端控制台,运行nano –Vnano --version .以下示例显示了 CentOS 8 上nano –V命令的输出。

    目的:了解如何在 Linux 上检查 nano 版本或 nano 的可用性。

    nano –V or nano --version

    # On CentOS 8.1 server

    [pynetauto@localhost ~]$ nano -V

    GNU nano, version 2.9.8

    (C) 1999-2011, 2013-2018 Free Software Foundation, Inc.

    (C) 2014-2018 the contributors to nano

    Email: nano@nano-editor.org  Web: https://nano-editor.org/

    Compiled options: --enable-utf8

    # On Ubuntu 20.04 LTS server

    pynetauto@ubuntu20s1:~$ nano --version

    GNU nano, version 4.8

    (C) 1999-2011, 2013-2020 Free Software Foundation, Inc.

    (C) 2014-2020 the contributors to nano

    Email: nano@nano-editor.org  Web: https://nano-editor.org/

    Compiled options: --disable-libmagic --enable-utf8

  2. 检查 Linux 系统上是否安装了 nano 的另一种方法是使用nano [filename]命令创建并打开一个新文件。如果您的 Linux 系统上没有安装 nano text editor,Linux 将返回一个“No such file or directory” –bash错误。此外,当我们之前研究 Linux 目录结构时,我们看到可执行程序文件通常驻留在/usr/bin/;中,快速检查该目录下是否存在 nano 以再次确认。

    目标:通过查看/usr/bin目录,检查您的 Linux 系统上是否有 nano。

    [pynetauto@localhost ~]$ nano -V

    bash: nano: command not found...

    Install package 'nano' to provide command 'nano'? [N/y] N

    [pynetauto@localhost ~]$ nano myfile02.txt

    bash: nano: command not found...

    Install package 'nano' to provide command 'nano'? [N/y] N

    [pynetauto@localhost ~]$ ls /usr/bin/nano

    ls: cannot access '/usr/bin/nano': No such file or directory

  3. 如果您遇到了与前面类似的错误,那么是时候在您的 Linux 操作系统上安装 nano 了。如果你像下面的例子一样以标准用户的身份登录,运行sudo yum install –y nano命令并输入sudo密码,你可以用一行带有–y句柄的代码来安装 nano。如果你作为根用户登录,你可以在yum命令前放下sudo。将install一词替换为remove卸载 nano。

    目标:在您的 Linux 服务器上安装和卸载 nano。

    # To install nano on CentOS/Red Hat/Fedora Linux

    [pynetauto@localhost ~]$ sudo yum install nano

    [sudo] password for pynetauto: **********

    # To uninstall nano

    [pynetauto@localhost ~]$ sudo yum remove -y nano

    # To install nano on Ubuntu/Debian/Mint Linux

    pynetauto@ubuntu20s1:~$ sudo apt-get install -y nano

    [sudo] password for pynetauto: **********

    # To uninstall nano

    pynetauto@ubuntu20s1:~$ sudo apt-get remove -y nano

    如果你使用的是 Ubuntu Server 20 并且缺少 nano 编辑器,使用apt-get install nano命令安装 nano。CentOS 和 Ubuntu 之间细微的语法差异通常来自于不同安装程序的使用。在 CentOS、Red Hat 和 Fedora 等基于 Red Hat 的发行版上,您必须运行yum(yellow dog Updater Modified)命令。正在慢慢取代yum的新成员是dnf,它正在使用 RPM 包管理器。基于 Debian 的发行版如 Ubuntu、Debian 和 Mint Linux 使用apt(高级打包工具)作为安装程序。

  4. 现在快速运行ls /usr/bin/nano命令来确认安装成功。

    目标:检查 nano 安装是否成功。

    # On CentOS 8.1 server

    [pynetauto@localhost ~]$ ls /usr/bin/nano

    /usr/bin/nano

    # On Ubuntu 20.04 LTS server

    pynetauto@ubuntu20s1:~$ ls /usr/bin/nano

    /usr/bin/nano

用 nano 创建/打开文件

您已经确认 nano 已成功安装,并准备好使用新应用编辑文件。如前所述,您可以使用您的 Ubuntu 或 CentOS 虚拟服务器进行此练习。

让我们以标准用户的身份重新登录,并创建一个新目录来开始 nano 练习。

  1. 首先,通过键入mkdir ex_nano.创建一个名为ex_nano的新目录,您将使用该目录来存储在练习过程中创建的练习文件。通过键入cd ex_nano将工作目录更改为ex_nano

    目标:创建一个新的目录来练习使用 nano 文本编辑器。

    [pynetauto@localhost ~]$ mkdir ex_nano

    [pynetauto@localhost ~]$ cd ex_nano

    [pynetauto@localhost ex_nano]$ ls

    [pynetauto@localhost ex_nano]$ pwd

    /home/pynetauto/ex_nano

  2. 如果执行如下所示的命令nano myfile02.txt,如果同名文件不存在,将打开一个新文件。如果存在同名文件,它将重新打开现有文件。

    Nano 有一个伪图形化的用户界面,只要你打开一个文件,帮助菜单就会显示在底部,让你感觉像在家里一样;你想直接投入使用它。如果你习惯了 Windows 上的记事本,使用这个用户友好的工具将不会有问题。

    目标:使用nano命令创建一个新文件。

    nano filename ↲

    [pynetauto@localhost ex_nano]$ nano myfile02.txt

    GNU nano 2.9.8           myfile02.txt

    |

    ^G Get Help ^O Write Out  ^W Where Is ^K Cut Text  ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File  ^\ Replace  ^U Uncut Text ^T To Spell  ^_ Go To Line

  3. 在打开一个新文件并立即决定退出 nano 而不编辑该文件后,该文件将被丢弃。要退出 nano,请使用^X(Ctrl+X 键)。如果你想先创建一个新文件,使用touch myfile02.txt然后用 nano myfile02.txt命令打开它。在 nano 中,如果你看到^符号,那意味着 Ctrl 键。

    目标:使用touch命令创建一个新文件。

    [pynetauto@localhost ex_nano]$ nano myfile02.txt

    [pynetauto@localhost ex_nano]$ ls

    [pynetauto@localhost ex_nano]$ touch myfile02.txt

    [pynetauto@localhost ex_nano]$ ls

    myfile02.txt

  4. 现在重新运行nano myfile02.txt命令并输入几行文本。正如您已经发现的,nano 编辑器不要求您像在 vi 编辑器中那样按 I 键进入-- INSERT --模式。完成后,要退出 nano,必须按 Ctrl+X ( ^X)。

    目标:写入新文件并退出。

    GNU nano 2.9.8           myfile02.txt           Modified

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    Save modified buffer? (Answering "No" will DISCARD changes.)

    Y Yes

    N No      ^C Cancel

  5. 要保存文件,请按 Y(是),然后按 Enter 键。或者忽略更改,请按 N(否)。若要返回文件进行进一步编辑,请按^C (Ctrl+C)。在 Linux 操作系统上,大部分程序都是区分大小写的,但 nano 菜单是个例外;它不区分大小写,所以可以互换使用 Y 表示 Y,N 表示 N。

    目标:保存已更改的文件。

    Y ↲

    GNU nano 2.9.8           myfile02.txt           Modified

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    File Name to Write: myfile02.txt

    ^G Get Help     M-D DOS Format   M-A Append     M-B Backup File

    ^C Cancel      M-M Mac Format   M-P Prepend     ^T To Files

  6. 使用morelesscat命令,后跟保存的文件名,myfile02.txt.如果您使用了less myfile02.txt命令,您可以使用 Q 键退出less.

    目的:使用catmoreless查看文件内容。

    [pynetauto@localhost ex_nano]$ ls -l

    total 4

    -rw-rw-r--. 1 pynetauto pynetauto 127 Jan 3 01:27 myfile02.txt

    [pynetauto@localhost ex_nano]$ more myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

您刚刚学习了如何在 nano 中创建/打开、保存和关闭文件。Linux 中有许多优秀的文本编辑器,比如 emacs、gedit、leafpad 和 Komodo,但是这些文本编辑器不会在本章或本书中讨论。当你有空闲时间的时候,你应该从谷歌搜索中探索其他基于 Linux 的文本编辑工具。

用 nano 重新打开文件
  1. 要在 nano 中重新打开一个现有的文本文件,您可以使用nano [filename],就像上一个练习中一样。因此,键入nano myfile02.txt打开一个现有的文件。

    目标:重新打开一个现有文件。

    [pynetauto@localhost ex_nano]$ nano myfile02.txt

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    [ Read 5 lines ]

    ^G Get Help ^O Write Out  ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File  ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

用 nano 剪切(删除)和粘贴
  1. 在 nano 中工作时,要剪切一行,首先移动到要剪切(或复制)的行,然后使用 Ctrl+K 组合键粘贴(取消剪切)使用 Ctrl+U 组合键。如果不粘贴剪切的信息,计算机内存中的信息将被丢弃,其作用类似于删除。

    重新打开myfile02.txt并将光标放在第 4 行。

    目的:在 nano 中剪切(删除)一行。

    [pynetauto@localhost ex_nano]$ nano myfile02.txt

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    [ Read 5 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    要删除第 4 行,请按 Ctrl+K。第 4 行对我们来说似乎已经被删除了,但 nano 会将第 4 行剪切并放入您的服务器内存中。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year .

    1\. IOS upgrade

    2\. Network monitoring

    |4\. Life-cycle management # cursor line

    [ Read 5 lines ]

    ^G Get Help ^O Write Out  ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File  ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

  2. 如果要复制和粘贴特定的字符串,首先将光标移动到要开始复制的第一个位置。在这个例子中,我们想要从第 4 行中删除单词Life-cycle

    目标:学习如何复制和粘贴一个特定的字符串。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    4\. |Life-cycle management # cursor line

    [ Read 5 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    然后按 Ctrl+6 并使用右箭头[→]突出显示单词或字符串。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    4\. Life-cycle| management # cursor line

    [ Read 5 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    然后按 Ctrl+K 剪切字符串。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    4\. | management # cursor line

    [ Read 5 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

  3. 现在使用箭头键将光标移动到第 3 行,并剪切第 3 行。我们想把 3 号线移到 2 号线。按 Ctrl+K 复制该行。

    目的:使用 nano 中的剪切粘贴功能。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    |2\. Network monitoring # cursor line

    4\. management

    [ Read 5 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replac  ^U Uncut Text ^T To Spell ^_ Go To Line

    现在将光标移动到第 2 行。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    |1\. IOS upgrade # cursor line

    4\. management

    [ Read 5 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    按 Ctrl+U 粘贴(插入)复制的行。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    2\. Network monitoring

    |1\. IOS upgrade # cursor line

    4\. management

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

  4. 如果要剪切多行,请将光标放在第一个位置,并多次按 Ctrl+K 键。复制的多行将被存储在计算机存储器中。我已经把光标放在第 2 行的开头,然后连续按 Ctrl + K ↲三次。

    目的:在 nano 中剪切和粘贴多行。

    Position the cursor in the first line to cut.

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    |2\. Network monitoring

    1\. IOS upgrade # cursor line

    4\. management

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    多次使用 Ctrl+K 来剪切三行。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    |

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    现在光标应该定位在第二行;按 Ctrl+U 键两次,粘贴复制两次的三行。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    2\. Network monitoring

    1\. IOS upgrade

    4\. management

    2\. Network monitoring

    1\. IOS upgrade

    4\. management

    | # cursor line

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    使用 Ctrl+X 并按 N 放弃更改并退出 nano。当您再次打开文件时,文件的内容应该保持在原始文件中。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justif  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

字符串搜索和替换字符串
  1. 在 nano 中,您可以使用 Ctrl+W 来搜索字符串,并且搜索不区分大小写。在下面的例子中,您将搜索单词 backup

    目标:在 nano 中搜索特定的单词或字符串。

    按 Ctrl+W,然后键入单词backup

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    Search: backup| # cursor line

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    只要你按下回车键,光标就会移动到单词 backup

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration |backup # cursor line

    4\. Life-cycle management

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justif  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

  2. 要搜索一个字符串并替换匹配的字符串,可以使用^\ (Ctrl+)。

    目的:在 nano 中搜索和替换单词。

    Ctrl+\

    首先,让我们追加第五项,“5。设备数据库管理",在我们的列表中如下:

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    5\. Device database management| # cursor line

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    使用 Ctrl+\搜索一个字符串,在本例中是一个单词: management 。我们想把这个词换成行政

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    5\. Device database management

    Search (to replace): management|                    # cursor line

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    输入替换单词 administration ,然后按键盘上的 Enter 键。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    5\. Device database management

    Replace with: administration

    ^G Get Help        ^Y First Line       ^P PrevHstory

    ^C Cancel         ^V Last Line       ^N NextHstory

    nano 会突出显示搜索词管理的第一个实例。我们想用管理替换所有匹配,所以选择 a

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle management

    5\. Device database management

    Replace this instance?

    Y Yes      A All

    N No      ^C Cancel

    所有实例都将被替换,如下所示:

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle administration

    5\. Device database administration

    [ Replaced 2 occurrences ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

  3. 您可以使用^O (Ctrl+O)然后使用 Enter 键保存更改,而无需关闭 nano 编辑器。该命令的作用类似于“保存”按钮。

    目标:使用 Ctrl+O 选项保存文件。

    Ctrl+O

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle administration

    5\. Device database administration

    File Name to Write: myfile02.txt

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

为 Python 编码定制 nano

当使用 nano 在 Python 中编码时,您会注意到一些缺失的特性,例如避免按空格键四次的四空格制表符和快速告知当前工作位置的行号选项。要定制这些设置,您必须更改/etc/nanorc文件中的几个设置。

  1. 要在 nano 中将制表符从八个空格改为四个空格,请执行以下步骤:

    使用sudo nano /etc/nanorc打开一个nanorc文件。如果提示输入密码,请输入sudoer密码。

    目的:在 nano 中为 Python 编码启用四空格跳转。

    使用带有键set tabsize^W (Ctrl+W)命令搜索 nanorc 文件。

    GNU nano 2.9.8           /etc/nanorc

    ## Allow nano to be suspended.

    # set suspend

    ## Use this tab size instead of the default; it must be greater than 0.

    # |set tabsize 8

    ## Convert typed tabs to spaces.

    # set tabstospaces

    Search: set tabsize

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text  ^J Justify  ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text ^T To Spell ^_ Go To Line

    删除#(哈希)以激活此配置设置;把 8 改成 4。然后添加下一行set tabstospaces,如下所示。确保保存更新的nanorc配置文件。

    GNU nano 2.9.8           /etc/nanorc

    ## Allow nano to be suspended.

    # set suspend

    ## Use this tab size instead of the default; it must be greater than 0.

    set tabsize 4

    set tabstospaces|

    ## Convert typed tabs to spaces.

    # set tabstospaces

    [ line 172/279 (61%), col 3/16 (18%), char 5826/9448 (61%) ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    现在是时候检查更改了,重新打开myfile02.txt,并使用 Tab 键在第 3–6 行添加四个空格进行确认。每次使用 Tab 键时,您都为正在运行的 Python 代码添加了四个空格。第二行增加了四个空格,第三行增加了八个空格,第四行增加了十二个空格。

    GNU nano 2.9.8           myfile02.txt

    List of tasks to be automated this year.

    1\. IOS upgrade

    2\. Network monitoring

    3\. Configuration backup

    4\. Life-cycle administration

    |5\. Device database administration

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    如果想撤销之前的更改,可以打开/etc/nanorc文件,将#添加到两行并保存。

  2. 使用sudo nano /etc/nanorc再次打开 nanorc 文件。搜索set linenumbers并删除该行开头的#符号,保存更改。

    目的:在 nano 中启用行号。

    [pynetauto@localhost ex_nano]$ sudo nano /etc/nanorc

    [sudo] password for pynetauto: **********

    拆下set linenumbers前面的#;这将启用 nano 中的行编号。

    GNU nano 2.9.8           /etc/nanorc           Modified

    ## Remember the used search/replace strings for the next session.

    # set historylog

    ## Display line numbers to the left of the text .

    set linenumbers

    ## Enable vim-style lock-files. This is just to let a vim user know you

    ## are editing a file [s]he is trying to edit and vice versa. There are

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    在 nano 中打开myfile02.txt,检查行号是否可见。

    GNU nano 2.9.8           myfile02.txt

    1 List of tasks to be automated this year.

    2 1\. IOS upgrade

    3   2\. Network monitoring

    4     3\. Configuration backup

    5       4\. Life-cycle administration

    6         5\. Device database administration

    7

    [ Read 6 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    如果您想撤销更改,您可以打开/etc/nanorc文件并将#添加回同一行并保存。

起初,vi 和 nano 文本编辑器对 Windows 用户来说很难使用,但这是因为你不熟悉这些程序。随着你花更多的时间使用这些应用,你会变得更加舒适。所以,慢慢来,但千万不要放弃这些应用。如果您知道如何正确使用 vi 文本编辑器,那么您已经掌握了 Linux 管理的重要部分。这是我爸的笑话,但是说的太对了:“学习 Linux 管理的前半部分就是学习如何使用 vi。”当然,nano 文本编辑器支持更多的功能。如果你想了解更多关于其他命令的信息,请参考这个链接: https://www.cheatography.com/pepe/cheat-sheets/nano/

许多读者可能不喜欢 Linux 章节,因为这涉及到用户远离 GUI,在终端控制台上呆上几个小时,但是这是一个非常重要的过程,需要在 Linux 中适应,以后在 Linux 上用 Python 编写代码时也是如此。

Linux 基本管理

既然您已经熟悉了 vi 和 nano 文本编辑器,那么让我们学习一些基本的 Linux 管理来帮助您入门。

更改主机名

在第 5 和 6 章节中,你安装了带有桌面选项的 Ubuntu 20 和 CentOS 8.1 服务器,但是 CentOS 8.1 服务器上的服务器名称(hostname)被保留为localhost。相比之下,在 Ubuntu Server 20 上,服务器名称(hostname)是在安装操作系统期间配置的。在本节中,让我们将 CentOS 服务器的主机名更改为centos8s1,这赋予了服务器更多的含义。虽然桌面可用,但我们将通过终端控制台更新主机名。以下主机名更改过程适用于 Red Hat (CentOS)和 Debian (Ubuntu) Linux 服务器:

  1. 首先,让我们学习如何检查主机名。有几种方法可以检查当前分配给服务器的主机名,这里是一些 Linux 命令。如果您检查的不仅仅是主机名本身,那么hostnamectl命令会提供最有用的信息。此外,包含该名称的文件位于/etc/hostname文件下。所有这些命令都是 Linux 命令,所以它们区分大小写。

    目标:学习如何在 Linux 上使用命令行更改主机名。

    [pynetauto@localhost ~]$ hostname

    localhost

    [pynetauto@localhost ~]$ echo "$HOSTNAME"

    localhost

    [pynetauto@localhost ~]$ printf "%s\n" $HOSTNAME

    localhost

    [pynetauto@localhost ~]$ hostnamectl

    Static hostname: localhost

    Icon name: computer-vm

    Chassis: vm

    Machine ID: e53c131bb54c4fb1a835f3aa435024e2

    Boot ID: 9acca137c1f04ca0ae0db3b6b28db63e

    Virtualization: vmware

    Operating System: CentOS Linux 8 (Core)

    CPE OS Name: cpe:/o:centos:centos:8

    Kernel: Linux 4.18.0-193.14.2.el8_2.x86_64

    Architecture: x86-64

    [pynetauto@localhost ~]$ cat /etc/hostname

    localhost

  2. 使用sudo hostnamectl set-hostname [new_name]更新服务器主机名。

    目标:

    [pynetauto@localhost ~]$ sudo hostnamectl set-hostname centos8s1

    [sudo] password for pynetauto:

    [pynetauto@localhost ~]$

    如果您使用诸如 nano 之类的文本编辑器,您可以打开/etc/hosts文件,并使用 Ctrl+\方法将当前主机名(localhost)更新为新的服务器名称。在本例中,新的主机名是centos8s1

    GNU nano 2.9.8           /etc/hosts

    1 127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4

    2 ::1     localhost localhost.localdomain localhost6 localhost6.localdomain6

    [ Read 2 lines ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    使用 nano 的 Ctrl+\将所有localhost实例更改为centos8s1

    GNU nano 2.9.8           /etc/hosts

    1 127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4

    2 ::1     localhost localhost.localdomain localhost6 localhost6.localdomain6

    Search (to replace) : localhost

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit   ^R Read File ^\ Replace  ^U Uncut Text  ^T To Spell   ^_ Go To Line

    GNU nano 2.9.8           /etc/hosts

    1 127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4

    2 ::1     localhost localhost.localdomain localhost6 localhost6.localdomain6

    Replace with: centos8s1

    ^G Get Help        ^Y First Line       ^P PrevHstory

    ^C Cancel         ^V Last Line       ^N NextHstory

    GNU nano 2.9.8           /etc/hosts

    1 127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4

    2 ::1     localhost localhost.localdomain localhost6 localhost6.localdomain6

    Replace this instance? A

    Y Yes      A All

    N No      ^C Cancel

    修改主机文件后,它应该类似于以下内容:

    GNU nano 2.9.8        /etc/hosts                Modified

    1 127.0.0.1  centos8s1 centos8s1.localdomain centos8s14 centos8s14.localdomain4

    2 ::1     centos8s1 centos8s1.localdomain centos8s16 centos8s16.localdomain6

    [ Replaced 8 occurences ]

    ^G Get Help ^O Write Out ^W Where Is ^K Cut Text   ^J Justify   ^C Cur Pos

    ^X Exit     ^R Read File  ^\ Replace   ^U Uncut Text^T To Spell ^_ Go To Line

    现在使用sudo reboot命令重启服务器,让新的主机名生效。

    [pynetauto@localhost ~]$ sudo reboot

    [sudo] password for pynetauto: **********

    当您的 CentOS 服务器重新启动时,使用 PuTTY 通过 SSH 进入服务器,您应该会看到主机名更改为centos8s1.

    login as: pynetauto

    pynetauto@192.168.183.130's password: **********

    Activate the web console with: systemctl enable --now cockpit.socket

    Last login: Mon Jan 4 11:23:12 2021 from 192.168.183.1

    [pynetauto@centos8s1 ~]$

  3. 请注意,Ubuntu 的主机名已经在安装过程中设置好了,您不必在这里执行任何其他操作。

    pynetauto@ubuntu20s1:~$ hostname

    ubuntu20s1

    pynetauto@ubuntu20s1:~$ echo "$HOSTNAME"

    ubuntu20s1

    pynetauto@ubuntu20s1:~$ printf "%s\n" $HOSTNAME

    ubuntu20s1

    pynetauto@ubuntu20s1:~$ hostnamectl

    Static hostname: ubuntu20s1

    Icon name: computer-vm

    Chassis: vm

    Machine ID: ea202235f9834d979436db10d89b1347

    Boot ID: 6a4035617bf348cba128be8e9d29d6a9

    Virtualization: vmware

    Operating System: Ubuntu 20.04.1 LTS

    Kernel: Linux 5.4.0-47-generic

    Architecture: x86-64

    pynetauto@ubuntu20s1:~$ cat /etc/ hostname

    ubuntu20s1

Linux 基本文件和目录命令

我们将首先学习管理 Linux 操作系统的基本文件和目录的必要命令。深入理解 Linux 命令通常需要很多时间。这本书不是为一般的 Linux 管理而写的,所以本章的目的是帮助你建立 Linux 管理的基础,这样你就可以在 Linux 系统上轻松地执行基本的任务。这里只介绍最基本的命令。在开始练习之前,请花时间查看表 7-5 中的每个命令。您不必马上记住所有的命令,但是可以试着熟悉一些命令语法。

表 7-5。

Linux 文件和目录基本命令

|

命令

|

描述和示例

|
| — | — |
| pwd | 当前工作目录$pwd |
| ls | 列表段:列出当前工作目录中的文件和目录$ ls |
| ls [directory] | $ ls /home/pynetauto/Documents |
| ls –a | 列出所有文件,包括隐藏的目录和文件$ ls -a .bashrc |
| dir | 目录$dir |
| mkdir | 制作目录$ mkdir myapps |
| cd | 更改目录$ cd myapps``$ cd /usr/local |
| cd .. | 将当前目录更改为父目录。/myapps$ cd .. |
| cd ~ | 从任何地方移动到用户的主目录。$ cd /usr/sbin``:/usr/sbin$ cd ~``$ pwd``/home/pynetauto |
| cd - | 切换回之前工作的目录。$ cd /usr/local``:/usr/local$ cd -``/home/pynetauto |
| rm OR rm –r | 删除文件。/myapps$ rm router_app.py |
| rmdir | 删除目录$ rmdir myapps |
| mv | 重命名文件名。$ mv file01.py myfile01.py |
| mv file directory | 将文件移动到另一个目录。$ mv file01.py ./Documents |
| mv directory_A directory_B | 将一个目录重命名为另一个目录。$ mv myapps myscripts |
| touch filename | 创建文件。$ touch myfile04.txt``$ touch myfile05.txt myfile06.txt |
| cp | 将文件复制到另一个目录,或者用另一个文件名复制并粘贴。$ cp myfile01.py /home/pynetauto/Documents |
| cp –a directory_A directory_B | 将一个目录复制到另一个目录。$ cp -a Documents Mydocs |
| find | 找个文件。$ find /home/pynetauto -name "myfile*" |
| grep | 从文件中搜索字符串。$ grep pynetauto /etc/passwd``$ grep 'Python' /home/pynetauto/myfile10.py |

Linux 文件和目录练习

现在让我们通过一些练习来学习 Linux 基本的文件和目录管理。

到目前为止,之前的练习都是在 CentOS 服务器上完成的。在下面的练习中,将使用 Ubuntu Server 20 LTS 服务器。这次请以 root 用户身份登录到您的 Ubuntu 虚拟机并完成练习。如果你是一个经验丰富的 Linux 管理员,你可以跳到下一章,开始在 CentOS 8.1 上安装 IP 网络应用。对于任何以粗体突出显示的命令,您必须在 Linux 控制台终端中键入它们。

login as: root
root@192.168.183.132's password: **********
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-47-generic x86_64)

[omitted for brevity]

Last login: Sun Jun 7 08:37:49 2020 from 192.168.183.1
root@ubuntu20s1:~#

练习 7-1
  1. 使用pwd命令检查当前工作目录。正如您在上一节中了解到的,pwd代表当前工作目录。可以把它看作是您在 Linux 系统中导航的指南针。

    root@ubuntu20s1:~# pwd

    /root

  2. ls是一个特定于 Unix/Linux 的命令,用于查看文件和目录。稍后您将详细了解ls命令选项。用mkdir命令创建一个目录,并用ls列出新目录。

    root@ubuntu20s1:~# mkdir directory1

    root@ubuntu20s1:~# ls

    Desktop   Documents Music   Pictures snap    Videos

    directory1 Downloads myscript Public  Templates

  3. 使用ls directory_name命令查看目录中的文件和子目录。继续上一个练习,使用touch命令在directory1下创建一个文件,然后使用ls命令查看在directory1下新创建的文件。

    root@ubuntu20s1:~# touch directory1/myfile01.txt

    root@ubuntu20s1:~# ls directory1/

    myfile01.txt

  4. ls –d命令指示ls简单地列出目录条目而不是内容。您可以使用ls –l命令来查看文件和目录的详细信息。l代表长列表。现在比较三个输出:lsls -dls –l

    root@ubuntu20s1:~# ls directory1

    myfile01.txt

    root@ubuntu20s1:~# ls -d directory1

    directory1

    root@ubuntu20s1:~# ls -l directory1

    total 0

    -rw-r--r-- 1 root root 0 Jan 4 01:39 myfile01.txt

  5. 使用ls –a命令一起显示隐藏的文件和文件夹。a代表所有,甚至显示隐藏的目录和文件。

    root@ubuntu20s1:~# ls -a

    .       .cache   Documents Music   Public Templates

    ..       .config   Downloads myscript .rpmdb Videos

    .bash_history Desktop   .gnupg   Pictures snap

    .bashrc    directory1 .local   .profile .ssh

  6. 您已经使用这个命令几次了;您可以使用mkdir命令创建一个新目录。目录类似于 Windows 操作系统中的文件夹;它可以包含子目录和文件。再做一个目录,得到更多的练习。

    root@ubuntu20s1:~# mkdir directory2

    oot@ubuntu20s1:~# ls -d directory*

    directory1 directory2

  7. cp –a命令允许您复制整个目录,包括原始目录中的文件和子目录。在本练习中,您将复制directory1来创建另一个包含相同myfile01.txt的目录。

    root@ubuntu20s1:~# cp -a directory1 directory3

    root@ubuntu20s1:~# ls -d directory*

    directory1 directory2 directory3

    root@ubuntu20s1:~# ls directory*

    directory1:

    myfile01.txt

    directory2:

    directory3:

    myfile01.txt

  8. rmdir将允许您删除一个空目录;该命令将删除整个目录。directory2是空的,所以使用rmdir命令删除它。

    root@ubuntu20s1:~# ls directory2/

    root@ubuntu20s1:~# rmdir directory2

    root@ubuntu20s1:~# ls -d directory*

    directory1 directory3

  9. 如果要删除包含其他文件和目录的目录,可以使用rm –rf directory_name。应谨慎使用rm –rf命令,因为该选项不会提示用户确认并立即删除项目。

    root@ubuntu20s1:~# ls directory3

    myfile01.txt

    root@ubuntu20s1:~# rm directory3

    rm: cannot remove 'directory3': Is a directory

    root@ubuntu20s1:~# rm -rf directory3

    root@ubuntu20s1:~# ls -d directory*

    directory1

  10. mv命令可用于移动或重命名文件和目录。您也可以使用此命令将文件或目录移动到另一个目录;让我们通过下面的练习来了解这一点:

`# Renaming a directory`

`root@ubuntu20s1:~# ls -d directory*`

`directory1`

`root@ubuntu20s1:~# mv directory1 directory5`

`root@ubuntu20s1:~# ls -d directory*`

`directory5`

`# Moving a directory to another directory`

`root@ubuntu20s1:~# mkdir directory3`

`root@ubuntu20s1:~# ls -d directory*`

`directory3 directory5`

`root@ubuntu20s1:~# mv directory3 directory5`

`root@ubuntu20s1:~# ls -d directory*`

`directory5`

`root@ubuntu20s1:~# ls directory5`

`directory3 myfile01.txt`

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传Linux 中有没有更好的一目了然的目录和文件的方法?

是的,在 Linux 中有一个方便的目录工具叫做tree。安装tree后,在当前工作目录下输入tree命令,以树形格式显示目录和文件。使用apt install tree命令安装软件。

root@ubuntu20s1:~# apt-get install tree

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following NEW packages will be installed:

tree

0 upgraded, 1 newly installed, 0 to remove and 125 not upgraded.

[...omitted for brevity]

Preparing to unpack .../tree_1.8.0-1_amd64.deb ...

Unpacking tree (1.8.0-1) ...

Setting up tree (1.8.0-1) ...

Processing triggers for man-db (2.9.1-1) ...

root@ubuntu20s1:~# tree

.

■t0]

■t0]

│``directory3

│ └── myfile01.txt

■t0]

■t0]

■t0]

■t0]

■t0]

■t0]

│``docker

│ │``423

│ │``common

│ │ └── current -> 423

│ └── lxd

│``14804

│``15223

│``common

│  └── current -> 15223

■t0]

└── Videos

Note

如果你不能在 Ubuntu 上安装tree,你可能需要启用 universe 库。在安装tree之前,在你的 Ubuntu 上运行以下命令:

root@ubuntu20s1:~#``sudo add-apt-repository "deb``http://archive.ubuntu.com/ubuntu

root@ubuntu20s1:~# apt update

root@ubuntu20s1:~# apt-get install tree

练习 7-2
  1. 使用ls -d $PWD/*命令显示工作目录的路径。

    root@ubuntu20s1:~# ls -d $PWD/*

    /root/Desktop   /root/Downloads /root/Pictures /root/Templates

    /root/directory5 /root/Music   /root/Public  /root/Videos

    /root/Documents  /root/myscript  /root/snap

  2. cdcd ..cd ~改变目录命令可以用来移动用户的工作目录位置。进行一些练习,你会在处理文件和目录时节省很多时间。让我们看一些例子,并贯彻到底。

    让我们使用mkdir命令创建多个目录。

    root@ubuntu20s1:~# mkdir directory1 directory2 directory4

    root@ubuntu20s1:~# ls -d directory*

    directory1 directory2 directory4 directory5

    root@ubuntu20s1:~# mv directory2 directory4

    root@ubuntu20s1:~# ls -d directory*

    directory1 directory4 directory5

    root@ubuntu20s1:~# tree directory*

    directory1

    directory4

    ε──t0″

    directory5

    ■t0]

    ε──t0″

    2 directories, 1 file

    键入cd(更改目录)并按回车键,您总是会返回到用户的主目录。移动到root/directory4/directory2并使用cd返回到 root 的工作文件夹。注意使用快捷键./来指定当前工作目录。./directory4/directory2/root/directory4/directory2的简称。

    root@ubuntu20s1:~# pwd

    /root

    root@ubuntu20s1:~# cd ./directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# pwd

    /root/directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# cd

    root@ubuntu20s1:~# pwd

    /root

  3. cd ..命令将工作目录从子目录上移一级。这次让我们向下移动到/root/directory5/directory3并使用cd ..命令向上移动到父目录。请注意,您还可以使用cd ../../来跳多级。

    root@ubuntu20s1:~# cd /root/directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# pwd

    /root/directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# cd ..

    root@ubuntu20s1:~/directory5# pwd

    /root/directory5

    root@ubuntu20s1:~/directory5# cd ..

    root@ubuntu20s1:~# pwd

    /root

    root@ubuntu20s1:~# cd ./directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# pwd

    /root/directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# cd ../../

    root@ubuntu20s1:~# pwd

    /root

  4. 如果您知道确切的目录路径,您可以通过键入cd后跟特定的目录路径,从一个工作目录跳到下一个目录。下面的练习显示了从父directory5下的directory3跳到父directory4下的directory2:

    root@ubuntu20s1:~# cd ./directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# pwd

    /root/directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# cd

    /root/directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# pwd

    /root/directory4/directory2

  5. cd ~也可用于返回用户的主目录。

    root@ubuntu20s1:~# cd /root/directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# pwd

    /root/directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# cd ~

    root@ubuntu20s1:~# pwd

    /root

  6. ./命令不同,cd ~还允许您在不依赖于当前工作目录的目录之间跳转。

    root@ubuntu20s1:~# cd /root/directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# pwd

    /root/directory4/directory2

    root@ubuntu20s1:~/directory4/directory2# cd ~/directory5/directory3

    root@ubuntu20s1:~/directory5/directory3# pwd

    /root/directory5/directory3

  7. dir(目录)命令与ls –C –b命令相同,据说 Linux 和 Windows 用户都包括了这个命令。不同的是,当你使用dir时,目录名是黑色的,但是使用ls –C –b会返回彩色的目录名。

    root@ubuntu20s1:~# dir

    Desktop   directory4 Documents Music   Public Templates

    directory1 directory5 Downloads Pictures snap  Videos

    root@ubuntu20s1:~# ls -C -b

    Desktop   directory4 Documents Music   Public Templates

    directory1 directory5 Downloads Pictures snap  Videos

  8. touch命令用于创建一个文件。如果您输入如下所示的touch file_name,将会创建一个文件。你也可以用一个touch命令创建多个文件。

    root@ubuntu20s1:~# touch myfile02.txt

    root@ubuntu20s1:~# ls myfile*

    myfile02.txt

    root@ubuntu20s1:~# touch myfile03.txt myfile04.txt

    root@ubuntu20s1:~# ls myfile*

    myfile02.txt myfile03.txt myfile04.txt

  9. cp(复制)命令允许你复制文件或目录。复制目录时不要忘记使用–r(递归)选项。

    root@ubuntu20s1:~# ls myfile*

    myfile02.txt myfile03.txt myfile04.txt

    root@ubuntu20s1:~# cp myfile03.txt myfile05.txt

    root@ubuntu20s1:~# ls myfile*

    myfile02.txt myfile03.txt myfile04.txt myfile05.txt

    root@ubuntu20s1:~# ls -d directory*

    directory1 directory4 directory5

    root@ubuntu20s1:~# cp -r directory1 directory2

    root@ubuntu20s1:~# ls -d directory*

    directory1 directory2 directory4 directory5

  10. rm(删除)可用于删除文件或删除目录。在下面的例子中,将使用–r选项删除directory4

`root@ubuntu20s1:~# ls myfile*`

`myfile02.txt myfile03.txt myfile04.txt myfile05.txt`

`root@ubuntu20s1:~# rm myfile02.txt`

`root@ubuntu20s1:~# ls myfile*`

`myfile03.txt myfile04.txt myfile05.txt`

`root@ubuntu20s1:~# rm myfile*`

`root@ubuntu20s1:~# ls myfile*`

`ls: cannot access 'myfile*': No such file or directory`

`root@ubuntu20s1:~# tree directory*`

`directory1`

`directory2`

`directory4`

ε──t0″

`directory5`

■t0]

ε──t0″

`2 directories, 1 file`

`root@ubuntu20s1:~# rm -r directory4`

`root@ubuntu20s1:~# tree directory*`

`directory1`

`directory2`

`directory5`

■t0]

ε──t0″

`1 directory, 1 file`
练习 7-3
  1. mv (move)命令允许您更改文件名或将文件和目录移动到另一个目录。让我们通过一些例子来了解这一点。

    # Rename myfile01.txt in root/directory5 to yourfile01.txt.

    root@ubuntu20s1:~# ls ./directory5/

    directory3 myfile01.txt

    root@ubuntu20s1:~# mv ./directory5/myfile01.txt ./directory5/yourfile01.txt

    root@ubuntu20s1:~# ls ./directory5/

    directory3 yourfile01.txt

    # Move yourfile01.txt to /root directory.

    root@ubuntu20s1:~# mv ./directory5/yourfile01.txt ./

    root@ubuntu20s1:~# ls ./directory5/

    directory3

    root@ubuntu20s1:~# pwd

    /root

    root@ubuntu20s1:~# ls your*

    yourfile01.txt

  2. 现在我们把directory5改名为directory4。然后把directory2套在directory3里面,再把directory1套进directory2

    root@ubuntu20s1:~# mv directory5 directory4

    root@ubuntu20s1:~# tree directory*

    directory1

    directory2

    directory4

    ε──t0″

    1 directory, 0 files

    root@ubuntu20s1:~# mv directory2 ./directory4/directory3/

    root@ubuntu20s1:~# mv directory1 ./directory4/directory3/directory2/

    root@ubuntu20s1:~# tree directory*

    directory4

    ε──t0″

    ε──t0″

    ε──t0″

    3 directories, 0 files

  3. 现在使用.(点号)方法,让我们将directory1directory2directory3移动到根用户的文件夹,与父目录directory4.在同一层

    root@ubuntu20s1:~# tree directory*

    directory4

    ε──t0″

    ε──t0″

    ε──t0″

    3 directories, 0 files

    root@ubuntu20s1:~# mv ./directory4/directory3/directory2/directory1 .

    root@ubuntu20s1:~# mv ./directory4/directory3/directory2 .

    root@ubuntu20s1:~# mv ./directory4/directory3 .

    root@ubuntu20s1:~# tree directory*

    directory1

    directory2

    directory3

    directory4

  4. 现在让我们使用rmrm –r命令来清理文件和目录以重置时钟。在本练习中,我们要删除一个文本文件和四个目录。

    root@ubuntu20s1:~# rm yourfile01.txt

    oot@ubuntu20s1:~# ls -d directory*

    directory1 directory2 directory3 directory4

    root@ubuntu20s1:~# rm -r directory*

    root@ubuntu20s1:~# ls -d directory*

    ls: cannot access 'directory*': No such file or directory

  5. 用您的名字和一个secrete密码创建mysecrete文件。使用.(点)方法创建一个隐藏目录hideme,并将secrete文件移动到.hideme目录中。要查看隐藏文件,使用带有ls命令的–a选项。

    root@ubuntu20s1:~# nano mysecrete

    root@ubuntu20s1:~# cat mysecrete

    pynetauto

    fairdinkum

    root@ubuntu20s1:~# ls my*

    mysecrete

    root@ubuntu20s1:~# mkdir .hideme

    root@ubuntu20s1:~# ls

    Desktop Documents Downloads Music Pictures Public snap Templates Videos

    root@ubuntu20s1:~# ls -a

    .       .bashrc Desktop  .gnupg  Music   Public Templates

    ..       .cache  Documents .hideme Pictures snap  Videos

    .bash_history .config Downloads .local  .profile .ssh

    root@ubuntu20s1:~# mv mysecrete .hideme

    root@ubuntu20s1:~# ls .hideme

    mysecrete

    root@ubuntu20s1:~# ls

    Desktop Documents Downloads Music Pictures Public snap Templates Videos

    root@ubuntu20s1:~# tree .hideme

    .hideme

    ε──t0″

    0 directories, 1 file

如何查看命令选项?

您可以使用--helpman命令。以下示例显示了ls --helpman ls命令:

root@ubuntu20s1:~# ls --help

root@ubuntu20s1:~# man ls

还有,快速搜索 Linux 命令备忘单这几个字,Google 会返回上百个搜索结果。这里列出了一个这样的站点供您参考:

https://cheatography.com/davechild/cheat-sheets/linux-command-line/

Linux 文件和目录练习 7-2

您刚刚完成了练习 7-1 中的一个基本 Linux 文件和目录练习。接下来,让我们学习更多的命令。用户友好的 GUI 通常是 enterprise Linux 系统中缺少的功能,管理员的许多任务都是通过命令行或控制台界面来执行的。

您的 Linux 学习成功与否取决于您使用基本的文件和目录命令处理文件和目录的能力。

回声,猫,多,少指挥演习
  1. 创建一个名为greet01的新文件,使用echo命令写一个问题,“你能用不同的语言打招呼吗?”进入greet01文件。

    root@ubuntu20s1:~# touch greet01

    root@ubuntu20s1:~# ls greet*

    greet01

    root@ubuntu20s1:~# echo "Can you say Hello in different languages?" > greet01

    root@ubuntu20s1:~# more greet01

    Can you say Hello in different languages?

  2. 创建另一个名为greet02的文件。这一次用各种语言编写Hello,并再次使用echo命令写入文件。在这个练习中,你将学习如何用十种不同的语言说“嗨”。

    root@ubuntu20s1:~# touch greet02

    root@ubuntu20s1:~# echo "Hi Bonjour Nihao Konichiwa Shalom Merhaba Ola Namaste Ciao Anyoung" > greet02

    root@ubuntu20s1:~# cat greet02

    Hi Bonjour Nihao Konichiwa Shalom Merhaba Ola Namaste Ciao Anyoung

  3. 在之前的练习中,cat命令用于显示greet02的内容。cat命令的另一个用途是将多个文件合并成一个文件。在这里,您将合并greet01greet02并创建greet03文件。

    root@ubuntu20s1:~# cat greet01 greet02 > greet03

    root@ubuntu20s1:~# ls -d greet*

    greet01 greet02 greet03

    root@ubuntu20s1:~# more greet03

    Can you say Hello in different languages?

    Hi Bonjour Nihao Konichiwa Shalom Merhaba Ola Namaste Ciao Anyoung

  4. 如果你想给同一个文件添加更多的内容,使用cat >>命令。

    root@ubuntu20s1:~# cat >> greet03

    How do you say "Love" in different languages?

    Love Amour Ai Ai Ahaba Ask Amor Amore Mohabbat Sarang

    #To exit, press Ctrl+D keys.

    root@ubuntu20s1:~# more greet03

    Can you say Hello in different languages?

    Hi Bonjour Nihao Konichiwa Shalom Merhaba Ola Namaste Anyoung

    How do you say "Love" in different languages?

    Love Amour Ai Ai Ahaba Ask Amor Amore Mohabbat Sarang

  5. 您也可以使用cat >命令创建一个新文件。

    root@ubuntu20s1:~# cat > greet04

    This is a test file created with the "cat >" command.

    You can write something meaningful or anything you like.

    #To exit, press Ctrl+D keys .

    root@ubuntu20s1:~# cat greet04

    This is a test file created with "cat >" command.

    你可以写一些有意义的东西或者任何你喜欢的东西。

  6. 您还可以使用更多命令来查看文件内容。如果文件很长,使用空格键向下滚动页面,或使用 Enter 键逐行向下滚动。如果您想在阅读过程中退出,请使用 Ctrl+C 或 Ctrl+Z 键。

    root@ubuntu20s1:~# more greet03

    Can you say Hello in different languages?

    Hi Bonjour Nihao Konichiwa Shalom Merhaba Ola Namaste Anyoung

    How do you say "Love" in different languages?

    Love Amour Ai Ai Ahaba Ask Amor Amore Mohabbat Sarang

  7. 您也可以使用less命令来查看文件的内容,但是less命令不会在终端上打印内容。若要向下滚动页面,请使用空格键;若要逐行向下滚动,请使用 Enter 键。要退出,使用 Ctrl+Z(或 Ctrl+C,然后是:q)。

    root@ubuntu20s1:~# less greet03

    Can you say Hello in different languages?

    Hi Bonjour Nihao Konichiwa Shalom Merhaba Ola Namaste Anyoung

    How do you say "Love" in different languages ?

    Love Amour Ai Ai Ahaba Ask Amor Amore Mohabbat Sarang

    greet03 (END)

哪里可以找到最好的 Linux 学习资料?

通常,生活中最好的东西都是免费的。感谢 Paul Cobbaut 在 Linuxfun 网站上分享了他的书 Linux Fundamentals ,更多的人可以享受 Linux 带来的乐趣。我强烈推荐你下载这个免费的 PDF 文件,并把它用在你的优势上。

UR:Linux-training . be/Linux fun . pdf

带选项的 ls 命令

您可能会想,钻研这些练习似乎离您想要将 Python 网络自动化带到哪里的目标太远了。但是你必须做练习,一次打下一块砖来建立一个坚实的基础。所以,这就是建立强大基础的过程。尝试从章节练习中获得尽可能多的实践,并在线和离线使用其他外部 Linux 命令学习材料。

ls枚举文件和目录。

ls –l显示文件和目录的详细信息。

ls –a列出当前工作目录下的所有文件。

ls –al显示当前工作目录中文件和目录的详细信息。

  1. 使用带有关键字search和全包或贪婪*.ls命令。以下示例列出了当前工作目录中以单词greet开头的所有文件或文件夹。

    root@ubuntu20s1:~# ls greet*

    greet01 greet02 greet03 greet04

  2. 创建一个名为greetings的新目录,运行带有–d–l(列表)选项的ls命令,比较文件和目录之间的差异。在问候目录的开头,注意到了d这封信。这表明这是一个目录。

    root@ubuntu20s1:~# mkdir greetings

    root@ubuntu20s1:~# ls -d -l greet*

    -rw-r--r-- 1 root root  42 Jun 3 11:45 greet01

    -rw-r--r-- 1 root root  62 Jun 3 11:51 greet02

    -rw-r--r-- 1 root root 204 Jun 3 12:10 greet03

    -rw-r--r-- 1 root root 106 Jun 3 12:15 greet04

    drwxr-xr-x 2 root root 4096 Jun 3 12:35 greetings

  3. –a命令列出所有文件,包括隐藏文件。隐藏文件以.(点)开头。

    root@ubuntu20s1:~# ls -a

    .       .cache   Downloads greet03  .local  Public   test01

    ..       .config  .gnupg   greet04  Music   snap    Videos

    .bash_history Desktop  greet01  greetings Pictures .ssh

    .bashrc    Documents greet02  .hideme  .profile Templates

  4. 您可以组合各种ls选项来列出您喜欢的文件和目录。其他选项有–R-o-g-i-s-t-S-r。如果你有一个小时的时间来探索这些选项,请上网花一两个小时找到每一个选项,然后混合搭配。以下是–l(列表)和–h(人类可读)命令的组合使用:

    root@ubuntu20s1:~# ls -lh greet*

    -rw-r--r-- 1 root root  42 Jun 3 11:45 greet01

    -rw-r--r-- 1 root root  62 Jun 3 11:51 greet02

    -rw-r--r-- 1 root root 204 Jun 3 12:10 greet03

    -rw-r--r-- 1 root root 106 Jun 3 12:15 greet04

    greetings :

    total 0

一次删除文件和目录
  1. 如果您想删除目录中以相同名称开头的所有文件,可以使用rm filename *.如果您想删除目录中的所有文件,可以使用*.继续上一个练习,让我们将所有以单词greet开头的文件移动到greetings目录中。

    roroot@ubuntu20s1:~# pwd

    /root

    root@ubuntu20s1:~# ls

    Desktop  Downloads greet02 greet04  Music   Public Templates Videos

    Documents greet01  greet03 greetings Pictures snap  test01

    root@ubuntu20s1:~# ls -lh greet*

    -rw-r--r-- 1 root root  42 Jun 3 11:45 greet01

    -rw-r--r-- 1 root root  62 Jun 3 11:51 greet02

    -rw-r--r-- 1 root root 204 Jun 3 12:10 greet03

    -rw-r--r-- 1 root root 106 Jun 3 12:15 greet04

    greetings:

    total 0

    root@ubuntu20s1:~# mv ./greet0* ./greetings

    root@ubuntu20s1:~# ls

    Desktop  Downloads Music   Public Templates Videos

    Documents greetings Pictures snap  test01

    root@ubuntu20s1:~# ls ./greetings

    greet01 greet02 greet03 greet04

    让我们创建另外四个名为 by01–by04 的文件。

    root@ubuntu20s1:~# cd greetings

    root@ubuntu20s1:~/greetings# touch bye01 bye02 bye03 bye04

    root@ubuntu20s1:~/greetings# ls

    bye01 bye02 bye03 bye04 greet01 greet02 greet03 greet04

    现在让我们再检查一次greetings目录中的文件,删除包含特定字符串的文件;我们的目标是以 04 结尾的文件。*是替换所有字符的通配符。

    root@ubuntu20s1:~/greetings# ls

    bye01 bye02 bye03 bye04 greet01 greet02 greet03 greet04

    root@ubuntu20s1:~/greetings# find . -name "*04"

    ./bye04

    ./greet04

    root@ubuntu20s1:~/greetings# rm *04

    root@ubuntu20s1:~/greetings# ls

    bye01 bye02 bye03 greet01 greet02 greet03

    接下来,让我们使用rm greet*句柄删除所有包含greet的文件。

    root@ubuntu20s1:~/greetings# rm greet*

    root@ubuntu20s1:~/greetings# ls

    bye01 bye02 bye03

    然后,让我们使用rm *选项清除文件夹中的所有文件。在这个命令之后,目录应该是空的。

    root@ubuntu20s1:~/greetings# rm *

    root@ubuntu20s1:~/greetings# ls

    root@ubuntu20s1:~/greetings#

  2. 如果想用同样的方法删除目录,就得用rm –r–r代表递归;如果你不使用–r选项,Linux 不允许你删除目录,但是你必须小心使用它。从同一个目录开始,让我们在它下面创建两个目录,并使用*通配符来删除包含特定字符串的目录。要删除包含hi的目录,您将使用一个双通配符,一个在前面,一个在后面。在本练习结束时,您的目录应该是空的。

    root@ubuntu20s1:~/greetings# mkdir sayhi01 sayhi02 saybye01 saybye02

    root@ubuntu20s1:~/greetings# ls

    saybye01 saybye02 sayhi01 sayhi02

    root@ubuntu20s1:~/greetings# rm *hi*

    rm: cannot remove 'sayhi01': Is a directory

    rm: cannot remove 'sayhi02': Is a directory

    root@ubuntu20s1:~/greetings# rm -r *hi*

    root@ubuntu20s1:~/greetings# ls

    saybye01 saybye02

    root@ubuntu20s1:~/greetings# rm -r saybye*

    root@ubuntu20s1:~/greetings# ls

    root@ubuntu20s1:~/greetings#

创建一个 Python 应用,使您的文件可执行,添加一个 Shebang,然后运行该应用

您可以使用chmod命令更改文件的权限。当更改 Python 脚本文件的属性以使其可执行时,这个 Linux 命令非常方便。根用户目录中当前没有 Python 文件。让我们快速创建一个简单的 Python 脚本,并看看如何使用 Python 脚本:

  1. 要在 Linux 上创建 Python 脚本,请在文件名末尾添加一个.py文件扩展名。要创建你的 Python 脚本,按照我们在 4.4.2.1 章节中学到的echocat命令,或者简单地使用你在本章中学到的 vi 或 nano 文本编辑器。单词 Automation 后面的\n表示换行符,增加/改变行。创建这个文件并使用python3 print5times.py运行应用,以验证您的脚本运行顺利。

    root@ubuntu20s1:~/myscript# echo "x = 'Python Network Automation\n'" > print5times.py

    root@ubuntu20s1:~/myscript# more print5times.py

    x = 'Python Network Automation\n'

    root@ubuntu20s1:~/myscript# cat >> print5times.py

    print(x*5)

    #To exit, press Ctrl+D keys.

    root@ubuntu20s1:~/myscript# more print5times.py

    x = 'Python Network Automation\n'

    print(x*5)

    root@ubuntu20s1:~/myscript# python3 print5times.py

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

  2. 现在我们已经创建了一个工作的 Python 脚本(或应用),并查看了文件模式。是的,这个文件也可以被称为一个应用,因为它是一个在你每次运行时打印五次x的应用。

    运行ls –l print5times.py查看访问。您必须查看以-rw-r--r--.开始的结果,如您所见,它缺少了x,或可执行级访问。您需要修改这个文件的属性以包含x来使这个文件成为一个可执行文件,这样我们就可以在不将 Python 3 指定为应用的情况下运行应用。

    root@ubuntu20s1:~/myscript# ls -l print5times.py

    -rw-r--r-- 1 root root 43 Jun 6 10:42 print5times.py

    root@ubuntu20s1:~/myscript# ./print5times.py

    -bash: ./print5times.py: Permission denied

    使用chmod +x print5times.py使脚本可执行。文件颜色应该自动变为绿色,表明这是一个可执行文件。

    root@ubuntu20s1:~/myscript# chmod +x print5times.py

    root@ubuntu20s1:~/myscript# ls -l print5times.py

    -rwxr-xr-x 1 root root 45 Jun 6 10:46 print5times.py

    尝试在没有python3命令的情况下运行应用。但是当你运行脚本时,你会遇到如下意外的 token 错误,因为我们忘记了在顶部添加臭名昭著的 shebang ( #!/usr/bin/python3)行;shebang 线定义了解释器的位置。

    root@ubuntu20s1:~/myscript# ./print5times.py

    ./print5times.py: line 1: x: command not found

    ./print5times.py: line 2: syntax error near unexpected token x*5’`

    ./print5times.py: line 2: print(x*5)'`

  3. 让我们在脚本的开头加上#!/usr/bin/python3 (shebang)。这一次,我们将使用带有–I–e选项的sed命令。Sed 或流编辑器也是一个强大的 Linux/Unix 文本操作工具。你不必 100%熟悉这个工具,但是只要知道它是如何工作的,总有一天它会派上用场。

    root@ubuntu20s1:~/myscript# cat print5times.py

    x = "Python Network Automation\n"

    print(x*5)

    root@ubuntu20s1:~/myscript# sed -i -e '1i#!/usr/bin/python3\' print5times.py

    root@ubuntu20s1:~/myscript# cat print5times.py

    #!/usr/bin/python3

    x = "Python Network Automation\n"

    print(x*5)

    现在我们检查了 shebang 行在第一行,让我们从工作目录运行 Python 脚本。它应该打印x五次,如下所示:

    root@ubuntu20s1:~/myscript# ./print5times.py

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

  4. 如果您想在没有./?的情况下运行应用,该怎么办?您可以使用 Linux 命令PATH="$(pwd):$PATH",但是一旦您的 Linux 终端会话结束,添加的路径就会消失。

    root@ubuntu20s1:~/myscript# ls -lh print5times.py

    -rwxr-xr-x 1 root root 64 Jun 6 11:23 print5times.py

    root@ubuntu20s1:~/myscript# PATH="$(pwd):$PATH"

    root@ubuntu20s1:~/myscript# print5times.py

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

  5. 要将/root/myscript目录或当前目录永久添加到PATH变量中,可以使用下面的命令。现在,即使在您退出会话并返回之后,您应该仍然能够在没有./的情况下运行脚本。添加路径后,确保通过执行 source ~/.bashrcexec bash 命令重启 bash,以使更改生效。

    root@ubuntu20s1:~/myscript# echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc

    root@ubuntu20s1:~/myscript# exec bash #(source ~/.bashrc) restarts bash

    root@ubuntu20s1:~/myscript# print5times.py

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

    Python Network Automation

你想学习更多的 Linux 并获得认证吗?

如果你想进一步学习 Linux,你需要学习 Linux 职业学院 101 和红帽的 RHCSA/RHCE。对于那些有空闲时间和金钱的人来说,在线和线下都有很多免费和付费的培训项目。如果您对 LPI 和 RHCE 认证课程感兴趣,请参考以下链接。

Linux 职业学院 URL:

https://www.lpi.org/our-certifications/exam-101-objectives

红帽认证系统管理员(RHCSA)网址: www。红帽。com/en/services/certification/rhcsa

红帽认证工程师:

https://www.redhat.com/en/services/certification/rhce

摘要

现在,文件和目录练习就完成了。这里我们只涉及了冰山一角,但是对于您在后面的 Python 网络自动化实验中执行任务来说已经足够了。您必须定期练习 Linux 文件和目录导航,如果不是每天都练习的话,以便习惯它。这就是 Python 网络自动化的神奇之处。

在下一章中,我们将快速介绍一些基本的 Linux 命令来查找重要的 Linux 系统信息。在真实的生产环境中,您将无法幸运地选择您喜欢的 Linux 风格,或者始终拥有对服务器的 root 访问权限。您必须知道如何找到新的 Linux 系统信息,并为您的 Linux 工具、Python 和相关模块找到兼容的软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值