20 BASH – Manipolazione files di testo

4 Marzo, 2024 (15:50) | BASH, Linux | By: sargonsei

20 BASH – Manipolazione files di testo

20.1 Script BASH – Scrivere l’output in un file di testo
L’output di un comando BASH è di due tipi: Output standard (canale 1) che contiene esclusivamente l’effetto del comando, ed Errore standard (canale 2) che contiene esclusivamente messaggi di errore ed avvisi vari che accompagnano l’esecuzione del comando stesso. Di default, l’output del canale 1 può essere reindirizzato verso un file di testo frapponendo l’operatore [>] (senza parentesi quadre) fra il comando BASH ed il nome del file di testo che si desidera che contenga l’output del comando stesso; l’output del canale 2 (Error standard) viene indirizzato sul terminale a prescindere di dove sia stato reindirizzato l’output del canale 1 (Output standard). Per far confluire in un file di testo avvisi e messaggi di errore che, di default, verrebbero visualizzati sul canale 2, non basta reindirizzare l’output del canale 1 verso un file di testo, ma occorre altresì indirizzare l’output del canale 2 verso il canale 1; questo effetto si ottiene ponendo l’operatore [2>&1] (senza parentesi quadre) in coda al comando suddetto.
#!/bin/bash
# Per eseguire lo script digitare ./ seguito dal nome dello script, Poi digitare [invio]
echo "Prima riga" > testo.txt # Crea il file di testo 'testo.txt' contenente "Prima riga".
# ^ Se 'testo.txt' esiste già, verrà sovrascritto. ^
echo "Riga seguente" >> testo.txt # Aggiunge la riga "Riga seguente" in coda al file di testo 'testo.txt'.
# ^ Se 'testo.txt' non esiste, verrà creato. ^

20.2 BASH – Script che accetta input da tastiera e scrive l’output in un file di testo
Questo script chiede all’utente di digitare il nominativo ed i dati corrispondenti al nominativo, li mostra all’utente, chiede se li si vuol conservare e, in caso affermativo, li salva all’interno di un file di testo.

