Linux day4:查看文件属性信息 inode和block 硬链接和软链接 inux系统时间 虚拟机克隆 linux定时任务 paramiko模块 公钥私钥
文件属性信息
# 查看普通⽂件⼤⼩⽅法
[root@jason /tmp]# ls -lh /etc/services
# 查看⽬录⽂件⼤⼩⽅法
du 显示⽬录中的数据真实占⽤磁盘空间⼤⼩
du -sh /etc/
-s 将⽬录下⾯的数据信息⼤⼩进⾏统计
-h 以⼈类可读⽅式显示
# 企业案例: 磁盘空间不够使⽤了删除⽐较⼤的⽂件
⽂件索引属性信息
01. 确认磁盘空间是否不够⽤了
df -h
02. 确认⽐较⼤的⽂件数据信息
du -sh /usr/*
03. 没有⽤的⽂件(检查⼤⼩会不会有变化)
⽂件⼤⼩产⽣变化的⽂件如何处理:备份 清空⽂件中的数据>⽂件信息
⽂件⼤⼩不会产⽣变化的⽂件:备份 直接进⾏删除
04. 进⾏磁盘空间利⽤率确认
du -sh /etc
:
df -h
:
文件信息详述示意图:
存储数据相关
inode
概念说明:书⽬录 索引指向信息 指向数据真实存储在磁盘的位置 如果有索引查找数据的速度就会很快(联系Mysql索引)
inode是一串数字,相当于文件在硬盘中的具体地址,相当于python中的id值(变量的内存地址):
block
硬盘在存储信息时,是有一个最小单位的。
这个最小单位就称之为block。比如你想存储的数据只有1k,但是操作系统会给你这个1k的数据分配一个4k的空间。
这4k的空间就只存了1k的数据,而这一块空间就称之为block。
磁头在硬盘上读取数据时,加载数据也是有最小单位的,一次最小读取一个block单元。
所以并不是你数据有多大,存储在硬盘上就占有多大空间,他是按照block块来划分的。
# 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
硬链接
硬链接是直接指向某一块硬盘空间。
我们所谓的删除操作,实际是删除文件与硬盘数据的对应关系,也就是把数据标记成可占用态。
硬链接就相当于开设多个,某一块硬盘空间的访问接口。
可以存在D、E、F盘都可以访问某个资源的情况,也就是硬盘中的数据有多个接口可以访问。
删除某个硬链接,不影响其他硬链接的使用。
硬链接说明:
软链接
软链接相当于快捷方式。软链接指向硬链接,硬链接指向某块硬盘空间。
当把硬链接删掉了,所有指向该硬链接的软链接都会失效。
硬链接是真正访问的接口,而软链接是在访问的接口之上再开设一个快捷方式。当真正的接口失效了,所有的快捷方式也就失效了。
软链接说明:
扩展知识:
linux系统时间
# 电脑时间如何实现实时同步
早期:断网时,电脑主板有电池、电容供电,运行系统时间相关模块。(有误差)
现在:重新联网时,发送网络请求,获取时间信息。
# 系统时间如何查看
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
chrony模块可以做多台服务器的时间同步服务
'''
虚拟机克隆
1.链接克隆与完整克隆的区别
2.克隆出来的机器一定要修改ip地址(内存也要修改,电脑可能带不动)
虚拟机克隆:
链接克隆和完整克隆
链接克隆:速度快,本体挂了,所有克隆体都会挂掉。
完整克隆:真正的复制一份本体,本体挂掉克隆机不会挂。
注意:克隆出来的虚拟机,不要再进行克隆。
克隆之后的配置
克隆机和主机的ip地址是一样的,所以要修改:
注意重启网卡。
克隆机也可以修改一下主机名,便于区分:
linux定时任务
定时任务软件
'''三种实现⽅式'''
定时任务软件:cronie
rpm -qa cronie
定时任务软件:atd
定时任务只执⾏⼀次(淘汰)
定时任务软件:anacron
只适合⾮24⼩时运⾏的服务器(淘汰)
定时任务的类型
自定义定时任务 crontab
分时日月周:
设置定时任务示例(菜鸟教程):
连接服务器的三种方式
1. xshell连接
2. git连接 (git也有终端窗口)
3. paramiko模块 (python代码连接)
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软件生成公钥和私钥
官网地址:https://git-scm.com/
使用git软件生成公钥和私钥
桌面空白区域鼠标右键即可查看是否安装成功
git bash here
"""
1.生成
ssh-keygen -t rsa 连续按三下回车即可
2.拷贝公钥到远程服务器
ssh-copy-id -i 公钥文件绝对路径 用户名@服务器ip地址
"""
右键点击:
git终端:(模拟linux终端)
查看公钥私钥文件:
具体内容:
paramiko模块使用公钥和私钥连接服务器
# 公钥和私钥(先讲公钥保存到服务器上)
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()
paramiko代码封装
# 以下代码不用死记硬背 知道原理会用即可
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__
# 请在Context类中添加代码完成该类的实现
class Context:
pass
with Context() as ctx:
ctx.do_something()
Linux day4:查看文件属性信息 inode和block 硬链接和软链接 inux系统时间 虚拟机克隆 linux定时任务 paramiko模块 公钥私钥的更多相关文章
- 透过inode来理解硬链接和软链接
什么是inode? 每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括: 对应的文件 文件字节数 文件数据块的位置 文件的inode号码 文件的硬链接数 文件的读写权限 文件的时 ...
- 实例讲解Linux系统中硬链接与软链接的创建
导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ...
- Linux ll查看文件属性详解-软硬链接详解
Linux文件属性及类型 [root@localhost ~]# ll anaconda-ks.cfg 文件类型 权限 硬连接数 文件的大小 文件的创建,修改时间 - rw-------. 1 roo ...
- linux下查看串口信息
rs232串口通信接口:当通信距离较近时(<12m),可以使用电缆线直接连接,若距离较远,需附加调制解调器. 9个脚针的定义: CDC数据载波检测,RXD接收数据,TXD发送数据,DTR数据中断 ...
- Linux下 查看CPU信息
参考: Linux和Windows下查看cpu和core个数 Linux下 查看CPU信息 1.查看完整CPU信息: $ cat /proc/cpuinfo 2.查看逻辑cpu个数: $ cat /p ...
- Linux下查看CPU信息、机器型号等硬件信息命令
Linux下查看CPU信息.机器型号等硬件信息命令 编写一个bash脚本: vim info.sh #!/bin/bash cat /etc/issue echo "____________ ...
- (转)Linux硬链接、软链接及inode详解
inode 文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读 ...
- [转帖]详解Linux系统inode原理--硬链接、软链接、innodb大小和划分等
详解Linux系统inode原理--硬链接.软链接.innodb大小和划分等 原创 波波说运维 2019-07-17 00:03:00 https://www.toutiao.com/i6713116 ...
- 认识Linux系统中的inode,硬链接和软链接
在学习和创建软链接遇到了一点问题,总结一下: 在当前文件夹下面建立了两个临时文件夹tempdir1和tempdir2,然后在tempdir2里面创建了一个hello文件,然后用指令ln -s temp ...
- [svc]linux的inode和block-软硬链接
磁盘结构 容量 磁盘结构 磁盘容量 = 一个柱面大小柱面的总数 = 磁头数量每个磁道上的扇区数一个扇区大小柱面总数 存储容量=磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数 了解-什么是 ...
随机推荐
- 从零开始学习Python
从零开始学习Python是一个令人兴奋和有趣的过程.无论你是完全没有编程经验,还是已经熟悉其他编程语言,Python都可以成为你迈向程序员之路的理想起点. 首先,在开始学习之前,请确保在计算机上安装了 ...
- PTA作业4、5、6及期中考试的总结
一.前言 本次博客是针对面向对象程序设计课程布置的PTA第4.5.6次作业以及期中考试的编程题而写的总结分析,重点分析了菜单计价系列题目.期中考试的编程题等具有一定难度和特色的问题. 二.PTA第四次 ...
- 请查收,本周刷屏的两大热点「GitHub 热点速览」
如果你逛 HackerNews 或者是推特,你一定会被 multipleWindow3dScene 这个跨窗口渲染项目的成果刷屏,毕竟国内的技术平台上也出现了不少的模仿项目.另外一个热点,便是你在白板 ...
- Kubernetes 中的服务注册与发现原理分析
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 对k8s有点了解技术人员,应该都只知道k8s是有服务注册发现的,今天就分析下这个原理,看看怎么实现的. 什么是服务注册与发 ...
- 【python】无法安装pip,报错ImportError: No module named 'pip'解决方案
命令提示符输入以下代码即可 python -m ensurepip
- 使用Druid解析SQL实现血缘关系计算
import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.ali ...
- 第一行代码 Android 第三版读后感
<第一行代码Android 第三版>是一本非常好的Android开发入门书籍.本书结合作者的丰富经验和实际案例,通过一步一步的介绍,详细地讲解了Android开发的各个方面,包括Andro ...
- Spring中Bean的加载方式~
1.方式一:基于spring.xml方式配置Bean user import lombok.Data; /** * @author : ly */ @Data public class User { ...
- Python——第四章:作用域
作用域: 变量的访问权限 全局变量 -> 全局作用域 局部变量 -> 局部作用域(比如在函数内定义的变量,只能在函数内调用) a = 10 # 全局变量 -> 全局作用域 print ...
- DVWA File Inclusion(文件包含)全等级
File Inclusion(文件包含) 目录: File Inclusion(文件包含) 前言 PHP伪协议 1.Low get webshell 本地文件包含 远程文件包含 2.Medium 3. ...