7 comandi utilissimi da usare su Linux

Se sviluppi progetti informatici in maniera professionale o come hobbista evoluto, conoscere Linux e la sua shell (Bash) ti dar√† enormi vantaggi rispetto al command prompt di Windows e per velocizzare il suo utilizzo ti propongo 7 comandi utilissimi da usare su Linux sin dall’inizio.


1. Come trovare i file pi√Ļ ingombranti in una directory

Mettiamo tu voglia liberare spazio su disco e ti serva sapere quali sono i file pi√Ļ ingombranti. Oppure che tu voglia dare una occhiata a una directory piena zeppa di programmi e ti serva sapere quali sono i pi√Ļ grossi: scrivi questo comando facendo¬†copia e incolla¬†e avrai in un attimo la risposta.

$   du -a . | sort -n -r | head -n 20

Se vuoi invece editare tutti i file di una directory e di tutte le subdirectory con l’editor vi (VIM), disponibile su ogni versione di Linux, puoi fare copia e incolla di questo comando:

$   find . -xtype f -exec vim {} +

Per uscire dall’editor vi ti basta premere ESC e scrivere :q + INVIO.

2. Come trovare una stringa all’interno dei files di una directory e aprirli in automatico con Sublime Text

Se non ti piace l’editor vi e preferisci usare un editor moderno con interfaccia grafica come ad esempio Sublime Text puoi usare il prossimo programma di poche righe che fa le seguenti cose:

  • Cerca ricorsivamente (cio√® anche nelle sottodirectory) tutti i files che contengono una determinata scritta, es:¬†copyright
  • Lancia Sublime Text e apre una tacca diversa per ognuno dei files trovati.

Procediamo passo passo:
Usa vi o Sublime Text per creare un file che chiamerai “trova“:

$   vi trova

oppure, usando Sublime Text

$   subl trova

Adesso fai copia e incolla del codice qui sotto:

do
grep --exclude-dir=public -lira $FILE1 * | xargs subl $FILE1
echo $FILE1
done

Salva tutto e scrivi sulla linea di comando:

$   sudo chmod +x trova;    sudo cp trova /usr/bin

A partire da adesso ogni volta che vorrai modificare un programma ma non sai esattamente quale file aprire, potrai scrivere:

$   trova copyright

Sublime Text ti aprir√† ogni singolo file che contiene la parola ‚Äėcopyright‚Äô in una tab diversa. In questo modo potrai editarli tuti assieme senza cercarli singolarmente dal prompt dei comandi.

3. Come modificare una stringa all’interno di tutti i files di una directory e di tutte le sue sottodirectory con un solo comando

Questo comando è potenzialmente pericoloso e perciò ti consiglio di usarlo con attenzione:

$   find . -type f -exec sed -i 's/en-us/it/g' {} +

Lanciando il comando all‚Äôinterno di una directory ad esempio di un sito statico html possiamo cambiare tutte le occorrenze di ‚Äúen-us‚ÄĚ e sostituirle con il nostro italico ‚Äúit‚ÄĚ senza cercare dentro i files .html con l‚Äôeditor. E poich√® parliamo di di Linux e non di Windows 10 che √® piuttosto limitato anche con la sua¬†Power Shell¬†¬†possiamo definire le stringhe usando le potenti¬†wildcards¬†delle¬†regular expressions.
A tale proposito, se ti ostini ad usare ancora Windows per programmare, leggi questo post apparso sul forum di Stackoverflow, la bibbia della programmazione:

Unlike many Unix shells, the Windows command line processor does not expand wildcards automatically. It is each program’s responsibility to expand wildcards as it sees fit. Many programs simply don’t support wildcards at all.

Traduzione di Google Translate: ‚ÄúA differenza di molte shell Unix, il processore della riga di comando di Windows non espande automaticamente i caratteri jolly. √ą responsabilit√† di ogni programma espandere i caratteri jolly come meglio crede. Molti programmi semplicemente non supportano affatto i caratteri jolly.‚Äú

 

4. Come usare il comando rsync per copiare due directory via internet

Il comando rsync di Linux non ha un vero equivalente nel mondo Windows e comunque nulla che si avvicini alla sua flessibilità. L’unica vera difficoltà consiste nell’orizzontarsi tra le decine di opzioni della linea di comando e per questo ti mostro 2 esempi già pronti da usare quando serve:

Per copiare due directory sullo stesso computer (l‚Äôesempio pi√Ļ elementare) puoi scrivere:

rsync -zarvh ./dir1/ ./dir2/

Per copiare due directory da un computer locale al tuo sito web (una specie di FTP) puoi scrivere invece:

rsync -zarvh /home/utente/r utente@sitoweb.com:/home/utente/r/

In questo secondo esempio il comando rsync prende i files della cartella locale r e li incolla nella equivalente cartella r nel server sitoweb.com (un nome random…). E’ importante notare come con rsync venga saltata la fase di login/autenticazione del protocollo SFTP, con un vantaggio enorme per la sicurezza.

Infatti, usando rsync con utente@sitoweb.com ci autentichiamo presso il server web usando il protocollo ultrasicuro SSH: oltre alla sicurezza intrinseca delle chiavi SSH puoi così collegarti anche a server blindati con i login classici [utente/password] bloccati.

Sotto vediamo (estratte dall’ help del comando) le opzioni che ho usato in questi esempi:

  • -z, ‚Äďcompress compress file data during the transfer
  • -a, ‚Äďarchive archive files and directory
  • -r, ‚Äďrecursive sync files and directories recursively
  • -v, ‚Äďverbose Verbose output
  • -h, ‚Äďhuman-readable display the output numbers in a human readable format

5. Come vedere tutti i programmi che girano in background dalla shell del tuo Linux

Scrivi il comando¬†htop nella shell e poi premi F6¬†e seleziona, ad esempio¬†PERCENT_MEM, per ordinare i programmi in base alla RAM che stanno usando. Quasi rempre il record negativo sar√† di¬†mysqld, il demon del database Mysql. Scrolla in basso per saltare mysqld e controlla gli altri processi (cio√® programmi che girano sul sistema). Prendi nota dei 3 o 4 che occupano pi√Ļ memoria e decidi su puoi legittimamente bloccarli. Per sapere a quale utente appartengono scrivi:

$   htop -u

screensgoot del comando linux htop

Per trovare tutti gli utenti collegati al sistema scrivi:

$   awk -F: '{ print $1}' /etc/passwd

oppure:

$   getent passwd

A questo punto se abbiamo identificato qualche programma ‚Äúfuori controllo‚ÄĚ che secondo noi sta usando troppe RAM, vediamo come agire per bloccarlo.

6. Come bloccare utenti o processi non importanti ma che occupano TROPPE risorse del sistema

Per elencare i programmi ordinati per utente abbiamo già usato il comando:

$   htop -u

se l’utente riccardo ha lanciato e magari dimenticato troppi programmi, possiamo controllare la sua attività scrivendo:

$   pgrep -u riccardo

e ci apparirà l’elenco dei programmi lanciati con il loro codice unico: se abbiamo deciso con scrupolo che dobbiamo bloccargli tutti i processi (programmi in esecuzione) senza andare a stopparli uno per uno scriviamo:

$   sudo pkill -9 -u riccardo

Dopo qualche minuto magari ricontrolliamo ancora l’utente usando pgrep -u riccardo, e decidiamo se bloccare l’utente per qualche ora.

7. Come elencare quali servizi partono in automatico sul nostro sistema e come bloccarli temporaneamente

Per elencare i servizi abilitati a partire in automatico sul nostro sistema possiamo scrivere:

$   systemctl list-unit-files | grep enabled

Se notiamo delle anomalie o non ci serve qualche tipo di servizio p.e. ufw scriviamo:

$   sudo systemctl stop ufw

Quindi scriviamo il comando free e controlliamo il risparmio di RAM: se il risparmio è limitato possiamo decidere di fare ripartire il servizio in questo modo:

$   sudo systemctl restart ufw

La gestione dei servizi su Linux non è cosa semplicissima e per questo ti invito a non cambiare distro di Linux alla prima difficoltà ma di restare fedele ad Ubuntu e al suo enorme ecosistema di forum e appassionati. Se vuoi ad esempio approfondire il comando systemctl puoi leggerti questo illuminante articolo su Askubuntu.