Una gestione efficiente della cache del browser è fondamentale per i professionisti dell’IT e per i fornitori di servizi gestiti (MSP) che cercano di ottimizzare le prestazioni del sistema e di garantire un’esperienza utente fluida. Per i sistemi macOS, la gestione della cache del browser tra più utenti e browser può essere complicata. Lo script Bash qui descritto è progettato per semplificare e automatizzare le attività per cancellare la cache del browser su macOS per gli amministratori IT.
Comprendere il contesto dello script per cancellare la cache del browser su macOS
La cache del browser memorizza i dati temporanei per accelerare la navigazione, ma può causare problemi come la visualizzazione di contenuti obsoleti o inefficienze di archiviazione se non viene gestita correttamente. Per i professionisti IT che gestiscono più sistemi, la cancellazione delle cache diventa un’attività di manutenzione essenziale.
Questo script per cancellare la cache del browser su macOS è un potente strumento per:
- Automatizzare la gestione della cache riducendo la necessità di intervento manuale.
- Semplificare le operazioni multi-browser, in quanto supporta Chrome, Firefox, Safari ed Edge.
- La compatibilità multiutente, perché permette di cancellare la cache del browser su macOS per uno o più account utente.
- Eseguire la cancellazione in modo forzato, perché controlla che i browser siano chiusi prima di cancellare la cache del browser su macOS per evitare conflitti, e prova a chiuderli se li trova aperti.
I professionisti IT negli ambienti MSP possono trarre particolare vantaggio dall’integrazione di questo script per cancellare la cache del browser su macOS nei flussi di lavoro di manutenzione ordinaria, risparmiando tempo e fatica.
Lo script per cancellare la cache del browser su macOS :
#!/usr/bin/env bash # Description: Clears the browser cache for users on a Mac. # By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. # Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. # Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. # Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. # Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. # Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. # Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. # EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). # # Parameter UserName: --UserName "User1,User2" # The names of the users to clear the cache for. If not specified, clears the current user's cache. # # Parameter Browser: --Browser "Chrome" # Clears the cache for the specified browser. If not specified, No browser will be cleared. # Valid options are "Chrome", "Firefox", "Edge", "Safari" or multiple browsers separated by a comma. For example, "Chrome,Firefox". # # Parameter Force: --Force # Will force close the selected browser before clearing the cache. # These are all our preset parameter defaults. You can set these = to something if you would prefer the script defaults to a certain parameter value. _arg_userNames= _arg_browser= _arg_force= # Help text function for when invalid input is encountered print_help() { printf '\n\n%s\n\n' 'Usage: [--UserName|-u <arg>] [--Browser|-b <arg>] [--Force|-f] [--help|-h]' printf '%s\n' 'Preset Parameter: --UserName "User1,User2"' printf '\t%s\n' "The names of the users to clear the cache for. If not specified, clears the current user's cache." printf '%s\n' 'Preset Parameter: --Browser "Chrome"' printf '\t%s\n' "Clears the cache for the specified browser. Separate multiple browsers with a comma. If not specified, No browser will be cleared." printf '\t%s\n' "Valid options are 'Chrome', 'Firefox', 'Edge', 'Safari'." printf '%s\n' 'Preset Parameter: --Force' printf '\t%s\n' "Will force close the selected browser before clearing the cache." printf '\n%s\n' 'Preset Parameter: --help' printf '\t%s\n' "Displays this help menu." } # Determines whether or not help text is necessary and routes the output to stderr die() { local _ret="${2:-1}" echo "$1" >&2 test "${_PRINT_HELP:-no}" = yes && print_help >&2 exit "${_ret}" } # Grabbing the parameters and parsing through them. parse_commandline() { while test $# -gt 0; do _key="$1" case "$_key" in -u | --UserName | --Username) test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 _arg_userNames=$2 shift ;; --UserName=*) _arg_userNames="${_key##--UserNames=}" ;; -b | -Browser | --Browser) test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1 _arg_browser=$2 shift ;; --Browser=*) _arg_browser="${_key##--Browser=}" ;; -f | --Force) _arg_force="true" ;; --help | -h) _PRINT_HELP=yes die 0 ;; *) _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1 ;; esac shift done } checkAppExists() { _Application=$1 _UserName=$2 if [[ -z "${_Application}" ]]; then echo "[Error] No application was specified." exit 1 fi if [ -f "/Applications/${_Application}" ] || [ -f "/Users/${_UserName}/Applications/${_Application}" ]; then return 1 else return 0 fi } closeApp() { _UserName=$1 _Application=$2 # Force close the app by the user name if [[ "${_arg_force}" == "true" ]] && [[ "${_runningAsRoot}" == "true" ]]; then if ! su "${_UserName}" -c "osascript -e 'tell application \"${_Application}\" to quit'" 2>/dev/null; then echo "[Warn] Failed to force close ${_Application} for user ${_UserName}." else echo "[Info] Successfully force closed ${_Application} for user ${_UserName}." fi elif [[ "${_arg_force}" == "true" ]] && [[ "${_runningAsRoot}" == "false" ]]; then if ! osascript -e "tell application \"${_Application}\" to quit" 2>/dev/null; then echo "[Warn] Failed to force close ${_Application} for user ${_UserName}." else echo "[Info] Successfully force closed ${_Application} for user ${_UserName}." fi fi } clearCache() { _UserName=$1 if [[ -z "${_UserName}" ]]; then echo "[Warn] ${_UserName} is not a valid user name. Skipping." return fi # Check that the path /Users/"$_UserName"/ exists if [[ ! -d "/Users/$_UserName/Library" ]]; then echo "[Warn] User $_UserName does not exist. Skipping." return fi _browserFound="false" # Safari # /Users/$_user/Library/Caches/com.apple.Safari/WebKitCache if [[ "${_arg_browser}" == *"Safari"* ]] || [[ "${_arg_browser}" == *"safari"* ]]; then _browserFound="true" # Check if the app exists if checkAppExists "Safari.app" "${_UserName}"; then # Check if the user is logged in # Force close Safari by the user name closeApp "$_UserName" "Safari" # Check if the cache directory exists if ls /Users/"$_UserName"/Library/Caches/com.apple.Safari/WebKitCache 2>/dev/null | head -n 1 | grep -q .; then # Clear the cache for Safari rm -rf /Users/"$_UserName"/Library/Caches/com.apple.Safari/WebKitCache 2>/dev/null echo "[Info] Cleared Safari cache for user $_UserName" else echo "[Warn] Safari cache directory does not exist. Skipping." fi else echo "[Warn] Safari.app is not installed. Skipping." fi fi # Chrome # /Users/$_user/Library/Caches/Google/Chrome/*/Cache if [[ "${_arg_browser}" == *"Chrome"* ]] || [[ "${_arg_browser}" == *"chrome"* ]]; then _browserFound="true" # Check if the app exists if checkAppExists "Google Chrome.app" "${_UserName}"; then # Force close Chrome by the user name closeApp "$_UserName" "Google Chrome" # Check if the cache directories exists if ls /Users/"$_UserName"/Library/Caches/Google/Chrome/*/Cache 2>/dev/null | head -n 1 | grep -q .; then # Clear the cache for Chrome rm -rf /Users/"$_UserName"/Library/Caches/Google/Chrome/*/Cache 2>/dev/null echo "[Info] Cleared Chrome cache for user $_UserName" else echo "[Warn] Chrome cache directory does not exist. Skipping." fi else echo "[Warn] Google Chrome.app is not installed. Skipping." fi fi # Firefox # /Users/$_user/Library/Caches/Firefox/Profiles/????????.*/cache2/* if [[ "${_arg_browser}" == *"Firefox"* ]] || [[ "${_arg_browser}" == *"firefox"* ]]; then _browserFound="true" # Check if the app exists if checkAppExists "Firefox.app" "${_UserName}"; then # Force close Firefox by the user name closeApp "$_UserName" "Firefox" # Check if the cache directories exists if ls /Users/"$_UserName"/Library/Caches/Firefox/Profiles/????????.*/cache2/* 2>/dev/null | head -n 1 | grep -q .; then # Clear the cache for Firefox rm -rf /Users/"$_UserName"/Library/Caches/Firefox/Profiles/????????.*/cache2/* 2>/dev/null echo "[Info] Cleared Firefox cache for user $_UserName" else echo "[Warn] Firefox cache directory does not exist. Skipping." fi else echo "[Warn] Firefox.app is not installed. Skipping." fi fi # Edge # /Users/$_user/Library/Caches/Microsoft Edge/*/Cache if [[ "${_arg_browser}" == *"Edge"* ]] || [[ "${_arg_browser}" == *"edge"* ]]; then _browserFound="true" # Check if the app exists if checkAppExists "Microsoft Edge.app" "${_UserName}"; then # Force close Edge by the user name closeApp "$_UserName" "Microsoft Edge" # Check if the cache directories exists if ls /Users/"$_UserName"/Library/Caches/Microsoft\ Edge/*/Cache 2>/dev/null | head -n 1 | grep -q .; then # Clear the cache for Edge rm -rf /Users/"$_UserName"/Library/Caches/Microsoft\ Edge/*/Cache 2>/dev/null echo "[Info] Cleared Edge cache for user $_UserName" else echo "[Warn] Edge cache directory does not exist. Skipping." fi else echo "[Warn] Microsoft Edge.app is not installed. Skipping." fi fi if [[ "$_browserFound" == "false" ]]; then echo "[Error] At least one browser must be specified. Please specify one of the following: Chrome, Firefox, Edge, Safari." exit 1 fi } parse_commandline "$@" # If script variable is used override commandline arguments if [[ -n $userNames ]]; then # Split userNames into an array _arg_userNames=$userNames fi if [[ -z $chrome ]] && [[ -z $firefox ]] && [[ -z $edge ]] && [[ -z $safari ]] && [[ -z $_arg_browser ]]; then echo "[Error] At least one browser must be specified. Please specify one of the following: Chrome, Firefox, Edge, Safari." exit 1 fi # Append browser names to _arg_browser as we check if the name exists in _arg_browser later on if [[ -n $chrome ]] && [[ "${chrome}" == "true" ]]; then _arg_browser="$_arg_browser,chrome" fi if [[ -n $firefox ]] && [[ "${firefox}" == "true" ]]; then _arg_browser="$_arg_browser,firefox" fi if [[ -n $edge ]] && [[ "${edge}" == "true" ]]; then _arg_browser="$_arg_browser,edge" fi if [[ -n $safari ]] && [[ "${safari}" == "true" ]]; then _arg_browser="$_arg_browser,safari" fi if [[ -n $force ]]; then if [[ "${force}" == "true" ]]; then _arg_force="true" else _arg_force="false" fi fi # Check if the user is running this script as root _runningAsRoot="false" if [[ $EUID -eq 0 ]]; then _runningAsRoot="true" fi _Users=() if [[ -z "${_arg_userNames}" ]] && [[ $_runningAsRoot == "true" ]]; then # Get a list of all user names that can login _userNames=$(dscl . -list /Users UniqueID | awk '$2 > 499 {print $1}') # Loop through each user name for _userName in $_userNames; do # Trim whitespace from the user name _userName="${_userName##*( )}" # Remove leading whitespace _userName="${_userName%%*( )}" # Remove trailing whitespace _Users+=("$_userName") done else IFS=',' read -r -a _userNames <<<"$_arg_userNames" for _userName in "${_userNames[@]}"; do # Trim whitespace from the user name _userName="${_userName##*( )}" # Remove leading whitespace _userName="${_userName%%*( )}" # Remove trailing whitespace _Users+=("$_userName") done fi if [[ $_runningAsRoot == "true" ]]; then # Check if the user is in the list of users to clear cache for for _userName in "${_Users[@]}"; do _user=$(echo "$_userName" | awk '{$1=$1};1') if dscl . read "/Users/$_user" 1>/dev/null 2>&1; then clearCache "$_user" echo "" else echo "[Warn] ${_user} is not a valid user name. Skipping." fi done else if [[ "$(whoami)" == "${_arg_userNames}" ]] || [[ -z "${_arg_userNames}" ]]; then clearCache "$(whoami)" else echo "[Error] The script must be run as system/root to clear the cache for multiple users." exit 1 fi fi
Risparmia tempo con gli oltre 300 script del Dojo NinjaOne.
Analisi dettagliata
Questo script Bash per cancellare la cache del browser su macOS è molto versatile e supporta l’esecuzione parametrica. Di seguito è riportata una spiegazione dettagliata delle sue funzionalità:
Parametri di ingresso
- –UserName o -u: Specifica uno o più utenti (per esempio Utente1, Utente2) per i quali la cache verrà cancellata. Se non viene fornito, lo script si basa sull’utente corrente.
- –Browser o -b: Indica i browser su cui agire. Le opzioni valide sono Chrome, Firefox, Safari ed Edge. È possibile specificare più browser (per esempio Chrome, Firefox).
- –Force o -f: Chiude forzatamente i browser specificati prima di cancellare la loro cache.
Funzioni principali
- Guida e gestione degli errori
La funzione print_help fornisce le linee guida per l’uso, mentre la funzione die gestisce gli input non validi o gli errori mostrando i relativi messaggi di errore. - Parsing dei parametri
La funzione parse_commandline elabora gli input dell’utente per determinare su quali browser e utenti intervenire. - Convalida dell’applicazione
La funzione checkAppExists verifica l’esistenza dei browser di destinazione nelle directory delle applicazioni sia a livello di sistema che specifiche dell’utente. - Chiusura forzata dei browser
La funzione closeApp utilizza osascript per chiudere le applicazioni del browser per gli utenti specificati, garantendo l’assenza di conflitti durante la cancellazione della cache. - Cancellazione della cache
La funzione clearCache identifica le directory della cache per ciascun browser e utente, rimuove i file pertinenti e registra le azioni nella console. Per esempio: - Chrome: Cancella /Users/{username}/Library/Caches/Google/Chrome/*/Cache.
- Safari: Rimuove /Users/{username}/Library/Caches/com.apple.Safari/WebKitCache.
Esecuzione
Lo script per cancellare la cache del browser su macOS si assicura di essere eseguito con i permessi appropriati (accesso di root quando si cancellano le cache per più utenti) e per impostazione predefinita agisce sull’utente corrente se non viene specificato un nome utente.
Casi d’uso concreti
Scenario
Un amministratore IT di un’azienda di medie dimensioni gestisce un parco dispositivi macOS. I dipendenti utilizzano più browser, il che spesso comporta problemi di prestazioni dovuti a file di cache obsoleti o sovraccarichi di dati. Utilizzando questo script per cancellare la cache del browser su macOS , può cancellare la cache di più utenti contemporaneamente senza dover intervenire in modo manuale.
Domande frequenti
- Per usare lo script per cancellare la cache del browser su macOS ho bisogno di privilegi amministrativi?
Sì, per cancellare la cache di più utenti è necessario l’accesso root. - Posso cancellare la cache solo per un singolo browser?
Assolutamente. Usa il parametro –Browser per specificare il/i browser che su cui vuoi agire. - Cosa succede se un browser è aperto durante l’esecuzione?
Se viene utilizzato il parametro –Force, lo script per cancellare la cache del browser su macOS tenterà di chiudere il browser prima di cancellare la cache. - L’esecuzione dello script per cancellare la cache del browser su macOS può essere pianificato?
Sì, lo script per cancellare la cache del browser su macOS può essere eseguito tramite cron o qualsiasi task scheduler su macOS per la gestione automatica della cache.
Implicazioni più ampie
Cancellare la cache del browser su macOS in modo regolare migliora le prestazioni del sistema, riduce l’eccesso di dati non utili in memoria e minimizza i potenziali rischi per la sicurezza, come la conservazione di dati sensibili nei file della cache. Per le aziende, questo si traduce in una riduzione dei ticket di assistenza e in una maggiore soddisfazione degli utenti.
Best practice
- Esegui come root: Esegui sempre lo script per cancellare la cache del browser su macOS con privilegi amministrativi per le operazioni multiutente.
- Esegui test in un ambiente sicuro: Convalida lo script per cancellare la cache del browser su macOS in un ambiente di prova prima di distribuirlo in tutta l’organizzazione.
- Pianifica una manutenzione regolare: Utilizza i task scheduler per automatizzare lo script per cancellare la cache del browser su macOS, in modo da ottenere una gestione coerente della cache.
- Documenta l’utilizzo: Conserva i log delle attività di cancellazione della cache per la verifica e la risoluzione dei problemi.
Considerazioni finali
Questo script per cancellare la cache del browser su macOS mostra come l’automazione possa alleggerire le attività ripetitive degli amministratori IT. Mentre strumenti come NinjaOne offrono soluzioni di gestione IT complete, script come questo possono essere inseriti in strategie più ampie e affrontare sfide specifiche. Le solide funzionalità di NinjaOne, tra cui l’automazione, il monitoraggio e la gestione, lo rendono un alleato prezioso per i professionisti IT che puntano all’efficienza e all’affidabilità.