From 3ec30aa5381f9e1198bd49b1293cd0fc70239961 Mon Sep 17 00:00:00 2001 From: David Anorue Date: Thu, 2 Apr 2026 15:32:30 +0100 Subject: [PATCH] feat: complete bash scripts --- backups/backup_20260402_151406.tar.gz | Bin 0 -> 1673 bytes backups/backup_20260402_152227.tar.gz | Bin 0 -> 2114 bytes logs/app.log | 78 +++++++++++++++++++++ logs/backup.log | 6 ++ logs/file_manager.log | 15 +++++ logs/process_monitor.log | 12 ++++ logs/system_report_2026.log | 93 ++++++++++++++++++++++++++ logs/user_info.log | 2 + scripts/.backup.sh.swp | Bin 0 -> 12288 bytes scripts/backup.sh | 23 +++++++ scripts/file_manager.sh | 41 ++++++++++++ scripts/process_monitor.sh | 14 ++++ scripts/run_all.sh | 33 +++++++++ scripts/system_check.sh | 28 ++++++++ scripts/user_info.sh | 31 +++++++++ 15 files changed, 376 insertions(+) create mode 100644 backups/backup_20260402_151406.tar.gz create mode 100644 backups/backup_20260402_152227.tar.gz create mode 100644 logs/app.log create mode 100644 logs/backup.log create mode 100644 logs/file_manager.log create mode 100644 logs/process_monitor.log create mode 100644 logs/system_report_2026.log create mode 100644 logs/user_info.log create mode 100644 scripts/.backup.sh.swp create mode 100644 scripts/backup.sh create mode 100644 scripts/file_manager.sh create mode 100644 scripts/process_monitor.sh create mode 100644 scripts/run_all.sh create mode 100644 scripts/system_check.sh create mode 100644 scripts/user_info.sh diff --git a/backups/backup_20260402_151406.tar.gz b/backups/backup_20260402_151406.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..44c460c8d5303de435873dbc08bab99f4742a49d GIT binary patch literal 1673 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 literal 0 HcmV?d00001 diff --git a/logs/app.log b/logs/app.log new file mode 100644 index 0000000..cb9463e --- /dev/null +++ b/logs/app.log @@ -0,0 +1,78 @@ +total 24K +-rw-r--r-- 1 the_godbeing the_godbeing 612 Apr 2 15:13 backup.sh +-rw-r--r-- 1 the_godbeing the_godbeing 925 Apr 2 14:55 file_manager.sh +-rw-r--r-- 1 the_godbeing the_godbeing 385 Apr 2 15:17 process_monitor.sh +-rw-r--r-- 1 the_godbeing the_godbeing 597 Apr 2 15:20 run_all.sh +-rw-r--r-- 1 the_godbeing the_godbeing 839 Apr 2 14:31 system_check.sh +-rw-r--r-- 1 the_godbeing the_godbeing 671 Apr 2 11:19 user_info.sh +===== SYSTEM REPORT ===== +---------- Disk Usage ---------- +Filesystem Size Used Avail Use% Mounted on +none 3.9G 0 3.9G 0% /usr/lib/modules/6.6.87.2-microsoft-standard-WSL2 +none 3.9G 4.0K 3.9G 1% /mnt/wsl +drivers 238G 101G 137G 43% /usr/lib/wsl/drivers +/dev/sdd 1007G 1.6G 955G 1% / +none 3.9G 112K 3.9G 1% /mnt/wslg +none 3.9G 0 3.9G 0% /usr/lib/wsl/lib +rootfs 3.9G 2.7M 3.9G 1% /init +none 3.9G 488K 3.9G 1% /run +none 3.9G 0 3.9G 0% /run/lock +none 3.9G 0 3.9G 0% /run/shm +none 3.9G 76K 3.9G 1% /mnt/wslg/versions.txt +none 3.9G 76K 3.9G 1% /mnt/wslg/doc +C:\ 238G 101G 137G 43% /mnt/c +tmpfs 789M 8.0K 789M 1% /run/user/1000 +---------- Memory Usage ---------- + total used free shared buff/cache available +Mem: 7881 318 7401 3 161 7405 +Swap: 2048 0 2048 +---------- CPU Load ---------- + 15:22:27 up 4:50, 1 user, load average: 0.00, 0.00, 0.00 +----- Total running processes: 35 +---------- Top 5 memory-consuming processes ---------- +USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND +root 218 0.0 0.2 107164 21632 ? Ssl 10:33 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal +root 808 0.0 0.2 293004 19968 ? Ssl 10:36 0:00 /usr/libexec/packagekitd +root 186 0.0 0.2 30136 18560 ? Ss 10:33 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers +root 63 0.0 0.1 47828 15104 ? S +Backup created: ../backups/backup_20260402_151406.tar.gz +Old backups cleaned up +Backup created: ../backups/backup_20260402_152227.tar.gz +Old backups cleaned up diff --git a/logs/file_manager.log b/logs/file_manager.log new file mode 100644 index 0000000..9a2e466 --- /dev/null +++ b/logs/file_manager.log @@ -0,0 +1,15 @@ +File created: sample.txt +total 12K +-rw-r--r-- 1 the_godbeing the_godbeing 925 Apr 2 14:55 file_manager.sh +-rw-r--r-- 1 the_godbeing the_godbeing 0 Apr 2 14:56 sample.txt +-rw-r--r-- 1 the_godbeing the_godbeing 839 Apr 2 14:31 system_check.sh +-rw-r--r-- 1 the_godbeing the_godbeing 671 Apr 2 11:19 user_info.sh +Renamed sample.txt to sample1.txt +File deleted: sample1.txt +total 24K +-rw-r--r-- 1 the_godbeing the_godbeing 612 Apr 2 15:13 backup.sh +-rw-r--r-- 1 the_godbeing the_godbeing 925 Apr 2 14:55 file_manager.sh +-rw-r--r-- 1 the_godbeing the_godbeing 385 Apr 2 15:17 process_monitor.sh +-rw-r--r-- 1 the_godbeing the_godbeing 597 Apr 2 15:20 run_all.sh +-rw-r--r-- 1 the_godbeing the_godbeing 839 Apr 2 14:31 system_check.sh +-rw-r--r-- 1 the_godbeing the_godbeing 671 Apr 2 11:19 user_info.sh diff --git a/logs/process_monitor.log b/logs/process_monitor.log new file mode 100644 index 0000000..49e0ec0 --- /dev/null +++ b/logs/process_monitor.log @@ -0,0 +1,12 @@ +nginx is Stopped. Restarting... +nginx Restarted +ssh is Stopped. Restarting... +ssh Restarted +docker is Stopped. Restarting... +docker Restarted +nginx is Stopped. Restarting... +nginx Restarted +ssh is Stopped. Restarting... +ssh Restarted +docker is Stopped. Restarting... +docker Restarted diff --git a/logs/system_report_2026.log b/logs/system_report_2026.log new file mode 100644 index 0000000..a04d1a8 --- /dev/null +++ b/logs/system_report_2026.log @@ -0,0 +1,93 @@ +===== SYSTEM REPORT ===== +---------- Disk Usage ---------- +Filesystem Size Used Avail Use% Mounted on +none 3.9G 0 3.9G 0% /usr/lib/modules/6.6.87.2-microsoft-standard-WSL2 +none 3.9G 4.0K 3.9G 1% /mnt/wsl +drivers 238G 101G 137G 43% /usr/lib/wsl/drivers +/dev/sdd 1007G 1.6G 955G 1% / +none 3.9G 112K 3.9G 1% /mnt/wslg +none 3.9G 0 3.9G 0% /usr/lib/wsl/lib +rootfs 3.9G 2.7M 3.9G 1% /init +none 3.9G 488K 3.9G 1% /run +none 3.9G 0 3.9G 0% /run/lock +none 3.9G 0 3.9G 0% /run/shm +none 3.9G 76K 3.9G 1% /mnt/wslg/versions.txt +none 3.9G 76K 3.9G 1% /mnt/wslg/doc +C:\ 238G 101G 137G 43% /mnt/c +tmpfs 789M 8.0K 789M 1% /run/user/1000 +---------- Memory Usage ---------- + total used free shared buff/cache available +Mem: 7881 323 7398 3 159 7400 +Swap: 2048 0 2048 +---------- CPU Load ---------- + 14:32:08 up 4:01, 1 user, load average: 0.00, 0.00, 0.00 +----- Total running processes: 37 +---------- Top 5 memory-consuming processes ---------- +USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND +root 218 0.0 0.2 107164 21632 ? Ssl 10:31 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal +root 808 0.0 0.2 293004 19968 ? Ssl 10:35 0:00 /usr/libexec/packagekitd +root 186 0.0 0.2 30136 18560 ? Ss 10:31 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers +root 63 0.0 0.1 47828 15104 ? SLH_}_j_$^P zi^0FcE0#nEEI5&To4#J|-QCOevo*br`FPdjr$&|OYbSgBUS5$g6_Dlk-42P!pXL{} z=NGM;hr9dIN$a*zyKXL;GRckp7A$vc8I)`(g&&0!sj_qu5i6i_webYA|NJ=ab zdHw8I`#Al`)AB_s3N0rfr#n01i5^*@9oar5*@!W782@bU#C?6V>@@umR|yfj)aAHK SJyPV>xwON$M-@X275f2=DR1Ba literal 0 HcmV?d00001 diff --git a/scripts/backup.sh b/scripts/backup.sh new file mode 100644 index 0000000..f4884d9 --- /dev/null +++ b/scripts/backup.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +SOURCE_DIR=$1 +BACKUP_DIR="../backups" +LOG_FILE="../logs/backup.log" + +if [[ ! -d "$SOURCE_DIR" ]]; then + echo "Error: Directory does not exist" | tee -a "$LOG_FILE" + echo "Usage: $0 " | tee -a "$LOG_FILE" + exit 1 + fi + + TIMESTAMP=$(date +"%Y%m%d_%H%M%S") + BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.tar.gz" + + tar -czf "$BACKUP_FILE" "$SOURCE_DIR" + + echo "Backup created: $BACKUP_FILE" | tee -a "$LOG_FILE" + + # Keep only last 5 backups + ls -t $BACKUP_DIR/backup_*.tar.gz | tail -n +6 | xargs -r rm + + echo "Old backups cleaned up" | tee -a "$LOG_FILE" diff --git a/scripts/file_manager.sh b/scripts/file_manager.sh new file mode 100644 index 0000000..33da7a9 --- /dev/null +++ b/scripts/file_manager.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +LOG_FILE="../logs/file_manager.log" +ACTION=$1 +FILE=$2 + +case "$ACTION" in + create) + if [[ -f "$FILE" ]]; then + echo "File already exists!" | tee -a "$LOG_FILE" + else + touch "$FILE" + echo "File created: $FILE" | tee -a "$LOG_FILE" + fi + ;; + delete) + if [[ -f "$FILE" ]]; then + rm "$FILE" + echo "File deleted: $FILE" | tee -a "$LOG_FILE" + else + echo "File not found!" | tee -a "$LOG_FILE" + fi + ;; + + list) + ls -lh | tee -a "$LOG_FILE" + ;; + + rename) + NEW_NAME=$3 + if [[ -f "$FILE" ]]; then + mv "$FILE" "$NEW_NAME" + echo "Renamed $FILE to $NEW_NAME" | tee -a "$LOG_FILE" + else + echo "File not found!" | tee -a "$LOG_FILE" + fi + ;; + *) + echo "Usage: $0 {create|delete|list|rename} filename filename?" | tee -a "$LOG_FILE" + ;; +esac diff --git a/scripts/process_monitor.sh b/scripts/process_monitor.sh new file mode 100644 index 0000000..7d6f89d --- /dev/null +++ b/scripts/process_monitor.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +LOG_FILE="../logs/process_monitor.log" +services=("nginx" "ssh" "docker") + +for service in "${services[@]}"; do + if pgrep -x "$service" > /dev/null; then + echo "$service is Running" | tee -a "$LOG_FILE" + else + echo "$service is Stopped. Restarting..." | tee -a "$LOG_FILE" + # Simulate restart + echo "$service Restarted" | tee -a "$LOG_FILE" + fi +done diff --git a/scripts/run_all.sh b/scripts/run_all.sh new file mode 100644 index 0000000..099dd20 --- /dev/null +++ b/scripts/run_all.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -euo pipefail + +LOG_FILE="../logs/app.log" + +run_all() { + bash file_manager.sh list + bash system_check.sh + bash backup.sh . + bash process_monitor.sh + bash user_info.sh + +} + +menu() { + echo "1. Run all" + echo "2. System check" + echo "3. Backup" + echo "4. Exit" +} + + while true; do + menu + read -p "Choose option: " choice + + case $choice in + 1) run_all | tee -a "$LOG_FILE" ;; + 2) bash system_check.sh | tee -a "$LOG_FILE" ;; + 3) bash backup.sh . | tee -a "$LOG_FILE" ;; + 4) exit 0 ;; + *) echo "Invalid option" ;; + esac + done diff --git a/scripts/system_check.sh b/scripts/system_check.sh new file mode 100644 index 0000000..3aa79a4 --- /dev/null +++ b/scripts/system_check.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +DATE=$(date +"%Y") +LOG_FILE="../logs/system_report_$DATE.log" + +echo "===== SYSTEM REPORT =====" | tee -a "$LOG_FILE" + +echo "---------- Disk Usage ----------" | tee -a "$LOG_FILE" +df -h | tee -a "$LOG_FILE" + +echo "---------- Memory Usage ----------" | tee -a "$LOG_FILE" +free -m | tee -a "$LOG_FILE" + +echo "---------- CPU Load ----------" | tee -a "$LOG_FILE" +uptime | tee -a "$LOG_FILE" + +# Disk warning +USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') +if (( USAGE > 80 )); then + echo "WARNING: Disk usage is above 80%" | tee -a "$LOG_FILE" + fi + + # Process count + echo "----- Total running processes: $(ps aux | wc -l)" | tee -a "$LOG_FILE" + + # Top 5 memory-consuming processes + echo "---------- Top 5 memory-consuming processes ----------" | tee -a "$LOG_FILE" + ps aux --sort=-%mem | head -n 6 | tee -a "$LOG_FILE" diff --git a/scripts/user_info.sh b/scripts/user_info.sh new file mode 100644 index 0000000..82ccb6e --- /dev/null +++ b/scripts/user_info.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +LOG_FILE="../logs/user_info.log" + +read -p "Enter your name: " name +read -p "Enter your age: " age +read -p "Enter your country: " country + +# Validate inputs +if [[ -z "$name" || -z "$age" || -z "$country" ]]; then + echo "Error: All fields are required" | tee -a "$LOG_FILE" + exit 1 + fi + + if ! [[ "$age" =~ ^[0-9]+$ ]]; then + echo "Error: Age must be numeric" | tee -a "$LOG_FILE" + exit 1 + fi + +# Determine age category + if (( age < 18 )); then + category="Minor" + elif (( age <= 65 )); then + category="Adult" + else + category="Senior" + fi + + message="Hello $name from $country! You are an $category." + + echo "$message" | tee -a "$LOG_FILE"