lunes, 25 de mayo de 2009

Exámen Linux, Jueves 28

Acá están las tres practicas con preguntas y respuestas:

Tema 4

1. Preparar el entorno de trabajo. Si no lo has hecho todavía realiza los siguientes pasos:
  • Cambia el password que puso el administrador del sistema por uno particular.

[andres@redhatserver andres]$ passwd
Changing password for user andres.
Changing password for andres
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
  • Cambia los permisos de tu directorio para que nadie pueda acceder a él.

[andres@redhatserver esi]$ chmod 700 andres
  • Crea el fichero .profile, con al menos lo siguiente: inhabilita mensajes, máscara propia de creación de ficheros, borrar la pantalla, etc.

[andres@redhatserver esi]$ cat >> .bash_profile
mesg n
umask 027
clear
^d
  • Crea un subdirectorio bin , para que contenga los script que creemos.

[andres@redhatserver andres]$ mkdir bin

2. Prácticas de comandos de uso común :
  • Obtén la relación de usuarios conectados y averigua quién eres.

[andres@redhatserver andres]$ who
  • Muestra en pantalla la fecha y la hora actual.

[andres@redhatserver andres]$ date
  • Averigua cuál es la identificación de tu terminal (fichero de dispositivo)

[andres@redhatserver andres]$ tty
  • Habilita tu terminal para recibir mensajes y que tu compañero borre tu pantalla.

[andres@redhatserver andres]$ cd /dev/pts
[andres@redhatserver pts]$ chmod 627 5 (*)

*El número 5 corresponde al terminal.
  • Averigua qué sistema Unix estás utilizando.

[andres@redhatserver andres]$ uname -s
  • Comprueba qué hace la orden: echo.

[andres@redhatserver andres]$ echo “Hola”
Hola

3. Crear dos ficheros que se llamen prueba1 y prueba2. Visualizarlos.

[andres@redhatserver andres]$ cat > prueba1 (Crear)
Este es el fichero uno.
[andres@redhatserver andres]$ cat prueba1 (Visualizar)
Este es el fichero uno.

[andres@redhatserver andres]$ cat > prueba2 (Crear)
Este es el fichero dos.
[andres@redhatserver andres]$ cat prueba2 (Visualizar)
Este es el fichero dos.

4. Unir ambos ficheros en un tercero: prueba3.

[andres@redhatserver andres]$ cat prueba1 prueba2 > prueba3

5. Añadir texto a prueba3 y visualizarlo.

[andres@redhatserver andres]$ cat >> prueba3 (Añadir texto)
Texto añadido
^d

[andres@redhatserver andres]$ cat prueba3 (Visualizar)
Este es el fichero uno.
Este es el fichero dos.
Texto añadido

6. Añadir el contenido de prueba1 al fichero prueba3.

[andres@redhatserver andres]$ cat prueba1 >> prueba3

7. Crear un directorio dirprueba, acceder a él y comprobar con la orden apropiada su situación.

[andres@redhatserver andres]$ mkdir dirprueba (Crear)
[andres@redhatserver andres]$ cd dirprueba (Entrar)
[andres@redhatserverdirprueba]$ pwd/home/esi/andres/dirprueba (Comprobar)

8. Copiar todos los ficheros de prueba creados a dirprueba. Comprobar si se ha copiado correctamente.

[andres@redhatserver andres]$ cp prueba[1..3] dirprueba
[andres@redhatserver andres]$ cd dirprueba
[andres@redhatserver dirprueba]$ ll
total 12
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba1
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba2
-rw-r----- 1 andres esi 86 mar 3 09:34 prueba3

9. Renombrar el fichero prueba3 como prueba.total.

[andres@redhatserver dirprueba]$ mv prueba3 prueba.total

10. Borrar todos los ficheros prueba del directorio home, con una sola orden. Para ello debes saber que el metacaracter * representa a cualquier cadena.

[andres@redhatserver andres]$ rm prueba*

11. Mover todos los ficheros prueba del directorio dirprueba a tu directorio de trabajo. Comprobar el cambio y volverlo a dejar como estaba.

