百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Linux日常小技巧python脚本

wptr33 2025-02-06 16:37 62 浏览

python脚本自动化部署,数据备份,监控脚本,日志分析,邮件发送,整理了一下以前用过的一些小脚本分享给大家。

1.自动化部署脚本:使用Fabric库编写一个Python脚本来自动化一系列的部署任务,例如代码同步、配置文件管理、服务启动等。以下是一个简单的示例脚本:

from fabric import Connection

# 连接目标主机
c = Connection('target_host')

# 复制本地文件到目标主机
c.put('local_file', '/remote/path')

# 执行远程命令
c.run('sudo apt-get update')

# 启动服务
c.sudo('systemctl start myservice')

2.数据备份脚本:使用paramiko库编写脚本来实现在两台服务器之间传输数据(例如MySQL数据库备份)的功能。以下是一个简单的示例脚本:

import paramiko

# 连接源主机和目标主机
ssh_source = paramiko.SSHClient()
ssh_source.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_source.connect('source_host', username='username', password='password')

ssh_target = paramiko.SSHClient()
ssh_target.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_target.connect('target_host', username='username', password='password')

# 执行备份命令并将备份文件从源主机复制到目标主机
stdin, stdout, stderr = ssh_source.exec_command('mysqldump > db_backup.sql')
sftp = ssh_source.open_sftp()
sftp.get('db_backup.sql', 'db_backup.sql')
sftp.close()

sftp = ssh_target.open_sftp()
sftp.put('db_backup.sql', 'db_backup.sql')
sftp.close()

# 关闭连接
ssh_source.close()
ssh_target.close()

3.系统监控脚本:使用psutil库编写脚本来实现服务器的实时监测,包括CPU、内存、网络和磁盘的情况。以下是一个简单的示例脚本:

import psutil

# 监测CPU利用率
cpu_percent = psutil.cpu_percent(interval=1, percpu=True)
print(f"CPU utilization: {cpu_percent}")

# 监测内存利用率
mem = psutil.virtual_memory()
print(f"Available memory: {mem.available / 1024 / 1024:.2f} MB")

# 监测网络连接
connections = psutil.net_connections(kind='tcp')
print(f"Total TCP connections: {len(connections)}")

# 监测磁盘空间
disk_usage = psutil.disk_usage('/')
print(f"Disk space usage: {disk_usage.used / disk_usage.total:.2%}")

4.日志分析脚本:使用pandas库编写脚本来解析日志文件,并将其传入到DataFrame对象中进行过滤和汇总。以下是一个简单的示例脚本:

import pandas as pd

# 读取日志文件并将其解析到DataFrame对象
df = pd.read_csv('log_file.csv', names=['date', 'time', 'request', 'status', 'bytes'])

# 过滤出响应状态为404的记录
df_404 = df[df.status == 404]

# 统计每小时的请求数量
df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'])
df_hourly = df.set_index('datetime').resample('H')['request'].count()

5.自动化文件处理脚本:使用os库和shutil库编写Python脚本来实现对文件的自动化处理,例如对某个目录下的文件进行重命名、移动、复制等操作。以下是一个简单的示例脚本:

import os
import shutil

# 列出所有文件
files = os.listdir('/path/to/directory')

# 复制文件到另一个目录
for f in files:
    if f.endswith('.txt'):
        shutil.copy(f, '/path/to/destination')

# 重命名部分文件
for f in files:
    if f.startswith('old_'):
        new_name = f.replace('old_', 'new_')
        os.rename(f, new_name)

# 删除所有空文件夹
for root, dirs, files in os.walk('/path/to/directory'):
    for d in dirs:
        try:
            os.rmdir(os.path.join(root, d))
        except OSError:
            pass

6.自动化邮件发送脚本:使用smtplib库编写Python脚本来实现对邮件的发送和接收,例如将日志文件或报表作为附件发送给团队成员。以下是一个简单的示例脚本:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

# 邮件配置
sender = '邮箱地址'
recipients = ['邮箱地址', '邮箱地址']
subject = 'Test email'
body = 'This is a test email.'

# 构造消息对象
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ', '.join(recipients)
msg['Subject'] = subject

# 添加正文
text = MIMEText(body)
msg.attach(text)

# 添加附件
with open('report.pdf', 'rb') as f:
    attachment = MIMEApplication(f.read(), _subtype='pdf')
    attachment.add_header('Content-Disposition', 'attachment',
                          filename='report.pdf')
    msg.attach(attachment)

# 发送邮件
smtp_server = smtplib.SMTP('邮箱地址')
smtp_server.starttls()
smtp_server.login(sender, 'password')
smtp_server.sendmail(sender, recipients, msg.as_string())
smtp_server.quit()

7.网络扫描脚本:使用nmap库编写Python脚本来实现对一组IP地址的扫描,找出开放了哪些端口以及对应的服务。以下是一个简单的示例脚本:

import nmap

# 创建扫描器对象
nm = nmap.PortScanner()

# 扫描目标IP地址
result = nm.scan(hosts='192.168.0.1/24', arguments='-sS -p 1-1024')

# 输出扫描结果
for host in nm.all_hosts():
    print(f"Host: {host}")
    for port in nm[host].all_tcp():
        print(f"Port: {port}, State: {nm[host]['tcp'][int(port)]['state']}")

8.日志分析与告警脚本:使用Python编写脚本来实现监控日志文件,筛选出关键词并发送报警邮件。以下是一个简单的示例脚本:

import re
import smtplib
from email.mime.text import MIMEText

# 监控日志文件
with open('app.log', 'r') as f:
    for line in f:
        # 查找关键词
        match = re.search('Error:', line)
        if match:
            # 发送报警邮件
            sender = 'monitor@example.com'
            recipients = ['admin@example.com']
            subject = 'Error detected!'
            body = f"Error message: {line}"
            message = MIMEText(body)x
            message['From'] = sender
            message['To'] = ', '.join(recipients)
            message['Subject'] = subject
            smtp_server = smtplib.SMTP('smtp.example.com')
            smtp_server.sendmail(sender, recipients, message.as_string())
            smtp_server.quit()

今天先整理这些后面的持续更新中,整理不易,欢迎点赞,收藏转发,关注我每天更新运维小知识。

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...