shell

Impostare un limite di banda per un singolo processo: il comando trickle

linux

Se si vuole impostare un limite banda su una intera interfaccia di rete esistono diverse guide in rete che spiegano come farlo. Più difficile trovare il modo per limitare un singolo processo.

Ci viene in aiuto il comando TRICKLE.

Una volta installato (è presente nelle più comuni distribuzioni), è sufficiente usarlo prima del comando che vogliamo lanciare, ad esempio in questo modo:

trickle -d 20 comando parametri ...

Per avviare "comando" con un limite di download di 20KB/sec

 

Per maggiori informazioni, e per capire come funziona il limite e il processo di "smoothing":

https://github.com/mariusae/trickle

Eseguire un comando in inglese

shell
Tags: pillshell

A volte, pur avendo impostato il sistema in italiano, può essere utile eseguire un comando forzando i messaggi in inglese (in genere mi serve quando devo cercare un errore su google, o devo segnalarlo su qualche forum inglese).

Semplicissimo, da shell:

LANG=en_US <comando>

Per programmi che si eseguono in finestra grafica potrebbe non bastare, nel caso bisogna usare la variabile adatta per il proprio DE. Nel mio caso, su KDE, è sufficiente:

KDE_LANG=en_US <comando>

Il comando screen

shell

Il comando screen permette di avere una interfaccia tra un terminale fisico (in pratica: noi) e un comando (in genere la shell). Tale interfaccia, che agisce da proxy, permette anche ad altri terminali fisici di "agganciarsi".

In sostanza: possiamo interagire con la stessa shell da più terminali.

Screen fa molte altre cose: ad esempio agisce da vero e proprio "window manager di terminale", permettendo di avere in una sessione più finestre di shell aperte. Ma sono funzionalità che in questo articolo non verranno trattate.

Bash: usare una variabile per costruire un comando (con wildcards)

bash

Poniamo che in uno script vogliamo eseguire un comando, i cui parametri sono all'interno di una variabile (o, più in generale, parte o tutta la linea di comando è presente in una variabile). Normalmente eseguiremo una cosa del genere:

PARAMS="-par1 -par2"
command $PARAMS

Fin qui nessun problema. Gli scogli arrivano se dentro $PARAMS sono presenti delle wildcards, ad esempio:

PARAMS="-par1 --exclude={/dir1/*,/dir2/*}"
command $PARAMS

In questo caso l'esecuzione del comando non funziona o, meglio, non funziona allo stesso modo di aver eseguito direttamente:

command -par1 --exclude={/dir1/*,/dir2/*}

Bash: array associativi e come copiarli

bash

La bash ha il supporto sia per gli array a indice numerico che per gli array associativi. Vediamo come usarli.

Array a indice numerico

Per quanto riguarda i primi è possibile usare queste forme per la dichiarazione:

var[index]=value

var(value1 value2 value3...)

(in questo caso il primo indice parte da "0")

var([index1]=value1 [index2]=value2 ...)

Ad esempio, questi comandi generano la stessa variabile:

test[1]=one
test[2]=two
echo ${test[1]}
unset test
test=([1]=one [2]=two)
echo ${test[1]}

E' possibile usare anche la forma "+=" per aggiungere un array a un altro.

var += ([index]=value ...)

Da notare che è possibile dichiarare una variabile come array usando la forma:

declare -a var

Linux shell: impostare una cartella condivisa dove tutti i file sono modificabili da gruppo

linux

 

Se si vuole avere una cartella condivisa da più utenti, nella quale tutti possono inserire file e vedere/manipolare anche i file degli altri, senza problemi di diritti, la soluzione non è immediata. I diritti di creazione file per un utente loggato e/o le sue impostazioni di gruppo di default (in particolare per l'utente root) possono creare l'inconveniente che alcuni file non sono leggibili da tutti.

Per evitare questo usiamo 2 caratteristiche della gestione permessi di linux: il flag "s" (setUID) e la gestione FACL (file access control list).