27 abril 2006

Sockets con bash

En esta clase intentaremos seguir el ejemplo mostrado en
http://www.troubleshooters.com/codecorn/sockets/

para programar un servicio con inetd o xinetd solo con el shell bash.

09 abril 2006

Clase 06/3

Nuevos comandos utilizados

test -> El comando test evalúa una expresión; si evalúa que es verdadera, devuelve un 0 (verdadero), de otro modo devuelve 1 (falso).
Si no hay expresión, test también devuelve 1 (falso)
Se pueden evaluar distintas clases de expresiones, numéricas, cadenas de caracteres, archivos.

cut -> El comando cut selecciona partes de cada línea de cada archivo y las escribe en la salida estándar. Si no hay un archivo especificado, cut lee de la entrada estándar con el parámetro -f le decimos que campo (field) queremos cortar, y con el parámetro -d le decimos el delimitador que queremos utilizar; ejemplo, cut -f1 -d: /tmp/archivo va a quedarse con la primer columna del archivo utilizando como delimitador los dos puntos.

mkpasswd -> Este comando pertenece al paquete whois. Lo que hace es; dada una palabra, la encripta con el algoritmo que le indiquemos (aunque podemos no indicárselo, y por defecto lo hará con md5)

useradd -> Comando que se utilizar para agregar usuarios. -m indica que se debe crear el directorio home; -c representa el comentario; -g el grupo por defecto que va a tener el usuario, -p toma el valor que le demos y lo coloca como password en el archivo /etc/passwd o /etc/shadow (según como hayamos planificado nuestro sistema); es por eso que antes de poner el password, debemos encriptarlo, si quisiéramos poner ... -p arturito, el comando interpretaría como que arturito ya es la palabra encriptada, entonces al tratar de hacer un login, no funcionaría.


#!/bin/bash

if test -f $1; then
i=1
cantidad=$(cat $1wc -l)

while test $i -le $cantidad; do
login=$(head -$i $1tail -1cut -f1 -d:)
comen=$(head -$i $1tail -1cut -f2 -d:)
passw=$(mkpasswd $login)
grupo=1001

useradd -m -c "$comen" -g $grupo -p $passw $login

echo $comen "agregado"
let i++
done
else

echo "No existe el archivo"
fi

¿Que es el Master Boot Record?

Es un sector de 512 bytes al principio del disco duro que contine una secuencia de comandos necesarios para cargar un sistema operativo. Es decir, es el primer registro del disco duro, el cual contiene un programa ejecutable y una tabla donde están definidas las particiones del disco duro.

También el primer sector de cada partición, en arquitectura del PC de IBM, tiene la misión de arrancar sistema operativo. Normalmente el MBR lo único que hace es ejecutar el sector de arranque de la partición marcada como arrancable.

Es el primer sector físico (Cilindro 0, Cabeza 0, Sector 1) asignado a un disco duro en un sistema (el primer disco duro con el número de periférico-BIOS 0x80). Cada disco duro recibe un MBR, pero no todas las BIOS pueden arrancar el sistema operativo desde cualquiera de los discos duros. Cuando se arranca desde el disco duro, la BIOS copia el contenido del MBR en una dirección fija de la memoria para luego darle el control. Este código arrancará seguidamente el sistema operativo, ya sea desde el disco duro o desde un Boot-Loader o cargador, algo más complejo, como por ejemplo LILO o GRUB.


El Magic number indica que la tabla de partición es válida.

La tabla de partición tiene cuatro entradas de 16 bytes cada una.
La siguiente tabla representa una de ellas

1B

AF

Bandera de partición activa (active flag)

3B

CHS

Cilindro, cabeza y sector de donde empieza esta partición

1B

ID

Identificador (Tipo de partición)

3B

CHS

Cilindro, cabeza y sector del final de la partición

4B

Offset LBA

Sector absoluto de inicio (Tiene que ser coherente con CHS)

4B

Tamaño LBA

Tamaño en sectores absolutos


En el disco duro hay solo 4 particiones primarias. Las particiones extendidas son contenedores de otras tablas de particiones.
Los sistemas operativos generalmente permiten solo una partición extendida.

Comando dd

