一起使用bash和python
#python #bash #systemprogramming

你好编码器!

Using Bash and Python together 在Linux系统上自动化任务是一种强大的组合。 bash 是大多数Linux发行版中的默认外壳, Python 是一种多功能的脚本语言。 Thanks for reading!


这是有关如何开始使用它们进行自动化的分步指南:

安装Python

大多数Linux分布都带有Python预装。您可以通过运行:
检查已安装的Python版本

$ python --version

如果未安装Python或您想使用特定版本,则可以使用Distraction的软件包管理器安装它。例如,在ubuntu上:

$ sudo apt-get update
$ sudo apt-get install python3

写python脚本

创建Python脚本以执行特定的任务或自动化。 Python是一种用于各种自动化需求的多功能语言,从文件操作到网络刮擦。
您可以使用Python的内置库或根据需要安装其他软件包。

这是一个 python的简单示例打印“你好,世界!”到终端:

#!/usr/bin/env python3

print("Hello, World!")

使脚本可执行

要运行 python 作为从命令行的可执行文件,您需要使它们可执行。您可以使用chmod命令来执行此操作。例如:

chmod +x myscript.py

使用bash进行脚本执行

您可以使用Bash致电并执行您的Python脚本。例如:

#!/bin/bash

python3 myscript.py

通过命令行参数

您可以将命令行参数传递给Bash的Python脚本。这些参数可用于自定义脚本的行为。
在Python中,您可以使用sys模块的sys.argv列表访问这些参数。例如:

#!/usr/bin/env python3
import sys

if len(sys.argv) > 1:
    print("Hello, " + sys.argv[1] + "!")
else:
    print("Hello, World!")

从Bash调用此脚本时,您可以提供一个名称作为参数:./myscript.py Alice将打印“ Hello,Alice!”


自动化常见任务

确定要在Linux系统上自动化的任务。这些任务的范围可以从文件操作,备份,系统维护等。

编写执行这些任务的Python脚本,并使用bash脚本使用cron之类的工具安排它们。


错误处理和记录

在Python脚本中实现错误处理和登录以优雅地捕获和处理异常。这样可以确保您可以对问题进行故障排除并有效地监视自动化过程。


安全考虑

自动执行任务时要注意安全性。避免在脚本中将敏感信息(如纯文本)存储在纯文本中。而是使用安全方法(例如环境变量或加密文件)。


测试和调试

在部署生产使用之前,请在安全环境中彻底测试您的脚本。使用Bash和Python中可用的调试工具来解决问题。


•更高级的样本

这是在Linux系统上使用Bash和Python一起使用Bash和Python的一些更高级的示例:

自动备份脚本

此脚本结合了Bash和Python,以创建一个自动备份系统。它标识文件备份,压缩它们,添加时间戳并将其存储在指定的备份目录中。

#!/bin/bash

# Define backup directory and create it if it doesn't exist
backup_dir="/path/to/backup"
mkdir -p $backup_dir

# Create a timestamp for the backup
timestamp=$(date +%Y%m%d%H%M%S)

# Define directories to back up
source_dir="/path/to/source"

# Archive and compress the source directory
tar -czf $backup_dir/backup_$timestamp.tar.gz -C $source_dir .

# Optionally, remove old backups to save space
find $backup_dir -type f -mtime +7 -exec rm {} \;

自动化系统监视脚本

此脚本使用Bash收集系统信息和Python发送通知。
它会定期检查系统指标,例如CPU使用,内存使用和磁盘空间,并发送电子邮件通知,如果任何指标超过预定义的阈值。

#!/bin/bash

# Define threshold values
max_cpu_usage=80
max_memory_usage=90
min_disk_space=10

# Get system metrics
cpu_usage=$(top -b -n 1 | awk '/%Cpu/{print $2}')
memory_usage=$(free -m | awk '/Mem/{printf("%.2f", $3/$2*100)}')
disk_space=$(df -h / | awk '/\//{print $5}' | sed 's/%//')

# Check and send notifications if thresholds are exceeded
if (( $(echo "$cpu_usage > $max_cpu_usage" | bc -l) )); then
    python3 send_notification.py "High CPU Usage Alert: $cpu_usage%"
fi

