linux基础4
今日内容概要
- 文件相关信息
- 文件索引信息
- 链接信息
- 系统时间
- 机器克隆
- 定时任务
- paramiko模块
- 公钥私钥
- paramiko其他操作
- 代码封装
- 面试题回忆
今日内容详细
文件相关信息
[root@jason /tmp]
du 显示⽬录中的数据真实占⽤磁盘空间⼤⼩
du -sh /etc/
-s 将⽬录下⾯的数据信息⼤⼩进⾏统计
-h 以⼈类可读⽅式显示
⽂件索引属性信息
01. 确认磁盘空间是否不够⽤了
df -h
02. 确认⽐较⼤的⽂件数据信息
du -sh /usr/*
03. 没有⽤的⽂件(检查⼤⼩会不会有变化)
⽂件⼤⼩产⽣变化的⽂件如何处理:备份 清空⽂件中的数据>⽂件信息
⽂件⼤⼩不会产⽣变化的⽂件:备份 直接进⾏删除
04. 进⾏磁盘空间利⽤率确认
文件索引信息
inode(index node)
概念说明:书⽬录 索引指向信息 指向数据真实存储在磁盘的位置
概念说明: ⽤于真实存储数据信息
如何查看block信息:
[root@jason /tmp]
block默认⼤⼩4k 可以调整, 但建议⼀定要在格式化分区时调整
情况⼀: 存储数据量⽐较⼤的时候
正确答案: 是选择⼤的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
系统时间
1.电脑时间如何实现实时同步
电池 电容 网络请求
2.系统时间如何查看
date
date +年-⽉-⽇ ⼩时:分钟:秒
date +%y-%m-%d
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地址
'''
在vmware上虚拟机管理-克隆
克隆前需要先关闭虚拟机
'''
定时任务
'''三种实现⽅式'''
定时任务软件:cronie
rpm -qa cronie
定时任务软件:atd
定时任务只执⾏⼀次(淘汰)
定时任务软件:anacron
只适合⾮24⼩时运⾏的服务器(淘汰)
crontab命令
paramiko模块
功能:通过python代码连接服务器并执行相关操作
并且支持用户名密码连接和公钥私钥连接
pip install paramiko
基本使用(用户名密码登录)
import paramiko
ssh = paramiko.SSHClient()
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 命令错误的执行结果
"""
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 = paramiko.SSHClient()
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)
sftp.put('/tmp/location.py', '/tmp/test.py')
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()
def close(self):
self.transport.close()
def __enter__(self):
self.open()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
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')
面试题回忆
class Context:
pass
with Context() as ctx:
ctx.do_something()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构