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).

Ausencia de Garantía

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.

...
.. 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
contacto

.
....
...

Volver a la página anterior
Volver a la página principal de la tienda