if (( $(echo "$memory_usage > $max_memory_usage" | bc -l) )); then
    python3 send_notification.py "High Memory Usage Alert: $memory_usage%"
fi

if (( $(echo "$disk_space < $min_disk_space" | bc -l) )); then
    python3 send_notification.py "Low Disk Space Alert: $disk_space%"
fi

在此脚本中,send_notification.py是一个Python脚本,它使用smtplib等库发送电子邮件或其他类型的通知。


网络刮擦和数据分析脚本

此脚本使用Python的BeautifulSoup库进行网络刮擦和数据分析。它从网站获取数据,解析并执行数据分析或可视化任务。

#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt

# Define the URL to scrape
url = "https://example.com/data"
response = requests.get(url)

# Parse HTML content
soup = BeautifulSoup(response.text, "html.parser")

# Extract and process data
data = []
for item in soup.find_all("div", class_="data-item"):
    value = item.find("span", class_="value").text
    label = item.find("span", class_="label").text
    data.append((label, float(value)))

# Create a DataFrame
df = pd.DataFrame(data, columns=["Label", "Value"])

# Plot data
plt.bar(df["Label"], df["Value"])
plt.xlabel("Labels")
plt.ylabel("Values")
plt.title("Data Visualization")
plt.xticks(rotation=45)
plt.tight_layout()

# Save or display the plot
plt.savefig("data_plot.png")

这些高级示例证明了合并 bash和python 以在Linux系统上自动化的灵活性和功能。


关键文件监视

监视关键文件以进行更改和发送电子邮件通知时,当进行编辑时可能是有价值的安全性和审计措施。这是一个bash and python脚本组合来实现这一目标:

bash脚本(file_monitor.sh

此BASH脚本将定期检查关键文件是否使用其校验和进行更改(此示例中的MD5)。如果检测到更改,它将触发Python脚本发送电子邮件通知。

#!/bin/bash

# Define the critical files to monitor
file1="/path/to/critical_file1.txt"
file2="/path/to/critical_file2.txt"

# Store the initial checksums
md5sum1=$(md5sum "$file1")
md5sum2=$(md5sum "$file2")

while true; do
    # Calculate the current checksums
    current_md5sum1=$(md5sum "$file1")
    current_md5sum2=$(md5sum "$file2")

    # Compare checksums to detect changes
    if [[ "$md5sum1" != "$current_md5sum1" ]]; then
        python3 send_notification.py "Change detected in $file1 by $(whoami)"
        md5sum1="$current_md5sum1"
    fi

    if [[ "$md5sum2" != "$current_md5sum2" ]]; then
        python3 send_notification.py "Change detected in $file2 by $(whoami)"
        md5sum2="$current_md5sum2"
    fi

    # Adjust the sleep interval (e.g., 5 minutes)
    sleep 300
done

python脚本(send_notification.py

当检测到更改时,此Python脚本将发送电子邮件通知。它使用smtplib库通过SMTP发送电子邮件。您需要配置SMTP服务器和凭据。

#!/usr/bin/env python3
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# Email configuration
sender_email = "your_email@gmail.com"
receiver_email = "recipient_email@example.com"
password = "your_email_password"
smtp_server = "smtp.gmail.com"
smtp_port = 587

# Create the email message
subject = "File Change Alert"
body = "A change was detected in one of the critical files."
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))

# Send the email
try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, msg.as_string())
    server.quit()
    print("Email sent successfully.")
except Exception as e:
    print("Email sending failed:", str(e))

注意

  1. 在bash脚本中替换关键文件的路径。
  2. 在Python脚本中配置电子邮件设置(Sender_email,Receiver_email,密码,SMTP服务器和SMTP端口)。
  3. 出于安全原因,如果您使用Gmail或类似的电子邮件服务,建议使用特定于应用程序的密码。
  4. 如果您使用Gmail发送电子邮件。

bash和python脚本的这种组合将监视指定的文件,并在检测到更改时发送电子邮件通知,包括进行编辑的用户。


In summary,通过结合 bash和python 的功率,您可以在Linux系统上自动化各种任务,从而使您的管理和工作流程更有效。

记住要根据不断发展的需求不断改进和完善您的自动化脚本。


资源