Files
first_gitea/bash_scripts/diskspace.sh
2025-12-13 16:51:32 +00:00

381 lines
12 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# COLECȚIE DE SCRIPTURI BASH
# Exemple practice cu explicații pentru învățare
# =============================================================================
echo "Alege un script pentru a-l rula:"
echo "1. Monitor disk space (verificare spațiu)"
echo "2. Backup automat fișiere"
echo "3. Verificare status servere"
echo "4. Curățare fișiere vechi"
echo "5. Calculator simplu"
echo "6. Monitor procese"
echo ""
read -p "Alege opțiunea (1-6): " optiune
case $optiune in
1)
# =============================================================================
# SCRIPT 1: MONITOR DISK SPACE
# Verifică spațiul pe disk și avertizează dacă e plin
# CONCEPTE: while loop, if-else, aritmetică
# =============================================================================
echo ""
echo "=== MONITOR SPAȚIU DISK ==="
echo ""
# Setează pragul de alertă (în procente)
PRAG_ALERTA=80
# df = disk free (afișează spațiul pe disk)
# -h = human readable (MB, GB în loc de bytes)
# awk = procesare text (extrage coloane)
echo "Verificare partitii..."
echo ""
# while read = citește linie cu linie
# IFS= păstrează spațiile
df -h | grep -E '^/dev/' | while read linie; do
# Extrage utilizarea (coloana 5, ex: 45%)
utilizare=$(echo $linie | awk '{print $5}' | sed 's/%//')
partitie=$(echo $linie | awk '{print $1}')
punct_montare=$(echo $linie | awk '{print $6}')
echo "Partitie: $partitie ($punct_montare)"
echo "Utilizare: $utilizare%"
# Compară numerele (utilizare cu pragul)
if [ $utilizare -gt $PRAG_ALERTA ]; then
echo "⚠️ ALERTA! Spatiu critic!"
else
echo "✓ OK"
fi
echo ""
done
;;
2)
# =============================================================================
# SCRIPT 2: BACKUP AUTOMAT
# Creează backup pentru un director specificat
# CONCEPTE: funcții, date, comprimare, validare input
# =============================================================================
echo ""
echo "=== BACKUP AUTOMAT ==="
echo ""
# Funcție pentru backup
# Funcțiile fac codul reutilizabil
face_backup() {
local sursa=$1
local destinatie=$2
local data=$(date +%Y%m%d_%H%M%S)
local nume_backup="backup_${data}.tar.gz"
echo "Creez backup pentru: $sursa"
echo "Destinatie: $destinatie/$nume_backup"
# tar = arhivare fișiere
# -czf = compress (gzip), create, file
tar -czf "$destinatie/$nume_backup" "$sursa" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✓ Backup creat cu succes!"
echo "Dimensiune: $(du -h "$destinatie/$nume_backup" | cut -f1)"
else
echo "✗ Eroare la crearea backup-ului"
return 1
fi
}
# Exemplu de utilizare
read -p "Introdu directorul pentru backup (ex: /home/user/documente): " dir_sursa
if [ ! -d "$dir_sursa" ]; then
echo "Eroare: Directorul nu există!"
exit 1
fi
read -p "Director destinatie backup (ex: /home/user/backups): " dir_dest
# Creează directorul de destinație dacă nu există
mkdir -p "$dir_dest"
face_backup "$dir_sursa" "$dir_dest"
;;
3)
# =============================================================================
# SCRIPT 3: VERIFICARE STATUS SERVERE
# Verifică dacă serverele sunt online (ping)
# CONCEPTE: array-uri, for loop, exit codes
# =============================================================================
echo ""
echo "=== VERIFICARE STATUS SERVERE ==="
echo ""
# Array simplu cu liste de servere
# () = array în bash
servere=(
"google.com"
"github.com"
"stackoverflow.com"
"localhost"
)
echo "Verific ${#servere[@]} servere..." # ${#array[@]} = număr elemente
echo ""
# for loop prin array
for server in "${servere[@]}"; do
echo -n "Verific $server... "
# ping -c 2 = trimite 2 pachete
# -W 2 = timeout 2 secunde
# &>/dev/null = ascunde output-ul
if ping -c 2 -W 2 "$server" &>/dev/null; then
echo "✓ ONLINE"
else
echo "✗ OFFLINE"
fi
done
echo ""
echo "Verificare completată!"
;;
4)
# =============================================================================
# SCRIPT 4: CURĂȚARE FIȘIERE VECHI
# Șterge fișiere mai vechi de X zile dintr-un director
# CONCEPTE: find, confirmări utilizator, numărare
# =============================================================================
echo ""
echo "=== CURĂȚARE FIȘIERE VECHI ==="
echo ""
read -p "Director de curățat (ex: /tmp): " director
if [ ! -d "$director" ]; then
echo "Eroare: Directorul nu există!"
exit 1
fi
read -p "Șterge fișiere mai vechi de câte zile? (ex: 30): " zile
# Verifică dacă e un număr valid
if ! [[ "$zile" =~ ^[0-9]+$ ]]; then
echo "Eroare: Trebuie să introduci un număr!"
exit 1
fi
echo ""
echo "Căutare fișiere mai vechi de $zile zile în $director..."
# find = caută fișiere
# -type f = doar fișiere (nu directoare)
# -mtime +N = modificat acum N+ zile
fisiere_vechi=$(find "$director" -type f -mtime +$zile 2>/dev/null)
numar_fisiere=$(echo "$fisiere_vechi" | grep -v '^$' | wc -l)
if [ $numar_fisiere -eq 0 ]; then
echo "Nu am găsit fișiere mai vechi de $zile zile."
exit 0
fi
echo "Am găsit $numar_fisiere fișiere vechi:"
echo "$fisiere_vechi" | head -10 # Arată primele 10
if [ $numar_fisiere -gt 10 ]; then
echo "... și alte $((numar_fisiere - 10)) fișiere"
fi
echo ""
read -p "Vrei să ștergi aceste fișiere? (da/nu): " confirmare
if [ "$confirmare" = "da" ]; then
# Loop prin fișiere și șterge-le
while IFS= read -r fisier; do
if [ -n "$fisier" ]; then
rm -f "$fisier"
echo "Șters: $fisier"
fi
done <<< "$fisiere_vechi"
echo ""
echo "✓ Curățare completă!"
else
echo "Operațiune anulată."
fi
;;
5)
# =============================================================================
# SCRIPT 5: CALCULATOR SIMPLU
# Calculator cu operații matematice de bază
# CONCEPTE: case, operații aritmetice, loop infinit
# =============================================================================
echo ""
echo "=== CALCULATOR SIMPLU ==="
echo ""
# Loop infinit (until break)
while true; do
echo "Operații disponibile:"
echo "1. Adunare (+)"
echo "2. Scădere (-)"
echo "3. Înmulțire (*)"
echo "4. Împărțire (/)"
echo "5. Ieșire"
echo ""
read -p "Alege operația (1-5): " op
# break = ieșire din loop
[ "$op" = "5" ] && break
read -p "Primul număr: " num1
read -p "Al doilea număr: " num2
# case = switch statement
case $op in
1)
rezultat=$((num1 + num2))
echo "Rezultat: $num1 + $num2 = $rezultat"
;;
2)
rezultat=$((num1 - num2))
echo "Rezultat: $num1 - $num2 = $rezultat"
;;
3)
rezultat=$((num1 * num2))
echo "Rezultat: $num1 * $num2 = $rezultat"
;;
4)
if [ $num2 -eq 0 ]; then
echo "Eroare: Împărțire la zero!"
else
# bc = calculator pentru operații cu virgulă
rezultat=$(echo "scale=2; $num1 / $num2" | bc)
echo "Rezultat: $num1 / $num2 = $rezultat"
fi
;;
*)
echo "Operație invalidă!"
;;
esac
echo ""
done
echo "La revedere!"
;;
6)
# =============================================================================
# SCRIPT 6: MONITOR PROCESE
# Afișează procesele care consumă cele mai multe resurse
# CONCEPTE: ps, sort, top procese
# =============================================================================
echo ""
echo "=== MONITOR PROCESE ==="
echo ""
echo "Top 10 procese după utilizare CPU:"
echo ""
# ps = process status
# aux = all users, user-oriented, include processes without terminal
# --sort = sortează după o coloană
# head = primele N linii
ps aux --sort=-%cpu | head -11
echo ""
echo "---"
echo ""
echo "Top 10 procese după utilizare memorie:"
echo ""
ps aux --sort=-%mem | head -11
echo ""
read -p "Vrei să oprești vreun proces? (da/nu): " raspuns
if [ "$raspuns" = "da" ]; then
read -p "Introdu PID-ul procesului: " pid
# Verifică dacă procesul există
if ps -p $pid > /dev/null 2>&1; then
echo "Opresc procesul $pid..."
kill $pid
echo "✓ Procesul a fost oprit"
else
echo "Procesul cu PID $pid nu există"
fi
fi
;;
*)
echo "Opțiune invalidă!"
exit 1
;;
esac
# =============================================================================
# REZUMAT CONCEPTE BASH ÎNVĂȚATE:
# =============================================================================
#
# 1. LOOP-URI:
# - while read: citește linie cu linie
# - for in: iterează prin liste/array-uri
# - while true: loop infinit (până la break)
#
# 2. CONDIȚII:
# - if [ conditie ]; then ... fi
# - case variabila in ... esac (switch)
# - Operatori: -eq (egal), -gt (mai mare), -lt (mai mic)
# - Operatori fișiere: -d (director), -f (fișier), -e (există)
#
# 3. ARRAY-URI:
# - Declarare: arr=(val1 val2 val3)
# - Acces: ${arr[0]}
# - Toate elementele: ${arr[@]}
# - Lungime: ${#arr[@]}
#
# 4. FUNCȚII:
# - Declarare: function_name() { ... }
# - Parametri: $1, $2, $3...
# - Variabile locale: local var=value
#
# 5. COMENZI UTILE:
# - df: disk free (spațiu)
# - du: disk usage (mărime fișiere)
# - ps: process status
# - find: caută fișiere
# - grep: filtrează text
# - awk: procesare coloane
# - sed: editare text
#
# 6. OPERATORI:
# - Aritmetică: $((expresie))
# - Strings: -z (gol), -n (nu e gol)
# - Comparații: -eq, -ne, -gt, -lt, -ge, -le
#
# 7. REDIRECTĂRI:
# - > : scrie în fișier (suprascrie)
# - >> : append la fișier
# - 2>&1 : redirectează error la output
# - &>/dev/null : ascunde tot output-ul
#
# =============================================================================