miércoles, 30 de diciembre de 2015

Práctica de dominios. Active Directory en Linux.

Finalizamos la práctica de dominios con la realización de un dominio en Linux y la inclusión de dos clientes uno linux también y el otro Windows. Mostraré dos vídeos, en el primero se muestra la instalación de DC (controlador de dominio), la consiguiente configuración del Directorio Activo y la instalación de un BDC(backup domain controller),y en el segundo se explica como incluir en el dominio dos clientes uno Linux y otro Windows.

Creación del dominio asir5.local utilizando un DC con debian y la instalación de un BDC utilizando zentyal.

Inclusión de un cliente Linux Ubuntu 10.04 y otro cliente Windows 10 al dominio asir5.local.

martes, 29 de diciembre de 2015

Práctica de Dominios. Dominios IV parte.

Relaciones de confianza.

Vamos a unir los 3 árboles del organigrama para crear un bosque, para ello mostraremos un vídeo dónde se muestra como se hace y como se crean las relaciones de confianza. Con esto finalizaríamos la 1ª parte de la práctica correspondiente al organigrama. Ya sólo nos quedaría la 2ª parte de la práctica, el Directorio Activo en Linux con un par de clientes.

Unión del dominio asir2.local y asir3.local

Práctica de Dominios. Dominios III parte.

Continuamos con la práctica de dominios. Ahora nos centraremos en el 4º nivel del organigrama. Veremos como se incluyen los clientes, los ordenadores finales en el dominio. Para ello utilizaremos 5 vídeos con distintos sistemas operativos.

Incluir un cliente con Linux Mint 13 al dominio elena.grupo4.asir4.local

Incluir un cliente con Mac OS X 10.8 al dominio fran.grupo2.asir2.local

Incluir un cliente con Linux Ubuntu 12.04 al dominio silvia.grupo2.asir2.local

Incluir un cliente con Windows 7 al dominio jorge.grupo1.asir1.local

Incluir un cliente con Windows 8.1 al dominio arce.grupo4.asir4.local

En la siguiente entrada mostraremos la creación del bosque uniendo los tres árboles, con sus relaciones de confianza.

lunes, 28 de diciembre de 2015

Práctica de Dominios. Dominios II parte.

Continuamos con la práctica de dominios. Ahora nos centraremos en el 2º nivel del organigrama, mostraremos la creación de un DC de un subdominio y su correspondiente RODC.

Creación del subdominio grupo4.asir4.local con un DC con Windows Server 2012.

Creación del RODC de grupo4.asir4.local con Windows Server 2012.

Continuamos, ahora nos centraremos en el 3º nivel del organigrama, se mostrará la creación de otros dos subdominios, esta vez con Windows Server 2008 y Windows Server 2008R2.

Creación del subdominio juanes.grupo3.asir3.local con un DC con Windows Server 2008.

Creación del subdominio elena.grupo4.asir4.local con un DC con Windows Server 2008R2.

Continuamos en la siguiente entrada "Dominios III parte" con la instalación de los clientes.

lunes, 14 de diciembre de 2015

Práctica de Dominios. Dominios I parte.

El Directorio Activo

La práctica tiene dos partes, la primera consiste en crear 3 árboles para finalmente formar un bosque de dominios, como indica el siguiente organigrama. En el que aparecen los sistemas operativos, con los que se va a trabajar

La segunda parte, consiste en la instalación del Directorio Activo en Linux, la creación de un BDC(Backup Domain Controller), y la incorporación al dominio de un cliente Windows y otro Linux.

La realización de las prácticas y sus vídeos correspondientes han sido realizados satisfactoriamente por todos los alumnos de 2º curso de ASIR del Colegio Salesiano "San Jose", en el mes de noviembre del 2015.

Los vídeos completos de los árboles, asir2.local, asir3.local y asir4.local, como el directorio activo en linux, podéis verlos en youtube, como así os lo indique vía twitter.

Aquí sólo voy a insertar los vídeos más representativos de cada uno de los niveles de dominios, subdominios y clientes finales de la práctica, con distintos sistemas operativos, ya que considero que el resto de vídeos son similares, y finalmente la creación de las relaciones de confianza y correspondiente unión de los árboles para crear un bosque.

Comenzamos con la introducción

Creación del dominio asir2.local con un DC con Windows Server 2012 y raíz del árbol.

Creación del RODC de asir2.local con Windows Server 2012.

