miércoles, 24 de junio de 2009

viernes, 19 de junio de 2009

La revolución de los SO

Los subtítulos no son de los mejores peeeeeroo.... igual hay versiones mejores que pueden buscar en youtube, o tambien para descargar. El documental es muy recomendable.

Parte 1



Parte 2



Parte 3



Parte 4



Parte 5



Parte 6



Parte 7



Parte 8



Parte 9

jueves, 18 de junio de 2009

Sniffers

Un sniffer (o husmeador de paquetes) es un software o hardware que captura trafico de red. Este tráfico puede ser analyzado para determinar problemas en una red, como cuellos de botella o degradación en su performance. Tambien puede confirmar un ataque por parte de un hacker. Si uno sospecha que un sistema esta bajo ataque, puede capturar paquetes dentro de un dispositivo para identificar que tipo de paquetes estan "golpeando" al sistema, como también su origen. Una vez que el problema esté determinado, el administrador podrá crear los cambios necesarios para asegurar la red.

Los sniffers capturan paquetes de un dispositivo especifico, o de todos, dependiendo de como esté configurado. Por default, visualizan todo el trafico capturado de una red. Como sea, usualmente resulta en demasiado trafico para poder ser analizado. Por eso, los sniffers permiten aplicar filtros para capturar solo ciertos paquetes que cumplan con algún criterio. Por ejemplo, uno puede estar interesado en capturar paquetes de un cliente y un servidor determinado, para evaluar el tiempo de respuesta, o determinar por que un cliente en particular no puede acceder al servidor. Los sniffers permiten hacer a través de la introducción de los IP correspondientes.

En Linux, los sniffers mas populares son:

TCPdump: Es una herramienta de monitoreo de trafico de red por linea de comandos. Ha sido utilizado desde hace tiempo y muchos sniffers gráficos lo utilizan por debajo. (ver www.tcpdump.org)

Ethereal: Herramienta de monitoreso gráfica, un poco mas amigable que tcpdump. Permite ver paquetes en tiempo real y utiliza muchos comandos y opciones de tcpdump para el filtrado. Una vez que los datos son capturados, Ethereal permite ver cada paquete y sus encabezados. Las descripciones de los encabezados estan resumidas. Tambien permite reconstruir una cadena TCP. Visualiza trafico en tiempo real al mismo tiempo que guarda la información en un archivo. (ver www.ethereal.com).

