Man ti da una man…

18 08 2008

Piccolo, veloce ed utile trucchetto per quando usate il comando man.

Scenario: state consultando il manuale di un comando shell (quindi con man <comando> ) perché non vi ricordate le mille opzioni ed argomenti del comando. Mentre state leggendo le pagine volete provare uno o più argomenti diversi senza dover ogni volta uscire da man e poi rientrare per continuare la lettura.

Soluzione: quando siete dentro il manuale premete il punto esclamativo ! e subito dopo potrete digitare qualsiasi comando (non necessariamente lo stesso che state consultando nel manuale). Vi basterà poi premere invio per ritornare all’interno del manuale.

NB: ricordatevi che dopo aver premuto ! non vi troverete più all’interno della $HOME ma sarete temporaneamente all’interno della directory del manuale, ovvero in /usr/share/man.

Comodo, vero? 😉





Linux & Unix command cheat sheets

5 05 2008

Continuando la serie dei post dedicati alle risorse web più congeniali per noi utenti GNU/Linux ecco a Voi una carrellata di Cheat Sheets dei comandi da console per le distribuzioni GNU/Linux (ed anche per i Sistemi Unix):

[fonte: Serverless]





Ottimizzare il codice: un esempio pratico con bash e java (1/2)

27 02 2008

Questo articolo si riallaccia al post di qualche giorno fa sugli esempi di utilizzo del comando awk intitolato “qualche esempio di utilizzo di awk ed utili risorse web“.In quell’occasione vi avevo accennato al programmino java per convertire dei timestamp in date leggibili. Tutto questo perchè in questi giorni io ed il mio socio di tesi (pes) stiamo analizzando una serie di dati proveniente dagli archivi dei database di SourceForge (hihi abbiamo i super-privilegi di poter sguazzare liberamente negli enormi immensi oscuri database di SF 🙂 )

Leggi il seguito di questo post »





Qualche esempio di utilizzo di awk ed utili risorse web

12 02 2008

In questi giorni mi è capitato di ricorrere al piccolo ma potentissimo comando awk. Le sue potenzialità superano i limiti dell’immaginazione, lo si può usare per tantissimi scopi, ma spesso ci si dimentica di lui e si ricorre ad altri strumenti più macchinosi. Vi mostro ora due esempi di utilizzo di questo comando che ho utilizzato per un lavoretto sulla mia tesi, e che mi hanno fatto risparmiare un bel po’ di tempo 😉

Usare awk per splittare stringhe

awk può essere facilmente utilizzato per eseguire lo split di stringhe ricorrendo anche all’uso di espressioni regolari.
$ awk -F ";" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5}' elenco.txt
ove -F “;” indica quale carattere (o l’espressione regolare) delimita le stringhe da separare, print $i stampa le stringhe così ottenute separandole da una tabulazione (indicata da \t). Quindi se in input abbiamo il file di testo (elenco.txt) fatto così:
Metallica;Queen;Muse;Zucchero;Pink Floyd
il comando produrra un output così (qui non si nota molto la tabulazione perché WordPress si mangia gli spazi):
Metallica Queen Muse Zucchero Pink Floyd

al posto di “;” potete inserire qualsiasi espressione regolare inserendola all’interno di / e /. Trovare esempi di espressioni regolari già pronte qui, mentre qua le potete testare. Questo metodo può rilevarsi utile quando di manipolano file CSV i quali generalmente usano il ; (o la ,) come carattere separatore dei campi.

Usare awk per lanciare ripetutamente un programma

Problema:

Devo usare un piccolo programma (in Java) per fare delle conversioni sulle date e stamparle, ed in input ho un elenco di timestamp.

Soluzione rapida:

Uso awk per passare a Java ogni singolo oggetto stringa (il timestamp), invocando di volta in volta il programma Java. Non è la soluzione più bella ne tantomeno efficace perché la JVM ogni volta alloca tutto il codice della classe (ma di questo ne riparleremo in un prossimo post), ma richiede pochissimo tempo nel realizzarla.

Supponiamo di avere il programma Java si chiama DataConverter.java e riceve in ingresso un parametro (il numero): se fosse invocato manualmente ogni volta il comando sarebbe questo (il timestamp è in millisecondi):

$ java DataConverter 1234567890123

che genererà una data in un formato human readable (es: 06/06/1983) da stampare sulla console, ma noi vogliamo automatizzare la procedura avendo a disposizione un file di testo contente n timestamp. Usiamo ancora una volta il magico awk:

$ awk '{print "java DataConverter "$1}' date.txt | sh > dateOutput.txt

Analizziamolo.
Questo intero comando può essere pensato come un’esecuzione concatenata di 3 funzioni (processi) più piccole.

awk ‘{print “java DataConverter “$1}’ date.txt

awk prende in ingresso il file .txt che è un elenco di un numero su ogni riga; esso genera la stringa java DataConverter $1 ove $1 viene di volta in volta sostituito con il numero appena letto.

| sh

significa che la stringa appena generata deve essere interpretata (attraverso l’IPC della pipe | ) dalla shell come un comando da eseguire. Infatti la stringa java DataConverter $1 non è altro che l’invocazione del programmino Java di prima.

> dateOutput.txt

serve per redirige l’output sul file di testo indicato anziché stampare il risultato sulla console. Come vedete con la console potete combinare assieme ben tre linguaggi di programmazione differenti (java, awk, script bash) con l’ausilio di pochissimi comandi 😉

Utili risorse per conoscere AWK:





Fork bomb: per quando vuoi far male al pc!

5 10 2007

Avete presente quando state lavorando sul vostro pc e lui fa di tutto per non collaborare e vi vien voglia di mandare a quel paese quel scatolotto di plastica e silicio? Ecco ogni tanto capita, diciamo capita spesso su Windows, quasi mai su Linux ma di tanto in tanto si intestardisce pure il pinguino.

Oppure volete semplicemente fare uno scherzetto (un po’ tanto bastardo a dire il vero) al computer del vostro amico, vicino di banco, collega d’ufficio?

Bene! Ho trovato la soluzione per qualsiasi vendetta, colpo basso, sfogo da stress tecnologico. Più micidiale della gif animata proposta da Felipe parecchio tempo fa. Più devastante di un calcio rotante di Chuck Norris!

Siete pronti?

Aprite la vostra console o terminale bash che dir si voglia e scrivete…:

$ :(){ :|:& };:

e il computer vittima andrà in pallone e non vi resterà altra alternativa che riavviare il sistema! bello, vero? 😈

Spiegazione a grandi linee (non entro nel dettaglio altrimenti mi fa ricordare pallosissimi esami…): si tratta di una attacco di tipo DOS (Denial Of Service) chiamato Fork Bomb che, come dicono le due parole, genera ricorsivamente una “bomba” (ovvero un grande quantità) di fork, l’istruzione che serve per creare nuovi processi. Attraverso quei comandi è come se dicessi alla shell:

“Ciao, creami una funzione che al suo interno genera una copia di se stessa e continua così finché… muori” 😛

Funziona davvero!

Potete farlo anche su Windows con un comando batch ancora più semplice:

:s
start %0
goto s

su Wikipedia trovate anche le versioni per C e Perl nel caso siate curiosi 🙂

Buona strage a tutti :mrgreen:

Tag Technorati: , ,