首页 > 其他分享 >1月12日内容总结——文件和文件索引、链接、系统时间、克隆、定时任务、paramiko模块、公钥私钥、paramiko代码封装

1月12日内容总结——文件和文件索引、链接、系统时间、克隆、定时任务、paramiko模块、公钥私钥、paramiko代码封装

时间:2023-01-12 15:34:18浏览次数:41  
标签:文件 12 paramiko self 公钥 ssh 链接 transport

目录

一、文件相关信息

# 查看普通⽂件⼤⼩⽅法
  [root@jason /tmp]# ls -lh /etc/services
    
# 查看⽬录⽂件⼤⼩⽅法
  du 显示⽬录中的数据真实占⽤磁盘空间⼤⼩
     du -sh /etc/
       -s 将⽬录下⾯的数据信息⼤⼩进⾏统计
       -h 以⼈类可读⽅式显示
# 企业案例: 磁盘空间不够使⽤了删除⽐较⼤的⽂件
 01. 确认磁盘空间是否不够⽤了
 	df -h
 02. 确认⽐较⼤的⽂件数据信息
 	du -sh /usr/*
 03. 没有⽤的⽂件(检查⼤⼩会不会有变化)
 	⽂件⼤⼩产⽣变化的⽂件如何处理:备份 清空⽂件中的数据>⽂件信息
    ⽂件⼤⼩不会产⽣变化的⽂件:备份 直接进⾏删除
 04. 进⾏磁盘空间利⽤率确认

二、文件索引信息

# inode(index node)
   概念说明:书⽬录 索引指向信息 指向数据真实存储在磁盘的位置
   如何查看inode信息:
     [root@jason /tmp]# ll -hi /etc/hosts

# block
  概念说明: ⽤于真实存储数据信息
  如何查看block信息: 
    [root@jason /tmp]# ls -l /etc/hosts
  block默认⼤⼩4k 可以调整, 但建议⼀定要在格式化分区时调整
# 问题: block是调整⼤⼀些10M,还是调整⼩⼀些10k
 情况⼀: 存储数据量⽐较⼤的时候
     正确答案: 是选择⼤的block更好 
       可以减少block消耗, 节省磁盘IO
 情况⼆: 存储数据量⽐较⼩的时候
     正确答案: 选择⼩的block会更好
       可以节省磁盘空间, 可以让更多数据进⾏存储

三、链接信息

硬链接:直接指向硬盘中真正的数据所在位置
    硬链接各自不影响数据的访问
软链接:相当于是windows中的快捷方式
    软链接的出处一旦删除所有软连接都会失效
 
# 硬链接
  概念说明:
    磁盘(超市--数据) 有⻔进⼊超市 cat /etc/hosts
                   多⻔进⼊超市 cat
/oldboy/hosts 
    只能对⽂件做硬链接不能对⽬录做硬链接
 作⽤说明:
  01. 可以⽤于查看数据信息
  02. 可以⽤于作为备份
  03. 当所有硬都被删除, 等价于数据将会被删除
 区别说明:
  01. 对于源⽂件关注程度
    源⽂件删除, 不会对硬链接⽂件产⽣影响
  02. 对于链接⽂件关注程度
    不会有影响, 对于源⽂件硬链接数会减少
# 软链接
  概念说明:
    创建⼀个⽂件或者⽬录的快捷⽅式
  作⽤说明:
    01. 使复杂路径操作更加⽅便
    02. 使不同软件程序版本调⽤更加⽅便
 区别说明:
    01. 对于源⽂件关注程度
      源⽂件被删除, 会影响软链接⽂件
    02. 对于链接⽂件关注程度 
      毫⽆影响
"""详细操作"""
1.硬链接
     ln /etc/hosts /oldboy/hard_link_hosts.txt
     cat /etc/hosts
     cat /oldboy/hard_link_hosts.txt
     echo oldboyinfo >> /etc/hosts
     cat /etc/hosts
     cat /oldboy/hard_link_hosts.txt
2.软连接
     ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /oldboy/soft_link_eth0

四、系统时间

# 电脑时间如何实现实时同步
	电池 电容给主板供电让计时的程序继续运行或是使用网络请求的方式
# 系统时间如何查看
   date
# 按照⾃定义需求, 显示时间信息
 date +年-⽉-⽇ ⼩时:分钟:秒
   date +%y-%m-%d # date +%F
   date +"%y-%m-%d %H:%M:%S"
# 显示过去的时间信息 显示未来的时间信息
   显示过去的时间
 	 date +%F -d "-3 day"/date +%F -d "-3day"
 	 date +%F -d "+3 day ago"
 	 date +%F -d "-3 year"
 
   显示未来的时间
 	 date +%F -d "+3 day"/date +%F -d "+3day"
 
# 设置系统时间⽅法
   date -s "2022-11-11 11:11:11"
 '''时间同步服务centos6为ntp centos7位chrony'''


服务器集群时间同步策略
	回想电影里面飞虎队行动之前对表的操作
	以服务器集群中某一台计算机作为时间参考

五、机器克隆

1.链接克隆与完整克隆的区别(一个是独立的个体,一个可以看成是依靠主体才能存在的分身)
2.克隆出来的机器一定要修改ip地址(因为是克隆的,所以很多东西,比如ip是跟主体一样的,这时候会产生冲突)

六、定时任务

'''三种实现⽅式'''
定时任务软件:cronie
 	rpm -qa cronie
定时任务软件:atd
 	定时任务只执⾏⼀次(淘汰)
定时任务软件:anacron
 	只适合⾮24⼩时运⾏的服务器(淘汰)
    
crontab命令
# 设置或查看定时任务信息的命令

七、paramiko模块

功能:通过python代码连接服务器并执行相关操作
    并且支持用户名密码连接和公钥私钥连接
    
pip install paramiko

基本使用(用户名密码登录)
import paramiko

# 用户名和密码的方式
# 创建SSH对象(固定)
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机(固定)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.0.200', port=22, username='root', password='123')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
"""
stdin 支持传额外的命令
stdout 命令正确的执行结果
stderr 命令错误的执行结果
"""
# 获取命令结果  还可以利用stdin继续传值 eg:-y确认
result = stdout.read()
print(result.decode('utf8'))
# 关闭连接
ssh.close()

八、公钥私钥

主要的目的是为了避免使用用户名密码的时候信息泄露造成安全性问题

简单的理解
	1.每台计算机都可以拥有自己的公钥和私钥
	2.你只需要将公钥交给别人 以后通过比对私钥就可以证明你的身份
    
详细的理解
	鲍勃的公钥私钥
    
如何产生公钥私钥
	mac电脑>>>:终端可以直接产生并发送给服务端
	windows电脑>>>:只支持产生不支持发送(可以利用一些第三方软件加强)
  
git软件
	桌面空白区域鼠标右键即可查看是否安装成功
	git bash here
    	"""
        1.生成
        ssh-keygen -t rsa  连续按三下回车即可
        2.拷贝公钥到远程服务器
        ssh-copy-id -i 公钥文件绝对路径  用户名@服务器ip地址
        """
	# 公钥和私钥(先讲公钥保存到服务器上)
    import paramiko

    # 读取本地私钥
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='123.206.16.61', port=22, username='root', pkey=private_key)

    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    print(result.decode('utf-8'))
    # 关闭连接
    ssh.close()

九、paramiko其他操作

import paramiko

# 用户名和密码
transport = paramiko.Transport(('123.206.16.61', 22))
transport.connect(username='root', password='123')

sftp = paramiko.SFTPClient.from_transport(transport)

# 上传文件
sftp.put("本地文件路径", '远程服务器路径')  # 注意上传文件到远程某个文件下 文件必须存在

# 下载文件
sftp.get('远程服务器文件路径', '本地文件路径')  # 将远程文件下载到本地并重新命令
transport.close()

# 公钥和私钥
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='jason', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')

# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
transport.close()

十、代码封装

# 以下代码不用死记硬背 知道原理会用即可
import paramiko

class SSHProxy(object):
    def __init__(self, hostname, port, username, password):
        self.hostname = hostname
        self.port = port
        self.username = username
        self.password = password
        self.transport = None

    def open(self):  # 给对象赋值一个上传下载文件对象连接
        self.transport = paramiko.Transport((self.hostname, self.port))
        self.transport.connect(username=self.username, password=self.password)

    def command(self, cmd):  # 正常执行命令的连接  至此对象内容就既有执行命令的连接又有上传下载链接
        ssh = paramiko.SSHClient()
        ssh._transport = self.transport

        stdin, stdout, stderr = ssh.exec_command(cmd)
        result = stdout.read()
        return result

    def upload(self, local_path, remote_path):
        sftp = paramiko.SFTPClient.from_transport(self.transport)
        sftp.put(local_path, remote_path)
        sftp.close()
		
    
    # 步骤2:下面的先别拷贝
    def close(self):
        self.transport.close()

    def __enter__(self):  # 对象执行with上下文会自动触发
        self.open()
        return self  # 这里发挥上面with语法内的as后面拿到的就是什么 

    def __exit__(self, exc_type, exc_val, exc_tb):  # with执行结束自动触发
        self.close()
        
"""
推到步骤:
1.初次封装 
	只有init、open、command、upload、close方法
	这个时候要想执行和上传下载都支持必须先执行open方法,所有操作完毕之后执行close方法
	obj = SSHProxy(...)
	obj.open()
	obj.command()
	obj.upload()
	...
	obj.close()
2.进阶升华
	每次都需要先open最后再close 这种操作跟我们之前python基础问文件操作有点类似
	文件操作最后利用with上下玩完成简便写法 但是paramiko模块产生的对象默认是不支持with语法的
	obj = SSHProxy(...)
	with obj  报错 但是报错信息里面有提示 说对象里面没有__enter__方法 也就是说with会自动触发对象__enter__方法
"""      
if __name__ == '__main__':
    with SSHProxy("127.0.0.1",22,'root','jason123') as ssh:
        # 拿到改对象后就可以无限制的在一个链接内执行命令并上传下载文件
        ssh.command('df')
        ssh.command('df')
        ssh.upload(r'D:\jason\s10\day01\4.基于paramiko操作\xx', '/data/s27/xx')

十一、面试题回忆

# 面试题 
给类添加双下enter和exit方法,然后再加个do_something函数即可(思路,缺啥补啥)
# 请在Context类中添加代码完成该类的实现
class Context:
    pass
with Context() as ctx:
    ctx.do_something()


标签:文件,12,paramiko,self,公钥,ssh,链接,transport
From: https://www.cnblogs.com/zhihuanzzh/p/17046823.html

相关文章

  • C#-文件操作的一些常用函数及压缩文件
    1.判断目录或文件是否存在(usingSystem.IO;):Directory.Exists(path);//目录是否存在File.Exists(filePath);//文件是否存在2.创建路径上所有目录及子目录:Directory.C......
  • 读取excel文件以及相关参数解释
    读取excel文件以及相关参数解释read_excel常用参数解释,包括(header、index_col、sheet_name、skipfooter、skiprows、converters等)#*header*(int,listofint,default......
  • 欧盟电动滑板车CE认证,EN17128测试标准详情
    电动滑板车是继传统滑板之后的又一新型滑板运动产品。电动滑板车节约能源,充电快速且续航能力强。整车造型美观、可以折叠,操作方便,驾驶更安全。电动滑板车起源于德国,发展于欧......
  • ORACLE ORA-12638:身份证明检索失败
    使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,......
  • Windbg 打开CPP文件 中文乱码
    Windbg打开CPP文件中文乱码Windbg在调试的时候如果源代码里面有中文会乱码本质上不是Windbg的问题而是代码源文件的编码问题,默认情况下VS生成的代码文件的编码都是ANSI......
  • 1.12模拟赛题解
    T1容易知道答案为原图的最大子二分图大小。枚举每个点在二分图的左边还是右边,计算出答案。时间复杂度\(O(2^n\timesm)\)。T2考虑递推构造方案。假设现在已经有了一组......
  • 文件相关信息、 文件索引信息 、链接信息、 系统时间 、机器克隆、 定时任务、 parami
    目录文件相关信息文件索引信息链接信息系统时间机器克隆定时任务paramiko模块公钥私钥paramiko其他操作代码封装文件相关信息#查看普通⽂件⼤⼩⽅法[root@jason/tmp]......
  • java下载csv文件并导入mysql
    下载zip文件压缩包publicvoiddownloadFile(){try{URLhttpUrl=newURL("http://localhost:8080/myFiles/a/download");Input......
  • C#-XML文件的一些常用操作
    记录一些常用的操作XML文档的方法,XML示例文档如下:<?xmlversion="1.0"encoding="utf-8"?><Animal><DogSound="WangWang"Favor="Bone"/><CatSound="MiaoMiao"......
  • nuget 打包 pre-release 版本需要注意的文件版本问题
    今天在发布EnyimMemcachedCore的一个预览版nuget包时遇到的问题,在这篇博文中记录一下。当时发布的版本是2.6.0-preview1,使用的打包脚本如下version=$1project=Enyi......