Guida ai comandi del terminale Linux e Mac OS (con esempi) - Parte 2
Bentornato! Questo è il secondo episodio della serie dedicata ai comandi del terminale.
Se ti sei perso il primo, lo trovi qui:
Guida ai comandi del terminale Linux e Mac OS (con esempi).
Lì trovi pwd, ls, mkdir, cd, touch, rm, cat, echo, head e tail,
che in questo articolo do per scontati.
Come nel primo episodio le gif sono registrate sul terminale di Mac OS: quasi tutti i comandi funzionano allo stesso modo anche su Linux, dove ci sono differenze te lo segnalo 😉
RMDIR
Remove Directory elimina una cartella, ma soltanto se è vuota.
È il fratello prudente di rm -r: se dentro la cartella c’è anche un solo file, rmdir si rifiuta
di cancellarla e ti avvisa con un errore. Proprio per questo è comodo quando vuoi fare pulizia
senza rischiare di perdere qualcosa per sbaglio.
Con il parametro -p puoi eliminare in un colpo solo una cartella e tutte le cartelle “padre” indicate
nel path, sempre a patto che siano vuote.

LESS
less ti permette di leggere un file una schermata alla volta, senza stamparlo tutto in console come fa cat.
È perfetto per i file lunghi, ad esempio i log.
Una volta aperto il file puoi muoverti con la tastiera:
spazio: va alla schermata successivab: torna alla schermata precedentefreccia giù/freccia su: scorre una riga alla volta/testo: cerca “testo” nel file, connpassi al risultato successivo e conNal precedenteG: salta alla fine del fileg: torna all’inizio del fileq: esce
Nella gif in basso creo un file con i numeri da 1 a 200 e poi lo sfoglio con less.

Puoi usare less anche per sfogliare l’output di un altro comando, ti basta concatenarlo con una pipe:
progressify@mbpro16 ~ % ls -l /etc | less
CP
Copy copia file e cartelle. Il primo parametro è il file di origine, il secondo è la destinazione.
Se la destinazione è una cartella esistente il file viene copiato al suo interno, e in questo caso puoi indicare anche più file di origine.
Attenzione: se il file di destinazione esiste già, cp lo sovrascrive senza chiedere nulla.
Parametri utili:
-r: copia una cartella in maniera ricorsiva, con tutto il suo contenuto. Senza questo parametro le cartelle vengono saltate-i: chiede conferma prima di sovrascrivere un file-v: stampa il nome di ogni file copiato-p: conserva permessi, proprietario e date del file originale

SHRED
Quando elimini un file con rm il suo contenuto resta sul disco finché non viene sovrascritto da altri dati,
e con gli strumenti giusti si può recuperare.
shred risolve il problema: sovrascrive più volte il contenuto del file con dati casuali,
così da renderlo irrecuperabile.
Parametri utili:
-v: mostra l’avanzamento-n: numero di passate, di default sono 3-z: aggiunge una passata finale di zeri, per nascondere il fatto che il file è stato “triturato”-u: dopo averlo sovrascritto, elimina anche il file
Su Linux shred è già installato. Su Mac OS invece non è presente: puoi averlo installando le coreutils
con Homebrew, e in quel caso il comando si chiama gshred. È quello che uso nella gif in basso.
progressify@mbpro16 ~ % brew install coreutils

Nota come dopo il primo gshred il file esiste ancora, ma è diventato di 4096 bytes:
viene riempito tutto il blocco che occupava sul disco.
Attenzione: shred dà per scontato che i dati vengano sovrascritti “sul posto”.
Su dischi SSD e su alcuni file system (ad esempio quelli con snapshot o copy-on-write) non è garantito,
quindi non considerarlo una soluzione infallibile.
ZIP
zip crea un archivio compresso a partire da uno o più file.
Il primo parametro è il nome dell’archivio, a seguire i file da inserire.
Su Mac OS lo trovi già installato, su Ubuntu e Debian potresti doverlo installare:
progressify@ubuntu:~$ sudo apt install zip unzip
Parametri utili:
-r: aggiunge una cartella in maniera ricorsiva, senza questo parametro verrebbe inserita vuota-e: protegge l’archivio con una password-9: usa il livello di compressione massimo (più lento),-1quello minimo (più veloce)

