Debian-Newbie 06. Estructura de Directorios

Debian-Newbie 17 de oct. de 2023

¿Donde están los discos?

Lo primero que le "chirría" a un nuevo usuario en Linux, es que no encuentra los discos duros de su ordenador...

Hay que explicar que en la estructura de Sistema de Ficheros (File System) de Linux todo son ficheros: los directorios son ficheros, los archivos son ficheros y cualquier dispositivo (Disco duro, DVD, Impresora, Tarjeta de sonido, USB, Teclado, Ratón, WebCam, etc) es un fichero.
La diferencias entre unos y otros es que pueden ser ficheros del tipo:

  • Ficheros de Bloque
  • Ficheros de caracteres (con/sin buffer)
  • FIFO

Aunque ahora no te lo parezca, el no tener "discos con letras" como aparecen en otros SO, tiene la enorme ventaja de no estar limitado por un determinado número de letras (A: B: C: D: ... Z:) y otra serie de limitaciones que iremos viendo.

Por ahora no entraremos en "localizar" los discos (eso lo veremos más adelante en detalle) y simplemente vamos a navegar por la estructura del sistema de ficheros que tenemos disponible para entender lo que vemos.

Organización del Sistema de Ficheros

La organización de los ficheros sigue una estructura jerárquica, la cual permite que la gestión de cualquier fichero (archivo, directorio o dispositivo) funcione de forma estructurada y sin errores.

En GNU/Linux, todo "cuelga" del directorio 'raíz' que se identifica con la barra: /
No confundir con el directorio del usuario root.

Debajo del directorio / (raíz) hay una estructura especial de directorios, cada cual con un propósito, el cual debes de conocer para saber qué se almacena en cada uno de ellos.

Desde el navegador de ficheros de tu escritorio si navegas hasta lo que aparece identificado con "Sistema de archivos" (que correspondería al directorio / ), te encontrarás con las siguiente estructura:

Estructura de / (directorio raíz)

Función de cada directorio en el FS de Linux

El esquema que os muestro es una explicación sencilla de lo que es y contiene cada uno de los directorios que cuelgan directamente del directorio / (raíz):

/                       => Directorio / (raíz)
├── bin -> usr/bin      => Binarios/programas esenciales (/usr/bin)
├── boot                => Almacen del Kernel y ficheros de Arranque 
├── dev                 => Directorio de los 'Dispositivos' 
├── etc                 => Directorio de ficheros de configuración
├── home                => Directorio de los usuarios del sistema
├── lib -> usr/lib      => Librerias del sistema
├── lib32 -> usr/lib32  => Librerias de 32 bits
├── lib64 -> usr/lib64  => Librerias de 64 bits
├── lost+found          => Directorio de recuperación ante fallos 
├── media               => Punto de "montaje" de dispositivos 'Media'
├── mnt                 => Punto de montaje para otros dispositivos
├── opt                 => Directorio para software 'Opcional'
├── proc                => Directorio 'virtual' de control de procesos
├── root                => Directorio del super-administrador (root)
├── run                 => Directorio gestion de procesos en ejecucion
├── sbin -> usr/sbin    => Binarios de administracion (/usr/sbin)
├── srv                 => Dir. para datos de servicios del sistema
├── sys                 => Similar a /proc (informacion del sistema)
├── tmp                 => Directorio temporal de uso compartido
├── usr                 => Librerías, bin y otros elementos del sistema
└── var                 => Dir. de datos variables (bbdd, logs, etc)

Estructura de directorios (desde la terminal)

Además cada uno de los directorios tiene unos permisos y propietario, para evitar el mal uso o acceso indebido a los mismos.

Comando para Listar el contenido del Sistema de Ficheros

El comando más usado en linux es ls (abreviatura de list -listar-).
El comando ls, permite usar serie de parámetros que modifican el resultado del listado de los ficheros (archivos y directorios), mostrando diferentes salidas con diferentes formatos. Algunas opciones:

# Listado sencillo. Directorios y archivos, ordenados por nombre:
ls    

# Listado sencillo. Identico al anterior pero en una (1) columna
ls -1

# Listado largo. Permisos, propietario, tamaño, fecha, ordenado en filas:
ls -l

# Listar todos (all) los ficheros, incluidos los ocultos (.*)
ls -a

# Listar solo directorios de la carpeta actual
ls -d

# Listar sólo los archivos de la carpeta actual
ls -F

