educatica!

educación, informática y demás

GNU/Linux, Sistemas operativos

Sistemas de ficheros en sistemas GNU/Linux

En los sistemas operativos GNU/Linux no existen las unidades lógicas como en los sistemas de Microsoft. Todos los sistmeas de ficheros están dentro de una única jerarquía de directorios con un único directorio raíz.

Si cada distribución de GNU/Linux organizará el sistema de ficheros principal, es decir el directorio raíz, como le diera la gana, sería muy difícil adaptarse entre distintas distribuciones de GNU/Linux. Sería una locura.

Para evitar esta situación se creó un estándar de jerarquía de ficheros para sistemas GNU/Linux, la FHS Filesystem Hierarchy Standard. Vamos a echar un vistazo a los principales directorios que podemos encontrar en la jerarquía de sistema de ficheros estándar utilizando nuestro XUbuntu 22.04.

Jerarquía de directorios

Vamos a jugar con la terminal para ir practicando comandos de bash, la shell por defecto en esta distribución de GNU/Linux y actualmente en la mayoría.

Abrimos una terminal y ejecutamos el comando pwd. Este comando muestra la ruta del directorio actual.

Ahora mismo estamos en el directorio personal del usuario actual. Esto lo sabemos porque en el prompt aparece como directorio actual la ~ o virgulilla.

Vamos a cambiar de directorio al directorio raíz para eso utilizamos el comando cd seguido de la ruta del directorio destino, en nuestro caso /.

Vamos a mostrar el contenido del directorio actual usando el comando ls sin pasar parámetros.

En /bin nos encontramos ejecutables

El propio ejecutable de ls está en este directorio, así como el ejecutable de la herramienta apt.

En /boot tenemos los ficheros necesarios para arrancar el sistema.

En /dev nos encontramos ficheros especiales de bloque o caracter que representan a los dispositivos perfiréricos conectados (o que pueden estar conectados) al sistema. Dev, viene de devices o dispositivos.

En los unix-like todos los dispositivos se representan como un fichero. De esta forma, si se quiere leer de un dispositivo, el sistema operativo abre el fichero que representa al dispositivo y lee de él. Si se quiere escribir o mandar información, se accede al fichero que representa al dispositivo y se escribe.

Por ejemplo, vamos a mostrar los ficheros especiales de bloque que tienen que ver con el primer disco duro.

Vamos a usar el comando fdisk con la opción -l para mostrar la tabla de particiones del dispositivo /dev/sda. Este comando lo tenemos que ejecutar como root.

Si tratamos de mostrar información sobre /dev/sdb, es decir el segundo disco duro, no mostrará nada, puesto que no existe este disco duro en nuestro sistema.

Si recordamos de documentos anteriores, las terminales se representaban como tty. Vamos a mostrar los ficheros de tty.

Vamos a entrar en la tty1 con CTRL+ALT+F1.

Vamos a volver a la terminal virtual en modo gráfico y ejecutaremos el siguiente comando.

Utilizamos una redirección para escribir una cadena de texto en el fichero especial que representa a la terminal 1

Si cambiamos a la terminal número 1 nos encontraremos esto:

Si intentamos hacer lo mismo con la tty2 nos encontramos con el siguiente error:

Esto ha pasado así porque el usuario alumno ha iniciado sesión en la terminal 1, así que tiene permiso de acceso al fichero /dev/tty1 que la representa. No obstante, en la terminal 2 no hay sesión iniciada, así que un usuario normal del sistema no debería poder escribir en este fichero.

El comando ls -l muestra información extendida de permisos, propietario y grupo, entre otros, de ficheros. En el caso de /dev/tty1 el fichero pertenece al usuario alumno, porque ha iniciado sesión en dicha terminal. En el caso de tty2 el fichero pertenece a root, siendo el usuario que puede leer y escribir ahí.

Ahora si nos cambiamos a la terminal dos podremos ver el texto en pantalla.

/etc. Contiene ficheros de configuración del sistema y de aplicaciones.

Vamos a mostrar el contenido del directorio y enredar un poco con algunos de los ficheros de configuración que contiene, para que nos vayan sonando.

¡No tenemos permiso para leer este fichero!. Vamos a mostrar en pantalla los permisos del fichero /etc/sudoers.

La configuración de permisos lo estudiaremos más adelante, pero vamos mirandola por ahora con mi ayuda. Según la configuración de permisos, propietario y grupo, el propietario y el grupo del fichero es root. Los permisos están todos en blanco excepto el de lectura para el propietario y el grupo. Por tanto, el único usuario que puede leer este fichero es root.

No obstante, el usuario root es el administrador y aunque no tenga permiso de escritura, el administrador puede hacer lo que quiera, por tanto también podrá escribir en este fichero.

Muestra el contenido del fichero en pantalla.

Vamos a mostrar el fichero hostname y host.

La mayoría de la configuración de los sistemas GNU/Linux se puede hacer editando ficheros de configuración que son ficheros de texto plano.

Por ejemplo, vamos a editar el fichero hosts que contiene resolución estática local de nombre: Es decir, asocia una dirección IP con un nombre para facilitar acceder a dicha IP usando una cadena de texto.

Para editar el fichero hosts tenemos que hacerlo como el usuario root, así que utilizaremos sudo con el editor de texto que más nos guste.

/home, por defecto, contiene los directorios personales de los usuarios del sistema. En realidad, hay un usuario que no tiene su directorio personal dentro de /home este es el usuario root, cuyo directorio personal está en /root.

De hecho, vamos a echar un vistazo al fichero de configuración de cuentas de usuario del sistema: /etc/passwd.

El fichero /etc/passwd contiene la configuración de las cuentas de usuario en el sistema. Cada línea contiene la información de una cuenta de usuario. Para cada cuenta de usuario se guardan, como en una base de datos, una serie de campos. El primer campo es el nombre del usuario y el campo número 6 es la ruta de su directorio personal.

Como nosotros somos así de buenos, vamos a darle compañía al usuario alumno. Vamos a crear una nueva cuenta ode usuario utilizando el comando adduser seguido del nombre del usuario a crear. Por supuesto, vamos a realizar una tarea administrativa, así que tendremos que utilizar el comando sudo. Crearemos una cuenta para el usuario marinapg.

Creando un nuevo usuario

Vamos a ver si se ha creado el directorio personal de este usuario

/lib Contiene las librerías compartidas del sistema.

/media se montán los sistemas de ficheros extraibles para que sean accesibles por los usuarios.

Como ya sabemos en los unix-like no hay unidades lógicas. Entonces, ¿cómo podemos acceder al contenido de un pendrive o de un CD?. En los sistemas operativos de tipo Unix lo que se hace es enlazar o montar el sistema de ficheros del dispositivo de almacenamiento al que queramos acceder (más concretamente la partición) en un directorio que esté dentro de la jerarquía de directorios del sistema.

Como no hay unidades lógicas, lo que se hace es crear un directorio que tendrá un nombre significativo. Este directorio esta vacío inicialmente. Una vez con el directorio creado, se enlaza este directorio con el sistema de ficheros del dispositivo de almacenamiento. Una vez enlazado o montado, cada vez que accedamos a este directorio, realmente estaremos accediendo al sistema de ficheros del dispositivo de almacenamiento.

Con los medios extraibles, por ejemplo un pendrive, el sistema operativo lo que hace es crear automáticamente un directorio dentro del directorio media con la etiqueta del disposivito y lo monta en dicho directorio.

/root es el directorio es el directorio personal de root.

Deja un comentario

Tema creado por Anders Norén