Todo esto respecto al primer nivel del organigrama de la práctica. No inserto más vídeos como he dicho, porque los controladores de los restantes dominios de este nivel son similares, además de disponer de los vídeos completos en youtube. Continuamos en la siguiente entrada, Dominios II parte.

viernes, 27 de noviembre de 2015

Procesos con fork(). IV


¿Qué hace este código?

#include <stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main(){
                    int pid;
                    int i;
                    int estado;

                    pid= fork();

                    switch(pid)
                    {
                                         case-1:         perror("No se ha podido crear el proceso hijo\n");
                                                             break;
                                         case 0:           for(i=0;i<10;i++)
                                                             printf("Soy el hijo\n");
                                                             break;
                                         default:         for(i=0; i<10;i++)
                                                             printf("Soy el padre\n");
                                                             wait(estado);
                                                             printf("Mi proceso hijo ya ha terminado.\n");
                                                             break;
                    }

}

jueves, 19 de noviembre de 2015

Creación de procesos en Java I.


Escribir un programa en  Java que ejecute dos comandos, cada uno ejecutado por un hijo, con sus respectivas básculas (argumentos), y que redireccione la salida estándar del primero a la entrada del segundo. Para facilitar las cosas, los comandos y sus básculas están en el código.
ls -la | tr "d" "D"

import java.io.*;
public class JavaComando {

 public static void main(String args[]) throws IOException, InterruptedException {
 Runtime proc = Runtime.getRuntime();
 Process lsproc = null;
 InputStream in = null;
 int b;

 Process trproc = null;
 OutputStream out = null;
 
 lsproc = proc.exec("ls -la");
 in = lsproc.getInputStream();
 trproc = proc.exec("tr 'd' 'D'");
 out = trproc.getOutputStream();
 while((b = in.read()) != -1)
 out.write(b);
 lsproc.waitFor();
 in.close();
 out.close();
 in = trproc.getInputStream();
 while((b = in.read()) != -1)
 System.out.write(b);
 trproc.waitFor();
 in.close();
 }
}

domingo, 18 de octubre de 2015

Algoritmos de Planificación.

Ver el prezi, es sencillo y bien explicado, fácil de entender.

Realizar la planificación de la siguiente lista de procesos aplicando los siguientes algoritmos:

  1. MLQF: cola1 Round Robin2 para trabajos <3; cola2 RR4 para trabajos <5 y cola3 SJF
  2. MLQ: cola1 RR4; cola2 RR2 y cola3 FCFS
ProcesosLlegadaPrioridadCPU
A03-8
B125
C21+4
D51+4
E327
F63-4

lunes, 12 de octubre de 2015

Procesos con fork() III.

1. Dime que saca por pantalla y su árbol de procesos.
      #include<stdio.h>
#include<stdlib.h>

void main() {
int i, e;
pid_t childpid;
      for(i=1; i<4; i++){
                  if ( childpid = fork() <= 0){
                             break;
                  }
                  else{
                             wait(&e);
                  }
                  printf(“este es le proceso %d con padre %d\n”, getpid(), getppid());
      }

}
2. Dime que saca por pantalla y su árbol de procesos.
     #include<stdio.h>
#include<stdlib.h>

     main()
{
int i;
for(i=0; i<4;i++)
if (fork()!=0)
break;
wait(NULL);
printf("pid=%d ppid=%d\n", getpid(), getppid());
exit(0);
}

jueves, 8 de octubre de 2015

Procesos con fork() II.

Dime que saca por pantalla este programa y su árbol de procesos.

#include<stdio.h>
#include<stdlib.h>


main()
{
int i=0;
int j=0;
int e=0;
int pid;
printf("Soy el proceso= %d y mi padre es= %d\n", getpid(),getppid());
                for(i=0;i<3;i++)
                               {
                               pid=fork();
                               wait(&e);
                               if (pid==0)
                               {
                               printf("Soy el proceso %d mi padre es%d\n", getpid(), getppid());
                                               for(j=0;j<2;j++)
                                               {
                                               pid=fork();
                                               wait(&e);
                                                               if (pid==0)
                                                              {
                                                               printf("Soy el proceso= %d mi es padre %d\n",getpid(),getppid());
                                                               break;
                                                               }
                                               }
                               break;
                               }
                               }

}

martes, 6 de octubre de 2015

Procesos con fork() I.

