Ricerca nel sito web

Comprensione dei file di inizializzazione della shell e dei profili utente in Linux


Linux è un sistema multiutente e di condivisione del tempo, il che implica che più di un utente può accedere e utilizzare un sistema. E gli amministratori di sistema hanno il compito di gestire vari aspetti del modo in cui i diversi utenti possono utilizzare un sistema in termini di installazione/aggiornamento/rimozione di software, programmi che possono eseguire, file che possono visualizzare/modificare e così via.

Linux consente inoltre di creare o mantenere gli ambienti degli utenti in due modi principali: utilizzando configurazioni a livello di sistema (globali) e specifiche dell'utente (personali). Normalmente, il metodo di base per lavorare con un sistema Linux è la shell, e la shell crea un ambiente in base a determinati file che legge durante la sua inizializzazione dopo un accesso utente riuscito.

Lettura consigliata: Come impostare le variabili di ambiente in Linux

In questo articolo spiegheremo i file di inizializzazione della shell in relazione ai profili utente per la gestione degli utenti locali in Linux. Ti faremo sapere dove conservare le funzioni della shell personalizzate, gli alias, le variabili e i programmi di avvio.

Importante: ai fini di questo articolo, ci concentreremo su bash, una shell compatibile con sh che è la shell più popolare/utilizzata sui sistemi Linux in circolazione.

Se stai utilizzando un programma shell diverso (zsh, ash, fish ecc.), leggi la sua documentazione per saperne di più su alcuni dei file correlati di cui parleremo qui.

Inizializzazione della shell in Linux

Quando la shell viene invocata, legge alcuni file di inizializzazione/avvio che aiutano a configurare un ambiente per la shell stessa e l'utente del sistema; ovvero funzioni predefinite (e personalizzate), variabili, alias e così via.

Esistono due categorie di file di inizializzazione letti dalla shell:

  • file di avvio a livello di sistema: contengono configurazioni globali che si applicano a tutti gli utenti del sistema e di solito si trovano nella directory /etc. Includono: /etc/profiles e /etc/bashrc o /etc/bash.bashrc.
  • file di avvio specifici dell'utente: memorizzano le configurazioni che si applicano a un singolo utente sul sistema e si trovano normalmente nella directory home degli utenti come file punto. Possono sovrascrivere le configurazioni a livello di sistema. Includono: .profiles, .bash_profile, .bashrc e .bash_login.

Ancora una volta, la shell può essere invocata in tre possibili modalità:

1. Shell di accesso interattiva

La shell viene richiamata dopo che un utente accede con successo al sistema, utilizzando /bin/login, dopo aver letto le credenziali memorizzate nel file /etc/passwd.

Quando la shell viene avviata come shell di login interattiva, legge /etc/profile e il suo equivalente specifico dell'utente ~/.bash_profile.

2. Shell interattiva senza accesso

La shell viene avviata dalla riga di comando utilizzando un programma shell, ad esempio $/bin/bash o $/bin/zsh. Può anche essere avviato eseguendo il comando /bin/su.

Inoltre, una shell interattiva senza login può essere richiamata anche con un programma terminale come konsole, terminator o xterm dall'interno di un ambiente grafico.

Quando la shell viene avviata in questo stato, copia l'ambiente della shell genitore e legge il file ~/.bashrc specifico dell'utente per ulteriori istruzioni sulla configurazione di avvio.

su
ls -la

3. Shell non interattiva

La shell viene richiamata quando è in esecuzione uno script di shell. In questa modalità, sta elaborando uno script (insieme di comandi/funzioni di shell o di sistema generico) e non richiede l'input dell'utente tra i comandi se non diversamente. Funziona utilizzando l'ambiente ereditato dalla shell genitore.

Comprensione dei file di avvio della shell a livello di sistema

In questa sezione, faremo più luce sui file di avvio della shell che memorizzano le configurazioni per tutti gli utenti del sistema e questi includono:

Il file/etc/profile: memorizza le configurazioni dell'ambiente a livello di sistema e i programmi di avvio per la configurazione dell'accesso. Tutte le configurazioni che desideri applicare agli ambienti di tutti gli utenti del sistema devono essere aggiunte in questo file.

Ad esempio, puoi impostare qui la variabile d'ambiente PATH globale.

cat /etc/profile

Nota: in alcuni sistemi come RHEL/CentOS 7, riceverai avvisi del tipo "Non è consigliabile modificare questo file a meno che tu sapere cosa stai facendo È molto meglio creare uno script di shell .sh personalizzato in /etc/profile.d/ per apportare modifiche personalizzate al tuo ambiente, poiché ciò eviterà la necessità di unirle futuri aggiornamenti”.

La directory /etc/profile.d/: memorizza gli script di shell utilizzati per apportare modifiche personalizzate al tuo ambiente:

cd /etc/profile.d/
ls  -l 

Il file /etc/bashrc o /etc/bash.bashrc contiene funzioni e alias a livello di sistema, incluse altre configurazioni che si applicano a tutti gli utenti del sistema.

Se il tuo sistema ha più tipi di shell, è una buona idea inserire configurazioni specifiche di bash in questo file.

cat /etc/bashrc

Comprensione dei file di avvio della shell specifici dell'utente

Successivamente, spiegheremo di più sui file punto di avvio della shell (bash) specifici dell'utente, che memorizzano le configurazioni per un particolare utente sul sistema, si trovano nella directory home di un utente e includono:

ls -la

Il file ~/.bash_profile: memorizza le configurazioni dell'ambiente specifico dell'utente e dei programmi di avvio. Puoi impostare la variabile di ambiente PATH personalizzata qui, come mostrato nello screenshot qui sotto:

cat ~/.bash_profile

Il file ~/.bashrc: questo file memorizza alias e funzioni specifici dell'utente.

cat ~/.bashrc

Il file ~/.bash_login: contiene configurazioni specifiche che normalmente vengono eseguite solo quando si accede al sistema. Quando ~/.bash_profile è assente, questo file verrà letto da bash.

Il file ~/.profile – questo file viene letto in assenza di ~/.bash_profile e ~/.bash_login; può memorizzare le stesse configurazioni, che possono essere accessibili anche da altre shell sul sistema. Poiché qui abbiamo parlato principalmente di bash, tieni presente che altre shell potrebbero non comprendere la sintassi di bash.

Successivamente, spiegheremo anche altri due importanti file specifici dell'utente che non sono necessariamente file di inizializzazione bash:

Il file ~/.bash_history: bash mantiene una cronologia dei comandi che sono stati immessi da un utente nel sistema. Questo elenco di comandi è conservato nella directory home dell'utente nel file ~/.bash_history.

Per visualizzare questo elenco, digitare:

history 
or 
history | less

Il file ~/.bash_logout: non viene utilizzato per l'avvio della shell, ma memorizza le istruzioni specifiche dell'utente per la procedura di logout. Viene letto ed eseguito quando un utente esce da una shell di accesso interattiva.

Un esempio pratico potrebbe essere quello di cancellare la finestra del terminale al momento del logout. Questo è importante per le connessioni remote, che lasceranno una finestra pulita dopo averle chiuse:

cat bash_logout 

Per ulteriori approfondimenti, controlla il contenuto di questi file di inizializzazione della shell su varie distribuzioni Linux e leggi anche la pagina man di bash:

È tutto per ora! In questo articolo abbiamo spiegato i file di avvio/inizializzazione della shell in Linux. Utilizza il modulo commenti qui sotto per scriverci.