Páginas

viernes, 12 de febrero de 2016

GNU/Linux: DIRECTORIOS de SISTEMA y sus SISTEMAS de FICHEROS




GNU/Linux: DIRECTORIOS de SISTEMA y sus SISTEMAS de FICHEROS


No suelo copiar y pegar articulos de otros blogs, pero he hecho una mezcla entre varios artículos que hablan sobre los directorios y sistemas de fichero en gnu linux:



"Al ejecutar $ ls / listamos el contenido del nodo raíz del sistema de ficheros. Aparecen directorios como:
/dev, /etc, /proc, /sys, /var, /tmp y otros."



  • / es el directorio raíz. De aquí cuelgan todos los directorios del sistema. Dentro del directorio raíz encontramos varios subdirectorios importantes:
    • /bin contiene ficheros de comandos ejecutables utilizables por todos los usuarios. Aquí tenemos los programas que pueden lanzar todos los usuarios del sistema.
    • /sbin es para ejecutables de uso exclusivo por el superusuario. Son los necesarios para arrancar y montar el directorio /usr.
    • /home es un directorio donde se encuentran los directorios personales de los usuarios del sistema.
    • /usr contiene utilidades y programas generales de usuario:
      • /usr/bin contiene programas de uso general.
      • /usr/share contiene archivos compartibles, independientes de la arquitectura.
        • /usr/share/doc contiene cierta documentación del sistema.
        • /usr/share/man contiene los manuales.
      • /usr/etc contiene archivos de configuración de uso global.
      • /usr/include contiene las cabeceras de C y C++.
      • /usr/lib contiene las bibliotecas de nuestros programas.
      • /usr/sbin contiene los programas de administración del sistema.
      • /usr/src contiene los códigos fuente de nuestros programas.
    • /dev contiene archivos especiales de bloques y caracteres asociados a dispositivos hardware. Aquí encontramos todos los dispositivos físicos del sistema (todo nuestro hardware).
    • /lib contiene librerías y compiladores del sistema. Contiene las bibliotecas necesarias para que se ejecuten los programas que tenemos en /bin y /sbin únicamente.
    • /proc contiene los archivos que reciben o envían información al núcleo. No deberíamos modificar el contenido de este directorio.
    • /etc contiene los ficheros de configuración y utilidades para la administración.
    • /var contiene ficheros para el administrador. Este directorio contiene información variable, como registros, datos de los servidores, etc.
    • /boot contiene los archivos de configuración del arranque del sistema, como por ejemplo GRUB.
    • /media contiene todas las unidades físicas que tenemos montadas: discos duros, unidades de DVD, pen drives, etc.
    • /opt sirve para admitir ficheros nuevos creados tras la modificación del sistema. Es un punto de montaje desde el que se instalan los paquetes de aplicación adicionales. Podemos usarla para instalar aplicaciones que no vienen en los repositorios, por ejemplo, aquellas que compilamos a mano.
    • /tmp es donde se almacenan los archivos temporales.
Además  hay 2 directorios especiales:
  • Directorio actual (.): es un directorio especial que hace referencia al directorio en el que estamos. Si referenciamos al directorio . nos estaremos refiriendo al directorio actual.
  • Directorio padre (..): es un directorio especial que hace referencia al directorio padre del directorio en el que estamos. Si referenciamos al directorio .. nos estaremos refiriendo al directorio padre del actual. El único directorio que no tiene directorio padre es el directorio raíz /.

AVERIGUAR QUÉ SISTEMAS DE FICHEROS ESTÁN MONTADOS


Dos comandos nos permiten examinar qué sistemas de ficheros y dónde están montados en nuestro sistema.

$ mount
ó 
$ cat /etc/mtab


Su respuesta será algo similar a ésto:
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
/sys on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,noexec,nosuid,nodev,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev on /dev type tmpfs (rw,mode=0755)
devshm on /dev/shm type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
lrm on /lib/modules/2.6.22-14-generic/volatile type tmpfs (rw)
securityfs on /sys/kernel/security type securityfs (rw)


Estamos específicamente interesados en estos directorios: /proc, /sys, /var/run, /var/lock, /dev, /dev/shm, /dev/pts, /sys/kernel/security




El directorio /proc


procfs es un sistema de ficheros virtual, creado dinámicamente en memoria. Está usualmente montado en /proc.

El sistema de ficheros proc nos proporciona una interfaz a las estructuras de datos internas del kernel. Así podemos obtener información acerca del sistema y cambiar algunos parámetros del kernel en tiempo de ejecución (sysctl).


Podemos acceder a éste sistema de ficheros en modo texto:

