Clone this wiki

Wow, a post after almost two years!

I'm going to be brief to avoid taking hours to make a single post and going back to not writing.

First things first, I setup a wiki for personal references/notes it's not thought to have refined or complete content, just fast tips to solve situations I encountered. It might be handy, it might not, it's your decision.

I had a bit of fun making it as minimalistic as possible, and now it should run with only sh and a markdown to html compiler. All of this while being fully version-controlled by git. You can take a look at it on my continue.

Primer batch de tweetcodes (1 - 10)

Desde finales de enero estoy publicando un tweetcode al día en gnusocial (@oneliners), y en twitter (@twtcodes). El concepto viene de una idea que tuvo @hacklego para hackliza: un twitcode sería un pequeño codigo, de no más de 140 caracteres, que tenga alguna utilidad. Parte de la idea, era también dar una explicación de como funciona, así que ahora que va más de un mes de estos twitcodes, toca empezar a explicarlos. Veamos...

1. Colorear 0s y 1s

1
sed 's/1/\x1b\[1;32m1/g'|sed 's/0/\x1b\[1;31m0/g'|sed 's/\x1b\[1;3[12]m[01]/&\x1b\[0m/g'


En gnusocial, twitter.

Desglose:

1
2
3
sed 's/1/\x1b\[1;32m1/g' | # Colorea los 1s de verde
sed 's/0/\x1b\[1;31m0/g' | # Colorea los 0s de rojo
sed 's/\x1b\[1;3[12]m[01]/&\x1b\[0m/g' # A los 
continue.

Extrayendo subtitulos de un .mkv

Realmente sobre esto ya había escrito pero se perdió en alguna migración... así que aquí está de nuevo

Todo el parseado y la extracción la implementa mkvtoolnix, así que habiéndolo instalado...

sudo apt-get install mkvtoolnix

A partir de ahí podemos ver las pistas que tiene un archivo

mkvinfo video.mkv
continue.

Script para limpiar zombies

Toma como parámetro el id del proceso que generó los zombies y usa GDB para hacer waitpid, lo más seguro es que haga falta root :/

#!/usr/bin/env bash
# Kills zombie process spawning from a parent PID

# check parameter number
if [ -z "$1" ];then
    echo "$0 <zombie parent pid>"
    exit 0
fi

# assign reasonable names to variables
ppid=$1
fname=`tempfile`

# GDB instructions
(for zpid in `ps h --ppid=$ppid|grep -P '^\s*\d+\s+[^ ]+\s+Z'|awk '{print $1;}'`;do
    echo "print waitpid($zpid, 0, 0)" # wait for each zombie
 done
 # and detach
 echo "detach") > $fname

# launch GDB
gdb -batch -p $ppid /proc/$ppid/exe -x $fname

# and cleanup
rm $fname

Recuperando un archivo eliminado pero abierto por otro proceso

Hoy, hace escasos 10 minutos estaba limpiando el disco, así que me dirijí a la carpeta de vídeos y... ¡raaaaca!, 20 archivos a alimentar la bestia del espacio libre. Pero al ver los archivos que habían sobrevivído a la limpieza sobrevino la preocupación sobre el paradero de uno de ellos, y es que quizá al fin y al cabo saltarse el paso de la papelera de reciclaje no fuera buena idea.

El problema era que me había cargado una película que tenía pensado compartir y con más bien pocos seeders, así que tocaba recuperarlo. Por suerte el transmission seguía abierto y seedeando, así que aún había esperanza, al fin continue.

One liners (14): sacar un número decimal de /dev/random en bash

 

1
head -c 1 /dev/random | od -An -td
  • head -c 1 /dev/random: Lee un solo caracter de /dev/random.
  • od -An -td: od suele usarse para mostrar los valores octales de un archivo (de ahí octal dump), con -An indicamos que no queremos que se muestre el offset, y con -td hacemos que se muestre en decimal.

Zombie process cleaning script

Takes the zombie parent process id as parameter and uses GDB to waitpid them surely it'll need root.

#!/usr/bin/env bash
# Kills zombie process spawning from a parent PID

# check parameter number
if [ -z "$1" ];then
    echo "$0 <zombie parent pid>"
    exit 0
fi

# assign reasonable names to variables
ppid=$1
fname=`tempfile`

# GDB instructions
(for zpid in `ps h --ppid=$ppid|grep -P '^\s*\d+\s+[^ ]+\s+Z'|awk '{print $1;}'`;do
    echo "print waitpid($zpid, 0, 0)" # wait for each zombie
 done
 # and detach
 echo "detach") > $fname

# launch GDB
gdb -batch -p $ppid /proc/$ppid/exe -x $fname

# and cleanup
rm $fname