# Otros parametros:
-r  => Invertir resultado.
-t  => Ordenar por fecha, primero el más reciente.
-R  => Recursivo, recorre toda la estructura de ficheros actual.

# Ejemplo: 
# Listar todos los ficheros incluidos los ocultos (-a), con todos sus datos (-l), ordenados por fecha (-t), pero en orden inverso, el mas reciente al final (-r)
ls -altr

Algunos ejemplos del comando ls (listar)

Nota: En Linux, se puede ocultar un fichero (archivo o directorio) simplemente poniendo un punto delante de su nombre.
Su uso es simplemente para 'aligerar' la visualización de ficheros, no tiene un sentido de ocultación o protección.

Si abrimos la terminal y ejecutamos el comando 'ls -la' veremos una serie de ficheros y directorios.
Muestro una serie de ficheros creados a propósito para poder explicar sobre ellos:

ls -la (salida de ejemplo)

Línea 1: La ejecución del comando ls -la (listar en formato largo+ todo)
Línea 2: Nos muestra el tamaño actual de los ficheros del directorio actual (por defecto el resultado lo muestra en KBytes -kibibytes-)

En la linea 3: Tenemos el directorio . (punto) que es el directorio actual.
En nuestro ejemplo es: 'ejemplo-directorio'
En la línea 4: El directorio .. que es el directorio padre (directorio del que cuelga el directorio actual) que es /tmp

A partir de la línea 5 nos muestra todos los ficheros y directorios de la carpeta actual.
Qué detalles podemos ver la salida del comando ls:

ATRIBUTOS   N USUARIO  GRUPO     TAMAÑO  FECHA  HORA  NOMBRE
-rwxrwxrwx  1 luisgulo luisgulo  4564    oct 16 20:11 fichero.ejemplo

Atributos: Muestra el tipo de fichero, permisos de fichero.
N: Valor que indica nº de elementos relacionados con el fichero (enlaces duros)
Usuario: Usuario propietario del fichero (archivo/directorio)
Grupo: Grupo propietarios del fichero.
Tamaño: Cuando ocupa en fichero en KB (salida por defecto)
Fecha y Hora: Muestra la fecha y hora de la ultima modificación del fichero.
Nombre: Nombre de archivo o directorio.

La salida de los atributos hay que trocearla para entender que significa:

ATRIBUTOS DE UN FICHERO (UGO)

T  U   G   O
~  rwx rwx rwx

T: Tipo de fichero, puede ser: (d) Directorio. (-) Archivo. (l) Enlace/Link 'blando'.
UGO: Permisos de acceso sobre el archivo para el Usuario, Grupo, Otros.

Cada uno de estos permisos (UGO) se divide en 3 posiciones:
r: Permiso de Lectura / (-) guión indica sin permiso de lectura.
w: Permiso de Escritura / (-) guión indica sin permiso de escritura.
x: Permiso de Ejecución / (-) guión indica sin permiso de ejecución.

Línea 5: Es un archivo y tiene todos los permisos permitidos (lectura, escritura y ejecución) para el usuario (luisgulo), el grupo (luisgulo) y otros usuarios/grupos.
Línea 6: Archivo Backup, es un enlace cuyo destino es script.sh. Aunque aparezcan todos los permisos, los permisos reales son los que tenga el archivo destino.

Línea 7 y 8: Directorios. Los directorios tienen una particularidad y es que para poder entrar o ver su contenidos necesitan al menos el permiso r-x ('atravesar'), no vale unicamente el permiso de lectura.
Veamos un ejemplo:

# Tenemos 3 carpetas
drwxr-xr-x 2 luisgulo luisgulo  4096 oct 16 23:08 Carpeta
dr--r--r-- 2 luisgulo luisgulo  4096 oct 16 22:48 Carpeta-sin-acceso
drwxr-xr-x 2 luisgulo luisgulo  4096 oct 16 20:05 Directorio

# Intentamos listar
ls -l Carpeta*
Carpeta:
total 4
-rw-r--r-- 1 luisgulo luisgulo 24 oct 16 23:12 fichero.A

Carpeta-sin-acceso:
ls: no se puede acceder a 'Carpeta-sin-acceso/fichero': Permiso denegado
total 0
-????????? ? ? ? ?            ? fichero.B

Línea 9: documento.pdf es un archivo, cualquiera del grupo u otros grupos puede leer, pero sólo el propietario (usuario) puede escribir (o sobreescribir).

