Ghost AcademyGhostLinux · Ghost Academy
GhostLinuxMódulo 104Examen 101-500

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.

Objetivos de la unidad

1. LPI 104.1 — Crear particiones y sistemas de ficheros

1.1 Herramientas de particionado

ComandoEstiloQué hace
fdisk -lInteractivo, por menú de letrasLista y edita tablas de particiones MBR (y GPT desde versiones recientes)
gdiskInteractivo, igual que fdisk pero pensado para GPTEdita tablas GPT con el mismo estilo de menú que fdisk
partedInteractivo o por línea de comandosEntiende MBR y GPT, y puede redimensionar particiones existentes
cfdiskInterfaz de texto con menús (ncurses)Lo mismo que fdisk, más visual — habitual recomendación para quien empieza
root@lpic1:~#
$ fdisk -l /dev/sdb
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Disklabel type: dos
Device     Boot Start      End  Sectors Size Id Type
root@lpic1:~#
$ 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.
Dentro de 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:

ComandoSistema de ficheros
mkfs.ext4 /dev/sdb1ext4 — el más común en Debian/Ubuntu, con journaling
mkfs.xfs /dev/sdb1XFS — por defecto en RHEL/CentOS/Fedora, muy sólido con ficheros grandes
mkfs.vfat -F32 /dev/sdb1FAT32 — para compatibilidad con Windows/dispositivos extraíbles
mkswap /dev/sdb2Prepara una partición como espacio de intercambio (no es un "sistema de ficheros" al uso)
root@lpic1:~#
$ 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 ficherosCuándo elegirlo
ext2Sin journaling — prácticamente en desuso salvo en memorias USB de muy poca escritura
ext3ext2 + journaling — predecesor directo de ext4, raro verlo en instalaciones nuevas
ext4Estándar actual en Debian/Ubuntu: journaling, buen rendimiento, muy probado
XFSEstándar en RHEL/Fedora: excelente con ficheros muy grandes y alta concurrencia
BtrfsSnapshots nativos, subvolúmenes, checksums — más moderno, awareness para el examen
VFAT/FAT32Sin permisos Unix ni journaling — solo para intercambiar con Windows/dispositivos embebidos
swapNo almacena ficheros: es memoria de intercambio en disco
🧰 Recursos relacionados (Ghost Academy)

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.

root@lpic1:~#
$ 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
root@lpic1:~#
$ 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 blocks
Nunca ejecutes fsck 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.
ComandoQué hace
fsck / e2fsckComprueba (y con -y repara automáticamente) un sistema ext2/3/4
xfs_repairEquivalente de fsck para XFS — no se usa fsck.xfs para reparar de verdad, solo como comprobación superficial
tune2fs -l /dev/sdb1Muestra los parámetros del sistema de ficheros ext (UUID, etiqueta, última comprobación...)
tune2fs -L etiqueta /dev/sdb1Cambia la etiqueta del sistema de ficheros
badblocks /dev/sdb1Escanea el disco en busca de sectores defectuosos
df -hEspacio usado/libre por sistema de ficheros montado
du -sh directorioEspacio ocupado por un directorio concreto, en total
root@lpic1:~#
$ 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
root@lpic1:~#
$ du -sh /var/log
214M	/var/log
root@lpic1:~#
$ tune2fs -l /dev/sdb1 | grep -i 'mount count\|check'
Maximum mount count:      -1
Next check after:         Tue Mar 24 10:02:11 2026
🧰 Recursos relacionados (Ghost Academy)

Practica 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

root@lpic1:~#
$ mount /dev/sdb1 /mnt/datos
root@lpic1:~#
$ mount | grep sdb1
/dev/sdb1 on /mnt/datos type ext4 (rw,relatime)
root@lpic1:~#
$ umount /mnt/datos
root@lpic1:~#
$ umount /mnt/datos
umount: /mnt/datos: target is busy.
"Target is busy" es el error más preguntado de esta sección: significa que algún proceso tiene un fichero abierto o un directorio como working directory dentro de ese punto de montaje. 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

root@lpic1:~#
$ 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  2

Seis campos, de izquierda a derecha, y el examen pregunta por los seis:

#CampoContenido
1DispositivoIdentifica 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)
2Punto de montajeDirectorio donde aparece el contenido — none para swap
3Tipoext4, xfs, swap, vfat...
4OpcionesVer tabla siguiente
5Dump1 = la utilidad legada dump respalda este sistema de ficheros, 0 = no (casi siempre 0 hoy en día)
6PassOrden de comprobación de fsck en el arranque: 0 = nunca, 1 = primero (solo la raíz), 2 = después
OpciónEfecto
defaultsrw, suid, dev, exec, auto, nouser, async — el conjunto "normal"
noautoNo se monta automáticamente al arrancar — solo cuando alguien lo pide explícitamente
userUn usuario normal (no solo root) puede montarlo
ro / rwSolo lectura / lectura-escritura
noexecProhíbe ejecutar binarios desde ahí — típico en /tmp o un punto de montaje de datos de usuario
nosuidIgnora los bits SUID/SGID de los binarios que contenga (sección 4)
nodevIgnora ficheros de dispositivo especiales dentro de ese sistema de ficheros
root@lpic1:~#
$ mount -a
# monta todo lo que esta en fstab y no esta ya montado, sin reiniciar
mount -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

root@lpic1:~#
$ 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"
root@lpic1:~#
$ 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

root@lpic1:~#
$ swapon --show
NAME                              TYPE      SIZE USED PRIO
/dev/mapper/lpic1--lab--vg-swap_1 partition   1G   0B   -2
root@lpic1:~#
$ swapoff /dev/mapper/lpic1--lab--vg-swap_1
root@lpic1:~#
$ swapon /dev/mapper/lpic1--lab--vg-swap_1
Sobre cuotas de disco: versiones anteriores del temario LPIC-1 incluían un objetivo específico (quota, 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.
🧰 Recursos relacionados (Ghost Academy)

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

root@lpic1:~#
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1203 sep 30 10:02 /etc/shadow

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

PermisoSobre un ficheroSobre un directorio
r (4)Leer el contenidoListar lo que contiene
w (2)Modificar el contenidoCrear/borrar ficheros dentro
x (1)Ejecutarlo como programa/scriptEntrar en él (cd) y acceder a lo que contiene

4.2 chmod: simbólico y octal

root@lpic1:~#
$ chmod u+x script.sh
root@lpic1:~#
$ chmod g-w,o-rwx fichero.txt
root@lpic1:~#
$ chmod 750 script.sh
root@lpic1:~#
$ ls -l script.sh
-rwxr-x--- 1 jose jose 320 sep 30 10:02 script.sh
750 = 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

root@lpic1:~#
$ chown maria fichero.txt
root@lpic1:~#
$ chown maria:desarrollo fichero.txt
root@lpic1:~#
$ chgrp desarrollo fichero.txt
root@lpic1:~#
$ chown -R maria:desarrollo /srv/proyecto/

4.4 Bits especiales: SUID, SGID y sticky bit

BitValor octalSobre un fichero ejecutableSobre un directorio
SUID4000Se ejecuta con los permisos del propietario del fichero, no de quien lo lanzaNo tiene efecto
SGID2000Se ejecuta con los permisos del grupo del ficheroLos ficheros nuevos creados dentro heredan el grupo del directorio, no el grupo del usuario que los crea
Sticky bit1000Sin efecto práctico hoy en binariosSolo el propietario de un fichero (o root) puede borrarlo dentro de ese directorio, aunque otros tengan permiso de escritura
root@lpic1:~#
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 /usr/bin/passwd
Ese s 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.
root@lpic1:~#
$ ls -ld /tmp
drwxrwxrwt 12 root root 4096 sep 30 10:02 /tmp

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

root@lpic1:~#
$ chmod 4755 /usr/local/bin/miprograma
root@lpic1:~#
$ chmod g+s /srv/proyecto_compartido/

4.5 umask: los permisos por defecto

root@lpic1:~#
$ umask
0022

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

root@lpic1:~#
$ umask 027

4.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:

root@lpic1:~#
$ setfacl -m u:pedro:rw fichero.txt
root@lpic1:~#
$ getfacl fichero.txt
# file: fichero.txt
# owner: maria
# group: desarrollo
user::rw-
user:pedro:rw-
group::r--
mask::rw-
other::---
Cuando un fichero tiene ACL, ls -l muestra un + al final de los permisos (-rw-rw----+) como pista de que hay reglas adicionales que getfacl puede mostrarte completas.
🧰 Recursos relacionados (Ghost Academy)

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é esOtra entrada de directorio que apunta al mismo inodoUn fichero nuevo e independiente que contiene una ruta como texto
¿Cruza sistemas de ficheros?No — el inodo solo existe en su propio sistema de ficherosSí, sin problema
¿Enlaza directorios?No (con muy raras excepciones internas del sistema)Sí
Si borras el originalEl contenido sigue accesible por el enlace — el inodo no se libera hasta que el último enlace desapareceEl 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 >1Empieza por l y muestra enlace -> destino
root@lpic1:~#
$ echo 'contenido original' > original.txt
root@lpic1:~#
$ ln original.txt duro.txt
root@lpic1:~#
$ ln -s original.txt simbolico.txt
root@lpic1:~#
$ 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.txt
Fíjate en el primer número (el inodo) con ls -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.
root@lpic1:~#
$ rm original.txt
root@lpic1:~#
$ cat duro.txt
contenido original
root@lpic1:~#
$ cat simbolico.txt
cat: simbolico.txt: No such file or directory

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

RutaQué contiene
/bin, /sbinBinarios esenciales de usuario/administración (en distros modernas suelen ser enlaces simbólicos a /usr/bin, /usr/sbin)
/usrLa mayor parte del sistema instalado: binarios, librerías, documentación — pensado para ser compartible/de solo lectura
/etcConfiguración del sistema completo, siempre en texto plano
/varDatos variables: logs (/var/log), colas de correo, cachés de paquetes — como viste en el módulo 102
/tmpFicheros temporales — puede vaciarse en cada arranque
/optSoftware de terceros autocontenido, fuera del gestor de paquetes de la distro
/srvDatos servidos por este equipo (un sitio web, un repositorio FTP...)
/homeDirectorios personales de los usuarios
/rootDirectorio personal de root — deliberadamente fuera de /home
/bootKernel, initramfs y configuración de GRUB — la partición que viste en el módulo 00
/devFicheros de dispositivo, gestionados por udev (módulo 101)
/proc, /sysSistemas de ficheros virtuales del kernel (módulo 101)
/mntPunto de montaje genérico, temporal, para uso manual del administrador
/mediaPunto de montaje automático de medios extraíbles (USB, DVD...)
/lib, /lib64Librerí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:

root@lpic1:~#
$ updatedb
# reconstruye la base de datos que usa locate; tarda segun el tamano del disco
root@lpic1:~#
$ locate sshd_config
/etc/ssh/sshd_config
/usr/share/man/man5/sshd_config.5.gz
locate 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.
🧰 Recursos relacionados (Ghost Academy)

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

  1. 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.
  2. Particiónalo con fdisk /dev/sdb (una única partición primaria, todo el espacio) y formatéalo con mkfs.ext4.
  3. Créale un punto de montaje (mkdir /mnt/datos) y móntalo a mano con mount. Comprueba con df -h y lsblk -f.
  4. Añade la línea correspondiente a /etc/fstab usando el UUID (blkid para obtenerlo), con la opción defaults. Prueba con mount -a sin reiniciar.
  5. Crea un fichero, cámbiale el propietario y los permisos a 640, y comprueba el resultado con ls -l.
  6. 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.
  7. Localiza con find / -perm -4000 2>/dev/null todos 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

BloqueComandos clave
104.1 Particiones y FSfdisk, gdisk, parted, mkfs.*, mkswap
104.2 Integridadfsck, xfs_repair, tune2fs, badblocks, df, du
104.3 Montajemount, umount, /etc/fstab, blkid, lsblk -f, swapon/swapoff
104.5 Permisoschmod, chown, chgrp, umask, setfacl/getfacl
104.6 Enlacesln, ln -s
104.7 FHSfind, locate, updatedb

Autoevaluación

  1. ¿Qué tres comandos usarías, en orden, para dejar un disco nuevo particionado, formateado y montado?
  2. ¿Por qué nunca debes ejecutar fsck sobre un sistema de ficheros montado y en uso?
  3. En /etc/fstab, ¿qué ventaja tiene identificar la partición por UUID= en vez de por /dev/sdb1?
  4. Calcula en octal los permisos rwxr-xr--. ¿Y al revés, qué significa 640?
  5. ¿Qué hace exactamente el bit SUID en /usr/bin/passwd, y por qué hace falta ahí?
  6. Creas un enlace duro y un enlace simbólico al mismo fichero y luego borras el original. ¿Qué pasa con cada uno?
  7. ¿Por qué locate puede no encontrar un fichero que acabas de crear hace treinta segundos?
← 103 · Comandos GNU y UnixÍndice del curso105 · Shells y scripting →