Regresar a la pagina principal

Centro de Investigación y de Estudios Avanzados del I.P.N.

Apéndice

Introducción a Linux

Que es Linux


Historia


Características


Distribuciones más comunes: analogas y diferencias


Si Linux se puede distribuir libremente ó ¿por qué comprar una distribución?

Instalación

Particionar el disco

Creación de un disco de arranque para la instalación

Configuración

Conceptos básicos preliminares

Shells

Directorios

El Arranque de la instalación es de dos procedimientos: diskette y CD bootable

Particiones propias de linux y las soportadas.

Gestores de arranque: lilo y grub

Selección e instalación de paquetes

Primer arranque: login gráfico

Los entornos de escritorio KDE y GNOME: Analogas y diferencias

El gestor de ventanas

Escritorios virtuales y multi-escritorios

Sistemas de Ficheros

Permisos del Sistema y Politica de Grupos

Entorno Gráfico

Consolas Virtuales

Los tipos de shells: bash, sh, zsh, tcsh, ...

Los primeros pasos:

Manejando ficheros

Comandos de Linux

Administración básica (hay que ejectuar estos comandos como root):

Se me ha olividado la password de root, ¿que hago?




Que es Linux

Linux es, a simple vista, un Sistema Operativo.

Como sistema operativo, Linux es muy eficiente y tiene un excelente diseño. Es multitarea, multiusuario, multiplataforma y multiprocesador; en las plataformas Intel corre en modo protegido; protege la memoria para que un programa no pueda hacer caer al resto del sistema; carga sólo las partes de un programa que se usan; comparte la memoria entre programas aumentando la velocidad y disminuyendo el uso de memoria; usa un sistema de memoria virtual por páginas; utiliza toda la memoria libre para cache; permite usar bibliotecas enlazadas tanto estática como dinámicamente; se distribuye con código fuente; usa hasta 64 consolas virtuales; tiene un sistema de archivos avanzado pero puede usar los de los otros sistemas; y soporta redes tanto en TCP/IP como en otros protocolos.

.Es una implementación de libre distribución UNIX para computadoras personales (PC), servidores, y estaciones de trabajo. Fue desarrollado para el i386 y ahora soporta los procesadores i486, Pentium, Pentium Pro y Pentium II, así como los clones AMD y Cyrix. También soporta máquinas basadas en SPARC, DEC Alpha, PowerPC/PowerMac, y Mac/Amiga Motorola 680x0. En otros sistemas operativos, como Windows 95 y 98, no existe un paralelismo real, pues son los procesos los que se “ceden” el procesador. Por tanto, si un programa quiere acaparar el procesador no tendrá excesivos problemas para hacerlo. Pero Linux no solo asigna el tiempo de procesador entre los programas sino que también asigna de manera eficiente la memoria evitando que dos programas intenten escribir en la misma porción de memoria. Y en el último caso de que esto ocurra, el núcleo del sistema operativo para ambos procesos y en ningún caso reiniciará la máquina.

Un sistema multiusuario concurrente (o multiusuario) permite que varios usuarios utilicen la máquina simultaneamente, bien sea en local o en remoto, con su propio espacio de trabajo. En Windows 95/98/Me/NT se maneja el concepto de multiusuario secuencial, esto significa que el sistema puede albergar varios usuarios pero nunca simultaneamente.

GNU/Linux es multiplataforma porque existen versiones para PC, PowerPC, Sparc, Macintosh, Amstrad, ARM, Motorola 68K. La filosofía de las maquinas con administrador y usuarios, básicamente, se trata de un concepto muy sencillo: en el sistema habrá un administrador (root) encargado de realizar las tareas básicas de configuracián, mantenimiento e instalacián de nuevos programas, al servicio del resto de los usuarios. Este posee los privilegios de añadir, quitar y modificar características de cualquier otro usuario de la máquina.

Así mismo, como se ha dicho antes cada usuario dispone de su propio espacio de trabajo, individual e inviolable (salvo por el administrador, si se diera el caso), en el cual puede decidir si quiere compartir su trabajo con algún grupo dentro de la misma máquina o dejarlo privado para uso personal. Esto se consigue configurando los permisos del archivo.

El usuario root posee privilegios sobre todos los archivos del sistema. Por lo tanto, un despiste del administrador puede provocar que toda la información que tengamos sea borrada, cambiar archivos que no deberán tocarse, por lo que se recomienta trabajar como root solamente en caso de que sea indispensable.

Esta forma de trabajo permite que un usuario normal "juegue" con el sistema sin poner en peligro su integrad. La única información que podrá perderse será la propia del usuario, que se solucionará volviendo a generar su cuenta. Esto es ideal para que un usuario investigue las posibilidades de Linux, sin que esto pueda provocar perdidas en el sistema operativo.

Además, si algún programa es dañino para el sistema, por fallos en su ejecución, no podrá afectar a todo el sistema, como mucho a los ficheros del usuario. Este es uno de los motivos por los que apenas hay virus en sistemas unix ya que su distribución es muy dificil. Si se usa la máquina como un usuario normal, los virus no podrán borrar ni el disco duro, ni infectar programas del sistema, ni afectar a practicamente nada.

Apéndice

Historia

Fué creado originalmente por Linus Torvalds en 1991, en la Universidad de Helsinki, en Finlandia, a diferencia de Windows y otros sistemas operativos propietarios, ha sido desarrollado por miles de usuarios de computadoras de todo el mundo, contribuyendo todos con el fin de conseguir un sistema operativo confiable, robusto, poderoso, fiable, seguro e interactivo.

La intención de este sistema operativo es el de traer libertad a los usuarios, de liberarlos de los intereses del sector comercial y de traer, por consecuencia, software funcional, robusto y que realmente atienda las necesidades de los usuarios, este no se basa para ser un producto más de la competencia.

El significado de GNU/Linux es que uno, ya conocemos Linux, el otro, GNU es el nombre del proyecto que creó a la licencia GPL . GNU significa "GNU is Not Unix" , el cuál es un acrónimo muy ingenioso.

En 1991, Linus Benedict Torvalds, estudiante de la Universidad de Helsinki, estrenó la versión 0.02 de su sistema operativo Linux. Desde entonces millones de usuarios en todo el mundo poseen este sistema gratuito y muchos de ellos contribuyen a su continuo desarrollo, aportando programas, información, etc...

La idea de crear un sistema GNU (General Public License) y el código fuente disponible gratuitamente, surgió en 1991 cuando Linus Torvalds estudiaba la carrera de ciencias informáticas. Linus Torvalds se había interesado en Minix, el único sistema Unix disponible en aquel entonces. Este sistema gratuito había sido creado por Andrew Tanenbaum con el propósito de facilitar a los alumnos de la universidad el estudio y diseño de sistemas operativos. Minix era un Unix más, tanto en apariencia como en el kernel, pero distaba mucho de ser comparable a uno de los grandes. A partir de ese momento Linus Torvalds decidió crear un sistema que excediera los estándares de Minix, poniendo en marcha el proyecto Linux.

Torvalds tomó sus primeras clases de C y Unix en 1990 y en poco tiempo empezó a utilizar el sistema operativo Minix en su nuevo 386. Linux evolucionó del simple programa Hello World! a una terminal. durante mucho tiempo Torvalds trabajó sólo, hasta la mñana del 3 de Julio de 1991 cuando pidió ayuda a través de Internet. Al principio fueron unos pocos los que le apoyaron, pero al poco tiempo muchos otros internautas se unieron al proyecto. En uno de los primeros e-mails enviado por Torvalds refiriéndose a Linux, informaba sobre su proyecto como si fuera un hobby, nada tan grande ni comparable a GNU.

Linus Torvalds se encontró con muchos problemas a lo largo de la programación del kernel (núcleo del sistema). Pero Linux empezó a disponer de controladores para los dispositivos y un funcionamiento correcto del disco el 3 de Julio, unas horas después de enviar su primer e-mail informando sobre su proyecto. Dos meses más tarde Linux empezaba a funcionar y el código fuente de la primera versión (v0.01) ya estaba disponible. La versión 0.01 incluía la bash shell 1.08 y gcc 1.40. El cual no era ejecutable.

Pronto empezó a recibir e-mails de internautas interesados en ser beta-testers de Linux y sus nuevas versiones. También empezó a recibir una avalancha de preguntas sobre su nuevo sistema operativo gratuito. Una de las preguntas mas comunes era si Linux se podía portar a otras arquitecturas, cosa que el respondía que no, ya que estaba hecho en gran parte en C y utilizaba 386 MMU. También informó de los dispositivos y programas que Linux podía utilizar, que por aquellos momentos se trataba de gcc, bash shell y la mayoría de utilidades GNU. Uno de los problemas se debía a que los disquetes aún no funcionaban, pero Linux ya empezaba a superar a Minix en algunos aspectos, de tal forma que el proyecto de Torvalds marchaba por buen camino.

