liberar memoria

Muchas veces nos encontramos que nuestro servidor/maquina linux tiene casi toda la memoria RAM ocupada aunque el top no nos muestre ningún proceso consumiendo un exceso de RAM. Para mirar el consumo de RAM propongo 2 formas:

# top
y una vez abierto shift+m (ordenar por consumo de memoria)

# free -m
la m corresponde a megas, si queremos que nos lo muestre en gigabytes usaremos g, bytes b y kilobytes k.

Para ello hay una forma (no destructiva) de liberar esta RAM reservada a procesos que ya no están activos.

echo 1 > /proc/sys/vm/drop_caches

Para los que tengáis ganas de leer:

Invalidating the Linux Buffer Cache

When you write data, it doesn’t necessarily get written to disk right then. The kernel maintains caches of many things, and disk data is something where a lot of work is done to keep everything fast and efficient.

That’s great for performance, but sometimes you want to know that data really has gotten to the disk drive. This could be because you want to test the performance of the drive, but could also be when you suspect a drive is malfunctioning: if you just write and read back, you’ll be reading from cache, not from actual disk platters.

So how can you be sure you are reading data from the disk? The answer actually gets a little complicated, particularly if you are testing for integrity, so bear with me.

Obviously the first thing you need to do is get the data in

avi a mov

post rápido.

convertir de avi a mov:

# apt-get install ffmpeg libavcodec-unstripped-52

# ffmpeg -i filename.avi -target ntsc-dvd filename.mov

los videos que se comprimen con el avidemux, los que estan en formato .avi usan el códec DX50. Lo que hace que el quicktime de apple no pueda reproducir muchos de los ficheros .avi.…

bash + crontab + mt

[boceto no comprobado]Os dejo con este boceto porqué sé que hay algunos de vosotros que estáis siguiendo de cerca la evolución de mi script en dialog (prometo un post chulísimo cuando lo tenga un poquito mas experimentado).

——-

Llevo unos días peleándome con un script de bash que cuando lo ejecuto con crontab no funciona, he hecho varias pruebas pero ninguna me ha funcionado, así que he empezado a leer a ver si a alguien mas le pasaba esto, y efectivamente no es una cosa que sólo me pase a mi, así que os voy a contar dentro de mis conocimientos lo qué sucede.

posible solución 1:
Nuestro script está escrito para correr bajo bash, la shell por defecto de linux, si hacemos un

# echo $SHELL
/bin/bash

pero qué pasa si esto mismo lo hacemos en crontab? pues que nos devolverá /bin/sh

estas pequeñas diferencias hacen que el comportamiento de los scripts sea un poquito distinto, y que por ejemplo tar no funcione como esperamos.

Para ello debemos añadir una linea en /etc/crontab que sea así:

SHELL=/bin/bash

Mantendremos la parte de arriba intacta, dejando la de abajo para los scripts de bash y arriba para los de sh.

Posible solución 2:Si esto no funciona, quizás sea un problema de permisos de acceso del usuario que está ejecutando el script en cron.

Tenemos derechos encima de ficheros, pero también encima de dispositivos, estos segundos se pueden controlar desde el udev

bpun Blackhold, check if /dev/st0 is accessible.. if its an …

Bash scripting básico y cuatro cosas mas

para crear un fichero de bash creas un fichero de texto plano, da igual el nombre, pero por costumbre se pone nombredelscript.sh y se le dan derechos de ejecución a este fichero, por ejemplo

chmod a+x script.sh

chmod sirve para cambiar los derechos de los ficheros, tienes para la primera parte u g o a, u para el usuario, g para el grupo, o para otros y a para all, después del símbolo + rwx, r para leer, w para escribir y x para ejecutar.

luego debes editar este fichero.

es importante iniciar el fichero de texto con la siguiente línea:

#!/bin/bash

con esto le indicamos que use el interprete de comandos bash, que es el propio de linux.

a continuación ponemos ahí nuestro código, el interprete nos va a permitir usar un gran numero de condiciones, while, switch, switch case, if, for, etc. cada una de las condiciones tiene también su sintaxis

condicional con un if

#!/bin/bash
if [ “foo” = “foo” ]; then
echo expression evaluated as true
fi

condicional con un if y un else

#!/bin/bash
if [ “foo” = “foo” ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi

condicional usando un if, un else y variables

#!/bin/bash
T1=”foo”
T2=”bar”
if [ “$T1” = “$T2” ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi

condicional usando un case (este es uno de mis favoritos!)

#!/bin/bash
T1=1
case ($T1) in
1)
echo 1
;;
2)
echo 2

comandos bash

aquí tenéis un comando bash que sirve para eliminar las líneas contenidas en un fichero las cuales contengan una cadena de texto determinada:

$ sed -i ‘/cadenadetexto/d’ fichero…

eines networking (scanrand)

avui us mostraré una magnífica eina de xarxa, es troba dintre el quinteto d’eines de networking anomenada paketto (en debian apt-get install paketto) .

Estàs intentant fer ping a una màquina però no respon perquè té els ICMP capats? senzill doncs, utilitza l’scanrand i esbrina quins ports té oberts.

el seu funcionament és molt simple, va fent peticions TCP en els ports més comuns i et retorna el resultat amb els que estan oberts.

urbanita:~# scanrand www.google.com
UP: 64.233.183.104:80 [11] 0.427s
UP: 64.233.183.104:443 [11] 0.428s

com veieu es requereixen drets de root per executar l’eina, mireu què passa si poseu un link simòlic a /bin:
laura@urbanita:~$ scanrand www.google.com
PK requires root to access the network directly.: Success

el primer camp t’indica si el port obert hi ha un servidor a darrere o no (simplement, el servei que escolta a aquest port pot estar parat), després tenim la IP que ens retorna la ressolució del nom de domini, amb : el port, entre “[” i “]” els salts que ha de realitzar fins arribar a la màquina que ofereix el servei(1), és a dir, la meva petició ha hagut de passar per 11 màquines abans d’arribar a la màquina final i l’últim camp és el temps de resposta.

(1)
conta els salts que realitza un cop està dintre la xarxa local remota, fixa’t en aquesta petició, hi ha 5 i 6 salts, els 5 salts corresponen al router i els 6 que hi ha una màquina al darrere.
urbanita:~# scanrand www.domini.com