sábado, 27 de octubre de 2012

Qué es umask?

Umask La máscara de usuario (umask) se utiliza para determinar los permisos de archivo para los archivos recién creados. Se puede utilizar para controlar los permisos de los nuevos archivos de forma predeterminada. Como parámetro umask recibe un número de cuatro dígitos octales. Configurando umask Podemos configurar el valor de umask para el propio usuario en /etc/.bashrc o /etc/profile para todos los usuarios. Por defecto, la mayoría de distribuciones Linux tienen establecido umask en 0022 (022) o 0002 (002).
$ echo "umask 022" >> ~/.bashrc
Los cambios tendrán efecto después de reiniciar sesión. El umask por defecto 0002 se utiliza para los usuarios normales. Con esta máscara, los permisos predeterminados de directorio son 775, y los permisos de archivo son 664. El umask por defecto para el usuario root es 0022, y como resultado, los permisos predeterminados de directorio son 755, y los permisos de archivo son 644. Para los directorios, los permisos de base es 0777 (rwxrwxrwx) y para los archivos son 0666 (rw-rw-rw). Para calcular los permisos de directorio para un valor umask de 022 (usuario root) haremos lo siguiente:

777-022 = 755
Para calcular los permisos de archivo para un valor umask de 022 (usuario root) haremos lo siguiente: 666-022 = 644
En el ejemplo siguiente veremos los pasos necesarios para establecer un valor umask que nos hará que los valores de los permisos para los directorios 700 y 600 para los archivos de usuario. De esta manera sólo el usuario podrá leer o escribir el archivo, o acceder a los contenidos del directorio.
$ umask 077
$ touch archivo.txt
$ mkdir directorio
$ ls -ld archivo.txt directorio
Salida:
drwx------ 2 vill vill 4096 2012-10-27 02:21 directorio
-rw------- 1 vill vill    0 2012-10-27 02:21 archivo.txt

sábado, 13 de octubre de 2012

Script bash - validar dni

Aquí tenéis un pequeño script en bash, para validar si un DNI es correcto o no.
#!/bin/bash

cadena="TRWAGMYFPDXBNJZSQVHLCKET";