El anunció la versión 0.02 de Linux el 5 de Octubre de 1991. Linux v0.02 ya incorporaba archivos binarios y se podía ejecutar las bash shell, gcc, GNU-make, GNU-sed, compress, etc. Quien estuviera interesado en el código fuente del kernel, algunos binarios (como bash, gcc, etc.) y unos cuantos archivos de ayuda, podían descargarlo de nic.funet.fi.

Linux había progresado de forma considerable en muy poco tiempo, pero aún quedaban muchos arreglos por hacer. Aún no podía funcionar por sí solo, ya que necesitaba el uso de Minix-386, por lo que aún no podía considerarse como un sistema operativo. También necesitaba el uso de un disco duro AT-compatible (IDE funcionaba) y tarjetas EGA/VGA. Durante el proceso de desarrollo Torvalds comenzó a recibir e-mails con bugs que los usuarios habían encontrado en Linux.

La versión 0.03 pronto apareció y parecía funcionar sin problema alguno. Durante esas semanas el proyecto sufrió un avance muy importante, hasta llegar a la versión 0.11, donde algunos usuarios confirmaban que ya se podía comparar con Minix-386 e incluso indicaban que resultaba superior en algunos aspectos. La versión 0.11 aún no soportaba dispositivos SCSI y tampoco se podía utilizar init/login, de tal forma que se accedía al sistema como usuario root (superusuario, es el usuario que administra el sistema) directamente. La versión 0.11 necesitaba como mínimo 2MB para funcionar pero sin poder compilar y 4MB si se pensaba utilizar binarios GNU.

Durante las navidades de 1991 apareció la versión 0.12 y Torvalds la definió como un sistema "divertido" de hackear, utilizable en 386/486, sistema libre y mejor que el Minix en muchos aspectos. Linus Torvalds fué recibiendo e-mails de personas que consiguieron hacer funcionar el kernel de Linux en sus ordenadores. El código fuente de Linux, además de algunas de sus utilidades ya estaba disponible en otros servidores ftp.

Se creó una nueva lista de correo sólo para Linux, en la que todo usuario interesado en este proyecto podía intercambiar información, ideas, noticias, etc. con el resto de los usuarios. Con v0.12 ya se podía hablar de Linux como un sistema operativo ya que no requería el usuo de Minix para configurarlo. Con esta nueva versión, muchos dispositivos de hardware nuevos funcionaban correctamente y no hubo necesidad de implementar ningún patch (pequeño programa escrito normalmente en C que areegla o "tapa" algún bug encontrado) por mucho tiempo.

Apéndice

Características

Intercambio de data/código entre dos procesos diferentes.
Mejora en el uso de los disquetes.
Correcciones de bugs.
Utilidades: mkfs, fdisk y fsck.
Teclados US/German/French/Finish.
Com1 y Com2 funcionaban correctamente.
init/login finalmente funcionaban.
En muy poco tiempo apareció la siguiente versión de Linux, pero no se denominó v0.13, Torvalds pensó que Linux se merecía estar en los 0.90´s y decidió llamarlo v0.95, pero contenía gran cantidad de bugs. Todos estos bugs se convirtieron en patchs y gracias a ellos salió la versión v0.96, mucho más estable.
Linux se convirtió en un sistema mucho más fácil de instalar y configurar, y empezó a coger fama en todo el mundo. Al tener en muy poco tiempo miles de usuarios, las nuevas versiones de Linux salían casi semanalmente. En el presente hay millones de usuarios y gracias a ellos y a sus aportaciones, Linux crece sin respiro alguno. La última versión del kernel es la 2.6.0 test 1.
Como todos los sistemas operativos, Linux también dispone de un logotipo. Torvalds decidió que la imagen que representaría a Linux sería la de un pingüino. En casi todas las páginas webs relacionadas con Linux se puede hallar el logotipo y ya ha sido aceptado como representante de este sistema. No se sabe con certeza cuándo diseñó el logotipo de su sistema, pero se dice que fué al principio del proyecto Linux.
Linux había nacido para ser un sistema operativo del tipo Posix (variante de Unix), totalmente gratuito para el usuario y con libre acceso al código fuente. Estas tres ideas fueron las que lo han convertido en el sistema con mejor rendimiento, más fiable, veloz y con más desarrolladores del mundo. Pronto se ha colocado cerca de los grandes los grandes sistemas operativos como Unix en el ámbito de servidores de comunicaciones, especialmente utilizado en empresas proveedoras de acceso a Internet.
Las versiones más recientes de Linux ofrecen la posibilidad de convertir nuestro ordenador personal en una potente estación de trabajo. Puede funcionar como workstation personal dándonos la posibilidad de acceder a las prestaciones que ofrece Unix y cualquier otro.

Apéndice


Distribuciones más comunes: analogas y diferencias

Clasificar a las distintas distribuciones que hay es una ardua tarea, pues hay que tener en cuenta que actualmente existen más de 160 distribuciones distintas activamente en desarrollo y 7 grandes distribuciones con la mayor parte de los usuarios (Puede consultarse una extensa lista en http://www.linux.org/dist/index.html).

Sin embargo todas ellas tratan de seguir un estandar común que contribuya a una uniformidad en las distribuciones. Así un usuario que sepa manejar Red Hat, también sabrá manejar Suse, Mandrake, Debian, etc. Este estandar es el LSB (Linux Standard Base - www.linuxbase.org), que está desarrollado por el "Free Standards Group" y apoyado por distintas empresas. No es obligatorio seguir estas directivas para que un sistema sea considerado una distribución de Linux, pero en ese caso perderá compatibilidades con ciertos programas diseñados para Linux. En el LSB se tratan muchos aspectos:

1) Tratan de conseguir un API (Application Program Interface) unificado. De este modo un programa sabe de qué componentes dispone y el programador puede reutilizar código. Y no sólo se trata especificar una serie de librerías o programas base, sino que además espeficica como debe ser el árbol de directorios para que el programa sepa en que sitio ha de instalar sus componentes. Hay que aclarar que en Linux los programas no suelen disponer de espacio propio (es decir, no dispone de un directorio propio), sino que las librerías se instalan en directorios comunes, los ejecutables en otros directorios, los ficheros de configuración en otros.

2) Además para cada uno de los componentes de la API se ha de escribir un documento detallado que refleje exáctamente su comportamiento.

3) Añadir nuevos componentes que se hayan convertido en estándares de facto.

4) Añadir elementos que permitan una mayor compatibilidad entre las distintas plataformas.

Además hay que recordar, que como GNU/Linux es un sistema operativo diseñado para ser compatible con UNIX hay muchas analogías entre ambos sistemas. Por ejemplo, hay muchos programas comunes y la forma de estructurarlo es muy similar.

Las principales diferencias entre distribuciones se encuentran en los sistemas de paquetes que utilizan y los programas propios que incluyen. También existen ligeras diferencias en la forma en la que se guardan los ficheros en el árbol de directorios.

Un paquete, de forma general, puede definirse como un programa ya compilado y listo para su uso. Además existe un gestor de paquetes que sabe cómo instalar el paquete y cómo desinstalarlo. Esto es equivalente al asistente de instalación de Windows, pues recordemos que el programa se "disparse" por todo el disco duro. También hay paquetes que contienen las fuentes del programa, que se utilizan para compilar el programa en sí, pero manteniendo la estructura del paquete, de modo que mantiene ordenado a todo el sistema.

Aunque hay otros sistemas de paquetes, los mas avanzados y extendidos son: RPM (RedHat Package Manager) y DEB (paquetes de Debian).

El problema con los RPM's (que en distribuciones más actuales se está desarrollando) son las dependencias. Un paquete puede necesitar de otros antes de instalarse. Los sistemas RPM´s no resuelven eso automáticamente, de forma que al instalar un paquete, si necesitamos alguna librería, tendremos que buscar el paquete que la contiene, instalarla ... y así hasta terminar. Este problema no existe con el sistema de paquetes DEB, pues incluye programas que realizan el análisis de dependencias y descargan los paquetes requeridos automáticamente.

Otro punto de diferencia entre distribuciones es el sistema de instalación. Como todo programa, cuanto más sencilla es la instalación más decisiones toma el programa en nombre del usuario. De este modo nos podemos encontrar con instalaciones muy sencillas que preguntan lo mínimo para ser instalado (Mandrake, Suse, RedHat, ...) o bien otras que demandan al usuario que elija entre distintas opciones (Debian, Slackware, ...). Además existen aún algunas distribuciones cuya instalación es en modo texto (Debian y Slackware, por ejemplo) que hacen que sea desconcertante e incluso "desagradable".

Apéndice


Si Linux se puede distribuir libremente ó ¿por qué comprar una distribución?

Es totalmente legal copiar una distribución de Linux (siempre que se distribuya bajo licencia GPL), incluso modificarla y venderla despúes. Sin embargo al adquirir una distribución se obtienen algunas ventajas:

* manuales impresos

* soporte técnico (asistencia en caso de problemas)

* posibilidad de pedir software específico. Muy útil para empresas


La mayor parte de los ingresos de la industria del software provienen en la actualidad de la "venta" de soporte técnico (durante un cierto tiempo) a las empresas.

