command line

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

Unire file PDF

command line

Volete concatenare più file PDF per ottenere un unico file che contenga tutte le pagine degli altri?

Comando velocissimo che fa esattamente questo, lasciando inalterate dimensioni e risoluzione:

pdfunite FILE-1 FILE-2 ... FILE-RISULTATO

Alternativa con ghostscript (che pero' genera un file dalla dimensione più grossa della somma, anche se la qualità sembra la stessa):

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=FILE-RISULTATO FILE-1 FILE-2 ..

Eventualmente si può fare anche con pdftk (non ho provato) o con convert (che però di base ricomprime tutto e fa casino).



Editare le informazioni EXIF via command line

command line

La vostra macchina fotografica ha l'orario sballato e ve ne siete accorti tardi? Nessun problema: basta spostare l'orario EXIF di tutte le foto ormai fatte avanti o indietro di quanto serve con un semplice comando via command line: jhead .

jhead -ta-8:15 *.jpg

Questo comando toglie 8 ore e 15 minuti a tutte le foto.

Altra situazione che mi è capitata sistemando le foto dell'ultimo viaggio: volete trasferire tutti i tag EXIF da una foto a un altra? (nel mio caso perchè avevo fatto un panorama unendo varie foto, e volevo riprendere i dati EXIF da una di queste). Semplice:

jhead -te sorgente.jpg destinazione.jpg

Eseguire velocemente una app java che necessita di classpath

java

Se abbiamo un JAR con una applicazione Java da eseguire, e questo ha delle dipendenze da inserire nel classpath, si può usare questo comando veloce:

java -cp $(echo *.jar | tr ' ' ':') COMMAND

Il comando prevede che tutti i jar necessari (compreso il jar del comando) siano nella directory corrente. Se non è cosi' si possono fare le modifiche relative.

Esempi:

java -cp $(echo *.jar | tr ' ' ':') org.apache.axis.wsdl.WSDL2Java
java -cp app.jar:$(echo lib/*.jar | tr ' ' ':') org.app.MyApp

Search & Replace su più file da riga di comando

script

Se vogliamo sostituire del testo su tutti i file che contengono il testo originale all'interno di un percorso possiamo fare in questo modo:

grep -RlZ "TESTO_ORIGINALE" . | xargs -0 -l sed -i -e 's/TESTO_ORIGINALE_ESC/TESTO_DA_SOSTITUIRE_ESC/g'

Per *_ESC intendo che il testo deve considerare l'escaping delle "/".

Ad esempio:

grep -RlZ "/system_home/eric/" . | xargs -0 -l sed -i -e 's/\/system_home\/eric\//\/home\/eric_arch\//g'

Sostituisce tutti i /system_home/eric/ con /home/eric_arch/.

Il grep iniziale è una ottimizzazione per evitare di fare il search & replace di tutti i file. Per vedere se sta estranendo i file giusti:

[code]

Specificare una password SSH via command line

command line

Se è necessario creare un collegamento SSH con un host, e per autentificarsi occorre usare il metodo tradizionale della password, il comando "ssh" permette di specificarla solo in maniera interattiva. Non c'è alcun modo per specificare la password tramite un flag command line.

Questo può essere un problema all'interno di script, oppure quando serve creare dei collegamenti SSH richiamati da altri programmi.

(Ad esempio Netbeans, per fare un collegamento SVN tramite SSH, richiede di specificare il comando SSH da eseguire per il collegamento).

A venirci in aiuto c'e' sshpass.

aptitude install sshpass

Utilizzo:

sshpass [options] command arguments

Opzioni:

[bash]