P.ej: $ cat /proc/meminfo # muestra como está distribuida la memoria.



El directorio /proc/sys nos permite cambiar parámetros del kernel.

P.ej: $ sudo echo "fooname" > /proc/sys/kernel/hostname # cambia hostname de nuestro sistema.


Cada proceso tiene un subdirectorio en el sistema de ficheros proc denominado por su PID.


MONTAR EL SISTEMA DE FICHEROS: proc

$ mount -t proc proc /mnt/proc # Este comando monta un sistema de ficheros proc en /mnt/proc.




El directorio /sys


sysfs es un sistema de ficheros almacenado en la RAM e inicialmente basdo en ramfs. Proporciona una manera de exportar estructuras de datos del kernel, sus atributos y la relaciones entre ellos a espacio de usuario.


MONTAR EL SISTEMA DE FICHEROS: sys

$ sudo mount -t sysfs sysfs /sys # El sistema de ficheros sys está siempre activo y con éste comando podemos acceder siempre a él.




Sistema de ficheros tmpfs


Básicamente, tmpfs es un sistema de ficheros que utiliza la memoria RAM (y el swap) como su dispositivo, pero que reserva la memoria dinámicamente, al contrario que en un ramdisk. Por éso únicamente emplea la RAM que necesita.

tmpfs es un sistema de ficheros, no un dispositivo de bloques; símplemente lo montas y está allí. No es necesario usar el comando mkfs.

Este sistema de ficheros es usado en varios archivos y dispositivos como /tmp, /dev/shm, etc.


MONTAR UN SISTEMA DE FICHEROS tmpfs

$ sudo mount -t tmpfs tmpfs /mnt/tmpfs

/mnt/tmpfs tendrá una capacidad inicial muy pequeña, pero conforme se copien y creen nuevos ficheros, el driver de tmpfs reservará más memoria virtual e incrementará dinámicamente la capacidad del sistema de ficheros. Por lo mismo, conforme se vayan borrando ficheros de /mnt/tmpfs, el driver del sistema de ficheros tmpfs dinámicamente disminuirá el tamaño del sistema de ficheros y liberará los recursos de memoria.

La velocidad es la gran ventaja de tmpfs. Como reside en la RAM, el acceso es casi instantáneo. El swap también tiene un rendimiento elevado.

tmpfs no se preserva entre reinicios del sistema porque la memoria RAM es volátil.


Para evitar consumir toda la memoria virtual podemos pasar la opción size a tmpfs:

$ sudo mount tmpfs /tmp -t tmpfs -o size=64m 
# Limita su tamaño a 64 megabytes. (muy interesante!!)


Más información en:

http://www.ibm.com/developerworks/library/l-fs3.html#2




El directorio /dev


En la filosofía Unix cada dispositivo tiene asociado un fichero.
El direcotrio /dev es el lugar donde los ficheros que representan dispositivos están almacenados.

http://en.wikipedia.org/wiki/Udev

udev es el controlador de dispositivos para la serie del kernel linux 2.6. Su función principal es manejar los nodos de dispositivos en /dev. Es el sucesor de devfs y hotplug, lo que significa que se encarga de actualizar el directorio /dev y llevar a cabo las acciones necesarias en espacio de usuario cuando se añaden o quitan dispositivos, incluyendo la carga de firmware.

$ sudo mount -t tmpfs udev /dev


El directorio /dev/pts


El sistema de ficheros devpts proporciona una interfaz para los pseudo dispositivos de terminal (pty). Habitualmente se montan en /dev/pts. Se crea dinámicamente un nuevo dispositivo cuando el dispositivo maestro multiplexador de pty, /dev/ptmx, se abre.

$ sudo mount -t devpts devpts /dev/pts


El directorio /dev/shm


Este dispositivo implementa la memoria compartida POSIX.

P.ej: La memoria compartida puede ser usada como una forma rápida de compartir datos entre programas.


$ sudo mount -t tmpfs shm /dev/shm


El directorio /tmp


Este directorio es donde los programas almacenan sus archivos temporales. No está garantizado que esos datos se preserven entre diferentes invocaciones al mismo programa.

/tmp debe ser borrado cada vez que el sistema se reinicia.

$ sudo mount -t tmpfs tmpfs /tmp

El sistema de ficheros securityfs


Este es un sistema de ficheros que utilizan los módulos del seguridad del kernel linux.
Está montado en /sys/kernel/security

$ sudo mount -t securityfs securityfs /sys/kernel/security


El directorio /var/run


Contiene información de sistema y se borra cada vez que el sistema se reinicia.

$ sudo mount -t tmpfs varrun /var/run


El directorio /var/lock

Los ficheros de bloqueo (lock files) deben ser colocados en este directorio.

