Dispositivos, sistemas de ficheros y FHS
LPI 104.1 Crear particiones/FSLPI 104.2 Integridad de FSLPI 104.3 MontajeLPI 104.5 Permisos y propietarioLPI 104.6 EnlacesLPI 104.7 FHS
Con este módulo se cierra el Bloque 1 (examen 101-500). Es el tema que más conecta con el módulo 00: ahora vas a entender a fondo cada pieza del esquema de disco que creaste entonces, y vas a poder crear, revisar, montar y organizar sistemas de ficheros por tu cuenta, sin depender del instalador.
- Crear particiones con
fdisk/partedy sistemas de ficheros conmkfs. - Comprobar y reparar la integridad de un sistema de ficheros con
fsck. - Montar y desmontar sistemas de ficheros, a mano y de forma persistente con
/etc/fstab. - Gestionar permisos, propietario y los bits especiales SUID/SGID/sticky.
- Crear y diferenciar enlaces duros de enlaces simbólicos.
- Moverte por el estándar FHS y saber dónde debe vivir cada tipo de fichero.
1. LPI 104.1 — Crear particiones y sistemas de ficheros
1.1 Herramientas de particionado
| Comando | Estilo | Qué hace |
|---|---|---|
fdisk -l | Interactivo, por menú de letras | Lista y edita tablas de particiones MBR (y GPT desde versiones recientes) |
gdisk | Interactivo, igual que fdisk pero pensado para GPT | Edita tablas GPT con el mismo estilo de menú que fdisk |
parted | Interactivo o por línea de comandos | Entiende MBR y GPT, y puede redimensionar particiones existentes |
cfdisk | Interfaz de texto con menús (ncurses) | Lo mismo que fdisk, más visual — habitual recomendación para quien empieza |
$ fdisk -l /dev/sdb
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Disklabel type: dos
Device Boot Start End Sectors Size Id Type$ fdisk /dev/sdb
Welcome to fdisk (util-linux 2.38.1).
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): +5G
Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): w
The partition table has been altered.fdisk, los comandos de una letra más repetidos en el examen son: n (nueva partición), d (borrar), p (imprimir tabla), t (cambiar el tipo de partición), w (escribir cambios y salir) y q (salir sin escribir nada — tu red de seguridad si te equivocas).1.2 Crear el sistema de ficheros
Crear la partición no basta — hay que darle un formato con mkfs antes de poder montarla:
| Comando | Sistema de ficheros |
|---|---|
mkfs.ext4 /dev/sdb1 | ext4 — el más común en Debian/Ubuntu, con journaling |
mkfs.xfs /dev/sdb1 | XFS — por defecto en RHEL/CentOS/Fedora, muy sólido con ficheros grandes |
mkfs.vfat -F32 /dev/sdb1 | FAT32 — para compatibilidad con Windows/dispositivos extraíbles |
mkswap /dev/sdb2 | Prepara una partición como espacio de intercambio (no es un "sistema de ficheros" al uso) |
$ mkfs.ext4 /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 1310720 4k blocks and 327680 inodes
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done| Sistema de ficheros | Cuándo elegirlo |
|---|---|
| ext2 | Sin journaling — prácticamente en desuso salvo en memorias USB de muy poca escritura |
| ext3 | ext2 + journaling — predecesor directo de ext4, raro verlo en instalaciones nuevas |
| ext4 | Estándar actual en Debian/Ubuntu: journaling, buen rendimiento, muy probado |
| XFS | Estándar en RHEL/Fedora: excelente con ficheros muy grandes y alta concurrencia |
| Btrfs | Snapshots nativos, subvolúmenes, checksums — más moderno, awareness para el examen |
| VFAT/FAT32 | Sin permisos Unix ni journaling — solo para intercambiar con Windows/dispositivos embebidos |
| swap | No almacena ficheros: es memoria de intercambio en disco |
Practica más — labs ya publicados en Ghost Academy sobre este tema: 💾 GParted (lab)
2. LPI 104.2 — Mantener la integridad de los sistemas de ficheros
Un sistema de ficheros con journaling (ext4, XFS) registra primero la intención de un cambio antes de aplicarlo, para poder recuperarse de un corte de luz o un cuelgue sin perder la estructura — pero igualmente conviene saber comprobar y reparar a mano.
$ fsck /dev/sdb1
fsck from util-linux 2.38.1
e2fsck 1.47.0 (5-Feb-2023)
/dev/sdb1: clean, 11/327680 files, 45210/1310720 blocks$ fsck -f /dev/sdb1
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 11/327680 files (0.0% non-contiguous), 45210/1310720 blocksfsck sobre un sistema de ficheros montado y en uso — puede corromperlo todavía más. Dos formas seguras: desmóntalo primero (sección 3), o fuerza la comprobación en el próximo arranque con shutdown -Fr now / tune2fs -c 1 /dev/sdb1, antes de que el sistema lo monte.| Comando | Qué hace |
|---|---|
fsck / e2fsck | Comprueba (y con -y repara automáticamente) un sistema ext2/3/4 |
xfs_repair | Equivalente de fsck para XFS — no se usa fsck.xfs para reparar de verdad, solo como comprobación superficial |
tune2fs -l /dev/sdb1 | Muestra los parámetros del sistema de ficheros ext (UUID, etiqueta, última comprobación...) |
tune2fs -L etiqueta /dev/sdb1 | Cambia la etiqueta del sistema de ficheros |
badblocks /dev/sdb1 | Escanea el disco en busca de sectores defectuosos |
df -h | Espacio usado/libre por sistema de ficheros montado |
du -sh directorio | Espacio ocupado por un directorio concreto, en total |
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/lpic1--lab--vg-root 18G 3.2G 14G 19% /
/dev/sda1 974M 156M 751M 18% /boot$ du -sh /var/log
214M /var/log$ tune2fs -l /dev/sdb1 | grep -i 'mount count\|check'
Maximum mount count: -1
Next check after: Tue Mar 24 10:02:11 2026Practica más — labs ya publicados en Ghost Academy sobre este tema: 🔄 TestDisk: recuperación de particiones (lab)
3. LPI 104.3 — Controlar el montaje y desmontaje
3.1 Montar y desmontar a mano
$ mount /dev/sdb1 /mnt/datos$ mount | grep sdb1
/dev/sdb1 on /mnt/datos type ext4 (rw,relatime)$ umount /mnt/datos$ umount /mnt/datos
umount: /mnt/datos: target is busy.fuser -m /mnt/datos o lsof +D /mnt/datos te dicen exactamente quién, antes de recurrir a umount -l (desmontaje "perezoso", se completa en cuanto el proceso suelte el fichero).3.2 Montaje persistente: /etc/fstab
$ cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=8f3e2c1a-... / ext4 errors=remount-ro 0 1
UUID=1a2b3c4d-... /boot ext4 defaults 0 2
/dev/mapper/lpic1--lab--vg-swap_1 none swap sw 0 0
UUID=9988aabb-... /mnt/datos ext4 defaults,noauto,user 0 2Seis campos, de izquierda a derecha, y el examen pregunta por los seis:
| # | Campo | Contenido |
|---|---|---|
| 1 | Dispositivo | Identifica la partición — por UUID= (recomendado, no cambia aunque cambies de puerto SATA), por etiqueta LABEL=, o por ruta de dispositivo /dev/sdb1 (desaconsejado, puede cambiar de nombre) |
| 2 | Punto de montaje | Directorio donde aparece el contenido — none para swap |
| 3 | Tipo | ext4, xfs, swap, vfat... |
| 4 | Opciones | Ver tabla siguiente |
| 5 | Dump | 1 = la utilidad legada dump respalda este sistema de ficheros, 0 = no (casi siempre 0 hoy en día) |
| 6 | Pass | Orden de comprobación de fsck en el arranque: 0 = nunca, 1 = primero (solo la raíz), 2 = después |
| Opción | Efecto |
|---|---|
defaults | rw, suid, dev, exec, auto, nouser, async — el conjunto "normal" |
noauto | No se monta automáticamente al arrancar — solo cuando alguien lo pide explícitamente |
user | Un usuario normal (no solo root) puede montarlo |
ro / rw | Solo lectura / lectura-escritura |
noexec | Prohíbe ejecutar binarios desde ahí — típico en /tmp o un punto de montaje de datos de usuario |
nosuid | Ignora los bits SUID/SGID de los binarios que contenga (sección 4) |
nodev | Ignora ficheros de dispositivo especiales dentro de ese sistema de ficheros |
$ mount -a
# monta todo lo que esta en fstab y no esta ya montado, sin reiniciarmount -a es la forma estándar de probar que un /etc/fstab recién editado no tiene errores, sin arriesgarte a reiniciar y descubrir que el sistema no arranca por una línea mal escrita.3.3 Identificar sistemas de ficheros y particiones
$ blkid
/dev/sda1: UUID="1a2b3c4d-..." TYPE="ext4" PARTUUID="..."
/dev/sdb1: UUID="9988aabb-..." TYPE="ext4" PARTUUID="..."
/dev/mapper/lpic1--lab--vg-root: UUID="8f3e2c1a-..." TYPE="ext4"$ lsblk -f
NAME FSTYPE FSVER LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 1a2b3c4d-... /boot
└─sda2
├─lpic1--lab--vg-root ext4 8f3e2c1a-... /
└─lpic1--lab--vg-swap_1 swap aabbccdd-... [SWAP]3.4 Activar/desactivar swap
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/mapper/lpic1--lab--vg-swap_1 partition 1G 0B -2$ swapoff /dev/mapper/lpic1--lab--vg-swap_1$ swapon /dev/mapper/lpic1--lab--vg-swap_1quota, edquota, repquota, quotacheck) para limitar el espacio que puede usar cada usuario. La versión actual del examen ya no lo pregunta como objetivo propio, pero si lo ves mencionado en documentación de administración de sistemas, ahora sabes de qué se trata.Practica más — labs ya publicados en Ghost Academy sobre este tema: 💿 Montaje de sistemas de archivos (lab)
4. LPI 104.5 — Gestionar permisos de fichero y propietario
4.1 El modelo de permisos Unix
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1203 sep 30 10:02 /etc/shadowDiez caracteres: el primero es el tipo (- fichero normal, d directorio, l enlace simbólico), y los nueve siguientes son tres grupos de rwx — propietario, grupo, resto del mundo.
| Permiso | Sobre un fichero | Sobre un directorio |
|---|---|---|
r (4) | Leer el contenido | Listar lo que contiene |
w (2) | Modificar el contenido | Crear/borrar ficheros dentro |
x (1) | Ejecutarlo como programa/script | Entrar en él (cd) y acceder a lo que contiene |
4.2 chmod: simbólico y octal
$ chmod u+x script.sh$ chmod g-w,o-rwx fichero.txt$ chmod 750 script.sh$ ls -l script.sh
-rwxr-x--- 1 jose jose 320 sep 30 10:02 script.sh750 = rwxr-x---: propietario lee/escribe/ejecuta (4+2+1=7), grupo solo lee/ejecuta (4+1=5), el resto nada (0). El examen espera que calcules estos valores de memoria en segundos, en ambos sentidos.4.3 chown y chgrp: cambiar propietario
$ chown maria fichero.txt$ chown maria:desarrollo fichero.txt$ chgrp desarrollo fichero.txt$ chown -R maria:desarrollo /srv/proyecto/4.4 Bits especiales: SUID, SGID y sticky bit
| Bit | Valor octal | Sobre un fichero ejecutable | Sobre un directorio |
|---|---|---|---|
| SUID | 4000 | Se ejecuta con los permisos del propietario del fichero, no de quien lo lanza | No tiene efecto |
| SGID | 2000 | Se ejecuta con los permisos del grupo del fichero | Los ficheros nuevos creados dentro heredan el grupo del directorio, no el grupo del usuario que los crea |
| Sticky bit | 1000 | Sin efecto práctico hoy en binarios | Solo el propietario de un fichero (o root) puede borrarlo dentro de ese directorio, aunque otros tengan permiso de escritura |
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 /usr/bin/passwds en vez de x en los permisos de propietario de /usr/bin/passwd es el ejemplo clásico de SUID: cualquier usuario puede ejecutar passwd para cambiar su propia contraseña, y aunque lo lanza un usuario normal, el programa corre como root — necesario para poder escribir en /etc/shadow, que viste en el punto 4.1 que ni siquiera el propio usuario puede leer directamente.$ ls -ld /tmp
drwxrwxrwt 12 root root 4096 sep 30 10:02 /tmpEsa t al final es el sticky bit de /tmp: todo el mundo puede escribir ahí (rwxrwxrwx), pero nadie puede borrar los ficheros de otro usuario — justo lo que hace falta en un directorio compartido por todo el sistema.
$ chmod 4755 /usr/local/bin/miprograma$ chmod g+s /srv/proyecto_compartido/4.5 umask: los permisos por defecto
$ umask
0022Los permisos de un fichero/directorio recién creado no empiezan en 777/666 y luego se restan según umask: un fichero nuevo parte de 666 (nunca ejecutable por defecto) y un directorio de 777, y a eso se le resta la máscara. Con umask 0022: 666 - 022 = 644 para ficheros nuevos, 777 - 022 = 755 para directorios nuevos.
$ umask 0274.6 Más allá de rwx: listas de control de acceso (ACL)
El modelo de tres grupos (propietario/grupo/resto) no permite dar permisos a un segundo usuario concreto sin tocar el grupo. Para eso existen las ACL:
$ setfacl -m u:pedro:rw fichero.txt$ getfacl fichero.txt
# file: fichero.txt
# owner: maria
# group: desarrollo
user::rw-
user:pedro:rw-
group::r--
mask::rw-
other::---ls -l muestra un + al final de los permisos (-rw-rw----+) como pista de que hay reglas adicionales que getfacl puede mostrarte completas.Practica más — labs ya publicados en Ghost Academy sobre este tema: 🔑 Usuarios & permisos (lab)
Simulador visual — laboratorio interactivo de Ghost Academy: 🔑 Matriz de Permisos Linux: chmod/chown/ACLs
5. LPI 104.6 — Crear y cambiar enlaces duros y simbólicos
Enlace duro (ln) | Enlace simbólico (ln -s) | |
|---|---|---|
| Qué es | Otra entrada de directorio que apunta al mismo inodo | Un fichero nuevo e independiente que contiene una ruta como texto |
| ¿Cruza sistemas de ficheros? | No — el inodo solo existe en su propio sistema de ficheros | Sí, sin problema |
| ¿Enlaza directorios? | No (con muy raras excepciones internas del sistema) | Sí |
| Si borras el original | El contenido sigue accesible por el enlace — el inodo no se libera hasta que el último enlace desaparece | El enlace queda roto ("colgante"), apunta a nada |
¿Se nota a simple vista con ls -l? | No tiene marca especial, pero ls -l muestra un contador de enlaces >1 | Empieza por l y muestra enlace -> destino |
$ echo 'contenido original' > original.txt$ ln original.txt duro.txt$ ln -s original.txt simbolico.txt$ ls -li original.txt duro.txt simbolico.txt
1234567 -rw-r--r-- 2 jose jose 20 sep 30 10:02 duro.txt
1234567 -rw-r--r-- 2 jose jose 20 sep 30 10:02 original.txt
1234999 lrwxrwxrwx 1 jose jose 12 sep 30 10:02 simbolico.txt -> original.txtls -li: duro.txt y original.txt comparten el mismo número de inodo (1234567) — son literalmente el mismo fichero con dos nombres. simbolico.txt tiene su propio inodo distinto (1234999), porque es un fichero aparte cuyo contenido es la ruta original.txt.$ rm original.txt$ cat duro.txt
contenido original$ cat simbolico.txt
cat: simbolico.txt: No such file or directoryAhí está la diferencia en la práctica: borrar el fichero original no afecta al enlace duro (el contenido sigue vivo mientras quede al menos un enlace), pero deja el enlace simbólico apuntando a nada.
6. LPI 104.7 — Encontrar ficheros del sistema y FHS
El FHS (Filesystem Hierarchy Standard) es la convención que todas las distros serias respetan para que sepas de memoria dónde buscar algo sin tener que preguntarlo.
| Ruta | Qué contiene |
|---|---|
/bin, /sbin | Binarios esenciales de usuario/administración (en distros modernas suelen ser enlaces simbólicos a /usr/bin, /usr/sbin) |
/usr | La mayor parte del sistema instalado: binarios, librerías, documentación — pensado para ser compartible/de solo lectura |
/etc | Configuración del sistema completo, siempre en texto plano |
/var | Datos variables: logs (/var/log), colas de correo, cachés de paquetes — como viste en el módulo 102 |
/tmp | Ficheros temporales — puede vaciarse en cada arranque |
/opt | Software de terceros autocontenido, fuera del gestor de paquetes de la distro |
/srv | Datos servidos por este equipo (un sitio web, un repositorio FTP...) |
/home | Directorios personales de los usuarios |
/root | Directorio personal de root — deliberadamente fuera de /home |
/boot | Kernel, initramfs y configuración de GRUB — la partición que viste en el módulo 00 |
/dev | Ficheros de dispositivo, gestionados por udev (módulo 101) |
/proc, /sys | Sistemas de ficheros virtuales del kernel (módulo 101) |
/mnt | Punto de montaje genérico, temporal, para uso manual del administrador |
/media | Punto de montaje automático de medios extraíbles (USB, DVD...) |
/lib, /lib64 | Librerías compartidas esenciales (módulo 102) |
Para localizar dónde vive realmente algo, además de find y which (módulo 103), están estas dos:
$ updatedb
# reconstruye la base de datos que usa locate; tarda segun el tamano del disco$ locate sshd_config
/etc/ssh/sshd_config
/usr/share/man/man5/sshd_config.5.gzlocate es mucho más rápido que find / porque consulta un índice pregenerado en vez de recorrer el disco — pero ese índice se actualiza por cron una vez al día (o a mano con updatedb), así que un fichero creado hace un minuto puede no aparecer todavía.Practica más — labs ya publicados en Ghost Academy sobre este tema: 🌳 Compartir estructuras con tree (lab)
Valida lo aprendido — tests temáticos de Recursos: 📁 Test: Archivos & Navegación
Práctica guiada
- En tu VM: añade un segundo disco virtual desde VirtualBox (apagada la VM, Configuración → Almacenamiento → añadir un VDI nuevo de 2 GB), arráncala y confirma que aparece con
lsblk. - Particiónalo con
fdisk /dev/sdb(una única partición primaria, todo el espacio) y formatéalo conmkfs.ext4. - Créale un punto de montaje (
mkdir /mnt/datos) y móntalo a mano conmount. Comprueba condf -hylsblk -f. - Añade la línea correspondiente a
/etc/fstabusando el UUID (blkidpara obtenerlo), con la opcióndefaults. Prueba conmount -asin reiniciar. - Crea un fichero, cámbiale el propietario y los permisos a
640, y comprueba el resultado conls -l. - Crea un enlace duro y uno simbólico al mismo fichero, bórralo, y confirma con tus propios ojos la diferencia de comportamiento del punto 5.
- Localiza con
find / -perm -4000 2>/dev/nulltodos los binarios SUID instalados en tu sistema — es exactamente el tipo de comprobación de seguridad que hace un administrador real.
Resumen de comandos del módulo
| Bloque | Comandos clave |
|---|---|
| 104.1 Particiones y FS | fdisk, gdisk, parted, mkfs.*, mkswap |
| 104.2 Integridad | fsck, xfs_repair, tune2fs, badblocks, df, du |
| 104.3 Montaje | mount, umount, /etc/fstab, blkid, lsblk -f, swapon/swapoff |
| 104.5 Permisos | chmod, chown, chgrp, umask, setfacl/getfacl |
| 104.6 Enlaces | ln, ln -s |
| 104.7 FHS | find, locate, updatedb |
Autoevaluación
- ¿Qué tres comandos usarías, en orden, para dejar un disco nuevo particionado, formateado y montado?
- ¿Por qué nunca debes ejecutar
fscksobre un sistema de ficheros montado y en uso? - En
/etc/fstab, ¿qué ventaja tiene identificar la partición porUUID=en vez de por/dev/sdb1? - Calcula en octal los permisos
rwxr-xr--. ¿Y al revés, qué significa640? - ¿Qué hace exactamente el bit SUID en
/usr/bin/passwd, y por qué hace falta ahí? - Creas un enlace duro y un enlace simbólico al mismo fichero y luego borras el original. ¿Qué pasa con cada uno?
- ¿Por qué
locatepuede no encontrar un fichero que acabas de crear hace treinta segundos?