Advertisement
Header Ad Space (728x90)
Press ESC to close Press / to search

Python for Linux System Administration: Automation Scripts and Tools

Python is one of the most powerful tools in a Linux system administrators toolkit. This tutorial covers essential Python concepts, libraries, and real-world scripts for automating system administration tasks.

Why Python for System Administration?

  • Readable and maintainable code syntax
  • Extensive standard library for system operations
  • Cross-platform compatibility
  • Large ecosystem of third-party modules
  • Integration with APIs and cloud services

Getting Started

# Check Python version
python3 --version

# Install pip for package management
sudo apt install python3-pip    # Debian/Ubuntu
sudo dnf install python3-pip    # RHEL/Fedora

# Install virtualenv
pip3 install virtualenv

# Create virtual environment
python3 -m venv myenv
source myenv/bin/activate

Essential Libraries for Sysadmins

# Install commonly used libraries
pip install paramiko      # SSH connections
pip install psutil        # System monitoring
pip install requests      # HTTP requests
pip install pyyaml        # YAML parsing
pip install python-dotenv # Environment variables

File and Directory Operations

import os
import shutil
from pathlib import Path

# List directory contents
for item in os.listdir("/var/log"):
    print(item)

# Using pathlib (recommended)
log_dir = Path("/var/log")
for file in log_dir.glob("*.log"):
    print(f"Log file: {file.name}, Size: {file.stat().st_size} bytes")

# Copy files
shutil.copy("/etc/passwd", "/tmp/passwd.backup")

# Move/rename files
shutil.move("/tmp/old.txt", "/tmp/new.txt")

# Create directories
os.makedirs("/tmp/mydir/subdir", exist_ok=True)

# Remove directory tree
shutil.rmtree("/tmp/mydir")

Executing Shell Commands

import subprocess

# Run simple command
result = subprocess.run(["ls", "-la"], capture_output=True, text=True)
print(result.stdout)

# Run with shell=True
result = subprocess.run("df -h | grep /dev/sd", shell=True, capture_output=True, text=True)
print(result.stdout)

# Check return code
if result.returncode == 0:
    print("Command succeeded")
else:
    print(f"Command failed: {result.stderr}")

System Monitoring with psutil

import psutil

# CPU information
print(f"CPU Usage: {psutil.cpu_percent(interval=1)}%")
print(f"CPU Cores: {psutil.cpu_count()}")

# Memory information
memory = psutil.virtual_memory()
print(f"Total Memory: {memory.total / (1024**3):.2f} GB")
print(f"Used Memory: {memory.percent}%")

# Disk usage
disk = psutil.disk_usage("/")
print(f"Disk Total: {disk.total / (1024**3):.2f} GB")
print(f"Disk Used: {disk.percent}%")

# List running processes
for proc in psutil.process_iter(["pid", "name", "cpu_percent"]):
    if proc.info["cpu_percent"] > 1:
        print(f"PID: {proc.info[pid]}, Name: {proc.info[name]}, CPU: {proc.info[cpu_percent]}%")

SSH Automation with Paramiko

import paramiko

# Connect to remote server
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("server.example.com", username="admin", password="password")

# Execute command
stdin, stdout, stderr = ssh.exec_command("df -h")
print(stdout.read().decode())

# SFTP file transfer
sftp = ssh.open_sftp()
sftp.put("/local/file.txt", "/remote/file.txt")
sftp.get("/remote/file.txt", "/local/file.txt")
sftp.close()

ssh.close()

Log File Analysis Script

#!/usr/bin/env python3
import re
from collections import Counter
from pathlib import Path

def analyze_auth_log(log_file="/var/log/auth.log"):
    """Analyze authentication log for failed logins"""
    failed_attempts = Counter()
    
    pattern = r"Failed password for .* from (\d+\.\d+\.\d+\.\d+)"
    
    with open(log_file, "r") as f:
        for line in f:
            match = re.search(pattern, line)
            if match:
                ip = match.group(1)
                failed_attempts[ip] += 1
    
    print("Top 10 IPs with failed login attempts:")
    for ip, count in failed_attempts.most_common(10):
        print(f"  {ip}: {count} attempts")

if __name__ == "__main__":
    analyze_auth_log()

Disk Space Monitor Script

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

THRESHOLD = 80  # Alert if usage exceeds 80%

def check_disk_space():
    alerts = []
    
    for partition in psutil.disk_partitions():
        try:
            usage = psutil.disk_usage(partition.mountpoint)
            if usage.percent > THRESHOLD:
                alerts.append(
                    f"{partition.mountpoint}: {usage.percent}% used "
                    f"({usage.used / (1024**3):.2f}GB / {usage.total / (1024**3):.2f}GB)"
                )
        except PermissionError:
            continue
    
    if alerts:
        print("DISK SPACE ALERTS:")
        for alert in alerts:
            print(f"  - {alert}")
    else:
        print("All partitions below threshold")

if __name__ == "__main__":
    check_disk_space()

Best Practices

  1. Use virtual environments for all Python projects
  2. Handle exceptions gracefully in production scripts
  3. Log script activities for troubleshooting
  4. Use configuration files instead of hardcoded values
  5. Test scripts in non-production environments first
  6. Document your scripts with docstrings and comments

Conclusion

Python provides powerful capabilities for automating Linux system administration tasks. Start with simple scripts and gradually build more complex automation as you become comfortable with the language and its libraries.

Was this article helpful?

R

About Ramesh Sundararamaiah

Red Hat Certified Architect

Expert in Linux system administration, DevOps automation, and cloud infrastructure. Specializing in Red Hat Enterprise Linux, CentOS, Ubuntu, Docker, Ansible, and enterprise IT solutions.

🐧 Stay Updated with Linux Tips

Get the latest tutorials, news, and guides delivered to your inbox weekly.

Add Comment