Dime que saca por pantalla este programa y su árbol de procesos.
#include<stdio.h>
#include<stdlib.h>
main()
{
int i, e;

pid_t pid;
printf ("Proceso %d con padre %d\n", getpid(), getppid());
for (i=1; i<4;++i)
{
pid = fork();
wait(&e);
if ( pid == 0)
                {
                                              
                 if (fork()!=0)
                               {
                                               if (fork()!=0)
                                               {
                                                               printf("Proceso con  pid=%d y padre ppid=%d\n", getpid(), getppid());
                                               }
                                               else
                                                              
                                                               printf("Proceso con pid=%d y padre ppid=%d\n", getpid(), getppid());
                               }
                else
                               {
                                               printf(" Proceso con pid=%d y padre ppid=%d\n", getpid(), getppid());      
                               }
                break;
                }
}
}

miércoles, 26 de agosto de 2015

Scripst III

Mas ejemplos para programar.

Ejercicios propuestos en los últimos exámenes

  1. Realiza un script que me devuelva el número de enlaces simbólicos del directorio actual.
  2. Realiza un script que pida por teclado una palabra. El algoritmo indica si hay el mismo número de vocales y consonantes o te indica cuál tiene más.
  3. Realiza un programa que pida un número y me devuelva todos los números hasta ese número repetidos tantas veces como indique su valor. Por ejemplo: si meto el 4, me devuelve, 1223334444.
  4. Programa que dado un nombre de grupo determine si existe en el sistema, y si es así, presente su nombre, número de grupo (GID), y lista de usuarios que pertenecen a él.

jueves, 20 de agosto de 2015

Solución Scripts I, ejercicio 4.

Solución al ejercicio numero 4:

