linux - cs.famaf.unc.edu.ardamian/algoritmos1/introlinux.pdf · introducción a linux javier blanco...

74
Introducción a Linux Javier Blanco [email protected] Damián Barsotti [email protected]

Upload: others

Post on 21-Mar-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

  • Introducción a

    Linux

    Javier [email protected]

    Damián [email protected]

    [email protected]@famaf.unc.edu.ar

  • Copyright c© 2003 Damián Barsotti y Javier Blanco.Permission is granted to copy, distribute and/or modify this document under the terms of theGNU Free Documentation License, Version 1.1 or any later version published by the FreeSoftware Foundation; with no Invariant Sections, no Front-Cover, and no Back-Cover Texts. Acopy of the license is included in the section entitled “GNU Free Documentation License”.

    I

  • Índice general

    1. Introducción 11.1. Presentación de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 11.2. Características de Linux . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 1

    1.2.1. Características generales . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 21.2.2. Un paseo como usuario . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 5

    1.3. Esquema inicial de Internet . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 91.4. Fuentes de información . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 10

    1.4.1. Manuales de sistema (man pages) . . . . . . . . . . . . . . . . . .. . . . . . . . 101.4.2. Manuales en formatoinfo (info pages) . . . . . . . . . . . . . . . . . . . . . . . . 12

    2. Herramientas útiles 132.1. Cambiar el password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 132.2. Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 132.3. X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 172.4. Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 192.5. Trabajando con disquetes . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 222.6. Más comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 232.7. Otros programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 25

    3. Comandos avanzados 273.1. Shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 27

    3.1.1. Expansión de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 273.1.2. Redireccionando la salida . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 283.1.3. Variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 313.1.4. Envío de señales a procesos . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 323.1.5. Archivo de configuración del bash . . . . . . . . . . . . . . . . .. . . . . . . . . 36

    3.2. Usuarios y Grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 373.3. Dueños y permisos de archivos . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 39

    3.3.1. Conceptos generales . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 393.3.2. Cambiando dueños, grupos y permisos . . . . . . . . . . . . . .. . . . . . . . . 42

    3.4. Instalando programas . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 433.4.1. ArchivosTARy GZIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.4.2. Archivos en formatoRPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    3.5. Organización de directorios FHS . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 45

    II

  • A. Breve historia de la computación (el porque de los S.O., laadministración y el Software Libre) 47A.1. Sus inicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 47A.2. Surge la computación con fines comerciales . . . . . . . . . . .. . . . . . . . . . . . . . 48A.3. Multitarea y multiusuario . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 48A.4. Surge Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 49A.5. Crisis del Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 49A.6. Surgimiento del Software Libre . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 51A.7. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 52

    B. Información adicional 54B.1. Ubicacion de las man pages . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 54B.2. Otras fuentes de información . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 55

    B.2.1. HOWTO y mini HOWTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55B.2.2. SAG y NAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55B.2.3. En Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 55B.2.4. Documentación de Red Hat . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 56B.2.5. Recomendaciones de búsqueda de información . . . . . . .. . . . . . . . . . . . 56

    B.3. Otras características de Linux . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 57B.3.1. Árbol de procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 57B.3.2. Demonios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 58B.3.3. Configurable por archivos de texto . . . . . . . . . . . . . . . .. . . . . . . . . . 58B.3.4. Estructura del S.O. Linux . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 58B.3.5. Proceso de arranque del sistema . . . . . . . . . . . . . . . . . .. . . . . . . . . 60

    C. GNU Free Documentation License 61C.1. Applicability and Definitions . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 61C.2. Verbatim Copying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 62C.3. Copying in Quantity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 62C.4. Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 63C.5. Combining Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 64C.6. Collections of Documents . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . 64C.7. Aggregation With Independent Works . . . . . . . . . . . . . . . .. . . . . . . . . . . . 65C.8. Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 65C.9. Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 65C.10.Future Revisions of This License . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 65

    Índice de Tareas 67

    Bibliografía 69

    III

  • Capítulo 1

    Introducción

    Este apunte pretende ser una guía para las personas que comienzan a utilizar el sistema operativo Linux.El mismo fue concebido como material para la materia Algoritmos y Estructuras de Datos I de la carrera

    Licenciatura en Ciencias de la Computación que se dicta en laFacultad de Matemática Astronomía y Físicade la Universidad Nacional de Córdoba.

    Su contenido está orientado al uso de las plataformas de trabajo que se encuentran actualmente en ellaboratorio de computación de dicha facultad, pero puede ser útil como introducción al uso del sistemaoperativo Linux en general.

    1.1. Presentación de Linux

    El sistema operativo Linux (S.O. Linux) es una implementación con características deSoftware Libre(ver sección A.6 (pág. 51)) del sistema operativo UNIX para computadoras personales. Uno podría utilizarel sistema sin preguntarse el porque de la existencia de Linux y de manera más general, delSoftwareLibre. Pero estas preguntas son importantes ya que nos ayudan a comprender la filosofía con la que fuedesarrollado este sistema operativo y por ende poder entenderlo y aplicarlo en la solución de problemasconcretos.

    El nacimiento de Linux puede ser entendido como un resultadonecesario en el desarrollo de la historiade la computación. Este desarrollo también abarca el nacimiento de la idea de sistema operativo. Además,la historia de la evolución de estos sistemas sirve para comprender sus características en la actualidad y enparticular de Linux.

    Un bosquejo de esta historia puede encontrarse en el apéndice A (pág. 47). Un desarrollo más detallado(principalmente de la historia de Unix y Linux) se puede encontrar en [Ray03].

    1.2. Características de Linux

    En esta sección se hará una resumen de la principales características de Linux.A medida que se expliquen estas características se mostraráen un Linux corriendo, algunas manifesta-

    ciones de las mismas. Para ello primero tendremos que autenticarnos al sistema.

    Tarea 1.1 Ingresar al sistema

    En Linux lo primero que debemos hacer antes de poder trabajarcon el, es ingresar como un usuariopreviamente acreditado. Para ello debemos ingresar este, en una pantalla que se vería similar a esto:

    1

  • Red Hat Linux release 7.1 (Seawolf)Kernel 2.4.28pre1 on an i686hp01 login: _

    El encargado de mostrar esto es un programa llamado login, loprimero a ingresar es el nombre delusuario (denominado login1), luego se nos pedirá una contraseña, para ello aparecerá enpantalla losiguiente:

    Password: _

    Al ingresar la contraseña no se mostrarán en pantalla los caracteres tipeados. Esto es así para que nopuedan ver nuestra clave al momento de entrar al sistema.

    Aclaramos que Linux como todos los UNIX diferencian las mayúscula de las minúsculas tanto en elnombre de nuestro usuario como en su clave de acceso. Habiendo ingresado un usuario correcto consu palabra clave correcta habremos ingresado al sistema, lapantalla completa de ingreso al sistemaseria algo así:

    Red Hat Linux release 7.1 (Seawolf)Kernel 2.4.28pre1 on an i686hp01 login: martinPassword:Last login: Wed Jan 9 17:45:09 on tty1[martin@maq martin]$ _

    1.2.1. Características generales

    Como ya se dijo en la sección anterior, Linux es una implementación libre de Unix por lo que compartesus características con este sistema operativo.

    Multitarea

    Linux soporta multitarea de manera muy eficiente. Su implementación incluye la protección de losrecursos compartidos por distintos procesos y provee mecanismos para administrar políticas de uso de losrecursos. Para una descripción más detallada ver sección A.3 (pág. 48).

    Multiusuario

    Linux es un sistema totalmente multiusuario. Los usuarios pueden utilizar de forma concurrente unmismo sistema, por lo general por medio de distintas terminales u otras computadoras conectadas en red.Su implementación también incluye sistemas de protección ymecanismos para implementar políticas deadministración de los recursos utilizados por distintos usuarios.

    De esta forma, al autenticarnos con un “login” y una contraseña (como ya lo hicimos), el sistema admi-nistrará los recursos (por ejemplo el mail) para este usuario en particular.

    1Este nombre es por lo general el que aparece antes del símbolo dearroba (@) en la dirección de mail que tendrá el usuario.

    2

  • Importante: Lo único que maneja el sistema para corroborar la identidad de un usuario es el login y lacontraseña. Esto quiere decir que si otra persona conoce esta información puede utilizar nuestros recursosindiscriminadamente. Es por ello queno debe brindar la contraseña a otras personas.

    Tarea 1.2 Ver terminales virtuales

    Linux permite que varios usuarios ingresen al sistema al mismo tiempo en la misma consola,utilizando lo que se denomina terminales virtuales.

    Una vez que ya ingresamos al sistema oprimiendo conjuntamente las teclas[Alt][F2] vamos aver una pantalla similar a la siguiente:

    Red Hat Linux release 7.1 (Seawolf)Kernel 2.4.28pre1 on an i686hp01 login:

    Esta es idéntica a la primera pantalla de ingreso al sistema yaquí cualquier usuario (generalmenteel mismo) puede utilizarlo también.

    Por lo general están definidas 6 terminales virtuales (esto es configurable en el sistema), las cualespueden ser accedidas con las combinaciones de teclas[Alt][F1] a [Alt][F6] .

    Volvamos ahora a la pantalla original oprimiendo[Alt][F1] .

    Orientado a Shell

    Ya entramos al sistema como usuario y vimos que se muestra unapantalla en modo texto con algoparecido a:

    Red Hat Linux release 7.1 (Seawolf)Kernel 2.4.28pre1 on an i686hp01 login: martinPassword:Last login: Wed Jan 9 17:45:09 on tty1[martin@maq martin]$ _

    En este momento se activó un proceso llamadoshell que se encarga de atender los pedidos del usuariopara utilizar el sistema; de aquí en adelante el sistema espera que el usuario ingrese nombres de programaspara ser ejecutados. Esta es la forma predefinida para utilizar el sistema.

    Por lo general se utiliza el shell para ejecutar programas. De esta forma funciona como interfase entreel usuario el sistema operativo para indicarle a este últimoque los ejecute.

    Se denomina proceso a un programa en ejecución. Cada procesotiene un programa asociados: un mismoprograma puede estar ejecutándose muchas veces hasta por distintos usuarios. El mismo shell también tieneun programa asociado.

    Si bien Linux cuenta con potentes entornos gráficos la interfase por defecto y más potente para usarLinux es el shell, por varios motivos:

    Es tremendamente estable, a diferencia de los entornos gráficos que son muy inestables, en todos lossistemas operativos, incluso en Linux.

    Es totalmente programable, lo que lo hace muy versátil.

    Tiene la rapidez del entorno carácter.

    3

  • Vienen muchas mas herramientas para este, que para los entornos gráficos.

    Es más, los entornos gráficos en Linux son programas que se pueden lanzar desde el shell (generalmenteel programastartx).

    La comunicación con el sistema por medio del shell es una característica heredada desde los primerosUnix.

    En la sección 1.2.2 (pág. 5) se verán algunos programas que sepueden ejecutar por medio del shell.

    Abstracción “sistema de archivos”

    El sistema de archivos de linux es mucho más que unarepresentacióno abstracciónde los almacena-mientos de memoria. Los archivos pueden también representar otros dispositivos como teclados, monitores,impresoras o dispositivos de sonido. Así, por ejemplo, si seescribe sobre el archivo que representa el mo-nitor de video se escribirán caracteres en la pantalla del mismo. De la misma forma si se lee el archivo querepresenta un micrófono conectado a la placa de sonido se estará viendo un archivo de sonido en algúnformato predefinido.

    También el sistema de archivos permite representar enlacesde comunicación entre procesos locales oen red. Así, si se quiere enviar cierta información a algún proceso, solo hay que escribir en el archivo querepresenta una conexión con el mismo.

    La comunicación para comprobar o modificar el comportamiento del sistema operativo también se rea-liza leyendo o modificando ciertos archivos especiales (generalmente estos archivos están en el directorio/proc ).

    Como se puede observar, todo en Linux es un archivo. Esta inclinación a basar toda la interfase entrelas funcionalidades del hardware con el usuario a través delsistema de archivos es también heredada de losviejos sistemas Unix y provee cierta uniformidad en el manejo del sistema operativo.

    Software Libre

    Linux no es un programa de dominio público, varios de sus componentes tienen derecho de autor; losderechos de autor del kernel básico2 son de propiedad de Linus Torvals. La mayoría de los componentesde Linux están regidos bajo las leyes del GNU General Public License. El software GNU tiene copyright,pero sus autores han dado su autorización para que se distribuya de acuerdo a algunas condiciones. Estascondiciones se refieren a la necesidad de suministrar el código fuente y que a ninguna de las partes delsoftware se las someta a copyright. Esto significa que si un programador, por ejemplo, tomara el códigofuente de algún programa GNU y lo modificara en alguna parte, este a su vez debe permitir al acceso aese código modificado. En ocasiones esta licencia se denomina GNU Copyleft, cubre todos los programasproducidos por GNU y por la Free Software Fundation. El GNU Copyleft o GPL permite a los creadoresde programas conservar sus derechos de autor, pero permitiendo al resto de los usuarios la posibilidad decopiarlos y modificarlos a sus necesidades.

    Esta licencia beneficia fuertemente la distribución de Linux. Es así que existen empresas que se encargande “empaquetar” el kernel junto con otros programas (editores, juegos, entorno gráfico, etc.) y creandoprogramas instaladores del sistema (generalmente bajo la misma licencia). Las más representativas quizásean la Red Hat, Slackware, Suse, Caldera, Debian, etc.

    Auto-documentado

    El sistema operativo Linux, por su característica desoftware librebeneficia la documentación de todassus funcionalidades. Todas las distribuciones brindan esta documentación en varios formatos aunque ladocumentación más importante es el código de los programas en sí.

    2El kernel de Linux es el sistema que provee los servicios básicos, como por ejemplo administrador de procesos, memoria virtual,drivers, manejo de archivos, etc. En otras palabra es el “nivel más bajo” del sistema operativo.

    4

  • Distintas fuentes de información se verán en la sección 1.4 (pág. 10).

    Comunicación por red

    Linux es un sistema orientado a comunicación en red. Provee distintos protocolos (TCP/IP, IPX, Samba,etc) junto con aplicaciones que brindan servicios para redes (servidores de web, mail, etc.). El mismosistema de ventanas gráfico (XFree) esta orientado para ser utilizado en red.

    Sistema X Windows

    El sistema X Windows está basado en el modelo cliente-servidor en donde el Xserveres un programaque corre sobre el sistema Linux y maneja el hardware gráfico.UnclienteX es un programa que se comunicacon el servidor, enviándole pedidos tales como “dibujar unalínea” o “atender el teclado”. Ejemplos de estosclientes son editores de texto, juegos, navegadores web, etc.

    X es un sistema gráfico orientado a red; los clientes X pueden estar corriendo (utilizando cpu, memoria,etc.) en otra máquina. El servidor escucha los pedidos de estos (por conexiones TCP/IP) tanto como loslocales, y actúa sobre el hardware gráfico donde está corriendo. Es así que uno podría tener funcionando uneditor de texto en una máquina en otro país y usarlo en casa.

    Es importante tener en cuenta que el sistema X Windows no hacegran diferencia si el cliente es remotoo local; los protocolos de conexión entre el servidor y los clientes son, en un nivel más alto, el mismo. Parauna explicación sobre este tipo de arquitectura cliente-servidor sobre Internet leer la sección 1.3 (pág. 9).

    Otra característica del sistema es la idea demanejador de ventanas(window manager). Los clientescorriendo bajo X son presentados dentro de una o más ventanasen la pantalla. Pero la forma en que sonmanipuladas (cambiar de tamaño, moverlas, etc.) y decoradas no es controlada por el servidor, si no porotro cliente llamadowindow managerque corre concurrentemente con los otros clientes. De esta formauno puede elegir como ver y manipular el entorno (looks and feels) cambiando el window manager a gustopersonal.

    Más características de este s.o. se pueden encontrar en el apéndice B.3 (pág. 57).

    1.2.2. Un paseo como usuario

    Una vez arrancado el sistema ingresemos al mismo (con el login y el password).

    Red Hat Linux release 7.1 (Seawolf)Kernel 2.4.28pre1 on an i686hp01 login: martinPassword:Last login: Wed Jan 9 17:45:09 on tty1[martin@maq martin]$ _

    La linea que comienza con[martin@maq martin]$_ se la denominalínea de comandoy allí esdonde, escribiendo con el teclado, me comunico con el shell.

    Ahora veremos un poco más como el usuario interactúa con el s.o. a través del shell, haciendo hincapiéen el sentido de multiusuario y tratando el sistema de archivos como un recurso compartido con protección.

    Lo más frecuente es que cada usuario en Linux tenga su propio directorio, lo que se llamaría el homedel usuario. En la mayoría de los casos los usuarios comunes tienen un directorio en/home . Por ejemplosi nuestro usuario se llamamartin tendrá un directorio de home/home/martin 3.pwd

    Para saber en que directorio nos encontramos debemos de ejecutar el comandopwd.

    3En sistemas con gran cantidad de usuarios este directorio puede ser distinto.

    5

    /home/home/martin

  • Tarea 1.3 Ver en que directorio nos encontramos

    Ejecutemos el mismo:

    [martin@maq martin]$ pwd/home/martin[martin@maq martin]$ _

    Este seria equivalente al comando “cd” de DOS sin ningún argumento.

    lsOtra función muy útil es listar los archivos del directorio donde nos encontramos. Para ello usamos el

    comandols.

    Tarea 1.4 Usemos ls

    Ejecutemos el comando:

    [martin@maq martin]$ lsDesktop[martin@maq martin]$ _

    Como podemos observar,ls nos presenta los archivos que tenemos en nuestro directorio, sin embargoes conveniente usarlo con algunos argumentos para que se nosmuestre mas información de estosarchivos:

    [martin@maq martin]$ ls -latotal 88drwx------ 6 martin martin 4096 ene 25 00:36 .drwxr-xr-x 6 root root 4096 feb 6 1996 ..-rw------- 1 martin martin 233 ene 24 02:15 .bash_history-rw-r--r-- 1 martin martin 24 dic 4 17:47 .bash_logout-rw-r--r-- 1 martin martin 224 dic 4 17:47 .bash_profile-rw-r--r-- 1 martin martin 124 dic 4 17:47 .bashrcdrwxr-xr-x 3 martin martin 4096 dic 5 21:21 Desktop-rw-r--r-- 1 martin martin 747 dic 4 17:47 .emacsdrwxr-xr-x 4 martin martin 4096 dic 4 17:54 .kde-rw-r--r-- 1 martin martin 3728 dic 4 17:47 .screenrc-rw-rw-r-- 1 martin martin 52 dic 4 17:57 .sversionrc-rw------- 1 martin martin 0 dic 5 21:21 .Xauthority-rw------- 1 martin martin 1763 dic 5 21:21 .xsession-error s[martin@maq martin]$ _

    El argumento-la hace que se muestre todos los archivos incluidos los ocultos(en Unix son losque comienzan con un. ) y que utilice el formato de salida completa, que incluyen los permisos,propietarios, tamaño, fecha y hora de creación de cada archivo.

    cdEn el caso de que queramos movernos por la estructura de subdirectorios, tenemos el comandocd que

    sirve para tal motivo. Este cumple las mismas funciones que su par de DOS, sirve para cambiar de undirectorio a otro.

    6

    .

  • Tarea 1.5 Cambiemos de directorios

    Ejecutemos el comando:

    [martin@maq martin]$ cd Desktop[martin@maq Desktop]# _

    Con él ingresaremos al subdirectorio "Desktop", si es que queremos retornar al subdirectorio ante-rior usaremos:

    [martin@maq Desktop]# cd ..[martin@maq martin]$ _

    para movernos al directorio raíz usaremos:

    [martin@maq martin]$ cd /[martin@maq /]# _

    O si queremos simplemente volver a nuestro home, tenemos queescribir:

    [martin@maq /]# cd[martin@maq martin]$ _

    Existe otra forma de referirnos a nuestro directorio personal cuando utilizamos el shellbash. Sihacemos:

    [martin@maq /]# cd ~/[martin@maq martin]$ _

    obtenemos el mismo resultado anterior. La ventaja de esta abreviación es que sirve con cualquiercomando, por ejemplo para copiar o mover archivos como veremos más adelante.

    Existen dos archivos en todos los directorios ellos son el punto (. ) y los dos puntos (.. ). El primeroreferencia al directorio donde estamos posicionados, el segundo al directorio anterior.mkdir

    Ahora si lo que queremos es crear un subdirectorio usaremos el comandomkdir.

    Tarea 1.6 Creemos subdirectorios

    Ejecutemos el comando:

    [martin@maq martin]$ mkdir trabajos[martin@maq martin]$ _

    Con esto generamos un subdirectorio al que llamamostrabajos Que podemos utilizar para guar-dar los archivos que hagamos en la materia.

    cpEl comando cp sirve para copiar archivos. los dos argumentosmas importantes e imprescindibles son el

    archivo o directorio origen y el destino.

    7

    ...trabajos

  • Tarea 1.7 Copiemos archivos

    Copiemos el archivo/etc/X11/XF86Config a nuestro directorio:

    [martin@maq martin]$ cp /etc/X11/XF86Config ./[martin@maq martin]$ _

    Como se puede observar siempre hay que señalar el directorio(o archivo) destino, a diferencia queen DOS.

    mvEl comandomv sirve para mover o cambiar de nombre un archivo o directorio.

    Tarea 1.8 Renombremos archivos

    Cambiemos de nombre el archivo que acabamos de copiar:

    [martin@maq martin]$ mv XF86Config XF86Config.mio[martin@maq martin]$ _

    Si ejecutamos el comandols ya visto, podemos ver este cambio:

    [martin@maq martin]$ lsDesktop XF86Config.mio[martin@maq martin]$ _

    rmPara borrar archivos se utiliza el comandorm.

    Tarea 1.9 Borremos archivos

    Probemos borrar el archivo XF86Config.mio:

    [martin@maq martin]$ rm XF86Config.mio[martin@maq martin]$ _

    Si nos ejecutamos unls veremos que efectivamente el archivo fue borrado.

    Ahora probemos borrar un archivo que no este en nuestro directorio personal:

    [martin@maq martin]$ rm /etc/X11/XF86Configrm: remove write-protected file ‘/etc/X11/XF86Config’? yrm: cannot unlink ‘/etc/X11/XF86Config’: Permiso denegad o[martin@maq martin]$ _

    Vemos que al ejecutar el comando el sistema nos pide confirmación para borrar un archivo protegidoy aunque confirmemos la operación no se nos permite realizarla. Esto es debido a que el archivo nonos pertenece. Recordemos que Linux es un sistema multiusuario donde se protegen los recursoscompartidos. Más adelante veremos como se administran estos permisos.

    8

    /etc/X11/XF86Config

  • exitSi quisiéramos terminar la sesión para que pueda utilizar lamáquina otro usuario, utilizaremos el co-

    mandoexit.Importante: Hay que acordarse siempre se salir de todas las terminales que tengamos abiertas con

    este comando. Si nos olvidamos de hacerlo, el sistema no tiene forma de comprobar que otra persona usenuestros recursos indiscriminadamente (ver sección 1.2.1(pág. 2)). Esto quiere decir que por ejemplo puedevenir alguien y borrar nuestros documentos sin ningún problema.

    1.3. Esquema inicial de Internet

    Un esquema muy simplificado de Internet es verla como una red interconectada con forma de grafo. Losnodos de este grafo son computadoras o routers y sus aristas son los medios de conexión (cable, enlacessatelitales, fibras ópticas, etc.). En la figura 1.1 (pág. 9) se puede ver un dibujo de este grafo donde losrouters están representados por círculos y las computadoras con rectángulos.

    Clientede web

    Clientede web

    Servidor

    de mailde web y

    Clientede web

    Cliente

    Cliente

    Clientede web

    de chat

    Servidorde mail

    de mail

    Servidorde chaty clientede mail

    Figura 1.1: Red como grafo

    Los nodos, como ya dijimos son básicamente 2 tipos de máquinas: computadoras y routers. Las prime-ras son las que ya conocemos; son máquinas de estados que son ejecutadas por software que implementantanto programas de usuarios como los protocolos de comunicación en red. Los routers son computadorasespecializadas en la transferencia de comunicación en red.Estas tienen solo la clase de software que im-plementan los protocolos de comunicación. Esta separaciónen la realidad no es tan tajante; por ejemplo lascomputadoras con Linux también pueden funcionar como routers y como computadoras comunes.

    El software de red de los nodos implementa el protocolo TCP/IP de comunicación. El software delprotocolo esta organizado en capas jerárquicas (ya veremosde que se trata esto). Por lo general los routerssolo implementan hasta la capa IP.

    9

  • Los nodos que son computadoras tienen software a nivel aplicación. El software de Internet (para web,mail, etc.) está organizado en una arquitectura cliente servidor; por ejemplo en las máquinas existe tantoel software para leer los mails (clientes de mails) como los servidores de este servicio que se encargan detransportar los mails desde su origen a su destino.

    1.4. Fuentes de información

    El sistema Linux comienza su desarrollo con el nacimiento del S.O. UNIX ya que la mayoría de lasaplicaciones desarrolladas para este último fueron portadas a Linux. Además, por la misma esencia de Linux(sistema operativo de código abierto desarrollado en formalibre) la cantidad de aplicaciones y recursosnuevos que puede brindar crece con mucha velocidad día a día.

    Por razones de tiempo, en este curso no se enseñará el manejo yadministración de todas estas aplica-ciones y recursos. En vez de ello se hará hincapié en brindar el conocimiento necesario para acceder a estainformación.

    Como se mencionó en la subsección 1.2.1 (pág. 4) las distribuciones Linux contienen documentaciónpara su uso y administración. Además existen fuentes de información en Internet que son de mucha utilidad.

    A continuación enumeraremos las más comunes.

    1.4.1. Manuales de sistema (man pages)

    Las distribuciones de Linux (incluso las de la mayoría de “los distintos Unix”) proveen información deuso de comandos, archivos de configuración e incluso funciones de librerías de sistema para programadoresen forma deman pages.man

    Para acceder a esta información se utiliza el programaman seguido con el nombre del ítem a buscar.

    Tarea 1.10 Comandoman

    Por ejemplo ejecutando en el shell

    [martin@maq martin]$ man ls

    Con ello se ejecuta un visor donde se pueden ver todos los parámetros posibles y su significado parael comando en cuestión. Este visor permite avanzar o retroceder el texto con la información a travésde las flechas del teclado.

    Al final de cada man page hay una lista de comandos relacionados que es muy útil cuando queremossaber como realizar cierta tarea.

    Una acción frecuente dentro de este visor es buscar algún texto. Para hacerlo, dentro del visor opri-mimos la tecla[/] y escribimos el texto a buscar. Una vez efectuado este paso, se oprime[Enter]y el visor señala la primera ocurrencia del texto. Si despuésde esto oprimimos la combinación deteclas[/][Enter] buscará la próxima ocurrencia.

    Hacer: Busquemos la opción-l y veamos que significa.

    Para ir al principio del documento oprimamos la tecla[g] . Para ir al final oprimamos la tecla[G]

    Para terminar la ejecución del visor se oprime la tecla[q] .

    10

  • aproposPara buscar una man page existe el comandoapropos. Cada man page tiene una descripción de la

    información que contiene. Las palabras de estas descripciones son indexadas en bases de datos que puedenser consultadas con este comando.

    Tarea 1.11 Uso del comandoapropos

    Ejecutemos el comandoapropos para buscar información sobre editores:

    [martin@maq martin]$ apropos editorQLineEdit [qlineedit] (3qt) - One-line text editorQMultiLineEdit [qmultilineedit] (3qt) - Simple editor for inputting

    texted (1) - text editored [red] (1) - text editoreditres (1x) - a dynamic resource editor for X Toolkit

    applicationsmcedit (1) - Full featured terminal text editor for

    Unix-like systemspico (1) - simple text editor in the style of the Pine

    Composerprompter (1) - prompting editor front-end for nmhred (1) - text editorred [ed] (1) - text editorsed (1) - a Stream EDitortksysv (8) - a runlevel service editorvim (1) - Vi IMproved, a programmers text editorvim [ex] (1) - Vi IMproved, a programmers text editorvim [rvi] (1) - Vi IMproved, a programmers text editorvim [rview] (1) - Vi IMproved, a programmers text editorvim [vi] (1) - Vi IMproved, a programmers text editorvim [view] (1) - Vi IMproved, a programmers text editorxedit (1x) - simple text editor for X[martin@maq martin]$ _

    La segunda columna de la salida del comando indica la seccióna la cual pertenece la man page (verapéndice B.1 (pág. 54)).

    Como se puede observar, el comandoapropos muestra la sección a la que pertenecen las man pages.Suele suceder que existan dos programas o funciones de librerías que existan con el mismo nombre. Porejemplo existe el programaprintf que sirve para escribir por pantalla especificando un formato, y existe unafunción con el mismo nombre en las librerías del lenguaje C. Si ejecutamosapropos printf veremos que laprimera pertenece a la sección 1, y la segunda a la 3.man

    Para indicarle al programaman que muestre la man page de una sección particular (ver apéndice B.1(pág. 54)), hay que anteceder al nombre de la misma el número de la sección.

    Tarea 1.12 Elegir la man page de una sección

    Veamos la man page de la función C printf:

    11

  • [martin@maq martin]$ man 3 printf[martin@maq martin]$ _

    Una cuestión que hay que mencionar es el carácter de la información que brindan las man pages. Lainformación de las mismas se supone que es solo para consultay suele ser de poca ayuda en el caso quese quiere aprender algún tópico sin ningún conocimiento previo. De todas formas, como es muy fácil deaccederlas (solo hay que usar el comando man) es siempre el primer paso que se da cuando queremosresolver algún problema. Además están disponibles en todaslas distribuciones.

    1.4.2. Manuales en formatoinfo (info pages)

    Otra fuente de información que suele estar incluida en muchas distribuciones son lainfo pages.Suelen tener los mismos ítem de información que las man pages, pero de forma más detallada. Están en

    casi todas las distribuciones.infoLas info pages se acceden con el comandoinfo.

    Tarea 1.13 Uso deinfo

    Ejecutemos el programainfo:

    [martin@maq martin]$ info

    Observemos que existe un cursor que se mueve con las flechas del teclado y permite recorrer lapágina, similar a un editor de textos.

    Las info pages tienen una estructura de hiper-texto. Esto quiere decir que existe una página principal ydesde ella se puede navegar por la documentación de programas y funciones de librería, de forma similar ala que se hace desde un navegador de Web. Es por ello que las mismas tienen una estructura de árbol, conpáginas “padres” e “hijos”.

    La forma de manipular este entorno es por medio del teclado. Algunos comandos son:

    [Enter] sobre el ítem: baja a la página “hijo”.

    [u] : (up) Va a la página “padre”.

    [p] : (previous) Va a la página “hermano” anterior.

    [n] : (next) Va a la página “hermano” siguiente.

    [l] : (last) Va a la página anterior visitado.

    [/] : Búsqueda. Funciona igual que las man pages.

    [q] : Salir.

    Otras fuentes de información alternativas y más orientadasa la administración de sistemas puede en-contrarse en el apéndice B.2 (pág. 55).

    12

  • Capítulo 2

    Herramientas útiles

    Este capítulo se verán algunos programas para realizar las actividades más comunes que se suelenrealizar como usuario. Se mostrarán solo las opciones más comunes de los mismos. Si se quiere profundizarsobre ellos ya se dieron las fuentes de información donde se puede acceder a este conocimiento (sección 1.4(pág. 10)).

    2.1. Cambiar el passwordpasswd

    El usuario ya está creado pero falta asignarle una clave de acceso. Para ello usaremos el comandopasswd.

    Tarea 2.1 Cambiar un password

    En la consola de root ejecutemos el comando:

    [root@maq root]# passwdChanging password for user martin.Changing password for martin(current) UNIX password:New UNIX password:Retype new UNIX password:passwd: all authentication tokens updated successfully

    Primero se nos pedirá que ingresemos la contraseña vieja. Sila hemos introducido bien, se nospedirá la nueva. Luego se nos pedirá que la confirmemos para locual tendremos que volverla aingresar. Ver que no aparece la clave en pantalla cuando la escribimos.

    Recordemos que las claves en Unix tienen en cuenta minúsculas y mayúsculas. Además deben serpalabras que no aparezcan en el diccionario (ni en inglés). Una buena costumbre es que tengan másde seis caracteres y que incluyan letras y números.

    2.2. Mailpine

    Uno de los clientes de mail más utilizados en los ambientes Unix es elpine. Veamos como recibir mails:

    13

  • Tarea 2.2 Leer mails recibidos

    Una vez ingresado al sistema con el login y la contraseña, ejecutemos el comandopine:

    [martin@maq martin]$ pine

    Si es la primera vez que usapine Aparecerá una pantalla una pantalla de bienvenida. Oprima la tecla[e] para continuar.

    Seguidamente aparecerá otra pantalla:

    En ella espera a que se ingrese la contraseña. Ingrese la misma que utilizó para autenticarse alsistema.

    A partir de aquí la pantalla mostrara un menú de opciones. Este se puede navegar con las flechas delteclado. Por defecto queda señalada la opciónFOLDER LIST. Si Oprimimos la tecla[Enter]mientras esté señalada esta opción aparecerá la pantalla siguiente:

    14

  • En la parte superior aparece también un menú que se puede navegar con las flechas1. Cada una esuna representa una carpeta donde se almacenan distintas clases de mails2:

    INBOX representa el contenedor de los mails que me llegan. Cuando quiero ver si tengo nuevosmails tengo que revisar esta carpeta.

    sent-mail contiene los mails que he enviado.

    saved-messages contiene los mails que he guardado. Por lo general son mails que se encontra-ban enINBOX pero que los quiero tener separados

    Ahora veamos los mails que han llegado oprimiendo la tecla[Enter] sobre la opciónINBOX.Haciendo esto aparecerá lo siguiente:

    1En la parte de abajo aparece una ayuda con las teclas asignadas para ejecutar distintas funciones. Esta característica se mantendráen la mayor parte de las pantallas.

    2Puede haber otras carpetas dependiendo como se haya configurado el programa.

    15

  • Aquí se muestra una lista de mails que han llegado. Los que comienzan con la una letraNson mailsque todavía no he leído. Para leer alguno hay que seleccionarlo con las flechas y apretar la tecla[Enter] :

    Para ejecutar algunas acciones con el mail actual se utilizan las siguientes teclas:

    [

  • Para componer un mail se oprime la tecla[c] .

    Tarea 2.3 Componer un mail

    Oprimamos la tecla[c] , con lo que aperecerá la siguiente pantalla:

    En la parte superior de la pantalla aparecen una serie de campos a llenar. Los más importantes son:

    To: donde se escribe la direccion de mail a la cual quiero enviar un mensaje.

    Subject: el título del mail. Este es el encabezamiento del mismo y por lo general es lo primeraque se observa cuando se recibe el mail.

    Más abajo (por debajo de la linea que diceMessage Text comienza el area de texto donde seescribe el mail.

    Estos campos y esta área son seleccionables con las flechas deteclado como ya es habitual.

    Si se quiere anular el mail que se esta escribiendo hay que oprimir las teclas[Control][c](como dice en la ayuda de la parte inferior).

    Hacer: Ahora pregunte a algún compañero de curso (del sexo que desee) la dirección de mail quele asignaron y envíele un mail con una carta de amor♥.

    Espere un rato sin desesperarse y fíjese si le llego algún mail.

    Si desea salir del programa oprima la tecla[q] .

    2.3. X

    Ya hablamos del sistema X en la sección 1.2.1 (pág. 5). El servidor X es un programa más de nuestroentorno.

    17

  • Tarea 2.4 Arrancar el X

    Para ejecutarlo escribir en la linea de comandos lo siguiente:

    [martin@maq martin]$ startx

    y oprimir la tecla[Enter] .

    A partir de aquí aparecerá una pantalla gráfica similar a la esta:

    La pantalla que acabamos de ver es distinta a las terminales virtuales que vimos en la sección 1.2.1 (pág. 2).

    Tarea 2.5 Cambiar de terminal

    Dentro del entorno gráfico oprimamos las teclas[Control][Alt][F1] .

    Con esto aparecerá la terminal modo texto donde lanzamos el X. Este programa habrá escrito en lamisma un montón de información referente al estado del hardware de video y su configuración.

    Desde esta terminal, oprimiendo las teclas[Alt][F2] ( cualquiera de las vistas en la sección 1.2.1(pág. 2)) se podrá ingresar al sistema autenticándose como usuario nuevamente.

    Para volver al entorno de ventanas hay que oprimir las teclas[Alt][F7] 3.

    En la ventana del X aparece una barra de botones en la parte inferior (se suele denominarpanel).Cliqueando con el mouse sobre los diferentes íconos podemosarrancar programas.

    Tarea 2.6 Terminal X

    3Esto puede cambiar según la configuración del sistema. Por lo general la tecla de función es la que le sigue a la última terminalmodo texto del sistema.

    18

  • Cliquear con el mouse el icono que tiene dibujado una pantalla de monitor.

    El programa que arranca haciendo esto es como una terminal delas que vimos en modo texto perocorriendo en el entorno gráfico. Aquí podemos arrancar cualquier programa como por ejemplo elpine.

    Para salir de esta terminal ejecutemos el comandoexit (al igual que antes), cliqueemos sobre el botóncon unax en la esquina superior derecha o oprimamos la combinación deteclas[Alt][F4] .

    Para salir del X hay que cliquear sobre el botón delpanelque tiene dibujado el símbolo de “apagar”(parecido a®).

    2.4. Emacsemacs

    Una herramienta imprescindible para programar es un editorde texto plano. Estos se diferencian de loseditores gráficos4 que solo escriban secuencias de caracteres sin ningún formato (por ejemplo tamaño deletras) más que el salto de linea.

    Uno de los más utilizados es el Emacs5

    Tarea 2.7 Arrancar Emacs

    Una vez que hemos entrado al X oprimir el botón que tiene dibujado una cabeza de un animalcon cuernos. Otra forma es entrando a una terminal (como vimos en la sección 2.6 (pág. 19)) yejecutando el comandoemacs.

    Con esto aparecerá una ventana como sigue:

    4Se los suele denominar WYSWYG: what you see what you get, en castellano lo que usted escribe es lo que usted obtiene.5Este editor tiene muchas más prestaciones. Por ejemplo sirve como cliente de mails. Muchas personas lo usan como shell.

    19

  • El Emacs dentro de X6 tiene un menú de opciones en la parte superior de la ventana y una sección enla parte inferior (llamadaminibuffer) donde por lo general se escriben comandos del programa y se recibenmensajes del mismo.

    Tarea 2.8 Menús de Emacs

    Cliqueemos con el mouse el menú que diceFiles :

    Este es e menú principal del Emacs. Aquí se muestran un serie de opciones que son seleccionables con elmouse. Algunas son:

    Open File : Para abrir archivos ya existentes o crear nuevos. Si se elijese pedirá que se ingrese el nombrede un archivo en elminibuffer. Si este archivo ya existe se lo abre. Si no, se creará uno nuevo. Cadaarchivo abierto para editar se lo denomina unbuffer.

    Save Buffer As : Sirve para guardar en disco lo que hemos escrito.

    Kill Current Buffer : Cerrará el documento que estemos editando.

    Make New Frame: Abrirá otra ventana de Emacs para editar otros textos (o el mismo).

    Exit Emacs : Termina el programa.

    Si estamos editando varios textos al mismo tiempo en una misma ventana. se puede intercambiar entreellos con las opciones del menúBuffers .

    Se puede elegir una sección de texto para cortar (borrarlo) opegar (duplicarlo) el mismo cliqueandoel comienzo del mismo manteniendo el botón izquierdo del mouse apretado y “pintando” la sección delmismo que se quiera seleccionar. Una vez hecho esto se puede borrar lo elegido con la tecla[Del] o

    6También funciona en modo texto.

    20

  • [Supr] o se puede pegar oprimiendo los dos botones del mouse de formaconjunta7 sobre el lugar dondequeremos copiarlo. Las acciones de copiar, pegar y borrar sepueden seleccionar también desde el menúEdit seleccionadoCopy, Paste y Cut respectivamente.

    Las teclas para seleccionar, copiar y pegar que se usan habitualmente en programas DOS son[Shift][Flecha] ,[Control][Ins] y [Shift][Ins] respectivamente. Por defecto Emacs no tiene esta asociación deteclas. Pero se puede configurar8 para que si la tenga. Fíjese si estas teclas funcionan y si no es así preguntea los profesores como configurarlo.

    Tarea 2.9 Editar texto

    Si recibió la carta de amor♥ por mail (de la sección 2.3 (pág. 17)) escriba un texto respondiéndola(como crea conveniente) con el Emacs en un archivo que se encuentre en el directoriotrabajosque creó en la sección 1.2.2 (pág. 7). Si lamentablemente no recibió ninguna escriba un chiste y nose haga problema.

    Envíelo por mail (estando en el X) al compañero que le envió lacarta o en su defecto a cualquierotro.

    Ayuda: Para mandar un mail con elpine de un texto ya escrito, lea la ayuda de la parte inferior dela pantalla del pine.

    Como ya se dijo el Emacs sirve para más cosas que sólo escribirtexto. Más adelante veremos comoutilizarlo para correr programas en Haskell. Por ahora veremos como utilizarlo para leer las info pages queya vimos en la sección 1.4.2 (pág. 12).

    7En sistemas con mouse de tres botones se puede oprimir el botón del medio para hacer esto.8Emacs se configura cambiando el archivo.emacs que se encuentra el directoriohome del usuario.

    21

  • Tarea 2.10 Info pages en Emacs

    Seleccionemos el menúBrowse Manuals whith Info que se muestra en la siguiente figu-ra:

    Con esto se puede navegar por las info pages desde el Emacs.

    2.5. Trabajando con disquetes

    Cunado usted haga trabajos en el laboratorio quizás necesite trasladar los archivos hasta su casa. Unade las formas es utilizando disquetes.

    Para manipular disquetes existen varias herramientas que son copias de las que hay en el sistema ope-rativo DOS. Los nombres son los mismos antecediendo la letramal comando DOS.mdir

    Para ver que tenemos guardado en un disquete existe el comando mdir. Para usarlo hay que ejecutar:

    mdir a:mcopy

    Para copiar archivos a un disquete se usa el comandomcopy. Su sintaxis de uso es:

    mcopy a:

    Si lo que queremos hacer es copiar archivos de un disquete a nuestro directorio la sintaxis es:

    mcopy a: ./mkdosfs

    Para formatear un disquete se utiliza el comandomkdosfs. Para usarlo hay que ejecutar:

    /sbin/mkdosfs -cv /dev/fd0

    Otros comandos para trabajar con disquetes pueden consultarse conman mtools.

    22

  • 2.6. Más comandos

    A continuación se verán algunos comandos útiles para ejecutar desde consola.rmdirPara borrar directorios se utiliza el comandormdir.

    Tarea 2.11 Borremos el directorio

    Entremos al sistema y hagamos un directorio llamadodir_prueba (ver el comandomkdir sec-ción 1.2.2 (pág. 7)). Comprobemos que efectivamente fue creado.

    Probemos el comando:

    [martin@maq martin]# rmdir dir_prueba[martin@maq martin]# _

    lessYa vimos el comandocat que sirve para volcar por pantalla un archivo. Pero si queremos ver un archivo

    que ocupe más de una pantalla, este comando no nos sirve. Peroel comandoless si permite recorrer unarchivo.

    Tarea 2.12 less

    Veamos el archivo de configuración del sistema X Windows. Para ello ejecutemos:

    [martin@maq martin]# less /usr/X11/XF86Config

    Este comando permite recorrer el documento de la misma formaque lo hace el comandoman.

    Para buscar texto también se usa la tecla[/] .

    Busquemos la palabrakeyboard y luegoKeyboard (con mayúscula).

    Las búsquedas conless funcionan distinto que conman; con less si importan las mayúsculas y minús-culas. Este comando admite argumentos que modifican este comportamiento.

    Tarea 2.13 Opción deless

    Ejecutemos ahora

    [martin@maq martin]# less -i /usr/X11/XF86Config

    El parámetro opcional-i permite que las búsquedas sean sin importar mayúsculas y minúsculas.

    Hacer: Repitamos la búsqueda de la palabrakeyboard .

    moreHay sistemas que no tienen instalado el comandoless. Por lo general el mismo es reemplazado por su

    antecesormore. El mismo es menos potente; solo permite desplazarse por el documento página por página.Para desplazarse a la página siguiente se usa la barra espaciadora, y para ir a la anterior se usa la tecla[b] .ln

    23

    dir_prueba

  • El sistema de archivos de Linux permite tenerenlaces simbólicos. Estos son archivos especiales quereferencian a archivos o directorios ya existentes. Son similares a los “accesos directos de Windows”. Susintaxis más común es:

    ln -s

    Tarea 2.14 Creando enlaces simbólicos

    Ejecutar en consola el siguiente comando:

    [martin@maq martin]# ln -s /etc/X11/ x11[martin@maq martin]# _

    Este comando creó un enlace en nuestro directorio personal desde el archivo~/x11 al directorio/etc/X11 .

    Para ver si se ha creado con éxito ejecutemos el comando:

    [martin@maq martin]# ls -ltotal 8drwxr-xr-x 3 martin martin 4096 dic 5 21:21 Desktoplrwxrwxrwx 1 martin martin 9 ene 29 19:46 x11 -> /etc/X11/[martin@maq martin]# _

    Ahora podemos acceder al enlace como si fuera el directorio al cual apunta.

    Hacer: Vayamos a este directorio, a través del enlace, con el comando cd x11 y ejecutemos elcomandopwd. ¿Que pasó?

    grepOtro comando de uso muy frecuente en la administración esgrep. El mismo sirve para buscar palabras

    (más específicamente expresiones regulares) en archivos.

    Tarea 2.15 Comandogrep

    Busquemos, otra vez, la palabrakeyboard en el archivo/etc/X11/XF86Config :

    [martin@maq martin]# grep keyboard /etc/X11/XF86Config# Specify which keyboard LEDs can be user-controlled (eg, wi th xset(1))# To customise the XKB settings to suit your keyboard, modify the# keyboard, you will probably want to use:# If you have a US Microsoft Natural keyboard, you can use:[martin@maq martin]# _

    Este comando muestra las líneas donde se encuentra esta palabra.

    También, este comando admite muchos argumentos (ver las manpages). Por defecto, el comandotiene en cuenta mayúsculas y minúsculas. Para revertir estaopción se utiliza el argumento-i :

    [martin@maq martin]# grep -i keyboard /etc/X11/XF86Confi g# Keyboard sectionSection "Keyboard"

    24

    ~/x11/etc/X11/etc/X11/XF86Config

  • # Specify which keyboard LEDs can be user-controlled (eg, wi th xset(1))# To disable the XKEYBOARD extension, uncomment XkbDisable .# To customise the XKB settings to suit your keyboard, modify the# keyboard, you will probably want to use:# If you have a US Microsoft Natural keyboard, you can use:[martin@maq martin]# _

    De esta forma muestra también las apariciones de la palabraKeyboard (con mayúscula).

    quotaGeneralmente en los entornos multiusuario se restringe la cantidad de espacio en disco que cada uno

    puede utilizar. Para ver la utilización de este espacio y si nos hemos excedido del asignado se utiliza elprogramaquota.

    Tarea 2.16 Viendo el espacio utilizado en disco

    Probar este comando y si nos hemos excedido de lo permitido borrar copiar en disquete para sutraslado algunos archivos que no necesitemos.

    2.7. Otros programas

    Los sistemas Linux vienen con muchos programas para desarrollar diferentes tareas.

    Midnight Commander: Es un programa que sirve para manipular archivos (copiar, mover, borrar archivoso directorio, editar texto, etc.). Además se pueden ejecutar comandos como si fuera un shell. Es unclon del viejo programa para DOS “Norton Commander”.mc

    Para usarlo hay que ejecutar en una terminal el comandomc.

    Ghostview:Es un visor de archivos de tipo postscript. Son archivos que terminan en.ps. Muchos prácticos(y este mismo apunte) estarán disponibles en este formato.gv

    Para usarlo hay que ejecutar en una terminal gráfica:

    gv

    Xdvi: Es un visor de archivos de tipo xdvi. Son archivos que terminan en.dvi. También algunos prácticosestarán disponibles en este formato.xdvi

    Para usarlo hay que ejecutar en una terminal gráfica:

    xdvi

    Acrobat Reader: Es un visor de archivos de tipo pdf.acroread

    Para usarlo hay que ejecutar en una terminal gráfica:

    acroread

    Visor de imágenes:Para poder visualizar imágenes en casi cualquier formato (jpeg, png, bmp, gif, etc.)se puede utilizar el programadisplay. El mismo también sirve para manipularlas.display

    Para usarlo hay que ejecutar en una terminal gráfica:

    25

  • display

    Haskell: El intérprete Haskell instalado es elhugs.hugs

    Para usarlo hay que ejecutar en cualquier terminal el comando hugs.

    Si abrimos un archivo de programa haskell (con extension.hs ) con elemacs y tenemos instalada laconfiguración para la materia podremos ejecutar elhugs desde este editor.ghc

    El compilador Haskell que suele estar instalado es elghc. El mismo nos permitirá crear ejecutablesde programas que hemos hecho para la materia.

    Compilador C: El compilador c instalado es elgcc.gcc

    Para usarlo hay que ejecutar en cualquier terminal:

    gcc -o gcc3

    También se encuentra una versión más nueva del mismo bajo el nombregcc3.

    Otros compiladores:Se encuentran a disposición otros compiladores para diferentes lenguajes.g++

    g++ es un compilador de C++.java

    java es el compilador de lenguaje Java.fpc

    fpc es un compilador de lenguaje Pascal.fp

    Este último programa tiene un entorno modo texto integrado de programación llamadofp.lazarus

    Otro entorno para el mismo compilador pero en modo gráfico eslazarus.squeak

    squeak es un compilador de SmallTalk.pl

    pl es un compilador de Prolog.

    Navegador web:Para navegar en la web el las maquinas del laboratorio cuentan con el programaopera.Para utilizarlo solo hay que ejecutarlo en X desde una terminal (ver sección 2.6 (pág. 19)).opera

    Hay que tener en cuenta que para poder usarlo se debe configurar el proxy de http. Para hacerlohay que ir al menúEdit → Preferences → Network → Proxy severs y poner comoproxy ahal.famaf.unc.edu.ar con puerto8080 .

    26

    hal.famaf.unc.edu.ar8080

  • Capítulo 3

    Comandos avanzados

    A continuación se verán otras comandos, al mismo tiempo que se profundizarán algunos conceptosnecesarios para su uso.

    3.1. Shells

    Vimos que los usuarios interactúan con el sistema a través del shell. Los shell corren como cualquierotro proceso en el sistema. Hasta ahora utilizamos el programabash, pero existen otros shells, por ejemplocsh (C Shell),ksh (Korn Shell),sh, tcsh, zsh.

    Por lo general las distribuciones proveen la mayoría de los que nombramos.which

    Tarea 3.1 Ver si tenemos instalado otro shell

    Para ver si tenemos instalado el shellcsh usemos un nuevo comando:

    [martin@maq martin]# which csh/bin/csh[martin@maq martin]# _

    Después de ejecutarlo se nos muestra su ubicación en el sistema de archivos.

    A continuación veremos algunas funcionalidades del shellbash, aunque también son aplicables a otros.

    3.1.1. Expansión de nombres

    Por lo general, como argumento de comandos puede ir una seriede nombres de archivos. Una forma deseñalar que archivos queremos que sean procesados es mediante expresiones regulares. Vamos a ver soloalgunos ejemplos de uso de las mismas.

    Si queremos ver en nuestro directorio todos los archivos quecomiencen con.bash ejecutemos:

    [martin@maq martin]# ls .bash *.bash_history .bash_logout .bash_profile .bashrc[martin@maq martin]$ _

    27

    .bash

  • El carácter* sirve para señalar cualquier palabra, incluso la palabra vacía. En realidad con el mismo,indicamos al shellbash que ejecute el comando.

    ls .bash_history .bash_logout .bash_profile .bashrc

    Otro carácter especial es?. El mismo es un carácter comodín. Por ejemplo si ejecutamos:

    [martin@maq martin]# ls /etc/f?p */etc/fdprm /etc/ftpconversions /etc/ftphosts/etc/ftpaccess /etc/ftpgroups /etc/ftpusers[martin@maq martin]$ _

    Observemos que se listan todos los archivos en el directorioque comiencen con f, que continúen concualquier letra, que sigan con una letrap y terminen con cualquier cosa.

    También se le puede indicar al shell que muestre solo caracteres en un rango (orden ASCII). Por ejem-plo, podemos solicitar al shell que muestre todos los archivos que comiencen conbash y continúen con uncarácter alfabético:

    [martin@maq martin]# ls .bash[a-z] *.bashrc[martin@maq martin]# _

    Oro ejemplo es si queremos mostrar todos los archivos ocultos que contengan la subpalabra| sh|:

    [martin@maq martin]# ls . * sh *.bash_history .bash_logout .bash_profile .bashrc .cshrc[martin@maq martin]# _

    Estas expresiones regulares funcionan con cualquier comando. Por lo cual hay que tener cuidado de noejecutar por ejemplo el comandorm * .

    3.1.2. Redireccionando la salida

    Una de las formas que tienen todos los procesos en Unix de comunicarse con el entorno es a través decanales. Hay tres canales estándar que sonsalida, entraday error. Todos los programas que hemos vistoescriben su salida por los canales de salida o de error (si quiere dar un mensaje de operación errónea) y estava a parar a la pantalla. Lo mismo sucede con lo escrito por medio del teclado; es leída por el programa (porejemplo el shellbash ) por el canal de entrada estándar que está conectada al dispositivo teclado.

    El shell [martin@maq martin]$bash puede interceptar los mensajes en estos canales para redireccionar-los a otros lugares que no sean la pantalla o el teclado.

    Tarea 3.2 Volcado de la salida a un archivo

    Por ejemplo, podemos indicarle al shell con el carácter> que la salida de cierto programa se escribaen un archivo, en lugar de ser escrito en la pantalla:

    [martin@maq martin]# ls /var > ~/dirvar.txt[martin@maq martin]# _

    Con esto se creó un archivo nuevodirvar.txt con el volcado a la salida estándar de comando.

    Si vemos el nuevo archivo encontraremos el listado del directorio /var :

    28

    bash|bashdirvar.txt/var

  • [martin@maq martin]# less dirvar.txt

    duEl comandodu sirve para ver cuanto espacio ocupan los directorios, recursivamente desde los directorios

    que le indiquemos. Si queremos que nos muestre solo el total de los directorios indicados, tendremos queusar el modificador-s .

    Tarea 3.3 Comandodu

    Ejecutemos el comandodu:

    [martin@maq martin]# du -s /usr/share/man/ *72 /usr/share/man/de_DE3708 /usr/share/man/es72 /usr/share/man/fr_FR28 /usr/share/man/ja32 /usr/share/man/man6920 /usr/share/man/man11004 /usr/share/man/man211408 /usr/share/man/man3176 /usr/share/man/man41000 /usr/share/man/man588 /usr/share/man/man6456 /usr/share/man/man71588 /usr/share/man/man84 /usr/share/man/man91256 /usr/share/man/mann16 /usr/share/man/pl68 /usr/share/man/pt_BR24 /usr/share/man/ru20 /usr/share/man/sk4 /usr/share/man/tmac.h[martin@maq martin]# _

    Aquí usamos una expresión regular que hace que el shell active el comandodu pasándole comoparámetro todos los archivos del directorio/usr/share/man . Para cada uno de ellos el comandocalcula el total del espacio utilizado sin recorrerlos recursivamente.

    Hacer: Guardemos esta salida del comando en un archivo llamadodu_salida .

    sortUn comando que sirve para ordenar archivos de texto es el comando sort, el mismo presenta muchas

    opciones (ver man page). Por defecto este ordena las líneas de un archivo utilizando como clave el principiode ellas hasta los primeros caracteres en blanco.

    Tarea 3.4 Comandosort

    Ejecutemos el comando:

    29

    /usr/share/mandu_salida

  • [martin@maq martin]# sort -n du_salida4 /usr/share/man/man94 /usr/share/man/tmac.h16 /usr/share/man/pl20 /usr/share/man/sk24 /usr/share/man/ru28 /usr/share/man/ja32 /usr/share/man/man68 /usr/share/man/pt_BR72 /usr/share/man/de_DE72 /usr/share/man/fr_FR88 /usr/share/man/man6176 /usr/share/man/man4456 /usr/share/man/man71000 /usr/share/man/man51004 /usr/share/man/man21256 /usr/share/man/mann1588 /usr/share/man/man83708 /usr/share/man/es6920 /usr/share/man/man111408 /usr/share/man/man3[martin@maq martin]# _

    El comando utiliza por defecto el orden lexicográfico (el deldiccionario) sobre el primer campo decada línea. El argumento-n indica que utilice el orden numérico sobre estos campos, en vez dellexicográfico (el del diccionario) que es el que usa por defecto.

    Hacer: Ejecutar el mismo comando pero sin-n .

    Como ya vimos se puede redireccionar la salida estándar a un archivo. También es posible hacerlo peroa la entrada estándar de otro proceso. Esto se hace con el carácter | (se denomina pipe).

    Tarea 3.5 Usando pipes

    En el ejemplo anterior volcamos la salida estándar del comando du y la escribimos a un archivotemporal. Después ordenamos su contenido con el comando sort. Pero se puede hacer estas doscosas de una vez. Ejecutemos el comando:

    [martin@maq martin]# du -s /usr/share/man/ * | sort -n4 /usr/share/man/man94 /usr/share/man/tmac.h16 /usr/share/man/pl20 /usr/share/man/sk24 /usr/share/man/ru28 /usr/share/man/ja32 /usr/share/man/man68 /usr/share/man/pt_BR72 /usr/share/man/de_DE

    30

  • 72 /usr/share/man/fr_FR88 /usr/share/man/man6176 /usr/share/man/man4456 /usr/share/man/man71000 /usr/share/man/man51004 /usr/share/man/man21256 /usr/share/man/mann1588 /usr/share/man/man83708 /usr/share/man/es6920 /usr/share/man/man111408 /usr/share/man/man3[martin@maq martin]# _

    Aquí, a la entrada del procesosort se redireccionó la salida del comandodu y aquel volcó el resultadopor su salida estándar.

    Además de esto se puede redireccionar esta salida al comandoless:

    [martin@maq martin]# du -s /usr/share/man/ * | sort -n | less

    Con esto logramos visualizar más cómodamente el resultado

    Para más alternativas de redirección que ofrece el shellbash remitirse a su man page.

    3.1.3. Variables de entorno

    Hay tres formas estándar de comunicarse con los procesos. Laprimera es por su entrada estándar (comoya hemos visto). La segunda es por medio devariables de entorno. La tercera es medio deseñales. Ahoraexplicaremos la segunda de ellas.

    Las variables de entorno son variables que existen en el entornobash que tienen valores asignados. Losprocesos hijos del entorno (o sea los programas que ejecutamos) pueden leerlas y tomar distintas decisionesa partir de las mismas; por lo general sirven para configurar programas.set

    El comandoset sirve para ver las variables con sus valores.

    Tarea 3.6 Ver variables de entorno

    Ejecutemos el comandoset para ver los valores de dichas variables:

    [martin@maq martin]# setBASH=/bin/bashBASH_ENV=/home/damian/.bashrcBASH_VERSION=$’2.05.8(1)-release’COLORS=/etc/DIR_COLORSCOLORTERM=COLUMNS=80DIRSTACK=()EUID=500GROUPS=()HISTFILE=/home/damian/.bash_historyHISTFILESIZE=1000HISTSIZE=1000

    31

  • HOME=/home/damianHOSTNAME=maq2HOSTTYPE=i386INPUTRC=/etc/inputrcPATH=/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/h ome/damian/bin[martin@maq martin]# _

    Se pueden ver los nombres de las variables (lado izquierdo del =) y su valor (lado derecho del=).

    Observemos que aquí hay información de, por ejemplo, cual esel nombre de la máquina (variableHOSTNAME) y cual es el camino de los programa que podemos ejecutar (variable PATH). En lamisma no está el path./ por lo que si queremos ejecutar algún programa que no este en el path,tendrá que ser. Esto es configurado así por razones de seguridad.

    exportPara crear variables de entorno nuevas o cambiar su valor se utiliza el comando export. Su sintaxis es:

    export =

    Tarea 3.7 Creación de variables de entorno

    Ejecutemos el comando:

    [martin@maq martin]# export MIVARIABLE=hola[martin@maq martin]# _

    Con esto habremos creado (o modificado si ya existía) la variableMIVARIABLE con el valorhola .

    Comprobar que efectivamente fue creada la variable.

    Ayuda: Usar también el comandogrep.

    3.1.4. Envío de señales a procesos

    Una forma interactiva para comunicarse con los procesos (a deferencia de la variables de entorno) sonlas señales. Todos los procesos reciben estas señales por medio de interrupciones en su ejecución. Losprocesos las reciben y cambian su comportamiento. Por ejemplo a partir de señales se pueden interrumpiro suspender las ejecuciones de los procesos. Este es un mecanismo de Unix pero la forma de activarlasdepende por lo general del shell que estamos usando.top

    Para poder monitorizar los procesos abramos otra consola y ejecutemos el comando top.

    Tarea 3.8 Comando top

    Para poder ver solo los procesos que nos interesan, ejecutemos el comando el argumento-i :

    [martin@maq martin]# top -i

    Este parámetro hace que solo se muestren los procesos que consumen CPU.

    32

    ./

  • 3:29am up 1 day, 9:08, 2 users, load average: 0,02, 0,03, 0,0455 processes: 54 sleeping, 1 running, 0 zombie, 0 stoppedCPU states: 1,3% user, 1,3% system, 0,0% nice, 97,2% idleMem: 126352K av, 98920K used, 27432K free, 0K shrd, 3552K buf fSwap: 354768K av, 48084K used, 306684K free 47556K cached

    PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND12876 martin 12 0 1040 1040 828 R 0,1 0,8 0:00 top

    Aquí se puede ver que el único proceso que está consumiendo CPU es el mismotop.

    Una de las formas de enviar señales a procesos es por medio de teclas especiales.

    Tarea 3.9 Terminar un proceso

    Para terminar un proceso se le envía una señal con la combinación de teclas[CTRL] -[c] .

    Ejecutemos el comandoyes:

    [martin@maq martin]# yesyyyyy

    Lo único que hace este comando es escribir sucesivas “y” por su salida estándar.

    Para terminar el procesos enviemos la señal oprimiendo las teclas[CTRL] -[c] .

    Ahora ejecutemos el comando pero redireccionando su salidaal dispositivo especial/dev/null .Este dispositivo virtual funciona como un resumidero de datos; todo lo que se envía al mismo desa-parece. Lo utilizaremos para no saturar la pantalla con caracteres:

    [martin@maq martin]# yes > /dev/null_

    Veamos en la otra consola con el comandotop que efectivamente este proceso está corriendo.

    Ahora oprimamos[CTRL] -[c] para que se detenga.

    33

    /dev/null

  • Los procesos en Unix también pueden estar corriendo enbackground. Esto es, sin bloquear la consola1,permitiéndonos ejecutar otros comandos. Una de las formas de hacerlo es agregando el carácter “&” al finalde la línea de comando.

    Tarea 3.10 Ejecutando un proceso en background

    Corramos en background el comando anterior:

    [martin@maq martin]# yes > /dev/null &[1] 13367[martin@maq martin]# _

    Observemos los dos números que aparecen en pantalla despuésde ejecutar la acción. El primero sellamanúmero de trabajo, el segundo es el identificador de proceso (PID). Más adelante este últimoen más detalle.

    Con esto el programa sigue corriendo. Volvamos a la consola con el procesotop para verificarlo.

    fgPara volver a este proceso (ponerlo enforeground)se usa el comandofg. Este comando toma como

    argumento el número de trabajo del proceso que pusimos en background.

    Tarea 3.11 Poniendo un proceso en foreground

    Con el procesoyes todavía corriendo, ejecutemos:

    [martin@maq martin]# fg 1yes >/dev/null_

    Ahora terminemos el proceso con las teclas[CTRL] -[c] .

    También podemos indicarle a un proceso que se detenga a través de una nueva señal. Para hacerlo hayque oprimir las teclas[CTRL] -[z] .

    Tarea 3.12 Deteniendo un proceso

    Ejecutemos otra vez el procesoyes:

    [martin@maq martin]# yes > /dev/null_

    Veamos en la otra consola con el procesotop si el mismo se está ejecutando.

    Detengamos el procesoyes con las teclas[CTRL] -[z] :

    1En DOS se suelen llamar programas residentes o TSR.

    34

  • [martin@maq martin]# yes > /dev/null

    [1]+ Stopped yes >/dev/null[martin@maq martin]# _

    El primer número que aparece en la consola es otra vez el número de trabajo. Veamos en la consolacon el procesotop queyes no consume más CPU.

    bgA un proceso detenido (como con el que acabamos de hacer) se lopuede despertar poniéndolo en

    background. Para ello se usa el comandobg. También lleva como argumento el número de trabajo delproceso que deseamos despertar.

    Tarea 3.13 Despertando un proceso

    Ejecutemos en la consola:

    [martin@maq martin]# bg 1[1]+ yes >/dev/null &[martin@maq martin]# _

    Veamos que efectivamente el proceso está corriendo (con el procesotop de la otra consola).

    Si queremos ponerlo en foreground ejecutemos el comandofg con el número de trabajo como argu-mento:

    [martin@maq martin]# fg 1yes >/dev/null_

    Ahora oprimamos las teclas[CTRL] -[c] para terminarlo.

    killOtra forma de enviar señales es con el comandokill. Esto es utilizado cuando no tenemos acceso por

    consola para enviarle señales, por ejemplo cuando queremosdetener demonios. Su sintaxis es:

    kill [- ]

    El parámetro de señal es optativo; por defecto envía la señalpara terminar la ejecución. La lista de señalesposibles se puede ver ejecutando el comando con el argumento-l únicamente (probar ejecutarlo). Tambiénse pueden escribir en formato numérico (ver archivo/usr/include/asm/signal.h .ps

    Para conocer el identificador de proceso se puede utilizar elcomandops (el comandotop también sirve).El mismo tiene muchos argumentos posibles. Para ver los identificadores de todos los procesos se utiliza elparámetro-x .

    Tarea 3.14 Comando kill

    Probemos enviar señales con el comandokill. Para ello ejecutemos otra vez el comandoyes:

    35

    /usr/include/asm/signal.h

  • [martin@maq martin]# yes > /dev/null &[1] 13416[martin@maq martin]# _

    Probemos ver el identificador de proceso:

    [martin@maq martin]# ps -x | grep yes13416 pts/5 R 0:09 yes[martin@maq martin]# _

    El primer número que aparece es el que estamos buscando.

    Ejecutemos ahora el comandokill con este número:

    [martin@maq martin]# kill 13416[martin@maq martin]# _

    Ejecutemos otra vez el comandops para ver si realmente finalizó la tarea.

    NotaHay procesos que no atienden las señales de terminación normales (SIGTERM). Si tratamosde terminar uno de estos procesos con el comandokill sin indicarle la señal, no los vamos alograr. Para poder hacerlo hay que indicarle la señal-9 (SIGKILL).

    NotaLos procesos tienen como atributo el usuario que los lanzó (ya lo veremos con profundidad).Si queremos terminar un proceso de otro usuario, no lo vamos apoder hacer. Únicamente elusuario dueño del proceso (quien lo ejecutó) y el root puedenconcluirlos.

    3.1.5. Archivo de configuración del bash

    Al comenzar un sesión con el shell este ejecuta los camandos que se encuentran en el el archivo.bashrc . En este archivo se pueden crear variables de entorno para configurar las sesiones (ver la manpage delbash) o ejecutar algún comando al comenzarla.

    Tarea 3.15 Mostrar uso de espacio en disco

    Es bastante útil recordar la cantidad de espacio en disco queestamos utilizando y ver si no noshemos excedido de la quota.

    Hacer que al ingresar a la sesión se nos muestre este espacio (ver comando aprendido en sección 2.6(pág. 25)).

    36

  • 3.2. Usuarios y Grupos

    Como ya mencionamos Linux es un sistema multiusuario y multitarea. Esto implica la implementaciónun esquema de protección para que los recursos se compartan de forma armónica. El esquema de Unix esmuy simple y se basa en la existencia de dos entidades: usuarios y grupos. Los usuarios son las entidadesque representan los sujetos del sistema. Los mismos son los consumidores de recursos. A su vez los usuariospueden pertenecer a diferentes grupos. Estos pueden ser pensados como conjuntos de usuarios, los cualesno son necesariamente disjuntos. En la figura 3.1 (pág. 37) sepuede ver un esquema de los mismos. Una

    usuario 1

    grupo 2 grupo 3

    usuario 2usuario 3

    usuario 4

    grupo 1

    Figura 3.1: Grupos y usuarios

    regla es que no pueden existir usuarios que no pertenezcan a ningún grupo. De esta forma todos los usuariostienen su grupo primario. Este es un grupo distinguido para cada usuario.

    Los recursos tienen información sobre que usuarios y que grupos pueden utilizarlos y de que manerahacerlo. Por ejemplo, cada archivo y directorio del sistemade archivos, tiene un usuario y un grupo al cualpertenecen.

    Las personas reales que utilizan el sistema utilizan los recursos a través de procesos que ellos ejecutan.Cada persona, cuando entra al sistema, se autentica como un usuario (a través del password) y ejecutaprogramas que utilizan recursos. Es por ello que cada proceso tiene información del usuario que los ejecutó.Además tiene información del grupo primario (si no se especifica otra cosa) de este usuario. De esta formacada proceso tiene, por lo menos 3 atributos2:

    Identificador de proceso (PID). Esto ya lo vimos.

    Identificador del usuario (UID).

    Identificador del grupo (GID).

    Todos estos atributos son números. Para poder ser leídos másfácilmente por humanos, los UID’s y GID’stienen asociados nombres. El nombre de nuestro UID es el que usamos cuando entramos al sistema. El

    2En realidad existen dos UID’s: el real y el efectivo. Lo mismo ocurre con el GID.

    37

  • sistema operativo se rige por los números, no por el nombre (podríamos tener dos nombres de usuariosdistintos asignados al mismo número).

    La definición de estos usuarios y grupos está en archivos de texto, los archivos/etc/passwd y/etc/group .

    Tarea 3.16 Veamos los archivospasswd y group

    Hagamos en consola:

    [martin@maq martin]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:daemon:x:2:2:daemon:/sbin:adm:x:3:4:adm:/var/adm:lp:x:4:7:lp:/var/spool/lpd:sync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:news:x:9:13:news:/var/spool/news:uucp:x:10:14:uucp:/var/spool/uucp:operator:x:11:0:operator:/root:games:x:12:100:games:/usr/games:gopher:x:13:30:gopher:/usr/lib/gopher-data:ftp:x:14:50:FTP User:/var/ftp:nobody:x:99:99:Nobody:/:martin:x:500:501:Usuario de prueba:/home/martin:/bin/ bash[martin@maq martin]# _

    Este archivo consta de de una serie de campos por línea, separados por el carácter “: ”. En cada línea,el primer campo es el nombre del usuario. El segundo sería su clave encriptada si no usáramosshadow password (ya veremos que es eso). El tercero es el UID.El cuarto es número del grupoprimario del usuario.

    Hacer: ¿Que son los otros campos?

    Ahora veamos el archivo/etc/group :

    [martin@maq martin]# cat /etc/grouproot:x:0:rootbin:x:1:root,bin,daemondaemon:x:2:root,bin,daemonsys:x:3:root,bin,admadm:x:4:root,adm,daemontty:x:5:disk:x:6:rootlp:x:7:daemon,lpmem:x:8:kmem:x:9:wheel:x:10:rootmail:x:12:mailnews:x:13:newsuucp:x:14:uucpman:x:15:

    38

    /etc/passwd/etc/group/etc/group

  • games:x:20:gopher:x:30:dip:x:40:ftp:x:50:nobody:x:99:martin:x:501:

    Este archivo tiene la misma separación de campos que el anterior. El primero es el nombre delgrupo, el tercero el número del grupo que tiene ese nombre, y el cuarto es la lista de usuarios quepertenecen a ese grupo. En esta lista no hace falta que figure el usuario si este es su grupo primario.

    En este ejemplo el usuariobin pertenece a los gruposbin , daemon y sys . La última línea no serefiere al usuariomartin si no a un grupo que tiene el mismo nombre que el usuario. Notarque esel grupo primario del mismo.

    Hacer: Buscar información acerca del significado del segundo campo.

    Por convención, los UID’s y GID’s menores que 500 (esto puedeno ser así) no representan a usuariosreales y se suelen utilizar para configurar las políticas de seguridad de los demonios. Se suelen llamarcuentas del sistema.

    Puede suceder que el grupo primario de los usuarios sea el mismo para todos ellos. En algunos sistemashay un grupo llamadousers al cual pertenecen todos los usuarios comunes (mayores que 499).

    Red Hat y otros sistemas utilizan como política de creación de usuarios que cada uno tenga un grupoprimario propio, con el mismo nombre que el usuario. Este esquema se denomina “User Private Groups”(UPG) y tiene algunas ventajas.

    Tarea:Leer la sección “User Private Group” del capítulo 2 de “Red Hat Linux Reference Guide”.

    En distribuciones más nuevas viene un sistema de autenticación llamadoshadow password. La prin-cipal característica es que las claves de los usuarios no songuardadas en los archivos/etc/passwd y/etc/group . En vez de ello se almacenan en archivos ocultos a todos los usuarios, excepto el root, lla-mados/etc/shadow y /etc/gshadow . Esto tiene la ventaja que las claves no pueden ser accedidaspor los usuarios comunes pero la información de los mismos (directorios/home por ejemplo) sí lo puedenser por aplicaciones que necesiten estos datos. Además los nuevos archivos guardan información adicional.

    Hacer: Buscar información sobre la sintaxis de los archivos/etc/shadow y /etc/gshadow .idUn comando que sirve para ver los grupos a los que pertenece unusuario esid. Este se ejecuta seguido

    del nombre del usuario del cual queremos obtener información.

    3.3. Dueños y permisos de archivos

    Como ya dijimos el esquema de usuarios de Unix sirve para regular el acceso a los recursos; los recursostienen información sobre que usuarios y que grupos pueden utilizarlos y de que manera hacerlo. Vamos aver como se implementa este esquema en el sistema de archivos.

    3.3.1. Conceptos generales

    Los archivos tienen, un usuario dueño y un grupo. El dueño y elgrupo son generalmente el usuario quelo creó y el grupo primario de este usuario.

    39

    /etc/passwd/etc/group/etc/shadow/etc/gshadow/home/etc/shadow/etc/gshadow

  • En cada archivo, su dueño, grupo y demás usuarios hay lo que sedenominanpermisos. Hay tres clasesde ellos:

    permiso de lectura (read) significa que se puede leer el archivo.

    permiso de escritura (write) significa que se puede modificar o escribir el archivo.

    permiso de ejecución (execute)significa que se puede correr el archivo si es un programa.

    Ya tenemos todos los componentes básicos del sistema de protección del sistema de archivos. En lafigura 3.2 (pág. 40) se muestra un programa ejecutable con permisos típico. Esta salida fue generada con encomandols -l .

    escribir y ejecutarEl dueño puede leer,

    leer y ejecutarEl grupo puede

    leer y ejecutarOtros pueden

    − rwx

    Este es unarchivo común Dueño

    Grupo

    2 pepe users 12423 Nov 9 09:32 mi_ejecr−x r−x

    Figura 3.2: Mostrando dueños y permisos

    En esta figura, la serie de caracteres “- rwx r-x r-x ” nos indica los permisos de estos archivos. Elprimer carácter es un guión, el cual indica que se trata de un archivo común. Este carácter puede serd si esun directorio,l si es un enlace simbólico,c si es un dispositivo de carácter (ver subsección B.3.4 (pág.58)o b si es un dispositivo de bloque.

    Los caracteres, de aquí en adelante, se refieren a permisos y se representan internamente por bits. Losprimeros tres bits (caracteres en la salida del programals) se aplican al dueño. Aquí el usuariomartintiene todos los permisos. Los siguientes tres bits se aplican a los miembros del grupo: ellos pueden leer elarchivo y ejecutarlo, pero no pueden escribirlo ya que el carácter que contendría unaw contiene un guión.Los últimos tres bits se aplican a los demás usuarios que no son el dueño ni el grupo. Estos tienen los mismospermisos que en el caso del grupo. Existe otro grupo de 3 bits adicionales (no se muestran separados conel comandols) que sirven para indicar características adicionales (setuid,setgid y sticky bit). Mas adelanteveremos de que se trata esto.

    NotaLas entidades dueño, grupo y otros se las suele denominarniveles de protección.

    El significado de los permisos cambia si el archivo es un directorio. En este caso los permisos significan:

    r permite que se pueda listar el contenido del directorio.

    w permite crear una nueva entrada en el directorio (un archivoo un subdirectorio) o borrar una existente.

    x permite que se pueda listar la información del directorio. No hay mucha diferencia con el permisor .Se suele denominarpermiso de pasoya que permite atravesar un directorio hacia sus subdirectorios.Se suele aplicar junto con el permisor (los dos o ninguno).

    40

  • Recordemos que el usuario root puede hacer cualquier cosa. Así aunque por ejemplo puede borrar o creararchivos en los directorios personales, aunque no tenga permisos explícitamente.

    Cada permiso puede representarse con valores numéricos:

    r = 4

    w= 2

    x = 1

    - = 0

    Cuando estos valores son sumados, el total puede ser usado para manipular los permisos.Por ejemplo para el archivomi_eject de la figura anterior, tenemos los permisos en forma numérica:

    - (rwx) (r-x) (r-x)| | |

    4+2+1 4+0+1 4+0+1

    El total para el dueño es siete, el total para el grupo es cincoy para los demás usuarios es cinco. Lospermisos entonces pueden ser leídos como755 .

    A continuación se muestra una lista de permisos comúnmente usados:

    -rw------- (600) Solo el dueño y el root tienen permiso de lectura y escritura.

    -rw-r--r-- (644) Solo el dueño y el root tienen permiso de lectura y escritura.El grupo y otrossolo puede leer.

    -rwx------ (700) Solo el dueño y el root pueden leer, escribir y ejecutar el archivo.

    -rwxr-xr-x (755) El dueño y el root pueden leer escribir y ejecutar el archivo.El grupo y losotros solo pueden leerlo y ejecutarlo.

    -rwx--x--x (711) El dueño y el root pueden leer escribir y ejecutar el archivo.El grupo y losotros solo pueden ejecutarlo. Esto quiere decir que por ejemplo no pueden copiarlo (con el comandocp).

    -rw-rw-rw- (666) Todos pueden leerlo y escribirlo (hay que tener cuidado con estos permisos.

    -lrwxrwxrwx (777) Todos pueden leerlo escribirlo y ejecutarlo (de nuevo, estos permisos pue-den ser peligrosos).

    A continuación veremos permisos comúnmente usados para directorios:

    drwx------ (700) Solo el dueño y el root pueden listar el contenido del directorio, crear nuevoselementos o borrarlos.

    drwxr-xr-x (755) Cualquiera puede ver el listado de archivos de este directorio, pero solo eldueño y el root pueden crear nuevos elementos o borrarlos.

    NotaCabe mencionar que en los dos últimos ejemplos con directorios, ningún usuario distinto deroot va poder borrar un archivo dentro del mismo, aunque el archivo le pertenezca. En el últimoejemplo, si el usuario es dueño, lo va poder modificar (pero noborrar). En el primero no porqueni va a poder entrar al directorio. Si tuviera permiso de pasosi lo podría hacer.

    41

    mi_eject

  • 3.3.2. Cambiando dueños, grupos y permisoschown

    El comandochown sirve para cambiar el dueño de un archivo ychgrp sirve para cambiar el grupo.chgrpSolo el usuario root puede ejecutarchown. La sintaxis de estos comandos es muy simple. Por ejemplo,

    para cambiar el dueño y el grupo abin de un programa llamadomi_prog se utilizarían los comandos:

    [root@maq root]# chown bin mi_prog[root@maq root]# chgrp bin mi_prog[root@maq root]# _

    Estos comandos permiten el argumento-R para cambiar recursivamente todo un directorio.chmodLa sintaxis para cambiar permisos es más complicada. Los permisos son usualmente llamadosmodos

    de archivoy el comando para cambiarlos eschmod.

    Tarea 3.17 Comandochmod

    Exploremos este comando. Antes, creemos un archivo llamadomi_prog con el comandotouch.touchEste comando sirve, entre otras cosas, para crear archivos vacíos. en nuestro caso lo vamos a usarpara tener un archivo de prueba. Ejecutemos entonces el comando:

    [martin@maq martin]# touch mi_prog[martin@maq martin]# _

    Con ls veamos si fue creado y que permisos tiene.

    [martin@maq martin]# ls -l mi_prog-rw-rw-r-- 1 martin martin 0 feb 2 22:47 mi_prog[martin@maq martin]# _

    Supongamos que este archivo es un programa (actualmente es un programa vacío) y queremos quetenga permiso de ejecución:

    [martin@maq martin]# chmod +x mi_prog[martin@maq martin]# _

    El signo+ significa “agregar permisos”, y lax indica que permiso agregar. Ejecutemosls para vercomo cambiaron los permisos.

    Usado de esta forma, el comando asigna permisos a todos los niveles de protección (dueño, gruposy otros).

    Si queremos sacar el permiso usemos el signo- en el lugar del+:

    [martin@maq martin]# chmod -x mi_prog[martin@maq martin]# _

    Supongamos que no queremos que cualquiera pueda usar nuestro programa. Podemos asignarle solopermiso de ejecución para el dueño solamente con el comando (ejecutarlo):

    [martin@maq martin]# chmod u+x mi_prog[martin@maq martin]# _

    42

    mi_progmi_prog

  • Veamos conls que sucedió. Todo lo que va antes del signo+ son los nivel de protección (dueño,grupo o otros) y lo que va después son los tipos de permisos. Los permisos del dueño se designanse designan conu, los del grupo cong y los de los otros cono. Entonces para asignarle permisos algrupo y a nosotros mismos ejecutemos:

    [martin@maq martin]# chmod gu+x mi_prog[martin@maq martin]# _

    Múltiples permisos también pueden ser asignados:

    [martin@maq martin]# chmod gu+rwx mi_prog[martin@maq martin]# _

    La man page del comando es muy completa y figuran otras formas abreviadas para el comando.Una opción muy utilizada por administradores es el argumento -R . Tiene el mismo efecto que paralos comandoschown y chgrp, cambiar recursivamente los permisos de todos los archivosen undirectorio.

    Existen otros permisos para archivos y directorios que no son muy usados pero pueden ser muy impor-tantes en la tarea de administración. Ellos son:

    setuid Este permiso se aplica a archivos ejecutables. Si un programa lo tiene activado cualquier persona quetenga permiso para hacerlo, levantará el proceso correspondiente con el UID del dueño del programa.Este tipo de permisos es muy peligroso en el caso que el dueño sea el root. La sintaxis del comandochmod para activarlo es:

    chmod u+s

    setgid Idéntico que el anterior pero cambia el GID del proceso activado. La sintaxis del comandochmodpara activarlo es:

    chmod g+s

    También se utiliza para directorios. En este caso si un proceso se ejecuta dentro del directorio cam-biará su GID al grupo del mismo. Para que esto funcione el usuario que ejecuta el proceso debepertenecer al grupo.

    sticky bit Funciona solo para directorios. Este permiso hace que todoslos archivos del directorio puedanser borrados solo por el dueño, el usuario root o el dueño del directorio. Se usa generalmente endirectorios utilizados por todos los usuarios como el/tmp . La sintaxis del comandochmod paraactivarlo es:

    chmod o+t

    3.4. Instalando programas

    Se podría pensar que para instalar un programa solo hay que conseguirlo y copiarlo en un directorioaccesible. Esto, por lo general, no funciona por diferentesrazones. Una es que usualmente los mismosvienen con archivos de configuración que deben estar en posiciones preestablecidas dentro del file system.

    43

    /tmp

  • Uno debe conocer de antemano cuales son estas ubicaciones y copiar estos archivos a las mismas. Otrarazón es que los programas en Linux suelen hacer uso de librerías. Por lo tanto si queremos que el programafuncione deberemos tener instaladas las librerías que utiliza. Además las librerías tienen diferentes versionesque deben concordar con la que el programa necesita.

    Existen muchas soluciones a estos problemas. La más clásicaes distribuir los programas y archivosde configuración en archivos que guardan la información de suubicación, por lo general comprimidos.Además suelen venir compilados de forma