En la línea 14, tenemos un fichero de nombre '.oculto-al-listar', que sólo se listará si usamos el parámetro -a (all) ya que al comenzar por un punto, se considera que hay que ocultarlo en los listados normales.

El archivo de la línea 15. El propietario (usuario) sólo lo puede leer, no puede escribir en él.

En la última línea, el archivo script.sh el usuario tiene todos los permisos sobre él: lo puede leer, editar y ejecutar. Los usuarios de su grupo y de otros grupo unicamente lo pueden leer y ejecutar.

La sintaxis completa del comando ls es:

ls [opciones] [archivo]

* Opciones: Son los atributos opcionales que podemos indicar para modificar la salida del listado. Ejemplo: -l -a -t -r -1. O tambien: -ltr -latr

* Archivo (fichero/directorio): Opcional.
Por defecto listará el contenido del directorio actual (directorio .)
Se puede indicar uno o varios archivos.
Ejemplo: ls -l Carpeta Directorio imagen.png
Se puede indicar que liste sobre otra ruta de directorios.
Ejemplo: ls -l /home/luisgulo/Imágenes/SOLOCONLINUX

Comando para Desplazarse por el Sistema de Ficheros

El comando para cambiarse entre los directorios es el comando cd

En Linux se usa la terminología de 'ruta absoluta' y 'ruta relativa', y también hablamos de la nomenclatura de . (punto) y .. (dos puntos seguidos)

. (Punto)
Significa el directorio actual

.. (Dos puntos seguidos)
Significa el directorio anterior o directorio padre (del actual)

Ruta Absoluta
Cuando indicamos la manera de llegar desde el directorio / (raíz).
Ejemplos:
/var/log => es ruta absoluta
/home/pepito/Descargas => ruta absoluta

Ruta relativa
Cuando indicamos la manera de llegar a una carpeta desde el directorio actual.

Ejemplo: Estamos dentro de la carpeta /home/pepito/Descargas/DLT
Queremos ir a la carpeta anterior (Descargas) usaríamos: ..
Queremos ir a la carpeta /home/pepito usariamos ../..
(que significa ir hacia atras 2 veces)

Sintaxis del comando cd y alguna particularidad:

cd ruta
Cambiar al directorio indicado en la ruta (absoluta/relativa)
Ejemplos:

    cd /home/luisgulo/Documentos/Fichas-Comandos/
    cd ../../imagenes-cabecera-articulos/

cd -
Volver directamente al directorio en que estaba situado anteriormente
Ejemplo: Ruta actual: /home/luisgulo/Documentos

    cd ./ejemplos/scripts-bash/sencillos/

Estaría en /home/luisgulo/Documentos/ejemplos/scripts-bash/sencillos

    cd - 

Volvería directamente a /home/luisgulo/Documentos

    cd - 

Volvería a /home/luisgulo/Documentos/ejemplos/scripts-bash/sencillos
Si lo repito (cd -) puedo ir y volver entre ambos directorios.

cd
Ir directamente al 'home' del usuario: /home/usuario

Ruta actual

Puede ser que la configuración de tu shell, no muestre la ruta actual, o no se muestre completa por cualquier motivo.
Para averiguar la ruta absoluta en la que estamos actualmente situados, puedes usar el comando pwd (print working directory)

Sintaxis de pwd:

pwd
Indica la ruta actual (si es un enlace muestra el nombre del enlace)

pwd -P
Muestra la ruta real (Physical) del directorio actual (ignorando enlaces)

Puedes revisar un ejemplo de comandos para gestionar archivos y directorios en:

Comandos Linux - Gestionar Archivos y Directorios
Gestionar archivos y directorios ▶ cd → ir al directorio personal. ▶ cd /home → cambiar al directorio “/home”. ▶ cd .. → retroceder un nivel. ▶ cd ../.. → retroceder 2 niveles. ▶ cd ~user1 → ir al directorio user1. ▶ cd - → ir (regresar) al directorio anterior. ▶ pwd → mostrar el camino del directo…

Artículo sobre comandos para gestionar archivos y directorios


Aunque más adelante veremos con detalle el tema de discos, particiones, montajes, etc en Linux, puedes usar el comando 'df .' para averiguar cual es el disco y partición en uso para el directorio en el que estás situado actualmente:

cd /home/usuario
df .
/dev/sda1          475565040 417090096    34244136  93% /

cd /home/usuario/Otros
/dev/sdb2          479596200 45786296   409374244  11% /HDDisxtra

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux