More tools added

This commit is contained in:
2025-12-13 16:49:11 +00:00
parent 37a2418978
commit 039c75045d

View File

@@ -58,3 +58,323 @@ case $optiune in
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
#
# =============================================================================