Beruflich Dokumente
Kultur Dokumente
Bash es una de las herramientas ms potentes que tenemos a nuestro alcance, aunque no slo de bash
trata el artculo, sino de trucos para consola, one-liner como diran muchos (aunque habr algunos twoliners) que podemos utilizar y pueden hacernos la vida un poco ms fcil:
Cadenas de texto
Trim
Es una herramienta que utilizaremos para recortar nuestra cadena basndonos en los a la zquierda y a
la derecha, en este caso nos basaremos en los espacios, que es uno de sus usos ms comunes (as
podemos obtener la cadena limpia tanto por delante como por detrs. Podemos ver un ejemplo en C
aqu; aunque en la terminal muchas veces es til, y sobre todo para nuestros scripts.
1CADENA=" Esto es una cadena ";
2echo ["${CADENA#"${CADENA%%[![:space:]]*}"}"]
La nueva expresin con sed me ha dado mejores resultados en algunas cadenas resultantes de la
ejecucin de algunos comandos. Dejo la antigua para referencia.
Calendarios
Si queremos un calendario de 2030:
$ cal 2030
Si queremos un calendario de Febrero de 2050
$cal 2 2050
Contar palabras
Contar las palabras que salen en un texto diciendo cuntas veces sale cada una (el texto es
FICHERO.txt):
tr -c a-zA-Z \n < FICHERO.txt | sed /^$/d | sort | uniq -i -c | sort -n
El primer comando (tr) pone una palabra en cada lnea, sed, elimina las lneas vacas, el primer sort
ordena las palabras, poniendo las palabras repetidas todas juntas, uniq pone slo una vez cada palabra,
y dice cuntas veces se repiten (porque estn juntas), el ltimo sort ordena las palabras por nmero de
apariciones.
Si queremos que se contabilicen tildes, ees y otros smbolos, probad
$ tr -c a-zA-Z- \n < contar | sed /^$/d | sort | uniq -i -c | sort -n
, podemos pasadle a tr los caracteres que necesitemos. Gracias nauta.
Esto devolver
AAA CCC BBB AAA
Borrar cachs
Hay que ejecutar como root lo siguiente, veremos algo de RAM libre
# echo 3 > /proc/sys/vm/drop_caches
Si no somos root o nos da pereza, ya que no podemos poner sudo delante:
$ echo 3 | sudo tee /proc/sys/vm/drop_caches
Ejecucin de rdenes
Tiempo y recursos utilizados al ejecutar un programa
Para ver el tiempo utilizado en la ejecucin de un comando, podemos utilizar:
$ time [COMANDO]
por ejemplo:
$ time lsof
Para saber los archivos abiertos en este momento, y ver el tiempo empleado en obtener esa
informacin.
Si queremos ms informacin podemos hacer:
/usr/bin/time -f rss=%Mk etime=%E user=%U sys=%S in=%I out=%O lsof
Con lo que nos dir la memoria empleada el tiempo de usuario, sistema y el nmero de entradas y
salidas en el sistema de archivos.
Ir al directorio anterior
Con este comando si cambiamos de directorio por un momento, luego podemos volver donde
estbamos
cd
Archivos
Montar un disco RAM
Necesitamos un disco RAM para algo rpido unos 100Mb (como root):
# mkdir /mnt/tmp
# mount -t tmpfs tmpfs /mnt/tmp -o size=100m
Pero todo lo que guardemos se perder cuando reiniciemos el ordenador o cuando
hagamos:
# umount /mnt/tmp
-n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32
all-repeated=separate
Red
Puerto y PID que lo usa
Para los puertos TCP:
$ netstat -tnp
Para los puertos UDP:
$ netstat -unp
Para ver los puertos que hay escuchando, pondremos tambin un -l.
Clculo
Hacer una cuenta
Podemos pasar a bc las operaciones que queremos realizar:
$ echo 1+4+6*9+9*10+34-25/2 | bc
Si la operacin devuelve decimales (un mximo de 3):
$ echo scale=3; 7863/2398 | bc
Si queremos hacer clculos con senos y cosenos. Seno de pi/2:
$ echo scale=2; s(3.141592/2) | bc -l
Calcular pi con 100 decimales:
$ echo scale=100; 4*a(1)
Operaciones sencillas
Slo operaciones sencillas (sumas, restas, multiplicaciones y divisiones) enteras. Es
ms rpido que bc
$ let VARIABLE=1+2+3+4*5
Tambin lo podemos hacer con versiones nuevas de BASH as:
$ echo $((4+5+3*4-4/2))
O utilizando expr (aunque tenemos que poner un espacio entre cada elemento)
$ expr 2 + 3 + 4 * 5 / 2
Cambios de base
De decimal a octal (120 es el decimal)
$ printf %o 120
De decimal a hexadecimal
$ printf %X 120
o (si queremos la letra en minscula)
$ printf %x 120
De base A (hasta 16) a base B (hasta la que queramos)
$ echo ibase=A; obase=B; N | bc
por ejemplo, para pasar de hexadecimal a binario:
$ echo ibase=16; obase=2; FF | bc
o para pasar de binario a decimal:
$ echo ibase=2; 11011101 | bc
Otros
Separar en varios archivos un archivo VCF con
muchos contactos
Referencias
Muchos son mos, otros han sido vistos en varios sitios hace tiempo, y otros son
clsicos, que estn en muchos sitios. Pero aqu mencionar algunas fuentes (en
algunas podris encontrar ms ejemplos y otros one-liners que no he includo en la
lista):
Bash One-Liners
Just another tech blog
Good coders code, great reuse
Al pan pan y al vino vino
All about Symbian Forums
Fusion242
Actualizaciones
Actualizado el 22/04/2013, aadida una solucin para contar palabras con smbolos
y ees.
Actualizado el 04/02/2015, modificado el trim con sed. Ahora funciona mejor (el
antiguo daba problemas con algunas cadenas de caracteres)
Actualizado el 25/10/2015, corregidos unos caracteres que no salan bien y
descolocaban parte del texto en Contar palabras.
http://totaki.com/poesiabinaria/2013/01/magia-en-bash-49-ejemplos-en-una-sola-linea-o-dos/