====== Sistema de carpetas y archivos ====== ===== Combinaciones de teclas útiles ===== * **Cambiar áreas de trabajo**: ctrl + alt + flechas de dirección * **Cerrar ventana**: alt + F4 * **Menú de ventana**: alt + espacio * **Pasar de una ventana a otra**: alt + tabulador * **Abrir un terminal**: ctrl + alt + T ===== Archivos en linux ===== En linux "todo es un archivo". Esto quiere decir que para Linux todo flujo de información es identificado como un archivo, desde un documento de texto, a la información transmitida por periféricos o la contenida en unidades de almacenamiento de datos. Los archivos son identificados por el sistema operativo por un número identificativo denominado "inodo" (//Information Node//). Un mismo flujo de información puede guardarse con diferentes nombres, pero su inodo sería el mismo. Podemos listar los archivos del directorio donde nos encontremos con el comando **ls -il**: * **ls**: Lista los archivos y directorios contenidos en el directorio actual. * **-i**: Opción que añade los inodos a los elementos mostrados. * **-l**: Opción que añade toda la información disponible a los elementos mostrados (usuario, grupo, permisos, tamaño, fechay hora de creación). Delante de los permisos de los archivos aparece un carácter que indica el tipo de archivo: * **-**: Archivo normal. * **.**: Archivo oculto. * **d**: Directorio. * **b**: "Modo bloque", dispositivo de almacenamiento de datos (CD, DVD, discos duros). * **c**: "Modo carácter", son dispositivos periféricos de entrada/salida (ratón, puertos, etc). * **l**: "Enlace simbólico", puntero que apunta a otro fichero o carpeta al que está vinculado (tienen inodos diferentes). * **p**: "Tubería" (//pipe//), conexiones entre programas (por ejemplo, permiten usar la salida de un programa como entrada de otro). * **s**: //Socket//, conexiones de red. Al ser listados en un terminal, también podemos conocer el tipo de archivo en función del color en el que se representa: * Archivo normal: negro. * Ejecutable: verde. * Archivo de audio: cían resaltado. * Enlace simbólico: cían. * Vínculos perdidos: blanco o negro sobre fondo rojo. * Drivers de dipositivos: amarillo sobre fondo negro. * Archivo de imagen: magenta claro. * Archivo comprimido: rojo. * Directorio: azul. * Tubería: amarillo. Los archivos pueden ser de dos tipos en función de la capacidad de ser modificados: * **Estáticos**: Sólo pueden ser modificados por el administrador del sistema. * **Variables**: Archivos normales, modificables en función de sus permisos. Todos los archivos pueden compartirse, salvo los propios el sistema. ===== Árbol de directorios de Linux ===== En Linux los archivos se ubican en función de una estructura de archivos determinada por el proyecto FHS (//Filesystem Hierarchy Standard//), que por ser una guía voluntaria, es posible que existan pequeñas diferencias entre diferentes distribuciones. A continuación se listan los directorios de esta estructura: * **Raíz o /**: Directorio superior que contiene a todos los demás. Aquí se encuentran los recursos que permiten que el sistema funcione y se restaure, como por ejemplo: * Enlace al //Kernel// de linux: vmlinuz, ubicado en /boot. * Imagen inicial del sistema de archivos raíz: initrd.img, ubicado en /boot. * **/bin**: Aquí se guardan los archivos ejecutables (como los .exe de windows). En este directorio nunca hay subdirectorios. Junto al nombre de cada elemento podemos encontrarnos: * **@**: Indica que el elementos es un enlace simbólico. * *****: Indica que el elemento es un ejecutable. * **/boot**: Archivos necesarios para arrancar el sistema, por ejemplo la subcarpeta /grub con el archivo del menú de arranque grub.cfg. * **/dev**: Definiciones de los dispositivos (//device drivers//). Estos archivos se crean durante la instalación o con el script MAKEDEV, cuyo enlace simbólico también se encuentra en esta carpeta. Los dispositivos pueden ser de 2 tipos: * **De bloque**: almacenan datos y los transfieren en bloques (particiones, cdrom, etc). * **De carácter**: sólo transfieren datos (periféricos de entrada/salida, por ejemplo). * Como curiosidad, /dev/null es un agujero negro: archivo en el que podemos hacer desaparecer cualquier dato que le enviemos (eliminación de errores, salidas de pantalla de una orden, etc). * **/etc**: Archivos de configuración y arranque del sistema, de aplicaciones instaladas y los servicios de red. Se trata de archivos estáticos, nunca de ejecutables, ubicados en subdirectorios. También se encuentran aquí algunos archivos básicos del sistema, como los de usuario /etc/passwd, terminal /etc/bashrc, puntos de montaje y sistema de archivos /etc/fstab o la configuración de inicio /etc/inittab. * **/home** y **/root**: Carpeta de cada usuario, a la que sólo él tiene acceso, y carpeta del superusuario (root). Suele instalarse en una partición aparte para salvar la información en caso de que el sistema operativo se rompa. También podemos encontrar en ocasiones la carpeta /home/lost+found en donde se guarda la información perdida, por ejemplo en caso de apagado brusco e incorrecto. La carpeta oculta /home/.thumbnails guarda una pequeña copia de las imágenes visualizadas. * **/lib**: Bibliotecas compartidas utilizadas por los ejecutables del sistema y por los programas instalados. En la subcarpeta /lib/modules se encuentran los módulos del kernel que permiten el funcionamiento de elementos del hardware. * **/media**: En este directorio se montan los dispositivos de almacenamiento extraíbles. * **/mnt**: Directorio donde se montan temporalmente los sistemas de archivos externos. * **/opt**: Complementos de los programas instalados. Normalmente se instalan es sus propios subdirectorios, pero en algunos casos lo hacen aquí. * **/proc**: Sistema virtual de archivos (en memoria) mediante el cual el kernel se comunica con los usuarios e informa de los procesos que está desarrollando. Los nombres de los archivos son en realidad PID, es decir, números de procesos. La fecha y la hora hace referencia al inicio de sesión. * **/sbin**: Ejecutables necesarios para el funcionamiento del sistema, los que permiten su arranque y recuperación. Acceso restringido al administrador. Algunos son enlaces a binarios que se encuentran en /usr/bin o /usr/local/bin. * **/tmp**: Carpeta temporal de archivos. * **/usr**: Programas instalados por los usuarios y algunas aplicaciones propias del sistema. Contenido habitual: * **/usr/bin**: Ejecutables (o "binarios") que puede utilizar el usuario del sistema. Son más de 2000. * **/usr/games**: Juegos instalados. * **/usr/include**: //Headers// de los programas que pueden usar los usuarios. * **/usr/lib** y **/usr/lib64**: Bibliotecas compartidas de los programas instalados, los escritorios o los lenguajes de programación. * **/usr/local**: software que ha instalado el usuario. Estructura similar a /usr. * **/usr/bin**: Binarios no esenciales para el sistema, sólo ejecutables por el administrador. * **/usr/share**: Contiene subdirectorios con archivos de configuración estáticos que pueden ser compartidos por cualquier equipo con el mismo sistema operativo: documentos y manuales del sistema y de los programas instalados (/doc. /man), lista de palabras usadas por el sistema (/dict), mensajes de error de alguna aplicación concreta (/modconf), etc. * **/usr/src**: Código fuente del kernel. * **/var**: Archivos dinámicos que varían conforme se hace uso del sistema y que no se pueden compartir con otros equipos. Carpetas habituales que contiene: * **/var/cache**: Archivos con datos de aplicaciones en memoria caché. * **/var/lock**: Los archivos que se almacenan aquí están bloqueados por el sistema. * **/var/log**: Registros del sistema. Cuando ocupan mucho se comprimen en formato .gz. * **/var/mail/**: Buzones y mensajes de correo. * **/srv**: Archivos de datos de un servicio en particular. ===== Permisos de archivos y carpetas ===== Linux es un sistema completamente multiusuario, por lo que existen unas normas acerca de a qué archivos pueden acceder los usuarios, y qué pueden hacer con ellos. Cuando se crea un usuario, al mismo tiempo se crea un grupo con el mismo nombre del usuario, al que el usuario pertenece. El superusuario, o //root//, también tiene su propio grupo. Para gestionar los permisos de un archivo concreto, Linux distingue entre diferentes tipos de usuario: * **Propietario**: Usuario que creó el archivo o directorio. * **Grupo**: Grupo de usuarios al que pertenece el archivo. Se trata del grupo al que pertenece el usuario que lo creó. * **Resto de usuarios**: Usuarios que no pertenecen al grupo del archivo. Para cada tipo de usuario del archivo, se pueden definir varios tipos de permisos: * **Lectura**: Permite abrir el archivo, pero no realizar modificaciones. * **Escritura**: Permite modificar el archivo. * **Ejecución**: Si es un ejecutable, permite ejecutar el archivo. Si es un directorio, permite listar el contenido y modificarlo. Todos los archivos creados por un usuario, tienen como propietario al usuario que lo creó y pertenecen al grupo del usuario que lo creó, lo que permite compartir archivos de forma sencilla. El propietario del archivo es el único que puede modificar el propietario y grupo del archivo, así como los permisos de cada tipo de usuario. El superusuario root tiene acceso ilimitado a todos los elementos del sistema, por lo que puede modificar del propietario, grupo y permisos de cualquier archivo.