Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)-項(xiàng)目6_第1頁
Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)-項(xiàng)目6_第2頁
Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)-項(xiàng)目6_第3頁
Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)-項(xiàng)目6_第4頁
Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)-項(xiàng)目6_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)工業(yè)和信息化精品系列教材項(xiàng)目6

遠(yuǎn)程管理和批量運(yùn)維服務(wù)器人民郵電出版社能力CAPACITY要求了解SSH遠(yuǎn)程管理功能,學(xué)會(huì)使用Paramiko庫編程實(shí)現(xiàn)SSH客戶端。熟悉Fabric庫的用法,學(xué)會(huì)使用Fabric庫編程實(shí)現(xiàn)源代碼批量部署。學(xué)會(huì)使用Fabric庫編程實(shí)現(xiàn)多服務(wù)器的系統(tǒng)集中監(jiān)控。學(xué)會(huì)使用Fabric庫編程實(shí)現(xiàn)程序批量部署。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)說明01OPTION02OPTION03OPTION了解SSH協(xié)議了解Paramiko庫及其基本用法學(xué)會(huì)使用Paramiko庫編程實(shí)現(xiàn)以密鑰認(rèn)證方式登錄服務(wù)器04OPTION學(xué)會(huì)使用Paramiko庫編程實(shí)現(xiàn)文件傳輸任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.1SSH協(xié)議SSH基于成熟的公鑰加密體系,將所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,保證數(shù)據(jù)在傳輸時(shí)不被惡意破壞、泄露和篡改。SSH使用多種加密和認(rèn)證方式,解決傳輸中數(shù)據(jù)加密和身份認(rèn)證的問題,能有效防止網(wǎng)絡(luò)嗅探和IP地址欺騙等攻擊。SSH用戶認(rèn)證方式密碼認(rèn)證密鑰認(rèn)證Linux平臺(tái)廣泛使用開源的OpenSSH程序?qū)崿F(xiàn)SSH協(xié)議。任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.2Paramiko庫簡(jiǎn)介Paramiko庫實(shí)現(xiàn)SSH協(xié)議建立遠(yuǎn)程安全連接遠(yuǎn)程命令執(zhí)行遠(yuǎn)程文件傳輸SSH代理安裝Paramiko庫pipinstallparamiko任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.2Paramiko庫簡(jiǎn)介Paramiko庫的核心類Channel:用于實(shí)現(xiàn)SSH通道,建立安全的SSH傳輸通道。SSHClient:用于實(shí)現(xiàn)SSH客戶端,以便與SSH服務(wù)器建立會(huì)話。Message:用于實(shí)現(xiàn)SSH2消息(字節(jié)流形式)。Packetizer:用于實(shí)現(xiàn)基本的SSH數(shù)據(jù)包協(xié)議。Transport:用于實(shí)現(xiàn)會(huì)話之間的流隧道(通道)。任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.3使用SSHClient類建立SSH連接SSHClient類的常用方法connect()——用于實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的連接與認(rèn)證set_missing_host_key_policy()——設(shè)置服務(wù)器公鑰未被記錄到known_hosts文件時(shí)的應(yīng)對(duì)策略