EtherApe: Herramienta de monitoreo gráfica. A diferencia de Ethereal, EtherApe muestra la actividad de red en forma grafica identificando los Host y sus enlaces entre host. Los enlaces son codificados por colores y cambian cuando el tipo de conexión cambia. Muestra trafico en tiempo real mientras guarda en un archivo. (ver http://etherape.sourceforge.net).

viernes, 12 de junio de 2009

Creando un Niño

Bueno ya suficiente por hoy... otro videito que vi hace un tiempo y me gusto.

Sistemas Operativos

Interesante y Graciosa analogía

El Código Linux

Aqui les dejo un documental que vi hace tiempo, me parecio muy didactico.

miércoles, 10 de junio de 2009

find y locate

Estas son herramientas reales, usadas cuando buscamos en otros PATH. El comando find, conosido de UNIX, es muy util aunque pude causar algunos problemas por la dificultad de la sintaxis. Este comando no solo permite buscar un archivo por el nombre, sino tambien por tamaño, fecha de ultimos cambios y otras propiedades del archivo. La Forma mas comun es:

find path -name cadena

Que puede ser interpretado como "busca en todos los directorios y subdirectorioscontenidos en path, y muestra aquellos que contengan cadena en su nombre".


Otra aplicacion de find es buscar archivos de un tamaño determinado.
En el ejemplo debajo, peter quiere buscar archivos contenidos en el directorio
actual (y subdirectorios) que superen los 5 mb:

peter:~> find . -size +5000k
psychotic_chaos.mp3


Si buscan en las paginas de manual, encontrarán que find puede ejecutar
operaciones sobre los archivos encontrados. Por ejemplo, borrarlas. Lo primero sera
testear, sin la opcion -exec, que los archivos son los correctos.


peter:~> find . -name "*.tmp" -exec rm {} \;
peter:~>

Años mas tarde fue desarrollado locate. Este comando es mas facil de usar, pero tiene menos funcionalidades que find ya que su salida esta basada en una base de datos de archivos que es actualizada una vez al dia. Por el otro lado, locateutiliza menos recursos que find y muestra los resultados casi instantaneamente.


La mayoria de las distribuciones Linux usan slocate en estos dias, que es la version moderna de locate y no permite que los usuarios lean ciertos directorios a los que no tengan accesso (a menos que sean root). En la mayoria de los sistemas, locate es un enlace al programe slocate:


billy:~> ls -l /usr/bin/locate
lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate*

lunes, 8 de junio de 2009

Algunos Comandos Interesantes

El comando sort

Este comando se utiliza para ordenar líneas de texto a partir de varios criterios, su sintaxis es similar a la de todos los comandos:

$ sort [opción...] [archivo...]


Si no se le provee al menos un argumento archivo, este comando tomará su entrada de la entrada estándar. El criterio de orden que utiliza sort por defecto es alfabético, esto se debe tener en cuenta siempre que se necesite ordenar listas de números, si no se le especifica a sort que debe ordenar numéricamente, tomará a los números como una lista de palabras y el resultado no será el deseado. Por ejemplo, alfabéticamente el número 10 está antes que el número 2.

La lista de opciones de sort es la siguiente:

-c Chequear si el/los archivos están ordenados, pero no ordenar.
-d Considerar únicamente los caracteres alfanuméricos.
-n Utilizar criterio numérico de ordenamiento.
-o ARCHIVO Escribir el resultado en ARCHIVO en lugar de enviarlo a la salida estándar.
-r Devolver el resultado inverso del ordenamiento.
-t SEP Utilizar SEP como separador en lugar de un espacio en blanco.
-T DIR Usar DIR como directorio temporal en lugar de /tmp.

El comando less

Este comando es de mucha utilidad, su función es paginar texto en pantalla. Muchas veces ocurre que cuando se ejecuta algún comando, la salida del mismo es demasiada información como para que se pueda leer en la pantalla del monitor, entonces se puede redireccionar esta salida al less para que permita al usuario leer sin mayores problemas, pudiendo avanzar o retroceder en el texto con las flechas de cursor del teclado. También se utiliza para visualizar archivos de texto almacenados en disco.

La idea de less proviene de un paginador llamado more, un clásico en los UNIX. El more no era lo suficientemente amigable, es por eso que hicieron less. Su sintaxis es la siguiente:

$ less [archivo...]

Este comando es un programa interactivo, es por eso que no se hablará de argumentos sino de comandos:

[ESPACIO] Si se oprime la barra espaciadora, el less avanzará un número de líneas igual al número de líneas por pantalla que posea la terminal que se esté usando.
[ENTER] Pulsando la tecla ENTER se va avanzando de a una línea.
[G] Ir al final del texto.
[g] Ir al inicio del texto.
[/] Ingresar una palabra a ser buscada avanzando dentro del texto.
[?] Ingresar una palabra a ser buscada retrocediendo dentro del texto.
[n] Buscar la siguiente ocurrencia de la búsqueda.
[AvPág] Avanzar una pantalla de texto.
[RePág] Retroceder una pantalla de texto.
[v] Cargar el editor de texto en el lugar donde se encuentre el usuario dentro del archivo. El editor que normalmente se utiliza es el vi.
[q] Salir del programa.
[R] Repintar la pantalla. Útil cuando se está visualizando un archivo que ha sido modificado por otro programa.

El comando head

Escribe por salida estándar la primer parte de un archivo. Su sintaxis es como sigue:

$ head [opción...] [archivo...]

Si no se especifica el argumento archivo, este comando tomará su entrada de la entrada estándar. La lista de opciones mas importantes sigue a continuación:

-c N Escribe los primeros N bytes.
-n N Escribe las primeras N líneas en vez de las primeras 10 (que es el valor predeterminado).

El comando tail

Este comando es al head como el less es al more. El comando tail escribe a la salida estándar la última parte de un archivo. Su sintaxis es:

$ tail [opción...] [archivo...]


Al igual que head, si no se le proporciona un argumento archivo, este comando tomará su entrada desde la entrada estándar. Alguna de sus opciones son las siguientes:


-c N Escribe los últimos N bytes.
-n N Escribe las últimas N líneas.
-f Escribir la última parte del archivo a medida que va creciendo. Esta opción es muy útil para monitorear archivos de registro que van creciendo con el tiempo.

El comando grep

Escribir en salida estándar aquellas líneas que concuerden con un patrón. Su sintaxis es como sigue:

$ grep [opciones] PATRÓN [ARCHIVO...]
$ grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]

Este comando realiza una búsqueda en los ARCHIVOs (o en la entrada estándar, si no se especifica ninguno) para encontrar líneas que concuerden con PATRÓN. Por defecto grep imprime en pantalla dichas líneas. Sus opciones mas interesantes son:

