Linux Professional Institute Learning Logo.
Torna al contenuto principale
  • Home
    • Tutte le Risorse
    • LPI Learning Materials
    • Collabora
    • Publishing Partner
    • Diventa un Publishing Partner
    • FAQ
    • Collaboratori
    • Contatto
  • LPI.org
105.1 Lezione 1
Argomento 105: Shell e Script di Shell
105.1 Personalizzare e utilizzare l'ambiente di shell
  • 105.1 Lezione 1
  • 105.1 Lezione 2
  • 105.1 Lezione 3
105.2 Personalizzare o scrivere semplici script
  • 105.2 Lezione 1
  • 105.2 Lezione 2
Argomento 106: Interfacce Utente e Desktop
106.1 Installare e configurare X11
  • 106.1 Lezione 1
106.2 Desktop grafici
  • 106.2 Lezione 1
106.3 Accessibilità
  • 106.3 Lezione 1
Argomento 107: Attività Amministrative
107.1 Gestire account utente e gruppo e file di sistema correlati
  • 107.1 Lezione 1
  • 107.1 Lezione 2
107.2 Automatizzare le attività di amministrazione del sistema attraverso la pianificazione
  • 107.2 Lezione 1
  • 107.2 Lezione 2
107.3 Localizzazione e internazionalizzazione
  • 107.3 Lezione 1
Argomento 108: Servizi Essenziali di Sistema
108.1 Mantenere l'orario di sistema
  • 108.1 Lezione 1
  • 108.1 Lezione 2
108.2 Logging di sistema
  • 108.2 Lezione 1
  • 108.2 Lezione 2
108.3 Concetti base dei Mail Transfer Agent (MTA)
  • 108.3 Lezione 1
108.4 Gestire stampa e stampanti
  • 108.4 Lezione 1
Argomento 109: Fondamenti di Networking
109.1 Fondamenti dei protocolli Internet
  • 109.1 Lezione 1
  • 109.1 Lezione 2
109.2 Configurazione di rete persistente
  • 109.2 Lezione 1
  • 109.2 Lezione 2
109.3 Risoluzione dei problemi di base di una rete
  • 109.3 Lezione 1
  • 109.3 Lezione 2
109.4 Configurare un client DNS
  • 109.4 Lezione 1
Argomento 110: Sicurezza
110.1 Eseguire attività di amministrazione della sicurezza
  • 110.1 Lezione 1
110.2 Configurare la sicurezza dell'host
  • 110.2 Lezione 1
110.3 Proteggere i dati con la crittografia
  • 110.3 Lezione 1
  • 110.3 Lezione 2
How to get certified
  1. Argomento 105: Shell e Script di Shell
  2. 105.1 Personalizzare e utilizzare l'ambiente di shell
  3. 105.1 Lezione 1

105.1 Lezione 1

Certificazione:

LPIC-1

Versione:

5.0

Argomento:

105 Shell e Script di Shell

Obiettivo:

105.1 Personalizzare e utilizzare l’ambiente di Shell

Lezione:

1 di 3

Introduzione

La shell è probabilmente lo strumento più potente in un sistema Linux e può essere definita come un’interfaccia tra l’utente e il kernel del sistema operativo che interpreta i comandi inseriti dall’utente. Tutti gli amministratori di sistema devono essere esperti nell’uso della shell. Come ormai sappiamo, la Bourne Again Shell (Bash) è la shell de facto per la stragrande maggioranza delle distribuzioni Linux.

Una volta avviata, la prima cosa che fa Bash - o qualsiasi altra shell - è eseguire una serie di script di avvio. Questi script personalizzano l’ambiente di sessione. Sono disponibili sia script a livello di sistema sia specifici dell’utente. Possiamo inserire le nostre preferenze o impostazioni personali che meglio si adattano alle esigenze dei nostri utenti in questi script sotto forma di variabili, alias e funzioni.

La serie esatta di file di avvio dipende da un parametro molto importante: il tipo di shell. Diamo uno sguardo alle varie shell esistenti.

Tipi di shell: Interattiva vs Non-interattiva ; Login vs Senza-Login

Per cominciare, chiariamo i concetti di interattivo e accesso nel contesto delle shell:

Shell Interattive / Non-interattive

Ci si riferisce all’interazione che avviene tra l’utente e la shell: l’utente fornisce l’input digitando i comandi nel terminale utilizzando la tastiera; la shell fornisce l’output visualizzando messaggi sullo schermo.

Shell con Login / Senza-Login

Ci si riferisce all’evento in cui un utente accede a un sistema informatico fornendo le sue credenziali, come nome utente e password.