[andres@redhatserver andres]$ mv dirprueba/prueba[1..3] .
[andres@redhatserver andres]$ ll
total 28
drwxr-x--- 2 andres esi 4096 feb 25 10:36 apuntes
drwxr----- 2 andres esi 4096 mar 3 08:49 bin
drwxr----- 2 andres esi 4096 mar 4 09:09 dirprueba
-rw------- 1 andres esi 1477 feb 16 14:46 mbox
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba1
-rw-r----- 1 andres esi 24 mar 3 09:34 prueba2
-rw-r----- 1 andres esi 86 mar 3 09:34 prueba.total

[andres@redhatserver andres]$ mv prueba[1..3] dirprueba

12. Crea un enlace del fichero prueba.total del directorio dirprueba con el fichero prueba3 del directorio home.

[andres@redhatserver andres]$ ln dirprueba/prueba.total prueba3

13. Sin moverse del directorio actual hacer un listado de, solamente los directorios, que hay en el directorio raíz.

[andres@redhatserver andres]$ ll / | grep ^d

14. Con el permiso de un compañero accede a su entorno de trabajo (usuario), sin pasar por login. Comprueba quién eres y después vuelve a tu usuario.

[andres@redhatserver andres]$ su manuel
Password:

[manuel@redhatserver andres]$ who i am
andres pts/0 Mar 6 13:30 (192.168.0.106)

[manuel@redhatserver andres]$ su andres
Password:

15. Eliminar nuestros propios permisos de acceso del fichero prueba1. Intentar visualizarlo después.

[andres@redhatserver dirprueba]$ chmod 000 prueba1
[andres@redhatserver dirprueba]$ cat prueba1
cat: prueba1: Permiso denegado

16. Restaurar solamente el permiso de lectura del fichero anterior y visualizarlo.

[andres@redhatserver dirprueba]$ chmod 400 prueba1
[andres@redhatserver dirprueba]$ cat prueba1
Este es el fichero uno.

17. Sin modificar los permisos, intentar borrar o añadir información al fichero. Restaurar el permiso de escritura y repetir la misma operación.

