1. 在當前python項目目錄下建立work目錄,並在其中建立同名文本文檔work.txt,在txt文件中寫入 當前日期的月和日便可 2. 鏈接虛擬機,將剛纔寫好的work.txt上傳到虛擬機/home/目錄下,同時將本地的work.txt刪除。 3. 將Linux上etc目錄下的passwd,shadow,group三個文件使用tar命令進行打包,包名爲work.txt中 的內容加上文件的首字母,例如:0725p.tar.gz,0725s.tar.gz,0725g.tar.gz,將壓縮後的三個 文件下載到本地work目錄 ''' import os import paramiko import datetime import shutil class linux(): def __init__(self,ip,port,user,password,workpath,linuxpath): self.ip=ip self.port=port self.user=user self.password=password self.workpath=workpath self.linuxpath=linuxpath #1. 在當前python項目目錄下建立work目錄,並在其中建立同名文本文檔work.txt,在txt文件中寫入當前日期的月和日便可 def chuangjian(self): #判斷有沒有對應文件夾 if os.path.exists(self.workpath): #若是有,就刪除該文件 shutil.rmtree(self.workpath) print('文件已刪除') else: # 建立文件夾 os.mkdir('work') #進入文件夾 os.chdir('work') f=open('work.txt','w') #建立時間 s = str(datetime.datetime.now()) #將時間寫入文件2020-07-27 10:51:09.800656 f.write(s[5:7]+s[8:10]) #設置時間 print(s[5:7]+s[8:10]) #2. 鏈接虛擬機,將剛纔寫好的work.txt上傳到虛擬機/home/目錄下,同時將本地的work.txt刪除 def shangchuan(self): #獲取通道 ssh=paramiko.Transport(self.ip,self.port) ssh.connect(username=self.user,password=self.password) p=paramiko.SFTPClient.from_transport(ssh) #判斷有沒有該文件 if os.path.exists(self.workpath): #讀出目錄的文件 file1= os.listdir(self.workpath) if len(file1) == 0: print('目錄爲空..') else: #拼接路徑 newfile=''.join(file1) #拼接路徑 本地路徑 linux路徑 p.put(os.path.join(self.workpath,newfile),f'{self.linuxpath}/{newfile}') print('文件已上傳.....') os.remove(os.path.join(self.workpath,newfile)) if len(os.listdir(self.workpath)) == 0: print('本地文件已刪除') else: print('刪除失敗!!!') else: print("本地文件路徑錯誤。。。。。") # 3. # 將Linux上etc目錄下的passwd, shadow, group三個文件使用tar命令進行打包,包名爲work.txt中 # 的內容加上文件的首字母,例如:0725 # p.tar.gz,0725 # s.tar.gz,0725 # g.tar.gz,將壓縮後的三個 # 文件下載到本地work目錄 def xiazai(self): #操做linux死格式 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=self.ip,port=self.port,username=self.user,password=self.password) #獲取work文件中的月日信息 #讀出linux中的work.txt文件 stdin, stdout, stderr = ssh.exec_command(f'cat {self.linuxpath}/work.txt') time=stdout.read().decode('utf-8') print(time) #壓縮文件----獲取壓縮後的文件名字 #設置個集合存儲要壓縮的文件名 list1=['passwd','shadow','group'] #壓縮到home下 for i in list1: ssh.exec_command(f'tar -zcvf {self.linuxpath}/{time}{i[0]}.tar.gz /etc/{i}') #輸出home下的內容 stdin, stdout, stderr = ssh.exec_command(f'cd {self.linuxpath}/;ls') #讀出數據 allstr = stdout.read().decode('utf-8').replace('\n', '') #print(allstr)#0727g.tar.gz0727p.tar.gz0727s.tar.gzlrk1work.txt #將數據分割 tarstr = allstr[:12] + ',' + allstr[12:24] + ',' + allstr[24:36] tarlist = tarstr.split(',') print(tarlist) #下載 #循環名字 for i in tarlist:#['0727g.tar.gz', '0727p.tar.gz', '0727s.tar.gz'] #設置通道 s = paramiko.Transport(self.ip, self.port) s.connect(username=self.user, password=self.password) p = paramiko.SFTPClient.from_transport(s) if os.path.exists(self.workpath): #下載文件 p.get(self.linuxpath+'/'+i,os.path.join(self.workpath,i)) print(f'{i}壓縮包已下載') else: print('work路徑不存在,沒法下載到本地') #調用類方法 li=linux('192.168.56.1', 22, 'root', '123456', r'D:\pythoncode\work', '/home') # li.chuangjian()第一問,建立文件,寫入內容 # li.shangchuan()#第二問,上傳 li.xiazai()#第三問,壓縮文件,下載到本地