-c Modifica la salida normal del programa, en lugar de imprimir por salida estándar las líneas coincidentes, imprime la cantidad de líneas que coincidieron en cada archivo.
-e PATRÓN Usar PATRÓN como el patrón de búsqueda, muy útil para proteger aquellos patrones de búsqueda que comienzan con el signo «-».
-f ARCHIVO Obtiene los patrones del archivo ARCHIVO.
-H Imprimir el nombre del archivo con cada coincidencia.
-r Buscar recursivamente dentro de todos los subdirectorios del directorio actual.


El patrón de búsqueda normalmente es una palabra o una parte de una palabra.
También se pueden utilizar expresiones regulares, para realizar búsquedas mas flexibles, por ejemplo, si se quisiera buscar la ocurrencia de todas las palabras que comiencen con «a» minúscula, la ejecución del comando sería algo así:

usuario@maquina:~/$ grep a* archivo


El tema de manejo de expresiones regulares es bastante largo y complejo, mas adelante se dará con mas detalle.

El comando find

Se utiliza este comando para buscar archivos dentro de una jerarquía de directorios. La búsqueda, como veremos mas adelante, se puede realizar mediante varios criterios. La sintaxis de este comando es:

$ find [camino...] [expresión]


La expresión se conforma de opciones, pruebas y acciones. En este manual no enumeraremos todas las opciones, pruebas y acciones de este comando, sino las expresiones que son mas cotidianas, dejamos al alumno para que investigue todo el potencial de este comando mediante la lectura de la página de manual por medio de la ejecución del siguiente comando:


$ man find

Algunos de los criterios de búsqueda que se pueden utilizar son:

$ find CAMINO -name ARCHIVO
$ find CAMINO -name ARCHIVO -perm MODO

ARCHIVO corresponde al nombre entero o en parte del archivo que se está buscando, MODO son los permisos del archivo a buscar representados en octal.

El comando whereis

Este comando se utiliza para localizar el archivo binario, el código fuente y la página de manual de un determinado comando. Su sintaxis es como sigue:

$ whereis [opciones] archivo...


La lista de opciones mas utilizadas es:


-b Buscar solamente el archivo binario.
-m Buscar solamente la página manual.
-s Buscar solamente el código fuente.
Como ejemplos, se ve lo siguiente:


usuario@maquina:~/$ whereis -m whereis
whereis: /usr/share/man/man1/whereis.1.gz
usuario@maquina:~/$ whereis man
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz


En el primer ejemplo se ha pedido la página de manual del mismo comando whereis, mientras que en el segundo se han pedido todos los archivos que tengan que ver con el comando passwd.

El comando locate

locate es un comando de búsqueda de archivos, bastante parecido al comando anteriormente visto, el find. La diferencia de locate es que la búsqueda la hace en una base de datos indexada para aumentar significativamente la velocidad de respuesta. Esto quiere decir, que locate realmente no busca en el disco del sistema, sino que en un archivo con la lista de todos los archivos que existen en el GNU/Linux. Generalmente todas las distribuciones de GNU/Linux ejecutan a una hora determinada (generalmente cerca de las 4:00am, ya que tarda algún tiempo realizar esta tarea) un comando para actualizar la base de datos que utiliza locate, dicho comando se llama updatedb. Su sintaxis es:

$ locate PATRÓN

Donde PATRÓN corresponde al mismo tipo de patrón que en el comando find. Ejemplo de ejecución:

usuario@maquina:~/$ locate locate
/usr/bin/locate
/usr/lib/locate
/usr/lib/locate/bigram
/usr/lib/locate/code
/usr/lib/locate/frcode
/usr/share/doc/kde/HTML/en/kcontrol/kcmlocate.docbook.gz
/usr/share/doc/xlibs-dev/XdbeAllocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XdbeDeallocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XtAllocateGC.3.html
/usr/share/emacs/20.7/lisp/locate.elc
/usr/share/gnome/help/gsearchtool/C/locate.png
/usr/share/man/man1/locate.1.gz
/usr/share/man/man5/locatedb.5.gz
/usr/X11R6/man/man3/XdbeAllocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XdbeDeallocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XtAllocateGC.3x.gz
/var/lib/locate
/var/lib/locate/locatedb
/var/lib/locate/locatedb.n

Como se puede observar en el ejemplo, locate ha listado todos aquellos archivos que posean la palabra «locate» en su nombre (los directorios están incluidos).

miércoles, 3 de junio de 2009

Buscar Archivos (1)

Utilizando algunas caracteristicas del shell