$ sudo mount -t tmpfs varlock /var/lock

REFERENCIA


La documentación del kernel proporciona buena información sobre sistemas de ficheros.

Para leerla, ejecuta estos comandos:

$sudo aptitude install linux-doc-2.6.22
$zless /usr/share/doc/linux-doc-2.6.22/Documentation/filesystems/proc.txt.gz
$zless /usr/share/doc/linux-doc-2.6.22/Documentation/filesystems/sysfs.txt.gz
$zless /usr/share/doc/linux-doc-2.6.22/Documentation/filesystems/tmpfs.txt.gz

NOTA: Sustituye 2.26.22 por tu versión del kernel.


A continuacion teneis una lista con los directorios mas importantes del sistema y para que se usan. Para acceder a los mismos podeis usar el comando cd 'nombre del directorio'. Para ver el contenido de los mismos podeis usar el comando ls -l 'nombre del directorio'.
Directorio        Descripción
-----------------------------------------------------------------------------------------
/bin/  Comandos/programas binarios esenciales (cp, mv, ls, rm, etc.),
/boot/  Ficheros utilizados durante el arranque del sistema (núcleo y discos RAM)
/dev/  Dispositivos esenciales, discos duros, terminales, sonido,
  video, lectores dvd/cd, etc

/etc/  Ficheros de configuración utilizados en todo el sistema y que
  son específicos del ordenador

/etc/opt/ Ficheros de configuración utilizados por programas alojados dentro
  de /opt/

/etc/X11/ Ficheros de configuración para el sistema X Window (Opcional)
/etc/sgml/ Ficheros de configuración para SGML (Opcional)
/etc/xml/ Ficheros de configuración para XML (Opcional)

/home/  Directorios de inicios de los usuarios (Opcional)
/lib/  Bibliotecas compartidas esenciales para los binarios de /bin/, /sbin/ y
  el núcleo del sistema.

/mnt/  Sistemas de ficheros montados temporalmente.
/media/  Puntos de montaje para dispositivos de medios como unidades lectoras
  de discos compactos.

/opt/  Paquetes de aplicaciones estáticas.
/proc/  Sistema de ficheros virtual que documenta sucesos y estados del
  núcleo. Contiene principalmente ficheros de texto.

/root/  Directorio de inicio del usuario root (super-usuario) (Opcional)
/sbin/  Comandos/programas binarios de administración de sistema.
/tmp/  Ficheros temporales
/srv/  Datos específicos de sitio servidos por el sistema.
/usr/  Jerarquía secundaria para datos compartidos de solo lectura (Unix system
  resources). Este directorio puede ser compartido por
  múltiples ordenadores y no debe contener datos específicos del
  ordenador que los comparte.

/usr/bin/ Comandos/programas binarios.
/usr/include/ Ficheros de inclusión estándar (cabeceras de cabecera utilizados
  para desarrollo).

/usr/lib/ Bibliotecas compartidas.
/usr/share/ Datos compartidos independientes de la arquitectura del
  sistema. Imágenes, ficheros de texto, etc.

/usr/src/ Códigos fuente (Opcional)
/usr/X11R6/ Sistema X Window, versión 11, lanzamiento 6 (Opcional)
/usr/local/ Jerarquía terciaria para datos compartidos de solo lectura
  específicos del ordenador que los comparte.

/var/  Ficheros variables, como son logs, bases de datos, directorio raíz
  de servidores HTTP y FTP, colas de correo, ficheros temporales, etc.

/var/cache/ Cache da datos de aplicaciones.
/var/crash/ Depósito de información referente a caidas del sistema (Opcional)

/var/games/ Datos variables de aplicaciones para juegos (Opcional)
/var/lib/ Información de estado variable. Algunos servidores como MySQL y
  PostgreSQL almacenan sus bases de datos en directorios subordinados de éste.

/var/lock/ Ficheros de bloqueo.
/var/log/ Ficheros y directorios de registro del sistemas (logs).
/var/mail/ Buzones de correo de usuarios (Opcional)
/var/opt/ Datos variables de /opt/.
/var/spool/ Colas de datos de aplicaciones.
/var/tmp/ Ficheros temporales preservados entre reinicios.




Fuentes Originales:
http://claves-de-linux.blogspot.com.es/2012/05/linux-directorios-sistemas-de-ficheros.html
http://linuxclues.blogspot.com.es/2008/03/linux-system-directories-and-their.html
http://www.redesyseguridad.es/la-estructura-de-directorios-en-linux/
http://www.linux-es.org/node/112
http://mural.uv.es/oshuso/823_directorios_ms_importantes_en_linux.html