[andres@redhatserver dirprueba]$ rm prueba1
rm: borrar el fichero regular `prueba1' protegido contra escritura? (s/n) s
[andres@redhatserver dirprueba]$ cat>>prueba1
-bash: prueba1: Permiso denegado

[andres@redhatserver dirprueba]$ chmod 600 prueba1

[andres@redhatserver dirprueba]$ cat>>prueba1
Esto está añadido.
[andres@redhatserver dirprueba]$ cat prueba1
Este es el fichero uno.
Esto está añadido.
[andres@redhatserver dirprueba]$ rm prueba1

18. Buscar en todo el sistema de ficheros el fichero passwd. Visualizarlo.

[andres@redhatserver andres]$ find / -name passwd -type f -exec cat {} \;

19. Realiza los pasos para que el usuario de al lado pueda acceder a nuestro directorio pero no pueda tocar ningún fichero.

[andres@redhatserver esi]$ chmod 710 andres

20. Realiza los pasos necesarios para copiar el fichero prueba.total de un usuario a otro. Son estos:
  • Cambiar permisos del usuario receptor.

[andres@redhatserver esi]$ su ruben
Password:
[ruben@redhatserver esi]$ chmod 770 ruben
  • Copiar el fichero.

[andres@redhatserver andres]$ su andres
Password:
[andres@redhatserver andres]$ cp dirprueba/prueba.total ../ruben
  • Cambiar los permisos para que pueda ser usado por éste.

[andres@redhatserver andres]$ chmod 770 ../ruben/prueba.total
  • Cambiar los permisos del usuario receptor cerrando su entorno de trabajo.

[ruben@redhatserver esi]$ su ruben
Password:
[ruben@redhatserver esi]$ chmod 700 ruben

21. Borrar el directorio dirprueba y todos los ficheros prueba creados en esta sesión de trabajo.

[andres@redhatserver andres]$ rm -r dirprueba

22. Despedir la sesión de Unix.

[andres@redhatserver andres]$ ^d

Tema 7

1. Seguir un proceso desatendido, con nohup y sin él que realice un listado largo recursivo desde el directorio /etc y lo lance a un fichero, los mensajes de error los grabe en otro fichero y al finalizar la ejecución lance un mensaje indicando que se ha terminado.

[andres@redhatserver andres]$ nohup ll -R /etc 1>f1 2>f2 ; echo "Terminado" &

[andres@redhatserver andres]$ ll -R /etc 1>f1 2>f2 ; echo "Terminado" &

2. Lanzar el mismo proceso anterior mediante nohup sin ejecución paralela. Intentar restaurar la normalidad, bien matando ese proceso, bien matando el shell.

Teóricamente esto no es posible, ya que si el proceso no se ejecuta paralelamente, hay que esperar a que finalice para introducir una nueva orden.

3. Crear un script para despedir el terminal. Razonar lo que ocurre si no se puede.

[andres@redhatserver andres]$ vi Ciao
exit
^d

4. Lanzar un script que realice un listado recursivo desde el raíz con nice reduciéndole la prioridad.

[andres@redhatserver andres]$ nice –5 ls –R /

5. Planificar un proceso para que la próxima vez que tengamos clase le aparezca a un compañero un mensaje en pantalla. Avisar antes mediante el correo que se habilite para recibir mensajes.

[andres@redhatserver andres]$ mail gaston
Activá los mensajes con mesg y.
^d

[andres@redhatserver andres]$ crontab
30 08 06 04 1 echo “Perra sudafricana” | write gaston
^d

Tema 8

1. De un fichero que contenga el listado largo del directorio /home. Ordenar por el campo número de Enlaces, de forma numérica en orden inverso.

[andres@redhatserver andres]$ cat fichero1 | tr -s " " | sort -r -n +1 -2

2. Mostrar en pantalla la lista de procesos que se están ejecutando clasificados por dígito identificador de proceso (PID), de mayor a menor uso.

[andres@redhatserver andres]$ ps -a | sort -r -n +0 -1

3. Queremos introducir en una variable el número de caracteres de un fichero.

[andres@redhatserver andres]$ var=`wc -c fichero | tr -s " " | cut -f2 -d " "`

4. Queremos saber de los usuarios que están conectados, lo siguiente:
  • Los que han entrado una vez.

[andres@redhatserver andres]$ who | tr -s " " | sort +0 -1 | cut -f1 -d " " | uniq -u
  • Los que han entrado varias veces.

[andres@redhatserver andres]$ who | tr -s " " | sort +0 -1 | cut -f1 -d " " | uniq -d
  • La lista de los que han entrado y el número de veces.

[andres@redhatserver andres]$ who | tr -s " " | sort +0 -1 | cut -f1 -d " " | uniq -c

5. Realizar un script llamado “ls_mio” que realice un listado largo personalizado de tal forma que, muestre solamente, primero el nombre del fichero y después el tamaño. Debe aparecer clasificado por orden alfabético y con el separador de campo “:” o el tabulador “^I”.

[andres@redhatserver bin]$ vi ls_mio
ls -l | tr -s " " | cut -f5 -d " " > col5
ls -l | tr -s " " | cut -f9 -d " " > col9
paste -d ":" col9 col5

6. Buscar una línea en un fichero que tenga al menos tres caracteres.

[andres@redhatserver andres]$ grep "..." Palabras

7. Localizar ficheros que tengan un nombre de al menos 5 caracteres.

[andres@redhatserver andres]$ ls | grep "....."

8. Realizar un script que traduzca cualquier fichero de minúsculas a mayúsculas. El resultado debe quedar en el propio fichero.

[andres@redhatserver bin]$ vi traductor
tr a-z A-Z < $1 > temporal
mv temporal $1

9. Realizar un script para fusionar dos ficheros de texto delimitados por comas, quedando el fichero resultado ordenado por el tercer campo. Los ficheros deben darse en línea de comandos. No deben aparecer repeticiones. Para realizar esta práctica podemos utilizar el fichero /etc/passwd sustituyendo el separador de campo “:” por “,”, e introduciendo las 10 primeras líneas en un fichero y las 10 últimas en otro.

[andres@redhatserver bin]$ vi fusionar
head passwd | tr : , > 10pri
tail passwd | tr : , > 10ult
cat 10ult>>10pri
cat 10pri | sort -n +2 -3 | uniq –u
rm 10pri 10ult

10. Realizar un script para obtener por pantalla el contenido de un fichero de texto paginado y numeradas sus líneas.

[andres@redhatserver bin]$ vi Paginador
more $1
wc -l $1

11. Script para contar el número de llaves { y } de un programa en C.

[andres@redhatserver bin]$ vi llavero
cat $1 | tr –c “{” “*” | tr –d “*” > llaves_abiertas
cat $1 | tr –c “}” “*” | tr –d “*” > llaves_cerradas
cat llaves_abiertas >> llaves_cerradas
cat llaves_cerradas | wc -c
rm llaves_abiertas llaves_cerradas

12. Script para obtener los ficheros del directorio actual que no cumplan un patrón que dará el operador en línea de comandos.

[andres@redhatserver bin]$ vi nopatron
ls | egrep [^$1]

13. Script para obtener dos listas de ficheros del directorio actual, una de directorios y otra de ficheros. Los campos a obtener son : permisos y nombre.

[andres@redhatserver bin]$ vi listadoble
ls -l | tr -s " " | cut -f1 > perm
ls -l | tr -s " " | cut -f9 > nomb
cat perm
cat nomb
rm perm nomb

14. Script que muestre en pantalla ficheros que tienen una determinada extensión (programas de .c) que dará el operador como argumento en línea de ordenes.

[andres@redhatserver bin]$ vi buscaextension
ls | grep `c$

