Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions scripts/back_up.sh
Original file line number Diff line number Diff line change
@@ -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"

123 changes: 123 additions & 0 deletions scripts/file_manager.sh
Original file line number Diff line number Diff line change
@@ -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 <command> [arguments]"
echo ""
echo "Commands:"
echo " create <filename> Create a new file"
echo " delete <filename> Delete a file"
echo " list List files in current directory"
echo " rename <oldname> <newname> 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

41 changes: 41 additions & 0 deletions scripts/system_check.sh
Original file line number Diff line number Diff line change
@@ -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



39 changes: 39 additions & 0 deletions scripts/user_info.sh
Original file line number Diff line number Diff line change
@@ -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