exec_command()——在成功連接到服務(wù)器之后遠(yuǎn)程執(zhí)行命令open_sftp()——用于在當(dāng)前SSH會(huì)話的基礎(chǔ)上創(chuàng)建一個(gè)SFTP會(huì)話任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.3使用SSHClient類建立SSH連接SSHClient類的用法示例importparamiko#創(chuàng)建SSH對(duì)象ssh=paramiko.SSHClient()#允許連接未在know_hosts文件中列出的主機(jī)ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#連接服務(wù)器ssh.connect(hostname='0',port=22,username='root',password='abc123')#執(zhí)行命令stdin,stdout,stderr=ssh.exec_command('ls-ltr/etc')#獲取命令執(zhí)行結(jié)果res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.3使用SSHClient類建立SSH連接SSHClient類的用法示例#再執(zhí)行另一條命令并獲取命令執(zhí)行結(jié)果stdin,stdout,stderr=ssh.exec_command('df')res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())#關(guān)閉連接ssh.close()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.4使用Transport類控制SSH連接importparamiko#創(chuàng)建Transport對(duì)象transport=paramiko.Transport(('0',22))#建立SSH連接transport.connect(username='gly',password='abc123')#創(chuàng)建SSHClient對(duì)象并將其_transport變量指定為上述Transport對(duì)象ssh=paramiko.SSHClient()ssh._transport=transport#使用SSHClient對(duì)象的方法進(jìn)行遠(yuǎn)程操作stdin,stdout,stderr=ssh.exec_command('ls-ltr/etc')print(stdout.read().decode())#可以創(chuàng)建SFTPClient對(duì)象,繼續(xù)利用Transport對(duì)象及其連接執(zhí)行文件傳輸操作#關(guān)閉Transport對(duì)象及其連接transport.close()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.1搭建多服務(wù)器實(shí)驗(yàn)環(huán)境Linux服務(wù)器配置修改服務(wù)器的主機(jī)名和IP地址主機(jī)名IP地址操作系統(tǒng)SSH服務(wù)器centossrv-a0CentOSStream8安裝并啟用centossrv-b1CentOSStream8安裝并啟用ubuntusrv-a0UbuntuServer20.04安裝并啟用任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.2基于密鑰認(rèn)證連接遠(yuǎn)程服務(wù)器配置SSH密鑰(1)在SSH服務(wù)器端啟用密鑰認(rèn)證。(2)在客戶端生成密鑰。(3)將公鑰提供給SSH服務(wù)器。(4)連接遠(yuǎn)程服務(wù)器進(jìn)行測(cè)試。任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.2基于密鑰認(rèn)證連接遠(yuǎn)程服務(wù)器編寫Python程序importparamiko#獲取私鑰private_key=paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')#創(chuàng)建SSH對(duì)象ssh=paramiko.SSHClient()#允許連接不在know_hosts文件中列出的主機(jī)ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#連接服務(wù)器,這里指定用戶名和私鑰ssh.connect(hostname='0',port=22,username='root',pkey=private_key)#執(zhí)行命令stdin,stdout,stderr=ssh.exec_command('df')#獲取命令執(zhí)行結(jié)果res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())#關(guān)閉連接ssh.close()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.3在遠(yuǎn)程服務(wù)器上執(zhí)行sudo命令#使用非root賬戶連接服務(wù)器ssh.connect('0',port=22,username='gly',password='abc123')#執(zhí)行sudo命令時(shí)加上-S選項(xiàng)stdin,stdout,stderr=ssh.exec_command('sudo-Scat/etc/shadow')#通過標(biāo)準(zhǔn)輸入提供用戶密碼,注意\n表示回車換行stdin.write('abc123\n')#刷新標(biāo)準(zhǔn)輸入的內(nèi)部緩沖區(qū),將其中內(nèi)容立即提供給標(biāo)準(zhǔn)輸入stdin.flush()res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.4實(shí)現(xiàn)交互式操作的遠(yuǎn)程偽終端importparamikoimportsysimportsocketimportselect#創(chuàng)建SSH對(duì)象并連接服務(wù)器ssh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect('0',port=22,username='root',password='abc123')#啟動(dòng)交互式Shell會(huì)話返回一個(gè)新的通道channel=ssh.invoke_shell()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.4實(shí)現(xiàn)交互式操作的遠(yuǎn)程偽終端#通過循環(huán)監(jiān)控用戶輸入和服務(wù)器的回顯數(shù)據(jù)whileTrue:

readable,writeable,error=select.select([channel,sys.stdin,],[],[],1)#如果服務(wù)器有數(shù)據(jù)返回(通常是命令執(zhí)行結(jié)果),則在終端進(jìn)行顯示

ifchannelinreadable:try:data=channel.recv(1024) #獲取服務(wù)器的回顯數(shù)據(jù)data=str(data,encoding='utf-8')#將字節(jié)轉(zhuǎn)換為字符串

iflen(data)==0:print('\r\n***EOF\r\n')breaksys.stdout.write(data) #寫入標(biāo)準(zhǔn)輸出的緩沖區(qū)

sys.stdout.flush() #刷新緩沖區(qū),將緩沖區(qū)內(nèi)容顯示出來

exceptsocket.timeout:pass#如果用戶在終端輸入內(nèi)容(通常是Shell命令),則將內(nèi)容發(fā)送到服務(wù)器