UNZIP
unzip fa il lavoro opposto: estrae il contenuto di un archivio zip.
Parametri utili:
-l: elenca il contenuto dell’archivio senza estrarlo-d: estrae i file nella cartella indicata, se non esiste la crea-o: sovrascrive i file esistenti senza chiedere conferma-n: non sovrascrive mai i file esistenti
Se nella cartella di destinazione esistono già file con lo stesso nome, unzip ti chiede cosa fare
per ognuno di loro: nella gif rispondo A per sovrascriverli tutti.

CHMOD
Change Mode modifica i permessi di file e cartelle.
I permessi li hai già visti nell’output di ls -l, sono quella sequenza di lettere all’inizio di ogni riga:
-rwxr-xr-- 1 progressify staff 44 Nov 12 11:02 saluta.sh
Tolto il primo carattere, che indica il tipo di file, i restanti nove vanno letti a gruppi di tre:
i primi tre sono i permessi del proprietario, poi quelli del gruppo e infine quelli di tutti gli altri utenti.
Ogni lettera è un permesso: r lettura, w scrittura, x esecuzione.
Con chmod puoi indicare i permessi in due modi.
Il primo è la notazione simbolica: a chi (u proprietario, g gruppo, o altri, a tutti),
cosa fare (+ aggiunge, - rimuove, = imposta) e quale permesso.
progressify@mbpro16 ~ % chmod u+x saluta.sh
progressify@mbpro16 ~ % chmod go-w saluta.sh
Il secondo è la notazione numerica: ogni permesso ha un valore (r vale 4, w vale 2, x vale 1)
e per ognuno dei tre gruppi si indica la somma. Ad esempio:
644: il proprietario legge e scrive, tutti gli altri leggono soltanto755: il proprietario fa tutto, gli altri leggono ed eseguono700: il proprietario fa tutto, gli altri non possono fare nulla
Con il parametro -R la modifica viene applicata in maniera ricorsiva a tutto il contenuto di una cartella.
Nella gif provo ad eseguire uno script che non ha il permesso di esecuzione, e poi rimedio.

CHOWN
Change Owner cambia il proprietario e il gruppo di file e cartelle.
Il primo parametro è il nuovo proprietario, il secondo è il file. Se vuoi cambiare anche il gruppo
lo indichi dopo i due punti: utente:gruppo.
Per cedere un file ad un altro utente servono i permessi di amministratore, quindi nella maggior parte dei casi
dovrai usarlo insieme a sudo.
Nella gif cedo un file a root e poi me lo riprendo, assegnandolo al gruppo admin.

Anche qui il parametro -R applica la modifica in maniera ricorsiva. Un classico su un server web Linux:
progressify@ubuntu:~$ sudo chown -R www-data:www-data /var/www/html
CLEAR
clear pulisce il terminale e ti riporta con il prompt in cima alla finestra. Tutto qui 😃
Non cancella nulla dalla cronologia dei comandi, serve soltanto a fare ordine sullo schermo.

Un’alternativa ancora più veloce è la scorciatoia da tastiera CTRL + L.
WHOAMI
whoami, letteralmente “chi sono io”, stampa il nome dell’utente con cui stai eseguendo i comandi.
Sembra banale, ma diventa utile quando lavori su più server o cambi spesso utente e vuoi essere sicuro di chi sei prima di lanciare un comando delicato.

Come vedi eseguendolo con sudo la risposta diventa root: è la prova che sudo esegue il comando
come amministratore.
MAN
Ho lasciato per ultimo il comando più importante 😉
Manual apre il manuale di un comando: descrizione, parametri accettati ed esempi.
Tutti i parametri che ti ho elencato in questo articolo li trovi lì, insieme a molti altri.
Il manuale viene aperto con less, quindi lo sfogli con gli stessi tasti visti prima:
spazio per avanzare, /testo per cercare, q per uscire.

Se non ricordi il nome di un comando puoi cercarlo per parola chiave con man -k,
mentre whatis ti restituisce soltanto la descrizione breve.
progressify@mbpro16 ~ % man -k zip
Conoscevi già i comandi presenti in questo articolo? Quale vorresti vedere nel prossimo episodio?
Scrivimelo nei commenti o nel canale Telegram
AP

