Aug 19, 2020
Lo leggi in 7 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.
Oggi ti presento alcuni fra i tanti trucchetti che avrei voluto conoscere da subito quanto ho iniziato a programmare!
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.
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.
Ti interessa questo articolo e vuoi scoprire a costo zero tutti i segreti della elettronica digitale?
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.“
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/
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:
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
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.
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.
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.