Memoria consumida en Linux
Muchas veces puede ser necesario encontrar la memoria que un proceso o un usuario consumen en el sistema. Lograr esto es bastante sencillo aunque implica hacer algunas cuentas. Por ello es posible simplificar la tarea utilizando algún script que la haga por nosotros. A continuación puede verse primero cómo calcular la memoria física consumida por el proceso Apache y luego por el usuario www-data. La unidad final está dada en MB.
root@server:~# ps -C apache2 -o rss --no-headers | (tr '\n' +; echo 0) | bc | awk '{print $0 "/1024"}' | bc
267
root@server:~# ps -U www-data -o rss --no-headers | (tr '\n' +; echo 0) | bc | awk '{print $0 "/1024"}' | bc
146
Existe otra forma también de chequearlo que es bastante más sencilla y es utilizando la herramienta smem. El problema es que dicha herramienta es compatible sólo con los kernels 2.6.27 o más nuevos. A continuación se puede ver la consulta de cuánto consume el proceso apache2. En este caso, smem mostrará todos los procesos y, al final, la suma de los consumos (debido a la opción -t suministrada). La opción que nos interesa en este caso es RSS, que se ve que da un total de 16720 bytes. Es para tener en cuenta que smem está sumando a lo consumido por el proceso que se le pidió la propia ejecución del comando; esto debería restarse del total para tener una valor más preciso. Daría finalmente 12020 bytes.
root@server:/home/leandro# smem -t -P "apache2" PID User Command Swap USS PSS RSS 10171 root /usr/sbin/apache2 -k start 348 144 248 1328 7173 root /usr/sbin/apache2 -k start 360 172 276 1476 7171 root /usr/sbin/apache2 -k start 364 200 302 1516 7174 root /usr/sbin/apache2 -k start 364 200 302 1516 7175 root /usr/sbin/apache2 -k start 364 200 302 1516 7731 root /usr/sbin/apache2 -k start 364 200 302 1516 7172 root /usr/sbin/apache2 -k start 352 204 306 1520 1816 root /usr/sbin/apache2 -k start 364 180 319 1632 18189 root /usr/bin/python /usr/bin/sm 0 2944 3119 4700 ------------------------------------------------------------------------------- 183 1 2880 4444 5476 16720
Finalmente, debajo se hace la misma consulta pero esta vez preguntando lo consumido por el usuario leandro.
root@server:/home/leandro# smem -t -U "leandro" PID User Command Swap USS PSS RSS 17381 leandro -bash 36 5312 5459 6880 ------------------------------------------------------------------------------- 183 1 36 5312 5459 6880
Crear una ISO a partir de un CD
Linux tiene varias maravillas que lo hacen realmente simple y potente (sí, simple!). Una de ellas es el comando dd, que permite hacer varias cosas, entre las que puede considerarse la de crear una ISO. Esto se hace de manera muy sencilla:
dd if=/dev/cdrom of=nombre_imagen.iso
En el ejemplo anterior se toma como origen el dispositivo de CD (que puede variar según la distribución) y se genera el archivo nombre_imagen.iso. Que hay utilidades gráficas más “amigables” no lo niego, pero hay que reconocer que dd es la más ampliamente distribuida y nadie puede decir que no es capaz de ejecutar el comando anterior.
Watch: repetir periódicamente la ejecución de un programa
Muchas veces nos encontramos en la necesidad de ejecutar repetidas veces un comando, siendo la forma más común de hacerlo la de escribir una y otra vez el mismo comando. Por suerte, existe en Linux una utilidad que se llama watch que hace precisamente esa tarea por nosotros. La forma de uso es extremadamente simple:
watch comando
Por ejemplo, si estamos copiando archivos desde otro lugar y deseamos hacer un ls de un directorio para controlar el ritmo de la copia se podría ejecutar:
watch ls
Que dará como salida:
Every 2.0s: ls Thu Nov 11 16:55:00 2010 netstorming ----------------------------------------------------------------- Every 2.0s: ls Thu Nov 11 16:55:04 2010 netstorming mikroways
Sin dudas, hay situaciones donde el watch es mucho más útil, espero entiendan que lo anterior fue sólo a modo de ejemplo.
Montar filesystem remoto con SSH
Ya se habrá entendido que SSH es más que un simple protocolo para administración remota. De hecho, nos brinda una cantidad enorme de funciones muy útiles. Hace unos días veíamos cómo redireccionar puertos con SSH; un tiempo atrás habíamos visto también cómo ejecutar aplicaciones gráficas remotas. Esta vez veremos cómo montar un sistema de archivos remoto utilizando sólo SSH. Para ello necesitamos, lógicamente, acceso por SSH a la máquina que tiene el filesystem que deseamos montar. Además, en la máquina de destino tendremos que instalar la utilidad que nos permitirá hacer esto: sshfs. A continuación muestro un ejemplo utilizando Fedora:
[root@megan leandro]# yum install fuse-sshfs.i686
Una vez instalado sshfs su uso es muy trivial. Simplemente especificamos el nombre de usuario@IP_maquina:/directorio/a/montar /punto/de/montaje.
[leandro@megan ~]# sshfs leandro@192.168.1.2:/Users/leandro/datos/ /mnt/scarlet/ Password: [leandro@megan ~]$ mount 192.168.1.2:/Users/leandro/datos on /mnt/scarlet type fuse.sshfs (rw,nosuid,nodev,max_read=65536,user=leandro)
En el ejemplo anterior se puede ver cómo se ha montado el sistema de archivos. Importante y a destacar es que podemos montar el mismo sin ser root. De hecho, conviene hacerlo con el usuario sin privilegios que utilicemos dado que de esa manera podremos leer y escribir sin problemas.
Redirección de puertos con SSH
Supongamos que tenemos la siguiente topología:
- RTB tiene una redirección del puerto 22 hacia la PCB. Esto significa que todas las conexiones que se hagan al puerto TCP 22 con la IP del router serán enviadas a la PCB.
- Tanto RTA como RTB están en lugares remotos en Internet. Ambos hacen NAT de sus redes internas.
- PCB tiene un servidor SSH.
- PCB puede alcanzar al servidor web porque está en la misma LAN.
- SRV es un servidor web.
En este caso, desde la PCA deseamos acceder al servidor web SRV. Con lo único que contamos es con el acceso vía SSH a la PCB, dado que el servidor SRV tiene una IP privada y ningún puerto redireccionado. En este caso SSH nos da la posibilidad de redireccionar el puerto 80 del servidor por medio de la PCB, permitiéndonos acceder efectivamente al mismo. Esto se logra por medio de SSH haciendo un redirección local de puertos, de la siguiente manera:
ssh -L 10080:192.168.2.3:80 leandro@200.200.200.200
Para entender bien lo que ocurre sigamos los pasos:
- La PCB puede acceder normalmente al servidor web en SRV, sin ninguna restricción.
- La PCA tiene acceso SSH a la PCB.
- La PCA forma un túnel hacia el SRV utilizando la PCB.
- Luego de la redirección, la PCA puede acceder localmente al puerto 10080 que en realidad es uno de los extremos del túnel. El otro extremo es el puerto 80 en SRV.
Para hacer uso de la redirección se abre un navegador de Internet en PCA y se escribe http://127.0.0.1:10080, lo que hará que las peticiones lleguen hasta SRV, como si estuviéramos en esa red LAN.