Apéndice


Instalación

Particionar el disco duro.

El proceso de particionado se realiza para destinar espacio del disco duro para instalar Linux. Lo más interesante es encontrar una herramienta que nos permita redimensionar el espacio ocupado por Windows, para que de este modo no se pierdan los datos ni haga falta reinstalar todo.

Mandrake incluye esta herramienta en el proceso de instalación, aunque sólo es capaz de redimensionar sistema de ficheros FAT y FAT32 no pudiendo redimensionar NTFS, que es el sistema de ficheros que usa Windows NT y Windows XP.

Si se usan particiones NTFS y no es posible reinstalar el sistema operativo se puede recurrir a programas propietarios como "Partition Magic" que si son capaces de cambiar tamaños de particiones de este tipo.

El número de particiones mínimas para linux es 2: "swap" y el "raíz". Aunque lo recomendable es siempre hacer 3 partes: “swap”, “raíz” y “home”.


- Swap: esta partición lleva un sistema de ficheros propio y se usa en caso de que la memoria RAM se agote. Lo normal es que se le reserve un espacio equivalente a 2 veces la memoria RAM y como máximo 4 veces su tamaño. Sin embargo, dada la cantidad de memoria de los ordenadores actuales (256 MB) una partición swap de 100 MB es más que suficiente.

- Raíz: se representa como "/" y es el lugar a de donde cuelgan los subdirectorios del sistema. Será el equivalente al "c:" de Windows. Un tamaño ideal para albergar el sistema operativo es de 2 GB. Un tamaño aceptable sería entorno a 1 GB. Por debajo de ese tamaño se hacen falta muchos programas gráficos.

- Home: esta tercera partición se hace para que, en caso de que se tenga que reinstalar el sistema operativo, no se pierdan los datos de los usuarios. Esto en linux resulta comodisisimo, y sería equivalente a poder reinstalar windows dejando todos los datos de usuario y configuraciones intactas.

En el caso de Mandrake, el sistema de instalación decide el tamaño más recomendable para cada partición.

Apéndice

Configuración


Creación de un disco de arranque para la instalación

En caso de que un ordenador no sea capaz de arrancar el CD-ROM o bien porque surja algún problema arrancado con el mismo, siempre existe la posibilidad de crear un diskette de arranque de la instalación. Para ello nos ayudamos de la herramienta "rawrite.exe". Habitualmente en el primer CD-ROM de la instalación estan las imágenes de los diskettes.

* CPU: Su computadora debe tener un procesador 386, 486, Pentium, Pentium Pro, Pentium II o uno de los clones de estos procesadores hechos por fabricantes como Cyrix, AMD, TI, IBM, etc. Si su procesador tiene letras como "sx", "sl", "slc", etc. después del número, como en "386sx", es correcto. El sistema no funcionar en un 286 o en procesadores inferiores.

* Bus de E/S: Su computadora debe utilizar el bus ISA, EISA, PCI, o VL. El bus VL se conoce también como VESA Local Bus o VLB. Las computadoras que tienen PCI o VLB generalmente tienen también ranuras ISA o EISA.

* RAM y Disco Rígido: Debe tener al menos 4MB de RAM aunque es recomendable no menos de 16MB y 40MB de disco duro. Pero si usted quiere instalar todo necesitar 400MB. Las interfaces de disco que emulan la interfaz de disco "AT" que se llaman habitualmente MFM, RLL, IDE, o ATA están soportados. Las controladoras de disco SCSI de diversos fabricantes están soportadas.

* Unidad de disquete: Debe tener una unidad de disquete de 1.2MB o 1.44MB como unidad a: en el sistema en el que instale Linux. Si tiene tanto una unidad de 1.2MB como una de 1.44MB, configure el hardware para que la unidad de 1.44MB sea la a:.

* MPC: Como casi todas las distribuciones de Linux vienen en CD-ROM necesitaremos una lectora que puede ser IDE, SCSI o con norma propia como alguna Sanyo o Mitusmi.

* Placa de video: Aunque soporta desde una hercules, es recomendable usar una placa de video compatible con VGA para el terminal de la consola. Prácticamente cualquier tarjeta gráfica moderna es compatible con VGA. CGA, MDA, o HGA pueden funcionar correctamente para texto, pero no funcionarán con el Xwindows.

* Otro Hardware: Linux soporta una gran variedad de dispositivos como son: ratones, impresoras, escáners, módems, tarjetas de red, etc. Sin embargo, no se requiere ninguno de estos dispositivos durante la instalación del sistema
Apéndice

Conceptos básicos preliminares

Para entender mejor Linux muchas veces haremos comparaciones con DOS, así que aquí van algunas consideraciones acerca de MS-DOS o Linux. Muchos usuarios de Linux confían en MS-DOS para aplicaciones tales como procesadores de texto. Aunque Linux proporciona sus propios análogos para estas aplicaciones, existen varias razones por las que un usuario concreto desearía correr tanto MS-DOS como Linux. Hay muchas aplicaciones comerciales para MS-DOS que no están disponibles todavía para Linux, y no hay ninguna razón por la que no pueda usar ambos.

