#!/bin/sh ### Rozhuk Ivan 2020-2023 ### clean_system.sh ### EXCEPTION_LIST="/sbin/init.bak /libexec/ld-elf.* /usr/lib/.*\.a /usr/lib/clang/.* /usr/lib/compat /usr/lib/include/.* /usr/lib/debug/boot/.* /usr/lib/libc.so /usr/lib/libc\+\+.so /usr/lib/libxnet.so /usr/lib32/.*\.a /usr/lib32/libc.so /usr/lib32/libc\+\+.so /usr/lib32/libxnet.so /usr/libdata/ldscripts /usr/libexec/zfs /usr/share/certs/trusted/netlab.dhis.org.pem /usr/share/keys/pkg/revoked /usr/share/man/whatis /usr/share/openssl/man/whatis /usr/share/zfs/compatibility.d" # Time calculations. _CUR_TIME=`date '+%s'` _LIBC_TIME=`stat -f '%B' /lib/libc.so.7` _MOD_TIME_DAYS=`echo "$(( (((${_CUR_TIME} - ${_LIBC_TIME}) / 86400) + 1) ))"` # Collect data. for __DIR2CLEAN in '/bin' '/lib' '/libexec' '/sbin' '/usr/bin' '/usr/lib' '/usr/lib32' '/usr/libdata' '/usr/libexec' '/usr/sbin' '/usr/share'; do [ ! -r ${__DIR2CLEAN} ] && continue # Too old files. _FILES_RAW=`find -x -L "${__DIR2CLEAN}" -mtime +${_MOD_TIME_DAYS} -type f 2>/dev/null` _FILES_FILTERED=`echo "${_FILES_FILTERED}";echo "${_FILES_RAW}" | grep -Ev -- "${EXCEPTION_LIST}"` _FILES_EXCEPTION=`echo "${_FILES_EXCEPTION}";echo "${_FILES_RAW}" | grep -E -- "${EXCEPTION_LIST}"` # Broken symlinks. _BROKEN_SYMLINKS_RAW=`find -x -L "${__DIR2CLEAN}" -type l 2>/dev/null` _BROKEN_SYMLINKS_FILTERED=`echo "${_BROKEN_SYMLINKS_FILTERED}";echo "${_BROKEN_SYMLINKS_RAW}" | grep -Ev -- "${EXCEPTION_LIST}"` _BROKEN_SYMLINKS_EXCEPTION=`echo "${_BROKEN_SYMLINKS_EXCEPTION}";echo "${_BROKEN_SYMLINKS_RAW}" | grep -E -- "${EXCEPTION_LIST}"` # Empty folders. _EMPTY_DIRS_RAW=`find -x "${__DIR2CLEAN}" -type d -empty 2>/dev/null` _EMPTY_DIRS_FILTERED=`echo "${_EMPTY_DIRS_FILTERED}";echo "${_EMPTY_DIRS_RAW}" | grep -Ev -- "${EXCEPTION_LIST}"` _EMPTY_DIRS_EXCEPTION=`echo "${_EMPTY_DIRS_EXCEPTION}";echo "${_EMPTY_DIRS_RAW}" | grep -E -- "${EXCEPTION_LIST}"` done # Show elements to autoremove. if [ -n "${_FILES_FILTERED}" ]; then echo 'Files for auto remove:' echo "${_FILES_FILTERED}" echo '==========================================================' echo '' fi if [ -n "${_EMPTY_DIRS_FILTERED}" ]; then echo 'Empty dirs for auto remove:' echo "${_EMPTY_DIRS_FILTERED}" echo '==========================================================' echo '' fi if [ -n "${_BROKEN_SYMLINKS_FILTERED}" ]; then echo 'Broken symlinks for auto remove:' echo "${_BROKEN_SYMLINKS_FILTERED}" echo '==========================================================' echo '' fi # Show elements for manual deletion. if [ "${1}" == '-m' ]; then if [ -n "${_FILES_EXCEPTION}" ]; then echo 'Files for manual remove:' echo "${_FILES_EXCEPTION}" echo '==========================================================' echo '' fi if [ -n "${_EMPTY_DIRS_EXCEPTION}" ]; then echo 'Empty dirs for manual remove:' echo "${_EMPTY_DIRS_EXCEPTION}" echo '==========================================================' echo '' fi if [ -n "${_BROKEN_SYMLINKS_EXCEPTION}" ]; then echo 'Broken symlinks for manual remove:' echo "${_BROKEN_SYMLINKS_EXCEPTION}" echo '==========================================================' echo '' fi fi # Remove elements if -y is set. if [ "${1}" == '-y' ]; then for __ITEM2RM in ${_FILES_FILTERED}; do rm -f ${__ITEM2RM} done for __ITEM2RM in ${_BROKEN_SYMLINKS_FILTERED}; do rm -f ${__ITEM2RM} done for __ITEM2RM in ${_EMPTY_DIRS_FILTERED}; do rm -rf ${__ITEM2RM} done rm -f /etc/rc.d/abi fi