Automatizarea curățeniei în sistem: construiți un script Bash de mentenanță periodică


Un sistem Linux bine configurat este recunoscut pentru stabilitatea sa pe termen lung. Cu toate acestea, ideea că un sistem de operare bazat pe kernelul Linux nu acumulează "reziduuri" este un mit des întâlnit. Fie că vorbim despre fișiere temporare rămase în directorul /tmp, arhive de pachete vechi stocate de managerul de pachete (apt, pacman sau dnf), fie de fișiere log de dimensiuni gigantice adunate în /var/log, spațiul pe disc se poate epuiza mai repede decât am crede.

Curățarea manuală a acestor fișiere poate deveni o sarcină repetitiva și plictisitoare. Din fericire, Linux excelează la un capitol esențial: automatizarea. Prin combinarea unui script Bash bine structurat cu un utilitar de planificare precum cron, orice utilizator își poate transforma sistemul într-un mediu complet auto-sustenabil.

De ce este necesară mentenanța periodică în Linux?
Spre deosebire de alte sisteme de operare care rulează unelte opace de defragmentare și curățenie în fundal, Linux oferă control total utilizatorului. Totuși, libertatea vine la pachet cu responsabilitatea gestionării resurselor.

Există câteva zone critice unde fișierele inutile tind să se acumuleze:
***cache-ul managerului de pachete: de fiecare dată când instalați sau actualizați o aplicație, fișierele descărcate rămân stocate local. Dacă nu sunt șterse periodic, pot ocupa rapid zeci de gigaocteti.
***directorul /tmp și cache-ul utilizatorului (~/.cache): Deși /tmp este adesea curățat la repornire, fișierele din ~/.cache cresc nelimitat, păstrând date temporare de la navigatoare web, editoare sau medii de dezvoltare.
***jurnalele de sistem: serviciul systemd-jounald înregistrează fiecare eveniment din sistem. Fără o limită clară stabilită, jurnalele pot ajunge să ocupe un spațiu considerabil pe disc.
***pachetele orfane și dependențele neutilizate: în urma dezinstalării unor programe, dependențele instalate automat rămân adesea prezente pe disc fără vreun rol activ.

Structura unui script Bash de mentenanță eficient
Un script de mentenanță robust trebuie să îndeplinească câteva condiții fundamentale. Nu este suficient doar să execute comenzi de ștergere, el trebuie să verifice permisiunile de executare, să calculeze spațiul eliberat și să ofere un răspuns clar prin alerte în terminal.

Mai jos codul sursă al scriptului de mentenanță: cleaner.sh.
cleaner.sh — Terminal
root@linux:~# cat cleaner.sh
#!/usr/bin/env bash

# ==============================================================================
# Script: cleaner.sh
# Descriere: Script de mentenanță și curățare automată pentru sisteme Linux
# Autor: Bugulet Ciprian-Dumitru
# WWW: https://ciprianbugulet.blogspot.com
# ==============================================================================

# Culori pentru alerte în terminal
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# Verificarea permisiunilor de root
if [ "$EUID" -ne 0 ]; then
  echo -e "${RED}[EROARE] Acest script trebuie rulat cu drepturi de root (sudo).${NC}"
  exit 1
fi

echo -e "${BLUE}====================================================${NC}"
echo -e "${BLUE}   Pornire proces de mentenanță sistem Linux      ${NC}"
echo -e "${BLUE}====================================================${NC}\n"

# 1. Calcularea spațiului liber înainte de curățare
INITIAL_SPACE=$(df / --output=avail | tail -n 1)

# 2. Curățarea cache-ului managerului de pachete
echo -e "${YELLOW}[1/4] Curățare cache pachete și dependențe orfane...${NC}"

if command -v apt &> /dev/null; then
    apt autoremove -y &> /dev/null
    apt autoclean -y &> /dev/null
    echo -e "${GREEN} -> Cache APT curățat cu succes.${NC}"

elif command -v pacman &> /dev/null; then
    pacman -Sc --noconfirm &> /dev/null

    # Ștergere pachete orfane dacă există
    if pacman -Qtdq &> /dev/null; then
        pacman -Rns $(pacman -Qtdq) --noconfirm &> /dev/null
    fi

    echo -e "${GREEN} -> Cache Pacman și pachete orfane curățate.${NC}"

elif command -v dnf &> /dev/null; then
    dnf autoremove -y &> /dev/null
    dnf clean all &> /dev/null
    echo -e "${GREEN} -> Cache DNF curățat cu succes.${NC}"
fi

# 3. Limitarea dimensiunii jurnalelor systemd
echo -e "\n${YELLOW}[2/4] Limitare dimensiune jurnale de sistem (Journald)...${NC}"

if command -v journalctl &> /dev/null; then
    journalctl --vacuum-size=100M &> /dev/null
    echo -e "${GREEN} -> Jurnalele au fost reduse la maxim 100MB.${NC}"
fi

# 4. Ștergerea fișierelor din Trash
echo -e "\n${YELLOW}[3/4] Golire coș de gunoi pentru utilizatori...${NC}"