Sia le shell interattive sia quelle non-interattive possono essere con login o senza-login e ogni possibile combinazione di questi tipi ha i suoi usi specifici.

Le shell di Login interattive vengono eseguite quando gli utenti accedono al sistema e vengono utilizzate per personalizzare le configurazioni degli utenti in base alle loro esigenze. Un buon esempio di questo tipo di shell sarebbe quella di un gruppo di utenti appartenenti allo stesso dipartimento che necessitano di un particolare set di variabili nelle loro sessioni.

Con shell interattive non di login si fa riferimento a qualsiasi altra shell aperta dall’utente dopo aver effettuato l’accesso al sistema. Gli utenti utilizzano queste shell durante le sessioni per eseguire attività di manutenzione e amministrative come l’impostazione di variabili, l’ora, la copia di file, la scrittura di script, ecc.

D’altra parte, le shell non interattive non richiedono alcun tipo di interazione umana. Pertanto, queste shell non chiedono input all’utente e il loro output, se presente, nella maggior parte dei casi viene scritto in un registro.

Le shell di login non interattive sono piuttosto rare e poco pratiche. I loro usi sono praticamente inesistenti e ne parleremo solo per motivi di comprensione del comportamento della shell. Alcuni strani esempi includono la forzatura di uno script da eseguire da una shell di login con /bin/bash --login <some_script> o il piping dell’output standard (stdout) di un comando nello standard input (stdin) di una connessione ssh:

<some_command> | ssh <some_user>@<some_server>

Per quanto riguarda la shell non interattiva non di login non c’è né interazione né login per conto dell’utente, quindi ci riferiamo qui all’uso di script automatizzati. Questi script vengono utilizzati principalmente per eseguire attività amministrative e di manutenzione ripetitive come quelle incluse in cronjob. In questi casi, bash non legge alcun file di avvio.

Apertura di un Terminale

Quando ci troviamo in un ambiente desktop possiamo aprire un’applicazione terminale o passare a una delle console di sistema. Pertanto, una nuova shell è una shell pts quando viene aperta da un emulatore di terminale nella GUI o una shell tty quando viene eseguita da una console di sistema. Nel primo caso non abbiamo a che fare con un terminale ma con un emulatore di terminale. Come parte delle sessioni grafiche, gli emulatori di terminale come gnome-terminal o konsole sono molto ricchi di funzionalità e facili da usare rispetto ai terminali con interfaccia utente basata su testo. Emulatori di terminale meno ricchi di funzionalità includono, tra gli altri, XTerm e sakura.

Usando le combinazioni di Ctrl+Alt+F1-F6 possiamo andare ai login della console che aprono una shell di login interattiva basata su testo. Ctrl+Alt+F7 ci riporterà nelle sessione desktop (GUI).

Note

tty sta per teletypewritter; pts sta per pseudo terminal slave. Per ulteriori informazioni: man tty e man pts.

Avviare una Shell con bash

Dopo il login, digitare bash in un terminale per aprire una nuova shell. Tecnicamente, questa shell è un processo figlio della shell corrente.

Durante l’avvio del processo figlio bash, possiamo specificare vari parametri per definire quale tipo di shell vogliamo avviare. Ecco alcune importanti opzioni di invocazione di bash:

bash -l or bash --login

invocherà una shell di login.

bash -i

invocherà una shell interattiva.

bash --noprofile

insieme alle shell di login, ignoreranno sia il file di avvio a livello di sistema /etc/profile che i file di avvio a livello utente ~/.bash_profile, ~/.bash_login e ~ /.profile.

bash --norc

ignorerà sia il file di avvio a livello di sistema / etc / bash.bashrc che il file di avvio a livello utente ~/.bashrc.

bash --rcfile <file>

ignorerà sia il file di avvio a livello di sistema /etc/bash.bashrc che il file di avvio a livello utente ~/.bashrc.

Discuteremo i vari file di avvio in seguito.

Avvio di Shell con su e sudo

Attraverso l’uso di questi due programmi simili possiamo ottenere specifici tipi di shell:

su

Cambia l’ID utente o diventa superutente (root). Con questo comando possiamo richiamare sia shell di login che shell non di login:

  • su - user2, su -l user2 o su --login user2 avvierà una shell di login interattiva come user2.

  • su user2 avvierà una shell interattiva non di login come user2.

  • su - root o su - avvieranno una shell di login interattiva come root.

  • su root o su avvieranno una shell interattiva non di login come root.

sudo

Consente di eseguire i comandi come un altro utente (incluso il supersuser). Poiché questo comando viene utilizzato principalmente per ottenere temporaneamente i privilegi di root, l’utente che lo utilizza deve trovarsi nel file sudoers. Per aggiungere utenti a sudoers dobbiamo diventare root ed eseguire:

root@debian:~# usermod -aG sudo user2

Proprio come su, sudo ci permette di invocare sia shell di login che shell non di login:

  • sudo su - user2, sudo su -l user2 o sudo su --login utente2 avvieranno una shell di login interattiva come user2.

  • sudo su user2 avvierà una shell interattiva non di login come user2.

  • sudo -u user2 -s avvierà una shell interattiva non di login come user2.

  • sudo su - root o sudo su - avvierà una shell di login interattiva come root.

  • sudo -i avvierà una shell di login interattiva come root.

  • sudo -i <some_command> avvierà una shell di login interattiva come root, eseguirà il comando e tornerà all’utente originale.

  • sudo su root ` o `sudo su avvieranno una shell interattiva non di login come root.

  • sudo -s o sudo -u root -s avvierà una shell non di login come root.

Quando si usa su o sudo è importante considerare il nostro caso particolare per l’avvio di una nuova shell: abbiamo bisogno dell’ambiente dell’utente di destinazione, o no? Se è così, useremmo le opzioni che invocano le shell di login; in caso contrario, quelli che invocano shell non di login.

Che Tipi di Shell Abbiamo?

Per scoprire su quale tipo di shell stiamo lavorando, possiamo digitare echo $0 nel terminale e ottenere il seguente output:

Login interattivo

-bash o -su

Non-login interattivo

bash o /bin/bash

Non-interattivo non-login (scripts)

<nome_dello_script>

Quante Shell abbiamo?

Per vedere quante shell bash abbiamo attive e funzionanti nel sistema, possiamo usare il comando ps aux | grep bash:

user2@debian:~$ ps aux | grep bash
user2       5270  0.1  0.1  25532  5664 pts/0    Ss   23:03   0:00 bash
user2       5411  0.3  0.1  25608  5268 tty1     S+   23:03   0:00 -bash
user2       5452  0.0  0.0  16760   940 pts/0    S+   23:04   0:00 grep --color=auto bash

user2 in debian ha effettuato l’accesso a una sessione GUI (o X Window System) e ha aperto gnome-terminal, quindi ha premuto Ctrl+Alt+F1 per entrare in una sessione di terminale tty. Infine, è tornato alla sessione della GUI premendo Ctrl+Alt+F7 e digitato il comando ps aux | grep bash. Pertanto, l’output mostra una shell interattiva non di login tramite l’emulatore di terminale (pts/0) e una shell di login interattiva tramite l’appropriato terminale basato su testo (tty1). Nota anche come l’ultimo campo di ogni riga (il comando) sia bash per la prima e -bash per la seconda.

Da Dove le Shell Ottengono la Loro Configurazione: File di Avvio

Bene, ora che conosciamo i tipi di shell che possiamo trovare in un sistema Linux, è giunto il momento di vedere quali file di avvio vengano eseguiti da quale shell. Notare che gli script globali o globali di sistema sono posti nella directory /etc/, mentre quelli locali o a livello utente si trovano nella home dell’utente (~). Inoltre, quando è presente più di un file da cercare, una volta trovato ed eseguito gli altri vengono ignorati. Esplora e studia questi file tu stesso con il tuo editor di testo preferito o digitando less <startup_file>.

Note

I file di avvio possono essere suddivisi in specifici di Bash (quelli limitati solo alle configurazioni e ai comandi di bash) e generali (relativi alla maggior parte delle shell).

Shell Interattive di Login
Livello Globale
/etc/profile

Questo è il file .profile a livello di sistema per la shell Bourne e per le shell compatibili con Bourne (bash inclusa). Attraverso una serie di istruzioni if, questo file imposta di conseguenza un numero di variabili come PATH e PS1 così come il reperimento - qualora esistano - sia del file /etc/bash.bashrc sia di altri file all’interno della directory /etc/profile.d.