15. Script para localizar líneas que empiecen por vocal y convierta a mayúsculas toda la línea encontrada.

[andres@redhatserver bin]$ vi buscavocal
cat $1 | grep ^[aeiou] | tr a-z A-Z

16. Shell-script para validar nombres de variables enviadas como argumentos desde línea de órdenes. Serán variables válidas las que cumplan los siguientes requisitos:
  • Tengan al menos 2 letras o números.
  • Empiece obligatoriamente por una letra.
  • La segunda o tercer caracter pueden ya ser letras o números.
  • No tenga más de 3 letras o números.

[andres@redhatserver bin]$ vi validar
echo $1 | egrep '^([a-z]|[A-Z])([a-z]|[0-9])?$'

17. Pasar lista de los alumnos que están conectados y grabarlos en un fichero cuyo nombre sea la fecha del día.

[andres@redhatserver andres]$ vi pasalista
var1= `date | tr –d “ “`
who > $var1

lunes, 23 de marzo de 2009

Direccionamiento IP

Versión 1.2.3 (c) 2007-2009 Eduardo José Moreira. Este documento está bajo licencia GNU FDL.

Introducción

Para que la red de Internet (Muchas redes TCP/IP conectadas entre sí) funcione, en los años 80 se diseñaron varios protocolos a nivel de red para poder interconectar redes heterogéneas, es decir de distinto tipo y tecnología. Entre ellos uno de los más importantes; el protocolo IP (Internet Protocol), definido en el RFC 791.

Nota: Los RFC (Request for Comments) son ficheros de texto donde se definen los protocolos de TCP/IP, la propia arquitectura TCP/IP, los cambios y mejoras que se les han ido haciendo hasta hoy, etc.

Una de las cosas más importantes definidas en el protocolo IP es el direccionamiento IP.

Las direcciones IP están definidas dentro de la arquitectura de red TCP/IP, en el nivel 3 de la misma, el nivel de Interred o Internet. En concreto forman parte del protocolo IP del que toman su nombre.

Como se ha universalizado el empleo de redes TCP/IP en todo tipo de ordenadores, encontraremos direcciones IP en casi en cualquier equipo.

Existen dos tipos de direcciones IP:
  • Direcciones IP versión 4 (IP v4)
  • Direcciones IP versión 6 (IP v6)

Las direcciones IP v4 son números de 32 bits, mientras que las IP v6 son números de 128 bits. Con las primeras, al ser de 32 bits podemos tener hasta: 4.294.967.296. Con las segundas, al ser de 128 bits, podemos tener muchisimas más.

Las IP v6 se desarrollaron cuando parecía que las IP v4 estaban empezando a agotarse en el mundo. Pero en seguida aparecieron formas de reutilizar direcciones IP v4 definiendo rangos de IP privadas y protocolos como NAT para conectar redes que utilizan esas IP privadas mediante dispositivos como los routers (encaminadores).

