¿Qué son los buenos hacks de UNIX?

Pipe no es una herramienta separada para ser pirateada y utilizada como normalmente usaría las herramientas.

La tubería actúa como SALIDA para un proceso (el que está en el lado izquierdo) e IN para el otro (en el lado derecho).

Importancia de la tubería? Mucho infierno

Si vamos a escribir un programa para leer el número de archivos y subdirectorios en un directorio, normalmente, la lógica sería:

  • obtener el nombre de directorio
  • abre el directorio
  • lee el directorio
  • contador ++ para cada lectura
  • llegar al final y salir
  • mostrar el contador

¡Maravilloso! Su programa funciona y es suficiente para dar lo que se le pidió.

Ahora veamos, qué tubería hace que suceda: –

ls -l | wc -l

Aquí, ls es un programa separado y también lo es wc.

Se juntan por ese PIPE y hacen lo que hace su programa, con igual elegancia. Además, recuerda, son binarios separados.

¿Es esta reutilización a nivel BINARIO? ¡Sí!

¿Es este IPC? ¡Sí! ¡Es! Dos procesos separados han sido vinculados con una tubería!

Es impresionante? ¡Demonios si! Nuestro programa solo se puede utilizar para este propósito específico solicitado. ¡Pero el uso de programas destinados a otra cosa, para satisfacer / resolver otra necesidad es y siempre será increíble! Esto es reusabilidad !!!!

La tubería es una de esas cosas que se adhiere y hace posible, LA FILOSOFÍA DE UNIX.

¡Aclamaciones!

Yo diría pipetillas:
Un paquete de Python que permite la composición de funciones similar a la utilización de tuberías de Unix.
muy elemental muy útil ..
ejemplo

pyfiles_by_length = (pipe | os.listdir | where(X.endswith('.py')) | sort_by(len) | enumerate | foreach("{0}. {1}") | '\n'.join ) 

o

 pyfiles_by_length = lambda d: (reduce('{0}\n{1}'.format, map(lambda x: '%d. %s' % x, enumerate(sorted( filter(lambda f: f.endswith('.py'), os.listdir(d)), key=len))))) 

o

 from functools import partial from itertools import ifilter from pipetools import pipe odd_sum = pipe | xrange | partial(ifilter, lambda x: x % 2) | sum odd_sum(10) # -> 25 

https://github.com/0101/pipetools

Aquí hay una tubería que usa un registro de acceso de Apache como entrada y agrega descargas para un grupo particular de archivos, por día, por un mes.

 grep Jun/2011 access_log |grep -i /sw/files/webp |cut -d ' ' -f 4 |cut -d / -f 1,2 |uniq -c 37 [01/Jun 24 [02/Jun 26 [03/Jun 21 [04/Jun 26 [05/Jun ... 15 [25/Jun 28 [26/Jun 15 [27/Jun 13 [28/Jun 17 [29/Jun 26 [30/Jun 

Similar, que clasifica los archivos por popularidad:

 grep /sw/files/ access_log |cut -d ' ' -f 7 |cut -d - -f 1 |sort |uniq -c|sort -n -r|head 49260 /sw/files/foo 2088 /sw/files/bar 677 /sw/files/bling 609 /sw/files/zik 477 /sw/files/zot 471 /sw/files/baz 395 /sw/files/bonk 327 /sw/files/kludge 292 /sw/files/pink 275 /sw/files/ponk 

Aquí hay un canal que genera URL cortas para una tabla de productos y actualiza la base de datos:

 mysql dbname -e 'select id from product' -B --skip-column-names |(while read ID ; do SURL=`curl -s -d longurl=http://yourdomain.com/product/$ID http://ur1.ca |sed -r -n 's/^.*success.*href="([^"]*)".*$/\1/p' `; echo "UPDATE product SET short_url='$SURL' WHERE id='$ID';"; done) |mysql dbname 

(He roto la línea para mayor claridad.)

Aquí hay uno que cuenta un gráfico de barras sucesivas del proceso de Apache httpd:

 while sleep 5 ; do N=`ps -C httpd|wc -l` ; perl -e "print '*'x$N,\"\\n\";" ; done ****************** ****************** ******************* *********************** **************************** **************************** ***************************** ***************************** ***************************** ******************************* ******************************* ******************************* ******************************* ... 

Estadísticas sobre versiones de Internet Explorer basadas en el registro de acceso de Apache, ordenadas por número de solicitudes (filtradas a septiembre de 2011 solamente):

 grep Sep/2011 access.log |perl -n -e 'm/(MSIE\s\d+)/ && print "$1\n"' |sort |uniq -c |sort -n 3 MSIE 3 4 MSIE 2 28 MSIE 999 54 MSIE 1 99 MSIE 10 102 MSIE 4 233 MSIE 5 6127 MSIE 6 13632 MSIE 7 36403 MSIE 9 41662 MSIE 8 

Si por “hackeo de tubería” estás buscando una sola línea, prueba aquí:
http://www.commandlinefu.com/com