/etc/profile.d/*

Questa directory può contenere script che vengono eseguiti da /etc/profile.

Livello Locale
~/.bash_profile

Questo file specifico di Bash viene utilizzato per configurare l’ambiente utente. Può anche essere usato per eseguire sia ~/.bash_login sia ~/.profile.

~/.bash_login

Anch’esso specifico per Bash, questo file verrà eseguito solo se non c’è un file ~/.bash_profile. Il suo nome suggerisce che dovrebbe essere usato per eseguire i comandi necessari all’accesso.

~/.profile

Questo file non è specifico di Bash e viene preso in considerazione solo se non esistono né ~/.bash_profile né ~/.bash_login, il che è generalmente la norma. Quindi, lo scopo principale di ~/.profile è quello di controllare se una shell Bash è in esecuzione e, in tal caso, di cercare se esiste ~/.bashrc. Di solito imposta la variabile PATH in modo che includa la directory privata ~/bin dell’utente, se esiste.

~/.bash_logout

Se esiste, questo file specifico di Bash esegue alcune operazioni di pulizia quando si esce dalla shell. Ciò può essere utile in casi come quelli dove si attivano sessioni remote.

Esplorazione dei File di Configurazione di una Shell di Login Interattiva

Mostriamo alcuni di questi file in azione modificando /etc/profile e /home/user2/.profile. Aggiungeremo a ciascuno una riga per ricordarci il file in esecuzione:

root@debian:~# echo 'echo Hello from /etc/profile' >> /etc/profile
root@debian:~# echo 'echo Hello from ~/.profile' >> ~/.profile
Note

Due operatori di reindirizzamento >> aggiungono l’output di un comando in un file esistente, senza sovrascriverlo. Se il file non esiste, tuttavia, verrà creato.

Quindi, attraverso l’output dei rispettivi comandi echo sapremo quando ciascuno di questi file viene letto ed eseguito. Per dimostrarlo, vediamo cosa succede quando user2 accede tramite ssh da un’altra macchina:

user2@debian:~$ ssh user2@192.168.1.6
user2@192.168.1.6's password:
Linux debian 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Nov 27 19:57:19 2018 from 192.168.1.10
Hello from /etc/profile
Hello from /home/user2/.profile

Come mostrano le ultime due righe, ha funzionato. Inoltre, nota tre cose:

  • Il file globale è stato eseguito per primo.

  • Non c’erano file .bash_profile o .bash_login nella directory home di user2.

  • La tilde (~) espansa al percorso assoluto del file (/home/utente2/.profile).

Shell Interattiva Non di Login
Livello Globale
/etc/bash.bashrc

Questo è il file .bashrc a livello di sistema per le shell interattive bash. Attraverso la sua esecuzione bash si assicura che venga eseguito in modo interattivo, controlla la dimensione della finestra dopo ogni comando (aggiornando i valori di LINES e COLUMNS se necessario) e imposta alcune variabili.

Livello Locale
~/.bashrc

Oltre a svolgere attività simili a quelle descritte per /etc/bash.bashrc a livello utente (come controllare la dimensione della finestra o se viene eseguito in modo interattivo), questo file specifico di Bash di solito imposta alcune variabili di cronologia e esegue ~/.bash_aliases se esiste. A parte ciò, questo file viene normalmente utilizzato per memorizzare gli alias e le funzioni specifich degli utenti.

Allo stesso modo, vale anche la pena notare che ~/.bashrc viene letto se bash rileva che <stdin> è una connessione di rete (come nel caso della connessione Secure Shell (SSH) nell’esempio sopra) .

Esplorazione dei File di Configurazione della Shell Interattiva non di Login

Ora modifichiamo /etc/bash.bashrc e /home/user2/.bashrc:

root@debian:~# echo 'echo Hello from /etc/bash.bashrc' >> /etc/bash.bashrc
root@debian:~# echo 'echo Hello from ~/.bashrc' >> ~/.bashrc

E questo è ciò che accade quando user2 avvia una nuova shell:

user2@debian:~$ bash
Hello from /etc/bash.bashrc
Hello from /home/user2/.bashrc

Anche in questo caso, i due file sono stati letti ed eseguiti.

Warning

Ricorda, a causa dell’ordine in cui vengono eseguiti i file, i file locali hanno la precedenza su quelli globali.

Shell Non-Interattive di Login

Una shell non interattiva con le opzioni -l o --login è costretta a comportarsi come una shell di login e quindi i file di avvio da eseguire saranno gli stessi delle shell di login interattive.

Per dimostrarlo, scriviamo un semplice script e rendiamolo eseguibile. Non includeremo alcun shebang perché invocheremo l’eseguibile bash (/bin/bash con l’opzione di login) dalla riga di comando.

  1. Creiamo lo script test.sh contenente la riga echo 'Hello from a script' in modo da poter provare che lo script viene eseguito correttamente:

    user2@debian:~$ echo "echo 'Hello from a script'" > test.sh
  2. Rendiamo eseguibile il nostro script:

    user2@debian:~$ chmod +x ./test.sh
  3. Infine, invochiamo bash con l’opzione -l per eseguire lo script:

    user2@debian:~$ bash -l ./test.sh
    Hello from /etc/profile
    Hello from /home/user2/.profile
    Hello from a script

    Funziona! Prima di eseguire lo script, è stato eseguito il login e sono stati eseguiti sia /etc/profile che ~/.profile.

Note

Impareremo a conoscere shebang e tutti gli altri aspetti dello scripting di shell nelle prossime lezioni.

Facciamo ora lo standard output (stdout) del comando echo nello standard input (stdin) di una connessione ssh per mezzo di una pipe (|):

user2@debian:~$ echo "Hello-from-a-noninteractive-login-shell" | ssh user2@192.168.1.6
Pseudo-terminal will not be allocated because stdin is not a terminal.
user2@192.168.1.6's password:
Linux debian 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Hello from /etc/profile
Hello from /home/user2/.profile
-bash: line 1: Hello-from-a-noninteractive-login-shell: command not found

Di nuovo, vengono eseguiti /etc/profile e ~/.profile. Oltre a questo, la prima e l’ultima riga dell’output sono abbastanza indicative per quanto riguarda il comportamento della shell.

Shell Non-Interattiva non di Login

Gli script non leggono nessuno dei file sopra elencati ma cercano la variabile d’ambiente BASH_ENV, espanderne il valore se necessario e usarla come nome di un file di avvio per leggere ed eseguire comandi. Impareremo di più sulle variabili d’ambiente nella prossima lezione.

Come accennato in precedenza, tipicamente /etc/profile e ~/.profile si assicurano che sia /etc/bash.bashrc sia ~/.bashrc vengano eseguiti dopo un login riuscito. L’output del seguente comando mostra questo fenomeno:

root@debian:~# su - user2
Hello from /etc/bash.bashrc
Hello from /etc/profile
Hello from /home/user2/.bashrc
Hello from /home/user2/.profile

Tenendo presente le righe precedentemente aggiunte agli script di avvio — e invocando una shell di login interattiva a livello utente con su - user2 — le quattro righe di output possono essere spiegate come segue:

  1. Hello from /etc/bash.bashrc indica che /etc/profile ha eseguito /etc/bash.bashrc.

  2. Hello from /etc/profile indica che /etc/profile è stato completamente letto ed eseguito.

  3. Hello from /home/user2/.bashrc indica che ~/.profile ha eseguito ~/.bashrc.

  4. Hello from /home/user2/.profile indica che ~/.profile è stato completamente letto ed eseguito.

Nota come con su - <username> (anche su -l <username> e su --login <username>) garantiamo l’invocazione di una shell di login, mentre su <username> avrebbe solo invocato /etc/bash.bashrc e ~/.bashrc.

Sourcing di File

Nelle sezioni precedenti abbiamo discusso del fatto che alcuni script di avvio includono o eseguono altri script. Questo meccanismo è chiamato "sourcing" ed è spiegato in questa sezione.

Sourcing di File con .

Il punto (.) si trova normalmente nei file di avvio.

Nel file .profile del nostro server Debian possiamo trovare, per esempio, il seguente blocco:

    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi

Abbiamo già visto come l’esecuzione di uno script possa portare a quella di un altro. Pertanto, l’istruzione if garantisce che il file $HOME/.bashrc — se esiste (-f) — verrà prelevato (cioè letto ed eseguito) al login:

. "$HOME/.bashrc"
Note

Come impareremo nella prossima lezione, $HOME è una variabile d’ambiente che si espande nel percorso assoluto della directory home dell’utente.

Inoltre, possiamo usare il carattere . ogni volta che abbiamo modificato un file di avvio e vogliamo rendere effettive le modifiche senza un riavvio. Per esempio possiamo:

  • aggiungere un alias a ~/.bashrc:

    user2@debian:~$ echo "alias hi='echo We salute you.'" >> ~/.bashrc
Warning

Quando si invia l’output di un comando in un file, ricordarsi di non confondere accodare (>>) con sovrascrivere (>).

  • visualizza l’ultima riga di ~/.bashrc per controllare che tutto sia andato bene:

    user2@debian:~$ tail -n 1 !$
    tail -n 1 ~/.bashrc
    alias hi='echo We salute you.'
    Note

    !$ si espande all’ultimo argomento del comando precedente, nel nostro caso: ~/.bashrc.

  • richiama (source) il file a mano:

    user2@debian:~$ . ~/.bashrc
  • e richiama l’alias per dimostrare che funziona:

    user2@debian:~$ hi
    We salute you.
Note

Fare riferimento alla lezione successiva per informazioni su alias e variabili.

Richiamare ( Sourcing ) i file con source

Il comando source è equivalente di .. Quindi per richiamare ~/.bashrc possiamo anche fare in questo modo:

user2@debian:~$ source ~/.bashrc

L’Origine dei File di Avvio della Shell: SKEL

SKEL è una variabile il cui valore è il percorso assoluto della directory skel. Questa directory funge da modello per la struttura del file system delle directory home degli utenti. Include i file che verranno ereditati da qualsiasi nuovo account utente creato (inclusi, ovviamente, i file di configurazione per le shell). SKEL e altre variabili correlate sono memorizzate in /etc/adduser.conf, che è il file di configurazione per adduser:

user2@debian:~$ grep SKEL /etc/adduser.conf
# The SKEL variable specifies the directory containing "skeletal" user
SKEL=/etc/skel
# If SKEL_IGNORE_REGEX is set, adduser will ignore files matching this
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"

SKEL è impostato su /etc/skel; quindi, gli script di avvio che configurano le nostre shell si trovano qui:

user2@debian:~$ ls -a /etc/skel/
.  ..  .bash_logout  .bashrc  .profile
Warning

Ricorda, i file che iniziano con . Sono nascosti, quindi dobbiamo usare ls -a per vederli quando si elencano i contenuti della directory.

Creiamo ora una directory in /etc/skel in cui memorizzare i file per i nuovi utenti:

  1. Come root ci spostiamo in /etc/skel:

    root@debian:~# cd /etc/skel/
    root@debian:/etc/skel#
  2. Visualizziamo il contenuto:

    root@debian:/etc/skel# ls -a
    .  ..  .bash_logout  .bashrc  .profile
  3. Creiamo la nostra directory e controlliamo che tutto sia andato come previsto:

    root@debian:/etc/skel# mkdir my_personal_scripts
    root@debian:/etc/skel# ls -a
    .  ..  .bash_logout  .bashrc  my_personal_scripts  .profile
  4. Adesso cancelliamo user2 insieme alla sua directory home:

    root@debian:~# deluser --remove-home user2
    Looking for files to backup/remove ...
    Removing files ...
    Removing user `user2' ...
    Warning: group `user2' has no more members.
    Done.
  5. Aggiungiamo di nuovo user2 in modo che ottenga una nuova directory home:

    root@debian:~# adduser user2
    Adding user `user2' ...
    Adding new group `user2' (1001) ...
    Adding new user `user2' (1001) with group `user2' ...
    Creating home directory `/home/user2' ...
    Copying files from `/etc/skel' ...
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully
    Changing the user information for user2
    Enter the new value, or press ENTER for the default
    	Full Name []:
    	Room Number []:
    	Work Phone []:
    	Home Phone []:
    	Other []:
    Is the information correct? [Y/n] y
  6. Infine, accediamo come user2 ed elenchiamo tutti i file in /home/user2 per vedere se tutto è andato come previsto:

    root@debian:~# su - user2
    user2@debian:~$ pwd
    /home/user2
    user2@debian:~$ ls -a
    .  ..  .bash_history  .bash_logout  .bashrc  my_personal_scripts  .profile

    Tutto come previsto.

Esercizi Guidati

  1. Studia come sono state avviate le shell sotto la colonna “Shell Avviata con…​” e completa con le informazioni richieste:

    Shell Avviata con…​ Interactive? Login? Risultato di echo $0

    sudo ssh user2@machine2

    Ctrl+Alt+F2

    su - user2

    gnome-terminal

    Un utente normale utilizza konsole per avviare un’istanza di sakura

    Uno script chiamato test.sh contenente il comando echo $0

  2. Scrivi i comandi su e sudo per avviare la shell specificata:

    Shell di login interattiva come user2

    su:

    sudo:

    Shell di login interattiva come root

    su:

    sudo:

    Shell non di login interattiva come root

    su:

    sudo:

    Shell non di login interattiva come user2

    su:

    sudo:

  3. Quale file di avvio viene letto quando viene avviata la shell presente in “Tipo di Shell”?

    Tipo di Shell /etc/profile /etc/bash.bashrc ~/.profile ~/.bashrc

    Shell di login interattiva come user2

    Shell di login interattiva come root

    Shell non di login interattiva come root

    Shell non di login interattiva come user2

Esercizi Esplorativi

  1. In Bash possiamo scrivere una semplice funzione Hello world! includendo il seguente codice in un file vuoto:

    function hello() {
    	 echo "Hello world!"
    }
    • Che cosa dovremmo fare dopo per rendere la funzione disponibile alla shell?

    • Una volta che è disponibile per la shell corrente, come la invocheresti?

    • Per automatizzare le cose, in quale file metteresti la funzione e la sua invocazione in modo che venga eseguita quando user2 apre un terminale da una sessione X Window? Che tipo di Shell è?

    • In quale file metteresti la funzione e la sua invocazione in modo che venga eseguita quando root lancia una nuova Shell interattiva indipendentemente dal fatto che sia login o meno?

  2. Dai un’occhiata al seguente script di base bash Hello world! :

    #!/bin/bash
    
    #hello_world: a simple bash script to discuss interaction in scripts.
    
    echo "Hello world!"
    • Supponiamo di rendere eseguibile lo script e di eseguirlo. Sarebbe uno script interattivo? Perché?

    • Che cosa rende interattivo uno script?

  3. Immagina di aver cambiato i valori di alcune variabili in ~/.bashrc e vuoi che tali modifiche abbiano effetto senza un riavvio. Dalla tua home directory, come puoi ottenerlo in due modi diversi?

  4. John ha appena avviato una sessione X Window su un server Linux. Apre un emulatore di terminale per svolgere alcune attività amministrative ma, sorprendentemente, la sessione si blocca e ha bisogno di aprire una shell di testo.

    • Come può aprire quella shell tty?

    • Quali file di avvio verranno richiamati?

  5. Linda è un utente di un server Linux. Chiede gentilmente all’amministratore di avere un file ~/.bash_login in modo che possa avere l’ora e la data stampate sullo schermo quando accede. Ad altri utenti piace l’idea e seguono l’esempio. L’amministratore ha difficoltà a creare il file per tutti gli altri utenti sul server, quindi decide di aggiungere una nuova policy e di creare ~/.bash_login per tutti i potenziali nuovi utenti. Come può l’amministratore svolgere tale compito?

Sommario

In questa lezione abbiamo imparato:

  • Le shell impostano l’ambiente degli utenti in un sistema Linux.

  • Bash è la shell numero uno nelle distribuzioni GNU/Linux.

  • Il primo lavoro che una shell esegue è quello di leggere ed eseguire uno o più file di avvio.

  • I concetti di interattivo e login relativi alle shell.

  • Come avviare diversi tipi di shell con bash, su, sudo e kbd: [Ctrl+Alt+F1]-F6.

  • Come controllare il tipo di shell con echo $0.

  • I file di avvio locali ~/.bash_profile, ~/.profile, ~/.bash_login, ~/.bash_logout e ~/.bashrc.

  • I file di avvio globali /etc/profile, /etc/profile.d/*, /etc/bash.bashrc.

  • I file locali hanno la precedenza su quelli globali.

  • Come reindirizzare l’output di un comando con > (sovrascrivi) e >> (accoda).

  • Il significato della directory skel.

  • Come richiamare i file.

Comandi utilizzati in questa lezione:

bash

Avvia una nuova Shell.

su

Avvia una nuova Shell.

sudo

Avvia una nuova Shell.

usermod

Modifica un account utente.

echo

Visualizza una riga di testo.

ps

Mostra un’istantanea dei processi in corso.

less

Un paginatore di file lunghi.

ssh

Avvia una connessione Open SSH (remotamente).

chmod

Modifica i bit di modalità di un file, per esempio, renderlo eseguibile.

grep

Stampa le linee che corrispondono a un pattern.

ls

Elenca il contenuto della directory.

cd

Cambia directory.

mkdir

Crea una directory.

deluser

Elimina un utente.

adduser

Aggiunge un utente.

.

Richiama (Source) a file.

source

Richiama (Source) a file.

tail

Visualizza l’ultima parte di un file.

Risposte agli Esercizi Guidati

  1. Studia come sono state avviate le shell sotto la colonna “Shell Avviata con…​” e completa con le informazioni richieste:

    Shell Avviata con…​ Interactive? Login? Risultato di echo $0

    sudo ssh user2@machine2

    Sì

    Sì

    -bash

    Ctrl+Alt+F2

    Sì

    Sì

    -bash

    su - user2

    Sì

    Sì

    -bash

    gnome-terminal

    Sì

    No

    bash

    Un utente normale utilizza konsole per avviare un’istanza di sakura

    Sì

    No

    /bin/bash

    Uno script chiamato test.sh contenente il comando echo $0

    No

    No

    ./test.sh

  2. Scrivi i comandi su e sudo per avviare la shell specificata:

    Shell di login interattiva come user2
    su

    su - user2, su -l user2 o su --login user2

    sudo

    sudo su - user2, sudo su -l user2 o sudo su --login user2

    Shell di login interattiva come root
    su

    su - root or su -

    sudo

    sudo su - root, sudo su - o sudo -i

    Shell non di login interattiva come root
    su

    su root o su

    sudo

    sudo su root, sudo su, sudo -s o sudo -u root -s

    Shell non di login interattiva come user2
    su

    su user2

    sudo

    sudo su user2 o sudo -u user2 -s

  3. Quale file di avvio viene letto quando viene avviata la shell presente in “Tipo di Shell”?

    Tipo di Shell /etc/profile /etc/bash.bashrc ~/.profile ~/.bashrc

    Shell di login interattiva come user2

    Sì

    Sì

    Sì

    Sì

    Shell di login interattiva come root

    Sì

    Sì

    No

    No

    Shell non di login interattiva come root

    No

    Sì

    No

    No

    Shell non di login interattiva come user2

    No

    Sì

    No

    Sì

Risposte agli Esercizi Esplorativi

  1. In Bash possiamo scrivere una semplice funzione Hello world! includendo il seguente codice in un file vuoto:

    function hello() {
    	 echo "Hello world!"
    }
    • Che cosa dovremmo fare dopo per rendere la funzione disponibile alla shell?

      Per rendere la funzione disponibile alla shell corrente, dobbiamo generare un file che la includa.

    • Una volta che è disponibile per la shell corrente, come la invocheresti?

      La invocheremmo digitando il suo nome nel terminale.

    • Per automatizzare le cose, in quale file metteresti la funzione e la sua invocazione in modo che venga eseguita quando user2 apre un terminale da una sessione X Window? Che tipo di Shell è?

      Il miglior file da utilizzare è /home/user2/.bashrc. La shell invocata sarebbe una shell interattiva non di login.

    • In quale file metteresti la funzione e la sua invocazione in modo che venga eseguita quando root lancia una nuova Shell interattiva indipendentemente dal fatto che sia login o meno?

      In /etc/bash.bashrc poiché questo file viene eseguito per tutte le shell interattive, indipendentemente dal fatto che siano di login o meno.

  2. Dai un’occhiata al seguente script di base bash Hello world! :

    #!/bin/bash
    
    #hello_world: a simple bash script to discuss interaction in scripts.
    
    echo "Hello world!"
    • Supponiamo di rendere eseguibile lo script e di eseguirlo. Sarebbe uno script interattivo? Perché?

      No, poiché non vi è alcuna interazione umana e nessun comando viene digitato dall’utente.

    • Che cosa rende interattivo uno script?

      Il fatto che richieda l’input dell’utente.

  3. Immagina di aver cambiato i valori di alcune variabili in ~/.bashrc e vuoi che tali modifiche abbiano effetto senza un riavvio. Dalla tua home directory, come puoi ottenerlo in due modi diversi?

    $ source .bashrc

    o

    $ . .bashrc
  4. John ha appena avviato una sessione X Window su un server Linux. Apre un emulatore di terminale per svolgere alcune attività amministrative ma, sorprendentemente, la sessione si blocca e ha bisogno di aprire una shell di testo.

    • Come può aprire quella shell tty?

      Potrebbe farlo premendo Ctrl+Alt+F1-F6 per entrare in una delle sei shell tty.

    • Quali file di avvio verranno richiamati?

      /etc/profile
      /home/john/.profile

  5. Linda è un utente di un server Linux. Chiede gentilmente all’amministratore di avere un file ~/.bash_login in modo che possa avere l’ora e la data stampate sullo schermo quando accede. Ad altri utenti piace l’idea e seguono l’esempio. L’amministratore ha difficoltà a creare il file per tutti gli altri utenti sul server, quindi decide di aggiungere una nuova policy e di creare ~/.bash_login per tutti i potenziali nuovi utenti. Come può l’amministratore svolgere tale compito?

    Potrebbe ottenerlo inserendo .bash_login nella directory /etc/skel.

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

Prossima Lezione

105.1 Personalizzare e utilizzare l'ambiente di shell (105.1 Lezione 2)

Leggi la prossima Lezione

Linux Professional Institute Inc. Tutti i diritti riservati. Visita il sito Learning Materials: https://learning.lpi.org
Quest'opera è sotto la licenza 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License'.

LPI è una organizzazione non-profit.

© 2022 Linux Professional Institute (LPI) è lo standard di certificazione globale e l'organizzazione di supporto alla carriera per i Professionisti Open Source. Con più di 200,000 titolari di Certificazione, è il primo e il più grande ente di Certificazione Open Source e Linux vendor-neutral. LPI ha professionisti certificati in oltre 180 Paesi, offre i suoi Esami in più lingue e ha centinaia di Partner di formazione in tutto il mondo.

La nostra missione è promuovere l'uso dell'Open Source supportando le persone che vi lavorano.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contattaci
  • Privacy & Cookie Policy

Trovato un errore? Per favore scrivi a contattaci.

© 1999–2022 The Linux Professional Institute Inc. Tutti i diritti riservati.