MS-DOS ni Windows/95 no utiliza completamente la funcionalidad de los procesadores 80386 y 80486. Por otro lado, Linux corre completamente en el modo protegido del procesador y explota todas las características de este. Puede acceder directamente a toda su memoria disponible (e incluso mas allá de la disponible, usando RAM virtual

Podríamos debatir los pros y contras de MS-DOS y Linux durante paginas y paginas. Sin embargo, baste decir que Linux y MS-DOS son entidades completamente diferentes. MS-DOS no es caro (comparado con otros sistemas operativos comerciales), y tiene un fuerte asentamiento en el mundo de los PC's. Ningún otro sistema operativo para PC ha conseguido el nivel de popularidad de MS-DOS, básicamente porque el coste de esos otros sistemas operativos es inaccesible para la mayoría de los usuarios de PCs. Muy pocos usuarios de PC pueden imaginar pagar lo que cuesta por ejemplo un Solaris.

Podrá emitir sus propios juicios de Linux y MS-DOS basados en sus expectativas y necesidades. Linux no esta destinado a todo el mundo.

Este capitulo no presentara gran cantidad de detalles ni cubrirá temas muy avanzados. Esta pensado para permitir al nuevo usuario de Linux comenzar a usar el sistema y situarlo en una posición en la que pueda leer libros mas generales sobre UNIX y entender las diferencias básicas entre otros sistemas UNIX y Linux.

A primera vista, UNIX se parece a MS-DOS (después de todo, partes de MS-DOS fueron tomadas de CP/M, el cual fue a su vez inspirado en UNIX incluso muchas de las novedades que Windows 95 pretende presentar son características de los sistemas UNIX). Pero, solo las características superficiales de UNIX se parecen a MS-DOS.

Como ya dijimos, Linux es un sistema operativo multitarea y Multiusuario. Bajo UNIX, para que los usuarios puedan identificarse en el sistema, deben registrarse (login), proceso que consta de dos pasos: Introducir el nombre de usuario (login) (el nombre con que ser identificado por el sistema), y una palabra clave o contraseña (password), la cual es su llave personal secreta para entrar en la cuenta. Como solo usted conoce su palabra clave, nadie mas podrá logearse en el sistema con su nombre de usuario. Por esto es muy importante tomarse unos minutos para elegir una palabra clave que no sea fácil de adivinar o desencriptar, es común en los novatos usar palabras claves que tiene algo que ver con ellos, por ejemplo el nombre de la novia, esposa, madre, hija, fecha de nacimiento, numero de documento, hasta el nombre de su mascota, de esta manera los hackers usan diccionarios con nombres femeninos para lograr adivinar claves de usuarios desprevenidos.

En los sistemas UNIX tradicionales, el administrador del sistema asignara el nombre de usuario y una palabra clave inicial en el momento de crear la cuenta de usuario.

Además, cada sistema UNIX tiene un nombre del sistema (hostname. Este "hostname" le da nombre a la maquina, además de carácter y encanto, por ejemplo la mía se llama Amankay, (que es el nombre de una flor de la puna Jujeña) la anterior fue Newton y la anterior Leonardo. El nombre del sistema es usado para identificar maquinas en una red, pero incluso aunque la maquina no este en red, deberá tener un nombre.

Antes de poder usar el sistema, deber crear una cuenta de usuario. Esto es necesario porque no es buena idea usar la cuenta de root para los usos normales. La cuenta de root debería reservarse para el uso de comandos privilegiados y para el mantenimiento del sistema.

Apéndice

Shells

La forma de comunicarse entre el S.O., el hardware y el usuario es un Shell, en Linux, el m s difundido es "bash" que significa "Bourne again shell" aunque existen varios shells para todos los gustos. En la mayoría de las exploraciones en el mundo de UNIX, estar hablando con el sistema a través del uso de un shell. Un shell es simplemente un programa que toma la entrada del usuario (ej. las ordenes que teclea) y las traduce a instrucciones. Esto puede ser comparado con el COMMAND.COM de MS-DOS o el 4DOS para los mas exquisitos, los cuales efectúan esencialmente la misma tarea. El shell es solo uno de los interfaces con UNIX hay muchos interfaces posibles como el sistema X Windows, el cual le permite ejecutar comandos usando el ratón y el teclado.

Antes de continuar, deberíamos ver como salir del sistema. Desde la línea de comandos usaremos la orden "exit" para salir. Hay otras formas, pero esta es la más fácil.

Apéndice

Directorios

La mayoría de los sistemas UNIX tienen una distribución de ficheros estándar, de forma que recursos y ficheros puedan ser fácilmente localizados. Esta distribución forma el árbol de directorios, el cual comienza en el directorio "/", también conocido como "directorio raíz". Directamente por debajo de "/" hay algunos subdirectorios importantes: /bin, /etc, /dev y /usr, entre otros. Estos a su vez contienen otros directorios con ficheros de configuraci¢n del sistema, programas, etc. En particular, cada usuario tiene un directorio "home". Este es el directorio en el que el usuario guardara sus archivos. Usualmente, los directorios home de los usuarios cuelgan de /home y son nombrados con el nombre del usuario al que pertenecen.

El siguiente es un ejemplo de arbol de directorios en linux.
/________bin
|__dev
|
|__etc
|
|__home _______juan
| |
| |__pedro
|__
| lib
|__proc
|
|__tmp
|
|__usr _______X386
|
|__bin
|
|__emacs
|
|__
| etc
|
|__g++-include
|
|__include
|
|__lib
|
|__local_______
| | bin
| |
| |__emacs
| |
| |__etc
| |
| |__lib
|
|__man
|
|
|__spool
|
|__src_______linux
|
|__tmp


Desde una consola de MS-DOS escribimos:
rawrite [imagen] a:

En caso de duda siempre existe un README que aclara la sintaxis del comando o bien en caso de existir varias imágenes indica cual es la adecuada.

Apéndice

El Arranque de la instalación es de dos procedimientos: diskette y CD bootable

Antes de iniciar la instalación, es importante recordar que hay que cambiar la secuencia de arranque a la opción más conveniente. Lo normal es decirle al ordenador que primero arranque el CD y que luego arranque el sistema presente en el disco duro.

Para ello, entraremos en las opciones de la BIOS y luego en “Advanced BIOS Features”. Ahí cambiaremos la secuencia de arranque para que primero arranque el CD-ROM (o el disquete) y luego el disco duro.

Apéndice


Particiones propias de linux y las soportadas.

El sistema de ficheros es la forma en la que un sistema operativo graba físicamente los datos en el disco duro. El más conocido es el FAT32, que es el que usa Windows. Sus forma de organizar los datos consiste en mantener dos tablas (FAT's) al principio del disco en el que se escriben los nombres de los ficheros y la posición física de los mismo. De este modo, si el sistema operativo necesita abrir un fichero consulta la FAT (File Allocation Table) y luego salta a la posición del disco que le ha indicado la tabla.

  • EXT2: es el sistema de ficheros "estándar" de Linux. Incluye muchas mejoras respecto al FAT de Windows. En primer lugar, cada fichero o directorio contiene un campo específico en donde se le indican los permisos. De este modo se asegura que ningún usuario que no tenga permiso para leer o escribir el fichero lo haga de forma involuntaria. Pero la mayor ventaja que tiene sobre FAT32, es que los ficheros se guardan físicamente de forma secuencial. Este es un grave problema que acusa el FAT: los ficheros se van guardando a medida que el sistema encuentra espacios libres, de modo que un mismo fichero puede estar fragmentado y repartido por todo el disco duro, obligando al cabezal del mismo a saltar muchas veces para recuperarlo, perdiendo rendimiento del sistema. Esto no ocurre en Linux, por lo que el sistema de ficheros siempre se mantiene defragmentado.
  • EXT3: este es el nuevo sistema de ficheros que se perfila como sustituto al EXT2. Su forma de trabajo es la misma que EXT2, con lo que se asegura su compatibilidad hacia atrás, y además se le añade un sistema de "journaling". Esto significa que mientras el sistema operativo realiza acciones sobre el disco duro escribe en un fichero especial qué ya ha realizado y ha de realizar aún. Esto es útil porque en caso de desastre (apagán repentino) Linux sabe que tareas le quedan por realizar, manteniendo contínuamente la integridad del sistema.
  • Reiserfs: Es un sistema de ficheros implementado partiendo de cero, pensando en la optimización y la inclusión de "journaling". Es extremadamente rápido para ficheros pequeños y directorios con multitud de entradas por la manera que tiene de optimizar los listados de las entradas de los directorios y los ficheros. Se encuentra soportado directamente en el kernel oficial, por lo que es una alternativa muy segura para el futuro y que siempre se va a seguir actualizando.
  • jfs: Es el sistema de fichero "journaling" de IBM. Posee características muy avanzadas, como optimización del movimiento de las cabezas de los discos. No viene incluido por defecto en el kernel, por lo que requiere parches y estar pendiente de actualizaciones por parte de IBM.
  • xfs: Es el sistema de fichero "journaling" de SGI (Sillicon Graphics). Es uno de los sistemas mas avanzados y muy probado ya que es el que viene con el Sistema Operativo Irix de SGI. Posee capacidades para asegurar anchos de banda según cada aplicación, ACLs y atributos extendidos, etc. No viene incluido por defecto en el kernel, por lo que requiere parches y estar pendiente de actualizaciones por parte de SGI, aunque se está intentando integrar en el kernel oficial. Además tiene la posibilidad de escribir y leer directamente sobre el disco duro, de modo que por ejemplo una base de datos podrán utilizar su propio sistema de ficheros optimizado.
  • nfs: Sistema de ficheros por red tradicional de máquinas Unix, equivalente a smb en sistemas windows.
  • CODA ADFS: Sistemas de ficheros por red avanzados, con mayor seguridad, rendimiento y posiilidad de desconexión para trabajo off-line.
  • Swap: tipo de partición en disco que Linux utiliza cuando sus recursos de memoria RAM son escasos.


Otros sistemas de ficheros soportados son: FAT, FAT32, NTFS (en desarrollo), Amiga FFS, Apple Macintosh FS, BFS, EFS, Minix, OS/2, Samba, ... Como se puede observar fácilmente Linux es capaz de manejar multitud de sistemas de ficheros por lo que su coexistencia con otros sistemas operativos está asegurada.

Apéndice


Gestores de arranque: lilo y grub

El gestor de arranque es el programa que se encarga de decirle al ordenador qué tiene que hacer para inicia Linux (o Windows). Además se usa para hacer arranques duales, es decir para seleccionar al principio si queremos usar Linux o Windows, sin que ello repercuta en el funcionamiento de ambos.

Los dos gestores más populares son LILO (Linux Loader) y GRUB. Siendo grub más potente, está muy difundido el uso de LILO pues es más sencillo.

Durante la instalación, normalmente, se preguntarán si se desean añadir otros sistemas operativos al arranque, facilitando la labor.

Existen dos sitios donde pueden residir estos programas: el Master Boot Record (MBR) o en los primeros sectores de la partición. Al arrancar el ordenador, lo que primero que hace es consultar el MBR para que le diga qué tiene que hacer. En caso de que no encuentre nada, el ordenador salta automáticamente a los primeros sectores del disco duro para tratar de cargar algún programa de arranque. Por tanto es indiferente donde se instale el Lilo, aunque lo normal es que se haga en el MBR. Si luego se desinstala Linux (grave error!!!!) se puede recuperar el MBR escribiendo desde la consola de MS-DOS:

fdisk /mbr

En caso de querer añadir un nuevo sistema operativo al arranque tras la instalación se ha de editar el fichero /etc/lilo.conf y añadir las siguiente líneas:

other=/dev/hda1 <--- esto le indica al Lilo donde está el otro S.O.

label=dos <--- esto le dice qué nombre recibirá al arrancar


No hay que olvidar que antes de reinicar el ordenador hay que ejecutar el comando "lilo". En caso de no hacerlo nos encontraremos ante un grave problema, aunque sea solventable. Al ser un fichero crucial para el sistema operativo sólo puede cambiarlo root, así que cuidado con lo que se hace.

Mandrake instala automáticamente el Lilo en el Master Boot Record, añadiendo todos los sistemas operativos presentes en el ordenador.

Apéndice

Selección e instalación de paquetes


Durante la instalación, la distribución nos preguntará qué paquetes deseamos instalar. Esto generalmente puede hacerse de dos formas: individualmente, paquete a paquete (lo que lo convierte en una tarea larga y tediosa), o por grupos (ofimática, desarrollo, entornos gráficos, red...). Por supuesto, se recomienda esta segunda opción.

Apéndice


Primer arranque: login gráfico

Al arrancar el sistema Linux, podemos elegir que el entorno gráfico se inicie automáticamente. Esto va a ser útil si lo vamos a utilizar siempre, pues nos ahorramos un paso a ejecutar tras iniciar la sesión como usuario.

Existen varios gestores que controlan la inicialización del modo gráfico: xdm, gdm, kdm...

Llegados a este punto, bastará con introducir como “login” el usuario que se creado durante la instalación, y su “password”. Dado el caso, para tareas de configuración, también se puede hacer login como “root”

Apéndice

Los entornos de escritorio KDE y GNOME: Analogas y diferencias


Un entorno de escritorio será todo aquello que haga más manejable el entorno gráfico del sistema. En un principio, el entorno gráfico por excelencia en Linux era KDE. Sin embargo, algunas de las librerías que se utilizaban en la programación de este sistema (llamadas QT), eran en parte propiedad de una empresa llamada TrollTech. Como lo que se quería era un entorno de escritorio totalmente libre, se inició el proyecto GNOME, basado en unas librerías completamente libres (GTK).

Actualmente, las librerías QT ya no tienen ninguna traba propietaria, por lo que KDE también es un escritorio libre.

Aparte de estos dos mencionados, existen otros más o menos manejables, como IceWindowManager, Window Maker, Blackbox, PAWN (Puto Amo Window Manager)...

Apéndice

El gestor de ventanas

Además de un entorno gráfico amigable, necesitamos algún tipo de herramienta que os permita mover, redimensionar, minimizar, etc... cualquier ventana que abramos en el sistema. Los gestores de ventanas son los que nos permiten realizar estas tareas. KDE utiliza su propio gestor de ventanas (kwin), pero GNOME utiliza uno externo, como por ejemplo, Sawfish ó Enlightenment (entre los más conocidos).

Apéndice

Escritorios virtuales y multi-escritorios

Uno de los añadidos que un escritorio en Linux nos proporciona, son los escritorios virtuales. Esto significa que pulsando alguna combinación de teclas, o mediante algún botón del entorno de escritorio, cambiaremos a una nueva pantalla donde no habrá ninguna ventana abierta, o sólo las que hayamos abierto anteriormente en ese lugar. El número de escritorios virtuales puede ser prácticamente cualquier número X , lo que equivaldría (más o menos) a tener X monitores, cada uno con sus propios programas abiertos.

Apéndice

Sistemas de Ficheros

Bajo la mayoría de los sistemas operativos, LINUX incluido, existe el concepto de fichero, el cual es un conjunto de información al que se le ha asigando un nombre. En LINUX no hay un formato estandar para los nombres de ficheros, como sólo hay en MS-DOS y otros sistemas operativos. En general estos pueden contener cualquier caracter (excepto “/”), y están limitados a 256 caracteres de longitud. Una importante diferencia con MS-DOS es que los nombres no necesitan llevar extensión, que son los 3 caracteres separados del nombre por un punto. En cambio, se suele utilizar como símbolo identificativo de su contenido. Otra diferencia importante con MS-DOS es que el LINUX es “case sensitive”; esto quiere decir que distingue entre mayúsculas y minúsculas, por lo que en LINUX “documento.txt” y “Documento.txt” son dos archivos distintos.

Por otro lado, como en MS-DOS, los directorios son colecciones de ficheros, y/o mas directorios, y tambien pueden tener cualquier nombre, con las mismas limitaciones que los ficheros.

Otro aspecto importante en LINUX, que lo diferencia de otros Sistemas Operativos como MS-DOS o WINDOWS, es que para el sistema todo son ficheros. Desde un disco duro, una partición en un disco duro, un puerto paralelo, una conexion a un sitio web, una placa Ethernet... Incluso los directorios son archivos. Por ejemplo, para imrpimir algo basta con que escribamos en el fichero que representa nuestro puerto paralelo, /dev/lp0.

Apéndice


Permisos del Sistema y Politica de Grupos

LINUX es un sistema multiusuario, bien accediendo localmente (desde un terminal local), o remotamente (mediante una conexión remota). Entendemos por usuario a la persona o personas que poseen una cuenta en la maquina, y por lo tanto conocen su login y contraseña de acceso. Por esto, varias personas diferentes pueden ser el mismo usuario en la maquina, aunque eso no es muy común ni tiene mucho sentido. También es posible que el mismo usuario acceda varias veces, y desde lugares distintos.

Como en un mismo sistema conviven varios usuarios, es importante implementar medidas que garantizen su intimidad, y la seguridad de su información. Por este motivo, LINUX, asi como la mayoría de sistemas multiusuario, presenta un sistema de permisos de ficheros y directorios. Las tres operaciones que se pueden hacer con un fichero o con un directorio son:

- leer

- ejecutar (si es un ejecutable o un directorio)

- escribir (esto incluye borrarlo)

Cada fichero tiene un propietario, que inicialmente es el usuario que lo ha creado, aunque despues puede modificarse. El propietario de un fichero es el que marca los permisos del mismo, fijando quien puede acceder al fichero, y qué puede hacer con él. Esto es, si sólo permite que lo lean (y por lo tanto lo copien), que lo ejecuten (si es un ejecutable, o un directorio para poder acceder a él), o que escriban en él (o lo borren).

Generalmente hay muchos usuarios de un sistema que se encuentran en el mismo nivel de seguridad, especialmente en las empresas y grupos de trabajo. Para no definir expresamente cada uno de los usuarios que pueden acceder a determinado fichero, ni tampoco permitir que todo el mundo pueda acceder a él, se definen los grupos de usuarios. Se crea un grupo formado por varios usuarios, y se le permite a dicho grupo acceder al fichero. Por lo tanto, cada fichero pertenece a un usuario (su propietario) y a un grupo, formado por varios usuarios que poseen los mismos privilegios sobre el fichero en cuestión. Aparte de no tener que meter en cada fichero una lista de los usuarios que pueden acceder a él, sino sólo un nombre de grupo, se gana en escalabilidad, ya que conforme se añaden nuevos usuarios, sólo hay que añadirlos al grupo que nos interese, y no hay que redifinir los permisos del fichero.

Por defecto el sistema crea un grupo con cada nombre de usuario, pero eso no suele ser muy útil. Algunos grupos que si tienen sentido son los siguientes:


audio -> tienen permisos para escribir en los dispositivos de audio del sistema (/dev/dsp)

cdrom -> tienen permisos para escribir cdrom's, que requiere privilegios especiales

lp -> pueden escribir en el puerto paralelo, y por lo tanto imprimir

video -> tienen permisos de escritura en los dispositivos gráficos, para acceder directamente a ellos, sin pedir permiso al sistema.

Por lo tanto cada fichero, tiene 3 campos de permisos, cada uno de ellos con 3 tipos de acceso distintos. Los tres campos son:


- el propietario del fichero

- los miembros del grupo al que pertenece el fichero

- el resto de usuarios del sistema


Para cada uno de estos grupos, se pueden definir 3 permisos: lectura, escritura y ejecución. Obviamente, un usuario solo puede definir los permisos de un fichero si es el propietario del mismo, y tiene permisos de escritura sobre el mismo. Aunque parezca una tonteria que un usuario no tenga permisos de escritura en sus ficheros, es útil como medida de protección a borrados accidentales, y cuando necesite escribir puede habilitarlo, ya que es el propietario.

En el entorno gráfico, para cambiar los permisos de un fichero basta con ver sus propiedades (botón derecho del ratón sobre el fichero) en un Administrador de ficheros como Nautilus (GNOME) o Konqueror (KDE).


Para finalizar el tema de los permisos, volver a hacer incapie en que es peligroso manejar la máquina bajo la figura de root, ya que tiene privilegios de escritura sobre casi todos los ficheros del sistema, y lo mismo todos los programas que ejecutemos bajo su mando. El uso de permisos es la causa de que en LINUX no haya virus, ya que un virus necesitaría entrar como un usuario en el sistema para hacer algo de daño, y para corromper todo el sistema de forma irreversible, necesitaría hacerse root, lo que es muy complicado por el sistema de claves. Pero si ejecutamos un archivo que haga algo pernicioso para el sistema, mientras no sea como root, como mucho corromperá los datos de ese usuario y puede que de su grupo. Pero esto no es nada irreversible, y sobre todo, es justo, porque paga el pato aquel que no mira lo que ejecuta, y no el resto de los usuarios que no han hecho nada.

Apéndice

Entorno Gráfico

Consolas Virtuales

GNU/Linux es un sistema operativo multitarea que originariamente sólo tenía linea de comandos sobre terminal de texto. Sin embargo, al contrario que otros sistemas operatvios como MS-DOS, la interfaz de comandos está separada del núcleo del sistema (el kernel), por lo que hay, distintos “interpretes de comandos” (shell) con distintas características. Además no estamos limitados a una sola terminal (un “lugar" donde se ejecuta un intérprete de comandos), sino que se nos proporcionan una serie de terminales de texto virtuales que facilitan el trabajo en consola y permiten un uso efectivo de la multitarea que nos proporciona el S.O. sin tener que recurrir al modo gráfico.

Comúnmente la configuración básica de cualquier distribución predefine 6 terminales de texto virtuales, entre los que se puede conmutar mediante la secuencia de teclas:

Alt + F<1-6> , donde el número define la terminal virtual, o tty, a la que cambiaremos.

Los terminales gráficos se arrancan después de la última terminal virtual de la consola, comúnmente Alt + F7, hasta F12. Para conmutar de un terminal gráfico a uno de consola debe utilizarse la secuencia:

Ctrl + Alt + F<1-6>

Se pueden configurar el sistema para que use más terminales, pero si las 6 que tenemos por defecto se nos quedan cortas y necesitamos más, lo más facil es hacer uso del comando 'screen'.

Una vez familiarizados con la forma de cambiar entre los terminales ya podemos hacer login en el sistema para comenzar a hacer uso de una shell.

Apéndice

Los tipos de shells: bash, sh, zsh, tcsh, ...

Una shell es un intérprete de comandos, una interfaz entre el usuario y GNU/Linux. Es algo que nos provee de un entorno que nos permite introducir comandos en el sistema y que éste los reconozca. Linux tiene diferentes tipos de Shells: Bourne (sh), Bourne Again SHell (BASH), Korn (ksh), C shell (csh)...

La shell Bourne es la que se utilizaba originalmente en los sistemas UNIX, y está disponible en todos los sitemas UNIX existentes. Es muy adecuada para programación de shell (que ahora veremos lo que es) pero no se comporta demasiado bien de cara al usuario.

La shell C se comporta mejor ante el usuario y tiene algunas características que no están presentes en Bourne, como el autocompletado de línea, pero no es tan buena para programación. Su sintaxis es parecida a la del lenguaje C.

La shell Korn unió lo mejor de las dos anteriores, manteniendo la compatibilidad con la primera.

Actualmente no se usan mucho las shells antes mencionadas, sino otras que son evolución de aquellas y que tienen características de las tres. Estas son bash (Bourne again), pdksh (Public Domain Korn Shell) y tcsh (una extensión de csh). La más utilizada en Linux, y en la que nos centraremos es la shell bash.

Con la shell también se pueden hacer algunos programas (incluso programas complicados). Por ejemplo:

#!/bin/sh

echo “Dime tu nombre”

read a

echo “Tu nombre es $a”


Aunque es una chorrada de programa, se ve que es bastante fácil hacer algo en una shell. Otro ejemplo un poco más complicado:

#!/bin/sh

for a in hola esto es una prueba; do

echo $a

done


Este lenguaje también admite funciones, condicionales, bucles while... es decir, podemos hacer cosas bastantes complicadas con este lenguaje.

Apéndice

Los primeros pasos:

Una vez que hayamos hecho login y se haya ejecutado la shell nos encontraremos algo similar a esto:


[usuario@maquina usuario]$


Bien, pero ... ¿Estamos seguros de quienes somos? ó ¿Dónde estamos? La primera pregunta nos la responderá el comando 'whoami' imprimiendo por pantalla nuestro nombre de usuario. Mediante el comando 'pwd' veremos por la pantalla del terminal el directorio en el que nos encontramos:


[usuario@maquina usuario]$ pwd

/home/usuario


Nos encontramos en nuestro directorio personal, ya que por defecto la shell nos posiciona ahí. Observamos también que en los sistemas operativos basados en Unix, los directorios se separan mediante el caracter '/' en vez del usado por Windows ('\').


Para cambiar de directorio se utiliza el comando 'cd' pasándole como argumento la ruta a la que queremos cambiar:


[usuario@maquina usuario]$ cd /usr/bin

Si no se especifica ningún argumento nos enviará automaticamente al directorio personal (/home/usuario), y si el argumento es “-” volveremos al directorio anterior.

Existen unas abreviaturas que se pueden especificar en la shell que internamente se expanden por el valor real. Estas son:

. => El directorio actual

.. => El directorio padre al actual

~ => /home/usuario

~usuario => /home/usuario

~usuario2 => /home/usuario2

La mayoría de las shells de linux, tienen una opción implícita que autocompleta tanto el nombre del comando como de las rutas que se vayan pasando como argumentos. Simplemente pulsando el tabulador se completará y en el caso de que haya varias coincidencias, las mostrará por pantalla esperando a que se introduzca algún caracter más con el que poder seguir completando.

Para listar el contenido de un directorio se utiliza el comando 'ls' que mostrará por pantalla los archivos presentes en el directorio en que le indiquemos (por defecto, mostrará los del directorio actual). Dependiendo de la configuración que tengamos, puede mostar un código de colores que nos será útil para identificar más rápidamente la información que aparece por pantalla:

-Azul oscuro: directorio.

-Azul claro: enlace simbólico.

-Verde: archivo ejecutable.

-Violeta: archivo de imagen.

-Rojo: archivo comprimido


Estos son los colores por defecto, definidos en la variable LS_COLORS. Por tanto, pueden cambiarse al gusto.

Algunos parámetros útiles que puede tomar son:

-l : Lista los archivos mostrando su tamaño, permisos y propietario.

-a : Lista los archivos cuyo nombre comience por un “.”. Este tipo de archivos “ocultos” son útiles cuando tenemos archivos que queremos que están en un eterminado sitio pero no queremos que se muestren al hacer un ls normal paramejorar la lectura de los elementos del directorio.

¡IMPORTANTE! En Linux hay diferencia entre mayúsculas y minúsculas, así que una entrada en el directorio llamada “COSA” no es igual a “Cosa” ó “cOsa”, tened cuidado con ese tipo de cosas y en no utilizar caracteres especiales de bash en los nombres de los ficheros ( '{' , '}' , '(' , ')' , '[' , ']' , ''' , '“' , ''' , '\' , '<' , '>' , '|' , '&' ... ).

Para crear un directorio simplemente se hace con el comando 'mkdir' y pasándole como argumento el nombre del directorio a crear. El comando opuesto es 'rmdir', pero atención, sólo borrará directorios vacios. Para borrar directorios con contenido existe el comando 'rm' pero este únicamente borra ficheros que recibe en los argumentos, a menos que se le pase como parámetro:

-r: recursivo. Le podemos pasar un directorio como argumento y borrará todo lo que haya dentro de ese directorio. Si a su vez hay otro directorio dentro del directorio, hará lo mismo, y así “ad infinitum”.

Otro parámetro interesante es:

-f: no nos preguntará confirmación para borrar según qué archivos (archivos de sólo lectura, etc...).

Como se puede ver, la combinación rm -rf borrará todo lo que haya en un directorio que le indiquemos. Este es uno de los peligros de utilizar un sistema Unix como root, dado que un “rm -rf /” borrará todo el contenido del sistema.

En el aspecto de renombrar o mover ficheros se utiliza el comando 'mv' para ambas cosas. Si se desea renombrar un fichero o directorio el primer parámetro del comando debe ser la entrada a renombrar y la segunda el nombre deseado, asegurádose de que este no exista. Para mover simplemente especificar en los argumentos los ficheros y directorios que se desean mover poniendo en último lugar el directorio de destino para los mismos.

Copiar un fichero es igual de fácil, con el comando 'cp' especificando en los argumentos el fichero o ficheros originales que se desean copiar dejando en último lugar el directorio de destino. Para crear una copia de un fichero con un nuevo nombre se ha de poner como último argumento el nombre deseado para la copia, teniendo en cuenta de que si ya existe una entrada llamada así, esta será sobreescrita.

Usando el comando 'touch' podemos crear un fichero vacio de nombre el espcificado en el argumento. Si deseamos crear un fichero que contenga varias palabras separadas por espacios habrá que escaparlos con el caracter '\' porque el espacio es el caracter que se usa para separar los argumentos de la linea de comandos. Veamos como hacerlo:

[usuario@maquina usuario]$ touch fichero\ vacio\ con\ varias\ palabras

Es muy útil utilizar las comillas “” o '' para los argumentos con varias palabras o con caracteres especiales:

[usuario@maquina usuario]$ touch 'fichero de un proyecto'

Una cosa que existe en Unix y tiene mucha utilidad es la existencia de “links”. Un “link” o enlace es algo que puede recordar un poco a un acceso directo de windows pero mucho más potente y útil. Existen dos tipos de enlaces:


- Duros: un enlace de este tipo no es más que otra entrada en el sistema de ficheros a una rchivo. Es decir, dos ficheros que apuntan a lo mismo en el disco duro, por tanto cuando modificamos cualquiera de ellos realmente estaremos trabajando siempre con l os mismos datos. Para borrar un fichero enlazado con links duros se deben borrar odos estos, de otro modo los datos del disco no desaparecerán. Se crean con la orden:

[usuario@maquina usuario]$ ln fichero_orignal nombre_del_link

El link creado debe estar en la misma partición que el original.

- Simbólicos: es otro tipo de enlace que no apunta a los datos del disco duro que el fichero sobre el que se hace sino que es un redireccionador a la entrada lógica original del sistema de ficheros, algo así como un enlace a otro enlace, este último a datos del disco, de forma que todo lo que se pretenda hacer sobre el enlace se hará sobre los datos apuntados por el fichero original. Si borramos el enlace simbólico nada pasa con el fichero original y si borramos el fichero enlazado tendremos un enlace simbólico roto, ya que no existirá el fichero al que apunta. Para crearlo, con esto vale:

[usuario@maquina usuario]$ ln -s fichero_original nombre_del_link

Para ver donde apunta un enlace simbólico, con la orden 'ls -l' sobre el enlace veremos el destino:

[usuario@maquina usuario]$ ls -l nombre_nombre

lrwxrwxrwx 1 usuario grupo 03 oct 15 22:13 nombre_nombre -> cuat_dia_3.txt

La “l” al principio del todo indica que la entrada es un enlace simbólico.

Ahora que ya hemos ejecutado unos cuantos comandos es interesante comentar la opción de historial de la shell, que pulsando la flecha arriba nos permite visualizar comandos antiguos. Ejecutando el comando 'history' nos será mostrada por pantalla la lista de comandos antiguos.

Apéndice

Manejando ficheros


Ahora que ya nos movemos con facilidad por el sistema toca el momento de interactuar con los ficheros de forma real. En linux la extensión de un fichero es algo puramente explicativo, no tiene ningun valor para el propio sistema, sólo para el usuario. Así, si queremos averiguar el tipo de un fichero utilizando el comando 'file' lo sabremos:

[usuario@maquina usuario]$ file /usr/bin/perl

/usr/bin/perl: ELF 32-bit LSB executable, Intel 80386, version 1,

dynamically linked (uses shared libs), stripped

Si lo que queremos es visualizar el contenido de un fichero, utilizando el comando 'cat' nos será mostrado todo por pantalla. Hay que tener cuidado de no utilizar 'cat' sobre ficheros binarios ya que se nos llenara la pantalla de caracteres ilegibles y muy probablemente se quede la linea de comandos “diferente”. Para areglar esto, simplemente escribiendo 'reset' las cosas volverán a la normalidad.

Cuando los ficheros son largos 'cat' no es una buena solución, para lo que recomendamos el uso de 'more' que pagina el documento usando la pantalla entera y nos permite ir visualizandolo progresivamente, pero no retroceder a páginas anteriores. El programa para visualizar texto mas común es 'less' que nos da movilidad absoluta sobre el fichero, así como realizar búsquedas y otras opciones.

A la hora de escoger un editor de ficheros de texto tenemos varias alternativas, donde la elección de uno u otro se basa más en el gusto del usuario. El más sencillo e intuitivo de todos posiblemente sea 'pico' porque muestra en la parte inferior de la pantalla las secuencias de teclas útiles. También en el grupo de los más elementales se encuentra 'joe', de funcionalidad muy similar a 'pico' pero de un manejo menos intuitivo.

Entre los editores avanzados destacan 'vim' y 'emacs', también conocido como “El piano” por el gran número de combinaciones de teclas que tiene para manejo avanzado de texto. Ambos implementan resaltado de sintaxis con colores, muy útil para la programación. En 'vim' para mostrar la ayuda basta con seguir la secuencia: ESC y escribir “:help” para visualizar una completa ayuda sobre el manejo del editor. En 'emacs' y en no sabe.

Por otro lado, Linux presenta un gran número de pequeñas utilidades para el manejo de ficheros, entre las que se encuentran:

- 'wc' : aplicado a un fichero cuenta el número de lineas, palabras y bytes (caracteres, si estamos ante un fichero de texto).

- 'grep' : busca una expresión sobre el fichero al que se aplica.

- 'sed' : sustituye unas expresiones por otras.

- 'diff' : muestra las diferencias entre dos ficheros.

- 'sort' : imprime en la pantalla un fichero ordenado.

- 'uniq' : elimina lineas consecutivas repetidas.

- 'head' : muestra por pantalla las primeras lineas del fichero o ficheros especificados.

- 'tail' : muestra por pantalla las 10 últimas lineas del fichero al que se aplique.

Todas estas aplicaciones admiten varios parámetros que permiten especificar su funcionalidad. Para listarlos simplemente pasando “--help” como argumento se imprimiren por pantalla. A primera vista puede parecer que no tienen mucha utilidad por si solas, pero conectándolas unas con otras dan la posibilidad de realizar tareas más complejas. Eso ya lo veremos más idetenidamente en el apartado de redireccionamiento y pipes.

Ahora que ya tenemos unas nociones básicas del manejo de ficheros surge el problema de cómo buscarlos si no sabemos su localización concreta. Para ello Linux suele incorporar un sistema de base de datos en el que se almacena una lista con todos los ficheros de la máquina, para hacer búsquedas de forma rápida. Esta base de datos se actualiza mediante el comando 'updatedb' que emplea un cierto tiempo en realizar el escánner de las particiones para luego poder realizar la búsqueda con el comando 'locate' pasándole como argumento el patrón que queremos buscar. Con 'locate -i' hacemos que ignore si el patrón que pasamos como argumento está en mayúsculas o minúsculas. La mayoría de las distribuciones implementan un servicio que actualiza la base de datos periódicamente, pero si queremos forzar a que se actualize, deberemos ejecutar 'updatedb' con privilegios de administrador (root).

No obstante, cuando no se disponga de cuenta de administrador en una máquina y la base de datos no haya sido actualizada últimamente siempre queda la opción de usar el comando 'find' que realiza una búsqueda en tiempo real explorando todos los directorios. Este método es mucho mas lento que 'locate' ya que la exploración a través del árbol de directorios de Linux es tediosa y además existe el agravante de que al intentar entrar en directorios sobre los que no se tiene permisos el programa enviará mensajes de error por pantalla. Pero tranquilos, ya veremos luego como evitarlos. Un ejemplo del uso del comando 'find' podría ser este:

[usuario@maquina usuario]$ find ~/ -name *mp3*

Pra cualquier duda consulte www.eurielec.etsit.upm.es

Apéndice


Comandos de Linux

El sistema Linux tiene una gran cantidad de sistemas de ayuda e información sobre comandos que se pueden utilizar en cualquier momento:

Antes de comenzar es importante destacar que todos los nombres de ficheros y comandos son "case-sensitive" (que hacen diferencia entre mayúsculas y minúsculas, a diferencia de sistemas operativos como MS-DOS). Por ejemplo, el comando make es diferente a Make o MAKE. Lo mismo ocurre en el caso de nombres de ficheros o directorios.

Cambio de directorio:

La orden para movernos por la estructura de directorios es cd, abreviación de "cambio de directorio". Hay que destacar, que la mayoría de las ordenes UNIX mas usadas son de dos o tres letras.

La forma de uso de la orden cd es:

cd <directorio>

Donde <directorio> es el nombre del directorio al que queremos ir. Si usamos "cd" sin parámetros esto nos llevará a nuestro directorio. Tenemos también dos punteros, uno al directorio padre ".." y otro a si mismo "." Esto también fue copiado por DOS.

Consultar el directorio actual

Para saber en que directorio nos encontramos usaremos el comando "pwd"

Consultar el contenido de los directorios

Una vez que podemos navegar por nuestro árbol de directorio lo más importante es poder ver que tenemos en cada uno. Para eso usaremos el comando "ls", ls vendría a ser "dir" del DOS, pero como vemos más adelante es mucho mas poderoso como todos los comandos de Linux. Ls tiene muchos parámetros que van a afectar su comportamiento, pero el mas usado sin duda ser "-l" que no mostrara con mas detalle el contenido del directorio.

Consultar las páginas del manual

Es uno de los comandos que mas nos van a ayudar en el aprendizaje de Linux es "man" que siguiendo con las comparaciones con el DOS vendría a ser el "help" con man podrá solicitar información de todos los comandos e incluso algunos programas y aplicaciones tiene sus propias paginas de manual.

La forma de usarlo es:

man <comando>

Creación de directorios:

Para esto usaremos el comando "mkdir" como en DOS seguido del nombre del directorio a crear.

mkdir <nombre>

Copiado de archivos

La orden "cp" copia los ficheros listados en la línea de comandos al fichero o directorio pasado como ultimo argumento.

cp <origen> <destinod>

Mover archivos

Tanto para mover como para renombrar archivos o directorios usaremos el comando "mv" de idéntica manera a "cp" solo que en este caso no se preservará el origen.

mv <origen> <destino>

Borrado de archivos

Para borrar se usa "rm" que viene de remove. Se usa con un parámetro que es el nombre del fichero a borrar o una lista de ellos. Tambien lo podemos usar para borrar directorios completos con el parámetro "-r" y hay que ser muy prudente y cuidadoso con este comando ya que podemos borrar todo lo que contenga ese directorio hasta perder alguna información de algun subdirectorio y no poder salvarla.

rm <nombre de archivo o directorio>

Mirando los ficheros

Las ordenes "more", "cat" y "less" son usadas para ver el contenido de ficheros. More y less muestran el fichero pantalla a pantalla mientras que cat lo muestra entero de una vez.

more <archivo>
less <archivo>
cat <archivo>

El sistema de ficheros y la jerarquía de directorios.

Primero cambie al directorio raiz (cd /) y ejecute ls -F. Probablemente vera estos directorios:

bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr, y var.

La distribución de directorios y archivos es Unix es muy ordenada y distinta que en DOS, veamos para que usamos cada directorio.

/bin

es la abreviación de "binaries", o ejecutables. Es donde residen la mayoría de los programas esenciales del sistema.

/dev

Los "ficheros" en /dev son conocidos como controladores de dispositivo (device drivers)_son usados para acceder a los dispositivos del sistema y recursos, como discos duros, modems, memoria, etc

/etc

contiene una serie de ficheros de configuración del sistema. Estos incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de inicialización del sistema), etc.

/sbin

se usa para almacenar programas esenciales del sistema, que usara el administrador del sistema.

/var

contiene directorios que a menudo cambian su tama¤o o tienden a crecer. Muchos de estos directorios solian residir en /usr, por ejemplo en /var/adm encontraremos varios ficheros de inter'es para el administrador del sistema, específicamente históricos del sistema, los cuales recogen errores o problemas con el sistema.

/usr/src

contiene el código fuente (programas por compilar) de varios programas de su sistema. El mas importante es /usr/src/linux, el cual contiene el código fuente del kernel de Linux.

/usr/local

es el directorio donde normalmente pondremos nuestras aplicaciones.

/usr/include

contiene los ficheros de cabecera para el compilador de C. Estos ficheros (la mayoría de los cuales terminan en .h, de "header") declaran estructuras de datos, subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se encuentran en /usr/include/sys son generalmente usados en la programación de en UNIX a nivel de sistema. Si esta familiarizado con el lenguaje de programación C, aquí encontrara los ficheros de cabecera como stdio.h, el cual declara funciones como printf().

/usr/bin

es el deposito real de programas del sistema UNIX. Contiene la mayoría de los programas que no se encuentran en otras partes como /bin.

/usr/X11R6

contiene todos los ejecutables de X Window, ficheros de configuración y de soporte.

/usr

es un directorio muy importante. Contienen una serie de subdirectorios que contienen a su vez algunos de los mas importantes y útiles programas y ficheros de configuración usados en el sistema.

/proc

es un "sistema de ficheros virtual". Los ficheros que contiene realmente residen en memoria, no en un disco. Hacen referencia a varios procesos que corren en el sistema, y le permiten obtener información acerca de que programas y procesos est n en ejecución.

/lib

contiene las imagines de las librerías compartidas. Estos ficheros contienen código que compartirían muchos programas.

/home

contiene los directorios "home" de los usuarios. Por ejemplo, /home/juan es el directorio del usuario "juan".

http://www.carsoft.com.ar/Comandos.htm

Apéndice

Administración básica (hay que ejectuar estos comandos como root):


En primer lugar debemos hacer login como root en el sistema, bien mediante la entrada normal al sistema, o una vez que ya estamos conectados como un usuario, ejecutando el comando 'su' que nos pedirá la contraseña de administrador, para convertir nuestra sesión actual en una con derechos totales sobre la máquina.


A continuación vamos a listar unos cuantos comandos para configurar algunas de las tareas básicas de administración del sistema:

- 'adduser': añade un nuevo usuario al sistema. Es un programa interactivo y te va preguntando lo que necesita saber sobre el nuevo usuario. Sí, ya no tienes excusa para crearle una cuenta a tu mamá, papá o hermanito :)

- 'deluser': borra usuario :)

- 'addgroup': añade un nuevo grupo.

- 'delgroup': borra el grupo de trabajo :)

Para modificar los grupos a la antigua usanza, simplemente con editar el fichero “/etc/group” podremos añadir y quitar usuarios de grupos, respetando que cada linea tenga el formato:

grupo:x:UID:usuario1,usuario2,usuario3

- 'passwd': cambia tu contraseña de login (cada usuario se puede cambiar la contraseña a si mismo, y el root se la puede cambiar a todo el mundo).

- 'drakconf': herramienta específica de Mandrake que cuenta con utilidades muy intuitivas para una configuración global y básica de la máquina.

- 'lsmod': lista por pantalla los módulos cargados.

- 'modprobe': intenta cargar el módulo que se le pase como argumento.

- 'rmmod': borra de la memoria el módulo que se le pase como argumento.

Si alguno aún no tiene muy claro qué es eso de un módulo, no es más que un driver o controlador, para un cierto dispositivo. Linux incorpora la mayoría de los módulos en las fuentes del núcleo, permitiendo tener un nucleo modularizado o con los controladores compilados en el mismo. Los módulos que tenemos instalados se encuentran en:

/lib/modules/VERSION/kernel/drivers/

Donde VERSION es la versión del kernel que estamos usando. Eso lo podemos averiguar mediante el comando 'uname -a' que da cierta información básica de nuestro sistema Linux por pantalla.

- 'mount': permite montar dispositivos de hardware en el sistema de ficheros. Tiene tres modos de funcionamiento, uno de ellos con sintaxis mas corta, en la que especificando el directorio que se quiere montar lee el resto de la información del fichero /etc/fstab

( 'man fstab' para ver la sintaxis del archivo). El segundo modo es especificando directamente las opciones de montado en la linea de comandos:

[root@maquina root]$ mount -t tipo_de_sistema_de_ficheros /dev/XXX /punto_de_montaje

Y en último lugar, si no se pasan argumentos simplemente imprime por pantalla los dispositivos montados.

- 'umount': desmonta dispositivos. Simplemente con pasar en los argumentos el directorio a desmontar la acción se realizará automáticamente.

- 'reboot': reinicia la máquina.

- 'halt': apaga la máquina.

- 'shutdown': es un programa que gestiona el apagado y reinicio de la máquina. Ejecute 'man shutdown' para más información.

Puede ser útil comentar la existencia del sistema de ficheros virtual /proc, donde podemos conseguir información sobre nuestro propio ordenador. Un sistema de ficheros virtual no es más que una implementación de algún aspecto de la máquina en forma de sistema de ficheros, permitiendo la transparencia al uso. A parte de /proc también está /dev/ que contiene entradas a los dispositivos de hardware que tengamos.

- /proc/cpuinfo: información sobre nuestra CPU.

- /proc/kcore: representación de la memoria RAM. Por mucho que parezca que ocupa, tranquilos, no es espacio en el disco físico, estamos en un sistema de ficheros virtual :)

- /proc/meminfo: cosas de la memoria.

- /proc/modules: muestra los módulos cargados actualmente.

- /proc/mounts: “info” de qué está o no montado.

- /proc/pci: lista los dispositivos pci que tengamos con información que puede resultar útil a la hora de configurar algunas cosas.

- /proc/etc... : mas información...

No te confundas pensando que son ficheros lo que vez, no es mas que una representación virtual que hace el núcleo de Linux, para permitir al usuario conocer el estado real de cada cosa. El tener este tipo de representación puede ser interesante si usamos pipes con más comandos para realizar funciones más complejas. Un ejemplo:

[usuario@maquina usuario]$ cat /proc/cpuinfo | grep -i mhz | sed -e

's/.*: /Mi procesador es de /' | mail -s

Este comando mandara un mail al amigo pepe diciéndole en el asunto la pregunta que vemos y en el cuerpo del mensaje la cadena “Mi procesador es de XXX” donde XXX será lo que venga en /proc/cpuinfo

Para instalar/desinstalar software ya es un asunto muy concreto de la distribución que se use y de su sistema de paquetes. Así RedHat y sus “hijas”, Mandrake, Suse, etc.. utilizan RPM´s, que se gestionan mediante el comando 'rpm'. Las distribuciones basadas en Debian utilizan paquetes DEB y su gestor 'dpkg' , pero además presentan una utilidad para la automatización de la instalación/desinstalación/actualización de programas llamada APT ('apt-get')

Apéndice

Se me ha olividado la password de root, ¿que hago?


Lo primero, no te preocupes demasiado, porque la solución es muy fácil. Solo tienes que, en el arranque del ordenador, pasarle un parámetro al núcleo que cargaremos con el LILO. Para sacar la linea de comandos del LILO basta con pulsar ESC y luego si la imagen de linux se llama “linux” pues poner “linux single”. Eso arranca lo mínimo del sistema y te pide la password de root. Puedes meter lo que quieras, y eso quedara grabado como la password de root. Reinicia el sistema, y a seguir trabajando.

Si se te olvida la password de cualquier otro usuario, más facil todavía, como se ha comentado antes, el root puede cambiar la password de cualquier usuario que haya olvidado su contraseña sin más que poner 'passwd usuario_despistao”.

Existen numerosas páginas sobre documentación de Linux. Se puede visitar la página oficial del paquete en cuestión o visitar en donde están muchos manuales traducidos al español.

http://lucas.hispalinux.es

http://www.angelfire.com/ar/favaloro1/faqs.html

http://www.li.org/whatislinux.php

http://www.esware.com/

http://www.eurielec.etsit.upm.es/

http://www.linuxhq.com/

http://www.angelfire.com/ar/favaloro/canal.html

http://www.angelfire.com/ar/favaloro1/tutorial.html

http://www.linux.org.uk/WhatIs.html

Apéndice