Archive for November, 2007
November 13, 2007 a las 9:42 am por Edwin Plauchu · Archivado en Ubuntu, FreeBSD, Linux, Solaris
lsof (ls Open Files) o listado de archivos abiertos, es una gran aplicación pero bastante desconocida y que nos puede sacar de muchas dudas o apuros. lsof es una herramienta muy completa, por lo que en éste articulo solo se muestra la información que más vamos a necesitar.
NOTA: Si se quiere saber más sobre el uso de lsof ejecutad “man lsof “.
Utilidad de lsof.
Como he dicho antes, lsof muestra los archivos y procesos abiertos en el moment o del chequeo, por lo que nos será de utilidad para llevar un seguimiento de seguridad o de procesos bloqueados.
Desmontando un CD rebelde.
# umount /cdrom
umount: /cdrom: device is busy
Vaya, ¡¿por qué no se desmonta y me dice que el dispositivo está ocupado?! No se ha desmontado porque algun proceso esta haciendo uso del CDROM y hasta que no lo libere no podremos desmontarlo, el problema es que desconocemos que aplicacion se encuentra usando dicho CDROM, mediante lsof podremos conocerlo.
# lsof +D /cdrom
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
konqueror 621 zx80 cwd DIR 3,64 2048 57344 /cdrom
lsof nos dice que el proceso konqueror está usando el directorio /cdrom con el usuario zx80. La solución es sencilla entoces, basta con cerrar konqueror y problema resuelto. Para los que usamos mucho la consola y llegamos a tener unas cuantas sesiones abiertas pasa que en vez de konqueror puede salir bash. Esto es debido a que alguna de las consolas está dentro del directorio activo del cd-rom, por lo que bastaría salirse del directorio de trabajo del CD o cerrar ese bash.
# kill 621
Ya podemos desmontar.
Quien está detrás de una conexión ?
Esta vez usamos la herramienta netstat. Para quien no conozca esta herramienta decir que es un monitor de red. Nos dirá qué conexiones activas tenemos y mucha inform ación sobre ellas. Vamos a ver qué conexiones tenemos activas:
# netstat - n
Active Internet connections (only servers)
Proto Recv- Q Send - Q Local Address Foreign Address
tcp 0 0 *:printer *:* LISTEN
tcp 0 0 localhost:www *:* LISTEN
tcp 0 0 *:6000 *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
Nos muestra información sobre algunos puertos en espera (Listen) pero desconocemos qué aplicación está detrás. Me llama la atención el puerto TCP 6000, así que voy a ver quien está detrás:
# lsoft - i :6000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
X 279 root 3u Ipv4 349 TCP *:3000 (LISTEN)
Vemos que la aplicacion X es la culpable de que el puerto 6000 esté abierto y a la espera.
Qué procesos están usando un directorio.
Una de las utilidades que más se usan es averiguar qué aplicaciones están trabajando en un directorio concreto. Se usa esta opción sobre todo para vigilar el uso de troyanos o espias. SI quisiera saber qué procesos están usando mi directorio pondría lo siguiente:
pianodaemon@pianodaemon-laptop:~$ lsof +D /home/pianodaemon/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
x-session 5962 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
compiz 6013 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
gnome-pan 6015 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
nautilus 6017 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
emerald 6127 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
compiz.re 6128 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
................ ...
Otros usos.
Estos son otros usos de la herramienta lsof, que aunque son algo menos usados nos pueden sacar de algun apuro o duda.
# lsof - g n: Donde n es un ID de grupo.
Esto muestra los archivos abiertos por un grupo que queramos. Si quisieramos ver los archivos de varios grupos a la vez, los separariamos por comas:
# lsof - g wheel,users
# lsof - u n: Donde n es un ID de usuario, lo que nos mostrará los archivos abiertos por ese usuario. Al igual que con los grupos, se pueden especificar varios usuarios de una vez.
# lsof - l: Para no convertir el ID a nombre de usuario, útil en casos de logeos corruptos o sistemas lentos.
# lsof - N: Nos muestra los archivos NFS abiertos.
November 12, 2007 a las 11:56 am por Edwin Plauchu · Archivado en Programacion, FreeBSD, Linux, Solaris
Introducción
Como muchos ya saben, muchas cosas se manejan en Unix, y en consecuencia en Linux, como si fueran archivos, se abren, se cierran, se escribe en ellos, etc. Este pequeño artículo hace referencia a las marcas de tiempo que ponen los Unix en dichos archivos. Al menos los que estan basados en inodes.
Viendo las marcas de tiempos
Para el principiante el comando ls es su primera opción pero si entra en problemas, como yo lo hice, puede que se frustre con dicho comando. Ejemplo:
root@pianodaemon-laptop:/home/pianodaemon# ls -l proto.sh
-rw-r--r-- 1 pianodaemon pianodaemon 4878 2007-11-09 12:44 proto.sh
¿ En este caso qué marca de tiempo estamos viendo ?
Las tres marcas
Unix pone tres marcas de tiempo a un archivo:
stat el comando
stat es parte del paquete coreutils de GNU. Por favor, instalatelo si esta disponible para tu plataforma, hasta donde se, Linux, AIX, Solaris, y otros sabores de Unix, Esto te va a ahorrar muchos dolores de cabeza.
Cuando se crea por primera vez un archivo, por ejemplo con el comando touch, las tres marcas tienen el mismo valor. Miremos ahora la salida de stat del mismo archivo ejemplo:
root@pianodaemon-laptop:/home/pianodaemon# stat proto.sh
File: `proto.sh'
Size: 4878 Blocks: 16 IO Block: 4096 archivo regular
Device: 801h/2049d Inode: 6685006 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/pianodaemon) Gid: ( 1000/pianodaemon)
Access: 2007-11-09 17:27:44.000000000 -0600
Modify: 2007-11-09 17:27:44.000000000 -0600
Change: 2007-11-09 17:27:44.000000000 -0600
¡Esto si es información completa ! Vemos reportado, el nombre, el tamaño, los bloques, el tipo de archivo (regular), información física de donde se encuentra (dispositivo/inode), los permisos estandar, los dueños del archivo y las tres marcas de tiempo Unix.
Opciones interesantes de formato de salida del comando stat:
- %X Time of last access as seconds since Unix Epoch
- %x Time of last access
- %Y Time of last modification as seconds since Unix Epoch
- %y Time of last modification
- %Z Time of last change as seconds since Unix Epoch
- %z Time of last change
Las opciones en mayúscula nos imprimen la marca de tiempo transcurrido desde la Epoca Unix, y las opciones en minúscula imprimen la marca de tiempo legible para el humano.
Ejemplo:
root@pianodaemon-laptop:/home/pianodaemon# stat --format=%X proto.sh
1194650864
root@pianodaemon-laptop:/home/pianodaemon# stat --format=%x proto.sh
2007-11-09 17:27:44.000000000 -0600
Ambos “números” son equivalentes m¡s el primero es un número absoluto, el segundo es interpretado ya que muestra la configuración de la zona horaria (-0600). Mi configuración de hora/fecha es zona America/Mexico y uso UTC.
Marca de Tiempo
Las marcas de tiempo se almacenan en el inode del archivo correspondiente con, hasta donde he confirmado, 32 bits de codificacion. Estos enteros son con signo, los negativos representan fechas en el pasado de la época Unix, y los positivos, fechas futuras desde la época Unix. La época Unix es la hora/fecha 00:00:00 UTC del 1ero de Enero de 1970.
Algunos datos para desarrolladores Python
En lo personal prefiero el desarrollar scripts sobre el interprete Python a bash. Asi que uso stat sobre el mismo:
import os, glob
from stat import *
for folder in glob.glob( base_path ):
for file in glob.glob( folder + '/*.mp3' ):
print file
# retrieves the stats for the current file
# return the last-modified-date
last_mod_date = os.stat( file )[ST_MTIME]
print last_mod_date
November 8, 2007 a las 11:07 am por Edwin Plauchu · Archivado en Varios
Para una comprensión más concisa del rendimiento de tu sistemita linux, podemos ayudarnos con vmstat. Con vmstat, es posible obtener una vista general de los procesos, memoria, swap, E/S, sistema y actividad de CPU en una línea de números:
pianodaemon@pianodaemon-laptop:~$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 211544 72096 299720 0 0 50 10 270 598 3 1 96 1
La primera línea divide los campos en seis categorías, incluyendo procesos, memoria, swap, E/S, sistema y estadísticas relacionadas al
CPU. La segunda línea identifica aún más los contenidos de cada campo, haciendo más fácil escanear datos para ver estadísticas específicas.
Los campos relacionados a procesos son:
- r — El número de procesos ejecutables esperando para acceder al CPU
- b — El número de procesos en un estado dormido contínuo
Los campos relacionados a la memoria son:
- swpd — La cantidad de memoria utilizadaz
- free — La cantidad de memoria libre
- buff — La cantidad de memoria utilizada por las memorias intermedias
- cache — La cantidad de memoria utilizada como caché de páginas
Los campos relacionados a swap son:
- si — La cantidad de memoria intercambiada desde el disco
- so — La cantidad de memoria intercambiada hacia el disco
Los campos relacionados con E/S son:
- bi — Los bloques enviados a un dispositivo de bloques
- bo — Los bloques recibidos desde un dispositivo de bloques
Los campos relacionados al sistema son:
- in — El número de interrupciones por segundo
- cs — El número de cambios de contexto por segundo
Los campos relacionados al CPU son:
- us — El porcentaje de tiempo que el CPU ejecutó código de nivel del usuario
- sy — El porcentaje de tiempo que el CPU ejecutó código de nivel del sistema
- id — El porcentaje de tiempo que el CPU estaba desocupado
- wa — Esperas de E/S
Cuando se ejecuta vmstat sin opciones, solamente se muestra una línea. Esta línea contiene promedios, calculados desde la última vez que se arrancó el sistema.
Sin embargo, la mayoría de los administradores de sistemas no confían en los datos en esta línea, pues los tiempos en que fueron recopilados varían. En su lugar, la mayoría de los administradores tomas ventaja de la habilidad de vmstat de mostrar repetidamente datos de la utilización de recursos en intervalos establecidos. Por ejemplo, el comando vmstat 1 muestra una nueva línea de utilización de datos cada segundo, mientras que el comando vmstat 1 10, muestra una nueva línea por segundo, pero sólo por los próximos 10 segundos.
En manos de un administrador experimentado, vmstat puede ser usado para determinar rápidamente la utilización de recursos y problemas de rendimiento. Pero para obtener mayor conocimiento en estos problemas, se requiere un tipo de herramienta diferente — una herramienta capaz recolectar y analizar datos en mas detalles.
November 7, 2007 a las 9:43 am por Edwin Plauchu · Archivado en Ubuntu, Programacion
Entre mis nuevas tareas tengo la de administrar un servidor CVS, hacia años que no lo administraba, asi que he vuelto a recordar unas pequeñas nociones de control de versiones. Aqui hablare de como instalar CVS en Ubuntu Gutsy. Es un articulo meramente tecnico, enfocado a desarrolladores.
El significado de CVS como comenta la wikipedia, es el siguiente:
El Concurrent Versions System (CVS), también conocido como Concurrent Version System o Concurrent Versioning System, es una aplicación informática que implementa un sistema de control de versiones: mantiene el registro de todo el trabajo y los cambios en los archivos (código fuente principalmente) que forman un proyecto (de programa) y permite que distintos desarrolladores (potencialmente situados a gran distancia) colaboren. CVS se ha hecho popular en el mundo del software libre. Sus desarrolladores difunden el sistema bajo la licencia GPL.
Basicamente se utiliza en el desarrollo de un proyecto informatico para llevar un control de los archivos del codigo y evitar por ejemplo que el codigo que escribe un usuario sea “machacado” con el codigo de otro usuario. Ademas con un sistema de control de versiones, el programador siempre puede disponer de la ultima version del codigo lo que ayuda a continuar con el desarrollo del proyecto.
Te pondre un ejemplo de para que sirve todo esto.
Imagina dos programadores que estan trabajando en el mismo proyecto, y casualmente ambos estan modificando el mismo archivo de codigo. Cuando uno de ellos actualice ese archivo en el repositorio se queda marcado, de tal manera que cuando el otro intente subir al repositorio de codigo ya ve, que ese archivo ha sufrido una modificacion desde la ultima vez que el se actualizo, lo que le obliga, a traerse de nuevo ese archivo (con los cambios que haya realizado el primer programador), añadir los suyos y volver a subir el archivo. Sin un mecanismo de control de versiones, ese cambio se perderia, el primer desarrollador subiria el archivo y el segundo subiria su version. Esto para un archivo es controlable, pero cuando tienes miles de archivos y miles de lineas de codigo significa un desastre total. Por eso el control de versiones es necesario.
Para instalar el servidor y el cliente cvs ejecutamos:
$ sudo apt-get install cvs cvsd
En un momento determinado nos pedira la ruta para el repositorio, pon por ejemplo /cvsrepo. Este es el directorio a partir del cual se ira colgando todos aquellos modulos/proyectos que administremos con el CVS.
Este directorio lo vamos a definir a partir de /var/lib/cvsd, asi que realmente el path completo seria:
/var/lib/cvsd/cvsrepo
Ejecutamos las siguientes secuencias de comandos:
$ sudo cvsd-buildroot /var/lib/cvsd
Si la carpeta cvsrepo no existe, la creamos
$ cd /var/lib/cvsd
$ sudo mkdir cvsrepo
Le damos permisos sobre la carpeta al usuario cvsd
$ sudo chown -R cvsd:cvsd cvsrepo
Inicializamos el repositorio
$ sudo cvs -d /var/lib/cvsd/cvsrepo init
creamos un usuario cvs y le damos una password.
$ sudo cvsd-passwd /var/lib/cvsd/cvsrepo username
por ejemplo:
sudo cvsd-passwd /var/lib/cvsd/cvsrepo j4nusx
Ahora editamos el archivo:
sudo emacs /var/lib/cvsd/cvsrepo/CVSROOT/config
Cambiamos “#SystemAuto=no” a “SystemAuto=no”
Ya tenemos todo funcionando. Para comprobar que accedemos:
cvs -d :pserver:username@localhost:/cvsrepo login
cvs -d :pserver:username@localhost:/cvsrepo checkout .
Por ejemplo:
cvs -d :pserver:j4nusx@localhost:/cvsrepo login
Seria adecuado exportar la variable CVSROOT del siguiente modo:
export CVSROOT=:pserver:jose@localhost:/cvsrepo
o el valor que fuera, de esta manera ya no necesitariamos especificarla cada vez que fueramos a usar un comando “cvs”.
Ahora podriamos logarnos con:
cvs login
y por ejemplo colocarnos en la carpeta (dentro) de un proyecto que quisieramos subir al CVS y ejecutar:
cvs import -m "archivos iniciales" MiProyecto HEAD MAIN
Si te sale el error:
/cvsroot: no such repository
es que has especificado mal la ruta del repositorio. deberia ser /cvsrepo o la que pongas, pero asegurate de que no te haya fallado
alguna letra. En caso de que lo hayas definido mal, No lo elimines con apt-get remove cvsd. Pues a la hora de volver a instalarlo
mantendria la configuracion anterior. tendrias que ejecutar:
apt-get remove --purge cvsd
e instalarlo de nuevo
o mejor aun,
dpkg-reconfigure cvsd
que nos permite reconfigurar de nuevo cvs server (cvsd) e indicar ahora si la ruta adecuada para el repositorio (/cvsrepo, /cvsroot, /repo, o el que quieras usar).
Como clientes de CVS yo o utilizo “cvs” desde la linea de comandos, o Eclipse.
November 6, 2007 a las 9:45 am por Edwin Plauchu · Archivado en Ubuntu, Linux
Hace unos dias (los pocos dias que llevo en telefonica mexico, aqui en el DF), un nuevo conocido y reciente usuario de linux, me hizo la siguiente pregunta…
Como puedo visualizar mis rutas, conecciones y puertos abiertos tcp/ip ?
Esto no es nada absolutamene del otro mundo, y muchos de ustedes creo que ya lo saben, aun asi, considero que es bueno contestar a este tipo de preguntas que son mas cotidianas de lo que uno piensa entre los usuarios newbies.
Le comente que le escribiria la respuesta en el blog de gulsin.. (creo que de esta manera… todos aquellos que se realizacen la misma pregunta en google sin duda obtendran el mismo beneficio que el..)
La orden netstat.
Esta orden se utiliza para visualizar el estado de diversas estructuras de datos del sistema de red, desde las tablas de enrutado hasta el estado de todas las conexiones del host donde se ejecuta.
Conexiones y puertos abiertos….
root@pianodaemon-laptop:/home/pianodaemon# netstat -at
Conexiones activas de Internet (servidores y establecidos)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ipp *:* ESCUCHAR
tcp 0 0 pianodaemon-lapto:38621 fg-in-f191.google.c:www ESTABLECIDO
tcp 0 0 pianodaemon-lapto:34637 bu-in-f189.google.c:www ESTABLECIDO
tcp 0 0 pianodaemon-lapto:38622 fg-in-f191.google.c:www ESTABLECIDO
tcp 0 0 pianodaemon-lapto:38821 bu-in-f83.google.co:www ESTABLECIDO
tcp6 0 0 *:8009 *:* ESCUCHAR
tcp6 0 0 *:8180 *:* ESCUCHAR
Visualizando Rutas
root@pianodaemon-laptop:/home/pianodaemon# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.225.181.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0
172.16.142.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.225.181.131 0.0.0.0 UG 0 0 0 eth0
Eso es todo, pasenla chido……….