Primero veremos como podemos manipular varios archivos de una sola vez, de modo que la consola interprete los requerimientos entre corchetes "[ ]" y substitya la expresión contenida por los archivos correspondientes. Por ejemplo, al indicar un rango de numeros, o al sustituir los caracteres por un asterisco.


Todas las sustituciónes pueden realizarse simultaneamente; la consola Bash, por ejemplo, no tiene problemas con expresiones como ls dirname/*/*/*[2-3].

El asterisco es usado comunmente para minimizar el esfuerzo de tipeo: por ejemplo, se puedeutilizar $ cd dir* en lugar de $ cd directory. En bash, no es necesario porque las consolas GNU tienen una caracteristica llamada completar nombre de archivo. Esto quiere decir, que uno puede tipear los primeros caracteres de un comando o un archivo y el shell encontrara y sugerira que significa. Por ejemplo, en un directorio conteniendo varios archivos, uno puede tipear $ ls A y presionando la tecla [TAB] dos veces en lugar de [ENTER]. Si solo hay un archivo que comience con la letra "A", este sera mostrado como argumento del comando lsinmediatamente.


El comando Which

Una manera simple de buscar archivos es utilizar el comando which para buscar en los directorios listados en el PATH del usuario. Se recuerda que el PATH contiene
los directorios de busqueda que contienen programas ejecutables, por lo que which no funcionara con archivos ordinarios. El comando which es util a la hora de solucional problemas del tipo "command not found". En el ejemplo debajo, el usuario tina no puede usar el programa acroread, mientras que su colega si puede. El colega de tina le dice que puede ver el programa en el directorio /opt/acroread/bin, pero este no esta en su PATH.

tina:~> which acroread
/usr/bin/which: no acroread in (/bin:/usr/bin:/usr/bin/X11)

El problema puede ser resuelto dandole el path completo al ejecutar el programa o agregar el directorio al PATH de tina exportandoesta variable:

tina:~> export PATH=$PATH:/opt/acroread/bin
tina:~> echo $PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin

Usando el comando which podemos comprobar si un comando es un alias de otro comando:



gerrit:~> which -a ls
ls is aliased to `ls -F --color=auto'
ls is /bin/ls

martes, 2 de junio de 2009

Archivos de configuración

La mayoría de los archivos de configuración estan almacenados en eldirectorio /etc. El contenido de cada archivo puede ser visto con el comando$ cat, que enviará el contenido del archivo al dispositivoestandar de saluda (el monitor).

Haremos un repaso de los archivos de configuracion mas comunes, aunque esta no es una lista esahustiva, los archivos de configuracion suelen estan bien comentados, por lo que la lectura de los mismos bastará. Algunos archivos tienen paginas de manual con información extra, como $ man group.










ArchivoInformación / Servicio
apacheArchivo de configuración del servidor de web Apache
bashrcArchivo de Configuracion para el Bourne Again SHell. Define funciones y alias para todos los usuarios. Otras Shells pueden tener sus propios archivos de configuración, como cshrc.
crontab y los directorios cron.*Configuración de tareas que necesitan ser ejecutadas periodicamente (como Backups, actualizaciones del sistema, limpieza, logs, etc.).
defaultOpciones por deault de algunos comandos especificos, como useradd
filesystemsSistemas de archivos
fstabLista particiones y sus puntos de montaje
ftp*Configuracion del servidor ftp: quien puede conectarse, a que partes del sistemase puede acceder, etc.
groupArchivo de configuracion de grupos de usuario. Usar las utilidades shadowgroupadd,groupmod y groupdel para editar este archivo. La edición manual solo debe realizarse solo si se sabe lo que se hace.
hostsContiene una lista de maquinas que pueden conectar usando la red, pero sin la necesidad de especificar un nombre de servicio de dominio. No tiene nada que ver con la configuración de red del sistema, la cual se encuentra en /etc/sysconfig.
inittabInformación de booteo: modo, cantidad de consolas, etc.
issueInformación sobre la distribución (version y kernel).
ld.so.confUbicación de librerias
lilo.conf silo.conf aboot.conf etc.Información de booteo del LInux LOader, el sistema de booteo fue cambiando gradualmente hasta ser reemplazado por el GRUB.
logrotate.*Rotación de Logs, es un sistema que previene la acumulación de grandes cantidades de archivos de log.
mailDirectorio que contiene instrucciones sobre el comportamiento del servidor de mail.
modules.confConfiguración de modulos que activan dispositivos especiales (drivers).
motdMensaje del dia: muestra un mensaje a quien se conecte al sistema (en modo texto), puede ser usado por el administrador del sistema para anunciar mantenimientos del sistema, cortes, etc.
mtab Sistemas de archivos montados. Es recomendable NO editar este archivo
nsswitch.confOrdena con que solucionador de nombres contactar, cuando un proceso necesita resolver un nombre de host.
pam.dConfiguración de modulos de utenticación
passwdLista de usuarios locales. Usar las utilidades shadow groupadd,groupmod y groupdel para editar este archivo. La edición manual solo debe realizarse solo si se sabe lo que se hace.
printcapDesactualizado pero frecuentemente utilizado archivo de configuración de impresión.No editar manualmente
profileConfiguración del entorno: varialbes, propiedades por defecto de archivos nuevos, limitación de recursos, etc.
rc*Directorios definiendo los servicios activos según el run level
resolv.confOrden de conexión a los DNS.
sendmail.cfArchivo de configuración principal del servidor de mail I>Sendmail.
servicesPuertos Abiertos
sndconfigoSoundConfiguración de la tarjeta de sonido y sonidos del sistema
sshDirectorio que contiene los archivos de configuración de SSH (Secure SHell).
sysconfigDirectorio que contiene los archivos de configuración del sistema: Mouse, teclado, red, escritorio, reloj, energia, etc.
X11Configuracion del servidor de ventanas X. RedHat usa XFree (que utiliza el archivo Xfree86Config).
xinetd.* or inetd.confArchivos de configuración de servicios de internet que corren desde demonios del sistema (no corren demonios independientes)

lunes, 1 de junio de 2009

el "PATH"

Cuando queremos que el sistema ejecute un comando, casi nunca tenemos que darle la ruta de acceso al comando (o path). Por ejemplo, sabemos que el comando $ ls esta en el directorio /bin (lo pueden comprobar con $ wich -a ls ), tampoco tenemos que ingresar el comando como $ /bin/ls para que la computadora liste el directorio en el que estamos.

La variable de entorno PATH se ocupa de esto. Esta variable lista aquellos directorios en el systema donde los archivos ejecutables pueden ser encontrados, y esto le ahorra al usuario el trabajo de memorizar y tipear la ubicación de los comandos. Naturalmente, el path contiene algunos directorio con el nombre bin en sus nombres. El comando $ echo es usado para mostrar el contenido ("$") de la variable PATH:

rogier:> echo $PATH
/opt/local/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin/:/bin

En este ejemplo, los directorios /opt/local/bin, /usr/X11R6/bin, /usr/bin, /usr/sbin y /bin son los los directorios donde el sistema busca, secuencialmente, cuando se le pide que
ejecute un comando. Al instante en que encuentra el comando, el sistema deja de buscar, aún si no ha buscado en todos los directorios. Esto, pude llevar a alguna situacion extraña. En el primer ejemplo arriba, el usuario sabe que hay un programa llamado sndsms para enviar mensajes SMS. Otro usuario pude utilizar este programa pero éste no. La diferencia se encuentra en la configuración del PATH:

[jenny@blob jenny]$ sendsms
bash: sendsms: command not found
[jenny@blob jenny]$ echo $PATH
/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/home/jenny/bin
[jenny@blob jenny]$ su - tony
Password:
tony:~>which sendsms
sendsms is /usr/local/bin/sendsms
tony:~>echo $PATH
/home/tony/bin.Linux:/home/tony/bin:/usr/local/bin:/usr/local/sbin:\
/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin

Notar el uso de su (por switch user), que permite correr una consola en el entorno de otro usuario, siempre y cuando se conozca la clave de dicho usuario.

La barra invertida indica la continuación de una linea en el siguiente renglon.


En el siguiente ejemplo, un usuario quiere usar el comando wc (word count) para chequear el numero de lineas en un archivo, pero nada sucede y el usuario debe cancelar el proceso con [Ctrl]+[c]:

jumper:~> wc -l test
(Ctrl-C)
jumper:~> which wc
wc is hashed (/home/jumper/bin/wc)
jumper:~> echo $PATH
/home/jumper/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin

El uso del comando $ wich nos muestra que el usuario tiene un directorio bin en su home, conteniendo un programa tambien llamado wc. Como este programa esta en su directorio home es encontrado primero cuando el sistema busca a través del path, entonces este "home-made" programa es ejecutado en lugar del comando wc original. Existen varias maneras de solucionar este
problema (acorde a la filosofia UNIX): Una opcion sera renombral el programa
wc del usuario, o el usuario podria darle el path complete al solicitar la ejecución del programa wc, que puede ser encontrado utilizando $ which -a wc.