Ricerca tra la vecchia roba

I segreti della linea di comando – Command substitution

Posted: Marzo 6th, 2009 | Author: | Filed under: Bash, Hack | 1 Comment »

Esistono dei casi in cui un comando prende come argomento uno o più file, mentre noi necessitiamo di dover passare a questo programma il risultato di un altro comando; la prima cosa che verrebbe in mente è sarebbe quella di usare un file intermedio da usare appositamente, ma la shell bash ha pensato anche a questo, la command substitution!!!

La sintassi generale in questo caso è

<( command )
>( command )

il primo caso è da usare nel caso in cui si vuole l’output di command come contenuto di un file di input, mentre il secondo nel caso ci interessi per un file di output.

Faccio un esempio un po’ particolare che ho usato per scoprire se facebook modifica le immagini uploadate: facciamo finta che abbiamo l’immagine di paula maugeri (attenti a quel gruppo di flickr, può farvi perdere ore) e vogliamo vederele differenze fra questa immagine e quella che scarichi una volta uploadata su FB; identify(1) è un comando della famiglia imagemagick che stampa le caratteristiche di una immagine, mentre diff(1) mostra le differenze fra due files passati come argomenti (W la command substitution)

$ diff -Nur <( identify -verbose paola-maugeri-vinile.jpg ) <( identify -verbose paola-maugeri-vinile-fb.jpg )

@@ -1,4 +1,4 @@

-Image: paola-maugeri-vinile.jpg

+Image: paola-maugeri-vinile-fb.jpg

Format: JPEG (Joint Photographic Experts Group JFIF format)

Class: DirectClass

Geometry: 422×500+0+0

@@ -13,23 +13,23 @@

Channel statistics:

Red:

Min: 0 (0)

– Max: 189 (0.741176)

– Mean: 77.2321 (0.302871)

– Standard deviation: 38.8228 (0.152246)

+ Max: 193 (0.756863)

+ Mean: 77.232 (0.302871)

+ Standard deviation: 38.7657 (0.152022)

Green:

Min: 0 (0)

– Max: 216 (0.847059)

– Mean: 99.3681 (0.389679)

– Standard deviation: 62.7955 (0.246257)

+ Max: 215 (0.843137)

+ Mean: 99.378 (0.389718)

+ Standard deviation: 62.668 (0.245757)

Blue:

Min: 0 (0)

– Max: 214 (0.839216)

– Mean: 32.9495 (0.129214)

– Standard deviation: 49.6714 (0.19479)

+ Max: 215 (0.843137)

+ Mean: 33.1042 (0.12982)

+ Standard deviation: 49.59 (0.194471)

Rendering intent: Undefined

Resolution: 72×72

Units: PixelsPerInch

– Filesize: 101.754kb

+ Filesize: 30.8066kb

Interlace: None

Background color: white

Border color: rgb(223,223,223)

@@ -39,10 +39,10 @@

Dispose: Undefined

Iterations: 0

Compression: JPEG

– Quality: 96

+ Quality: 85

Orientation: Undefined

Jpeg:colorspace: 2

– Jpeg:sampling-factor: 1×1,1×1,1×1

– Signature: 72f58c7cefbafdf5a976cb3d31514669738bf13b3
187203348f9c799a40f0062

+ Jpeg:sampling-factor: 2×2,1×1,1×1

+ Signature: d1e74389ddc06c269a3d21c0b3baafa2bafa9dd5e
ffcc400ccbd76035c2905ed

Tainted: False

Version: ImageMagick 6.3.7 12/10/08 Q16 http://www.imagemagick.org

 Come potete vedere quel napoli di FB usa un Jpeg sampling 2×2,1×1,1×1, una quality di 85, ma anche riuplodandola con quei parametri, usando convert(1)

$ convert -quality 85 -sampling-factor 2×2,1×1,1×1 paola-maugeri-vinile.jpg paola-maugeri-vinile-quality-85-sampling.jpg

 purtroppo ci sono dei parametri nello spazio dei colori (?) che vengono modificati… quindi niente steganografia, a meno che non la stiano già facendo loro ;-).

Un’altra ficata che è possibile con la command substitution consiste nel suo uso combinato con ssh e tee: il primo è il comando standard per il lavoro da remoto (usa la crittografia a chiave asimmetrica) mentre il secondo splitta lo standard input e lo ristampa nello standard output, salvandolo al contempo in un file passatogli come argomento. Bene, possiamo sparare uno stesso file in diversi server utilizzando il comando

 wget -O – http://ftp.mozilla.org/…/thunderbird-3.0b2-i686.tar.bz2
| tee >(ssh host1 ‘tar xjvf -‘) | tee >(ssh host2 ‘tar xjvf -‘) | ssh host3 ‘tar xjvf -‘

wget(1) è il programma per il download di file da command line nella unix-way…questo ultimo trucco by shell-fu


One Comment on “I segreti della linea di comando – Command substitution”

  1. 1 Link said at 1:24 pm on Marzo 7th, 2009:

    Addio data squatting allora =(, ma hai provato a vedere se le fluttuazioni del colore sono volute e variabili (per evitare proprio steganografia e simili) o se sono sempre uguali?