En la actualidad el empleo de IP v4 es universal, mientras que IP v6 comienza a utilizarse en ámbitos reducidos.

Direcciones IP v4

Las direcciones IP son números de 32 bits que identifican a cada ordenador en una red TCP/IP. En la práctica se manejan poniendo los 32 bits como 4 bytes y escribiendo cada byte en decimal, separando los bytes con puntos. Un ejemplo de dirección IP es:

Dirección IP (32 bits) en binario: 11000000 10101000 00000000 01110011

Dirección IP (8 bits) en decimal: 192 168 0 115

Separada por puntos: 192.168.0.115

Luego cada IP se escribe como 4 números de 8 bits cada uno, separados por puntos; si lo pensamos las cosas cuadran: se puede expresar un mismo valor como 32 bits en binario, o como 4 bytes (es decir, escribiendo los bytes como 4 números en decimal).

Cuando se diseñó este método, se consideró que esta cantidad era suficiente para el ritmo de crecimiento esperado de Internet. Hoy en día se ha llegado al límite y las direcciones IP se han agotado. Pero hay formas de aliviar esto, sobre todo el uso de direcciones IP reservadas y routers con NAT.

Por otra parte la IP de cada ordenador debe ser única, tanto en una red como entre redes conectadas entre sí (y si están conectadas a Internet, llegamos a que la IP de cada ordenador debe ser distinta a nivel mundial, ya que Internet une redes de todo el mundo).

Esto se consigue mediante una serie de organismos, como el IANA (Internet Assigned Numbers Authority), que se ocupan de asignar IP y grupos de IP a instituciones, empresas proveedoras de servicios de Internet.

Nota: Las empresas de proveedores de servicios de Internet se abrevian como ISP (Internet Service Providers)

Clases de direcciones IP

En una dirección IP podemos distinguir dos partes:
  • Parte de Red, que sirve para identificar la red en la que está un ordenador.
  • Parte de Host (Ordenador), que distingue unos ordenadores de otros dentro de la misma red.

Por ejemplo, en la IP 192.168.0.4 tenemos que la parte de red son los 3 primeros valores empezando por la izquierda, 192.168.0, y la parte de host es el cuarto valor.

¿Por qué en este ejemplo la parte de red son 3 números y la de host 1?

El motivo es que existe una clasificación de las direcciones IP en clases, de la A a la E, donde cada clase tiene una parte de red y una de host distintas, que permiten usar una clase de direcciones u otra en una red de ordenadores según sea el tamaño previsto de la red (el número de ordenadores previsto en ella).

De ahí que existan clases de IP adecuadas para redes grandes (clase A), otras para redes medianas (clase B) y otras para redes pequeñas (clase C), además de algunas otras clases de uso reservado (clases D y E, no se utilizan a la hora de montar redes).

Luego con direcciones de clase A podemos tener pocas redes (1 byte), pero con muchos ordenadores por red (3 bytes).

En redes de clase B podemos tener un número medio de redes (2 bytes) cada uno con un número medio de ordenadores (2 bytes).

Y en las redes de clase C podemos tener un número grande de redes (3 bytes) cada una con un número pequeño de ordenadores (1 byte).

Una manera de memorizar ésto es:

Redes de clase A: Aproximadamente 2 a la 8 redes, cada una con aproximadamente 2 a la 24 hosts.
Redes de clase B: Aproximadamente 2 a la 16 redes, cada una con aproximadamente 2 a la 16 hosts.
Redes de clase C: Aproximadamente 2 a la 24 redes, cada una con aproximadamente 2 a la 8 hosts.

Una regla prática para averiguar a qué clase pertenece una dirección IP es mirar el valor de su primer byte por la izquierda; con ese valor podemos hallar la clase a que pertebece la IP. La regla es:

Si el primer byte está entre 1 y 127, la dirección es de clase A.
Si el primer byte está entre 128 y 191, la dirección es de clase B.
Si el primer byte está entre 192 y 223, la dirección es de clase C.

Máscara de subred y dirección IP de Red

Una forma de saber cuál es la parte de red y de host de la IP es averiguar la clase de esa IP, mirando el primer byte de la izquierda.

Sin embargo existe otra forma de indicar cuál es la parte de red y de host de una IP, que consiste en utilizar las llamadas máscaras de subred.