for user_home in /home/*; do

    if [ -d "$user_home/.local/share/Trash" ]; then
        rm -rf "$user_home/.local/share/Trash/files/"*
        rm -rf "$user_home/.local/share/Trash/info/"*
    fi

done

echo -e "${GREEN} -> Coșurile de gunoi au fost golite.${NC}"

# 5. Curățarea fișierelor din /tmp
echo -e "\n${YELLOW}[4/4] Curățare fișiere temporare vechi din /tmp...${NC}"

find /tmp -type f -atime +7 -delete &> /dev/null

echo -e "${GREEN} -> Fișierele temporare neaccesate de 7 zile au fost șterse.${NC}"

# 6. Calcularea spațiului liber final
FINAL_SPACE=$(df / --output=avail | tail -n 1)

FREED_SPACE=$((FINAL_SPACE - INITIAL_SPACE))
FREED_MB=$((FREED_SPACE / 1024))

echo -e "\n${BLUE}====================================================${NC}"
echo -e "${GREEN}[SUCCES] Mentenanța a fost finalizată cu succes!${NC}"

if [ $FREED_MB -gt 0 ]; then
    echo -e "${YELLOW}Spațiu eliberat pe disc: ~${FREED_MB} MB${NC}"
else
    echo -e "${YELLOW}Sistemul era deja curat. Nu s-a eliberat spațiu semnificativ.${NC}"
fi

echo -e "${BLUE}====================================================${NC}"

Analiza și funcționalitatea scriptului
Pentru a putea înțelege mai bine mecanismul din spatele scriptului, este utilă o scurtă analiză a elementelor cheie:
1. Codurile de culoare ANSI pentru alerte
Sintaxe precum RED='\033[0;31m' reprezintă secvențe de evacuare ANSI. Ele modifică culoarea textului afișat în terminal. Această abordare permite identificarea vizuală rapidă a stadiului în care se află procesul: galben pentru acțiuni în desfășurare, verde pentru confirmări și roșu pentru erori critice.

2. Detectarea automată a distribuției
Aplicațiile diferă în funcție de familia din care face parte distribuția Linux utilizată. Scriptul folosește comanda command -v pentru a verifica prezența managerului de pachete specific sistemului:
***apt - Ubuntu/Debian/Pop!_OS/Linux Mint
***pacman - Arch Linux/Manjaro/EndeavourOS
***dnf - Fedora/Red Hat/AlmaLinux

Această abordare face ca scriptul să fie portabil și să poată fi rulat pe distribuții multiple fără modificări ale codului.

3. Gestionarea spațiului și a fișierelor temporare
Prin comanda df / --output=avail, scriptul citește spațiul disponibil pe partiția rădăcină (/) înainte și după execuție. Diferența este calculată direct în variabile Bash și convertită din kiloocteți în megaocteti pentru a oferi un raport clar la final.

De asemenea, comanda find /tmp -type f -atime +7 -delete caută fișiere în directorul /tmp care nu au fost accesate în ultimele 7 zile și le elimină automat.

Configurarea și executarea scriptului
Pentru că scriptul să poată fi utilizat, trebuie parcurși câțiva pași simpli direct în terminal:
1. salvarea fișierului
Fișierul se poate crea folosind orice editor de text din terminal, cum ar fi nano:
$ sudo nano /usr/local/bin/cleaner.sh

Introduceți scriptul de mai sus, apoi salvați fișierul utilizând combinația de taste Ctrl+O, urmată de Enter și Ctrl+X,

2. acordarea drepturilor de execuție
Fișierele text proaspăt create nu au permisiuni de execuție. Acestea se adaugă cu ajutorul comenzii chmod:
$ sudo chmod +x /usr/local/bin/cleaner.sh

3. testarea manuală
Scriptul poate fi testat direct prin rularea comenzii:
$ sudo cleaner.sh

Automatizarea mentenanței prin Cron Jobs
Procesul devine cu adevărat eficient în momentul în care rularea manuală este eliminată complet. Utilitarul cron permite planificarea execuției la intervale rgulate (zilnic, săptămânal sau lunar). Pentru a putea să adaugați o sarcină automată în crontab-ul utilizatorului root, executați comanda:
$ sudo crontab -e

Vom face ca scriptul să ruleze în fiecare zi de Luni, la ora 10 dimineața, puteți adăuga următoarea linie:
0 10 * * 1 /usr/local/bin/cleaner.sh > /var/log/cleaner.log 2>&1

Explicarea liniei:
***0 10 * * 1 - reprezintă sintaxa cron pentru rularea scriptului în fiecare Luni la ora 10
***/usr/local/bin/cleaner.sh - calea absoluta către scriptul creat
***> /var/log/cleaner.log 2>&1 - redictioneaza atât ieșirea standard, cât și erorile către un fișier log dedicat. Astfel, istoricul curățării poate fi consultat ulterior prin comanda cat /var/log/cleaner.log.

Automatizarea proceselor de rutină reprezintă unul dintre cele mai mari avantaje ale utilizării unui sistem de operare Linux. Un script de mentenanță simplu, configurat o singură dată, economisește timp, menține sistemul rapid și previne problemele legate de lipsa spațiului pe disc.

Așadar dacă v-a plăcut articolul informativ "Automatizarea curățeniei în sistem: construiți un script Bash de mentenanță periodică" distribuiți-l pe rețelele sociale sau scrieți în caseta de comentarii întrebările și sugestiile dumneavoastră, deoarece mă ajută să îmbunătățesc sau să corectez conținutul.


Comments

Postari populare

Sfârșitul perioadei de viață pentru Debian 11: impact, riscuri și soluții de migrare

Comenzi de baza si sfaturi in utilizarea aplicatiei FFmpeg pentru incepatori

Instalare TV-MAXE pe Debian

Conflux Icon Theme: retușul estetic care vă transformă mediul grafic Linux

Performanță și simplitate: vizualizarea și organizarea imaginilor cu Geeqie

Optimizați-vă fluxul de lucru: creați șabloane în LibreOffice Writer

Confidențialitate, performanță și securitate: Ad Blockers pentru browserele din Linux

Cum resetam/schimbam parola de utilizator in Linux

Fără timp irosit: extrageți toate imaginile dintr-un document LibreOffice

Instrumente utile LibreOffice Writer: creați cod QR din text sau link