El comando dd (disk dump o volcado de disco) copia de la entrada estándar a la salida estándar. Los datos de entrada son leídos y escritos en bloques por defecto de 512 bytes, aunque le podemos indicar que sean de otro tamaño con el parámetro bs (block size)
Ejemplo:

dd if=/dev/zero of=/dev/hda (copia el valor 0 en todo el disco duro)

dd if=/dev/random of=/dev/hda (copia numeros aleatorios en todo el disco duro)

dd if=/dev/hda of=/dev/fd0 bs=512 count=1 (Copia el primer sector del disco duro, el MBR, al primer sector del diskette. Con el parámetro count le decimos que cantidad de bloques queremos que se copien, en este caso, solo uno. Esta es la forma de hacer un respaldo del MBR)

04 abril 2006

Segunda Clase 30/3

Decidí no postear acerca de la sintaxis de AWK porque me parece más oportuno en cuanto al ancho del texto que se puede poner en el blog y además porque una cosa de ese tamaño registrada electrónicamente es más reacia a ser leida. Creo que es preferible leer algo del papel.

Sistemas de archivos:

  • fat
  • vfat
  • fat32
  • ntfs
  • ufs
  • ext2
  • ext3
  • raiserfs
  • xfs
  • iso9660
  • minix
  • codafs


(Hay un mail en la casilla de la clase que tiene las características de cada uno de estos sistemas de archivos)

¿Que es montar un sistema de archivos?

Montar un sistema de archivos consiste en asignar un directorio, o punto de montaje, a la unidad lógica. El montaje de un sistema de archivos se realiza con el comando mount, y el desmontaje con el comando umount

mount -> Monta sistemas de archivos. Sintaxis mount partición punto_de_montaje [-t sistema de archivos]

¿Qué es una partición?

El particionamiento de discos duros es la creación de divisiones lógicas que permite aplicar el formato lógico de un sistema operativo especifico.

Una partición en la arquitectura IBM PC es una parte de una unidad de disco duro que puede tener un sistema de archivo independiente. Hay tres tipos de particiones principales:

1. Partición primaria
2. Partición extendida, que contiene una o más particiones lógicas
3. Partición lógica

Según la arquitectura PC, el disco duro solamente puede albergar 4 particiones primarias. Las particiones extendidas se consideran como particiones primarias. Es decir, se pueden tener 4 particiones primarias, o 3 primarias y 1 extendida, 2 primarias y 1 extendidas, etc. Nunca puede haber más de una partición extendida, lo que si ocurre es que dentro de esa zona del disco duro dedicada a las partición extendida se creen particiones o unidades lógicas, que al fin y al cabo son particiones lógicas pero dentro de la zona de la partición extendida. Resaltar que un disco duro tiene 4 particiones primarias y sólo una de ellas funciona como extendida, y dentro de esta partición extendida se crean a su vez particiones lógicas. Es decir un disco duro puede tener 3 particiones primarias, su partición extendida y 4 particiones lógicas (que forman parte de la extendida). Y entonces podríamos tener 7 sistemas de archivos diferentes (o iguales o repetidos) ya que la partición extendida no cuenta en sí, sino cuentan sus particiones lógicas.

Comandos Vistos en clase:

groupadd -> Agrega grupos Ejemplo: groupadd tux

getent -> Nos da información acerca de las entradas de las bases de datos administrativas. Por ejemplo getent group nos dice todos los grupos que existen en nuestro sistema. La diferencia que tiene esto con hacer cat /etc/group es que este último comando solo nos muestra los grupos de archivo, pero pueden existir usuarios o grupos LDAP, Windows, etc que son mostrados con getent

vigr -> Este comando nos permite editar el archivo de grupos

vipw -> Nos permite editar el archivo de password (/etc/passwd)

newusers -> Permite agregar usuarios masivamente, de los cuales toma la información de un archivo

awk -> Es un lenguaje de búsqueda y procesamiento de patrones. Esto quiere decir que awk es capaz de buscar un patrón dentro de un archivo (al igual que grep) y tratarlo según unas operaciones determinadas. Con awk se pueden desarrollar auténticos programas

Programa hecho con awk

BEGIN { fs=":";

ofs=":";

uid=1100;

gid="tux";

home="/home/";

shell="/bin/bash"; }

{print $1, $1, uid++, gid, $2, home $1, shell }

awk -f crealista /tmp/lista > nu.txt