Files
wlan-lanforge-scripts/check_large_files.bash

295 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
# Check for large files and purge many of the most inconsequencial #
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
# set -x
# set -e
USAGE="$0 # Check for large files and purge many of the most inconsequencial
-a # automatic: disable menu and clean automatically
-b # remove extra kernels and modules
-c # remove all core files
-d # remove old LANforge downloads
-h # help
-k # remove ath10k crash files
-l # remove old files from /var/log, truncate /var/log/messages
-m # remove orphaned fileio items in /mnt/lf
-q # quiet
-r # compress .csv data in /home/lanforge
-t # remove /var/tmp files
-v # verbose
"
eyedee=`id -u`
if (( eyedee != 0 )); then
echo "$0: Please become root to use this script, bye"
exit 1
fi
function contains () {
if [[ x$1 = x ]] || [[ x$2 = x ]]; then
echo "contains wants ARRAY and ITEM arguments: if contains name joe; then... }$"
exit 1
fi
for item in "${$1[@]}"; do
echo $item
[[ "$2" = "$item" ]] && return 0
done
return 1
}
# these are default selections
selections=()
deletion_targets=()
show_menu=1
verbose=0
quiet=0
#opts=""
opts="abcdhklmqrtv"
while getopts $opts opt; do
case "$opt" in
a)
verbose=0
quiet=1
selections+=($opt)
show_menu=0
;;
b)
selections+=($opt)
;;
c)
selections+=($opt)
;;
d)
selections+=($opt)
;;
h)
echo "$USAGE"
exit 0
;;
k)
selections+=($opt)
;;
l)
selections+=($opt)
;;
m)
selections+=($opt)
;;
r)
selections+=($opt)
;;
q)
quiet=1
verbose=0
;;
t)
selections+=($opt)
;;
v)
quiet=0
verbose=1
;;
*)
echo "unknown option: $opt"
echo "$USAGE"
exit 1
;;
esac
done
if (( ${#selections} < 1 )); then
echo "$USAGE"
exit 0
fi
HR=" ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----"
function hr() {
echo "$HR"
}
declare -A totals=(
[b]=0
[c]=0
[d]=0
[k]=0
[l]=0
[m]=0
[r]=0
[t]=0
)
declare -A surveyors_map=(
[b]="survey_kernel_files"
[c]="survey_core_files"
[d]="survey_lf_downloads"
[k]="survey_ath10_files"
[l]="survey_var_log"
[m]="survey_mnt_lf_files"
[r]="survey_report_data"
[t]="survey_var_tmp"
)
declare -A cleaners_map=(
[b]="clean_old_kernels"
[c]="clean_core_files"
[d]="clean_lf_downloads"
[k]="clean_ath10_files"
[l]="clean_var_log"
[m]="clean_mnt_lf_files"
[r]="compress_report_data"
[t]="clean_var_tmp"
)
kernel_files=()
survey_kernel_files() {
mapfile -t kernel_files < <(ls /boot/* /lib/modules/* 2>/dev/null)
totals[b]=$(du -hc "$kernel_files" | awk '/total/{print $1}')
}
# Find core files
core_files=()
survey_core_files() {
cd /
mapfile -t core_files < <(ls /core* /home/lanforge/core* 2>/dev/null)
totals[c]=$(du -hc "${core_files[@]}" | awk '/total/{print $1}')
}
# downloads
downloads=()
survey_lf_downloads() {
cd /home/lanforge/Downloads || return 1
mapfile -t downloads < <(ls *gz *z2 *-Installer.exe *firmware* kinst_* *Docs* 2>/dev/null)
totals[d]=$(du -hc "${downloads[@]}" | awk '/total/{print $1}')
}
# Find ath10k crash residue
ath10_files=()
survey_ath10_files() {
mapfile -t ath10_files < <(ls /home/lanforge/ath10* 2>/dev/null)
totals[k]=$(du -sh "${ath10_files}" 2>/dev/null)
}
# stuff in var log
var_log_files=()
survey_var_log() {
mapfile -t var_log_files < <(ls /var/log/* 2>/dev/null)
totals[l]=$(du -sh "${var_log_files}" 2>/dev/null)
}
# Find size of /mnt/lf that is not mounted
mnt_lf_files=()
survey_mnt_lf_files() {
[ ! -d /mnt/lf ] && return 0
mapfile -t mnt_lf_files < <(find /mnt/lf -type f --one_filesystem)
totals[m]=$(du -xhc "${mnt_lf_files[@]}")
}
## Find size of /lib/modules
# cd /lib/modules
# mapfile -t usage_libmod < <(du -sh *)
# Find how many kernels are installed
# cd /boot
# mapfile -t boot_kernels < <(ls init*)
# boot_usage=`du -sh .`
report_files=()
survey_report_data() {
cd /home/lanforge
totals=that
}
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
# report sizes here #
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
if (( ${#core_files[@]} > 0 )); then
echo "Core Files:"
hr
printf ' %s\n' "${core_files[@]}"
hr
fi
echo "Usage of /mnt: $usage_mnt"
echo "Usage of /lib/modules: $usage_libmod"
echo "Boot usage: $boot_usage"
if (( ${#boot_kernels[@]} > 1 )); then
echo "Boot ramdisks:"
hr
printf ' %s\n' "${boot_kernels[@]}"
hr
fi
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
# delete extra things now #
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
echo "Automatic deletion will include: "
echo " journalctl space"
sleep 1
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
# ask to remove if we are interactive #
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
choice=""
while [[ $choice != q ]]; do
hr
#abcdhklmqrtv
echo "Would you like to delete? "
echo " b) old kernels"
echo " c) core crash files"
echo " d) old LANforge downloads"
echo " k) ath10k crash files"
echo " l) old /var/log files"
echo " m) orphaned /mnt/lf files"
echo " r) compress .csv report files"
echo " t) clean /var/tmp"
read -p "[1-5] or q ? " choice
case "$choice" in
b )
printf "%s\n" "${kernels[@]}"
clean_old_kernels
;;
c )
printf "%s\n" "${core_files[@]}"
clean_core_files
;;
d )
printf "%s\n" "${lf_downloads[@]}"
clean_lf_downloads
;;
k )
printf "%s\n" "${ath10_files[@]}"
clean_ath10_files
;;
l )
printf "%s\n" "${var_log_files[@]}"
clean_var_log
;;
m )
printf "%s\n" "${mnt_lf_files[@]}"
clean_mnt_lf_files
;;
r )
printf "%s\n" "${report_data_dirs[@]}"
compress_report_data
;;
t )
printf "%s\n" "${var_tmp_files[@]}"
clean_var_tmp
;;
q )
break
;;
* )
echo "not an option [$choice]"
;;
esac
done
echo bye