Esta página puede ser redistribuida libremente bajo los términos de la licencia GPL. Vease ( GPL texto original ) o si lo prefiere (Traducción española no oficial de la GPL) Al margen de las obligaciones legales que se derivan del uso de esta licencia rogamos sea respetada la referencia a su lugar de publicación original www.ciberdroide.com. y a su autor original Antonio Castro Snurmacher (Madrid 01/01/2000). |
![]() |
Esta ausencia de garantía se hace extensa a cualquier tipo de uso de este material y muy especialmente a las prácticas, ejercicios, y de ejemplos que encuentre en estas páginas. Deberá trabajar siempre salvo indicación contraria con un SO Linux y con un usario distinto de 'root' sin privilegios especiales. Como directorio de trabajo se procurará usar el directorio '/tmp' o algún otro que no contenga información valiosa. Tampoco se considera buena idea practicar en una máquina que contenga información valiosa. Todo esto son recomendaciones de prudencia. En cualquier caso si algo sale mal toda la responsabilidad será únicamente suya. En ningún caso podrá reclamar a nadie por daños y perjuicios derivados del uso de este material. Para más información lea el contenido de la licencia GPL y abstengase de hacer prácticas si no está dispuesto a asumir toda la responsabilidad.
|
Tipos de enlaces (links) y su manejo
Ya hemos mencionado algunas cosas sobre ellos pero sin profundizar
demasiado.
El manejo de ambos tipos de enlaces se hace con el comando 'ln'.
Como es habitual un repaso a la página man de este comando es
muy recomendable. La creación de un enlace rígido y uno simbólico
es muy similar. La diferencia es que para el enlace simbólico
tendremos que usar la opción -s.
Como es habitual asumimos que las prácticas se realizarán desde un
usuario distinto de root.
Con esto acabamos de crear dentro de tmp un directorio tmp2 y
dentro de el hemos creado ya algunos ficheros, algunos directorios
y unos cuantos enlaces rígidos y simbólicos. Los enlaces rígidos no
muestran nada particular listados con 'ls -l' pero los enlaces
simbólicos vienen acompañados de una flecha que apunta a otro
nombre de fichero.
El fichero 'ej0' lo hemos creado con un contenido 'xxxx' para ver que
pasa con ese contenido más adelante.
El nombre de usuario 'pepe' y el nombre de grupo
'users' son ficticios y en su sistema obtendrá otra cosa.
Hay una columna de números a continuación de los permisos. Se trata
de una columna que indica el número de enlaces rígidos que están asociados
a un mismo fichero. En el caso de 'ej0', 'ej1', 'ej2' aparece un 3 y está claro
porque son enlaces creados por nosotros pero el directorio 'dir1' tiene un 2.
Esto significa que existe otro enlace rígido para ese directorio que
nostros no hemos creado. Se ha creado automáticamente al crear 'dir1'. Acuerdese
que todos los directorios se crean con un par de entradas que son '.' y
'..' El 2 por lo tanto en este caso se debe a la entrada '.' dentro del propio
'dir1' y si dentro de 'dir1' existieran directorios habría que contabilizar
cada uno del los '..' de los directorios hijos como enlaces rígidos de 'dir1'.
Un fichero se corresponde con un único inodo. Es decir tiene una única entrada
en la tabla plana del sistema de ficheros, pero quizas aparezca varias veces
en distintas partes del sistema de ficheros, o con distinto nombre.
Si esto último no le ha quedado claro vuelva a leerlo después de finalizar
este capítulo porque vamos a seguir exiplicando que es un enlace rígido.
Ahora retomamos la práctica en el punto donde la dejamos y continuamos.
Vemos que el contenido de los distintos enlaces con 'ej0' es idéntico,
y si modificamos el contenido de cualquiera de ellos se afectará
instantaneamente el contenido de los restantes. En realidad la
información es accesible desde distintos nombres de ficheros pero
no son copias sino que se trata de la misma unidad de información.
Continuamos con el ejercicio.
Aquí ya vemos una diferencia. Pese a que 'ej1' se creó como un enlace
de 'ej0', 'ej1' mantiene accesible la información incluso aunque desaparezca
'ej0'. Eso es porque en el caso de los enlaces rígidos da igual cual es
el enlace o fichero original. Son totalmente equivalentes y la
información solo desaparecerá del sistema cuando el último enlace
rígido sea eliminado. La diferencia con el enlace simbólico es que
actua simplemente accediendo al nombre del fichero que tiene almacenado
en su interior. Por eso en el caso que acabamos de ver 'ejs1' queda
apuntando a 'ej0' que es un fichero que ya no existe.
Continuamos con el ejercicio y ahora usaremos una opción para 'ls'
que no habíamos visto antes. Se trata de la opción -i que sirve para
visualizar el número de inodo. Un inodo es una clave numérica para el
acceso al sistema plano de ficheros donde cada almacén de información
tiene una única clave y por eso los distintos enlaces rígidos contienen
el mismo valor de inodo.
Como se puede ver 'ej1' y 'ej2' tienen el mismo valor de 59171 que en
su sistema será otro valor cualquiera. En este momento después de borrar
'ej0' figuran con el valor 2 para el número de enlaces rígidos asociados.
Vamos a mover el enlace simbólico 'ejs1' a 'dir1' pero vamos a usar
'mv ejs1 dir2' en lugar 'mv ejs1 dir1' pero debería dar lo mismo ya
que 'dir2' es un enlace simbólico a 'dir1'.
Hemos comprobado que un enlace simbólico se ha comportado igual que
si fuera el propio directorio apuntado. En realidad podemos actuar
a todos los efectos como si se tratara del verdadero fichero en lugar
de un enlace simbólico salvo en el momento de su creación y en el
momento de su destrucción.
La operación 'rm' sobre un fichero simbólico no actua sobre el fichero
apuntado sino sobre el propio enlace simbólico destruyendolo.
Ahora tenemos 'dir2/ejs1 -> ej0' pero 'ej0' ni siquiera existe. Vamos a
cambiar el nombre de 'ej2' que era un enlace rígido de 'ej0' por 'ej0'.
Bueno este error es lógico porque el enlace 'dir2/ejs1' apunta a 'ej0'
y no importa que estemos en el mismo directorio que 'ej0' sino que
'dir2/ejs1' y 'ej0' estén en el mismo directorio. Los enlaces son
siempre relativos al sitio donde se encuentra el propio enlace.
En caso contrario podría resultar graciosísimo pero poco práctico
porque dependiendo de donde estuvieramos nosotros ( más exactamente
dependiendo del directorio actual del proceso que lo use) apuntaría
a un directorio distinto cada vez.
De todas formas comprobemoslo trasladando 'ej0' a 'dir2',
y observando como ha quedado todo.
Montage de dispositivos
Explicaremos esto un poco más. Supongamos que dispone de un disquete
en el que desea guardar información accesible como parte del sistema
actual. En MSDOS se accedería a la unidad que representa este dispositivo
mediande el comando a: o b: por ejemplo. En Unix esto no ocurre porque
ese patético invento llamado unidad lógica no existe.
Perdón por lo de patético pero es que en MSDOS, y en Windows cambias
las cosas de sitio y terminas reinstalando todo.
Supongamos que tenemos en un dispositivo cdrom, cinta, disquete, o lo
que sea la siguiente estructura de directorios.
Para poder acceder a esta información tendríamos que realizar una
operación de montado sobre algún punto de nuestro sistema de
ficheros actual. Por ejemplo si disponemos de un directorio
'/misc/novato' podriamos montar en ese punto nuestro dispositivo y
en ese caso la operación sería como enganchar un arbol en la rama
de otro arbol. De esta forma para el sistema sería como si el arbol
creciera.
Si el administrador considera que montar y un dispositivo no entraña
riesgos para el sistema concedera permisos para que esto pueda ser
realizado por los usuarios. Por ejemplo un administrador puede
considerar que los usuarios solo puedan montar la unidad de cdrom.
En un entorno multiusuario y multiproceso
no interesa hacer efectiva las actualizaciones sobre un dispositivo
de forma instantanea sino que se intenta optimizar los accesos al
dispositivo. Por eso si escribimos en un dispositivo de lectura escritura
como por ejemplo un disquete y sacamos dicho disquete antes de desmontarlo
lo más probable es que algunas operaciones de escrituras queden sin realizar
porque estaban simplemente guardadas en memoria a la espera de ser
realizadas. Cuando se desmonta un sistema de ficheros se escriben las
operaciones pendientes sobre ese dispositivo y entonces puede ser
extraido del sistema sin peligro.
Directorio /proc
Algunos de estos ficheros son de solo lectura otros son de lectura y
escritura y permiten cambiar la configuración del kernel sin detenerlo.
Evidentemente todo ello está configurado con los permisos adecuados para
mantener la seguridad del sistema.
Si miramos dentro del directorio '/proc' veremos que hay un montón de
directorios cuyo nombre es un número. Estos directorios representan
cada uno a un proceso por su pid. Ya hemos estudiado el proceso init
en capítulos anteriores así que vamos a poner un ejemplo.
Pruebe a hacer lo siguiente:
Obtendrá la información de estado más importante del proceso init.
Además de contribuir a la cultura general sobre nuestro sistema lo
que hemos mencionado sobre '/proc' nos sirve para introducir el siguiente
tema.
Sistema de ficheros virtual
Estructura estandar del sistema de ficheros de Linux
Este último capítulo no explica conceptos nuevos pero servirá
para que comprenda lo que tiene en su sistema. Puede investigar
todo lo que quiera por su cuenta siempre que use un usuario normalito
sin privilegios. Si alguna vez se siente perdido solo tiene que
introducir el comando 'cd' para volver a casita.
Puede haber diferencias importantes en la estructura general del
sistema de ficheros entre unas distribuciones y otras pero en
lineas generales el aspecto de la disposición de los directorios
más importantes sería más o menos el siguiente;
Si observa diferencias con la estructura de ficheros de su distribución
no debe preocuparse esto es solo un ejemplo. Comentaremos el cometido
de los directorios más significativos.
El directorio raiz
Para habilitar la recuperación y/o la reparación del sistema, estará
presente en el sistema de archivos raíz aquellas herramientas que un
administrador experimentado necesitaría para diagnosticar y
reconstruir un sistema dañado.
Los errores del disco, que corrompen la información en el sistema de
archivos '/' son un problema mayor que los errores en cualquier otra
partición. Un sistema de archivos '/' (raiz) pequeño es menos propenso a
corromperse como resultado de un fallo del sistema.
La principal preocupación que se usa para balancear las anteriores
consideraciones, que favorecen el colocar muchas cosas en el sistema
de archivos raíz, es la de mantener '/' (raiz) tan pequeno como
sea razonablemente posible.
Ningún paquete grande (como TeX o GNUEmacs) debe utilizar un
subdirectorio directo bajo '/usr', en vez, debe haber un subdirectorio
dentro de '/usr/lib' (o '/usr/local/lib' si fué instalado completamente
local) para ese propósito, con el sistema X Window se hace una
excepción debido a un considerable precedente y a la práctica
ampliamente aceptada.
/usr/local: Jerarquía local
Este directorio debe estar vacío al terminar de instalar LINUX por
primera vez. No debe haber excepciones a la regla , excepto quizá los
subdirectorios vacíos listados.
La Jerarquía /var
Test
La palabra link es inglesa y para el concepto que vamos a tratar
podríamos traducirla por enlace. Hay dos tipos de enlaces llamados
'hard link' y 'symbolic link'. Podriamos traducirlo por enlace rígido
y por enlace simbólico. El término enlace simbólico se usa
con frecuencia en español y parece muy adecuado pero realmente no
existe una traducción para hard link tan aceptada. Nosotros emplearemos
el término rígido para hard que literalmente significa duro.
$ cd /tmp
$ mkdir /tmp2
$ cd tmp2
$ echo xxxx > ej0
$ ## Ahora creamos un par de enlaces rígidos con ej0
$ ln ej0 ej1
$ ln ej0 ej2
$ ## Creamos también un enlace simbólico ejs1 a ej0
$ ln -s ej0 ejs1
$ mkdir dir1
$ ## También creamos un enlace simbólico dir2 a dir1
$ ln -s dir1 dir2
$ ls -l
drwxr-xr-x 2 pepe user 1024 may 18 17:28 dir1
lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
-rw-r--r-- 3 pepe user 1 may 18 17:26 ej0
-rw-r--r-- 3 pepe user 1 may 18 17:26 ej1
-rw-r--r-- 3 pepe user 1 may 18 17:26 ej2
lrwxrwxrwx 1 pepe user 3 may 18 17:28 ejs1 -> ej0
$ cat ej0
xxxx
$ echo kkkkkkkkk > ej1
$ cat ej0
kkkkkkkkk
$ cat ejs1
kkkkkkkkk
$ rm ej0
$ cat ejs1
cat: ejs1: No existe el fichero o el directorio
$ cat ej1
kkkkkkkkk
$ ls -li
73449 drwxr-xr-x 2 pepe user 1024 may 18 17:28 dir1
59173 lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej2
59172 lrwxrwxrwx 1 pepe user 3 may 18 17:28 ejs1 -> ej0
$ mv ejs1 dir2
$ #
$ ## Comprobamos el resultado
$ ls -li
73449 drwxr-xr-x 2 pepe user 1024 may 18 17:32 dir1
59173 lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej2
$ ls dir2
ejs1
$ ls -li dir1
59172 lrwxrwxrwx 1 pepe user 3 may 18 17:28 ejs1 -> ej0
$ mv ej2 ej0
$ cat dir2/ejs1
cat: dir2/ejs1: No existe el fichero o el directorio
$ mv ej0 dir2
$ cat dir2/ejs1
kkkkkkkkk
$ ls -li
73449 drwxr-xr-x 2 pepe user 1024 may 18 17:34 dir1
59173 lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej1
$ ls -li dir2
59173 lrwxrwxrwx 1 pepe user 4 may 18 17:28 dir2 -> dir1
$ rmdir dir2
rmdir: dir2: No es un directorio
$ rm dir2
$ ls -li
73449 drwxr-xr-x 2 pepe user 1024 may 18 17:34 dir1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej1
$ ls -li dir1
59171 -rw-r--r-- 2 pepe user 10 may 18 17:30 ej0
59172 lrwxrwxrwx 1 pepe user 3 may 18 17:28 ejs1 -> ej0
Pueden existir varios sistemas de ficheros cada uno en un dispositivo o
partición distinta, pero para hacerlo accesible ha de ser montado dentro
del sistema principal de ficheros. Para ello se utilizan los comandos 'mount'
y 'umount'.
.
|-- Guia-del-enROOTador-2.8
|-- curso
|-- glup_0.6-1.1-html-1.1
|-- lipp-1.1-html-1.1
|-- man_instal_debian_21
|-- novato-a-novato
`-- rhl-ig-6.0es
|-- cpps
`-- icons
.
`-- misc
`-- novato
|-- Guia-del-enROOTador-2.8
|-- curso
|-- glup_0.6-1.1-html-1.1
|-- lipp-1.1-html-1.1
|-- man_instal_debian_21
|-- novato-a-novato
`-- rhl-ig-6.0es
|-- cpps
`-- icons
Este directorio es un directorio muy especial. Es un directorio en el
cual está montado un sistema de ficheros virtual. En realidad muestra
información que no reside en ningún dispositivo sino que es elaborada
por el propio kernel. Por ello se trata de falsos archivos. Su ocupación
en disco es 0. Sirve para comprobar la configuración y el funcionamiento
del kernel. No entraremos ahora a comentarlo en detalle porque este tema
es de interés para administradores del sistema. Lo que nos interesa
comentar es que aquí la presentación en forma de sistema de ficheros es
una simulación y se hace así para que pueda ser manejada exactamente de
la misma forma que si realmente estuviera contenida en directorioss y
ficheros.
$ cat /proc/1/status
En Linux un sistema de ficheros puede corresponderse físicamente y
lógicamente con cosas muy distintas. Acabamos de ver que el directorio
'/proc' aparentemente está organizado como si fuera un sistema de ficheros
idéntico a los que residen en disco duro y sin embargo se trata de algo
totalmente distinto. Un sistema de ficheros puede residir, en memoria,
en una partición de disco duro, en un dispositivo raid formado por varios
discos duros funcionando en paralelo y con un sistema de redundancia,
en disquetes, en cdroms, en un dispositivo remoto conectado a red, etc..
También se puede implementar un sistema de ficheros dentro de un fichero.
Por ejemplo umsdos es un sistema de ficheros linux implementado dentro de
un fichero msdos. Realmente es una solución muy poco eficiente pero pone
de relieve la flexibilidad del sistema virtual de ficheros.
Un sistema de ficheros puede tener un formato interno
que no siempre es el mismo. Linux puede manejar sistemas de ficheros de
otros sistemas operativos. En resumen lo que Linux ofrece con su sistema
ficheros virtual (VFS) es un sistema unificado de acceso a toda una
variedad de recursos muy distintos. Esto es posible porque se definen una
serie de
funciones para manejar un sistema de ficheros genérico. En Unix cada
sistema de ficheros tiene asociado un sistema plano de ficheros.
Las estructuras pueden ser diferentes para cada tipo de sistema de ficheros,
pero las funciones que lo manejan quedan unificadas por el (VFS)
Existe un documento 'fsstnd' donde se describe una recomendación
para estandarizar la estructura del sistema de ficheros de Linux
para las distintas distribuciones. Nosotros vamos a resumir brevemenente
la informacióm más importante. Un detalle mayor sería necesario
si este curso fuera un curso de administración del sistema.
.
|-- bin
|-- sbin
|-- tmp
|-- boot
|-- dev
|-- etc
|-- home
|-- lib
| |-- modules
| `-- security
|-- home
| |-- ftp
| |-- httpd
| |-- luis
| |-- msql
| |-- pili
| `-- skeleton
|-- root
|-- usr
| |-- bin
| |-- sbin
| |-- X11R6
| | |-- bin
| | |-- include
| | |-- lib
| | `-- man
| |-- local
| | |-- bin
| | |-- doc
| | |-- man
| | |-- lib
| | |-- src
| | `-- tmp
| |-- doc
| |-- include
| |-- info
| `-- src
| `-- linux
|-- proc
`-- var
|-- cache
|-- catman
|-- lib
|-- local
|-- lock
|-- log
|-- run
|-- spool
| |-- cron
| |-- lpd
| |-- mail
| `-- mqueue
`-- tmp
Para arrancar el sistema, debe estar presente lo suficiente como para
montar '/usr' y otras partes no-esenciales del sistema de archivos.
Esto incluye herramientas, información de configuración y del
cargador de arranque (boot loader) y alguna otra información esencial
al arrancar.
/ --- El Directorio Raíz
La jerarquía /usr.
bin Binarios de comandos esenciales
boot Archivos estáticos de cargador de arranque(boot-loader)
dev Archivos de dispositivos
etc Configuración del sistema local-máquina
home Directorios home de los usuarios
lib Librerías compartidas
mnt Punto de montaje de particiones temporales
root Directorio hogar del usuario root
sbin Binarios del sistema esenciales
tmp Archivos temporales
usr Segunda jerarquía mayor
var Información variable
'/usr' es la segunda mayor sección del sistema de archivos. '/usr' es
información compartible, de solo lectura, esto significa que '/usr',
debe ser compartible entre varias maquinas que corren LINUX y no se
debe escribir. Cualquier información que es local a una máquina o
varía con el tiempo, se almacena en otro lugar.
/usr --- Segundo mayor punto de montaje (permanente)
X11R6 Sistema X Window Version 11 release 6
X386 Sistema X Windows Version 11 release 5 en plataformas X 86
bin La mayoría de los comandos de usuario
dict Listas de palabras
doc Documentación miscelánea
etc Configuración del Sistema (todo el site)
games Juegos y binarios educacionales
include Archivos header incluidos por programas C
info Directorio primario del sistema GNU Info
lib Librerías
local Jerarquía local (vacía justo después de la instalación principal)
man Manuales en línea
sbin Binarios de Administración del Sistema No-Vitales
share Información independiente de la arquitectura
src Código fuente
La jerarquía '/usr/local' está para ser utilizada por el administrador
del sistema cuando se instale el software localmente. Necesita estar
a salvo de ser sobreescrito cuando el software del sistema se
actualiza. Puede ser usado por programas y por información que son
compartibles entre un grupo de máquinas , pero no se encuentran en
'/usr'.
/usr/local Jerarquía local.
bin Binarios solo-locales
doc Documentación local
etc Binarios de configuración solo-local
games Juegos instalados localmente
lib Librerías para /usr/local
info Páginas de info local
man Jerarquías de páginas de manual para /usr/local
sbin Administración del sistema solo-local
scr Código fuente local.
El sistema necesita con frecuencia una zona de trabajo temporal. Si
solo se requiere usar un espacio por un corto periodo de tiempo se
puede usar '/tmp', pero muchas veces la información conviene manejarla
y almacenarla en un lugar más permanente. El sistema puede sufrir una
caida repentina y el contenido de '/tmp' puede ser borrado durante el
arranque o depurado regularmente mediante algúna tarea periódica. Por
el contrario '/var' contiene todo tipo de información alguna de ella
puede ser importante. Por ejemplo información vital para el mantenimiento
de la gestión de paquetes de la distribución o mensajes pendientes de
ser enviados por correo, archivos y directorios en fila de ejecución,
información de bitácora administrativa y archivos temporales y transitorios
aunque se asume que su permanencia será mayor que '/tmp'
/var Información variable
catman Páginas del manual formateadas localmente
lib Información del estado de aplicaciones
local Información variable del software de /usr/local
lock Archivos de bloqueo
log Archivos de bitácora
named Archivos DNS, solo red
nis Archivos base de datos NIS
preserve Archivos almacenados después de una falla de ex o vi
run Archivos relevantes a procesos ejecutándose
spool Directorios de trabajos en fila para realizarse después
tmp Archivos temporales, utilizado para mantener /tmp pequeño
Puede comprobar sus conocimientos respondiendo el siguiente test.
Para ello seleccione las opciones que se ajusten a la verdad y luego
pulse el boton para ver el resultado de su test.
Si quiere hacernos llegar alguna duda, aclaración,
crítica, o contribución personal, utilice nuestro
formulario de contacto y nosotros le contestaremos