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

Linux日常小技巧python脚本

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

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

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

相关推荐

Java常用工具类技术文档(java常用util工具类)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

建议收藏!深入理解Java虚拟机:JVM垃圾回收算法+垃圾收集器

02JVM垃圾回收算法2.1什么是垃圾回收?...

Java 开发者线上问题排查常用的 15 个 Linux 命令

作为Java开发者,线上环境的问题排查是日常工作的重要组成部分。熟练掌握Linux命令能大幅提升排查效率,快速定位进程异常、日志错误、性能瓶颈等核心问题。本文结合Java应用特点,整理1...

Java-Maven详解(maven for java)

一、什么是Maven?ApacheMaven是一个软件...

java 文件操作(I/O流)(java文件流写入文件)

一、文件操作技术演进二、核心类对比分析...

如何使用Java API操作HDFS系统?(java编程操作hdfs能完成的功能有)

1.搭建项目环境打开Eclipse选择FileàNewàMavenProject创建Maven工程,选择“Createasimpleproject”选项,点击【Next】按钮,会进入“New...

那些被"删除"却仍占用空间的文件

在服务器运维过程中,磁盘空间不足是一个常见问题。而有时候,即使清理了大量文件,系统仍然报告磁盘几乎已满,这种情况尤为令人困惑。本文将通过一个实际案例,分享如何排查和解决Linux服务器上的"幽...

SpringBoot的Web应用开发——Web缓存利器Redis的应用!

 Web缓存利器Redis的应用Redis是目前使用非常广泛的开源的内存数据库,是一个高性能的keyvalue数据库,它支持多种数据结构,常用做缓存、消息代理和配置中心。本节将简单介绍Redis的使...

如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作

...

Redis 常用命令大全(redis常用命令及详解)

Redis常用命令全解析在当今的数据处理与存储领域,Redis凭借其高性能、丰富的数据结构等特性,成为了众多开发者和企业的首选内存数据库。下面将为大家详细介绍Redis的常用命令。键(Key)...

Redis+Lua脚本防超卖是万能解?这3个致命漏洞你可能没发现!

在高并发秒杀场景中,Redis+Lua脚本常被视为防止超卖的“银弹”。然而,许多开发者因对其底层逻辑理解不足,踩中了致命漏洞却不自知。本文通过真实案例剖析三个隐藏极深的问题,并提供完整解决方案,助你避...

10w qps缓存数据库——Redis(缓存技术 redis)

一、Redis数据库介绍:Redis:非关系型缓存数据库...

Redis安装及核心数据结构(redis一般安装在哪)

Redis安装官方下载地址:http://redis.io/downloadhttp://download.redis.io/releases/...

Python Redis数据库新玩法:从零到高手掌握操作技巧

介绍Redis(RemoteDictionaryServer)是一种高性能的开源内存数据库,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并提供了丰富的操作命令。Redis具有快速、...

redis知识总结(基础篇,可复习,可学习)

最近redis差不多看完了,前面学的也忘了好多,所以正好写篇博客复习复习。此篇介绍的是redis的基础篇,希望这篇能帮到各位大佬。...