#!/bin/bash
: || { Accetta dati da mettere in un elenco
 Per avviare questo script BASH chiamato [creaElenco.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./creaElenco.txt
}
Acquisire () # Inizio funzione acquisizione dati da tastiera
{ echo "Inserimento dati. Ad ogni richiesta, digitare la risposta e premere il tasto [Invio]."
    read -p "Nome? " A1
    read -p "Cognome? " A2
    read -p "Indirizzo residenza? " A3
    read -p "Indirizzo post@elettronica? " A4
    read -p "Numero di telefono? " A5
    A0="$A1 § $A2 § $A3 § $A4 § $A5"
} # Questa è l'ultima riga in cui si dichiara la funzione Acquisire
echo "Questa applicazione chiede nome, cognome, indirizzo, mail, e numero di telefono di persone da inserire in una lista"
let E1=1; echo "Cosa vuoi fare?"
while [ $E1 == 1 ]; do # Inizio istruzioni che verranno eseguite finché la condizione E1=1 è vera
    echo "[1] Inserire un nominativo."
    echo "[Qualsiasi altro tasto] Chiudere questa applicazione."
    read -s -n1 -p "Premi il tasto corrispondente." E1 # Acquisisce scelta dell'utente.
    echo
    if [ "$E1" == "" ]; then # Cosa fare qualora la variabile E1 sia vuota
        let E1=0
        # echo "La variabile E1 era vuota; è stata posta pari a 0"
    fi
    if [ $E1 == 1 ]; then # Cosa fare qualora E1=1
        Acquisire # Comando per far eseguire la funzione Acquisire
        echo "Verifica la correttezza dei dati"
        echo $A0
        read -s -n1 -p "Se vuoi salvarli, premi il tasto [1], altrimenti premi qualsiasi altro tasto." E2
        echo; E0="NON è "
        if [ "$E2" == "" ]; then let E2=0; fi # Se variabile E2 è vuota viene posta pari a 0
        if [ "$E2" == 1 ]; then
            echo $A0 >> elenco.txt # Inserisce i dati nel file di testo [elenco.txt]
            E0="È "
        fi
        echo $E0"stata aggiunta al testo del file [elenco.txt]."
        echo "Ed ora cosa vuoi fare?"
    fi
done
exit 0

19 BASH – Variabili e calcoli

4 Marzo, 2024 (15:49) | BASH, Linux | By: sargonsei

19 BASH – Variabili e calcoli

Le variabili BASH non sono tipizzate, nè all’interno di una shell, nè all’interno di uno script. Come conseguenza di ciò, se non diversamente specificato in ogni singola istruzione, vengono trattate come variabili stringa e, anche se nell’istruzione è specificato che una variabile deve contenere il risultato di un’operazione matematica, essa può contenere solo numeri interi, troncando tutti i decimali. Per specificare che il contenuto numerico di una variabile deve essere trattato come una cifra, occorre far precedere la variabile dal comando let seguito da uno spazio. Seguono alcuni esempi.
A=1239/10; echo $A # Visualizza sullo schermo il valore di $A che, in questo caso, è 1239/10
let A=1239/10; echo $A # Visualizza sullo schermo il valore di $A che, in questo caso, è 123
A=1239/10; B=${A/12/BB}; echo "$A $B" # Visualizza sullo schermo 1239/10 BB39/10
let A=1239/10; B=${A/12/BB}; echo "$A $B" # Visualizza sullo schermo 123 BB3

AA=10 BB=20 CC=30; DD=$AA$BB$CC; echo $DD # Visualizza 102030
AA=10 BB=20 CC=30; let DD=$AA$BB$CC; echo $DD # Visualizza 102030
AA=10 BB=20 CC=30; DD=$AA+$BB+$CC; echo $DD # Visualizza 10+20+30
AA=10 BB=20 CC=30; let DD=$AA+$BB+$CC; echo $DD # Visualizza 60
AA=10 BB=20 CC=30; DD=$(($AA+$BB+$CC)); echo $DD # Visualizza 60
let AA=3+3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 6
let AA=3-3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 0
let AA=3*3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 9
let AA=3/3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 1
let AA=3**3; echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è (3 al cubo)=27
(( AA=3*(2+4)-8/(5-3)-3**2 )); echo $AA # Calcola e visualizza il contenuto della variabile AA, che in questo caso è 5
AA=3; echo $(($AA*4-30/$AA+5)) # Visualizza il risultato dell'espressione ($AA*4-30/$AA+5) che, in questo, caso è 7

Collegamento esterno a “Comandi per le operazioni matematiche
http://www.pluto.it/files/ildp/guide/abs/mathc.html

18 BASH – Variabili e stringhe

4 Marzo, 2024 (15:49) | BASH, Linux | By: sargonsei

18 BASH – Variabili e stringhe
Per BASH, una Variabile è un’insieme di caratteri alfanumerici associato ad un “contenitore”; L’interprete BASH, quando incontra la variabile, si comporta come se avesse incontrato ciò che è contenuto nel contenitore a cui la variabile è associata. Per “richiamare”, una variabile, occorre anteporre il simbolo ${ e posporre il suffisso } all’insieme di caratteri alfanumerici che la contraddistingue. Le parentesi graffe sono obbligatorie solo nel caso in cui la loro assenza generi ambiguità.
Vediamo qualche esempio:

:~> A1="Autostrada "; echo "La variabile 'A1' contiene $A1" # Imposta e mostra il contenuto della variabile A1
La variabile 'A1' contiene Autostrada 
:~> A1="Autostrada "; echo 'La variabile "A1" contiene $A1' # Imposta il contenuto della variabile A1 ma non lo mostra
La variabile "A1" contiene $A1
:~> A1="Autostrada ";B1=${A1}A1; echo $B1 # Imposta univocamente il contenuto delle variabili A1 e B1, poi mostra il contenuto di B1
Autostrada A1
:~$ A1="Autostrada ";B1=$A1A1; echo $B1 # Imposta ambiguamente il contenuto delle variabili A1 e B1, poi mostra il contenuto di B1
 
:~>

18.1 Variabili contenenti un comando
Una variabile può contenere anche un comando, che può essere eseguito o mostrato. Per esempio:

cd ~; AA='ls'; cd ..; $AA # Mette la strimga 'ls' nella variabile AA; esegue il comando contenuto nella variabile AA
opensuse
cd ~; AA='ls'; cd ..; echo $AA # Mette la strimga 'ls' nella variabile AA;  visualizza il contenuto della variabile AA
ls
:~>
A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1
$ A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1|grep 'menuentry "Try' -A0
menuentry "Try or Install Xubuntu" {
--
menuentry "Try or Install Xubuntu" {
$

18.2 Variabili contenenti l’output di un comando
Una variabile può contenere anche l’output di comando, per mostrarlo in un secondo tempo. Per esempio:

cd ~; AA=`ls`; cd ..; echo $AA # Mette l'output del comando `ls` nella variabile AA; visualizza il contenuto della variabile AA
bin Documenti Immagini Modelli Musica Pubblici Scaricati Scrivania Video
cd ~; AA=$(ls); echo $AA # Mette l’output del comando 'ls' nella variabile AA; visualizza il contenuto della variabile AA
bin Documenti Immagini Modelli Musica Pubblici Scaricati Scrivania Video
:~>
Si noti che ['] non è [`] e che [-] non è [~]; infatti, in Linux:
['] si ottiene digitando il tasto ['] (apostrofo);
[`] si ottiene digitando la combinazione di tasti [AltGr]+['] (apostrofo);
[-] si ottiene digitando il tasto [-] (segno meno);
[~] si ottiene digitando la combinazione di tasti [AltGr]+[ì] (i accentata).

18.3 – Manipolazione delle stringhe

VAR1=`mediainfo videoIN.mp4 | egrep Wi` # Mette all'interno della variabile VAR1 l'output di un comando
VAR2=`expr index "$VAR1" :` # Mette in VAR2 il numero corrispondente alla posizione del carattere ":" all'interno di VAR1
VAR3=${#VAR1} # Mette in VAR3 il numero di caratteri contenuto in VAR1
VAR4=${VAR1:2} # Mette in VAR4 tutti i caratteri consecutivi contenuti in VAR1 a cominciare dal 2°
VAR5=${VAR1:2:3} # Mette in VAR5 3 caratteri consecutivi contenuti in VAR1 a cominciare dal 2°
VAR6=${VAR1:(-6)} # Mette in VAR6 tutti i caratteri consecutivi contenuti in VAR1 a cominciare dal 6° contando dalla fine
VAR7=${VAR1:(-6):4} # Mette in VAR7 4 caratteri consecutivi contenuti in VAR1 a cominciare dal 6° contando dalla fine
VAR8=${VAR1::2} # Mette in VAR8 tutti i caratteri consecutivi contenuti in VAR1 che precedono il 2° contando dall'inizio
VAR9=${VAR1::(-6)} # Mette in VAR9 tutti i caratteri consecutivi contenuti in VAR1 che seguono il 6° contando dalla fine
VAR10=${VAR1/" "/""} # Mette in VAR10 il contenuto di VAR1 priva del primo spazio vuoto
VAR11=${VAR1//" "/""} # Mette in VAR11 il contenuto di VAR1 priva di tutti gli spazi vuoti
VAR12=${VAR1/i/yY} # Mette in VAR12 il contenuto di VAR1 sostituendo il primo carattere "i" con "yY"
VAR13=${VAR1//i/yY} # Mette in VAR13 il contenuto di VAR1 sostituendo tutti i caratteri "i" con "yY"

17 BASH – Caratteri speciali

4 Marzo, 2024 (15:48) | BASH, Linux | By: sargonsei

17 BASH – Caratteri speciali, operatori e separatori

17.1) Rendere uno script BASH agevolmente riconoscibile come tale.
Affinché uno script BASH sia agevolmente riconoscibile come tale sia dagli utenti, sia dal compilatore BASH sia dal Sistema operativo, e non venga erroneamente riconosciuto per uno script scritto in un altro linguaggio, è opportuno che la prima riga dello script stesso contenga l’istruzione
#!/bin/bash Questa è l’unica istruzione che, sebbene inizi con [#] (cancelletto), viene interpretata come un’istruzione, e non come un commento.

17.2) Operatori per separare istruzioni. Scrivere uno script, consiste nello scrivere le singole istruzioni una dopo l’altra separate dall’operatore/separatore che si ritiene più opportuno usare, tenendo conto del risultato che l’operatore/separatore ha sul risultato finale; gli operatori che possono essere scritti fra un comando e l’altro (senza paresi quadre) sono: [;] (puntoevirgola), [&] (and), [&&] (doppio and), [#] (cancelletto), [|] (pipe) e [||] (doppia pipe); di questi, gli operatori possibili a fine riga sono: [;] (puntoevirgola) ed [&] (and). Ogni singola istruzione deve essere separata dalle altre, cosa fattibile sia inserendo un operatore/separatore, sia andando a capo; per questo motivo, alcune guide descrivono l’andare a capo come l’inserimento di un operatore/separatore chiamato [newline] avente la funzione analoga a quella dell’operatore [;] (puntoevirgola) e fisicamente riconoscibile per il fatto che lo script prosegue sotto con una ulteriore istruzione.

17.2.1) L’operatore [;] (puntoevirgola) si usa per separare due istruzioni da eseguire una dopo l’altra a prescindere dall’esito delle stesse; per esempio: per eseguire la riga
mkdir prova; cd provaBASH: crea la cartella “prova” nella cartella di lavoro solo se l’utente può scrivere nella cartella in cui il terminale è aperto e solo se la cartella “prova” non esiste; successivamente, solo se la cartella prova esiste, accede alla cartella prova.
Si noti che il comando scritto dopo il puntoevirgola, sebbene impartito, viene eseguito solo dopo che il comando precedente è terminato ed a prescindere dall’esito del comando stesso, quindi se la cartella di lavoro contiene già una cartella prova, il comando [mkdir prova] non viene eseguito, ma il comando [cd prova] verrà eseguito.
Altro comportamento da notare: nella riga
sleep 3; echo "Questo messaggio viene visualizzato dopo 3 secondi" l’operatore [;] farà sì che il comando che SEGUE l’operatore venga eseguito dopo aver terminato il comando che PRECEDE l’operatore; siccome (in questo caso) il comando che PRECEDE l’operatore genera una pausa di 3 secondi, il comando che SEGUE l’operatore viene eseguito dopo 3 secondi.

17.2.2) L’operatore [&] (and) è utile per avviare da terminale due o più applicazioni che devono essere disponibili contemporaneamente, in quanto permette di avviarle in background, quindi l’istruzione successiva verrà eseguita prima che l’istruzione precedente sia terminata; per esempio: la riga
sleep 3& echo "Questo messaggio viene visualizzato senza aspettare 3 secondi" l’operatore [&] farà sì che il comando che PRECEDE l’operatore venga eseguito in background, quindi il comando che SEGUE l’operatore viene eseguito senza aspettare che il comando che il comando che precede l’operatore sia terminato.

17.2.3) L’operatore [&&] (doppio and) è utile per impartire due o più istruzioni una dopo l’altra, ma le istruzioni scritte dopo l’operatore [&&] vengono eseguite solo se l’istruzione scritta prima dell’operatore [&&] è stata eseguita correttamente; per esempio: la riga
mkdir prova && cd prova fa sì che BASH crei la cartella prova all’interno dell’attuale cartella di lavoro, e poi, solo se ha eseguito l’istruzione precedente, accede alla cartella prova; se, per un qualsiasi motivo (es. la cartella di lavoro contiene già una cartella che si chiama prova) l’istruzione scritta prima dell’operatore [&&] non viene eseguita, non verrà eseguita nemmeno l’istruzione scritta dopo l’operatore [&&].

17.2.4) L’operatore [#] (cancelletto) segnala a BASH che i comandi sono terminati, e quello che è scritto fra il primo operatore [#] e il termine della riga è un commento da non eseguire. Notare che: dopo l’operatore [#], si potrà scrivere qualsiasi cosa, compresi altri operatori o altri comandi, ma nessun comando verrà eseguito, e l’unico operatore che ha effetto è [newline] (andare a capo).

17.2.5) L’operatore [|] (pipe) fa sì che l’output del comando che precede sia utilizzato come input del comando che segue.

17.2.6) L’operatore [||] (doppia pipe) si comporta come l’operatore booleano OR, nel senso che viene eseguito solo se il comando precedente non viene eseguito; per esempio la riga:
mkdir prova || cd prova fa sì che BASH crei la cartella prova all’interno dell’attuale cartella di lavoro, ma vi accede solo nel caso in cui la cartella prova esiste già.

17.2.7) L’operatore [newline] (andare a capo) non è un operatore vero e proprio, semplicemente segnala a BASH che la riga è finita, quindi BASH deve eseguirla e passare all’istruzione riportata nella riga successiva.

17.2.8) In una riga, si possono usare più operatori e/o più volte il medesimo operatore, anche raggruppando le istruzioni fra parentesi tonda o graffa. Se si raggruppano le istruzioni fra parentesi tonde, ogni parentesi aperta deve essere chiusa nella stessa riga, mentre le parenti graffe possono essere chiuse in righe successive, ma solo negli script.

17.3) Operatori che influiscono sul contenuto delle variabili e sull’impaginazione del testo in uscita.
Appartengono a questa categoria tutti i caratteri che, da soli o opportunamente raggruppati all’interno di una stringa di caratteri, in uscita producono un effetto diverso dal mostrare i singoli caratteri che li compongono.

17.3.1) L’operatore “Virgolette” [“] è un operatore di “Quoting parziale”, vale a dire un operatore che si usa sempre in coppia, prima e dopo una stringa di caratteri che, anche se contiene dei caratteri speciali, detti caratteri speciali verranno trattati come caratteri normali, salvo rare eccezioni. Gli spazi nelle variabili sono una eccezione particolare… si veda l’esempio seguente:

:~> A1="0 1  2   3"; echo $A1; echo "$A1"
0 1 2 3
0 1  2   3
:~>

17.3.2) L’operatore ‘Apostrofo’ [‘] è un operatore di ‘Quoting Totale’, vale a dire un operatore che si usa sempre in coppia, prima e dopo una stringa di caratteri che, anche se contiene dei caratteri speciali, detti caratteri speciali verranno trattati come caratteri normali, unica eccezione l’apostrofo stesso.

17.3.3) L’operatore ‘slash bar’ [\] è un operatore di ‘Quoting singolo’, vale a dire un operatore che, se anteposto ad un carattere, acquisisce funzioni diverse a seconda di quale sia il carattere a cui è anteposto. Se anteposto ad un carattere speciale, lo fa diventare un carattere normale.

17.3.4) Esempi di quoting
echo "Quoting parziale. Il presente # non inizia un commento."
echo 'Quoting totale. Il presente # non inizia un commento.'
echo Quoting singolo. Il presente \# non inizia un commento.
echo Carattere speciale. Il presente # inizia un commento.

17.3.5) L’operatore ‘bar’ [/] è utilizzato nella parte dei comandi che definisce il percorso di un file per separare il nome delle singole cartelle che costituiscono il percorso.

17.3.6) L’operatore ‘punto’ [.] è anteposto alla barra [/] nella parte dei comandi che definisce il percorso di un file, in quanto l’accoppiata di caratteri [./] contraddistingue la cartella in cui si trova lo script ovvero la cartella di lavoro della shell BASH.

17.3.7) L’operatore ‘doppiopunto’ [..] contraddistingue la cartella in cui è contenuta la cartella in cui si trova lo script ovvero la cartella in cui è contenuta la cartella di lavoro della shell BASH.

17.3.8) L’operatore ‘tilde’ [~] è anteposto alla barra [/] nella parte dei comandi che definisce il percorso di un file, in quanto l’accoppiata di caratteri [~/] contraddistingue la cartella in cui si trova la [home] dell’utente.

17.4) Sequenze di escape
Quando il carattere speciale [\] è anteposto ad un carattere comune, può dar luogo ad una “sequenza di escape” per cui la suddetta sequenza di caratteri ha un effetto che non coincide con la rappresentazione grafica della sequenza stessa. Seguono alcuni esempi da usare con echo e sed.

\n
echo -e "significa \n a capo"
significa 
 a capo
\r
echo -e "significa \r invio"
 invioica
\t
echo -e "significa \t tabulazione"
significa 	 tabulazione
\v
echo -e "significa tabulazione \v verticale"
significa tabulazione 
                       verticale
\b
echo -e "significa\b ritorno (backspace)2"
signific ritorno (backspace)2
\a
echo -e "significa \a allerta (segnale acustico o accensione di un led)"
significa  allerta (segnale acustico o accensione di un led)
\0xx
echo -e "trasforma in carattere ASCII il valore ottale \045"
trasforma in carattere ASCII il valore ottale %

17.5) Commenti su varie righe consecutive
Qualora sia necessario commentare più linee, la riga che precede i commenti deve contenere unicamente [: ‘] (senza parentesi quadre) e la riga che segue i commenti deve contenere unicamente [‘] (senza parentesi quadre)

#!/bin/bash
# Per eseguire lo script digitare ./ seguito dal nome dello script, Poi digitare [invio]
echo prima
: 'duepunti + spazio + apice + commento + apice'
echo durante
: '
questo è un
commento
multilinea
'
echo dopo

oppure
#!/bin/bash
echo prima
: "duepunti + spazio + doppioapice + commento + doppioapice"
echo durante
: '
questo è un
commento
multilinea
'
echo dopo

oppure
#!/bin/bash
echo prima
: || {duepunti + spazio + || + spazio + apreGraffa + commento + chiudeGraffa}
echo durante
: || {
questo è un
commento
multilinea
}
echo dopo

16 BASH – Operazioni su files e cartelle

4 Marzo, 2024 (15:47) | BASH, Linux | By: sargonsei

16 BASH – Operazioni su files e cartelle
Cose da sapere prima di cominciare:
Il carattere grafico “~” (tilde) si ottiene digitando la combinazione di tasti [AltGr]+[ì].
Il tasto [AltGr] si trova a destra della barra spaziatrice; il tasto [ì] (i accentata) si trova a destra dell’apostrofo.

16.1 Elencare files e cartelle esistenti
ls                    # Elenca files e cartelle contenuti nella cartella di lavoro
ls ~                  # Elenca files e cartelle contenuti nella /home dell'utente
ls /percorso/completo # Elenca files e cartelle contenuti nella cartella "/percorso/completo"
dir                    # Elenca files e cartelle contenuti nella cartella di lavoro 
dir ~                  # Elenca files e cartelle contenuti nella /home dell'utente 
dir /percorso/completo # Elenca files e cartelle contenuti nella cartella "/percorso/completo"

16.2 Cambiare cartella di lavoro
cd /                  # La cartella principale diventa la cartella di lavoro
cd ~                  # La /home dell'utente diventa la cartella di lavoro
cd ..                 # La cartella in cui è contenuta la cartella di lavoro diventa la cartella di lavoro
cd /percorso/completo # La cartella "/percorso/completo" diventa la cartella di lavoro

16.3 Creare, spostare e rimuovere files e cartelle
cp file1 file2        # Crea il file file2 identico a file1
cp file1 file2 dir    # Copia file1 e file2 all'interno della cartella dir
mv file1 file2        # Rinomina file2 il documento file1
rm file1 file2        # Rimuove file1 e file2
rm dir1 dir2          # Rimuove le cartelle dir1 e dir2
rm -r dir1 dir2       # Rimuove ricorsivamente le cartelle dir1 e dir2 ed il loro contenuto
mkdir dir1 dir2       # Crea le cartelle dir1 e dir2

16.4 Visualizzare il percorso completo di files e cartelle specifiche
pwd                   # Visualizza percorso assoluto della cartella di lavoro corrente
find -name file1      # Visualizza percorso assoluto di file1 cercandolo cartella di lavoro e relative sottocartelle
find -iname file1     # Visualizza percorso assoluto di file1 senza distinguere lettere maiuscole da minuscole
grep --include=\*.{txt,cfg} -rnw -e "Testo" # Cerca ricorsivamente files che hanno estensione .txt o .cfg e contengono "Testo"
grep --include=\*.{txt,cfg} -irnw -e "Testo" # Cerca ricorsivamente files che hanno estensione .txt o .cfg e contengono "Testo" o "tEsTo"

16.5 Omissione di parte dell’output
L’output della shell BASH viaggia su 2 canali:
Canale 1: Output Standard (visualizza l’output del comando stesso)
Canale 2: Output Error (visualizza l’output di eventuali messaggi di errore del comando stesso).
Di default, l’output di entrambi i canali viene mostrato sulla shell BASH ma, dirottando l’output di un canale verso [/dev/nul], è possibile visualizzare l’output di un solo canale.
Seguono alcuni esempi.

:~> ls Pubblici # Visualizza il contenuto della cartella [Pubblici] oppure visualizza un errore
testo.txt
:~> ls pubblici # Visualizza il contenuto della cartella [pubblici] oppure visualizza un errore
ls: impossibile accedere a 'pubblici': File o directory non esistente
:~> ls Pubblici 1> /dev/null # NON esegue alcun comando. Se il comando NON può essere eseguito, visualizza un errore
:~> ls pubblici 1> /dev/null # NON esegue alcun comando. Se il comando NON può essere eseguito, visualizza un errore
ls: impossibile accedere a 'pubblici': File o directory non esistente
:~> ls Pubblici 2> /dev/null # Visualizza il contenuto della cartella [Pubblici]. Se il comando NON può essere eseguito, NON visualizza un errore
testo.txt
:~> ls pubblici 2> /dev/null # Visualizza il contenuto della cartella [Pubblici]. Se il comando NON può essere eseguito, NON visualizza un errore
:~>

16.6 Reindirizzamento dell’output verso un file di testo
Di default, l’output della shell BASH viene visualizzato sulla shell BASH, ma è possibile dirottare l’output di un canale verso un file di testo.
Se non si specifica quale sia il canale il cui output deve essere dirottato verso il file di testo, di default viene dirottato solo l’output del canale 1 (Standard Output).
Per esempio: volendo creare, nella cartella di lavoro, un file di testo chiamato [elenco.txt] contenente l’output del comando [ls Pubblici], occorre impartire il comando:
ls Pubblici > elenco.txt # Crea il file [elenco.txt] contenente l'output del comando [ls Pubblici]
ls Pubblici >> elenco.txt # Aggiunge al file [elenco.txt] l'output del comando [ls Pubblici]

In entrambi i casi, solo l’output del canale 1 (Standard Output) verrà inserito nel file di testo; eventuali messaggi di errore verranno visualizzati all’interno della shell BASH.

Volendo creare il file [elencoC1.txt] contenente l’output del comando [ls Pubblici] ed il file [elencoC2.txt] contenente eventuali messaggi di errore conseguenti l’esecuzione del comando [ls Pubblici], impartire il comando
ls Pubblici > elencoC1.txt 2> elencoC2.txt
Volendo aggiungere al file [elencoC1.txt] l’output del comando [ls Pubblici] ed al file [elencoC2.txt] eventuali messaggi di errore conseguenti l’esecuzione del comando [ls Pubblici], impartire il comando
ls Pubblici >> elencoC1.txt 2>> elencoC2.txt
Si precisa che: avendo dirottato verso files di testo sia lo Standard Output, sia l’Error Output, la shell BASH mostrerà unicamente il comando impartito ed il prompt; per vedere l’output del comando, ed eventuali messaggi di errore, sarà necessario visualizzare il contenuto dei files corrispondenti.

15 BASH – Comandi da ricordare

4 Marzo, 2024 (14:53) | BASH, Linux | By: sargonsei

< pre > < /pre >
Comandi BASH generici
sudo systemctl reboot --firmware # Spegne e riaccende il PC. Se il PC è in modalità UEFI, al riavvio si avvia il BIOS
sudo grub-install                # Installa il bootloader GRUB2 nell'apposita partizione UEFI
sudo update-grub                 # Aggiorna il menù di avvio del bootloader GRUB2 sotto UEFI
sudo grub-install /dev/sda       # Installa il bootloader GRUB2 nel MBR del disco fisso /sda
sudo update-grub2                # Aggiorna il menù di avvio di GRUB2
history                          # Elenca gli ultimi comandi impartiti dal terminale
sudo sysctl -w kernel.dmesg_restrict=0 # sudo dmesg DIVENTA dmesg
sudo sysctl -w kernel.dmesg_restrict=1 # dmesg DIVENTA sudo dmesg
lsblk -o vendor,model,serial,size,mode,fstype,kname,uuid,mountpoint,label # Esamina partizioni

Il tasto da premere all’avvio per accedere al BIOS di Asus F555Y è [f2] oppure [canc]
Il tasto da premere all’avvio per accedere al BOOT-Menù di Asus F555Y è [esc]

Il tasto da premere all’avvio per accedere al BIOS del Mini PC CK11 con CPU: Intel Core i7-11390H è [esc] oppure [canc]
Il tasto da premere all’avvio per accedere al BOOT-Menù del Mini PC CK11 con CPU: Intel Core i7-11390H è [f7]

Operazioni su files e cartelle
http://sargonsei.altervista.org/16_bash/

Riconoscere se il bootloader è installato nella partizione EFI (modalità UEFI) o nel MBR (modalità legacy)
mokutil --sb-state               # Verificare se SecureBoot è Abilitata o Disabilitata
dmesg | grep "EFI v"             # Verifica se in Sistema Operativo in funzione è stato avviato in modalità UEFI
efibootmgr                       # Elenca Sistemi Operativi avviabili in modalità UEFI e relativo ordine di avvio.
efibootmgr -v                    # Elenca, in ordine di avvio, i Sistemi Operativi avviabili in modalità UEFI + dati partizione EFI
[ -d /sys/firmware/efi ] && echo "EFI boot on HDD" || echo "Legacy boot on HDD" # Verifica se il sistema è stato avviato in UEFI mode
(Collegamento esterno)
https://edulab.unitn.it/tecnici/efibootmgr-lapplicazione-per-interagire-e-modificare-l-efi-boot-manager-linux/

Aggiornare Sistema Operativo openSUSE
sudo zypper up  # Aggiorna openSUSE Leap
sudo zypper dup # Aggiorna openSUSE Tumbleweed
Aggiornare Sistema Operativo PCLinuxOS
su    # L'utente di PCLinuxOS diventa SuperUtente
apt-get clean # ripulisce la cache locale dei pacchetti di PCLinuxOS
apt-get update && apt-get dist-upgrade # Aggiorna la lista dei pacchetti ed installa le ultime versioni dei pacchetti di PCLinuxOS

Aggiornare Sistema Operativo tipo Ubuntu
sudo apt clean          # ripulisce la cache locale dei pacchetti
sudo apt autoremove -s  # elenca i pacchetti installati ma non più necessari.
sudo apt autoremove     # elenca i pacchetti installati ma non più necessari, chiede all'utente se li vuole rimuovere, e si comporta di conseguenza.
sudo apt autoremove -y  # rimuove tutti i pacchetti installati ma non più necessari.
sudo apt autopurge -y        # rimuove tutti i pacchetti installati ma non più necessari, nonchè i relativi files di configurazione.
sudo apt update              # scarica la lista aggiornata dei pacchetti e delle nuove versioni disponibili nei repository
sudo apt dist-upgrade -y     # scarica ed installa le ultime versioni dei pacchetti
sudo do-release-upgrade          # esegue l'avanzamento di versione, passando alla release di Ubuntu successiva
sudo apt clean; sudo apt update; sudo apt dist-upgrade -y # Scarica ed installa le ultime versioni dei pacchetti

sudo apt install PACCHETTO             # Installa PACCHETTO.
sudo apt install PACCHETTO1 PACCHETTO2 # Installa PACCHETTO1 e PACCHETTO2.
sudo apt remove PACCHETTO              # Rimuove PACCHETTO, senza rimuovere i file di configurazione.
sudo apt purge PACCHETTO               # Rimuove PACCHETTO, compresi tutti i file di configurazione.
sudo apt reinstall PACCHETTO           # Reinstalla PACCHETTO anche se già installato all'ultima versione.

Installazione pacchetti per Ubuntu Studio
sudo apt install ubuntustudio-audio       # installa raccolta di applicazioni finalizzate all'editing audio.
sudo apt install ubuntustudio-video       # installa raccolta di applicazioni finalizzate all'editing video.
sudo apt install ubuntustudio-graphics    # installa raccolta di applicazioni per la grafica in 2D/3D.
sudo apt install ubuntustudio-photography # installa raccolta di applicazioni per gestione immagini e photoediting.
sudo apt install ubuntustudio-publishing  # installa raccolta di applicazioni per impaginazione e publishing.
sudo apt install linux-lowlatency         # installa kernel a bassa latenza.
sudo apt install language-pack-gnome-it   # installa pacchetto lingua italiana per GNOME 
sudo apt install kubuntu-restricted-extras # installa codec coperti da copyright 

Per conoscere i principali comandi utili per ottenere informazioni sull'hardware, visitare la pagina WEB
Sistema Operativo ed Hardware del mio ASUS AMD A8 Quad Core x4
http://sargonsei.altervista.org/513-2/

Per poter spegnere e riaccendere il PC da Windows, consultare la pagina web
https://www.ilsoftware.it/focus/guida-al-comando-shutdown-di-windows_25379/

14 BASH – Disattivare e attivare il journaling in una partizione formattata ext3 o ext4

3 Marzo, 2024 (22:47) | BASH, Linux | By: sargonsei

14 BASH – Disattivare e attivare il journaling in una partizione formattata ext3 o ext4

Come disattivare e attivare il journaling in una partizione formattata ext3 o ext4.

I comandi (da impartire in modalità Super Utente o in modalita’ sudoes).

lsblk -f | grep sdc                # Per vedere i file-system e punti di mount sul disco fisso sdc
umount /dev/sdc3                   # Per "smontare" la partizione sdc3
lsblk -f | grep sdc                # Per vedere i file-system e punti di mount sul disco fisso sdc

tune2fs -l /dev/sdc3 |grep feature # Per vedere le abilitazioni della partizione sdc3
tune2fs -O ^has_journal /dev/sdc3  # Per disabilitare il journaling sulla partizione sdc3
tune2fs -l /dev/sdc3 |grep feature # Per vedere le abilitazioni della partizione sdc3

tune2fs -O has_journal /dev/sdc3   # Per riabilitare il journaling sulla partizione sdc3
tune2fs -l /dev/sdc3 |grep feature # Per vedere le abilitazioni della partizione sdc3

L’output di Linux Mint 17.1 64 bit con MATE

~ $ sudo lsblk -f | grep sdc                # Per vedere i file-system e punti di mount sul disco fisso sdc
[sudo] password for mint17m1: 
sdc                   
├─sdc1  ext3   usb1   /media/mint17m1/usb1
├─sdc2  ext3   usb2   /media/mint17m1/usb2
└─sdc3  ext3   usb3   /media/mint17m1/usb3
~ $ sudo umount /dev/sdc3                   # Per "smontare" la partizione sdc3
~ $ sudo lsblk -f | grep sdc                # Per vedere i file-system e punti di mount sul disco fisso sdc
sdc                   
├─sdc1  ext3   usb1   /media/mint17m1/usb1
├─sdc2  ext3   usb2   /media/mint17m1/usb2
└─sdc3  ext3   usb3   
~ $ sudo tune2fs -l /dev/sdc3 |grep feature # Per vedere le abilitazioni della partizione sdc3
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
~ $ sudo tune2fs -O ^has_journal /dev/sdc3  # Per disabilitare il jurnaling sulla partizione sdc3
tune2fs 1.42.9 (4-Feb-2014)
~ $ sudo tune2fs -l /dev/sdc3 |grep feature # Per vedere le abilitazioni della partizione sdc3
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file
~ $ sudo tune2fs -O has_journal /dev/sdc3   # Per riabilitare il jurnaling sulla partizione sdc3
tune2fs 1.42.9 (4-Feb-2014)
Creazione dell'inode del journal: fatto
~ $ sudo tune2fs -l /dev/sdc3 |grep feature # Per vedere le abilitazioni della partizione sdc3
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
~ $

13 BASH – Montaggio automatico delle partizioni

3 Marzo, 2024 (22:09) | BASH, Linux | By: sargonsei

13 BASH – Montaggio automatico delle partizioni visto da OpenSUSE Tumbleweed

13.1 Cose da sapere prima di procedere
Il montaggio delle partizioni all’avvio del Sistema Operativo, è controllato dal contenuto del file di testo [/etc/fstab]
Il [/etc/fstab] contiene 6 colonne di testo, ciascuna delle quali determina un singolo aspetto del montaggio automatico della partizione a cui si riferisce.
La prima colonna identifica la partizione a cui la riga si riferisce.
La seconda colonna identifica il punto di mount attribuito alla partizione stessa.
La terza colonna identifica il file-system della partizione stessa.
La quarta colonna contiene le opzioni di accesso al dispositivo.
La quinta colonna attiva/disattiva il backup del filesystem; i valori possibili sono 0 (=nessun backup) e 1 (=backup).
La sesta colonna attiva/disattiva il controllo di coerenza del disco (comando fsck); i valori possibili sono 0 (=nessun controllo), 1 (=priorità alta) e 2 (=priorità bassa).
Il file /etc/fstab viene creato dal Sistema Operativo stesso in fase di installazione, seguendo le istruzioni fornite dall’utente che installa.
Per identificare univocamente ogni singola partizione, è possibile utilizzare: Descrittore del nome del kernel, Etichetta dei file system, e (solo per le partizioni GPT): UUID delle partizioni, ed Etichetta delle partizioni. Di default, viene spesso utilizzato l’etichetta dei file system (UUID), ma l’utente può sempre modificare il file /etc/fstab in un secondo tempo. Le modifiche al file /etc/fstab sono attuabili tramite un editor di testo, purché salvate in modalità SuperUtente.

13.2 FSTAB – Visualizzare la situazione
Per leggerne il contenuto del file /etc/fstab e monitorarne l’effetto, aprire un terminale ed impartire i comandi:
lsblk -f # Visualizza le caratteristiche delle partizioni e dei relativi punti di mount
lsblk -o name,mountpoint,fstype,uuid,label,partuuid,partlabel # Visualizza partizioni e punti di mount
cat /etc/fstab # Visualizza configurazione montaggio automatico

Nel caso specifico, la situazione è la seguente:

:~> lsblk -f # Visualizza le caratteristiche delle partizioni e dei relativi punti di mount
NAME        FSTYPE FSVER LABEL    UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
nvme0n1
├─nvme0n1p1 vfat   FAT32 SYSTEM   1A32-EB64                              53,9M    44% /boot/efi
├─nvme0n1p2
├─nvme0n1p3 ntfs         Windows  341033A2103379C6                      152,5G    24% /mnt/W11
├─nvme0n1p4 ext4   1.0   L1       3468bef4-dfcc-4b9d-b669-3210886dff44   31,6G    30% /
├─nvme0n1p5 ext4   1.0   L2       10df78d3-4195-457d-af10-700d1e85f355   11,6G    68% /mnt/L2
├─nvme0n1p6 ext4   1.0   L3       e9cb4d24-62b0-4ab6-b786-cd2b19d6ed60   25,7G    29% /mnt/L3
├─nvme0n1p7 ntfs         Dati     1A4C4B78758AFF87                       52,7G    63% /mnt/Dati
└─nvme0n1p8 ntfs         Recovery 2A74348184345235
:~> lsblk -o name,mountpoint,fstype,uuid,label,partuuid,partlabel # Visualizza partizioni e punti di mount
NAME        MOUNTPOIN FSTYPE UUID                                 LABEL    PARTUUID                             PARTLABEL
sda
nvme0n1
├─nvme0n1p1 /boot/efi vfat   1A32-EB64                            SYSTEM   4d54f1b5-06f5-49a2-b2e5-33edc4d09e2f EFI system partition
├─nvme0n1p2                                                                dc01a7ac-a6ba-433b-95c7-0efe85576e63 Microsoft reserved partition
├─nvme0n1p3 /mnt/W11  ntfs   341033A2103379C6                     Windows  3fd157ca-7fb5-4874-8578-3a5270a63214 Basic data partition
├─nvme0n1p4 /         ext4   3468bef4-dfcc-4b9d-b669-3210886dff44 L1       f075fb54-d086-46ad-85c1-6e25a6de5760 L1
├─nvme0n1p5 /mnt/L2   ext4   10df78d3-4195-457d-af10-700d1e85f355 L2       dc59bb47-cbce-4453-adaf-563df6dda060 L2
├─nvme0n1p6 /mnt/L3   ext4   e9cb4d24-62b0-4ab6-b786-cd2b19d6ed60 L3       1a457738-ae68-47f5-b160-21cfaeff0aa5 L3
├─nvme0n1p7 /mnt/Dati ntfs   1A4C4B78758AFF87                     Dati     e2306820-b101-4cd6-875a-c6042cecf208 Dati
└─nvme0n1p8           ntfs   2A74348174345235                     Recovery e3231b14-c982-4a77-87de-5d0de726afb8 Basic data partition
:~> cat /etc/fstab # Visualizza configurazione montaggio automatico
/dev/nvme0n1p1  /boot/efi  vfat  utf8                 0  2
/dev/nvme0n1p3  /mnt/W11   ntfs  fmask=133,dmask=022  0  0
/dev/nvme0n1p4  /          ext4  defaults             0  1
/dev/nvme0n1p5  /mnt/L2    ext4  data=ordered         0  2
/dev/nvme0n1p6  /mnt/L3    ext4  data=ordered         0  2
/dev/nvme0n1p7  /mnt/Dati  ntfs-3g  defaults  0  0
:~>
ma, viste le caratteristiche delle partizioni e dei relativi punti di mount, il contenuto del file /etc/fstab potrebbe anche essere uno dei seguenti:
:~> cat /etc/fstab # Visualizza configurazione montaggio automatico con UUID
UUID=1A32-EB64                             /boot/efi  vfat  utf8                 0  2
UUID=341033A2103379C6                      /mnt/W11   ntfs  fmask=133,dmask=022  0  0
UUID=3468bef4-dfcc-4b9d-b669-3210886dff44  /          ext4  defaults             0  1
UUID=10df78d3-4195-457d-af10-700d1e85f355  /mnt/L2    ext4  data=ordered         0  2
UUID=e9cb4d24-62b0-4ab6-b786-cd2b19d6ed60  /mnt/L3    ext4  data=ordered         0  2
UUID=1A4C4B78758AFF87                      /mnt/Dati  ntfs-3g  defaults  0  0
:~> cat /etc/fstab # Visualizza configurazione montaggio automatico con LABEL
LABEL=SYSTEM   /boot/efi  vfat  utf8                 0  2
LABEL=Windows  /mnt/W11   ntfs  fmask=133,dmask=022  0  0
LABEL=L1       /          ext4  defaults             0  1
LABEL=L2       /mnt/L2    ext4  data=ordered         0  2
LABEL=L3       /mnt/L3    ext4  data=ordered         0  2
LABEL=Dati     /mnt/Dati  ntfs-3g  defaults  0  0
:~>

13.3 FSTAB – Modificare punti di mount
Ad ogni punto di mount corrisponde una cartella vuota, che può essere posizionata all’interno di qualsiasi altra cartella. Per modificare un punto di mount occorre modificare di conseguenza sia nome e/o posizione della cartella, sia la descrizione del punto di mount all’interno del file /etc/fstab, in quanto la modifica di una sola delle parti coinvolte produrrebbe l’inefficacia del punto di mount corrispondente. Di default, le partizioni prive di punto di mount efficace vengono montate in una cartella avente come nome l’etichetta del file-system della partizione da montare (o, in sua assenza, il file-system stesso) posizionata all’interno della cartella [/media/NomeUtente].

13.4 FSTAB – Fonti esterne
Poiché questi appunti NON si pongono l’obiettivo di sostituirsi alla documentazione ufficiale, per approfondimenti si consiglia di consultare le pagine WEB
https://wiki.archlinux.org/title/Fstab_(Italiano)
https://wiki.debian.org/it/fstab

12 BASH – Formattazione manuale delle partizioni

2 Marzo, 2024 (15:57) | BASH, Linux | By: sargonsei

12 BASH – Formattazione manuale delle partizioni da OpenSUSE Tumbleweed

12.1 Cose da sapere prima di cominciare
La formattazione delle partizioni è cosa molto complessa quindi, se possibile, si consiglia di procedere utilizzando programmi dotati di interfaccia utente grafica. Tuttavia, ci sono dei casi in cui è preferibile formattare da riga di comando, in quanto un’interfaccia grafica non sempre permette il controllo che può dare la riga di comando, e poi l’interfaccia grafica -al pari di qualsiasi altro programma installato-occupa memoria sul disco fisso e richiede aggiornamenti a prescindere dalla frequenza di utilizzo, quindi la riga di comando è spesso una scelta obbligata per chi vuole precisione e leggerezza. In ogni caso, se scopriamo che l’interfaccia grafica installata di default non fa ciò che noi vorremmo fare, la riga di comando è sempre l’alternativa migliore.
Solitamente i limiti riscontrati nelle interfacce grafiche dipendono dal fatto che l’utente ignora come sfruttare a pieno l’interfaccia grafica, ma possono verificarsi casi in cui i limiti dell’interfaccia grafica siano dovuti/voluti dal team che produce e mantiene aggiornata l’interfaccia grafica stessa, quindi, prima di installare alternative all’interfaccia grafica presente di default, si consiglia di consultare le dipendenze alla ricerca dei pacchetti che eseguono materialmente la formattazione, e studiarseli per bene.
ATENZIONE!!! Non confondete il parametro [-f] col parametro [-F]. L’utilizzo del parametro [-F] È PERICOLOSISSIMO, perchè consente la formattazione di partizioni montate (=in uso). A meno che voi non siate James Bond, non dovreste averne bisogno.

11.2 BASH - Vedere i parametri necessari per montare e/o smontare le partizioni
lsblk -f | grep loop -v # Mostra partizioni e, se montate, relativi punti di mount
lsblk -f | grep sdb1    # Mostra partizione sdb1 e, se montata, il relativo punto di mount

12.3 BASH - Smontare le partizioni
sudo umount /dev/sdb1        # Smonta la partizione /dev/sdb1
sudo umount UUID="A1F7-B741" # Smonta la partizione avente UUID="A1F7-B741"
sudo umount LABEL="AVVIO"    # Smonta la partizione avente LABEL="AVVIO"
sudo umount ~/Plus           # Smonta la cartella Plus contenuta nella HOME dell'utente
sudo umount Plus             # Smonta la cartella Plus contenuta cartella di lavoro

12.4 BASH - Formattare partizioni con file-system ntfs
sudo mkfs -t ntfs /dev/sdb1 # Formatta la partizione sdb1 come ntfs
equivale a
sudo mkfs.ntfs /dev/sdb1    # Formatta la partizione sdb1 come ntfs

sudo mkfs.ntfs -f /dev/sdb1              # Formattazione rapida partizione sdb1 come ntfs
sudo mkfs.ntfs -L volume_label /dev/sdb1 # Formatta partizione sdb1 come ntfs con etichetta specificata
sudo mkfs.ntfs -U UUID /dev/sdb1         # Formatta partizione sdb1 come ntfs con UUID specificato
sudo fsck -f -y /dev/sdb1                # Verifica l'integrità del file-system della partizione NON montata sdb1

12.5 BASH - Formattare partizioni con file-system vfat
sudo mkfs -t vfat /dev/sdb1 # Formatta la partizione sdb1 come vfat
equivale a
sudo mkfs.vfat /dev/sdb1    # Formatta la partizione sdb1 come vfat

sudo mkfs.vfat -f /dev/sdb1              # Formattazione rapida partizione sdb1 come vfat
sudo mkfs.vfat -L volume_label /dev/sdb1 # Formatta partizione sdb1 come vfat con etichetta specificata
sudo mkfs.vfat -U UUID /dev/sdb1         # Formatta partizione sdb1 come vfat con UUID specificato
sudo fsck -f -y /dev/sdb1                # Verifica l'integrità del file-system della partizione NON montata sdb1

sudo mkfs.vfat -F 32 /dev/sdb1 # Formatta la partizione sdb1 come fat32
sudo mkfs.vfat -F 16 /dev/sdb1 # Formatta la partizione sdb1 come fat16

12.6 BASH - Formattare partizioni con file-system ext4
sudo mkfs -t ext4 /dev/sdb1 # Formatta la partizione sdb1 come ext4
equivale a
sudo mkfs.ext4 /dev/sdb1    # Formatta la partizione sdb1 come ext4

sudo mkfs.ext4 -f /dev/sdb1              # Formattazione rapida partizione sdb1 come ext4
sudo mkfs.ext4 -L volume_label /dev/sdb1 # Formatta partizione sdb1 come ext4 con etichetta specificata
sudo mkfs.ext4 -U UUID /dev/sdb1         # Formatta partizione sdb1 come ext4 con UUID specificato
sudo fsck -f -y /dev/sdb1                # Verifica l'integrità del file-system della partizione NON montata sdb1

sudo mkfs.ext3 /dev/sdb1 # Formatta la partizione sdb1 come ext3
sudo mke2fs /dev/sdb1    # Formatta la partizione sdb1 come ext2

12.7 BASH - Creare e/o modificare l'etichetta di una partizione non montata
sudo ntfslabel /dev/sdb1 EticNTFS    # Sostituisce con "EticNTFS"  l'etichetta della partizione NON montata sdb1
sudo mlabel -i /dev/sdb1 ::EticFAT32 # Sostituisce con "EticFAT32" l'etichetta della partizione NON montata sdb1
sudo mtools -i /dev/sdb1 ::EticFAT16 # Sostituisce con "EticFAT16" l'etichetta della partizione NON montata sdb1
sudo e2label /dev/sdb1 LabelEXT4     # Sostituisce con "LabelEXT4" l'etichetta della partizione NON montata sdb1
sudo e2label /dev/sdb1 LabelEXT3     # Sostituisce con "LabelEXT3" l'etichetta della partizione NON montata sdb1
sudo e2label /dev/sdb1 LabelEXT2     # Sostituisce con "LabelEXT2" l'etichetta della partizione NON montata sdb1

11 BASH – Smontaggio e montaggio manuale delle partizioni

2 Marzo, 2024 (12:07) | BASH, Linux | By: sargonsei

11 BASH – Smontaggio e montaggio manuale delle partizioni/ISO
Comandi testati con OpenSUSE Tumbleweed

11.1 Cose da sapere prima di cominciare.
Col termine “Punto di montaggio” o anche “Punto di mount”, si indica una cartella vuota utilizzata come punto di accesso ad una partizione.
I files compressi con estensione .iso possono essere visti come una partizione avente file-system apposito, quindi montati di conseguenza (vedasi punto 11.10 di questi appunti)
Qualunque cartella può essere utilizzata come punto di mount, a condizione che sia completamente vuota.
Per trasformare una cartella vuota in un punto di mount, occorre impartire le istruzioni trattate in questi appunti.
Le istruzioni per trasformare una cartella vuota in un punto di mount, sono efficaci solo per il Sistema Operativo da cui le istruzioni stesse sono state impartite.
Sistemi operativi diversi possono prevedere punti di mount diversi per una medesima partizione.
Quando un Sistema Operativo è spento, tutti i punti di mount creati con quel Sistema Operativo tornano ad essere semplici cartelle.
Quando un Sistema Operativo è in funzione, solo i punti di mount definiti all’interno del file [‘/etc/fstab] vengono ripristinati di default, mentre i punti di mount creati con i comandi descritti in questi appunti tornano ad essere semplici cartelle vuote (quindi utilizzabili come punti di default).

Di default, le partizioni il cui punto di mount non è definito mediante il file /etc/fstab vengono montate col percorso /media/[NomeUtente]/[LABEL] o, in assenza di [LABEL], col percorso /media/[NomeUtente]/[UUID].
Le partizioni montate possono essere smontate sia tramite l’interfaccia grafica comunemente utilizzata per gestire files e cartelle, sia impartendo da terminale (o da script) appositi comandi che prevedono la conoscenza di parametri specifici.
Analogamente, è possibile montare ciascuna partizione non montata anche con un punto di mount diverso da quello previsto di default, previo impartizione di appositi comandi che prevedono, oltre alla conoscenza di parametri specifici, l’esistenza di una cartella vuota da usare come punto di mount; quando ciò si verifica, riaccendendo il computer verranno ristabiliti i punti di mount previsti di default, mentre i punti di mount impostati impartendo le istruzioni trattate in questi appunti diverranno cartelle vuote.

Il carattere grafico “~” (tilde) si ottiene digitando la combinazione di tasti [AltGr]+[ì].
Il tasto [AltGr] si trova a destra della barra spaziatrice; il tasto [ì] (i accentata) si trova a destra dell’apostrofo.

11.2 Cambiare cartella di lavoro
cd /percorso/cartella/di/lavoro # La cartella "lavoro" diventa la cartella di lavoro
11.3 Comandi BASH da impartire per creare ciascuna cartella
sudo mkdir /punto/di/montaggio/cartella/Plus # Crea la cartella /punto/di/montaggio/cartella/Plus
sudo mkdir ~/Plus # Crea la cartella Plus contenuta nella HOME dell'utente
sudo mkdir Plus   # Crea la cartella Plus nella cartella di lavoro

11.4 Comandi BASH da impartire per rimuovere ciascuna cartella
sudo rm -r /punto/di/montaggio/cartella/Plus # Rimuove la cartella /punto/di/montaggio/cartella/Plus
sudo rm -r ~/Plus # Rimuove la cartella Plus dalla HOME dell'utente
sudo rm -r Plus   # Rimuove la cartella Plus dalla cartella di lavoro

11.5 Comandi BASH da impartire per vedere i parametri necessari per montare e/o smontare le partizioni
lsblk -f | grep loop -v # Mostra partizioni e, se montate, relativi punti di mount
lsblk | grep sdb        # Mostra partizioni della sola memoria sdb e, se montate, relativi punti di mount
sudo blkid | grep sdb   # Mostra partizioni della sola memoria sdb ed i relativi dati identificativi

11.6 Comandi BASH da impartire per conoscere il contenuto di ciascuna cartella
ls /punto/di/montaggio/cartella # Mostra il contenuto di /punto/di/montaggio/cartella
ls ~/Plus # Mostra il contenuto della cartella Plus contenuta nella HOME dell'utente
ls ~      # Mostra il contenuto della HOME dell'utente
ls Plus   # Mostra il contenuto della cartella Plus contenuta nella cartella di lavoro
ls        # Mostra il contenuto della cartella di lavoro

11.7 Comandi BASH da impartire per creare e/o modificare l'etichetta di una partizione non montata
sudo ntfslabel /dev/sdb1 EticNTFS    # Sostituisce con "EticNTFS" l'etichetta della partizione NON montata sdb1
sudo mlabel -i /dev/sdb1 ::EticFAT32 # Sostituisce con "EticFAT32" l'etichetta della partizione NON montata sdb1
sudo mtools -i /dev/sdb1 ::EticFAT16 # Sostituisce con "EticFAT16" l'etichetta della partizione NON montata sdb1
sudo e2label /dev/sdb1 LabelEXT4     # Sostituisce con "LabelEXT4" l'etichetta della partizione NON montata sdb1
sudo e2label /dev/sdb1 LabelEXT3     # Sostituisce con "LabelEXT3" l'etichetta della partizione NON montata sdb1
sudo e2label /dev/sdb1 LabelEXT2     # Sostituisce con "LabelEXT2" l'etichetta della partizione NON montata sdb1

11.8 Comandi BASH da impartire per montare una partizione NTFS
sudo mount -t ntfs /dev/sdb8 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ntfs /dev/sdb8
sudo mount -t ntfs UUID="06B132F23AA5421C" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ntfs avente UUID="06B132F23AA5421C"
sudo mount -t ntfs LABEL="AVVIO" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ntfs avente LABEL="AVVIO"

11.9 Comandi BASH da impartire per montare una partizione vfat
sudo mount -t vfat /dev/sdb1 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat /dev/sdb1
sudo mount -t vfat UUID="A1F7-B741" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat avente UUID="A1F7-B741"
sudo mount -t vfat LABEL="AVVIO" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat avente LABEL="AVVIO"

11.10 Comandi BASH da impartire per montare una partizione ext4
sudo mount -t ext4 /dev/sdb3 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 /dev/sdb3
sudo mount -t ext4 UUID="f97865ab-966d-493e-9dc5-f8c3f9a2a1fa" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 avente UUID="f97865ab-966d-493e-9dc5-f8c3f9a2a1fa"
sudo mount -t ext4 LABEL="AVVIO" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 avente LABEL="AVVIO"

11.11 Comandi BASH da impartire per montare file .iso
sudo mount -o loop -t iso9660 /media/ubuntu23m10/INTENSO/iso/BSD/FreeBSD-14.0-RELEASE-amd64-bootonly.iso /tmp/iSo # Monta .iso

11.12 Comandi BASH da impartire per smontare le partizioni
sudo umount /dev/sdb1        # Smonta la partizione /dev/sdb1
sudo umount UUID="A1F7-B741" # Smonta la partizione avente UUID="A1F7-B741"
sudo umount LABEL="AVVIO"    # Smonta la partizione avente LABEL="AVVIO"
sudo umount ~/Plus           # Smonta la cartella Plus contenuta nella HOME dell'utente
sudo umount Plus             # Smonta la cartella Plus contenuta cartella di lavoro

11.13 Esempi di utilizzo con file.iso
:~> cd /mnt/Dati/iso/Ubuntu # La cartella /mnt/Dati/iso/Ubuntu diventa la cartella di lavoro
:/mnt/Dati/iso/Ubuntu> sudo mkdir Plus   # Crea la cartella Plus nella cartella di lavoro
[sudo] password di root: 
:/mnt/Dati/iso/Ubuntu> ls Plus           # Mostra il contenuto della cartella [Plus]
:/mnt/Dati/iso/Ubuntu> sudo mount -o loop -t iso9660 xubuntu-22.04.3-desktop-amd64.iso Plus # Monta .iso
mount: /mnt/Dati/iso/Ubuntu/Plus: WARNING: source write-protected, mounted read-only.
:/mnt/Dati/iso/Ubuntu> ls Plus           # Mostra il contenuto della cartella [Plus]
boot  boot.catalog  casper  dists  EFI  install  md5sum.txt  pool  preseed  ubuntu
:/mnt/Dati/iso/Ubuntu> sudo umount Plus  # Smonta la cartella Plus contenuta cartella di lavoro
:/mnt/Dati/iso/Ubuntu> ls Plus           # Mostra il contenuto della cartella [Plus]
:/mnt/Dati/iso/Ubuntu> sudo rm -r Plus   # Rimuove la cartella Plus dalla cartella di lavoro
:/mnt/Dati/iso/Ubuntu> 

11.14 Esempi di utilizzo con partizione NTFS
:~> cd /tmp              # La cartella /tmp diventa la cartella di lavoro
:/tmp> sudo mkdir Plus   # Crea la cartella Plus nella cartella di lavoro
[sudo] password di root:
:/tmp> ls Plus           # Mostra il contenuto della cartella [Plus]
:/tmp> lsblk -f | grep sdb8 # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C
:/tmp> sudo mount -t ntfs /dev/sdb8 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ntfs /dev/sdb8
:/tmp> lsblk -f | grep sdb8  # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C                         80G    51% /tmp/Plus
:/tmp> sudo umount /dev/sdb8 # Smonta la partizione /dev/sdb8
:/tmp> lsblk -f | grep sdb8  # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C
:/tmp> sudo mount -t ntfs UUID="06B132F23AA5421C" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ntfs avente UUID="06B132F23AA5421C"
:/tmp> lsblk -f | grep sdb8  # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C                         80G    51% /tmp/Plus
:/tmp> sudo umount UUID="06B132F23AA5421C" # Smonta la partizione avente UUID="06B132F23AA5421C"
:/tmp> lsblk -f | grep sdb8  # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C
:/tmp> sudo mount -t ntfs LABEL="Da" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione NTFS avente LABEL="Da"
:/tmp> lsblk -f | grep sdb8  # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C                         80G    51% /tmp/Plus
:/tmp> sudo umount LABEL="Da" # Smonta la partizione avente LABEL="Da"
:/tmp> lsblk -f | grep sdb8   # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C
:/tmp> sudo mount -t ntfs /dev/sdb8 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione NTFS /dev/sdb8
:/tmp> lsblk -f | grep sdb8 # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C                         80G    51% /tmp/Plus
:/tmp> sudo umount Plus     # Smonta la cartella Plus contenuta cartella di lavoro
:/tmp> lsblk -f | grep sdb8 # Mostra partizione sdb8 e, se montata, il relativo punti di mount
└─sdb8      ntfs         Da              06B132F23AA5421C
:/tmp> sudo rm -r Plus   # Rimuove la cartella Plus dalla cartella di lavoro
:/tmp>

11.15 Esempi di utilizzo con Partizione vfat
:~> cd /tmp              # La cartella /tmp diventa la cartella di lavoro
:/tmp> sudo mkdir Plus      # Crea la cartella Plus nella cartella di lavoro
[sudo] password di root:
:/tmp> ls Plus              # Mostra il contenuto della cartella [Plus]
:/tmp> lsblk -f | grep sdb1 # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741
:/tmp> sudo mount -t vfat /dev/sdb1 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat /dev/sdb1
:/tmp> lsblk -f | grep sdb1  # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741                               511M     0% /tmp/Plus
:/tmp> sudo umount /dev/sdb1 # Smonta la partizione /dev/sdb1
:/tmp> lsblk -f | grep sdb1  # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741
:/tmp> sudo mount -t vfat UUID="A1F7-B741" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat avente UUID="A1F7-B741"
:/tmp> lsblk -f | grep sdb1         # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741                               511M     0% /tmp/Plus
:/tmp> sudo umount UUID="A1F7-B741" # Smonta la partizione avente UUID="A1F7-B741"
:/tmp> lsblk -f | grep sdb1         # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741
:/tmp> sudo mount -t vfat LABEL="AVVIO" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat avente LABEL="AVVIO"
:/tmp> lsblk -f | grep sdb1      # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741                               511M     0% /tmp/Plus
:/tmp> sudo umount LABEL="AVVIO" # Smonta la partizione avente LABEL="AVVIO"
:/tmp> lsblk -f | grep sdb1      # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741
:/tmp> sudo mount -t vfat /dev/sdb1 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione vfat /dev/sdb1
:/tmp> lsblk -f | grep sdb1 # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741                               511M     0% /tmp/Plus
:/tmp> sudo umount Plus     # Smonta la cartella Plus contenuta cartella di lavoro
:/tmp> lsblk -f | grep sdb1 # Mostra partizione sdb1 e, se montata, il relativo punti di mount
├─sdb1      vfat   FAT32 AVVIO           A1F7-B741
:/tmp> sudo rm -r Plus   # Rimuove la cartella Plus dalla cartella di lavoro
:/tmp>

11.16 Esempi di utilizzo con partizione ext4
:~> cd /tmp              # La cartella /tmp diventa la cartella di lavoro
:/tmp> sudo mkdir Plus      # Crea la cartella Plus nella cartella di lavoro
[sudo] password di root:
:/tmp> ls Plus              # Mostra il contenuto della cartella [Plus]
:/tmp> lsblk -f | grep sdb3 # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa
:/tmp> sudo mount -t ext4 /dev/sdb3 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 /dev/sdb3
:/tmp> lsblk -f | grep sdb3  # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa   23,2G     0% /tmp/Plus
:/tmp> sudo umount /dev/sdb3 # Smonta la partizione /dev/sdb3
:/tmp> lsblk -f | grep sdb3  # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa
:/tmp> sudo mount -t ext4 UUID="f97865ab-966d-493e-9dc5-f8c3f9a2a1fa" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 avente UUID="f97865ab-966d-493e-9dc5-f8c3f9a2a1fa"
:/tmp> lsblk -f | grep sdb3         # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa   23,2G     0% /tmp/Plus
:/tmp> sudo umount UUID="f97865ab-966d-493e-9dc5-f8c3f9a2a1fa" # Smonta la partizione avente UUID="f97865ab-966d-493e-9dc5-f8c3f9a2a1fa"
:/tmp> lsblk -f | grep sdb3         # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa
:/tmp> sudo mount -t ext4 LABEL="LB" Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 avente LABEL="LB"
:/tmp> lsblk -f | grep sdb3      # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa   23,2G     0% /tmp/Plus
:/tmp> sudo umount LABEL="LB" # Smonta la partizione avente LABEL="LB"
:/tmp> lsblk -f | grep sdb3      # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa
:/tmp> sudo mount -t ext4 /dev/sdb3 Plus # La cartella Plus contenuta nella cartella di lavoro diventa il punto di mount della partizione ext4 /dev/sdb3
:/tmp> lsblk -f | grep sdb3 # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa   23,2G     0% /tmp/Plus
:/tmp> sudo umount Plus     # Smonta la cartella Plus contenuta cartella di lavoro
:/tmp> lsblk -f | grep sdb3 # Mostra partizione sdb3 e, se montata, il relativo punti di mount
├─sdb3      ext4   1.0   LB              f97865ab-966d-493e-9dc5-f8c3f9a2a1fa
:/tmp> sudo rm -r Plus   # Rimuove la cartella Plus dalla cartella di lavoro
:/tmp>