. | . |
SISTEMA DE FICHEROS
====================
Un sistema de ficheros en Unix tiene una estructura de arbol y parte de
un lugar especial llamado root (raiz) que se simboliza por '/'. (Ojo el
super usuario también se le llama root pero es solo una coincidencia).
Un nombre de fichero puede contener cualquier
caracter pero no es prudente usar caracteres especiales interpretados por la
shell ($.",&,(,),*, etc..) Tampoco debe empezar por el caracter '-' que
puede ser confundido con una opción. Por ejemplo si llamamos a un fichero
'-r' no solo no podremos borrarlo sino que se puede confundir con la
peligrosisima opción -r de borrado recursivo.
Cuando un usuario es dado de alta se define la shell por defecto que usará
y el directorio de entrada. Este directorio de entrada al sistema será el
valor de la variable $HOME.
En cada subdirectorio hay dos entradas como mínimo que son '.' y '..' que
referencian respectivamente al subdirectorio actual y al subdirectorio
padre. (Cuando no tenemos en la variable PATH referenciado el subdirectorio
actual tendremos que ejecutar los comandos de nuestro directorio actual
mediante ./comando)
El caracter '/' se utiliza para separar los diferentes componentes de un
nombre de fichero.
Cuando usamos un nombre de fichero que empieza por '/' se llama nombre de
camino completo o nombre de camino absoluto. Si por el contrario empieza por
'.', por '..', o por un nombre se denominara nombre de camino relativo,
porque su utilizacion depende del subdirectorio actual donde nos encontremos.
Relación de comandos más importantes para manejar el sistema de
ficheros.
ls Muestra el contenido de direcctorio actual.
cd Cambiar a un subdirectorio.
mkdir Crea uno o mas directorio.
rmdir Borra uno mas directorios.
cp Copiar uno o mas ficheros al ultimo de la lista.
Si mas de dos el ultimo debe ser un directorio.
mv mover o renombrar ficheros al ultimo de la lista.
Si mas de dos el ultimo debe ser un directorio.
rm borrar la lista de ficheros.
pwd muestra el camino absoluto del directorio actual.
chmod Cambia los permisos de un fichero.
chown Cambia el propietario de un fichero.
chgrp Cambia el grupo de un fichero.
du Ocupacion de un fichero
df Sistemas de ficheros y ocupacion.
tree Listado recursivo
tree -d Mostrar arbol de directorios
Recuerde que tiene a sus disposición el comando man para consultar las
distintas opciones de cada uno de estos comandos.
El comando 'cd' es un comando interno que sirve para cambiar de directorio
actual. Existe otro comando interno llamado 'alias' que sirve para algo
que no tiene que ver con el sistema de ficheros y sin embargo lo
mencionaremos aquí por razones prácticas. En muchos sistemas parecerá
que existe la disponibilidad de usar un comando 'll' que sirve para
mostrar un directorio con abundante información. En realidad se trata
de un alias. Usted puede verificar los alias definidos para su usuario
tecleando alias sin argumentos. Generalmente se usa para abreviar el
uso de comandos muy utilizados. Esto puede resultarle de interes para
personalizar su entorno. Cuando el interprete de comandos arranca
se ejecutan una serie de ficheros /etc/profile, ~/.bash_profile,
~/.bash_login, y ~/.profile en este orden. En .bash_profile suele
existir una parte que pregunta por la existencia de un ~/.alias y en
caso afirmativo lo ejecuta. Este fichero ./alias contiene una serie de
comandos de alias que permaneceran disponibles durante su sesión de
trabajo con esa shell. Podría parecer que estamos obsesionados con la
shell y que no sabemos hablar de otra cosa pero solo queremos
proporcionale ahora unos consejos prácticos que le faciliten el uso
de su sistema. Para ello tendría que editar el fichero .alias presente
en su $HOME y añadir las líneas siguientes:
alias ll='ls -lrt --color=auto'
alias ll.='ls -adlrt --color=auto .[a-zA-Z0-9]*'
alias ls='ls --color=auto'
alias ls.='ls -adrt --color=auto .[a-zA-Z0-9]*'
alias md='mkdir'
alias mv='mv -i'
alias rd='rmdir'
alias rm='rm -i'
Puede ejecutar cualquiera de estos alias ahora mismo, por ejemplo
alias ll='ls -lrt --color=auto'
Luego teclee el comando alias. Comprobará que queda definido.
Teclee el nuevo comando 'll' y compruebe su efecto.
Para eliminar una definición de alias utilize el comando 'unalias'
En nuestro caso.
unalias ll
Para no tener que teclear manualmente cada vez cada uno de estos
alias es para lo que sirve el fichero .alias.
Si no sabe editarlo tendrá que esperar a que expliquemos el manejo
del editor 'vi' y volver a esta sección para modificar su fichero
./alias. Los alias serán definidos la próxima vez que entre en una
nueva sesión. Expliacremos las ventajas de usar algunos de los alias
que acabamos de proponerle.
ll Los ficheros más interesantes son generalmente los más recientes
y para evitar que desaparezcan durante un scroll largo los mostraremos en
último lugar. La opción de color auto colorea la salida del comando
únicamente si la salida ocurre en el terminal.
ll. Sirve para listar ficheros que empiezan por un punto y
después tienen una letra o dígito como segundo caracter. Normalmente
los ficheros de configuración de su usuario se encuentran en su $HOME
y utilizan nombres de este tipo que no aparecen en la expansión de
un '*'.
rm Este alias evita usar 'rm' tal cual está añadiendole la
opcíon -i para confirmar antes de borrar. Realmente util. Es muy
recomendable usar 'rm' por defecto de esta forma. Si no desea ser
interrogado a cada fichero si realmente desea borrarlo o no,
utilice este alias tal como está pero añadiendo la opción -f.
rm -f borrará silenciosamente todo lo que usted
ordene que no tiene que coincidir con todo lo que usted supone que
ha ordenado. En especial si no pone cuidado al usar la expansión de
ordenes de la shell. La respuesta a la pregunta de como recuperar
un fichero borrado accidentalmente es... 'Ja, Ja, Ja. De ninguna forma.
Cosas de Unix y Linux. Tenga más cuidado la próxima vez'.
Hay brogramas de borrado que usan papeleras y quizas piense en poner
un alias de rm para que use uno de estos programas. Esto introduce
ineficiencia en el sistema pero puede hacerse a nivel de usuario.
Lo más correcto es usar una buena política de copias de seguridad.
mv Se trata de mover información pero aplicamos el mismo
principio que para 'rm'.
Ejemplos:
cd /tmp
mkdir kkkk
cd kkkk
echo xx > kk1
echo xx > kk2
echo xx > kk3
mkdir kkkk
cd kkkk
echo xx > kk1
echo xx > kk2
echo xx > kk3
mkdir kkkk
cd kkkk
echo xx > kk1
echo xx > kk2
echo xx > kk3
cd /tmp/kkkk
ll -R .
tree -d
tree
du .
df
Para borrar todo esto se suele usar la opción de borrado recursivo.
No debe usar esta opción como root sin estar muy seguro de lo que hace.
Esta opción borra recursivamente y es muy peligrosa porque un error
puede borrar recursivamente desde un lugar equivocado un montón de
información. No es necesario borrar nada porque en /tmp la información
suele borrarse durante el arranque. Si quiere intentarlo con las
precauciones mencionadas teclee 'rm -fr /tmp/kkkk'.
Problema:
# Influido por el MSDOS un usuario teclea el comando que sigue.
# Lo que pretendia era copiar los ficheros del subdirectorio 'seg' al
# subdirectorio actual. ¿ Que es lo que va a suceder realmente con este
# comando ? ¿ Cual deberia haber sido la orden correcta?
cp seg/*
Para que los comandos anteriores puedan funcionar correctamente deberemos
tener los permisos adecuados sobre los ficheros y los subdirectorios.
Sistema plano de ficheros.
--------------------------
La estructura en forma de arbol tiene el inconveniente de que se
requiere ir recorriendo el arbol para ir localizando cada uno de
los elementos. Por ello se hace necesario un sistema mucho más directo.
A cada ficheros se le asocia un número para poder localizarlo directamente.
Dicho número se llama inodo. Los números de inodos son el indice del
sistema plano de ficheros, también llamado por ello tabla de inodos
Cada fichero de cada sistema de ficheros tiene
un inodo distinto salvo que se trate de un enlace duro. Sin embargo hay
inodos que no se corresponden con ningun fichero. Un fichero indica
cabacidad de contener una secuencia de bytes. Un inodo indica básicamente
la capacidad de tener un nombre asociado al sistema de ficheros.
Un fichero tiene asociadas funciones de posición y de lectura y escritura
de información dentro del fichero. Un inodo es una referencia muy directa
a un fichero y a grandes rasgos tiene asociadas funciones que permiten
manejar y construir la estructura de arbol del sistema de ficheros.
Tipos de ficheros:
------------------
1) Regular
2) Directorios Son una tabla con numeros de inodos y nombres de
ficheros.
3) Ficheros especiales. Pueden ser dispositivo tipo caracter o
dispositivo de bloques. El manejo de estos ficheros depende del
dispositivo en particular.
4) Fifo son pipes con nombre. Son propios de System V y en BSD no
existen.
5) Enlaces (links) simbólicos. Son ficheros que contiene un
puntero a otro fichero que podría perfectamente estar en un
sistema de ficheros distinto.
6) El Soket es un fichero especial de 4.3 BSD.
7) Enlaces (links) duros. Realmente es un único fichero que puede
ser visto con distintos nombres dentro de un mísmo sistema
de ficheros. Es decir se pueden observar como si fueran
ficheros identicos con el mismo inodo. La información reside
en un mismo lugar y lo que ocurra aparentemente en un sitio
ocurrirá instantaneamente en el otro lugar. Los enlaces de este
tipo no pueden ocurrir entre sistemas de ficheros distintos.
Permisos de ficheros
--------------------
Permiso de ficheros. Es similar a permisos de procesos.
El comando 'chmod 4000' pone el bit setuid on execute.
El comando 'chmod 20#0 pone el bit setgid on execute si '#' es 7 5 3
o 1 y Enable mandatory lock si el '#' es 6 4 2 o 0. Cada proceso
tiene un (R)UID, (R)GID, EUID, y EGUID. Cada fichero tiene un UID y
un GID owner.
El Kernel realiza el siguiente test para conceder a un proceso el acceso
de cierto tipo a un fichero.
1) Si el EUID del proceso es 0 se da acceso.
2) Si el EUID del proceso es igual al UID del owner (propietario del
fichero) se concede el acceso si los permisos de usuario rwx son los
adecuados.
3) Si el EUID del proceso es distinto al UID del owner, y si el EGID
del proceso es igual al GID del owner, se concede el acceso si los
permisos de grupo rwx son los adecuados.
4) Si el EUID del proceso es distinto al UID del owner, y si el EGID
del proceso es distinto al GID del owner, se concede el acceso si
los permisos de others rwx son los adecuados.
NOTA el comando rm permite borrar cualquier fichero sea cual sean los
permisos cuando el proceso tiene un EUID coincidente con el propietario del
fichero. Unicamente ocurre que si el fichero esta protegido contra escritura
pedira confirmacion antes de borrarlo.
04000 Set uid on execute.
02000 Set gid on execute.
01000 Save text on image after execution.
00400 r owner
00200 w
00100 x
00040 r group
00020 w
00010 x
00004 r others
00002 w
00001 x.
Umask. Se utiliza cuando se crean ficheros.
Consiste en una mascara donde los bits a 1 especifican los bits de
permisos que se pondran a cero. Por lo tanto equivale a AND (NOT
umask). Ejemplo si queremos abrir un fichero con permisos 0664 y
tenemos una umask de 0022 obtendremos un fichero 0644.
0664 000 110 110 100
0022 000 000 010 010
-----------------------
0644 000 110 100 100
Sinificado de los permisos en directorios:
------------------------------------------
Hay que imaginar que un directorio es un fichero normal que solo contiene
una tabla en la que se relacionan los ficheros que contiene como entradas
de dicha tabla. Por ello si un directorio no tiene permiso de lectura,
resultara imposible hacer ls en el (. unreadable)
Si no tiene permiso de escritura no se podra dar altas, baja o modificaciones
en la tabla lo que se traduce en que no se pueden borrar sus ficheros ni
crear otros nuevos, ni renombrar ficheros.
Si no se tiene permiso de ejecucion en un directorio no se podra hacer cd
a ese directorio, ni a ninguno de los directorios que cuelgan de el.
MONTADO DE DISPOSITIVOS
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. (mount, umount)
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.
Supongamos que tenemos en un dispositivo cdrom, cinta, disquete, o lo
que sea la siguiente estructura de directorios.
.
|-- 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
|-- donde
`-- novato
Para poder acceder a esta informacion tendriamos 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.
.
`-- misc
|-- donde
`-- 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
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
realizada. 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
-----------------
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 interes 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.
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.
Los directorios representados por un número representan 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:
cat /proc/1/status
Obtendrá la información de estado más importante del proceso init.
Además de contribuir a la cultura general sobre nuestro sitema lo
que hemos mencionado sobre /proc nos sirve para introducir el siguiente
tema.
Sistema de ficheros virtual
----------------------------
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 particion de disco duro, en un dispositivo formado por varios
discos duros funcionando en paralelo y con un sistema de redundancia
para aumentar su fiabilidad (esto se llama RAID), en disquetes, en cdroms,
en un dispositivo remoto conectado a red, etc..
Tambien 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. 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 pero las funciones
que lo manejan quedan unificadas por el (VFS)
Estructura estandar del sistema de ficheros de Linux
-----------------------------------------------------
Existe un documento 'fsstnd12' donde se describe una recomendación
para estandarizar la estructura del sistema de ficheros de Linux
para ls distintas distribuciones. No sotros 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.
El directorio raiz
-----------------
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.
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.
Para restaurar un sistema, estarán presentes en el sistema de
archivos raíz aquellas herramientas necesarias para restaurar el
sistema desde respaldos (en floppy, cintas, etc.)
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 meta de mantener / (raiz) tan pequeno como
sea razonablemente posible.
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.
/ --- El Directorio Raíz
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
4 La jerarquía /usr.
/usr es la segunda mayor seccion del sistema de archivos. /usr es
informacion compartible, de solo lectura, esto significa que /usr,
debe ser compartible entre varias maquinas que corren LINUX y no se
debe escribir. Cualquier informacion que es local a una máquina o
varía con el tiempo, se almacena en otro lugar.
Ningun 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 --- 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
4.8 /usr/local: Jerarquía local
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.
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.
5. La Jerarquía /var
/var Información variable
adm Info administrativa del sistema (obsoleto). Enlace simbólico hacia /var/log
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
/var contiene archivos con información variable. esto incluye
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. /tmp puede ser vaciado durante
el proceso de arranque pero la información dentro de /var se suele respetar
porque suele tener un interés más duradero.
Si quiere hacernos llegar alguna duda, aclaración,
crítica, o contribución personal, utilice nuestro
formulario de contacto y nosotros le contestaremos |
|
| . |