longitud=${#1}
if [ "$longitud" -eq 9 ]
then
 posicion=`expr ${1:0:8} % 23`
 letra=${cadena:posicion:1}
 letradaentrada=`echo ${1:8} | tr [a-z] [A-Z]`

 if [ $letra == $letradaentrada ]
 then 
  echo "número DNI correcto"
  exit 0
 else 
  echo "letra inválida"
  exit 1
 fi
else
 echo "Longitud errónea"
 exit 1
fi

exit 0
Ejecutamos d la siguiente manera.
# bash dni.sh 41033454s
letra inválida

Inodo - Enlaces simbólicos y enlaces duros

El inodo (nodo índice) en el sistema de archivos de Linux, es el identificador único para cada objeto en el sistema de archivos. Para todos y cada uno de los archivos en Linux encontraremos los siguientes atributos:

  • Tipo de archivo (ejecutable, bloque especial, etc) 
  • Permisos (leer, escribir, etc) 
  • Propietario 
  • Grupo 
  • Tamaño del Archivo 
  • Acceso al archivo, el cambio y hora de modificación (recuerdar que Linux no almacena el momento de creación)
  • Número de enlaces (soft / hard) 
  • Lista de Control de Acceso (ACL)  


Toda esta información es la que se almacena en un inodo. Cada inodo está identificado por un número único dentro del sistema de archivos. definición de inodo Un inodo es una estructura de datos en un sistema de archivos al estilo Unix, como UFS o ext3. El inodo almacena información básica sobre un archivo regular, directorio, o cualquier otro objeto del sistema de archivos. ¿Cómo podemos ver el número de inodo de un archivo? Puede utilizar el comando ls-i para ver el número de inodo de archivo
$ ls -i /etc/passwd
32820 /etc/passwd
También podemos utilizar el comando stat para averiguar el número de inodo y sus atributos:
$ stat /etc/passwd

Archivo: `/ etc / passwd '
Tamaño: 1988 Blocks: 8 IO Block: 4096 archivo normal
Dispositivo: Inode 341h/833d: 32820 Enlaces: 1
Acceso: (0644/-rw-r--r--) Uid: (0 / root) gid: (0 / root)
Acceso: 2005-11-10 01:26:01.000000000 0530
Modificar: 2005-10-27 13:26:56.000000000 0530
Cambio: 2005-10-27 13:26:56.000000000 0530
Inodo aplicación Muchos de comandos a menudo dan números de inodo para designar un archivo. Vamos a ver.
 
$ ls -li /etc/passwd
12886034 -rw-r--r-- 1 root root 1903 sep 28 13:01 /etc/passwd
Si escribimos los siguientes comandos:
$ cd / tmp
$ touch \ "la *
$ ls -l
Ahora si ententamos eliminar el archivo "la *, veremos que no es posible. No podremos eliminar los archivos si los hemos creado con caracteres de control o un carácter especial como?, * ^ Etc. En estos casos tendremos usar el número de inodo para eliminar archivos.
# ls -i 
# ls -i *
2781528 index.php    2781559 ??!
# find . -inum 2781559 -exec rm -i {} \;
Enlaces duros y simbólicos Para crear un enlace duro utilizamos el comando ln de la siguiente forma:
# ln /root/file1 root/file2 /
# ls -l
Con los comandos anteriores creamos un enlace al file1. Con esto creamos un nuevo apuntador hacia el inodo donde se almacenaba la información de file1 Los enlaces simbólicos se refieren a:
  • Una ruta simbólico que indica la ubicación de otro archivo.
  • Los enlaces físicos se refieren a:
  • La ubicación específica de los datos físicos.
  • Enlaces fijos vs Soft enlace en Linux
  • Los enlaces duros no pueden enlazar directorios.
  • Los enlaces blandos o simbólicos son como enlaces duros. Se permite asociar varios nombres hacia un solo archivo.
  • Sin embargo, los enlaces simbólicos nos permiten:
  • Crear enlaces entre los directorios.
  • Estos enlaces se comportan de forma diferente cuando la fuente del enlace está eliminado.
  • Los enlaces simbólicos no se actualizan.
  • Los enlaces duros siempre hacen referencia a la fuente, incluso si se mueven o eliminan.
  • ¿Cómo creamos un enlace simbólico? Podemos crear un enlace simbólico con el comando ln:
    $ ln -s /home/user/file1.txt /home/user/file2.txt
    $ ls -ali
    
    Con el comando anterior crearemos un enlace simbólico a file1.txt. Tarea: creación de enlaces simbólicos y eliminación Vamos a crear un directorio llamado foo, escribimos:
    $ mkdir foo
    $ cd foo
    
    Copiamos el archivo /etc/resolv.conf:
    $ cp /etc/resolv.conf .
    
    Observar el número de inodo y escribir:
    $ ls -ali
    
    152 Total
    1048600 drwxr-xr-x 2 vivek vivek 09/12/2008 20:19 4096.
    1015809 drwxrwxrwt root root 220 143 360 12.09.2008 20:19 ..
    1048601-rwxr-xr-x 1 vivek vivek 09/12/2008 20:19 129 resolv.conf
    Ahora crear enlace simbólico al resolv.conf, introduzca:
    $ ln -s alink.conf resolv.conf
    $ ls -ali
    
    152 Total
    1048600 drwxr-xr-x 2 vivek vivek 09/12/2008 20:24 4096.
    1015809 drwxrwxrwt root root 220 143 360 12.09.2008 20:19 ..
    1048602 lrwxrwxrwx 1 vivek vivek 09/12/2008 20:24 11 alink.conf -> resolv.conf
    1048601-rwxr-xr-x 1 vivek vivek 09/12/2008 20:19 129 resolv.conf
    
    El contador de referencias del directorio no ha cambiado (total 152). Nuestra simbólico enlace se almacena en un inodo diferente que el archivo de texto (1048602). La información almacenada en resolv.conf es accesible a través del archivo de alink.conf. Si borramos el archivo de texto resolv.conf, alink.conf se convierte en un vínculo roto y nuestros datos se pierden:
    $ rm resolv.conf
    $ ls -ali
    
    Si alink.conf era un vínculo físico, los datos todavía serían accesibles a través de alink.conf. Además, si se elimina el enlace simbólico en sí, los datos todavía estarían allí.