Debian-Newbie 06. Estructura de Directorios
¿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:
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):
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:
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:
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), .. (dos puntos seguidos) y ~ (virgulilla)
. (Punto)
Significa el directorio actual
.. (Dos puntos seguidos)
Significa el directorio anterior o directorio padre (del actual)
~ (Virgulilla)
Significa el directorio personal del usuario.
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:
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