diff --git a/scripts/back_up.sh b/scripts/back_up.sh new file mode 100755 index 0000000..10751e1 --- /dev/null +++ b/scripts/back_up.sh @@ -0,0 +1,50 @@ +#!/bin/bash + + +set -euo pipefail + +BACKUP_DIR="backups" +LOG_FILE="backup.log" +RETENTION=5 + + +if [ $# -eq 0 ]; then + echo "Error: No directory provided." | tee -a "$LOG_FILE" + echo "Usage: $0 /path/to/directory" | tee -a "$LOG_FILE" + exit 1 +fi + +SOURCE_DIR="$1" + + +if [ ! -d "$SOURCE_DIR" ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Directory '$SOURCE_DIR' does not exist or is not a directory." | tee -a "$LOG_FILE" + exit 1 +fi + + +mkdir -p "$BACKUP_DIR" + + +TIMESTAMP=$(date '+%Y%m%d_%H%M%S') +BACKUP_FILE="\( {BACKUP_DIR}/backup_ \){TIMESTAMP}.tar.gz" + +echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: Starting backup of '$SOURCE_DIR' ..." | tee -a "$LOG_FILE" + + +if tar -czf "\( BACKUP_FILE" -C " \)(dirname "\( SOURCE_DIR")" " \)(basename "$SOURCE_DIR")" 2>> "$LOG_FILE"; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: Backup created → $BACKUP_FILE" | tee -a "$LOG_FILE" +else + echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Backup creation failed!" | tee -a "$LOG_FILE" + exit 1 +fi + + +echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: Rotating backups (keeping last $RETENTION) ..." | tee -a "$LOG_FILE" +cd "$BACKUP_DIR" || exit 1 +ls -t backup_*.tar.gz 2>/dev/null | tail -n +$((RETENTION + 1)) | xargs -I {} rm -- "{}" 2>> "../$LOG_FILE" || true +cd - > /dev/null + +echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: Backup process completed successfully." | tee -a "$LOG_FILE" +echo "--------------------------------------------------" | tee -a "$LOG_FILE" + diff --git a/scripts/file_manager.sh b/scripts/file_manager.sh new file mode 100755 index 0000000..0583fb5 --- /dev/null +++ b/scripts/file_manager.sh @@ -0,0 +1,123 @@ +#!/bin/bash + + +LOG_DIR="logs" +LOG_FILE="$LOG_DIR/file_manager.log" + + +mkdir -p "$LOG_DIR" + +log_action() { + local timestamp=$(date '+%Y-%m-%d %H:%M:%S') + echo "[$timestamp] $1" >> "$LOG_FILE" +} + +# Usage +usage() { + echo "Usage: $0 [arguments]" + echo "" + echo "Commands:" + echo " create Create a new file" + echo " delete Delete a file" + echo " list List files in current directory" + echo " rename Rename a file" + exit 1 +} + +if [ $# -lt 1 ]; then + usage +fi + +COMMAND=$1 +shift + +case $COMMAND in + + create) + if [ $# -ne 1 ]; then + echo "Error: create requires one filename." + usage + fi + TARGET=$1 + + if [ -e "$TARGET" ]; then + echo "Error: File '$TARGET' already exists. Overwriting not allowed." + log_action "CREATE FAILED: '$TARGET' already exists" + exit 1 + fi + + touch "$TARGET" + if [ $? -eq 0 ]; then + echo "File '$TARGET' created successfully." + log_action "CREATE: '$TARGET' created" + else + echo "Error: Failed to create file '$TARGET'." + log_action "CREATE FAILED: '$TARGET'" + fi + ;; + + delete) + if [ $# -ne 1 ]; then + echo "Error: delete requires one filename." + usage + fi + TARGET=$1 + + if [ ! -f "$TARGET" ]; then + echo "Error: File '$TARGET' not found." + log_action "DELETE FAILED: '$TARGET' not found" + exit 1 + fi + + rm "$TARGET" + if [ $? -eq 0 ]; then + echo "File '$TARGET' deleted successfully." + log_action "DELETE: '$TARGET' deleted" + else + echo "Error: Failed to delete '$TARGET'." + log_action "DELETE FAILED: '$TARGET'" + fi + ;; + + list) + echo "Files in current directory:" + ls -la + log_action "LIST: Directory listing performed" + ;; + + rename) + if [ $# -ne 2 ]; then + echo "Error: rename requires oldname and newname." + usage + fi + TARGET=$1 + NEWNAME=$2 + + if [ ! -f "$TARGET" ]; then + echo "Error: File '$TARGET' not found." + log_action "RENAME FAILED: '$TARGET' not found" + exit 1 + fi + + if [ -e "$NEWNAME" ]; then + echo "Error: '$NEWNAME' already exists. Cannot overwrite." + log_action "RENAME FAILED: '$NEWNAME' already exists" + exit 1 + fi + + mv "$TARGET" "$NEWNAME" + if [ $? -eq 0 ]; then + echo "Successfully renamed '$TARGET' to '$NEWNAME'." + log_action "RENAME: '$TARGET' → '$NEWNAME'" + else + echo "Error: Failed to rename '$TARGET' to '$NEWNAME'." + log_action "RENAME FAILED: '$TARGET' → '$NEWNAME'" + fi + ;; + + *) + echo "Error: Unknown command '$COMMAND'" + usage + ;; +esac + diff --git a/scripts/system_check.sh b/scripts/system_check.sh new file mode 100755 index 0000000..46654fd --- /dev/null +++ b/scripts/system_check.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +LOG_DIR="../logs" +DATE=$(date +"%Y-%m-%d") +LOG_FILE="$LOG_DIR/ system_report_$DATE.log" + +mkdir -p $LOG_DIR + +echo "System Report - $DATE" | tee $LOG_FILE +echo "-----------------------" | tee -a $LOG_FILE + +echo "Disk Usage:" | tee -a $LOG_FILE +df -h | tee -a $LOG_FILE + +echo "" | tee -a $LOG_FILE +echo "Memory Usage:" | tee -a $LOG_FILE +free -m | tee -a $LOG_FILE + +echo "" | tee -a $LOG_FILE +echo "CPU Load:" | tee -a $LOG_FILE +uptime | tee -a $LOG_FILE + +echo "" | tee -a $LOG_FILE +echo "Total Running Processes:" | tee -a +$LOG_FILE +ps aux | wc -l | tee -a $LOG_FILE + +echo "" | tee -a $LOG_FILE +echo "Top 5 Memory Consuming Processes:" +| tee -a $LOG_FILE +ps aux --sort=-%mem | head -n 6 | tee -a $LOG_FILE + +usage=$(df / | awk 'NR==2 {print $5}' | +sed 's/%//') + +if [ "$usage" -gt 80 ]; then + echo "WARNING: Disk usage is above 80%" | tee -a $LOG_FILE +fi + + + diff --git a/scripts/user_info.sh b/scripts/user_info.sh new file mode 100755 index 0000000..60e5692 --- /dev/null +++ b/scripts/user_info.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +mkdir -p logs + +read -p "What is your name? " name + +if [ -z "$name" ]; then + echo "Name cannot be empty." + exit 1 +fi + +read -p "What is your age? " age + +if ! echo "$age" | grep -q '^[0-9]\+$' +then + echo "Age must be a number." + exit 1 +fi + +read -p "What country are you from? " country + +if [ -z "$country" ]; then + echo "Country cannot be empty." +exit 1 +fi + +if [ "$age" -lt 18 ]; then + category="Minor" +elif [ "$age" -le 65 ]; then + category="Adult" +else + category="Senior" +fi + +echo "Hello $name from $country!" +echo "You are an $category." + +echo "Name: $name | Age: $age | Country: +$country | Category: $category" >> ../logs/user_info.log