Nota: En realidad las máscaras de subred sirven para 2 cosas: Saber cuál es la parte de red y de host de una IP, y hallar la IP de red a la que pertenece una IP dada.

La máscara de subred es un número de 32 bits, escrito como 4 bytes separados por puntos (como en una dirección IP) cuyos valores pueden ser 0 (los 8 bits a 0) o bien 255 (los 8 bits a 1). Por ejemplo lo siguiente es una máscara de subred:

Máscaras de subred en binario: 11111111 11111111 11111111 11111111

Máscaras de subred en decimal: 255.255.255.0

Como vemos, las máscaras tienen el mismo aspecto que las direcciones IP; sólo cambia los valores que puede tomar cada byte; 0 ó 255.

Cada clase de direcciones IP tiene asignada una máscara de subred por defecto.

Luego la forma de saber qué parte de la IP y qué parte es de host es consultar la máscara de subred asociada: los bytes 255 indican la parte de red y los bytes a 0 indican la parte de host.

Normalmente cuando se escribe una IP también se indica la máscara de subred que la acompaña: Siempre se da el par IP-máscara, no únicamente la IP.

Una forma más moderna (y más corta) de escribir la máscara de subred es con una barra inclinada /, seguida del número de bits usados como parte de red.

La equivalencia entre las máscaras escritas de forma tradicional y como /xx es la siguiente:

Por ejemplo 172.16.0.4 con máscara 255.255.0.0 se escribiría: 172.16.0.4 / 16. Otro uso interesante de la máscara de subred es determinar cuál es la dirección IP de la red en que se encuentra un ordenador cualquiera.

Para ello basta poner en binario la IP del ordenador y la máscara de subred asociada a esa IP, hacer un AND de los bits de IP y máscara, y el resultado es la dirección IP de la red en que se encuentra el ordenador. Luego la dirección de red es como la del equipo, pero con la parte de host puesta a 0.

Direcciones IP reservadas

Existen una serie de direcciones IP reservadas, que no podemos poner en nuestros equipos al configurar la red manualmente:

0.0.0.0 - Utilizada por los ordenadores cuando arrancan, hasta que se carga del todo el sistema operativo. Es una IP que no se utiliza después, sólo la emplea el software que implementa la pila TCP/IP del sistema operativo al iniciar el ordenador.

127.0.0.1 - Dirección "loopback" (bucle de vuelta o sobre sí mismo). Utilizada para referirnos al propio ordenador, y también para comprobar que la red TCP/IP funciona bien en un ordenador deconectado de la red. Siempre podemos usar esta IP para hacer operaciones de red donde haga falta poner la IP del propio equipo. No interfiere con la IP asignada al equipo bien por nosotros (manualmente) o bien de forma automática mediante DHCP.

Rango de 127.0.0.0 a 127.255.255.255 - Rango de direcciones "loopback". Reservado para los mismos usos que la IP 127.0.0.1.

Direcciones IP con parte de host a 0 - Son direcciones de red, y no las podemos asignar a ningún equipo concreto. La IP que acaba en 255 tampoco podemos usarla en equipos.

Direcciones IP con parte de host a 255 - Son direcciones de broadcast (difusión), y no las podemos asignar a ningún equipo concreto. Se utilizan para enviar datos a todos los equipos de la red simultáneamente.

Rango de 169.254.0.0 a 169.254.255.255 - Son direcciones de "autoconfiguración" de los ordenadores. Son utilizadas por algunos PC y Mac cuando están configurados para usar TCP/IP pero no tienen asignada una IP estática (introducida a mano) y la asignación de una IP dinámica (por DHCP) ha fallado.
Rangos de Direcciones IP Privadas

Son ciertos rangos de direcciones IP reservadas para "usos privados" (Realmente para que las use cualquiera). Estos usos son los siguientes:
  • Redes aisaladas, sin conexión a otras redes.
  • Redes conectadas con otra red o con Internet mediante un dispositivo que realice NAT (Networking Address Translation), como un router . De ésta manera las IP privadas no son "vistas" por la otra red, ya que lo que se verá es la IP externa del router.

Existen IP privadas de clase A, B y C. Los rangos de éstas direcciones IP son: