Alcuni comandi utilissimi da usare sul terminale di Linux

Aug 19, 2020

Lo leggi in 6 minuti

Se sviluppi progetti robotici in maniera professionale o come hobbista evoluto, conoscere Linux e la sua shell (Bash) ti darà enormi vantaggi rispetto al command prompt di Windows.

Alcuni comandi utilissimi da usare sul terminale di Linux

Grazie ai molti “accessori” della shell di Linux, possiamo eseguire dei compiti molto complessi con una sola riga di programma.


Oggi ti presento alcuni fra i tanti trucchetti che avrei voluto conoscere da subito quanto ho iniziato a programmare!


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.


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 (ad esempio Sublime Text) puoi usare il prossimo programma di poche righe che fa le seguenti cose:

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:

for FILE1 in "$@"
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.

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 è molto potente e pericoloso  :-) e perciò ti consiglio di usarlo con un poco di 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 vi ostinate ad usare ancora Windows per programmare, leggete questo commento 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.

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.

Un comando indispensabile, secondo me.

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


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 legittimamante 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.

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.

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.

https://askubuntu.com/questions/218/command-to-list-services-that-start-on-startup

Iscriviti ora alla nostra newsletter e dopo avere confermato la tua iscrizione troverai ogni 15 gg nella tua mail un argomento o un progetto pratico da seguire, con la lista dei componenti e il software necessario.

newsletter