viernes, 17 de diciembre de 2010

Comparar cadenas de caracteres

#!/bin/bash

echo escribe una palabra
read PAL1
echo escribe otra palabra
read PAL2

if [ -z "$PAL1" ]; then  "la opción -z es para ver si hay valores nulos"
 echo no puede haber valores nulos
 exit
elif [ -z "$PAL2" ]; then "al poner la variable entre comillas dobles"" es para que tenga en cuenta espacios en blanco
 echo no puede haber valores nulos
 exit
fi

if [ "$PAL1" \> "$PAL2" ]  "para cualquier operación siempre anteponer el backslash "\" "
then
 echo la mayor es "$PAL1"
else
 echo la mayor es "$PAL2"
fi

jueves, 16 de diciembre de 2010

SQL ORACLE

para ver las tablas creadas:

select table_name
from user_tables;

ejemplo de ejercicio:

CREATE TABLE Psicologos( -------------------------> crea la tabla
NIF        Varchar2(10),            
-------------------------> atributo y tipo de datos
Nombre        Varchar2(15) NOT NULL,
Apellido1    Varchar2(15) NOT NULL,
Apellido2    Varchar2(15),
Especialidad    Varchar2(15) NOT NULL,
Direccion    Varchar2(50),
 Constraint PK_Psicologos PRIMARY KEY (NIF)
-------------------------> clave primaria
);

CREATE TABLE Pacientes(
NIF        Varchar2(10),
Nombre        Varchar2(15) NOT NULL,
Apellido1    Varchar2(15) NOT NULL,
Apellido2    Varchar2(15),
Fec_Nacim    Date NOT NULL,
Telefono    Varchar2(10),

 Constraint PK_Pacientes PRIMARY KEY (NIF),
 Constraint CH_fec_nacim CHECK (Fec_Nacim >= TO_DATE('01/01/1900','DD/MM/YYYY'))
);
-------------------------> check de restricciones y  ");" es para terminar

CREATE TABLE Transtornos (
Cod_Transtorno    Number(5),
Nombre        Varchar2(25) NOT NULL,
Sintomas    Varchar2(250) NOT NULL,
 Constraint PK_Transtornos PRIMARY KEY (Cod_Transtornos),
 Constraint CH_Cod_trans CHECK (Cod_Transtornos >=0)
);

CREATE TABLE Terapias (
Cod_Terapia     Number(5),
Nombre        Varchar2(25) NOT NULL,
Observaciones     Varchar2(250) NOT NULL,
 Constraint PK_Terapias PRIMARY KEY (Cod_Terapia),
 Constraint CH_Cod_terap CHECK (Cod_Terapia >=0)
);

CREATE TABLE Sesiones(
NIF_PS        Varchar2(10),
NIF_PA        Varchar2(10),
Cod_Transtorno    Number(5),
Cod_Terapia    Number(5),
Fecha        Date,
 Constraint PK_Sesiones PRIMARY KEY (NIF_PS,NIF_PA,Cod_Transtornos,Cod_Terapia,Fecha),
 Constraint CH_Fecha CHECK (Fecha >= TO DATE('01/01/1990','DD/MM/YYYY')),
 Constraint FK_ses_psi     FOREIGN KEY (NIF_PS)
            REFERENCES Psicologos (NIF)
            ON DELETE CASCADE,
 Constraint FK_ses_pa    FOREIGN KEY (NIF_PA)
            REFERENCES Pacientes (NIF)
            ON DELETE CASCADE,
 Constraint FK_ses_pa    FOREIGN KEY (NIF_PA)
            REFERENCES Pacientes (NIF)
            ON DELETE CASCADE,
);
----------------------------------- Inserción de datos ------------------------------------
INSERT
INTO Psicologos --------> en la tabla
VALUES ('PS123456','JUAN,'PÉREZ',GARCÍA','CLÍNICA','C/REAL'); ----> valores

INSERT
INTO Pacientes
VALUES ('PA123444','MARÍA','GARCÍA','LÓPEZ',TO_DATE('12/12/1980','DD/MM/YYYY'),'666666');

INSERT
INTO Transtornos
VALUES (100,'JORCH','SINTOMAS');

INSERT
INTO Terapias
VALUES (1,'PSICOANÁLISIS','OBSERVACIÓN');

INSERT
INTO Sesiones
VALUES('PS123456','PA123444',100,1,SYSDATE);

COMMIT; --------------------------------> es para validar los cambios

viernes, 26 de noviembre de 2010

Ejemplos Shell (linux)

.........................................inicio (test -L)...............................................
#!/bin/bash

if test -L $1; then #devuelve verdadero o falso, si test -L es verdadero entonces es un enlace simbolico
 echo $1 es un enlace simbolico
else
 echo $1 no es un enlace simbolico
fi
.................................................fin.........................................................

jueves, 25 de noviembre de 2010

ls -l (nombre) | cut -d " " -f1
wc -l ..... cuenta lineas
ps (procesos) -ef ... (unproceso?)
cut -d: -f2 .... -d es el delimitador y -f es la fila ... ejem: -f1-3 (del 1 al 3)

miércoles, 24 de noviembre de 2010

Opciṕn Test (Linux

test -f ( si es un fichero devuelve 0)
test -s (si el tamaño es mayor a 0 devuelve 0)
test -d (si es un directorio devuelve 0)
test -x (si tiene permiso de ejecución devuelve 0)

en lugar de test se pueden usar corchetes
---------------------------------------(en el fichero.sh)........................................................
[ -d /home ]
echo $?
.....................................................(fin)..............................................................
Evaluar cadenas de caracteres
...................................................(en el fichero.sh)............................................
#[ cadena1 = cadena2 ]
[ "$1" = "$2" ]
echo $?
[ "$1" != "$2" ]
echo $?
....................................................(fin)...............................................................

.................................................(en el fichero.sh).............................................

#Comparar numeros
# -eq (igual)
# -ne (distinto de)
# -lt (menor que)
# -gt (mayor que)
read N1
read N2

[ $N1 -eq $N2 ]
echo $?
[ $N1 -ne $N2 ]
echo $? 
[ $N1 -lt $N2 ]
echo $?
[ $N1 -gt $N2 ]
echo $?
....................................................(fin).............................................................................................................................(fichero.sh)..............................................
# usar el if
if [ -d $1 ]
# ve si existe el directorio
then ls -ld $1
elif [ -f $1 ]
# ve si es un fichero
then
cat $1
else
echo creo que no existe
fi
.............................................................(fin)............................................................

jueves, 18 de noviembre de 2010

Linux (shell)

Escribir comandos en un fichero de texto
Guardar el fichero
Dar permisos de ejecución (chmod +x nombrefichero)
Escibir en la consola ./nombrefichero
Argumentos de un Shell
Hay q crear un fichero con extensión “.sh”
$0 => Argumento/parámetro 0     (dólar cero es el Argumento del programa (donde está)) (imprime)
$# => guarda el número de argumentos que recibe el programa
$* => guarda la cadena de argumentos (excluyendo $0)
$? => guarda el código de retorno de la última orden ejecutada (0 si no hay error, distinto de 0 si lo hay)
Operadores:
+ sumar
-restar
*multiplicar
/dividir
% para el resto de la división
Ejemplo:
Read a b
C=`expr $a\*$b`
Echo $c
Alternativa:

En vez de usar "expr" se puede usar los operadores [corchetes]


Operadores relacionales

Sirve para empezar palabras argumentos, números...
Si el resultado de la comparación es cierto, devuelven 1,
Si es fichero, devuelven 0
=  (compara si son iguales)
!= (distinto)
> (mayor que)
< (menor que)
Hay que usarlos con \
\>    \<
>= (mayor o igual)  <=(menor o igual)


Operadores lógicos

Se usan para comparar 2 argumentos (arg1, arg2).  
devuelven un argumento o parte del otro






& -> Y arg1 & arg2


Si arg1 y arg2 son distintos de cero, el resultado es arg1, si no, el resultado es arg2
: (2 puntos)
argi : arg2
arg2 es el patrón buscado en arg1. Si el patrón arg 2 está encerrado entre paréntesis \( u \), el resultado es la parte de arg1 que coincide con arg2, si no, el resultado es el número de caracteres que cpinciden.
NOTA:  | y  ¬ deben ir precedidos de \ ... \|, \&


Ejemplo:
  a= junio_2001
  b=`expr $a :'\([a-z]*\)'`
  echo b
 

viernes, 12 de noviembre de 2010

ejemplo de recursividad en C++

#include
main()[
long int x,y;
printf("Escribe un numero\n");
scanf("%li",&x);
y=factorial (x);
printf("%li",y);
}
long int factorial(long int n){
if (n==1) return1;
else return n*factorial (n-1)
}

miércoles, 3 de noviembre de 2010

(linux)

Comando chfn:
permite cambiar la informacion del contacto del usuario


.
.
.

Fichero /etc/fstab: es para montar automaticamente

Este fichero contiene la informacion necesaria para automatizar el proceso de montaje de las particiones.
En general,se usa para dispositivos internos, CD/DVD, Comparticiones por red (NFS, Samba) y dispositivos extraibles

Si un dispositivo o particion no aparece en /etc/fstab, solo lo puede montar el root.

Campos:

 -Dispositivo (device)
 -Punto de montaje (mount point)
 -Sistema de ficheros (file system type)
 -Opciones
 -Dumb
 -Pass
 -Dispositivos: dispositivo o particion que queremos  montar.

 Dispositivos => /dev/sda1       (a,b,c, el dispositivo; 1,2,3 la particion; sd= SCSI)
                            /dev/sda2
                            /dev/sdb1
                            /dev/hda3
o identificados por el nombre UUID
sudo blkid => listar nombres UUID

para montar ... ejemplo:
cd media
sudo mkdir windows(ejemplo)
sudo mount -t ntfs /dev/sda1 wondows (puedes ver donde está el dispositivo con "blkid")
cd windows
ls (y ya está)
... para desmontar ... sudo umont windows
cd windws
ls (y ya no está)



Carpeta compartida vía NFS
IP_Servidor: ruta_local_directorio_compartido
172.16.205.87 : /home/carpeta_compartida

Carpeta compartida vía samba:
//servidor/Carpeta_compartida (*-IP ó Nombre Netbios)


Sistemas de ficheros:

sistemas de ficheros... que se va a montar

Ejemplos:
auto: determine automaticamente el sistema de ficheros
ntfs: ntfs-sg
        rw

Punto de montaje:

-ntfs para carpetas compartidas vía NFS (Network File System)

Opciones:
-defaults: rw, exec, nouser
                auto, async

-Sync /async: la entrada y la salida al sistema de ficheros debería ser sincrona/asincrona

- auto: el sistema de ficheros se puede montar automaticamente, al iniciar el sistema o con el comando mount -a ... -a = montar todo lo que esté especificado en el fichero /etc/fstb

-noauto: hay que montar explicitamente el sistema de ficheros

-exec/noexec: permitir/no permitir la ejecucion de binarios en el sistema de ficheros

-ro: solo lectura (read only)

-rw:lectura y escritura.

-user: permitir a cualquier usuario montar el sistema de ficheros. Implica noexec

-nouser: solo permite al montar el sistema de ficheros

Dump:

Sirve para indicar que se hagan copias de seguridad del sistema de ficheros.
El valor 0 es para que no se haga, 1 para que sí.

Pass:

Para indicar si hay que chequear que el sistema de ficheros (ejecutar el comando fsck)
Valores:

0 => no chequear

Comando usermod (linux)

Se usa para modificar algunas propiedades del los usuarios
Opciones:
  -g: para cambiar el grupo principal del usuario
  -G: para cambiar o especificar los grupos secundarios del usuario (si se escribe mas de un grupo se separan por comas)
  -e: YYY-MM-DD indica cuando expira la cuenta del usuario
 

viernes, 29 de octubre de 2010

Comando passwd

Sirve para cambiar la contraseña # passwd nombre_usuario (# = root)
                                                        & passwd (& = usuario)

Archivos (linux)

/etc/groups
Almacena información sobre los grupos del sistema

Campos:
               Están separados por los : puntos
1. Nombre del grupo
2. Contraseña del grupo
3. Nº identificador del grupo (GID)
4. Usuarios: los usuarios que pertenecen al grupo

Archivo /etc/shadow:

Almacena las contraseñas cifradas de los usuarios, los campos se separan por (:)

1. Nombre del usuario
2. Contraseña cifrada
3. Última actualización de la contraseña (en días desde el 1 de enero de 1970)
4. Días que deben pasar pueden ser cambiada
5. Días que han de pasar hasta que la contraseña deba ser cambiada
6. Días antes de caducar la contraseña en que se avisará al usuario
7. Días que pueden pasar después de que la contraseña caduque, antes de deshabilitar la cuenta.
8. Días que lleva caducada la cuenta
9. Campo reservado

Practica:
1. Crear un usuario con la opción -e el lunes y con la opción -f -1
2. Crear otro usiario con la opción -f 0 y -e mañana
3. Crear un tercer usuario con -f 3 y -e el miercoles
4. Visualizar el fichero /etc/shadow

jueves, 28 de octubre de 2010

Fichero /etc/passwd (linux)

1. Nombre del usuario
2. Contraseña (x) está cifrada
3. Número de identificación del usuario (UID) el 0 es el único reservado al root
4. Nº de identificación del grupo: un usuario puede pertenecer a varios grupos; el número que aparece es el del grupo principal o primario.
5. Comentario: comentarios sobre el usuario, como el nombre completo o información personal.
6. Directorio personal: ruta completa del directorio personal del usuario
7. Shell ruta completa de la shell que va a usar el usuario. (/etc/shell ... aparecen las shells disponibles)

(1.) root: (2.) x: (3.) 0: (4) 0: (5.) root: (6.) /root: (7.) /bin/bash

Se puede ver que hay varios usuarios aparte de root, y los usuarios normales, son cuentas del sistema. Algunas aplicaciones se ejecutan con estas cuentas (que tienen contraseña y no están hechas para iniciar sesión con ellas). Al no tener privilegios de root, se usan estqas cuentas para proteger al sistema.

Si se borran, puede que algunos programas no funcionan para borrar un usuario se puede boorar su línea del fichero /etc/passwd [comando para borrar usuarios "userdel"]

useradd:

opciones:
               -d => ruta del directorio directorio personal del usuario ...
useradd -d  /usuarios /fulanito curro
               -e => fecha en la que se deshabilita la cuenta, formato YYY-MM-DD
               -f número de días desde que la cuenta expira hasta que finalmente se deshabilita.
El valor 0 hace que se deshabilite tan pronto como la cuenta expira. El valor -1 deshabilita la actuación.
Si no se especifica, se usa el periodo que marca la variable INACTIVE del fichero /etc/default/useradd ó -1 por defecto
              
               -k => directorio que se copia en el directorio personal del usuario.
               -r => para crear una cuenta del sistema
               -M : sin directorio personal
               -g: especificar grupo

viernes, 22 de octubre de 2010

Permisos chmod (linux)

chmod... es para cambiar permisos a carpetas o archivos.

ejem:
directorio: drwxr-xr-x ........... Carpeta

chmod -r Carpeta = d-wx--x--x ............ Carpeta
chmod +r Carpeta = drwxr-xr-x ........... Carpeta
chmod u-r Carpeta = d-wxr-xr-x ............ Carpeta

u: es para el usuario
g: es para el grupo
o: es para otros
a: es para todos

se puede usar -R (recursividad) que es para dar o quitar un permiso a la carpeta y todo lo que hay dentro, pero solo funciona con w

-Crear el directorio d1 dentro de pruebas, dentro del directorio d1 crear los directorios d21, d22, y el fichero f1, dentro del directorio d21 crear los directorio 311 y 312  
 

-Quitar a d22 permiso de escritura
¿se puede entrar?
¿se puede listar el contenido?
¿se puede crear algo?


-Con un mismo comando, dar a d22 permiso de escritura sólo para el usuario y quitar el permiso de lectura

-Con un mismo comando dar permiso de lectura a d22 a tu usuario y al grupo y quitar el permiso de ejecución

-Hacer para f1 lo mismo que para d22 (abrirlo, cambiarlo, ejecutarlo) 

-Quitar recursivamente los permisos de lectura a d21 y comprobar los permisos de d311 y d312 
¿aparece algún mensaje?
¿puedes ver los permisos de d311 y d312?


-Haz los cambios necesarios (pero que no afecten a d311 y d312)
para ver los permisos de d311 y d312
¿se aplica recursivamente el cambio de permisos?


-Haz lo mismo para el permiso de ejecución y el de escritura

-Quita el permiso de escritura a d1 recursivamente para todos los usuarios y comprueba cómo afecta a f1, d22, d21, d311 y d312.
 

miércoles, 20 de octubre de 2010

Comandos linux para ficheros (cat, sort,touch)

touch: creas ficheros... ejem: touch maya
cat es para rellenar de datos un fichero... ejem: cat > maya
                                                                             cat maya ...( es para ver lo que hay)
sort: ordena los datos en un fichero... ejem: sort maya
         Opción -k ... es para elegir como oredenar los datos ... ejem: sort -k2 maya
                                                           -k2 --> ordenar por la segunda palabra
        Opción -t ... es para especificar el separador de campos ejem:
                           sort -t: -k6 /etc/passwd    ... :(es el separador)

Hacer uno:.... ordenado por : 
-tipo, 
-nombre de propietario, 
-tamaño del fichero, (-g ó -n)
-fecha de creación y 
-el sentido inverso (-r), 
-Hora de modificación, 
-Nombre del fichero, 
-numero de enlaces, 
-minuto de modificación.


miércoles, 13 de octubre de 2010

Copiar en linux

cp archivo(s) destino
cp a1 /home/Descargas/a2
- Si no especifico nombre de archivo en el destino, usa el nombre del archivo origen
- Si existía un archivo en el destino con el nombre con que queremos copiar, lo sobreescribe


1.En el directorio pruebas crea el directorio xacopiar
2.Ejecutar $ echo hola >xacopiar
3.Desde pruebas crear un subdirectorio de nombre pruebas1 en el directorio padre de pruebas, usando direccionamiento relativo.
4.Copiar xacopiar y xacopiar1 en el subdirectorio creado anteriormente usando la ruta absoluta y la relativa, ( puedes usar pwd para saber donde estás)
5.En pruebas ejecuta: $echo adios >> xacopiar
6.Comprueba el contenido de la copia de xacopiar en pruebas1, copia xacopiar de pruebas a pruebas1 con el mismo nombre y comprueba el contenido de la copia

Touch [Opción] fichero (Linux)

Touch : Es para cambiar la fecha de modicación del fichero

Notación (BNF)... lo que aparece entre corchetes es opcional

- t STAMP [[CC]YY]MMDDhhmm[.SS]
Ejemplo:
   touch -t 1512030632 fichero

--date = cadena de texto con la fecha/hora
-d = ""

Ejemplo -d = "Sun 24 Feb"
              --date = "tomorrow"

Opción -l de ls (linux)

drwxr-xr-x  2  usuario04  usuario04  48  2010-09-28  12:50  Descargas
d => "-" = fichero normal, "d" = directorio, "l" = enlace simbólico.
2 => Nº de enlaces.
usuario04 => propietario
usuario04 => Grupo del propietario
48 => Tamaño en Bytes
2010-09-28 12:50 => Última modificación
Descargas => Nombre Archivos 

viernes, 8 de octubre de 2010

Pasos para Compartir/ Acceder a un directorio (linux)

1. Instalar el programa nfs-kernel-server   formas de instalarlo:
   a.Usando Synaptic
   b.escribiendo apt-get install nfs-kernel-server (como root)
   c.Escribiendo aptitude install nfs-kernel-server (como root)

2. Instalar nfs-commons (es necesario para compartir y acceder)
   formas de instalarlo
   a. usando el synaptic
   b. Escribiendo apt-get install nfs-commons (como root)
   c. escribiendo aptitude install nfs-commons (como root)

3. Instalar portmap
   formas de instalarlo:
   a. usando el synaptic
   b. Escribiendo apt-get install portmap (como root)
   c. escribiendo aptitude install portmap (como root)

4. Es conveniente asegurarse de que portmap no apunta al bucle local (interfaz lo). ejecutar

dpkg-reconfigure portmap
y seleccionar no (para que no apunte al bucle local)

5. Para especificar que directorio se comparte, editar el fichero
                   /etc/exports (gedit etc/exports &)
    y añadir una línea con la ruta completa al directorio que quiero compartir
                  (ejem: /home/usuario/compartido)
                  --- para más seguridad puedes editar los ficheros /etc/hosts.deny
                      y /etc/hosts.allow---
     * Puedo escribir la IP de un equipo o su nombre
     * Puedo especificar un rango de IPs (ejemplo 172.16.205.30/16)
     * Se puede usar el * como comodin, pero tener cuidado porque no incluye el             .(*.dominio.es incluiria equipo.dominio.es pero no
       equipo.subdominio.dominio.es)

 -Opciones de seguridad:

    * Acceso de lectura y escritura (rw) o sólo lectura (ro)
    * Permisos para el usuario que conecta
         >all_squash: todos los usuarios son invitados
         >root_squash: hace que cuando un usuario se conecta como root, sea
           invitado
         >no_root squash: hace que cuando un usuario se conecta como root, 
           mantenga sus privilegios de root



- Modo síncrono o asíncrono:
     * Sync: para indicar que la conexión es síncrona (Según la hora)
     * Async: para indicar que la conexión es asíncrona

Ejemplos:



/home/ramon/compartido 172.16.200.103 (rw,all_squash,sync)





el usuario que comparte, comparte el directorio "compartido" dentro de su carpeta personal (el usuario se llama "ramon") que esta dentro del subdirectorio "/home"

comparte sólo con el equipo 172.16.200.103 al que le da permisos de lectura y escritura, todos son invitados y la conexión es síncrona



mount - t nfs IP:RUTAyDIRECTORIO DIRECTORIO LOCAL
           -t = para especificar el tipo de fichero, en este caso es nfs (para cdrom es
                  iso 9600)

simple tracker
Flowers Roses