目录
阐述配置文件的格式,解析配置文件主要用到哪个模块的哪个类,简述该类的三种方法
如何安装psutil模块,简述使用psutil可以监控系统的哪些信息
在subprocess.Popen类构造函数的参数中,stdin、stdout、stderr的默认取值、含义、如何将子进程的输出传给父进程处理
在logging模块中,什么是记录器、处理器、格式化器,他们之间的关系,相关语句
使用pyftp模块一行命令快速搭建FTP服务器可以进行哪些设置,列举三个使用pyftpdlib API编程比一行命令更丰富的功能
multiprocessing模块实现进程同步的类及其主要的方法
multiprocessing模块实现进程通信的类及其主要方法
定时任务模块 (APScheduler) 远程执行命令 (Paramiko) 分布式任务队列 (Celery)
前言
该篇文章是网络运维课程总复习的结构,希望能够为进行期末复习或者对网络运维感兴趣的同学或专业人员提供一定的帮助。
-
基础运维技能
-
3种常用的字符编码,编码间的切换
-
ASCII
-
UTF-8
-
UTF-16
-
-
简述文件的操作流程,三个常用的文件操作方法
-
打开文件open( )
-
对文件进行操作(写、删、读、追加、修改)
-
write方法:向文件中写入内容
-
read方法:读取文件中的字符
-
seek方法:移动文件指针到某个位置
-
-
关闭文件close()
-
-
open函数中的mode参数表示什么,mode的四个取值
-
表示打开文件的模式,如读取、写入、追加、二进制
-
‘w’模式:只可写,不可读
-
‘r’模式:只可读,不可写
-
‘a’模式:读取和追加
-
‘b’模式:使用二进制进行读取或写入操作
-
-
-
阐述配置文件的格式,解析配置文件主要用到哪个模块的哪个类,简述该类的三种方法
-
文件格式是指用于存储应用程序或系统配置参数的文件,包含键值对,包括INI、YAML、JSON等格式
-
主要用到了Configparser模块中的configparser类
-
read():读取配置文件
-
get():获取指定的配置项的值
-
set():修改指定的配置项的值
-
-
-
-
简述json模块中解析josn常用的四个函数
-
josn.loads()
-
该函数用于将JOSN字符串解析为python对象,接受一个字符串作为输入,输出一个python数据结构
-
-
josn.load()
-
该函数用于从文件中读取json数据并解析为python对象,接受一个文件对象作为输入,将文件对象中的josn数据,输出一个python数据结构
-
-
josn.dumps()
-
该函数用于将python对象转换为josn字符串,接受一个python对象作为输入,并返回一个对应的josn字符串
-
-
josn.dump()
-
该函数用于将python对象转换为josn格式,并将其写入到文件中,它接受一个python对象和文件对象作为输入,将python对象转换为josn字符串并写入到文件中
-
-
-
如何安装psutil模块,简述使用psutil可以监控系统的哪些信息
-
安装psutil
-
pip install psutil
-
pip3 install psutil
-
easy_install psutil
-
-
可以监控的信息
-
CPU占用率
-
内存容量和占用率
-
磁盘分区和磁盘占用率
-
网络连接信息:本机IP地址、远程IP地址、连接状态等
-
系统用户信息:用户ID、用户组、用户名等
-
系统进程信息:进程ID、进程启动时间、进程状态、进程内存使用情况
-
-
-
阐述使用watchdog监控指定目录/文件变化的工作原理
-
watchdog是一个python库,用于监控文件系统上的文件变化,从而可以监听指定目录或文件的变化并发出通知,使用了操作系统的文件监控机制
-
原理
-
Step1:创建监控对象,使用(watchdog.observers.Observers)对象来创建监控对象)
-
Step2:开始监控,调用observer.start()开始监控目录或文件变化。
-
Step3:处理事件,当监控到目录或文件发生变化时,Myhander类中重载的回调函数将被调用
-
Step4:结束监控,调用observer.stop()停止并使用observer.join()等待任务完成
-
-
-
在subprocess.Popen类构造函数的参数中,stdin、stdout、stderr的默认取值、含义、如何将子进程的输出传给父进程处理
-
默认取值都是none,表示子进程的输入、输出、错误流都会继承父类的标注I/O流
-
如果要将子进程的输出传给父进程处理,可以使用Popen对象的communicate()方法,该方法将等待子进程完成并返回一个元组,其中包括子进程的stdout和stderr输出
-
-
简述日志的作用,通过日志记录事件时,通常需要记录哪些方面
-
概念
-
日志是一个记录系统或应用程序运行时发生时间的重要工具,通过记录事件,我们可以理解应用程序在运行过程中发生的情况,并快速发现和解决潜在问题
-
-
作用
-
故障排除
-
性能分析
-
安全监控
-
业务分析
-
-
需要记录的方面
-
时间戳
-
事件级别
-
事件内容
-
上下文信息
-
其他
-
-
-
在logging模块中的日志级别和排序
-
Critical>Error>Warning>info>debug>notset
-
-
在logging模块中,什么是记录器、处理器、格式化器,他们之间的关系,相关语句
-
记录器
-
将日志事件发送到日志系统的接口,提供对日志系统配置和状态的访问
-
logger = logging.getLogger(‘’)
-
-
处理器
-
决定将日志记录发送到哪个位置
-
#创建处理器 handler = logging.FileHandler(‘mylog.txt’) #添加处理器 logger.addHandler(handler)
-
-
格式化器
-
决定了记录日志事件的样式,使用setFormatter()方法来添加格式化器
-
# 创建格式化器 formatter = logging.Formatter ( ) # 添加格式化器 handler.setFormatter(formatter)
-
-
关系
-
记录器可以有多个处理器、每个处理器可以有多个格式化器、每个格式化器可以有一个格式化字符串
-
-
-
简述xmltodict如何处理XML数据
-
xmltodict是一个python库,可以将xml数据转换为python字典形式,使得xml数据可以更加方便地处理。 具体而言,xmtodict可以将xml数据转换为嵌套python字典和列表的组合,在字典中,xml元素的tag和属性被转换为字典的键和值,而xml元素中的文本内容成为字典的值,如果xml中存在子元素,他们将被转换为一个新的字典,并被赋值给其父元素的键。
-
-
使用pyftp模块一行命令快速搭建FTP服务器可以进行哪些设置,列举三个使用pyftpdlib API编程比一行命令更丰富的功能
-
python -m pyftpdlib 启动一个默认的FTP服务器,监听IP为0.0.0.0 端口号为21 -p 端口号 -P 密码 -a 用户名和密码 -w 指定ftp的工作目录
-
API更丰富的功能: ① 文件上传和下载的事件处理 ② 权限和用户管理 ③ 自定义命令和响应
-
-
简述编程实现邮件发送的步骤,并具体说明使用了哪些类或方法
-
Step1:导入相关模块 smtplib模块,使用”from smtplib import SMTP“
-
Step2:创建SMTP对象 ,使用SMTP类的构造函数创建SMTP对象 smtp = SMTP(‘ ’,port=)
-
Step3:连接SMTP服务器,使用SMTP对象的connect方法连接SMTP服务器 smtp.connect ( )
-
Step4:登录SMTP服务器,使用SMTP对象的"login()"方法登录SMTP服务器 smtp.login(' ',' ')
-
Step5:创建邮件对象。使用SMTP的email模块来创建邮件消息对象,可以使用MIMEText、MIMEImage、MIMEMultipart等类
-
Step6:发送邮件。使用SMTP对象的"sendmail()"方法发送邮件 smtp.sendmail()
-
Step7:退出SMTP服务器。使用SMTP对象的‘quit()’方法退出SMTP服务器 smtp.quit()
-
-
-
进程、线程、协程
-
multiprocessing模块实现进程同步的类及其主要的方法
-
Lock
-
acquire()
-
release()
-
-
Condition
-
acquire()
-
release()
-
wait()
-
notify
-
-
Semaphore
-
acquire()
-
release()
-
-
Event
-
set()
-
clear()
-
is_set()
-
wait()
-
-
-
multiprocessing模块实现进程通信的类及其主要方法
-
Pipe
-
Pipe()
-
send(obj)
-
recv()
-
close()
-
-
Queue
-
Queue()
-
put()
-
get()
-
empty()
-
full()
-
qsize()
-
-
Manager
-
Manager()
-
Value()
-
Array()
-
Namespace()
-
dict()
-
list()
-
-
-
threading模块实现线程同步的类及其主要方法
-
Lock
-
acquire()
-
release()
-
-
RLock
-
Condition
-
acquire()
-
release()
-
wait()
-
notify()
-
-
Semaphore
-
acquire()
-
release()
-
-
Event
-
set()
-
clear()
-
is_set()
-
wait()
-
-
-
threading模块实现多线程通信的类及其主要方法
-
Queue
-
Queue()
-
put()
-
get()
-
empty()
-
full()
-
qsize()
-
-
Condition
-
acquire()
-
release()
-
wait()
-
notify()
-
-
Event
-
set()
-
clear()
-
is_set()
-
wait()
-
-
-
多进程和多线程分别适用于什么类型的作业
-
多进程:CPU密集型,需要大量CPU计算的操作; 因为多进程能够充分利用多核CPU带来的优势,将任务拆分为多个进程并行处理,能够大大地提高程序运行的效率
-
多线程:I/O密集型,需要大量I/O操作的任务 因为I/O操作相对于计算操作而言,计算时间短、等待时间长,多线程能够在等待I/O操作的时候切换到其他线程进行操作,从而提高程序的相应速度
-
-
协程的概念
-
协程指的是一种用户态的轻量级线程,也成为微线程。相比于传统的线程,协程的创建和销毁成本更低,占用的内存资源更少、可以支持更高的并发量
-
-
进程、线程、协程的对比
-
进程
-
操作系统分配资源的基本单位,每个进程都有自己独立的地址空间、数据栈、代码段、堆栈等,互相之间不能直接访问和共享数据,需要通过IPC机制传递数据。进程是操作系统提供的一种强制抢占的并发方式,进程的调度和切换由操作系统负责
-
优点: 可以充分利用多核CPU的计算能力,提高处理效率 可以实现强隔离,不同进程之间数据安全可靠
-
缺点: 进程切换过程中需要保存和恢复当前进程的所有信息,开销较大; 进程间通信开销较大
-
-
线程
-
在同一个进程中运行的执行单元,是操作系统调度的最小单位。 共享进程的内存空间和资源,可以相互访问和修改共享数据。 切换不需要切换地址空间,开销较小。 调度和切换由操作系统负责
-
优点: 比进程更轻量级,切换开销相对较小; 共享进程的内存空间和资源,可以方便地共享数据
-
缺点: 线程之间的并发控制较为复杂,需要使用锁、信号量等机制实现同步和互斥; 容易出现死锁、竞争等问题
-
-
协程
-
一种轻量级的线程,也成为微线程。 协程的创建和销毁成本更低,占用的内存资源更少,可以支持更高的并发量。 协程的任务切换在程序内部完成,不需要操作系统的支持,因此协程的开销很小。 Python中协程一般通过生成函数实现
-
优点: 创建和销毁成本低,占用的内存资源少: 没有线程的上下文切换开销,比线程更高效; 协程可以避免线程之间的共享状态问题
-
缺点: 不能利用多核CPU,只能实现单线程的并发
-
-
-
协程的应用场景
-
适用于需要高并发、高性能、高流量的网络编程场景,特别是I/O密集型程序
-
高并发爬虫
-
异步网络编程
-
高并发Web服务器
-
实时消息处理
-
-
-
-
自动化运维工具 ansible
-
ansible实现主机管理的安装要求
-
安装ansible
-
yum install -y release yum install -y ansible
-
-
配置ssh免密
-
ssh-keygen ssh-copy-id user@hosts ssh user@hosts
-
-
配置主机清单
-
vim inventory [组] 用户名
-
-
-
定义主机清单
-
vim inventory [组] 用户名
-
-
ansible免密登录
-
ssh-keygen ssh-copy-id user@hosts ssh user@hosts
-
-
ansible ad-hoc模式的常用命令
-
ping模块
-
shell模块
-
command模块
-
apt模块
-
yum模块
-
copy模块
-
fetch模块
-
-
YMAL文件格式
-
注释
-
YAML文件可以包含注释行,以"#"字符开头,可以对文件或特定部分进行说明。
-
# 这是一个示例 YAML 文件
-
-
键值对
-
YAML文件使用"键: 值"的格式表示键值对,冒号后面可以有一个或多个空格。
-
name: John Doe age: 30
-
-
列表
-
使用"-"符号开头表示一个列表项。列表项可以包含键值对或简单的值
-
fruits: - apple - orange - banana
-
-
嵌套结构
-
YAML文件可以使用缩进来表示嵌套结构。缩进使用空格,而不是制表符。
-
person: name: John Doe age: 30 address: street: 123 Main St city: New York
-
-
多行文本
-
多行文本: YAML文件支持多行文本,可以使用管道符号(|)或折叠符号(>)表示。
-
description: | This is a multi-line description.
-
-
-
编写简单的playbook
-
复制文件
-
创建用户
-
使用循环创建多个用户
-
执行playbook
-
ansible-playbook -i 主机 xxx.yml
-
-
-
-
定时任务模块 (APScheduler) 远程执行命令 (Paramiko) 分布式任务队列 (Celery)
-
APScheduler
-
概念
-
是一款Python的任务调度框架,可以在指定的事件或间隔内执行任务
-
-
功能
-
定时任务调度
-
循环任务调度
-
异步任务调度
-
分布式任务调度
-
多种任务执行方式
-
-
-
Paramiko
-
概念
-
是Python编写的SSH2协议的实现库,能够实现SSH客户端和服务器的连接、SFTP传输等功能
-
-
功能
-
SSH客户端和服务器的连接
-
SFTP传输
-
加密和解密
-
协议支持
-
可扩展性
-
-
-
Celery
-
概念
-
基于python的任务队列框架,用于实现异步处理、定时任务调度和分布式任务处理等功能,适合处理高并发、需要异步执行、定期执行或分布式执行的任务,可以极大地提升系统性能和扩展性
-
-
功能
-
异步处理
-
定时任务调度
-
分布式任务处理
-
延迟任务处理
-
多个任务队列
-
-
如何实现不同的队列执行不同的任务
-
方法
-
在Celery的配置文件中设置任务队列
-
在定义任务时指定队列
-
启动worker并指定队列
-
-
原理
-
Celery通过定义不同的任务队列实现了不同队列执行不同任务的功能。 支持使用任务队列分类不同的任务以及优先策略,任务队列与任务的关系是一对多的关系,一个任务可以在多个队列中运行
-
-
-
-