Guida allo script: cancellare la cache del browser su macOS con uno script Bash 

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:

  1. Automatizzare la gestione della cache riducendo la necessità di intervento manuale.
  2. Semplificare le operazioni multi-browser, in quanto supporta Chrome, Firefox, Safari ed Edge.
  3. La compatibilità multiutente, perché permette di cancellare la cache del browser su macOS per uno o più account utente.
  4. 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.

Accedi oggi stesso.

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

  1. 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.
  2. Parsing dei parametri
    La funzione parse_commandline elabora gli input dell’utente per determinare su quali browser e utenti intervenire.
  3. 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.
  4. 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.
  5. 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:
  6. Chrome: Cancella /Users/{username}/Library/Caches/Google/Chrome/*/Cache.
  7. 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

  1. 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.
  2. Posso cancellare la cache solo per un singolo browser?
    Assolutamente. Usa il parametro –Browser per specificare il/i browser che su cui vuoi agire.
  3. 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.
  4. 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à.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più sulla distribuzione remota di script con NinjaOne, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.