Files
dotfiles/utils/.local/bin/clean
2026-03-09 09:44:20 +08:00

137 lines
4.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Скрипт для очистки системных логов
# Требует права root
#
set -euo pipefail
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
cat <<EOF
Usage: $(basename "$0") [-h] [1|2|3]
Clean system logs and data to free some space on system disk.
Options:
-h, --help Show this help message
1|2|3 Safe, normal or aggressive clean level
EOF
exit 0
fi
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $*"; }
show_size() {
local path="$1"
sudo du -sh "$path" 2>/dev/null | awk '{print $1}'
}
# Показываем текущее использование
log_info "Текущее использование:"
df -hx tmpfs
echo
log_info "По директориям:"
sudo du -h --max-depth=0 \
/var/log/ \
/var/cache/apt/ \
/var/lib/docker/ \
"$HOME"/.local/share/Trash/files/ \
"$HOME"/.cache/thumbnails/ \
2>/dev/null \
| sort -rh
echo
choice="${1:-}"
if [ -z "$choice" ]; then
echo "Выберите режим очистки:"
echo " 1) Безопасный"
echo " 2) Средний"
echo " 3) Агрессивный"
echo
read -rp "Выбор [1-3]: " choice
echo
fi
case "$choice" in
1)
log_info "Выбран безопасный (1) режим..."
set -x
sudo journalctl --vacuum-size=100M
sudo find /var/log -name "*.gz" -mtime +7 -delete 2>/dev/null || true
sudo find /var/log -name "*.log.*" -mtime +7 -delete 2>/dev/null || true
[ -d "$HOME"/.local/share/Trash/files/ ] && sudo rm -rfv "$HOME"/.local/share/Trash/files//*
[ -d "$HOME"/.cache/thumbnails/ ] && sudo rm -rfv "$HOME"/.cache/thumbnails//*
set +x
;;
2)
log_info "Выбран средний (2) режим..."
set -x
sudo journalctl --vacuum-size=50M
sudo find /var/log -name "*.gz" -mtime +3 -delete 2>/dev/null || true
sudo find /var/log -name "*.log.*" -mtime +3 -delete 2>/dev/null || true
sudo find /var/log -name "dpkg.log.*" -mtime +3 -delete 2>/dev/null || true
[ -d "$HOME"/.local/share/Trash/files/ ] && sudo rm -rfv "$HOME"/.local/share/Trash/files//* 2>/dev/null || true
[ -d "$HOME"/.cache/thumbnails/ ] && sudo rm -rfv "$HOME"/.cache/thumbnails//* 2>/dev/null || true
sudo rm -rfv /var/cache/apt/archives/*.deb 2>/dev/null || true
sudo apt clean 2>/dev/null || true
set +x
;;
3)
log_info "Выбран агрессивный (3) режим!"
read -rp "Продолжить? (y|yes|n|no): " confirm
if [[ "$confirm" != "yes" ]] && [[ "$confirm" != "y" ]]; then
log_info "Отменено"
exit 0
fi
set -x
sudo journalctl --vacuum-time=1d
sudo find /var/log -name "*.gz" -delete 2>/dev/null || true
sudo find /var/log -name "*.log.*" -delete 2>/dev/null || true
sudo rm -rfv /var/log/journal/user-*@* 2>/dev/null || true
sudo rm -rfv /var/log/journal/system*@* 2>/dev/null || true
sudo rm -fv /var/log/{syslog,dmesg,btmp}.* 2>/dev/null || true
sudo apt autoremove --purge
sudo apt autoclean
sudo apt clean
sudo rm -rfv /var/cache/apt/archives/* 2>/dev/null || true
hash docker && docker system prune -f
snap list 2>/dev/null && snap refresh --list 2>/dev/null || true
sudo snap list --all \
| awk '/disabled/{print $1, $3}' \
| while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
set +x
;;
*)
log_error "Неверный выбор"
exit 1
;;
esac
echo
log_info "Очистка завершена!"
log_info "Текущее использование:"
df -hx tmpfs
echo
log_info "По директориям:"
sudo du -h --max-depth=0 \
/var/log/ \
/var/cache/apt/ \
/var/lib/docker/ \
"$HOME"/.local/share/Trash/files/ \
"$HOME"/.cache/thumbnails/ \
2>/dev/null \
| sort -rh