Verificare integrità file in bash

Presupposto: immaginiamo di avere una cartella sorgente di file e una cartella dove li abbiamo copiati, per esempio durante un backup o solo per sicurezza; a tale proposito rimando all’esercizio precedente di copia dei file in bash

Obiettivo: adesso vogliamo controllare che i file in destinazione siano identici ai file nella copia di sicurezza; un primo modo elementare potrebbe essere quello di confrontare la dimensione dei file, però questo non ci garantisce l’effettiva integrità e che nella medesima dimensione non ci siano in realtà contenuti differenti; un approccio migliore sarebbe quello di confrontare gli hash dei file di origine con quelli della copia. Attenzione però! Perché non dobbiamo solo confrontare i file esistenti, ma verificare anche la presenza di nuovi file o di file mancanti.

Vediamo quindi come scrivere questa procedura in BASH.

Fino alla riga 17 abbiamo ripreso il codice del precedente esercizio, con un’unica differenza: abbiamo impostato la variabile tot su -1.

In questo modo nella parte successiva possiamo verificare se non esiste alcuna cartella di backup; se c’è una cartella è la cartella bck0, per via della costruzione dell’esercizio precedente, e quindi tot sarà uguale a 0.

Dopodiché costruiamo un metodo chiamato controllo che prende in ingresso un unico argomento (intercettato con $1 all’interno del codice) che è la cartella sorgente. Alla riga 52 passiamo la cartella sorgente iniziale, mentre alla riga 26 passiamo la cartella figlia che troviamo in quella di partenza, in modo da ripetere il controllo in modo ricorsivo.

Alla riga 24 controlliamo, tramite l’if, che l’elemento che stiamo controllando sia una cartella. Se lo è passiamo la cartella al metodo controllo, altrimenti verifichiamo i file.

Per verificare il file lanciamo md5sum sul file originale e leggiamo il risultato come due colonne: hash e nomefile.

Il ciclo while in realtà effettua un’unica operazione, per ogni valore controllato verifichiamo anzitutto se esiste o meno all’interno del backup. Se non esiste lanciamo in output il messaggio alla riga 41. Altrimenti lanciamo il comando md5sum sul file nel backup; con lo stesso principio di prima effettuiamo la lettura dell’output mettendo il risultato in altre due variabili, ovvero hashbck e nomefilebck. A questo punto confrontiamo che i due hash siano identici, in caso contrario (!= vuol dire diverso) lanciamo un output, quello della riga 36.

Notiamo che se va tutto bene non viene lanciato alcun output, ma solo in caso di errore.

TODO: In questo controllo manca la verifica che eventuali file presenti nel backup non siano stati cancellati dalla cartella sorgente.

Vedi articolo

Operazioni elementari sui file con Bash

Anzitutto vediamo come creare una serie di file vuoti in bash, utilizzando il commando touch.

Adesso proviamo a rinominare i file creati (cambiando l’estensione da *.txt a *.log), tenendo a mente i seguenti modificatori fondamentali:

#: sottrae dall’inizio della stringa (minimale)

%: sottrae dalla fine della stringa (minimale)

: sostituisce una sottostringa con un altra (solo la prima volta che viene incontrata)

Infine mettiamo insieme il tutto in un piccolo eseguibile che, una volta richiamato, permette di modificare l’estensione di tutti i file da ext1 a ext2.

Il programma in questione accetta come argomento le due estensioni da modificare, qualora non vengano forniti esattamente due argomenti segnala all’utente l’utilizzo corretto. Dopodiché passa in rassegna, nella sua cartella di appartenenza tutto i file con estensione ext1 e li modifica all’estensione ext2.

Vedi articolo
Elenco file in bash con ciclo for

Elenco file in bash con ciclo for

Vediamo come elencare i file con altri due esempi, anzitutto prendendo il commando ls:

E poi con piccola variazione, questa volta eseguiamo il commando all’interno di $( )

 

Vedi articolo
Bash, ciclo for con sequenza

Bash, ciclo for con sequenza

Altro esempio di ciclo for con sequenza in bash.

Il risultato è così:

Vedi articolo
Ciclo for elementare in Bash

Ciclo for elementare in Bash

Prosegue la rubrica delle lezioni banali di Bash.

Proviamo adesso ad inserire un elementare ciclo for che stampi dei numeri a video.

Il risultato dovrebbe essere analogo a questo qua:

Vedi articolo
Come scrivere i programmi in bash, ovvero “Ciao, Mondo!” in bash

Come scrivere i programmi in bash, ovvero “Ciao, Mondo!” in bash

Con l’occasione di un corso di Linux che sto tenendo, ho deciso di pubblicare un po’ di esercizi e spunti per tutti quelli che fossero interessati ad avvicinarsi al bellissimo mondo di bash.

Cominciamo con il nostro primo programma in assoluto: ciaomondo.sh

NB: l’estensione *.sh non è obbligatoria

Creiamo un file chiamato ciamondo.sh digitando da terminale

A questo punto ci troviamo dentro l’editor NANO, per salvare utilizziamo CTRL+O, per uscire CTRL+X.

Inseriamo il seguente codice:

Ciao è una funzione, o metodo, che non va altro che stampare a schermo, mediante echo la stringa “Ciao, Mondo!”.

Perché possa funzionare richiamiamo la funzione dopo averla dichiarata.

Salviamo e torniamo nella cartella dove abbiamo creato il file.

Rendiamo il file eseguibile con:

E poi testiamolo:

 

Vedi articolo