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

Linux日常小技巧python脚本

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

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

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

相关推荐

开发者必看的八大Material Design开源项目

MaterialDesign是介于拟物和扁平之间的一种设计风格,自从它发布以来,便引起了很多开发者的关注,在这里小编介绍在Android开发者当中里最受青睐的八个MaterialDesign开源项...

另类插这么可爱,一定是…(另类t恤)

IT之家(www.ithome.com):另类插图:这么可爱,一定是…OSXMavericks和Yosemite打破了苹果对Mac操作系统传统的命名方式,使用加州的某些标志性景点来替换猫...

Android常用ADB命令(安卓adb工具是什么)

杀死应用①根据包名获取APP的PIDadbshellps|grep应用包名②执行kill命令...

微软Mac版PowerPoint测试Reading Order Pane功能

IT之家5月20日消息,微软公司昨日(5月19日)发布博文,邀请Microsoft365Insiders成员,测试macOS新版PowerPoint演示文稿应用,重点引入...

Visual Studio跨平台开发实战(4):Xamarin Android控制项介绍

前言不同于iOS,Xamarin在VisualStudio中针对Android,可以直接设计使用者界面.在本篇教学文章中,笔者会针对Android的专案目录结构以及基本控制项进行介绍,包...

用云存储30分钟快速搭建APP,你信吗?

背景不管你承认与否,移动互联的时代已经到来,这是一个移动互联的时代,手机已经是当今世界上引领潮流的趋势,大型的全球化企业和中小企业都把APP程序开发纳入到他们的企业发展策略当中。但随着手机APP上传的...

谷歌P图神器来了!不用学不用教,输入一句话,分分钟给结果

Pine发自凹非寺量子位|公众号QbitAI当你拍照片时,“模特不好好配合”怎么办?...

iOS文本编辑控件UITextField和UITextVie

记录一个菜鸟的IOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!细心的朋友可能已经注意到了,IOS学习之旅系列教程在本篇公众号的文章中,封面已经换成美女图片了,...

Android入门图文教程集锦(android 入门教程)

Android入门视频教程集锦AndroidStudio错误gradientandroid:endXattributenotfound...

如何使用Android自定义复合视图(如何使用android自定义复合视图)

在最近的一个客户应用中,我遇到了一个需求,根据选定的值来生成指定数量的编辑框字段,这样用户可以输入人物信息。最初我的想法是把这些逻辑放到Fragment中,只是根据选中值的变化来向线性布局容器中增加编...

原生安卓开发app的框架frida常用关键代码定位

前言有时候可能会对APP进行字符串加密等操作,这样的话你的变量名等一些都被混淆了,看代码就可能无从下手...

教程10 | 三分钟搞定一个智能输入法程序

一案例描述1、考核知识点网格布局线性布局样式和主题Toast2、练习目标掌握网格布局的使用掌握Toast的使用掌握线性布局的使用...

(Android 8.1) 功能与新特性(android的功能)

和你一起终身学习,这里是程序员AndroidAndroid8.1(API级别27)为用户和开发人员引入了各种新特性和功能。本文档重点介绍了开发人员的新功能。通过本章阅读,您将获取到以下内容:Andr...

怎样设置EditText内部文字被锁定不可删除和修改

在做项目的时候,我曾经遇到过这样的要求,就是跟百度贴吧客户端上的一样,在回复帖子的时候,在EditText中显示回复人的名字,而且这个名字不可以修改和删除,说白了就是不可操作,只能在后面输入内容。在E...

如何阻止 Android 活动启动时 EditText 获得焦点

技术背景在Android开发中,当活动启动时,EditText有时会自动获得焦点并弹出虚拟键盘,这可能不是用户期望的行为。为了提升用户体验,我们需要阻止...