ifsys.stdininreadable:input=sys.stdin.readline()channel.sendall(input)#關(guān)閉通道和連接channel.close()ssh.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)說明01OPTION02OPTION03OPTION了解Fabric庫及其基本用法了解遠(yuǎn)程執(zhí)行sudo命令的解決方案掌握基于Fabric庫的源代碼批量部署程序編寫方法04OPTION05OPTION掌握Fabric庫的系統(tǒng)集中監(jiān)控程序編寫方法掌握Fabric庫的程序批量自動(dòng)部署程序編寫方法任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.1Fabric庫簡(jiǎn)介特點(diǎn)提供豐富的SSH交互接口。集成系統(tǒng)基礎(chǔ)操作組件以簡(jiǎn)化程序部署和系統(tǒng)管理運(yùn)維操作。用來在遠(yuǎn)程服務(wù)器上自動(dòng)化、流水化地執(zhí)行Shell命令。安裝Fabric2最新版。pipinstallfabric使用Fabric庫實(shí)現(xiàn)自動(dòng)化部署和運(yùn)維的基本步驟(1)在遠(yuǎn)程服務(wù)器測(cè)試要執(zhí)行任務(wù)的Shell命令或腳本,盡可能地采用非交互式。(2)使用Fabric庫編寫執(zhí)行自動(dòng)化任務(wù)的Python程序。(3)運(yùn)行程序進(jìn)行測(cè)試,確定是否達(dá)到目標(biāo)。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.2Connection類的基本用法使用Connection類建立連接

__init__(host,user=None,port=None,config=None,gateway=None,forward_agent=None,connect_timeout=None,connect_kwargs=None,inline_ssh_env=None)Connection類的常用方法方法功能open()打開連接run()在遠(yuǎn)程服務(wù)器上執(zhí)行命令sudo()以sudo方式在遠(yuǎn)程服務(wù)器上執(zhí)行命令put()將本地文件上傳到遠(yuǎn)程服務(wù)器get()從服務(wù)器上下載文件local()在本地系統(tǒng)上執(zhí)行Shell命令,該方法實(shí)際上是invoke.run()close()關(guān)閉連接任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.2Connection類的基本用法連接服務(wù)器并執(zhí)行命令fromfabricimportConnectionhost='0'user='root'password='abc123'#實(shí)例化Connection類以建立SSH連接c=Connection(host=host,user=user,connect_kwargs={'password':'abc123'})#在遠(yuǎn)程系統(tǒng)上運(yùn)行命令(用run()方法),并獲得返回結(jié)果result=c.run('uname-r')#顯示執(zhí)行命令返回的結(jié)果print(result.stdout.strip())#繼續(xù)執(zhí)行命令c.run('df')#切換當(dāng)前目錄連續(xù)執(zhí)行多條命令withc.cd('/home'):c.run("mkdir-ptestdir")c.run("touchtestfile")c.run("ls-l")#自動(dòng)切換回之前的目錄c.run("pwd")c.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.3為sudo命令自動(dòng)提供密碼使用invoke模塊的Responder對(duì)象提供sudo密碼frominvokeimportResponderfromfabricimportConnectionc=Connection('gly@0',connect_kwargs={'password':'abc123'})user='gly'password='abc123'sudopass=Responder(pattern=f'\[sudo\]passwordfor{user}:',response=password+'\n')#注意需要設(shè)置pty=True以啟用偽終端c.run('sudocat/etc/shadow',pty=True,watchers=[sudopass])c.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.3為sudo命令自動(dòng)提供密碼使用Config類提供sudo密碼fromfabricimportConfigfromfabricimportConnection#預(yù)先配置sudo密碼config=Config({'sudo':{'password':'abc123'}})c=Connection('gly@0',connect_kwargs={'password':'abc123'},config=config)#使用sudo方法執(zhí)行命令c.sudo(cat/etc/shadow')c.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.4批量操作遠(yuǎn)程服務(wù)器使用Group類fromfabricimportSerialGroupasGrouphosts=("root@0","gly@0")pool=Group(*hosts,connect_kwargs={"password":"abc123"})pool.run('mkdir-p/tmp/test')pool.put('fabric_basic.py','/tmp/test')pool.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.4批量操作遠(yuǎn)程服務(wù)器使用Group類(改進(jìn))fromfabricimportSerialGroupasGrouphosts=("root@0","gly@0")pool=Group(*hosts,connect_kwargs={"password":"abc123"})#定義函數(shù),參數(shù)為Connection對(duì)象defupload(c):#如要?jiǎng)?chuàng)建的目錄不存在,則創(chuàng)建該目錄

ifnotc.run('test-e/tmp/test',warn=True):c.run('mkdir-p/tmp/test')c.put('fabric_basic.py','/tmp/test')#遍歷組成員,每個(gè)連接執(zhí)行該函數(shù)forconninpool:upload(conn)任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.5傳統(tǒng)的fab命令行工具在fabfile文件中使用函數(shù)定義任務(wù)fromfabricimporttask@taskdefupload(c):ifnotc.run('test-e/tmp/test',warn=True):