if [ $# -eq 0 ]

then

echo tienes que pasar algún argumento, $0 directorios

exit 1

#¿por qué exit 1 y no exit 0?

#Los dos terminan o acaban el proceso, pero para finalizaciones normales mejor exit 0

#indicando al proceso padre la terminación normal del proceso hijo

#para utilizaciones incompletas del proceso o terminaciones anormales, mejor poner exit 1

fi

fecha=$(date "+Y-%m-%d")

if [ -e $fecha.lista ]

then

echo Error, el fichero lista ya existe.

exit 1

fi

for var in $*

do

if ! [ -d $var ]

then

echo Error, $var no es un directorio

exit 1

fi

done

touch $fecha.lista

for var in $*

do

echo $var>>$fecha.lista

done

#también puedes hacer: echo $*|tr " " "\n">$fecha.lista

tar cfz $fecha.tar.gz $*

martes, 9 de junio de 2015

Soluciones scripts II

Como podéis comprobar la mayoría de los ejercicios se pueden hacer de varias formas, pero recordar QUE LA ÚNICA LIMITACIÓN QUE TIENE EL PROGRAMADOR ES SU PROPIA IMAGINACIÓN.

Solución al ejercicio número 1:

También puedes poner solamente la secuencia de números pares

for var in 0 1 2 3 4 5 6 7 8 9 10 12 -- también for var in `seq 1 12;` o $(seq 1 12)

do

if [ `expr $var % 2` -eq 0 ]

then

for var2 in 0 1 2 3 4 5 6 7 8 9 10

do

echo "$var x $var2" = `expr $var \* $var2`

done

fi

read

done

Solución al ejercicio número 2:

linea="linea"

while [ ! -z "$linea" ]

do

read linea

if [ ! -z "Slinea" ]

then

numlinea=`expr $numlinea + 1`

echo " La linea numero: $numlinea del fichero es: $linea"

fi

done</home/alumno/fichero.txt

Otras formas o posibles soluciones:

  • nl fichero.txt|tr -s"\t" " "|cut -d " " -f2|tail -1
  • otra:
    • cat -n fichero.txt
    • cat fichero.txt|wc -l

Solución al ejercicio número 3:

if test $# -ne 2 –a $1 –lt $2

then

echo “Introduce solo dos números y el segundo mayor que el primero”

else

for (( i=$1; i<=$2;i++))

do

echo “$i”

done

fi

Solución al ejercicio número 4:

for var in $*

do

if [ -d $var ]

then

echo $var es un directorio

rm –ri $var

fi

if [ -f $var –a `find . –name $var –a –size +100c` ]

then

echo $var es un fichero de mas de 100 bytes

rm $var

else

echo $var no tiene 100

fi

done

lunes, 8 de junio de 2015

Scripts II

Más ejemplos para programar.

Ejercicios propuestos en el examen de Junio del 2013

  1. Realiza un script que muestre todas las tablas de multiplicar de los números pares hasta el 12 incluido.
  2. Realiza un guión que nos muestre las líneas de un fichero numeradas y nos diga el número total de líneas(igual que wc).
  3. Realiza un script que devuelva todos los números comprendidos entre dos números enteros que se le pasen como parametros. Se tiene que comprobar que se le pasan dos números y que el primero es menor que el segundo, en casos contrarios mostrar un error.
  4. Realiza un sript que borre los todos los directorios y ficheros que le pasamos. El fichero tiene que tener un tamaño superior a 100bytes.

viernes, 5 de junio de 2015

Soluciones Scripts I

Solución al ejercicio numero 1:

creamos el script : copiaseguridad cp -R /home /mnt/respaldo

ejecutamos el crontab -e: 00 10 * * 7 ./home/copiaseguridad

Solución al ejercicio numero 2:

ps aux|sort -r -k3|grep -w $usuario|head -1

ps -eo user -o %cpu -o cmd|sort -r|grep $usuario|head -1

Solución al ejercicio numero 3:

clear

echo "Introduzca el nombre de usuario a comprobar: "

read nombre

if `who|grep $nombre >/dev/null`

then

echo "El usuario está conectado"

ps –u $nombre|wc -l

else

echo "El usuario no está conectado"

fi

miércoles, 27 de mayo de 2015

Soluciones ejercicios de JavaScript.

Ejercico 1 .
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Calculo de la letra del DNI</title>
<script type="text/javascript">
var letras = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
var letras2 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
var i;
var x;
var resul;
for(i in letras2)
{
    for(x in letras)
        {
              if(letras2[i]==letras[x])
            {
              resul += 1;
              }
        }
        if (resul == 0)
        {
           alert(letras2[i]);
           }
        resul=0;
}
</script>
</head>
<body>
<p>ok</p>
</body>
</html>
Ejercicio 2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejercicio 2</title>
 <script type="text/javascript">
function alreves(cadena) {
  var cadenaarray = cadena.split(" "); 
 var cadenareves=cadenaarray.reverse();
 var cadenafin=cadenareves.join(" ");
    return cadenafin;
}
 var mensaje=prompt("Introcuce tu nombre y dos apellidos");
alert(alreves(mensaje));
</script>
</head>
 <body>
<p> HOLA</p>
</body>
</html>
Ejercicio 5.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>numero de caracteres</title>
 <script type="text/javascript">
var texto="5.    Realizar un ejercicio que cuando se pulse en el enunciado nos muestre el número de caracteres."
var numero = texto.length;
</script>
</head>
 <body>
<p onclick="alert(numero)">5.    Realizar un ejercicio que cuando se pulse en el enunciado nos muestre el número de caracteres.</p>
</body>
</html>
Ejercicio 6.
 !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>mayor</title>
 <script type="text/javascript">
var numeros = prompt("Introduce los números ");
var numero=0;
numero = numeros.split(" ");
var mayor=0;
for(var i = 0; i <=numero.length; i++)
{
     if (numero[i] >= mayor)
     {
        mayor= numero[i];
     }
}
alert(mayor);
</script>
</head>
 <body>
ok
</body>
</html>
Ejercicio 7.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>posicion</title>
 <script type="text/javascript">
var numeros = prompt("Introduce los números ");
var numero=0;
numero = numeros.split(" ");
var mayor=0;
for(var i = 0; i <=numero.length-1; i++)
{
     if (numero[i] >= mayor)
     {
        mayor= numero[i];
     }
}
var posicion = numero.indexOf(mayor);
alert(posicion);
</script>
</head>
 <body>
ok
</body>
</html>

martes, 26 de mayo de 2015

Scripts I

Ejemplos para programar.

Estos ejercicios han sido propuestos en distintos exámenes. En estos casos utilizar el demonio cron y los comandos tar y ps.

  1. Haz un guión que haga una copia de seguridad del nuestro home, en el directorio /mnt/respaldo, todos los domingos a las 10:00.
  2. Muéstrame el proceso con mayor carga en el sistema del usuario que le pasas como parámetro.
  3. Haz un script que compruebe que el usuario que le pides por teclado esta conectado y si es así, muestra el numero de procesos que tiene en el sistema.
  4. Haz un script que cree un archivo tar comprimido con la lista de directorio que le pasas. Tienes que comprobar que en esa lista, todos son directorios, si no fuera así, muestras el error y se sale.El nombre del fichero tar será dd-mm-yyyy.tar.gz. Crea también un archivo dd-mm-yyyy.lista, con los nombres de los directorios comprimidos. Si el fichero lista existiera, muestra el error y te sales.