Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas

sábado, 13 de octubre de 2012

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í.

    jueves, 6 de septiembre de 2012

    Órdenes de propósito general en Linux - Iniciar y cerrar sesión

    Las órdenes que vamos a ver a continuación, nos serán de utilidad para iniciar y cerrar sesiones en un sistema Linux de diferentes maneras. login: utilizaremos esta orden para establecer una nueva sesión de trabajo con el sistema. passwd: Utilizamos esta orden para cambiar nuestra contraseña logout: Finalizamos sesión. exit: utilizaremos esta orden para finalizar una sesión de trabajo. ^d: Con Ctrl+d enviaremos una señal de exit al sistema y cerraremos sesión. startx: En caso de estar trabajando sin las X Windows, con esta orden iniciariamos estas. poweroff: orden para apagar. halt: orden para apagar. shutdown: orden para apagar. reboot: Con esta orden le diremos al sistema que se reinicie. Alt+Ctrl+Supr: Con esta combinación de teclas enviamos una orden reboot al sistema.

    domingo, 11 de marzo de 2012

    Como usar el comando find en GNU/Linux

    Usaremos el comando find para localizar ficheros por múltiples criterios: ◦ Por nombre o patrón. ◦ Por usuario y grupo. ◦ Por tipos de elementos ( fichero, directorio, socket, pipe...) ◦ Por medida. ◦ Por permisos asignados. ◦ Por fecha o cualquier otro atributo de tiempo. Con la siguiente orden buscamos un fichero, un conjunto o un patrón en el sistema de ficheros a partir de un punto de origen, en este caso en el directorio /boot:
    $ find /boot -name "*.img" -print
    
    Con la siguiente orden buscamos todos los ficheros que son hard links de un determinado fichero:
    $ find . -samefile dades.txt
    
    Con la siguiente orden buscamos todos los ficheros que son los enlaces simbólicos de un fichero dado.
    $ find . -lname dades.txt
    
    Con la siguiente orden buscamos ficheros de una medida concretos. (o entre uns valors)
    # find /boot -size +3M -print
    
    # find /boot/ -size +3M -size -5M -print
    
    Con la siguiente orden buscamos ficheros por usuario y grupo
    # find /dev -user vcsa -print
    
    Con la siguiente orden buscamos ficheros según los permisos que tiene asignados.
    # find /usr/bin -perm -u=s -print   # setuid activado
    
    # find /usr/bin -perm -gu=s -print  # setuid i setgid simultáneamente
    
    # find /usr/bin -perm /ug=s -print  # setuid o setgid o los dos
    
    # find /usr/bin -perm 4755 -print   # los permisos son exactamente 4755
    
    Con la siguiente orden buscamos todos los ficheros posteriores en una fecha determinada
    # find /boot -newermt "01/02/2010" -print # modificados posteriormente del 01-01-2010
    
    # find /boot -newermt "$(date -d "-1Year" +%m/%d/%Y)" -print # más recientes que hace un año
    
    Con la siguiente orden buscamos en un conjunto de directorios( listado de ordenes de 2 letras que comienzan por la letra 'a'.
    # find /sbin /usr/bin /usr/sbin -name a? -print
    
    Con la siguiente orden buscamos ficheros según el tipo de fichero que sea.
    # find /dev -type s -print # listado de los ficheros de tipo socket
    
    # find /tmp -empty -print # listado de los ficheros vacíos
    
    Espero les sea útil.

    viernes, 27 de mayo de 2011

    Hola mundo en C con Ubuntu

    Veremos cómo hacer nuestro primer programa en C, configurando su Makefile y utilizando Ubuntu.
    Con un fichero Makeefile tendremos una sencilla forma de organizar la compilación de nuestros ficheros. Lo haremos con un ejemplo sencillo.

    Lo primero que haré será crear un directorio que lo llamaremos Hola_Mundo dentro del directorio home, luego crearemos los siguientes tres ficheros en el directorio Hola_Mundo.
    hellomake.c, hellofunc.c y hellomake.h
    $ mkdir Hola_Mundo
    $ cd Hola_Mundo/
    $ touch holamake.c
    $ touch holafunc.c
    $ touch holamake.h
    
    Abriremos cada uno de los ficheros y escribiremos el siguiente código.

    holamake.c
    #include 
    
    int main() {
      // Llama a una función en otro fichero
      PrintHola();
    
      return(0);
    }
    

    holafunc.c
    #include 
    
    void PrintHola(void) {
    
      printf("Hola Mundo!!\n");
    
      return;
    }
    

    holamake.h
    /*
    incluimos un fichero
    */
    
    void myPrintHello(void);
    

    Para compilar este código, sólo tendremos que ejecutar la siguiente orden:
    gcc -o holamake holamake.c holafunc.c -I.
    
    Con este coman compilaremos los ficheros .c y crearemos un ejecutable que se llamará holamake. Con la opción -I decimos el directorio donde debe buscar gcc y con . decimos que en el directorio actual.

    Si nos fijamos, con este sistema de compilación, nos podemos encontrar problemas cuando el proyecto crezca, esta herramienta se nos quedará pequeña.

    Un primer paso para crear nuestro Makefile y hacer que sea más sencilla la compilación de nuestro proyecto.
    CC=gcc
    CFLAGS=-I.
    
    holamake: holamake.o holafunc.o 
      $(CC) -o holamake holamake.o holafunc.o  $(CFLAGS)
    
    Ahora cuando invoquemos la orden
    make holamake
    
    nos creará el ejecutable holamake según las reglas definidas en el fichero Makefile

    sólo nos quedará ejecutar
    ./holamake
    

    Por consola Nos mostrará

    Hola Mundo!!