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

Linux日常小技巧python脚本

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

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()

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

相关推荐

Linux高性能服务器设计

C10K和C10M计算机领域的很多技术都是需求推动的,上世纪90年代,由于互联网的飞速发展,网络服务器无法支撑快速增长的用户规模。1999年,DanKegel提出了著名的C10问题:一台服务器上同时...

独立游戏开发者常犯的十大错误

...

学C了一头雾水该咋办?

学C了一头雾水该怎么办?最简单的方法就是你再学一遍呗。俗话说熟能生巧,铁杵也能磨成针。但是一味的为学而学,这个好像没什么卵用。为什么学了还是一头雾水,重点就在这,找出为什么会这个样子?1、概念理解不深...

C++基础语法梳理:inline 内联函数!虚函数可以是内联函数吗?

上节我们分析了C++基础语法的const,static以及this指针,那么这节内容我们来看一下inline内联函数吧!inline内联函数...

C语言实战小游戏:井字棋(三子棋)大战!文内含有源码

井字棋是黑白棋的一种。井字棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、三子旗等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时...

C++语言到底是不是C语言的超集之一

C与C++两个关系亲密的编程语言,它们本质上是两中语言,只是C++语言设计时要求尽可能的兼容C语言特性,因此C语言中99%以上的功能都可以使用C++完成。本文探讨那些存在于C语言中的特性,但是在C++...

在C++中,如何避免出现Bug?

C++中的主要问题之一是存在大量行为未定义或对程序员来说意外的构造。我们在使用静态分析器检查各种项目时经常会遇到这些问题。但正如我们所知,最佳做法是在编译阶段尽早检测错误。让我们来看看现代C++中的一...

ESL-通过事件控制FreeSWITCH

通过事件提供的最底层控制机制,允许我们有效地利用工具箱,适时选择使用其中的单个工具。FreeSWITCH是一个核心交换与混合矩阵,它周围有几十个模块提供各种功能特性。我们完全控制了所有的即时信息,这些...

物理老师教你学C++语言(中篇)

一、条件语句与实验判断...

C语言入门指南

当然!以下是关于C语言入门编程的基础介绍和入门建议,希望能帮你顺利起步:C语言入门指南...

C++选择结构,让程序自动进行决策

什么是选择结构?正常的程序都是从上至下顺序执行,这就是顺序结构...

C++特性使用建议

1.引用参数使用引用替代指针且所有不变的引用参数必须加上const。在C语言中,如果函数需要修改变量的值,参数必须为指针,如...

C++程序员学习Zig指南(中篇)

1.复合数据类型结构体与方法的对比C++类:...

研一自学C++啃得动吗?

研一自学C++啃得动吗?在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C++的资料从专业入门到高级教程」,点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!个人...

C++关键字介绍

下表列出了C++中的常用关键字,这些关键字不能作为变量名或其他标识符名称。1、autoC++11的auto用于表示变量的自动类型推断。即在声明变量的时候,根据变量初始值的类型自动为此变量选择匹配的...