c.run('mkdir/tmp/test')c.put('fabric_basic.py','/tmp/test’)執(zhí)行由upload()函數(shù)定義的任務(wù)fab-Hcnetossrv-aupload任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼部署源代碼的一般步驟(1)本地打包源文件。(2)將源文件包上傳到目標(biāo)服務(wù)器。(3)校驗(yàn)文件的一致性??杀葘?duì)本地源文件包和服務(wù)器上的源文件包的MD5值。(4)在目標(biāo)服務(wù)器上對(duì)源文件包進(jìn)行解壓縮。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼Python程序?qū)崿F(xiàn)批量部署fromfabricimportConfigimportinvoke#定義目標(biāo)服務(wù)器集合hosts=("root@0","gly@0")#配置sudo密碼config=Config(overrides={'sudo':{'password':'abc123'}})#創(chuàng)建Group對(duì)象,統(tǒng)一建立組成員服務(wù)器的SSH連接group=Group(*hosts,connect_kwargs={"password":"abc123"},config=config)任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼Python程序?qū)崿F(xiàn)批量部署#本地文件打包invoke.run("tar-czfsource_test.tar.gz*.py")#計(jì)算本地壓縮包文件的MD5值local_md5=invoke.run("md5sumsource_test.tar.gz").stdout.split('')[0]#定義上傳校驗(yàn)函數(shù)defupload_check(c):c.sudo("mkdir-p/source_test")#修改目標(biāo)目錄權(quán)限

c.sudo("chmod777/source_test")#上傳壓縮包文件

c.put("source_test.tar.gz","/source_test/")#計(jì)算已上傳的壓縮包文件的MD5值

remote_md5=c.run("md5sum/source_test/source_test.tar.gz").stdout.split('')[0]任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼Python程序?qū)崿F(xiàn)批量部署#比較本地與遠(yuǎn)程壓縮包文件的MD5值,進(jìn)行校驗(yàn)

ifremote_md5==local_md5:print(c.host+"服務(wù)器上已完成上傳")

c.run("tar-zxvf/source_test/source_test.tar.gz-C/source_test")else:print(c.host+"服務(wù)器上上傳失敗")#還原目標(biāo)目錄權(quán)限

c.sudo("chmod754/source_test")#遍歷組成員并執(zhí)行上傳校驗(yàn)函數(shù)forconningroup:upload_check(conn)group.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息Python程序fromfabricimportSerialGroupasGrouphosts=("root@0","gly@0")group=Group(*hosts,connect_kwargs={"password":"abc123"})#定義匯總服務(wù)器系統(tǒng)信息的數(shù)組data_total=[]#定義執(zhí)行Shell命令采集系統(tǒng)信息的函數(shù)defget_sysinfo(c):#定義采集服務(wù)器系統(tǒng)信息的命令字典

sys_commands={"hostname":"hostname",┈┈"disk_usage":"df/|sed-n'2p'|awk'{print$5}'"}data_sys={}#定義匯集單臺(tái)服務(wù)器系統(tǒng)信息結(jié)果的字典任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息Python程序

#遍歷字典,執(zhí)行Shell命令采集多種系統(tǒng)信息(其中CPU和內(nèi)存使用率需單獨(dú)計(jì)算)

foritem,commandinsys_commands.items():ifitem=="cpu_idle":cpu_idle=c.run(command).stdout.rstrip('\n‘)┈┈else:data_sys[item]=c.run(command).stdout.rstrip('\n')data_total.append(data_sys)#定義輸出系統(tǒng)信息報(bào)告的函數(shù)(這里輸出到控制臺(tái))defreport(label,item):print(f"\n{label:15}",end="")fordata_sysindata_total:print(f"{data_sys[item]:40}",end="")任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息Python程序#遍歷組成員,采集各服務(wù)器系統(tǒng)信息forconningroup:get_sysinfo(conn)group.close()#定義報(bào)告用的系統(tǒng)信息項(xiàng)目字典item_names={'hostname':'服務(wù)器','kernel':'Linux內(nèi)核','architecture':'體系結(jié)構(gòu)','ipadd':'IP地址','cpu_usage':'CPU使用率','memory_usage':'內(nèi)存使用率','process_number':'當(dāng)前進(jìn)程數(shù)','disk_usage':'磁盤使用率'}#輸出系統(tǒng)信息報(bào)告print("===============================服務(wù)器系統(tǒng)信息============================")foritem,labelinitem_names.items():report(label,item)任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息測(cè)試結(jié)果任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.3自動(dòng)部署LAMP平臺(tái)在Linux系統(tǒng)中部署LAMP平臺(tái)的一般步驟(1)安裝Apache服務(wù)器。(2)安裝數(shù)據(jù)庫服務(wù)器。(3)安裝PHP運(yùn)行環(huán)境。(4)安裝phpMyAdmin管理工具。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.3自動(dòng)部署LA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論