Tomo1 Linux
Tomo1 Linux
LINUX
Prologo
Aprender implica esfuerzo. Esta es la nocin que se ha ido perdiendo. Que aprender es un trabajo, una tarea nada sencilla que demanda sacrificios. Que aprender supone que cada persona emprenda un esfuerzo individual destinado a modificarse a s misma, por lo general con ayuda de otros. All interviene el docente, que con su conocimiento y experiencia gua al alumno a esa exploracin y, sobre todo, lo interesa en emprenderla. Afirma un proverbio chino. Los maestros abren la puerta, t debes entrar por ti mismo.
-1-
UTN - FRC
LINUX
Introduccin
En un primer momento nos propusimos confeccionar un apunte netamente practico, con actividades de laboratorio autocontenidas, es decir actividades resueltas y explicadas paso a paso. Pero a medida que fuimos avanzando en su desarrollo, sentimos la necesidad de complementar esas actividades con fundamentos tericos, de cmo Linux administra los recursos de un sistema informtico. El presente material es una gua Terica-Prctica que contiene los conceptos tericos propios de Linux y a su vez relaciona y refuerza los conceptos tericos de los Sistemas Operativos en general. Cada tema es tratado conceptualmente y en forma practica por lo que se hace deseable disponer de al menos una PC para seguir las actividades que se van planteando. Los temas tratados en este trabajo han sido desarrollados con un nivel mnimo y homogneo de profundidad, de forma tal que el alumno cuente con las bases necesarias para introducirse en el fascinante mundo de Linux y le sea posible la investigacin posterior de los temas que sean de su inters. La organizacin de su contenido esta dividido en captulos segn el tema. Los captulos contienen temas diagramados para desarrollar aproximadamente en una clase de laboratorio. Al final de cada captulo hay actividades para reforzar la teora y/o actividades practicas de laboratorio. Estas actividades integran los conceptos vistos en temas anteriores, estn resueltas y acompaadas de una breve explicacin conceptual. Adems de las actividades de cada captulo, se anexa una gua de ejercicios de practica libre, tambin resuelta, cuyo fin es reforzar los conceptos desarrollados, estas actividades se encuentran bajo el titulo de Prcticos Integradores. Al realizar este trabajo no pensamos que resultara una tarea tan ardua, ya que hemos dedicado muchas horas de trabajo e investigacin con el fin de lograr un material lo mas completo posible y en un lenguaje entendible para el alumno. Es por ello que la labor terminada nos han dejado la grata sensacin de haber cumplido nuestros objetivos. Es nuestro compromiso agregar en la siguiente edicin algunos temas que creemos son importantes de tratar pero, pero como el tiempo es tirano no pudimos incluirlos en la presente edicin. Est de mas decir que sern bienvenidas todas las sugerencias y/o aportes que los docente y alumnos nos hagan llegar.
-2-
UTN - FRC
LINUX
-3-
UTN - FRC
LINUX
Que es Linux?
LINUX es un sistema operativo gratuito y de libre distribucin. Una de cuyas mayores ventajas es su portabilidad a diferentes tipos de computadores, por lo que existen versiones de LINUX para casi todos los tipos de computadores, desde PC y Mac hasta estaciones de trabajo y supercomputadores. Al contrario que otros sistemas operativos, LINUX no est pensado para ser fcil de emplear, sino para ser sumamente flexible. Por lo tanto LINUX no es en general tan sencillo de emplear como otros sistemas operativos, aunque, se estn realizando grandes esfuerzos para facilitar su uso. Pese a todo la enorme flexibilidad de LINUX y su gran estabilidad ( y el bajo costo) han hecho de este sistema operativo una opcin para tener en cuenta por aquellos usuarios que se dediquen a trabajar a travs de redes, naveguen por Internet, o se dediquen a la programacin. Adems el futuro de LINUX es brillante y cada vez ms y ms gente y ms y ms empresas (entre otras IBM, Intel, Corel) estn apoyando este proyecto, con lo que el sistema ser cada vez ms sencillo de emplear y los programas sern cada vez mejores.
Historia
La aparicin de LINUX en el mundo de la informtica fue una evolucin de la cultura de Unix. Este se desarroll a mediado de los 70 cuando los miniordenadores y los grandes sistemas dominaban el mundo corporativo. El problema histrico de Unix ha sido su inaccesibilidad a los programadores y desarrolladores que queran trabajar con l fuera de los grandes sistemas de ordenadores. Aunque posteriormente aparecieron versiones de Unix para PC, las primeras versiones comerciales costaban mas que el PC en el que se deban ejecutar. Esto facilit el nacimiento de LINUX, de la mano de Linus Torvalds, un estudiante de la universidad finlandesa de Helsinki, quien, en 1991, se aboc a la tarea de reemplazar a Minix, un clon de Unix de pequeas proporciones y finalidad acadmica, desarrollado aos antes por Andrew Tannenbaun. En un principio Linus Torvalds escribi todo LINUX en Assembler , pero luego, llegada la hora de escribir algunos drivers, comenz a utilizar C, con lo que not una importante aceleracin en los tiempos de desarrollo. A fines de Agosto de 1991, Torbalds ya tena una precaria versin 00.1 de Linux, que era capaz de montar disquetes y contaba con un pequeo sistema de archivos, pero no fue anunciada como oficial ya que necesitaba de Minix para compilarla. En Octubre del 91 fue anunciada oficialmente la versin 0.02, esta versin poda ejecutar las utilidades bash, gcc, gnu-make, gnused, y compress. Esta versin no era muy usable. A medida que avanzaba en su desarrollo, Torvalds fue dejando el cdigo fuente de las sucesivas versiones del kernel (ncleo) y utilidades de Linux a disponibilidad de los usuarios de Internet. Este fue sin duda un gran acierto, ya que hizo posible que una multitud de desarrolladores de todo el mundo se familiarizaran con el cdigo, lo cual signific un gran aporte de sugerencias, evolucionando luego hacia el desarrollo distribuido de software, que ha permitido a Linux alcanzar un alto nivel de desarrollo y madurez, as tambin como un amplio grado de aceptacin. Aunque el Linux actual se ha desarrollado con el aporte de programadores del mundo, Torvalds an mantiene el control sobre los cambios en la parte bsica del sistema operativo, el ncleo.
-4-
UTN - FRC
LINUX
Esta es la mascota oficial de Linux, que fue elegida por el creador, para representar el sistema operativo que l haba creado. Hoy en da todo el mundo asocia a este simptico pingino con el sistema operativo Linux.
Caractersticas
Actualmente, Linux posee todas las caractersticas que pueden encontrarse en cualquier sistema Unix moderno: Multitarea real: La palabra multitarea describe la capacidad de ejecutar muchos programas al mismo tiempo sin detener la ejecucin de cada aplicacin. La multitarea es una virtud codiciada por muchos sistemas operativos, pero lograda por muy pocos. Casi todos los que dicen serlo lo son a medias; en cambio, la multitarea que usa LINUX administra los recursos garantizando que todos los procesos en ejecucin, incluidos los que corren en background, tengan su tiempo de procesador. Multiusuario: LINUX es un sistema operativo multitarea y, obviamente, debe ser multiusuario, es decir que permite a distintas personas acceder al sistema compartiendo los recursos que el Administrador del Sistema (superusuario, root) le asigne de acuerdo con su jerarqua, dndole adems a cada uno la privacidad y proteccin necesarias. Soporta consolas virtuales: lo que permite tener ms de una sesin abierta en la consola de texto y conmutar entre ellas fcilmente. Soporta los estndares POSIX, BSD, IEEE y System V. Opera con todos los sistemas de ficheros estndar, como FAT de DOS, VFAT de Windows, OS2/FS, IS09660 (CD-ROM), Minix y otros. Sistema Operativo de Red: Su protocolo es TCP/IP (incluido en el kernel) y acepta todas la placas de red, SLIP, PPP para acceso serial a TCP/IP, PLIP para conexiones en paralelo, NFS Sistema de Archivos de Red, Telnet, NNTP, SMTP, IPX, AppleTalk. Por medio de la utilizacin del paquete Samba, Linux puede interactuar con servidores Windows NT y estaciones Windows For Workgroups y Windows95, para acceder desde Linux a recursos compartidos desde maquinas Windows (directorios e impresoras), y viceversa. El kernel incluye soporte para IPX, lo que le permite funcionar como ruteador en redes Novell. Direccionamiento de 32 bits reales en una PC y de 64 en una Alpha. Su kernel utiliza las caracterstica del modo protegido de los micros 386 y superiores. Soporte completo de hardware, multimedia, mdems, impresoras, placas de video, monitores, teclados, mouse, etc. Poderoso entorno grfico con innumerables sistemas de ventanas. Los ms populares son FWVM, GNOME, KDE, CDE, Enlightenment, Afterstep, NextLevel, @rM, etc. G.N.U.: si bien Linus Torvalds es el titular del derecho de autor de LINUX, todo, incluido el kernel con sus fuentes, est bajo licencia GNU. Esta licencia permite que todo el software desarrollado bajo este concepto sea de libre distribucin, de modo que se ofrece software de calidad al pblico en general sin que los programadores pierdan sus derechos de autor y dejando abierta la posibilidad para que cualquier otro programador pueda ampliar o modificar el programa. Libreras compartidas: shared libraries, gracias a esta caracterstica, no es necesario que las rutinas contenidas en libreras estndar se carguen ms de una vez en memoria, ya que cualquier programa que se encuentre en tiempo de ejecucin puede acceder a ellas. De esta manera, los binarios (ejecutables) de LINUX son de menor tamao y permiten ahorrar espacio en disco y memoria. Ing. Allende Ing. Serna -5-
UTN - FRC
LINUX
Carga por demanda: en la mayora de los sistemas operativos, cada nuevo proceso (aplicacin) que se lanza demanda memoria y recursos, y cuando se termina la RAM, automticamente se comienza a hacer uso de la memoria virtual. Esto no ocurre en LINUX, puesto que su administracin inteligente de memoria pasa a memoria virtual cualquier proceso que se encuentre activo pero no en uso, con lo que se garantiza RAM para las aplicaciones activas y en uso. Administracin de memoria: todos los procesos tienen garantizada una zona protegida de memoria para su ejecucin, sin que el mal funcionamiento de una aplicacin cuelgue todo el equipo. Aplicaciones: gracias a la licencia GNU, el caudal de aplicaciones disponibles para LINUX crece a un ritmo vertiginoso, especialmente en Internet. Podemos decir que existe software para casi todas las necesidades. La nica limitacin para los usuarios de habla hispana es el idioma, ya que es muy difcil encontrar software traducido o de origen latino para LINUX. Herramientas de Desarrollo: LINUX es un sistema operativo hecho y pensado por programadores para programadores. A partir de esto, mltiples lenguajes de programacin estn disponibles bajo Linux. Sin duda el principal de ellos es GNU C/C++, pero tambin es posible desarrollar en Java, Objective-C, Pascal, LISP, BASIC, Perl, Ada, Eiffel, FORTRAN, Forth, Prolog, Oberon, Simula, Modula-2 y Modula-3, Smalltalk, y algunos otros. Tambin, existen varios motores de bases de datos que pueden utilizarse bajo Linux; algunos de ellos son motores relacionales (tales como mBase, Thypoon, MiniSQL, Ingres y Postgres), y otros orientados a objetos (tal como LINCKS). La mayora de ellos son de carcter experimental o acadmico, por lo que no igualan las prestaciones de los motores de base de datos comerciales, en especial las relacionadas con performace; sin embargo, el hecho de que su costo sea nulo hace que sea una opcin a tener en cuenta al desarrollar un servidor de Intranet de pequeas proporciones. Seguridad: En lo referente a seguridad, puede mencionarse que el kernel de Linux tiene el soporte necesario para construir firewalls basados en filtrado de paquetes; tambin existe una versin para Linux de SOCKS, software de firewalling muy popular en los ambientes Unix. Convivencia: Linux es capaz de convivir en el mismo disco duro con otros sistemas operativos tales como DOS, Windows u OS/2, permitiendo la seleccin en el arranque del sistema operativo a bootear. Adems de soportar su sistema de archivos nativo (ext2fs), Linux tiene soporte para acceder en modo de lectura/escritura a sistemas de archivo FAT (DOS) y VFAT (Windows95) y en modo de solo lectura a sistemas de archivo NTFS (Windows NT).
Sitios en Internet
Linux Home Page: http://www.linux.org Grupo de Usuarios Linux de Argentina: http://www.linux.org.ar Edicin Infomagic: http://www.infomagic.com Distribucion RedHat Linux: http://www.redhat.com HOW-TOs: los instructivos pueden obtenerse de los siguientes URLs ftp://ftp.funet.fi/pub/OS/Linux/doc/HOWTO - ftp://tsx-11.mit.edu/pub/linux/docs/HOWTO ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO Linux Documentation Project: serie de libros sobre Linux; pueden obtenerse de ftp://sunsite.unc.edu/pub/Linux/docs/LDP
-6-
UTN - FRC
LINUX
Arquitectura
En la arquitectura de Linux podemos identificar un ncleo o kernel y sobre l una capa de shell o interfaz de usuario. El kernel es la parte del sistema operativo mas cercana al hardware del computador y se considera como el corazn del sistema. Dentro de l podemos distinguir los siguientes mdulos: Gestin de procesos Gestin de archivos Gestin de memoria Gestin de Entrada Salida Interfaz de llamadas al sistema
La interfaz de llamadas al sistema recibe los pedidos de los programas de usuario o de programas de biblioteca. En los cepos el S.O. determina si un error producido en uno de estos procesos es fatal y depender del diseo del S.O. la accin que se lleve a cabo. El Subsistema de control de procesos se encarga de la interrupciones, la planificacin de procesos, la comunicacin entre los procesos y la gestin de memoria. El Subsistema de Archivos intercambia los datos entre la memoria y los dispositivos externos. Control de Hardware, son rutinas primitivas que interactan directamente con el hardware.
-7-
UTN - FRC
LINUX
No todas las funciones de un determinado mdulo deben formar parte fija del kernel, sino que pueden ser cargados como mdulos en tiempos de ejecucin. Durante la configuracin del kernel es cuando se determina cuales de ellas se incorporan en forma fija al mismo y cules como mdulo. Los mdulos del kernel se guardan en lib/modules/<versin> (donde versin corresponde a la versin actual del kernel). Siempre que sea posible se debe aprovechar la posibilidad de usar mdulos. Las funciones del kernel que no se necesitan durante el arranque de la computadora, se deben tratar como mdulos, de este modo se asegura que el kernel no crezca demasiado, y que ni la BIOS ni ningn gestor de arranque, tenga problemas al cargar el kernel. Un ejemplo claro de las funciones que siempre tienen que formar parte del kernel, es el driver del disco duro, el soporte del sistema de archivos ext2, mientras que el soporte de isofs, msdos o sound siempre se deberan compilar como mdulos. Esto permite que cada modulo pida servicios al ncleo del sistema quien cargar en memoria las rutinas o mdulos necesarios para determinadas tareas.
Programa de Usuario cepos Nivel de Usuario Nivel del Ncleo Interfaz de llamada al sistema Bibliotecas
Comunicacin entre procesos Subsistemas de Archivos Subsistemas de Control de Procesos Planificador Gestin de Memoria Cache de Buffers
Caracteres
Bloques
Controladores de Dispositivos
Distribuciones
Una distribucin es un conjunto de utileras, herramientas y programas que facilitan el trabajo con el sistema. Las distribuciones se pueden disear a partir de diferentes versiones del ncleo, pueden incluir conjuntos diferentes de aplicaciones, utilidades y controladores, y pueden ofrecer distintos procedimientos de instalacin y actualizacin. Actualmente son varias las distribuciones de Linux ms difundidas, entre ellas podemos mencionar Debian, Slackware, Suse, RedHat, Mandrake, Conectiva, Caldera, Ututo (desarrollo argentino). El nico elemento comn entre ellas es el kernel. Ing. Allende Ing. Serna -8-
UTN - FRC
LINUX
Las versiones del kernel se numeran con 3 nmeros, de la siguiente forma: XX.YY.ZZ XX: Indica la serie principal del kernel. Hasta el momento solo existen la 1 y 2. Este numero cambia cuando la manera de funcionamiento del kernel ha sufrido un cambio muy importante. YY: Indica si la versin es de desarrollo o de produccin. Un numero impar, significa que es de desarrollo, uno par, que es de produccin. ZZ: Indica nuevas versiones dentro de una versin, en las que lo nico que se ha modificado, son fallos de programacin /bugs. ej1: versin del kernel 2.0.0: Kernel de la serie 2 (XX=2), versin de produccin 0 (YY=0 par), primera versin de 2.0 (ZZ=0) ej2: versin del kernel 2.0.1: Kernel de la serie 2, versin 0, en el que se han corregido errores de programacin presentes en la versin 2.0.0 (ZZ=1) ej3: versin del kernel 2.1.100: versin 100 del kernel de desarrollo 2.1.
Tipos de Shell
LINUX dispone de varios programas que se encargan de interpretar los comandos que introduce el usuario y realiza las acciones oportunas en respuesta, estos programas se denominan shell. El trabajo con Linux (por defecto) no se realiza de una forma grfica, sino introduciendo comandos de forma manual. El shell es capaz de interpretar una gran gama de comandos y sentencias. Permite construir muchos programas y comandos, llamados shellscripts, que nos da la posibilidad de automatizar diversas tareas. Existen muchos tipos de shells orientados a caracteres (modo texto). A stos shells los encontramos como archivos ejecutables en el directorio /bin. Los shells ms utilizados son
ash: A shell csh: C shell tcsh: una extencin al C shell ksh: Korn Shell -9-
UTN - FRC
LINUX
bash: Bourne Again Shell El carcter indicativo de Bourne y Korn shell es el signo $. El signo % se refiere a C shell, estando reservado el smbolo # para la cuenta de administrador. El ms utilizados por las distintas distribuciones Linux, es bash. Toma las facilidades de csh y ksh. Ofrece entre otras posibilidades las siguientes: Completamiento durante la escritura. Al teclear uno o varios caracteres se puede pulsar TAB con el objetivo de que en caso de que pueda completarse de forma unvoca un comando, nombre de fichero o una variable (en dependencia del contexto), se realice el completamiento de forma autmatica (se escriba el resto de la palabra). Historial de comandos. Esta es una facilidad de muchos otros shells que permite el movimiento (con las teclas de cursor arriba y abajo) a travs de los ltimos N comandos ejecutados, en la sesin actual o en las anteriores. N por defecto es 1000, pero puede modificarse. Estructuras de control if, for, while, select y case Definicin de funciones y alias para comandos Las funciones permiten definir subrutinas y los alias, asociar nombres a comandos con ciertas opciones y argumentos de forma ms nem otcnica o abreviada. El usuario puede cambiar el shell asignado por defecto simplemente tipeando el nombre de ste, por ejemplo: $ csh <Enter> % < Aparece el prompt % de C shell.>
Interfaces
Una vez instalado e inicializado el sistema operativo Linux, se dispone de dos vas fundamentales de interaccin: una de texto conocida como consola o terminal y una grfica. Para muchas personas el hecho de tener que introducir los comandos de forma manual les puede parecer intimidante y dificultoso, por lo que, casi todas las distribuciones ms recientes incluyen el sistema X Window , el cual es el encargado de controlar y manejar la interfaz de usuario en forma grfica. Para el caso de Linux se utiliza una implementacin de X Window con cdigo abierto (open source) denominada XFree86 que tambin est disponible para otros sistemas tipo Unix. La arquitectura de un sistema X es del tipo cliente-servidor. El servidor se encarga de tomar la entrada de los usuarios y hacerla llegar a las aplicaciones clientes, adems de recibir y redireccionar las salidas de estas aplicaciones. Por lo general el servidor X se ejecuta en la misma estacin que las aplicaciones clientes, pero la posibilidad ms atractiva y til de este tipo de servicio es el poder ejecutar aplicaciones clientes en mquinas remotas e interactuar con ellas en otra mquina que cuente con un servidor X. De esta forma se puede configurar terminales X de pocas disponibilidades en hardware pero que ejecuten un servidor X capaz de servir aplicaciones grficas que se ejecutan remotamente en otra mquina ms potente. Tambin existe la posibilidad de que desde una nica estacin de trabajo con un servidor X se interacte con aplicaciones grficas que se ejecutan realmente en distintas mquinas .
- 10 -
UTN - FRC
LINUX
Actividades 1
1. Enumere las caractersticas principales del SO Linux. 2. El ncleo del sistema LINUX, se denomina: a. Shell b. BIOS c. Kernel d. File System e. Ninguna
3. Marque cuales de los siguientes son shells de Linux: a. msh b. ash c. bsh d. bash e. csh f. xsh g. ksh h. fsh
4. En comparacin con otros S.O. con Linux se pueden realizar ms funciones con menos requerimientos de hardware. Verdadero Falso
Actividad 2
1. Un linux totalmente funcional y productivo (interfaz grfica , staroffice, etc) requiere como mnimo el siguiente hardware: a. 512 Mbyte de disco b. 1,2 Gb de disco c. 2 Gb de disco d. Procesador 386 e. 32Mb de RAM f. 4 Mb de RAM g. procesador Pentium o superior h. 16 Mb de RAM 2. Los mdulos del Kernel en el directorio /lib/modules/<versin> 3. Explique a que hace referencia <versin> , del punto anterior. 4. Todas las funciones de un determinado mdulo deben formar parte fija del kernel. 5. Las siguientes son distribuciones de Linux: a. RedHat b. Conectiva c. Karatte d. Caldera e. AutoLink f. Suse VF V F
- 11 -
UTN - FRC
LINUX
2 Entrada al Sistema
- 12 -
UTN - FRC
LINUX
- 13 -
UTN - FRC
LINUX
En inittab tambin se especifica el nivel de ejecucin (Runlevel) del sistema. El Runlevel estndar, en el cual arranca el sistema, est en el archivo /etc/inittab, en initdefault, y depender de la distribucin que se haya instalado (en el caso de de Red Hat 6.2 el nivel es por defecto es 5) Existen siete niveles de ejecucin, a saber: Runlevel 0 1 2 3 4 5 6 Descripcin Halt (Do NOT set initdefault to this) Single User Mode Multiuser without NFS Full Multiuser mode Unused X11 Reboot (Do NOT set initdfault to this)
Se puede cambiar a otro Runlevel, mediante la orden init y el nivel correspondiente: $ init 1 Si los usuarios quieren ingresar directamente al entorno grfico X Window, se puede cambiar el Runlevel a: $ init 5 Al realizar un cambio de Runlevel, se ejecutan los programas de parada del Runlevel actual, por lo que los procesos que se estaban ejecutando finalizan, luego se inicializan los programas de arranque del nuevo Runlevel. En el Runlevel 1 el sistema se inicia en modo monousuario, en donde la mquina no tiene recursos de red, y solo admite un nico usuario. Este modo de trabajo es muy til cuando el supervisor (usuario root) necesita realizar tareas de mantenimiento, sin tener que preocuparse de que pueda haber otros usuarios realizando tareas. En algunas versiones cuando sucede una fallo general de sistema ste se reinicia automticamente en modo monousuario.
UTN - FRC
LINUX
Es decir que esperar 3 minutos para que los usuarios cierren sus aplicaciones y graben sus datos. Cabe aclarar que sta rden es ejecutada por el usuario supervisor, quin utiliza su clave para ejecutar ste proceso. La pgina man para shutdown tiene una lista completa de opciones, pero las dos ms usadas son: # /sbin/shutdown -h now # /sbin/shutdown -r now Despus de apagar todo, la opcin -h detendr la mquina, y la opcin -r la reiniciar. Los usuarios no root pueden usar los comandos reboot y halt para apagar el equipo mientras se est en niveles de ejecucin 1 hasta 5. Sin embargo, no todos los sistemas operativos Linux soportan esta caracterstica. Si la computadora no se apaga, tenga cuidado de no apagar la computadora hasta que aparezca un mensaje indicando que el sistema ha sido detenido. Si no espera por este mensaje puede significar que no todas las particiones de discos duros han sido desmontadas, y puede llevar a un sistema de archivos corrupto.
Inicio de sesin
Para comenzar a trabajar con el sistema operativo es necesario abrir una sesin de trabajo, para ello deber introducir el nombre de usuario y contrasea, las cuales lee y verifica el programa login. De esta manera el sistema proporciona seguridad, ya que lleva la cuenta de quin es el dueo de los archivos y quin tiene acceso a ellos. Dependiendo de la configuracin, la pantalla que aparecer puede ser en modo grfico o en modo texto. El comando login es el que pide el nombre de usuario (username) con el cual el SO identifica una cuenta de usuario. Luego pide la palabra clave, la cual no se visualiza en pantalla. Login toma el username y verifica su existencia en el archivo /etc/password. La clave se verifica contra el archivo /etc/shadow. Login: username <Enter> Password: Cuando el usuario introduce la contrasea no habr eco desde el sistema, por lo que hay que ser cuidadoso a la hora de teclearla. Una vez que el sistema acepta al nuevo usuario, aparecer una serie de mensajes en pantalla dependiendo de la configuracin del sistema, por ltimo se mostrar el indicativo del shell, el signo $ (para bash). El usuario comienza su sesin en un directorio de trabajo que le es propio, donde l es el dueo, generalmente /home/nombre de usuario.
Cierre de sesion
Cerrar la sesin es muy importante porque, varios usuarios estar compartiendo los recursos del sistema. Este lleva la pista del usuario que termina su sesin, cierra los archivos del usuario y finaliza los procesos activos. Si stos procesos quedan funcionando, provocan una carga innecesaria en el sistema y perjudican a otros usuarios. Para cerrar la sesin desde el indicativo de comandos, teclee: $ logout quin, una vez que cierra la sesin, llama a login. Tambin puede utilizar el comando exit o teclear ctrl. d.
- 15 -
UTN - FRC
LINUX
Terminales Virtuales
Al igual que Unix, Linux ofrece el mecanismo de consolas de texto o terminales virtuales. Este consiste en que a partir de una entrada (el teclado) y con una salida (el monitor) se simulen varias terminales, donde el mismo, o distintos usuarios puedan conectarse indistintamente. De esta forma, es posible tener ms de una sesin abierta en la misma mquina y trabajar en ellas indistintamente. Este mecanismo tambin facilita la caracterstica multiusuario del sistema Linux, pues las diferentes conexiones se pueden establecer con diferentes usuarios. Se puede acceder a las terminales virtuales tecleando Crtl+ALT+F1, Crtl+ALT+F2, Crtl+ALT+F3, Crtl+ALT+F4, Crtl+ALT+F5, Crtl+ALT+F6. En cada una de ellas se debe loguear un usuario. Estando en modo texto podemos presionar Crtl+ALT+F7 que nos conduce al entorno grfico Xwindow, desde dnde podemos abrir consolas virtuales con las teclas Alt+F1 a Alt+F6 en este caso el sistema no solicita abrir una nueva sesin de trabajo con el comando login. Es posible abrir terminales xterm desde Xwindow con ALT+F2 y ejecutando el comando xterm.
$ ls -a color=yes /usr/conf* La orden anterior lista todos los archivos, ocultos y no oculto, cuyo nombre comience con las letras conf, diferenciando con colores los distintos tipos de archivos.
No olvide que los nombres de los archivos de Linux incluidos los comandos distinguen las maysculas de las minsculas. El sistema ordena alfabticamente las maysculas antes que las minsculas.
- 16 -
UTN - FRC
LINUX
Actividad 1
1. Abra una sesin de trabajo con un nombre de usuario que le asigne su administrador. En este ejemplo utilizaremos el username usuarioxx login: usuarioxx password: A continuacin aparecer el prompt del sistema que depender del shell que utilice el usuario. 2. Tipee el comando who que le permitir ver que usuarios han iniciado una sesin con el sistema. La salida de este comando nos muestra, en la segunda columna, la terminal virtual (archivo especial de dispositivo) en el cual esta trabajando el usuarioxx 3. Abra otra sesin de trabajo con el username usuarioyy Ctrl.+Alt+F2 login: usuarioyy password: Ejecute el comando who nuevamente . Cuntos usuarios informa el sistema que estn conectados? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Puede distinguir en que terminales esta trabajando cada usuario? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4. Diga qu es una terminal virtual.
Actividad 2
1. Regrese al entorno grafico con Ctrl.+Alt+F7 y abra una consola virtual con Alt+F1, y otra con Alt+F2 y ejecute el siguiente comando en la consola activa: ls -R /home 2. Ejecute en la consola numero 1 el siguiente comando ls -R /etc En cada una de las consolas virtuales esta ejecutndose una tarea distinta, observe que ambas estn siendo atendidas por el microprocesador en un pseudoparalelismo, por lo que estamos frente a un ejemplo claro de multitarea. Puede alternar de una consola a otra con el simple movimiento del mouse 3. Ejecute el comando who y podr observar que usuarioyy esta activo en varias consolas. Identifique en cuantas est activo y en cuales. 4. Cambie al shell de C. csh
- 17 -
UTN - FRC Actividad 3 1. Que funcin cumple el proceso getty? a) Inicializa la terminal b) Inicializa los drivers c) Determina el runlevel 2. El Runlevel por defecto es: a) Monousuario b) Multiusuario con red y Xwindow c) Multiusuario sin red 3. El proceso shutdown efecta: a) Cierre de sesin b) Termina los procesos y cierra archivos c) Cierra archivos solamente 4. Cual es la funcin del comando login?
LINUX
5. Explique la diferencia entre los comandos shutdown y logout. 6. Explique cual es la estructura de la lnea de comandos. 7. Al realizar un cambio de Runlevel no es necesario dar de baja a los procesos que se estn ejecutando. V F 8. Al iniciarse una sesin de trabajo, que datos requiere el comando login, y que archivos utiliza para validar los mismo?
- 18 -
UTN - FRC
LINUX
- 19 -
UTN - FRC
LINUX
El Sistema de Archivos
Una de las principales funciones de un Sistema Operativo es la administracin del almacenamiento de la informacin, para lo cual es necesario contar con un Sistema de Archivos o File System. Con este trmino se hace referencia, por un lado, a los mecanismos y estructuras que el sistema operativo utiliza para organizar la informacin en medios fsicos tales como discos y diskettes (aspecto fsico del sistema de archivos), y por otro a la visin que es ofrecida al usuario para permitir la manipulacin de la informacin almacenada (una abstraccin, o perspectiva lgica del sistema de archivos).
El ext2 es un sistema de archivos mucho ms avanzado que el MS-DOS, con soporte de correccin y deteccin de errores, compresin de archivos, mayor tolerancia a la fragmentacin de archivos y con tiempos de respuesta muy superiores, aunque a un coste superior de utilizacin de memoria. El ext2 tiene una unidad similar al Cluster, llamada bloque, y que es, por lo general de 1K, especificable por el usuario e independiente del tamao de la particin, lo cual asegura un buen aprovechamiento del espacio libre con archivos pequeos. El ext2 tiene soporte para deteccin de un sistema de archivos desmontado incorrectamente cuando el sistema se apaga de forma errnea, y capacidad para autorecuperarlo en caso de fallo accidental. El ext2 mantiene informacin de la ltima vez que se mont y se accedi al volumen (sistema de archivos), el nmero de veces que se ha montado dicho volumen desde la ltima - 20 -
UTN - FRC
LINUX
comprobacin automtica, y as como la fecha en la que se comprob su integridad por ltima vez. El ext2 permite asignar un porcentaje del disco duro que se reserva para el uso de usuarios con un "uid" (identificacin de usuario) y "gid" (identifcacin de grupo) especficos.
UTN - FRC
LINUX
/usr/ bin : contiene archivos binarios que no son parte de la distribucin base /usr / X11R6 : contiene los archivos de la implementacin de las X Window de la Free86 /usr / include : contiene las cabeceras de las libreras /usr / lib : contiene las libreras /usr / local : es un subdirectorio para programas adicionales /usr / games : obviamente juegos /usr / sbin : subdirectorio semejante a /sbin La estructura jerrquica que posee el sistema de archivos tiene la ventaja de permitir organizar los archivos en grupos comunes lgicamente o de naturaleza similar. Los archivos relacionados entre s, residen juntos en el mismo directorio.
Directorio de trabajo
Un directorio de trabajo, es el directorio que tiene activo un proceso en un momento determinado, es un atributo de un proceso, no de una persona ni de un programa. Antes de comenzar a desplazarse por los directorios y subdirectorios del sistema de archivos, desearamos conocer donde nos encontramos, para ello existe el comando pwd, que nos indica en que directorio se encuentra un usuario en ese momento. Por ej. $ pwd /home/mara/
LINUX
El uso habitual de estas rutas de acceso absolutas hace que el trabajo sea bastante tedioso, por lo que surge el concepto de trayectoria relativa. Observe que al ejecutar el comando pwd se muestra por pantalla la trayectoria absoluta al directorio donde est ubicado el usuario. Una trayectoria relativa comienza en un directorio distinto del raz, utilizando el directorio de trabajo como punto de partida para especificar el archivo o directorio. Tambin existen directorios considerados como especiales, que son los directorios ( . ) y ( . . ). Cuando se crea un directorio, dentro de este se crean automticamente dos directorios: el directorio punto ( . ) , que representa al directorio actual y el directorio punto-punto ( . . ) que representa al directorio padre del directorio actual. Ambos pueden usarse para designar a sus directorios equivalentes al formar parte de una trayectoria. Veamos un ejemplo en el siguiente grafico / dev ana texto datos home luis bin mara Nota archivo
Para referirnos al archivo Nota utilizamos la siguiente trayectoria absoluta: $ home/mara/Nota Para utilizar la trayectoria relativa debemos tener en cuenta nuestro directorio de trabajo. Si el directorio de trabajo es mara se designa: $ Nota $ . / Nota Si el directorio de trabajo fuese luis se designa $ ../maria/Nota Donde indicamos el directorio padre de nuestro directorio de trabajo (home) y luego el directorio (mara) donde se encuentra el archivo Nota Cuando ejecutamos un comando slo con su nombre, podramos pensar que el archivo ejecutable est en nuestro directorio de trabajo. Sin embargo el sistema busca el archivo en la lista de directorios que estn definidos como rutas de acceso predeterminada (PATH). Este tema se ampliar en el capitulo que trata sobre Variables del shell.
UTN - FRC
LINUX
$ ls l / Y obtenemos lo siguiente: drwxr-xr-x 2 root root 4096 May 10 2002 bin drwxr-xr-x 3 root root 1024 May 10 2002 boot drwxr-xr-x 7 root root 36864 May 10 2002 dev drwxr-xr-x 43 root root 4096 May 10 2002 etc drwxr-xr-x 6 root root 4096 Feb 6 1996 home . . . . . . . Para ver el contenido de un directorio en particular, podemos cambiarnos de directorio con el comando cd o bien ejecutar el comando ls (desde nuestro directorio de trabajo) colocando la trayectoria del directorio deseado como argumento. Por ejemplo, si deseamos ver el contenido del directorio bin, tecleamos: $ cd /bin $ ls o bien $ ls /bin y obtendremos: cat chgrp chmod chown cp date dd df dmesg echo ed false gzip gunzip kill in login mkdir more mount mv ps pwd rm rmdir sh su tar true ..... El directorio /bin contiene los archivos binarios de comandos que pueden ser utilizados por todos los usuarios y el administrador del sistema, pero que son requeridos en el modo mono-usuario (single-user mode) puede tambin contener comandos que son utilizados indirectamente por algunos scripts. Todos los binarios utilizables slo por root, tales como daemons, init, getty, update, etc.,estarn localizados en /sbin. Dentro de /bin no hay subdirectorios. $ ls /boot Este directorio contiene todo para arrancar excepto los archivos de configuracin y el instalador de mapas. En su sentido ms sencillo /boot es para cualquier cosa que se utiliza antes de que el kernel ejecute init. sto incluye sectores maestros de arranque (master boot sectors) guardados, archivos de mapeo de sectores y cualquier otra cosa que no es editada directamente a mano. El kernel de Linux puede estar localizado en / en /boot. Si est localizado en / recomendamos usar el nombre VMLINUX[versin] o VMLINUZ[versin], nombres que han sido usados en paquetes fuentes del kernel de Linux recientes. $ ls /home Es una localizacin sugerida (Opcional) para los directorios de los usuarios, aun as, recomendamos que todas las distribuciones Linux usen este lugar como la localizacin por defecto de esos directorios. En sistemas pequeos, cada directorio de usuario es uno de los subdirectorios debajo de /home, por ejemplo /home/mara, /home/ana, etc. En sistemas grandes es til subdividir los directorios home. La subdivisin puede ser llevada a cabo utilizando subdirectorios tales como /home/docentes, /home/estudiantes, etc.
- 24 -
UTN - FRC
LINUX
Actividad 1
1. Cul es el tipo de File System en Linux, y cual es la estructura que utiliza? 2. En Linux, los comandos bsicos de ejecucin del sistema se encuentran en : a. /bin b. /dev c. /etc d. /lib e. Ninguna 3. En Linux, los perifricos se manejan a travs de archivos especiales ubicados en: a. /bin b. /dev c. /etc d. /lib e. Ninguna 4. Explicar el concepto de directorio de trabajo.
Actividad 2
1. Mostrar el contenido del directorio raiz. Identifique algunos de sus directorios. ls / 2. Igual al anterior pero acceder con camino relativo. ls ../.. 3. Mostrar el contenido del directorio /dev ls /dev /dev es el directorio de los dispositivos. Los archivos en /dev son conocidos como los controladores de dispositivos (device drivers) que son usados para acceder a los dispositivos del sistema y recursos como discos duros, impresoras, memoria, etc. Contendr un archivo por cada dispositivo que el kernel de Linux puede soportar. Tambin contiene un script llamado MAKEDEV el cual puede crear dispositivos cuando se necesiten. 4. Muestre nuevamente el contenido de /dev, pero utilice la trayectoria relativa desde su directorio de trabajo. ls ../../dev] (en el caso que su home directory sea el directorio de login) 5. Cambiar al directorio /etc y mostrar su contenido en forma extendida cd /etc ls l /etc Contiene archivos y directorios de configuracin de sistema local de mquina. Algunos de ellos son: X11 : Archivos deconfiguracion para el x11. Este directorio es necesario para permitir el control local si /usr se monta slo-lectura. Los archivos que deben ir en este directorio incluyen Xconfig (y/o XF86Config) y Xmodmap. skel : Esqueletos de configuracion de usuarios, que le son dados por defecto cuando un nuevo usuario recibe una cuenta. 6. Teclear en su terminal el comando necesario para determinar cual es su directorio de trabajo y escriba la respuesta. pwd __________________________ 7. Es el directorio de inicio de sesin? _____ 8. El archivo cat (manual del comando de igual nombre) se encuentra en el subdirectorio man1 dentro del directorio man que a su vez depende /usr, cual es la trayectoria absoluta para llegar a ste archivo?__________________________________________
- 25 -
UTN - FRC
LINUX
Actividad 3
1. Dar 4 trayectorias distintas al archivo /etc/group. Indique en cada caso el directorio de trabajo. 2. Mencionar que archivos contienen los directorios /bin y /sbin. Explique las diferencias. 3. Mostrar el contenido del directorio donde Linux archiva los drivers. 4. Acceder al directorio /boot y analizar su contenido. 5. Definir y diferenciar directorio de trabajo y Home directory. 6. La posibilidad que brinda el file system de nombrar a ms de un archivo con el mismo nombre simbolico (por ejemplo proc-linux) esta dada por: a. b. c. d. la tabla de asignacin de archivos la estructura jerarquica de archivos los archivos . y .. los Runlevel
- 26 -
UTN - FRC
LINUX
4 Manejo de Archivos
- 27 -
UTN - FRC
LINUX
Desde el punto de vista del sistema, un archivo no es ms que una secuencia de bytes ya no identificado con un nombre simblico sino un nmero i-nodo que permite su localizacin en disco. Desde el punto de vista del usuario, los archivos existen para guardar informacin y luego poder recuperarla. El usuario le otorga a stos un nombre simblico para poder designarlos. Linux dispone de un numeroso conjunto de utilidades para manipular archivos (individualmente o en grupos) tipeando comandos en una terminal. A travs de esta modalidad de trabajo es posible alcanzar un alto nivel de flexibilidad y versatilidad para realizar operaciones de cualquier grado de complejidad. En este captulo veremos cmo utilizar los comandos bsicos para la manipulacin de archivos y directorios por ejemplo crear y borrar, mostrar el contenido, copiar y mover archivos dentro del File System y adems cmo Linux permite compartir los archivos. Pero para tratar estos temas es necesario introducir antes el concepto de redireccionamiento que es de gran utilidad para el uso eficiente de los comandos.
Archivos
La base del sistema de archivos de Linux, es obviamente el archivo, que no es otra cosa que la estructura empleada por el sistema operativo para almacenar informacin en un dispositivo fsico como un disco duro, un disquete, un CD-ROM o un DVD. Como es natural un archivo puede contener cualquier tipo de informacin, Todos los archivos de Linux tienen un nombre, el cual debe cumplir ciertas reglas: Un nombre de archivo puede tener entre 1 y 255 caracteres. Se puede utilizar cualquier carcter excepto la barra inclinada / y no es recomendable emplear los caracteres con significado especial en Linux, que son los siguientes: = \ ^ ~ ' " ` * ; - ? [ ] ( ) !& ~ < >. Para emplear archivos con estos caracteres o espacios hay que introducir el nombre del archivo entre comillas. Se pueden utilizar nmeros exclusivamente si as se desea. Cabe aclarar que Linux es sensible a las letras maysculas y minsculas por lo tanto se consideran diferentes, y no es lo mismo el nombre archivo nota.txt que Nota.txt nota.Txt
En LINUX existen los siguientes tipos de archivos : - archivo comn o regular d directorio b archivo especial de bloque c archivo especial de carcter l archivo enlazado Regulares son aquellos que pueden contener cualquier tipo de informacin, desde una imagen, un texto, un sonido, etc. Directorios (o carpetas), es un archivo especial que agrupa otros archivos de una forma estructurada. Especiales, son la base sobre la que se asienta Linux, puesto que representan los dispositivos o perifricos conectados a un ordenador, como puede ser una impresora. De esta forma introducir informacin en ese archivo equivale a enviar informacin a la impresora. Para el usuario estos dispositivos tienen el mismo aspecto y uso que los archivos ordinarios. Enlazados: Los enlaces le permiten dar a un nico archivo mltiples nombres, existen enlaces duros y enlaces simblicos.
- 28 -
UTN - FRC
LINUX
Podemos visualizar la tabla de directorio con la opcin i del comando ls, de la siguiente manera: $ls -i / 45689 bin 45692 boot : : : : El sistema de archivos para abrir un archivo (de cualquier tipo) toma el nombre y localiza sus bloques en disco. Supongamos que queremos leer el archivo texto creado en nuestro subdirectorio de usuario : /home/usuarioxx/texto El Sistema de archivo localiza el i-nodo del directorio raz, que se encuentra en un lugar fijo del disco, cuando accede a este i-nodo lee su contenido y determina la ubicacin del i-nodo del suddirectorio home y busca en l la ubicacin del siguiente componente que es usuarioxx. Lee el i-nodo de este archivo y lo mantiene en memoria hasta cerrar el archivo. El sistema operativo lleva un control de las operaciones posibles de dicho archivo mediante atributos adicionales que se suman a los del i-nodo.
Directorio raz El nodo-i 6 corresponde a /home El bloque 132 es el directorio /home El nodo-i 26 corresponde a /home/usuarioxx El bloque 406 es para el directorio /home/usuarioxx
1 1 4 7 14 9 6 8
6 1 19 30 51 26 45
26 6 64 92 60 81 17
- 29 -
UTN - FRC
LINUX
El i-nodo en disco contiene los siguientes campos : 1. UID del propietario. El UID es un numero que le asigna el sistema operativo a cada usuario cuando este se registra en el sistema. Cada usuario para poder trabajar en la terminal (o computadora ) debe registrarse en el sistema. Cada archivo tiene un propietari , que es el usuario que creo el archivo. 2. El GID del grupo asociado al archivo. El GID es un nmero que el sistema operativo le asigna a un grupo de usuarios. Todo usuario pertenece por lo menos a un grupo de usuarios, normalmente definido por el administrador del sistema. Tambin cada archivo pertenece a un grupo. El administrador del sistema es un usuario que tiene una jerarqua especial que le permite realizar operaciones que normalmente no estn permitidas a usuarios normales. Dicho administrador se llama root en el sistema operativo LINUX. 3. Tipo de archivo. Ya mencionamos los distintos tipos de archivos. Cuando el i-nodo no tiene asignado ningn archivo, el tipo se define como tipo 0 . De esa forma se reconoce cuando un i-nodo esta libre. 4. Proteccin rwx. Proteccin rwx para el propietario del archivo; proteccin rwx para los integrantes del grupo del archivo; proteccin rwx para el resto de los usuarios. Los archivos se protegen contra lectura (r) ; contra escritura (w) y contra ejecucin (x). 5. Fecha y hora del ultimo acceso al archivo. 6. Fecha y hora de la ultima modificacin ( o creacin ) del archivo. 7. Fecha y hora de la ultima modificacin del i-nodo. 8. Numero de enlaces (links). Pueden haber varios nombres (enlaces) asociados con un mismo i-nodo. En otras palabras varios nombres de archivos comparten el mismo archivo fsico. 9. Punteros a los bloques del archivo. Son nmeros de 32 bits que permiten localizar a un bloque fsico del disco que contiene informacin del archivo. 10. Tamao del archivo en bytes. Algunos de estos campos pueden ser vistos con la orden ls l (listado extendido) $ ls l / drwxr-xr-x drwxr-xr-x : 2 3 : root root : root root 4096 1024 may may 2 2 13:42 13:43 bin boot
Este comando muestra en formato largo o extendido la informacin de los archivos del directorio raz. Estos son algunos de los atributos del archivo, de izquierda a derecha: Tipo de archivo: - archivo comun d directorio b archivo especial de bloque c archivo especial de carcter l archivo enlazado Permisos: son nueve caracteres, donde la 1ra. terna rwx (lectura, escritura y ejecucin) pertenecen al dueo del archivo, la 2da. terna son los permisos del grupo y la 3ra. son para los otros usuarios. Enlace: este campo es numrico e indica la cantidad de enlaces que tiene el archivo. Nombre del dueo del archivo Nombre del Grupo Tamao del archivo: informacin dada en bytes. Fecha y hora : de modificacin del archivo
Redireccionamiento de E/S
Cada vez que se ejecuta un shell, se abren los ficheros stdin, stdout y stderr. El archivo stdin est asociado al teclado, tiene 0 como descriptor de archivo y representa a la entrada estandar de cualquier comando. Por ejemplo, los comandos cat, write y mail permiten que el Ing. Allende Ing. Serna - 30 -
UTN - FRC
LINUX
usuario introduzca por teclado las lneas de datos, y esperan a que se les indique con <ctrl..d > que la carga a finalizado. Estos comandos toman la entrada de datos del archivo stdin. Mediante la redireccin de entrada se puede indicar a un comando que tome como entrada los datos de un archivo determinado distinto a stdin, utilizando el smbolo < y el nombre del archivo de entrada. Por ejemplo: $ mail nom-usuario < mensaje
donde nom-usuario es el nombre del destinatario de los datos contenidos en el archivo mensaje. La redireccin de entrada no produce modificaciones en el fichero que se utiliza como entrada. Los comandos envan su salida por defecto a la salida estandar, la pantalla, es decir al archivo stdout asociado a ella. El descriptor de ste archivo es 1. La redireccin de salida permite recoger la informacin que presenta un comando en pantalla y almacenarla en un archivo. Para indicar la redireccin de salida se utilizan los smbolos > y >>. Al utilizar el smbolo > el archivo de salida se sobrescribe con los nuevos datos; en el caso que el archivo no exista, se crea con la misma orden. $ ls / > dire el comando ls lista el contenido del directorio raiz, sin embargo la salida no aparecer por pantalla sino que se redirecciona al archivo dire, que sino existe, se crea con la misma operacin. Al utilizar >>, redireccionamos la salida a un archivo determinado y si ste no existe se crea. Si el archivo existe, los nuevos datos redireccionados se aaden al final del archivo sin daar las lneas del archivo que ya existan. $ ls /dev >> dire con el smbolo >>, agregamos al final del archivo dire un listado de los archivos del directorio /dev. stderr es un fichero estndar que recibe los mensajes de error, tiene asociado el descriptor 2. Cuando el shell no puede ejecutar un comando muestra un mensaje de error por la pantalla, si necesitamos redireccionar los mensajes de error tendremos que insertar en la lnea de comandos el descriptor 2 del archivo sterr acompaado por > o >>, como sigue: $ cp 2> fichero.err como al comando cp no le hemos pasado como argumento el nombre del archivo a copiar, generar un mensaje de error que en vez de mostrarse por pantalla, se redirecciona al archivo fichero.err. Si visualizamos el archivo creado fichero.err obtendremos la siguiente salida: $ cat fichero.err cp : faltan argumentos (ficheros) pruebe cp helppara mas informacin
- 31 -
UTN - FRC
LINUX
justificarlas con la tecla <Enter>, pero una vez justificadas, no podr regresar a corregir lo escrito. Para grabar los datos y regresar al shell pulse ctrl.d. Por ejemplo: Si necesitamos crear el archivo materias, que tenga el nombre de las materias que estamos cursando : $ cat > materias deberemos ingresar: > Sistemas Operativos > Qumica > Estadstica ctrl.. d Esta informacin ha quedado guardada en el archivo materias en nuestro directorio. El concepto de redireccionamiento es muy importante pues nos permite crear un archivo con la salida que genere cualquier comando, provocando que la salida de ste ya no sea enviada a la salida estndar sino a un determinado archivo. As por ejemplo podramos querer crear un archivo con todos los comandos que estn en /bin: $ ls /bin > comandos el comando ls debe mostrar por pantalla un listado de los archivos del directorio /bin. Sin embargo con la lnea de comando anterior, el shell devuelve slo el prompt. Pero si ejecuta la orden ls podr ver al archivo comandos formando parte del listado: $ ls materias comandos
Borrar Archivos - rm
Para borrar un archivo utilice el comando rm de la siguiente manera: $ rm nom -archivo al ejecutar este comando, borramos en la tabla del directorio la entrada correspondiente a nomarchivo. El argumento puede incluir una lista de archivo a borrar o puede tambin utilizar metacaracteres (consultar el Apndice 1). Por ejemplo: $ rm materias comandos esta orden borra dos archivos, materias y comandos, que estn en el directorio actual. Opciones de rm: -i pide al usuario que confirme la eliminacin del archivo. -f borra el archivo sin tener en cuenta los permisos del archivo. -r se utiliza para borrar el contenido de un directorio en forma recursiva, incluso borra el directorio dado como argumento.
- 32 -
LINUX
Crea el directorio directorio-nuevo por debajo del directorio actual o de trabajo. Si queremos crear un directorio, como subdirectorio de otro especfico, debemos tipear la ruta absoluta o relativa del directorio nuevo. $ mkdir /home/ana/directorio-nuevo Slo podemos pasarle como argumento al comando mkdir el nombre de un directorio. Para crear otros directorios deber utilizar nuevamente el comando mkdir.
Mostrar Archivos
El sistema operativo Linux nos permite utilizar ms de un comando para leer el contenido de un archivo, ya sea , en forma completa, paginado o ver slo partes del archivo. Los archivos de configuracin y de instrucciones son de texto por lo que resulta interesante acceder a sta informacin. Los comandos que trataremos en esta seccin son : cat, more, less, head y tail.
cat
La forma ms sencilla de ver un archivo es con el comando cat. Muestra el contenido de todos los archivos que se le d como argumento. Por ejemplo: $cat datos practico suponiendo que datos y practico son archivos del directorio de trabajo, cat muestra por pantalla en forma secuencial el contenido de ambos archivos. Es posible tambin, con este mismo comando concatenar archivos, simplemente redireccionando la salida secuencial del ejemplo anterior a un tercer archivo: $cat datos practico > salida as podemos concatenar dos o ms archivos y guardarlos en un archivo de salida, sin que esto produzca modificaciones en los archivos tomados como argumento.
- 33 -
UTN - FRC
LINUX
more
Uno de los problemas que presenta la utilizacin del comando cat es que produce la visualizacin completa del archivo, sin pausas, por lo que si ste es demasiado largo slo podremos ver las ltimas 20 lneas. El comando more nos permite ver el contenido de un archivo, pgina por pgina. Por defecto en cada pgina muestra 21 lneas. La lnea de comandos para more es la siguiente: $ more [-n de lneas p/pgina] nom-archivos $more - 15 datos por supuesto tambin a more podemos darle como argumento el nombre de ms de un archivo, y los mostrar en forma secuencial. Una vez que el comando more nos esta mostrando el contenido de un archivo, tenemos opcin a ejecutar algunos comandos: barra espaciadora: tecla q: tecla s <Enter>: tecla f: /<patrn> tecla b: tecla ? h: avanza a la pgina siguiente. cierra el programa more. avanza de a una lnea. avanza toda una pgina del archivo. busca y avanza hasta una palabra determinada. retrocede una pgina. muestra la ayuda para el comando more.
less
Al igual que more, el comando less muestra el archivo pgina por pgina. La caracterstica de less, es que nos permite movernos con mayor soltura dentro del archivo. barra espaciadora: tecla q: flecha abajo: flecha arriba: /<patrn> avanza a la pgina siguiente. cierra el programa more. avanza una lnea. retrocede una lnea. busca desde donde se encuentra ubicado en el archivo y avanza hasta una palabra determinada. busca hacia atrs hasta un patrn determinado. retrocede una pgina.
- ?<patron> - tecla b:
head
El comando head nos permite visualizar por pantalla las primeras lneas de un archivo. Por ejemplo, podramos querer ver la cabecera de algn mail que nos enviaron o saber quienes son los primeros usuarios en conectarse al sistema. La lnea de comandos es la siguiente: $ head [-n de lneas] nom-archivo donde la opcin es la cantidad de lneas que necesitamos ver, si se omite la opcin por defecto muestra las primeras 10 lneas. Por ejemplo, si tenemos en el archivo usuarios los usuarios que se han conectado al sistema y queremos conocer los nombre de los primeros cinco, tipeamos: $head 5 usuarios jpsuarez lcgarca . .
tail
El comando tail muestra las ltimas lneas de un archivo, por defecto muestras las diez ltimas lneas. Este comando es muy til porque los archivos crecen, y lo hacen por la parte Ing. Allende Ing. Serna - 34 -
UTN - FRC
LINUX
inferior. Es decir que se le aaden registros, si no tiene un orden predeterminado, en la parte inferior del archivo. Un usuario puede querer ver slo los ltimos elementos aadidos y no totdo el archivo. La lnea de comandos es la siguiente: $tail [-n de lneas] nom-archivo donde la opcin es la cantidad de lneas que necesitamos ver. Este comando tambin tiene la capacidad de mostrar los archivos mientras crecen, con la opcin -f el comando tail abre el archivo, muestra las ltimas lneas y comienza a supervisarlo. Cada ves que se introduzca una nueva lnea al archivo, stas aparecer directamente en la pantalla del usuario.
Copiar Archivos - cp
Copiar un archivo implica generar otro archivo, con distinto nmero de i-nodo pero con el mismo contenido del anterior. Si ubicamos la copia en un directorio distinto al que contiene al archivo, podremos utilizar el mismo nombre. Pero si ubicamos la copia en el mismo directorio, debemos utilizar un nombre diferente, pues sino el sistema no dar un mensaje se error, como el siguiente: El archivo ya existe, desea sobrescribirlo? Para realizar copias de archivos debemos utilizar el comando cp, que nos permite realizar varias operaciones: copiar un archivo a otro: $ cp arch-origen arch-destino donde tanto en arch-origen como arch-destino debemos incluir la ruta de acceso al archivo, sea sta absoluta o relativa. copiar un conjunto de archivos a un directorio especfico: $ cp archivo-1 archivo-2 archivo-n direc-destino
copiar en forma recursiva un directorio completo, para ello debemos utilizar la opcin -r: $ cp -r direc-origen direc-destino Por ejemplo: $ cp listado listacop esta orden copia el archivo listado al archivo listacop, ambos archivos estn en el directorio actual. Genera una copia con los mismos datos y con los mismos atributos pero con distinto nmero de inodo, es decir que a partir de ahora los archivos listado y listacop, evolucionarn independientemente. Para comprobar los que hemos dicho, tipee la siguiente orden: $ ls li 496050 -rwxr-xr-x 1 rodriquez sop 4096 may 2 13:42 listado 496051 -rwxr-xr-x 1 rodriquez sop 4096 may 2 13:50 listacop : : : que le muestra un listado extendido de los atributos de los archivos que se encuentran en el directorio actual. El primer campo que muestre ser el n de i-nodo. $ cp listado ../ esta orden copia el archivo listado, que estn en el directorio actual, al directorio padre con el mismo nombre listado. $ cp listado listacop /home/rodriquez/ esta orden copia los archivos listado y listacop al directorio rodriguez, que esta en /home.
- 35 -
UTN - FRC
LINUX
$ cp -r /home/rodrguez/practicos /tmp
esta orden crea un directorio practicos en el directorio /tmp, y realiza una copia de todos los archivos y directorios de /home/rodrguez/practico a /tmp/practico.
Enlaces duros
En Linux un fichero puede aparecer en varios sitios simultneamente ocupando un nico espacio en disco. Realmente slo hay un fichero fsico, los dems son enlaces duros o hard links. Esto es posible gracias a que Linux separa la informacin de un fichero de su entrada en un directorio, permitiendo as tener varias entradas de directorio para un nico fichero.
- 36 -
UTN - FRC
LINUX
Como slo hay un fichero fsico, si se modifica en algn lugar, aparecer modificado en todos. El fichero no desaparece fsicamente del disco hasta que no se borren todos sus enlaces, es decir hasta que el contador de enlaces sea 0. Los enlaces duros tiene la limitacin de que deben estar en el mismo volumen fsico. Esta limitacin se supera en Linux con los enlaces simblicos. La orden ln es usada para crear mltiples enlaces para un archivo. La sintaxis del comando es: $ ln archivo-origen archivo-destino Por ejemplo, tenemos un archivo notas en un directorio. Usando ls -i, veremos el nmero de inodo para el archivo. $ ls -i notas 46192 notas Podemos crear un enlace a notas, llamado calificaciones: $ ln notas calificaciones Con ls -i veremos que los dos archivos tienen el mismo i-nodo. $ ls -i notas calificaciones 46192 notas 46192 calificaciones Si se realizan cambios en notas, estos cambios tambin sern efectuados en calificaciones. Para todos los efectos, notas y calificaciones son el mismo archivo. Estos enlaces son conocidos como enlaces duros (hard links) porque directamente crean el enlace al i-nodo. Solo podemos crear enlaces duros entre archivos del mismo sistema de archivos; los enlaces simblicos no tienen esta restriccin.
Enlaces simblicos
Los enlaces simblicos permiten dar a un archivo el nombre de otro, pero no enlaza el archivo con un i-nodo. Los enlaces simblicos tiene cierta similitud con los accesos directos de Windows 95, no es ms que un fichero que contiene el nombre de otro. Puede apuntar a cualquier fichero aunque resida en otro volumen, pudiendo apuntar a un fichero que no exista. La forma de crearlos es mediante el comando ln, utilizando el parmetro -s. $ ln -s notas calificaciones Usando ls -i, veremos que los dos archivos tienen i-nodos diferentes: $ ls -i notas calificaciones 46192 notas 45156 calificaciones Si ejecutamos el comando ls -l vemos que el archivo calificaciones es un enlace simblico apuntando a notas adems podemos ver el nmero de enlaces de un fichero $ ls -l notas calificaciones lrwxrwxrwx 1 root root 3 -rw-r--r-1 root root 12 Aug 5 16:52 calificaciones -> notas Aug 5 16:50 notas
Las opciones mas importantes de ln son las siguientes: -d Permite al super-usuario hacer enlaces rgidos a directorios. -s Crear enlace simblico. -f Borrar los archivos de destino que ya existen.
- 37 -
UTN - FRC
LINUX
Funcionalmente, los enlaces duros y simblicos son similares, pero hay algunas diferencias: Todas las acciones realizadas sobre un enlace simblico se realizan realmente sobre el fichero original, salvo los comandos ls y rm. Los bits de permisos en un enlace simblico no se usan (siempre aparecen como rwxrwxrwx). En su lugar, los permisos del enlace simblico son determinados por los permisos del archivo "apuntado" por el enlace. El archivo original puede borrarse mientras que el enlace simblico, apunta aun archivo que ya no existe; lo mismo no es cierto para enlaces duros. Los enlaces simblicos son procesados por el ncleo de forma diferente a los duros, lo cual es solo una diferencia tcnica, pero a veces importante. Los enlaces duros tienen la desventaja que registran como propietario (en el i nodo) al usuario creador del archivo. La creacin de un enlace a ese archivo no modifica la propiedad. Si el propietario desea eliminar el archivo, no puede hacerlo hasta que el segundo usuario decida borrarlo y el contador de enlaces lo permita. Los enlaces simblicos son otro archivo conteniendo un camino o pathname. Cuando el propietario lo elimina el archivo se destruye. Los enlaces simblicos son de ayuda puesto que identifican al archivo al que apuntan; con enlaces duros no hay forma fcil de saber que archivo est enlazado al mismo i-nodo.
- 38 -
UTN - FRC
LINUX
Actividad 1
1. Muestre un listado extendido del directorio /dev, y analice la informacin. ls -l /dev Observe que en el listado extendido que le muestra ls, el primer carcter en cada una de las lineas visualizadas identifica el tipo de archivo de que se trata. En este directorio en particular, el primer carcter ser b c identificando a los archivos de bloque carcter respectivamente. 2. Muestre el directorio /bin., y analice la informacin.
ls l /bin
En este directorio podr ver que algunas filas en el primer carcter tiene un guin (-) para los garchivos de ordinarios, o l para lo archivos enlazados. 3. Verifique que se encuentra trabajando en el directorio de conexin , de lo contrario cambie a ese directorio. pwd Si la salida obtenida no es la ruta absoluta a su directorio de conexin tipee el siguiente comando: cd 4. Construya la siguiente estructura de subdirectorios: Home directory dir-1 dir-2 grupo-A mkdir dir-1 mkdir dir-2 mkdir dir-2/grupo-A mkdir dir-2/grupo-B ls R En stas lneas de comandos directorios? grupo-B
Home directory: directorio de conexin, generalmente tiene el mismo nombre que el username. 5. En su directorio de login , guarde sus datos personales en el archivo personal. cat > personal En este ltimo comando se utiliz el concepto de redireccionamiento, que combinado con el comando cat permite que todo lo ingresado por teclado se muestre por pantalla y luego se grabe en el archivo. Para grabar todo lo ingresado deber teclear ctrl d. 6. Cambiese al directorio grupo-A. cd dir-2/grupo-A Ahora su directorio actual es grupo-A 7. Guarde el contenido del directorio bin (comandos del sistema) en el archivo comandos en su directorio de conexin. Is /bin > ../../comandos En este otro ejemplo el comando Is /bin muestra por pantalla el contenido del directorio bin (se utiliz ruta absoluta para nombrarlo) pero combinado con el redireccionamiento, la salida ya no aparece por pantalla (salida estandar) sino que s guarda en el archivo e Ing. Allende Ing. Serna - 39 -
UTN - FRC
LINUX
comandos, que sino existe se crea en este momento. Entonces para ver el contenido del directorio bin deberemos ver el contenido del archivo. cat ../../ comandos Hemos utilizado ruta relativa para nombrar el archivo porque ste esta en el directorio de conexin. 8. Agrguele al archivo creado en el punto anterior el contenido del directorio home (ya habr observado que es aqu donde estn definidos los directorios de conexin de los usuarios). ls /home ../../comandos En este caso tambin utilizamos redireccionamiento, pero con >>, no borramos lo que tiene el archivo sino que los agregamos al final del mismo. 9. Regrese al directorio de conexin. cd 10. Muestre el contenido del archivo comandos haciendo pausa luego de cada pantalla. more comandos 11. Especifique al comando more la cantidad de lneas que desea visualizar por pgina. more 7 comandos 12. Cree el archivo partescom de manera tal que contenga las 15 primeras lneas del archivo comandos. Verifique su contenido. head -15 comandos > partescom cat partescom Observe que el archivo partescom tiene 15 lneas correspondientes a los primeros comandos del directorio /bin ordenados alfabticamente. 13. Concatene los archivos partescom y comandos y guarde dicha informacin en el archivo union en el subdirectorio dir-1. Cmbiese a l. cat partescom comandos > dir-1/union cd dir_1 14. En este momento, el rbol de directorios y archivos debe ser el siguiente: Home directory comandos dir-1 dir-2
personal
partescom
union grupo-A grupo-B
15. Borre los archivos y directorios creados. Cierre la sesin. a. Primero no ubicamos en nuestro directorio de conexin cd b. Luego ejecutamos el comando para borrar en forma recursiva la rama del directorio dir-2. rm -r dir-2 c. Luego hacemos lo mismo para el directorio dir-1 rm r dir-1 d. Por ltimo borramos los archivos que creamos en el directorio de conexin. rm comandos personal partescom e. Cerramos la sesin Logout Ing. Allende Ing. Serna - 40 -
UTN - FRC
LINUX
Actividad 2
Los siguientes puntos conforman una gua resuelta de ejercicios donde el alumno deber usa la lnea de comandos (modo texto) del sistema operativo Linux. 1. Comenzar la sesin de trabajo login: password: 2. Crear el archivo datol que contenga el nombre de los archivos del directorio /bin que comiencen con la letra c. ls /bin/c* > dato1
En la ejecucin de este comando se us redireccionamiento por lo que la salida del comando ls no aparece por pantalla. Si ejecutamos more dato1 vamos a ver el nombre de los archivos que estn en el directorio /bin y que comienzan con la letra c. El metacaracter * (todos) reemplaza a todos los caracteres que estn despus de la letra c en los nombres de archivo del directorio /bin. 3. Copiar el archivo dato1 como dato2 . cp dato1 dato2 El comando cp genera una copia fsica del archivo dato1, con el nombre dato2. A partir de aqu los archivos podrn evolucionar en forma independiente. Es decir, las modificaciones realizadas sobre uno de los archivos no se reflejarn en el otro. 4. Mostrar el nmero de i-nodo de los archivos utilizados en el punto anterior. ls -i dato1 dato2 Esta opcion del ls nos muestra el nmero de i-nodo de cada de los archivos. Vemos que dato1 y dato2 tienen diferente nmero de i-nodo, a pesar de ser una copia uno del otro. Porqu? ______________________________________________________ 5. Agregar al archivo dato2 el nombre de los archivos del directorio /dev que comiencen con h . ls /dev/h* >> dato2 El concepto utilizado en este item es tambin el redireccionamiento, sin embargo no vamos a sobreescribir la informacin, sino agregar al final del archivo. 6. Mostrar en formato extendido, el contenido del directorio de trabajo. ls -l Este comando muestra en formato extendido la informacin de los archivos del directorio de trabajo. Estos son algunos de los atributos del archivo, de izquierda a derecha: Tipo de archivo: - archivo comn d directorio b archivo especial de bloque c archivo especial de carcter l archivo enlazado Permisos : son nueve caracteres, donde los tres primeros rwx (lectura, escritura y ejecucin) pertenecen al dueo del archivo, los tres siguientes son los permisos del grupo y los tres ltimo son para los otros usuarios. Enlace: este campo es numrico e indica la cantidad de enlaces que tiene el archivo.
- 41 -
UTN - FRC
LINUX
Nombre del dueo del archivo Nombre del Grupo Tamao del archivo: informacin dada en bytes. Fecha y hora de modificacin del archivo 7. Mostrar todos los archivos de su directorio, incluso los ocultos. ls -a La opcin a muestra todos los archivos, incluso los ocultos que se identifican porque el nombre comienza con un punto. 8. Crear un directorio bajo el nombre de nuevo. mkdir nuevo Al crear el directorio pasamos como argumento al comando, la ruta relativa del directorio. Funcionara lo mismo si tipeamos mkdir ./nuevo , es decir crea el directorio dentro del directorio actual. 9. Ejecutar el siguiente comando: ls li y analizar la salida obtenida. Vemos que no muestra el n de -nodo y algunos de los atributos de cada archivo del i directorio. A sta informacin el sistema la obtiene de la tabla de nodos-i. Anote el n de inodo de los archivos dato2 y dato1. Los directorios tienen n de i-nodo? Porque? ____________________________________________________________________ N i-nodo de dato1:________ N i-nodo de dato2:_______
10. Cambiarse al directorio nuevo cd nuevo Cambiamos de posicin en el rbol de directorios. La ejecucin del comando pwd nos dice que la posicin actual es: _______________ 11. Mover los archivos dato1y dato2 al directorio actual. mv ../dato2 ../dato3 . Analice el resultado de la orden anterior y ver que los archivos dato1 y dato2 ya no estn en el directorio padre (home directory) sino que estn en el directorio actual (representado por un punto en la lnea de comandos). 12. Verifique el contenido del directorio de conexin. Aparecen los archivos dato1 y dato2? ls .. Vemos que los archivos no se encuentran en este directorio. 13. Verifique el contenido del directorio actual. Muestre los i-nodos. ls -i En la salida de este comando preste atencin al n de i-nodo de los archivos El i-nodo de los archivos movidos son los mismo que apunt el item 9?Explique. ___________________________________________________________________ 14. Realice un enlace duro del archivo dato2 como dato2ln y verifique el contador de enlaces y N de i-nodo. (Ud. est ubicado en el directorio nuevo) ln dato2 dato2ln ls -li El comando ln crea una entrada en la tabla directorio para el archivo dato2ln, con el mismo N de i-nodo . En ste caso se cre en el mismo directorio pero podra haber sido cualquier otro, por ejemplo: ../dato2n . De esta manera se puede acceder desde distintas partes del rbol de directorios a un mismo i-nodo. Ing. Allende Ing. Serna - 42 -
UTN - FRC
LINUX
El listado extendido muestra que el contador de enlaces se increment, ahora es 2 en ambos archivos, como tambin los atributos que se pueden ver (permisos, tamao, dueo, grupo, etc) son los mismos. 15. Realice un enlace simblico del archivo dato2 como dato2sb y verifique el contador de enlaces y N de i-nodo. ln -s dato2 dato2sb ls -li Observe que el i-nodo y los atributos del archivo dato2sb, son distintos a los de dato2, pues es otro archivo, cuyo contenido es /home/user-name/nuevo/dato2, es decir que llamando a dato2sb accedemos a dato2. Con ste tipo de enlace podemos saber cul es el archivo enlazado. 16. Borre el archivo dato2 y verifique el contador de enlaces. rm dato2 ls -i El contador de enlaces del archivo dato2ln ha disminuido en uno, se ha borrado un link , pero el archivo fsico an existe. El sistema lo borrar slo cuando el contador de enlaces sea cero. 17. Mostrar el contenido del archivo datos2sb. cat datos2sb El sistema nos enva un mensaje de error, ya que datos2sb es un enlace a un archivo que ya no existe. 18. Borrar los archivos creados y terminar la sesin. cd rm r nuevo ctrl d
Actividad 3
2. El enlace duro crea una nueva entrada en el directorio, con el n de i-nodo del archivo enlazado. V F 3. Al borrar un archivo, borramos un acceso o enlace al i-nodo. V F
4. Mostrar el n de i-nodo de los archivos de /bin: a. en una columna b. en varias columnas. 5. Generar un enlace simblico al archivo /etc/inittab. Explicar las caractersticas de ste tipo de enlace en base al ejemplo. 6. Crear el archivo A y mostrar su contenido paginado de 5 lneas por pgina. 7. Mover el archivo A al directorio padre. Tuvo xito la accin anterior? Justifique. 8. Explicar en que consiste la accin de mover un archivo a otro directorio.
- 43 -
UTN - FRC
LINUX
Actividad 4
1. Crear el archivo lista en el directorio con la salida del comando ls l /bin 2. Crear un acceso directo al archivo lista. 3. Ejecute el comando necesario para permitir que el archivo lista figure en el directorio de login con distinto n de i-nodo. 4. Idem al anterior pero con el mismo n de i-nodo. 5. Idem al punto 6 pero con el mismo n de i-nodo y que el archivo lista desaparezca del directorio parcial
- 44 -
UTN - FRC
LINUX
- 45 -
UTN - FRC
LINUX
Respaldo de Archivos
Hacer un respaldo de los archivos significa hacer una copia de seguridad de esos archivos para que se puedan recuperar despus si fuera necesario. Los archivos pueden ser copiados en el disco duro, pero la mayora de los casos se hacen los respaldos en disketes, CD, cintas u otros dispositivos de respaldo, as los datos estn protegidos si el disco duro se daa fsicamente. Una de las herramientas utilizadas para respaldar archivos en LINUX es la utilidad tar.
tar
La palabra tar viene de la utilidad tape archive (archivo de cinta) ya que las copias de seguridad en sistemas Unix se hacen en una unidad de cinta, pero tambin puede copiar en un disco o archivo del disco.El comando tar es muy utilizado normalmente para respaldar archivos, y est disponible en casi todos los sistemas Unix/Linux, lo que permite que sus copias puedan ser utilizadas en cualquier sistema si es necesario. Este comando genera un archivo con extensin .tar, cuando vea archivos con esta extensin implica que se ha u tilizado el comando tar para guardar un grupo de archivos como un nico archivo tipo tar . El formato del comando tar es: $ tar [opciones] nombre archivo.tar [archivo1] [archivo2]...[archivoN] Por ejemplo: $ tar cvf copia.tar /home/usuario1 La opcin c le dice a tar que cree un nuevo archivo de respaldo. La opcin v fuerza a tar en el modo detallado imprimiendo en la pantalla los nombres de los archivos segn se archivan. La opcin f le dice a tar que el siguiente argumento es el nombre del archivo a crear, en nuestro caso el archivo copia.tar. El resto del argumento son los nombres de archivos y/o directorios a empaquetar, que en este caso es /home/usuario1. La primera opcin de tar debe ser la letra c, x, t ya que c implica crear, x extraer un archivo ya creado y t mostrar el contenido del archivo tipo tar. Entonces el comando # tar xvf copia.tar extraer el archivo copia.tar en el directorio actual. Esto puede ser peligroso ya que cuando se extraen archivos de un archivo tar, los archivos antiguos se sobrescriben. Por lo que es importante conocer dnde se deben desempaquetar los archivos. Para ello el comando tar tiene la opcin t # tar tvf copia.tar que muestra por pantalla, un "ndice" del archivo tar antes de desempaquetarlo. De esta forma se puede ver que directorio se utiliz como origen de los nombres de los archivos, y se puede extraer el archivo desde la localizacin correcta.
- 46 -
UTN - FRC
LINUX
Compresin de archivos
Comprimir archivos significa codificar sus contenidos para que sean de un tamao menor y que se puedan restaurar a su tamao y contenidos originales cuando se desee. El tamao del archivo resultante luego de la compresin depender de los datos que haya dentro del mismo. Por ejemplo los archivos de texto se pueden comprimir, en relacin a un archivo binario, a un tamao menor que ste ya que los textos contienen muchos caracteres repetidos y los binarios son datos aleatorios. Existen dos motivos fundamentales por lo que resulta til comprimir archivos: Ocupan menos espacio en disco, podemos comprimir archivos que se usan raramente pero que no deseamos descartarlos. Los archivos comprimidos pueden trasferirse a otro sistema en un tiempo menor. En Linux tenemos comandos disponibles para realizar la compresin y descompresin de archivos. Entre ellos tenemos : compress, gzip,
compress
El comando compress tiene la siguiente estructura: $ compress archivo En este caso el comando compress toma el parmetro archivo como el archivo que hay que comprimir y crea otro archivo con el mismo nombre con el sufijo .z y elimina el archivo original. Para invertir el proceso solo se debe escribir: $ uncompress archivo.z uncompress restaurar al original el tamao y nombre del archivo.z y eliminar el sufijo .z Es posible mostrar los contenidos de un archivo comprimido sin tener que descomprimirlo, esto se realiza con el comando zcat Por ejemplo $ compress texto1 se obtiene el archivo comprimido texto1.z , entonces para ver el contenido de este sin descomprimirlo $ zcat texto1.z Luego si queremos descomprimir el archivo para realizar alguna operacin $ uncompress texto1.z y volvemos a tener el archivo original texto1.
gzip
Este comando suele efectuar una mejor compresin que el anterior (compress) y agrega el sufijo .gz al nombre del archivo comprimido. Para comprimir archivos con el comando gzip la sintaxis es la siguiente: $ gzip [-opciones] archivo Con respecto a las opciones hay nueve de -1 a -9. Se utiliza 1 cuando se desea mayor velocidad de compresin aunque el archivo que se obtiene no sea tan pequeo. Utilizando 9 el Ing. Allende Ing. Serna - 47 -
UTN - FRC
LINUX
objetivo de gzip es obtener el archivo mas pequeo posible, lo que le llevar mas tiempo. El valor predeterminado es 6 si no se da ningn valor. Utilice cualquier valor entre ambos (1-9) dependiendo si lo que desea es el tamao o la velocidad. Por ejemplo: $ gzip -9 copia.tar comprimir copia.tar y lo dejar como copia.tar.gz, que es la versin comprimida del archivo. La opcin -9 le dice a gzip que utilice el mayor factor de compresin. El comando gunzip se utiliza para descomprimir un archivo comprimido con gzip. Tambin sabe como tratar los archivos comprimidos con compress. $ gunzip archivo Por ejemplo $ gunzip copia.tar.gz
split
El comado split divide a un archivo en un grupo de archivos que contenga cada uno de ellos la misma cantidad de lneas o longitud. El nmero de lneas por defecto es de 1000 y el formato es el siguiente: $ split archivo Por ejemplo: $ split informe creara los archivos : xaa xab xac xad
Los tres primeros archivos xaa hasta xac tendrn 1000 lneas cada uno el ultimo xad posiblemente tendr menos porque almacena las lneas restantes de archivo. Si se desea, es posible especificar el nmero de lneas que hay que poner en cada segmento o parte del archivo, y tambin es posible colocar un prefijo para el nombre de cada segmento, de la siguiente forma: $ split - nro_lineas archivo archivoPor ejemplo: $ split 800 informe informecrear los archivos: informe-aa informe-ab informe-ac informe-ad
Para volver a crear el archivo original solo es necesario utilizar el siguiente comando: $ cat informe-* > nuevoarchivo
- 48 -
UTN - FRC
LINUX
Comparar archivos
Linux utiliza simples archivos de texto en una gran variedad de funciones importantes, incluidas las tablas de configuracin del sistema, el cdigo fuente del programa C, las pginas HTML de web y los datos del usuario. En Linux los archivos de texto tienen objetivos importantes por ello existen utilidades que permiten comparar estos archivos de texto, como por ejemplo el comando diff
diff
El comando diff permite ver las diferencias entre dos archivos:: $ diff archivo1 archivo2 Si diff no muestra ninguna salida, los archivos son idnticos. Cualquiera sea la salida de diff significa que los archivos son diferentes. Cuantas mas salidas hay mayor es el nmero de lneas que son diferentes. Por ejemplo: $diff notas.1 datos.1 3c3 < ------> ...... texto de linea 3 datos.1....... . . . . .y asi sucesivamente . . . . . . . La salida de este comando nos dice que el archivo notas.1 difiere del archivo datos.1 en la tercera lnea, y para que ambos sean iguales habra que cambiar la lnea 3 del primero por la lnea 3 del segundo ( 3c3 ). Con el simbolo "<" se indica el contenido de la lnea del archivo de la izquierda, y con el simbolo" >" se indica el contenido respectivo del archivo de la derecha. Y as para el resto. Por lo tanto se muestran todas las diferencias entre ambos archivos, y tambin que debera hacerse sobre el primero de ellos, para que ambos sean iguales. Suele ser til usar la opcin -b en diff para que ignore los espacios y los tabuladores en la lnea, cuando se quiere comparar dos archivos de texto que tiene mrgenes diferentes. Recuerde que este comando se usa solamente con archivos de texto.
cmp
Para comparar cualquier tipo de archivos, incluso si no son de texto utilice este comando: $ cmp archivo1 archivo2 Si cmp vuelve al indicador de shell sin mostrar ningn mensaje, significa que los archivos son idnticos. El comando cmp se detiene cuando encuentra la primera diferencia, por lo que funciona mas rpido que diff. La opcin l muestra todas las diferencias que hay entre los dos archivos Por ejemplo: $cmp notas.1 datos.1 notas.1 datos.1 differ : char 23 , line 5 Indica que ambos archivos tienen su primera diferencia en el caracter 23 de la lnea 5.
- 49 -
UTN - FRC
LINUX
Actividad 1
1. Inicie su sesin como usuario alumno. Login : alumno Password: ******* 2. Cree el archivo comandos que contenga los nombres de los comandos (con sus atributos principales) que pueden ejecutar los usuarios del sistema Linux. ls l /bin > comandos 3. Agregue al archivo anterior los comandos que puede ejecutar solo el administrador. ls l /sbin >> comandos 4. Cree el archivo usuarios que contenga los usuario activos del sistema. Verificar los archivos creados. who > usuarios ls l 5. Realice una copia de seguridad de los archivo creados en copia.tar. Verifique si los archivos originales todava existen. tar cvf copia.tar comandos usuarios ls l La salida del comando tar muestra los nombres de los archivos segn se van copiando en el respaldo, y los archivos originales permanecen sin alteracin. 6. Muestre el contenido del archivo de respaldo creado. tar tvf copia.tar La salida de este comando es casi idntica a realizar un ls l de los archivos guardados. 7. Extraiga los archivos originales del archivo de respaldo, en el sudirectorio backup creado en su directorio de login. mkdir backup cd backup tar xvf ../copia.tar Recordemos que la opcion x, descomprime los archivos respaldados el directorio actual por los que es necesario tener creado el subdirectorio destino con anticipacin. Luego cambiarse a ese directorio y recin all extraer los archivos del respaldo. Este comando reemplaza los archivos existentes con el mismo nombre por lo que es necesario, tener muy en cuenta dnde extraemos esos archivos. 8. Comprimir el archivo comandos como comandos.Z. Verifique si el archivo original todava existe. compress comandos ls -l Ud. sabe que al comprimir un archivo con el comando compress automticamente se agrega la extensin .Z, por lo que compress es el comando a usar. Observe tambin que el archivo compactado reemplaza al original 9. Mostrar el contenido del archivo comprimido comandos.Z y luego descomprimirlo. zcat comandos.Z uncompress comandos.Z Al igual que el comando inverso al ejecutar uncompress el archivo compactado es reemplazado por el archivo original. Ing. Allende Ing. Serna - 50 -
UTN - FRC
LINUX
10. Dividir el archivo comandos en archivos de 25 lneas cada uno. Verifique los archivos existentes. split 25 comandos ls l Se han creado los archivos xaa xab xac, etc pero el archivo original comandos sigue existiendo. 11. Cree el archivo comandos2 que contenga los nombres de los comandos que pueden ejecutar los usuarios del sistema Linux y luego agregue al mismo archivo el nmero de i-nodo del archivo creado. ls /bin > comandos2 ls i comandos2 >> comandos2 12. Realice la misma operacin pero creando un archivo llamado comandos3 ls /bin > comandos3 ls i comandos3 >> comandos3 13. Verifique si hay diferencias entre el archivo comandos2 y el archivo comandos3. diff comandos2 comandos3 El objetivo del los pasos anteriores era crear dos archivos con una lnea de diferencia para realizar una comparacin entre ellos. El comando diff muestra el nro. de lnea donde esta la diferencia y el texto de la lnea propiamente dicha. 14. Compare los archivos anteriores y describa la salida obtenida. cmp comandos2 comandos3 Como puede observar la salida de este comando muestra la lnea y el carcter a partir del cual comienza la diferencia. 15. Copie el archivo comandos3 al archivo copia, verifique que la copia exista y luego comprelos. Qu salida obtiene? cp comandos3 copia ls ~/ cmp comandos copia No obtenemos ninguna salida ya que los archivos son idnticos.
Actividad 2
1. Luego de iniciar su sesin. Cree el archivo dispositivos que contenga los nombres de los dispositivos que existan en el subdirectorio /dev, con sus atributos principales. Login : alumno Password: ******* ls l /dev > dispositivos 2. Dividir el archivo dispositivos en archivos que comiencen con el prefijo device de 150 lneas cada uno. Verificar los archivos creados. split 150 dispositivos devicels 3. Realice una copia de seguridad de los archivos creados (dispositivos y device*) en respaldo.tar. Verifique si los archivos originales todava existen. tar cvf respaldo.tar dispositivos device* ls l Ing. Allende Ing. Serna - 51 -
UTN - FRC
LINUX
4. Muestre el contenido del archivo de respaldo creado. tar tvf respaldo.tar 5. Comprima el archivo respaldo.tar como un archivo .gz con la mayor velocidad de compresin. Verifique el archivo creado. gzip 1 respaldo.tar Como observo utilizamos el comando gzip con la opcin 1 que permite mayor velocidad de compresin aunque el archivo que se obtiene no sea tan pequeo. El archivo obtenido conserva la extensin .tar y agrega .gz .6. Descomprimir el archivo creado anteriormente. gunzip respaldo.tar.gz Este comando vuelve el archivo compactado al archivo que le dio origen desapareciendo la extension .gz 7. Extraiga los archivos originales del archivo de respaldo, en el sudirectorio copia de su directorio de login. mkdir copia cd copia. tar xvf ../respaldo.tar Recuerde de tener cuidado de no pisar los archivos existentes cuando extraiga los archivos por ese generalmente se utiliza un subdirectorio nuevo.
Actividad 3
1. Crear un archivo de respaldo de los archivos del directorio /dev 2. Comprimir los archivos de /bin que comiencen con la letra m 3. Cual es la diferencia entre utilizar el comando compress gzip? 4. Realice una copia de seguridad de los archivo creados en seguridad.tar . Muestre el contenido del archivo de respaldo creado. 5. Dividir el archivo de respaldo creado en archivos de 20 lneas cada uno. Verifique los archivos existentes.
- 52 -
UTN - FRC
LINUX
6 Filtros
- 53 -
UTN - FRC
LINUX
Filtros
Bajo este nombre podemos ubicar a una familia de comandos que leen alguna entrada, realizan alguna transformacin y emiten alguna salida sin modificar los datos de entrada. A esos programas se les da el nombre de filtros. Algunos de estos comandos son grep, sort, find, locate y wc, los cuales vamos en su uso ms bsico pues cada uno de ellos ofrecen muchas posibilidades. Si desea mas informacin puede consultar el manual de linux simplemente tipeando man nom_comando.
grep
Es uno de los programas ms potentes del sistema operativo Linux. Este comando permite buscar en uno o ms archivos una cadena de caracteres. Existen tres variaciones del mismo comando: grep, egrep y fgrep. Grep es de gran utilidad para encontrar ocurrencias de variables en programas y para seleccionar partes de la salida de un programa. Por omisin, grep, muestra todas la lneas de los archivos en dnde figura la cadena de caracteres que se desea ubicar. La sintaxis es la siguiente: $ grep [patron de bsqueda] archivo1 archivo2 -n -v -y adems de la salida normal, muestra los nmeros de las lneas donde se detectan las ocurrencias del patrn. invierte la bsqueda, o sea muestra las lneas que no contienen el patrn. no discrimina maysculas y minsculas. Si el archivo en el que desea realizar la bsqueda se encuentra en otro directorio, debe especificar la ruta (absoluta o relativa) de acceso al mismo. Tambin puede usar metacaracteres para buscar en mltiples archivos. Por ejemplo: $ grep fragmentacin memoria en la asignacin de memoria a los procesos es la fragmentacin. a la fragmentacin externa como el espacio de memoria que no puede ser : : genera un listado de las lneas del archivo memoria que tienen la palabra fragmentacin. $ grep frag *.txt mem.txt: la desventaja principal es la fragmentacin. Disc.txt: el disco esta fragmentado : busca la cadena frag en todos los archivos con extensin txt, y muestra el nombre del archivo en donde encontr la cadena y la lnea que la contiene. El comando grep no slo puede manejar cadena de caracteres como patrones de bsqueda, sino tambin cadenas denominadas expresiones regulares. Las expresiones regulares se especifican dando un significado especial a ciertos metacaracteres utilizados por el shell. Es decir que un metacaracter utilizado por el shell tiene distinto utilidad si es manejado por el comando grep. Los patrones de bsqueda que utilizan expresiones regulares, van entre comillas simples para evitar que el shell los interprete como metacaracteres. Los patrones de bsqueda que tiene mas de una cadena de caracteres pueden ir entre comillas simples o dobles.
- 54 -
UTN - FRC
LINUX
Veamos como trabajan algunas expresiones regulares, para ello vamos a crear primero un archivo para utilizar en los ejemplos: $ ls -l /home/garcia > directorios Los metacaracteres ^ y $ buscan al inicio o al final de la lnea, respectivamente. Reciben el nombre de anclas, pues anclan un patrn a un determinado lugar de la lnea. $ grep ^d directorios la orden anterior hace un listado de todas las lneas del archivo directorios que tienen como primer carcter una d. Si recordamos, en el archivo directorios tenemos un listado extendido de los archivos y directorios de /home/garcia, por lo que en definitiva, con el comando grep generamos un listado de los subdirectorios del directorio garcia. Supongamos ahora que en el directorio /home/garcia tenemos varios archivos denominados padronaa, padronab, etc, que habamos generado con el comando split, y necesitamos un listado extendido de ellos. Para ello una de las opciones a utilizar puede ser la siguiente: $ grep padron..$ directorios -rw-r--r--rw-r--r--rw-r--r--rw-r--r-1 1 1 1 rgarcia rgarcia rgarcia rgarcia rgarcia rgarcia rgarcia rgarcia 2048 2048 2048 2048 May May May May 10 10 10 10 2003 2003 2003 2003 padronaa padronab padronac padronad
el smbolo $ ancla la bsqueda al final de cada lnea del archivo directorios. Es decir que muestra las lneas en cuyo ltimo campo est la cadena padrn. Los puntos, corresponden a una expresin regular y reemplaza cada uno de ellos a cualquier carcter que est en esa posicin de la cadena a buscar. El punto . reemplaza a cualquier carcter, tiene la misma utilidad que el ? del shell. $ grep ^x directorios
drwxrw--r-- 3 rgarcia rgarcia ... practicos -rwxr--r-1 rgarcia rgarcia ... buscar drwxr--r-x 2 rgarcia rgarcia ... monografias -r-xr--r-1 rgarcia rgarcia ... ver : : el smbolo ^ ancla la bsqueda al comienzo de cada lnea, y los tres puntos corresponden a cualquier combinacin de los tres primeros caracteres de la lnea. Es decir que lista los archivos y directorios en los cuales el dueo tiene permiso de ejecucin. El punto se puede utilizar al comienzo, medio o final de cualquier cadena o patrn de bsqueda. El asterisco * reemplaza a cualquier nmero de apariciones de un patrn o de una seccin de un patrn. Por ejemplo, si desea buscar la cadena aaa en el a rchivo deudores, podra tipear el comando como sigue: $ grep a* deudores
Domingo Gutirrez aaa 52.00 Eliseo Mendez aaaa 33.00 : : en este caso grep muestra las lneas del archivo que tienen un nmero cualquiera de la letra a, seguidas. Supongamos ahora que necesita buscar los datos de un deudor en particular, el Sr. Simberman, pero no recuerda cmo se escribe, slo recuerda que comienza con Sim, entonces puede utilizar el asterisco en combinacin con el punto de la siguiente manera: Ing. Allende Ing. Serna - 55 -
UTN - FRC
LINUX
$ grep Sim.* deudores Jorge Sim sistemas 36.00 Tomas Simberman sistemas 37.00 Esteban SimSim contabilidad 48.00 : : el comando muestra todas lneas en donde encontr cualquier secuencia de caracteres que comience con Sim. Debemos tener en cuenta que el asterisco slo se aplica a un carcter (slo afecta al carcter que esta a su izquierda), de modo que Sim* reconoce una Si seguida de varias m, y no busca secuencias como SimSimSim. Luego, cualquier nmero de repeticiones de un carcter incluye al cero, por lo que es posible que el comando anterior reconozca la cadena Sim como un apellido vlido, sin que haya algn carcter despus de estos tres. El comando grep maneja los rangos de forma muy parecida al shell, de modo que [a-g] se acopla con cualquier minscula de la a a la g. Otro ejemplo: $ grep dato[0-9] directorios drwxrw--r-3 rgarcia rgarcia ... dato1 -rwx r-- r-1 rgarcia rgarcia ... dato3 drwx r-- r-x 2 rgarcia rgarcia ... dato6 - r-x r- -r-1 rgarcia rgarcia ... dato8 : : muestra un listado de los archivos de nombre dato y el ltimo carcter es un nmero del cero al nueve. Si un rango de caracteres comienza con el smbolo ^, el patrn se acopla con cualquier carcter excepto los del rango. Es decir, [^ 0 concuerda con cualquier -9] carcter que no sea un dgito.
fgrep
Busca dentro de los archivos y muestra las lneas que contengan un patrn especificado. El patrn se interpreta como una lista de cadenas fijas y no como una expresin regular. Bsicamente funciona de la misma forma que el comando grep, sin embargo, el tamao de los patrones que podemos utilizar con fgrep es mucho mayor a los de grep y egrep. Una de las opciones mas interesantes es f, pues permite especificar un archivo para obtener el patrn de bsqueda. En este archivo podemos introducir ms de una cadena a buscar; en donde los new_line separan los patrones que deben buscarse en paralelo. Es decir, que busca cadenas literales en forma simultnea. $ fgrep -f archivo-de-entrada archivo Supongamos que tenemos en el archivo dat1 un conjunto de lneas que hemos generado con la salida del comando ls l /proc/10*, y queremos saber si esas lneas estn en el archivo directorios. Es decir que debemos buscar cada una de las lneas del archivo dat1 en el archivo directorios: $ fgrep -f dat1 directorios d rw- r-- r-1 rgarcia d rw- r-- r-1 rgarcia d rw- r-- r-1 rgarcia : : este comando nos muestra un listado de alguna de las lneas del archivo dat1. rgarcia rgarcia rgarcia ... ... ... 1076 1085 1086
- 56 -
UTN - FRC
LINUX
egrep
Busca dentro de los ficheros un patrn especificado y muestra las lneas que contienen a ese patrn. El patrn se interpreta como una expresin regular. Estas son las mismas que las del comando grep y algunas ms. Por ejemplo: Los parntesis pueden utilizarse para agrupar un conjunto de caracteres que van a ser afectados por una expresin regular, como por ejemplo el *. $ egrep (Sim)* deudores Jorge Sim sistemas 36.00 Tomas Simberman sistemas 37.00 Esteban SimSim contabilidad 48.00 : : El * permite buscar cualquier repeticin de los caracteres Sim. En este ejemplo el comando egrep lista todas las lneas del archivo deudores en donde encontr la cadena o cualquier repeticin de la misma. La barra vertical es un operador OR: cadena1 cadena2. El comando se acopla con la cadena1 o con la cadena2. Por ejemplo: $ egrep dat(oslnenla) directorios drwxrw--r--rwx r-- r-3 rgarcia 1 rgarcia rgarcia rgarcia ... ... datosln datenla
El comando egrep funciona mucho ms rpido que grep cuando se utilizan expresiones regulares, y sobre todo cuando se inspeccionan archivos grandes.
en este ejemplo el comando busca el archivo deudores en los tres directorios tomados como path, y en todos sus subdirectorios. Puede ingresa a la pgina man y comprobar si la sintaxis del comando es la siguiente: find [ path ... ] [expresion] Por otra parte, opciones hace referencia a los tipos de bsqueda, por ejemplo: buscar por nombre, por permisos, por dueo del archivo, etc. Es decir que las opciones ya no son un carcter sino una palabra.
- 57 -
UTN - FRC
LINUX
Bsqueda por nombre del archivo, la opcin es name. Supongamos que no recordamos en que subdirectorio hemos creado el archivo deudores, pero sabemos que como usuarios comunes no podemos haberlo colocado en la raiz, o en /etc, o en algn directorio especial, por lo que debemos buscarlo por las ramas del file system inferiores a nuestro home directory, para este ejemplo utilizamos el nombre de usuario rgarcia: $ find /home/rgarcia -name deudores /home/rgarcia/practico/deudores /home/rgarcia/contable/deudores el comando entrega un listado con la ruta absoluta de los archivos deudores que encuentre. Tambin es posible utilizar en el nombre de los archivos, metacaracteres, en el caso que conozca parte del nombre. Por ejemplo deudo*. En tal caso debe utilizar comillas simples para unificar la expresin, el comando quedara de la siguiente manera: $ find /home/rgarcia -name deudo* /home/rgarcia/practico/deudores /home/rgarcia/contable/deudor-05 /home/rgarcia/contable/deudor-orl Presentamos otro ejemplo: $ find . name *deudor* -name *01 en este caso los archivos deben cumplir dos condiciones para que sean seleccionados: - el nombre del archivo base debe contener la palabra deudor - el nombre del archivo base debe terminar en 01 por lo que podramos obtener el siguiente listado: deudor01 feb-deudor-01 finan-deudor01 ./finanzas/p-deudor.01
Bsqueda por fecha de ultima modificacin, la opcin es -atime. Supongamos que no recordamos el nombre del archivo que creamos y que utilizamos por ltima vez hace 5 das, podramos buscarlo de la siguiente manera: $ find / -atime 5 /home/rgarcia/entrada-linux /home/rgarcia/practicos/deudores /home/rgarcia/mem -linux es posible utilizar, en el pathname, / para indicarle a find que la bsqueda se realizar en nuestro directorio de conexin, /home/nom_usuario. En este caso, el comando muestra un listado de los archivos modificados, incluso los creados, durante los ltimos 5 das.
Bsqueda por tipo de archivo, la opcin es -type, segn la siguiente tabla: tipo f d b c l p descripcin Archivo regular u ordinario Directorio Archivo de dispositivo de bloque Archivo de dispositivo de carcter Enlace simblico Conector o pipe con nombre
- 58 -
LINUX
Este ejemplo muestra un listado de los archivos del directorio etc, que son enlace de algn otro. Bsqueda de archivos que tengan un nmero de nodo-i especfico, la opcin es -inum. Los enlaces duros permiten que diferentes nombres simblicos de archivos tengan el mismo nmero de nodo-i. Para visualizar el nodo-i de un archivo utilizamos la orden ls i. Pero si necesitamos saber todos los enlaces que existen en el file system sobre un determinado archivo, la orden ser la siguiente: $ find / -inum 102802 /home/garcia/tp01 /home/torres/practicosop /tmp/tp-sop en este ejemplo hemos encontrado tres archivos que tienen el mismo nodo-i. Sin embargo, debe verificar que los archivos encontrados pertenezcan al mismo sistema de archivos, pues cada sistema de archivos tiene su propio conjunto de nodo-i. Dos archivos de diferentes sistemas de archivos con el mismo nmero de nodo-i no son el mismo archivo, porque hacen referencia a diferentes conjuntos de nodo-i. (Vea, Punto de Montaje en Dispositivos de E/S) Bsqueda segn el contenido ms reciente que un archivo dado, la opcin es newer. Este muestra la ruta de acceso a los archivos modificados despus de un determinado archivo pasado al comando como argumento. Por ejemplo: find /home/garcia -newer /home/garcia/back-seg.tar | tar cvf copia.tar en este caso el comando find genera una lista de todos los archivos modificados despus de back-seg.tar, que estn por debajo del directorio /home/garcia. Estas lista est conectada mediante un pipeline al comando tar, quien genera una copia de seguridad de todos los archivos de la lista, generando un nuevo archivo de backups, copia.tar. Bsqueda de archivos en un nivel especfico, la opcin es level Sabemos que en pathname definimos el/los directorios iniciales de bsqueda y que find realiza una bsqueda recursiva, es decir en los subdirectorios del directorio inicial. Pero es posible definir a que nivel necesitamos realizar la bsqueda, as pues: -level 0 No examina ningn directorio -level 1 Examina un nivel de profundidad de directorio -level 2 Examina dos niveles de profundidad de directorios. Por ejemplo: $ find . -inum 102805 ./practico/sop ./sistemas ./trabajos/sis-04 $ find . -inum 102805 ./practico/sop ./sistemas ./trabajos/sis-04 ./trabajo/sop/modelo-04 Ing. Allende Ing. Serna level 1
level 2
- 59 -
UTN - FRC
LINUX
Bsqueda utilizando opciones que hacen referencia a un argumento entero , por ejemplo tamao, fecha, hora, nodo-i). +n coincide con alguna propiedad de archivo cuyo valor es mayor que n. -n coincide con alguna propiedad de archivo cuyo valor es menor que n. n coincide con alguna propiedad de archivo cuyo valor es igual a n. Por ejemplo: $ find / -size +3000 Este ejemplo muestra los nombres de los archivos de todo el File System que tienen ms de 3000 bloques. $ find / -mtime -10 Este ejemplo muestra los nombres de los archivos de todo el File System que se modificaron en los ltimos 10 das.
El comando find tiene muchas otras opciones que por razones de espacio no incorporamos en el presente captulo, pero puede consultar la pgina man de find.
Para ver cmo trabaja el comando podra crear el archivo lista con las siguientes lneas (apellido, legajo, documento): Gutierrez 45378 30569025 - 60 -
UTN - FRC Torres Albama Kirmat 42963 40258 45147 32987026 32025147 33589632
LINUX
Es un ejemplo muy sencillo pero valido, que nos permitir conocer la potencia del comando. Supongamos que necesitamos ver ordenadas las lneas del archivo lista, entonces tipeamos: $ sort lista Albama Gutierrez Kirmat Torres 40258 45378 45147 42963 32025147 30569025 33589632 32987026
Vemos que el comando nos muestra las lneas del archivo ordenadas segn el primer campo, es decir segn el apellido. Ahora bien, si deseamos ordenar el archivo segn el campo legajo, tendremos que indicarle a sort que vamos a ordenar por el segundo campo, pero como el nmero de espacios entre el apellido y el legajo vara segn la lnea, vamos a utilizar la opcin b para indicarle al comando que considere un grupo de espacios como un nico espacio. $ sort +2 -b lista Albama Torres Kirmat Gutierrez 40258 42963 45147 45378 32025147 32987026 33589632 30569025
La opcin sort -n trata como numero al campo en base al que se ordenar el archivo, sea este el primero de cada lnea o el indicado por +pos. Esta opcin trata tambin nmeros negativos y fraccionarios, por ejemplo, sea el archivo pedido cuyo el contenido es: Susana Pedro Esther Mirta 1.25 -2.5 12 -30 azucar yerba pan harina
La orden sort -nb +1 pedido ordena el archivo por el 2 campo, considerando los nmeros positivos y negativos: Mirta Pedro Susana Esther -30 -2.5 1.25 12 harina yerba azucar pan
Es posible mediante sort mostrar en forma ordenada la salida de otros comandos, mediante tuberas, por ejemplo: ls -l sort +4n
La ordenacin ASCII no considera el valor numrico de la quinta columna, es por eso que debemos utilizar la opcin -n. En el ejemplo anterior vemos la salida del comando ordenada segn el tamao de los archivos. Ing. Allende Ing. Serna - 61 -
UTN - FRC
LINUX
Ahora bien, que sucede si al ordenar un archivo varias de sus lneas tienen el mismo campo o clave de ordenacin? . En el ejemplo anterior, la primera y segunda columna son iguales (permisos y enlaces) en la 2 y 3 lnea de salida, por lo que debemos indicar en ese caso ms de una clave de ordenacin. +pos -pos2 +pos indica cuantos campos debemos ignorar para llegar al inicio de la clave. -pos indica el ltimo campo considerado como clave. ls -l sort +4n -5 +0 -3 Esto significa que la mayora de las lneas se ordenarn el campo size, los campos 1, 2 y 3 sern las claves de ordenacin secundarias. El comando sort dispone de muchas mas opciones que puede investigar por su cuenta en las pginas del manual en lnea.
Contar
- wc
El comando wc permite contar lneas, palabras y caracteres de una entrada, sea sta la entrada estndar o un grupo de archivos, y entrega un informe por la salida estndar. La sintaxis es la siguiente: $ wc [-opcin ] archivos ... wc por omisin realiza las tres operaciones: contar lneas, palabras y caracteres; y en ese orden los muestra. Pero es posible utilizar las siguientes opciones: -l -w -c cuenta slo las lneas del archivo de entrada. cuenta slo las palabras del archivo de entrada. cuenta slo los caracteres del archivo de entrada.
Este comando es muy simple, pero es de gran utilidad en combinacin con otros comandos. por ejemplo, supongamos que necesitamos saber cuantos archivos ( incluyendo los directorio ) tiene nuestro directorio, tal caso podemos ejecutar la siguiente orden: $ ls > dire $ wc l dire 35 Es posible tambin darle a wc varios argumentos, por ejemplo que cuente las lneas de tres archivos: $ wc l dato docu.txt practico 300 dato 4500 docu.txt 963 practico
- 62 -
UTN - FRC
LINUX
Actividad 1
1. Crear el archivo directorios con la salida del comando ls la, ejecutado en su directorio de login. ls -la > directorios 2. Verifique que el archivo se haya creado. ls 3. Mostrar todas las lneas del archivo directorios que comienzan con el carcter -, es decir las lneas que correspondan a archivos comunes. grep ^ directorios utilizamos el ancla ^, para que la bsqueda se realice en el primer campo, tipo de archivo y permisos. 4. Mostrar los permisos de los archivos de su directorio en cuyo nombre tengan la cadena nome. grep nome$ directorios utilizamos el ancla $, para que la bsqueda se realice en el ltimo campo, nombre de archivo.
5. Mostrar todos los archivos cuyos permisos para el dueo sean rw. grep ^.rw directorios utilizamos el ancla ^, p ara que la bsqueda se realice en el primer campo, tipo de archivo y permisos. El punto, reemplaza a cualquier carcter que est en esa posicin, es decir, el tipo de archivo puede ser d, , l, c, b; luego colocamos los tre caracteres que buscamos en esa posicin, rw.
Actividad 2
1. Ordenar el archivo directorios segn el 2 campo, el contador de enlaces, y guardar la salida del comando en el archivo dir1. sort +1n directorios > dir1 si ejecutamos el comando more dir1, veremos que los archivos estn ordenados segn el numero de enlaces, primero los que tienen un enlace, luego los que tiene dos, etc. 2. Ejecutar la orden del punto anterior, pero el orden de clasificacin debe ser el inverso. Guardar la salida del comando en el archivo dir2. sort +1 nr directorios > dir2 la opcin r invierte el orden de clasificacin, la opcin n hace referencia a que el campo sobre el cual estamos trabajando, es numrico. Si vemos el contenido de dir2, los archivos estarn ordenados segn el contador de enlaces, primero, por ejemplo, los que tienen cinco enlaces, luego los que tienen cuatro, etc. 3. Ordenar el archivo directorios segn el nombre de los archivos. Redireccionar la salida del comando al archivo dir3. sort +8 directorios > dir3 los archivos estarn ordenados alfabticamente segn el ltimo campo. 4. Idem al anterior, pero ordene en orden inverso de clasificacin. Guarde la salida en el archivo dir4. sort +8 -r directorios > dir4 Ing. Allende Ing. Serna - 63 -
LINUX
Actividad 3
1. En su directorio de conexin crear los subdirectorios tareas y practico. cd (vamos a nuestro directorio de conexin) mkdir tareas practico 2. Copiar los archivos dir1 y dir2 al subdirectorio tareas. cp dir1 dir2 tareas verificamos si los archivos fueron copiados, tipeando: ls tareas 3. Copiar los archivos dir3 y dir4 al subdirectorio practico. cp dir3 dir4 practico 4. Cambiarse al directorio practico. cd practico
5. Buscar en su rbol de directorios, desde su directorio de login, el archivo dir1. find / -name dir1 Observe que el comando muestra un listado de los directorios en donde encontr el archivo dir1. Muestra la ruta absoluta a cada uno de los archivos dir1. La bsqueda comenz desde el directorio de conexin, hacia las ramas inferiores del rbol de directorios. 6. Buscar en su rbol de directorios, desde su directorio de login, todos los archivos cuyo nombre comience con la cadena dir. find / -name dir* 7. Buscar en su rbol de directorios, todos los archivos creados el da de hoy. find / -atime 0 8. Buscar y mostrar en su rbol de directorios, todos los archivos directorios. find / -type d
Actividad 4
1. Generar un archivo con informacin sobre los usuarios conectados al sistema, pero no se incluya en el informe. 2. Mostrar el contenido del archivo ordenado segn el nombre de usuario, y si ste tiene ms de una terminal abierta, ordenar de acuerdo a ste otro campo. 3. Genere un listado con informacin completa sobre los archivos cuyo numero de enlaces sea superior a 3, considere todos los archivo de /home. 4. Ejecute el punto anterior pero ordene el listado segn el numero de enlaces en forma descendente.
- 64 -
UTN - FRC
LINUX
7 Seguridad y Proteccin
- 65 -
UTN - FRC
LINUX
Autenticacin de usuarios
Comienza cuando se ejecuta el comando login que es el que pide el nombre de usuario con el cual el SO identifica una cuenta de usuario. Luego pide la palabra clave, la cual no se visualiza en pantalla. Login toma el username y verifica su existencia en el archivo /etc/password. As mismo obtiene del archivo /etc/group el grupo al que pertenece el usuario. Utiliza un sistema de contraseas shadow (sombra) que mejora la seguridad del sistema al mover las contraseas encriptadas desde el archivo /etc/passwd que puede leer todo el mundo, a /etc/shadow, el cual slo puede ser ledo por el usuario root. Tambin almacena informacin sobre la vigencias de las contraseas. Una vez que el sistema comienza la sesin ubica al usuario en un directorio de trabajo que le es propio, donde l es el dueo, generalmente /home/username. Cada usuario puede cambiar su propia clave cuando lo desee, y root (supervisor) tiene el poder de cambiar la clave de todos los usuarios. El comando que se utiliza para realizarlo es passwd, con la siguiente sintaxis: $ passwd usuario [enter] Changing password for usuario (current) Unix Password: _____ New Unix Password: ____ Retype New Unix Password: _____ En donde deber ingresar la clave actual y luego ingresar dos veces la nueva clave .
Sistema de Permisos r w x
El otro mtodo que utiliza Linux para brindar mayor seguridad es mantener un sistema de permisos de acceso a los archivos muy estricto, a fin de controlar qu es lo que se puede hacer con ellos, y quien lo puede hacer. Ing. Allende Ing. Serna - 66 -
UTN - FRC
LINUX
Cada archivo posee tres tipos de permisos que se identifican con letras y son: r w x permiso de lectura del contenido del archivo, o permiso de listar el contenido en el caso de directorios. de escritura y modificacin del archivo, para directorios, permite crear nuevos directorios y archivos o borrar los ya existentes en dicho directorio. Permiso de ejecucin del archivo, si es un programa, o para directorios permite al usuario explorar dicho subdirectorio.
Al contrario que en Windows o MS-DOS los programas ejecutables de Linux no estn marcados por una determinada extensin (.exe) sino por un atributo, el permiso de ejecucin x. Si se elimina este atributo a un programa, Linux no ser capaz de ejecutarlo. A su vez cada uno de estos permisos pueden ser fijados para tres clases de usuarios: u el usuario o dueo del archivo (normalmente el que lo cre) g al grupo de usuarios al que pertenece el dueo. o al resto de usuarios no incluido. As por ejemplo, un archivo determinado puede tener permiso para ser ledo, escrito y ejecutado por su dueo, ledo y ejecutado por el grupo al que pertenece y no tener ningn tipo de acceso para los dems usuarios. Como se puede entender este tipo de mecanismo es especialmente til cuando se trabaja en grupo en un determinado proyecto. Con el comando ls y la opcin l (extendido), se mostrar el listado largo de los archivos, el cual incluye los permisos que posee cada archivo. $ ls l archivo -rw-r--r-1 usuario1 users 505 May 3 18:30 sueldos
El primer campo representa tipo y permisos del archivo. El tercer campo es le propietario del archivo ( usuario1) y el cuarto es el grupo al que pertenece el archivo (users). Obviamente el ltimo campo es el nombre del archivo y los dems campos fueron analizados anteriormente. Este archivo pertenece a usuario1 y al grupo users. La cadena -rw-r--r-- nos informa lo siguiente: El primer carcter indica el tipo de archivo (visto anteriormente), es decir nos indica si es un archivo regular (-). Los 9 caracteres siguiente nos muestra por orden, los permisos para el propietario, para el grupo del archivo y para cualquier otro usuario. Luego concluimos que usuario1 tiene permisos de lectura y escritura para el archivo sueldos pero no de ejecucin. El grupo users tiene solo permisos de lectura ( r) al igual que los otros usuarios. Aqu tenemos otros ejemplos de permisos de grupo: -rwxr-xr-x El propietario del archivo puede leer, escribir y ejecutar el archivo. Los usuarios pertenecientes al grupo del archivo, y todos los dems usuarios pueden leer y ejecutar el archivo. -rw------El propietario del archivo puede leer y escribir. Nadie ms puede acceder al archivo. -rwxrwxrwx Todos los usuarios pueden leer, escribir y ejecutar el archivo. Los permisos otorgados a un archivo dependen de los permisos del directorio en el cual el documento est localizado: para ser capaz de leer un archivo, el usuario necesita tener el permiso de lectura para el archivo y el permiso de ejecucin para el directorio que lo contiene. Por tanto, si un usuario determinado no quiere que nadie ms vea sus archivos, puede lograr esto eliminando los permisos de ejecucin de su directorio personal para todos los dems
- 67 -
UTN - FRC
LINUX
usuarios. De esta manera, slo l (y por supuesto, el administrador "root") podrn leer cualquiera de sus archivos, sin importar cuales sean los permisos individuales de los archivos. Por ejemplo, aunque un archivo tenga los permisos -rwxrwxrwx, otros usuarios no podrn acceder a l a menos que tambin tengan permiso de lectura y ejecucin para el directorio en el cual se encuentra el archivo. Es decir, si Mara quiere restringir el acceso a todos sus archivos, podra simplemente poner los permisos a su directorio de trabajo /home/mara de la siguiente forma: drwx-----Sintetizando, para acceder a un archivo, se debe de tener permiso de ejecucin de todos los directorios a lo largo del camino de acceso al archivo, adems de permiso de lectura (o ejecucin) del archivo en particular.
Cambio de permisos
El comando chmod se usa para modificar los permisos de un archivo. Los modos de acceso a un archivo solo los fija el propietario del archivo y no el administrador del sistema. Este solo es responsable de sus archivos y los del sistema. La sintaxis de este comando tiene varias opciones: v Modo simblico En este modo es comando chmod tiene el siguiente formato: $ chmod {u,g,o,a}{+,-}{r,w,x} nombre_del_archivo Entre llaves indicamos las opciones de las modificaciones a realizar sobre el archivo. En el primer grupo se especifica a que usuarios se est otorgando el permiso: u = (user) propietario del archivo g = (group) grupo al que est asociado el archivo o = (other) resto de los usuarios que no son propietarios ni pertenecen al grupo a = (all) todos los usuarios del sistema En el caso que no se especifique se toma por defecto a (all) En el segundo grupo de opciones se especifica si se estn aadiendo permisos (+) o quitndolos (-). Finalmente se especifica que tipo de permiso read, write o execute. Algunos ejemplos: $ chmod a+r notas al igual que $ chmod +r notas Da a todos los usuarios permiso de lectura al archivo notas. $ chmod og-x archivo Quita permisos de ejecucin a todos los usuarios excepto al propietario. $ chmod ug+rx, o-w archivo A user y group agrega permisos de lectura y ejecucin. A other le quita permiso de escritura. v Modo absoluto Esta segunda opcin del comando chmod tiene la siguiente sintaxis: $ chmod u=rwx,g=rx,o=w archivo User adquiere los permisos rwx, group adquiere solamente r y x, other adquiere solamente w. $ chmod u=rwx,g=w archivo User adquiere los permisos rwx, group adquiere solamente w, other no se modifica.
- 68 -
LINUX
Es el tercer modo de este comando, en el cual se especifican los permisos mediante notacin numrica octal (0-7) de 4 dgitos en donde el primer digito esta reservado para los bits suid, sgid y sticky el segundo digito para los permisos del propietario, el tercer dgito para los permisos del grupo, y el cuarto digito para el resto de los usuarios. De esta manera, un archivo tiene tres nmeros asignados: propietario, grupo y otros. Cada permiso llevan asociado un nmero: - rwx 4 para lectura (0100 ) + 2 para escritura (0010 ) en binario 1 para ejecucin (0001) 0 ausencia de permiso (0 0 0 0 ) 7 (0111)
Para cada clase de usuario se calcula la suma de permisos que se desea conceder, el nmero resultante ser el parmetro utilizado por chmod para modificar los permisos del archivo. Ejemplo: $ chmod 0754 archivo El 7 implica los tres permisos otorgados a la vez para el propietario. (0111- los bits r w x activados) El 5 implica lectura y ejecucin para el grupo (0101 los bits r - x activados) El 4 implica lectura solamente para los otros usuarios. (0100 el bit r - - solamente activado) Otro ejemplo: Si se desea otorgar permiso de lectura y escritura la propietario del archivo, permiso de lectura al grupo y ningn permiso al resto de los usuarios, el nmero que habr que utilizar en el chmod es 640. $ chmod 0640 archivo En el entorno grafico se puede ver los permisos utilizando el Gestor de Archivos de GNOME, presionando el botn derecho del ratn en el archivo, y escogiendo propiedades desplegables, y entonces la pestaa Permisos. Utilizando este dilogo, se puede tambin cambiar los permisos slo presionando en el cuadrado que representa el permiso para modificar su estado. Por supuesto, slo el dueo del archivo o el administrador del sistema puede cambiar los permisos de un archivo.
UTN - FRC # chmod 4444 archivo2 # ls -l archivo1 -rwsrwxrwx 1 root # ls -l archivo2 -r-Sr--r-1 root
LINUX
other other
0 0
May May
9 9
17:51
archivo1
17:51 archivo2
El bit suid activado sobre un archivo indica que todo aqul que ejecute el archivo va a tener durante la ejecucin los mismos privilegios que quin lo cre; es decir que indica que el usuario toma prestada'' la identificacin del dueo mientras ejecuta el archivo. Todo lo que acabamos de comentar con respecto al bit setuid es aplicable al bit setgid pero a nivel de grupo del archivo en lugar de propietario. Todo usuario que ejecute un programa setgidado tendr los privilegios del grupo al que pertenece el archivo. Para activar el bit de setgid sumaremos 2000 a la representacin octal del permiso del archivo y adems habremos de darle permiso de ejecucin a la terna de grupo; si lo hacemos, la s o S aparecer en lugar de la x en esta terna. Si el archivo es un directorio y no un archivo plano, el bit setgid afecta a los archivos y subdirectorios que se crean en l, estos tendrn como grupo propietario al mismo que el directorio setgidado, siempre que el proceso que los cree pertenezca a dicho grupo. Los bits de setuid y setgid dan a Linux una gran flexibilidad, pero constituyen tambin la mayor fuente de ataques realizados por usuarios internos al sistema, con el objetivo de aumentar su nivel de privilegio. Esto afecta a la seguridad del sistema. # chmod 2777 archivo1 # chmod 2764 archivo2 # ls -l archivo1 -rwxrwsrwx 1 root other 0 May 9 17:51 archivo1 # ls -l archivo2 -rwxrwSr-- 1 root other 0 May 9 17:51 archivo2 Por otra parte, el sticky bit o bit de permanencia se activa sumndole 1000 a la representacin octal de los permisos de un determinado archivo y otorgndole adems permiso de ejecucin; si hacemos esto, veremos que en lugar de una x en la terna correspondiente al resto de usuarios aparece una t (si no le hemos dado permiso de ejecucin al archivo, aparecer una T). # chmod 1777 archivo1 # chmod 1774 archivo2 # ls -l archivo1 -rwxrwxrwt 1 root # ls -l archivo2 -rwxrwxr-T 1 root
other 0 other 0
May
17:51 17:51
archivo1 archivo2
May 9
El bit sticky activado le indica al sistema operativo que se trata de un archivo muy utilizado, por lo que es conveniente que permanezca en memoria principal el mayor tiempo posible; esta opcin se utilizaba en sistemas antiguos que disponan de muy poca RAM, pero hoy en da prcticamente no se utiliza. Lo que si sigue vigente es el uso del sticky bit activado sobre un directorio: en este caso se indica al sistema operativo que, aunque los permisos normales digan que cualquier usuario pueda crear y eliminar archivos (por ejemplo, un 777 octal), slo el propietario del archivo y el administrador pueden borrar un archivo guardado en un directorio con estas caractersticas. Aunque cualquier usuario puede hacer que aparezca una t o una T en sus archivos o directorios, este bit slo tiene efecto cuando es activado por el administrador (root), se utiliza principalmente en directorios del sistema de archivos en los que interesa que todos puedan escribir pero que no todos puedan borrar los datos escritos, como /tmp/ o /var/tmp/
- 70 -
UTN - FRC
LINUX
Si en lugar de especificar el valor octal de los permisos queremos utilizar la forma simblica de chmod, utilizaremos +t para activar el bit de permanencia, g+s para activar el de setgid y u+s para hacer lo mismo con el de setuid; si queremos resetearlos, utilizamos un signo `-' en lugar de un `+' en la lnea de rdenes.
No todos estos atributos nos interesan para el tema de la seguridad. Uno de los atributos interesantes es a ; este atributo sobre un archivo indica que slo se puede abrir en modo escritura para aadir datos, pero nunca para eliminarlos. Tan importante es que slo el administrador tiene el privilegio suficiente para activarlo o desactivarlo. De esta manera cuando un intruso consigue entrar al sistema, no puede borrar sus huellas. Otro atributo del sistema de archivos ext2 es i' (archivo inmutable); un archivo con este atributo activado no se puede modificar de ninguna forma, (ni aadir datos ni borrar, ni eliminar el archivo, ni enlazarlo mediante ln). Tambin es privilegio del administrador activar o desactivar el atributo i de un archivo. Atributos interesantes, aunque menos importantes que los anteriores, son `s' y `S'. Si borramos un archivo con el atributo `s' activo, el sistema va a rellenar sus bloques con ceros en lugar de efectuar un simple unlink(), para as dificultar la tarea de un atacante que intente recuperarlo. Por su parte, el atributo `S' sobre un archivo hace que los cambios sobre el archivo se escriban inmediatamente en el disco en lugar de esperar el sync del sistema operativo. Veamos ahora como visualizar el estado de los diferentes atributos, utilizaremos lsattr y el nombre del archivo , cuya salida indicar con la letra correspondiente cada atributo del archivo o un signo - en el caso de que el atributo no est activado. Por ejemplo # lsattr /tmp/archivo s--S-a-- /tmp/archivo Dentro de Linux todo es un archivo, desde la memoria fsica del equipo hasta el ratn, pasando por mdems, teclado, impresoras o terminales. Esta filosofa de diseo es uno de los factores que ms xito y potencia le proporciona, pero tambin uno de los que ms peligros entraa, un simple error en un permiso puede permitir a un usuario modificar todo un disco duro o leer los datos tecleados desde una terminal. Por esto, una correcta utilizacin de los permisos, atributos y otros controles sobre los archivos es vital para la seguridad de un sistema. Ing. Allende Ing. Serna - 71 -
UTN - FRC
LINUX
Para modificar un atributo utilizamos la orden chattr, que recibe como parmetros el nombre del atributo junto a un signo `+' o `-', en funcin de si deseamos activar o desactivar el atributo, y tambin el nombre de archivo correspondiente. Por ejemplo: # lsattr /tmp/archivo -------- /tmp/archivo # chattr +a /tmp/archivo # chattr +Ss /tmp/archivo # lsattr /tmp/archivo s--S-a-- /tmp/archivo # chattr -sa /tmp/archivo # lsattr /tmp/archivo ---S---- /tmp/archivo
- 72 -
LINUX
1. El comando login verifica el username y la clave de acceso. En que archivo hace esta verificacin? 2. Un usuario puede cambiar su clave de acceso? Qu comando usara? 3. Qu tamao mnimo debe tener una clave? 4. Que usuario puede cambiar la clave de otros usuarios? Con que comando? 5. Cuales son los operaciones que puede realizar un usuario sobre un archivo si los permisos de este son: r-x-w---x 6. Que usuarios tienen autorizacin para modificar los permisos de un determinado archivo? 7. Qu operacin/es podemos realizar sobre un directorio si ste tiene el permiso de ejecucin asignado.?
Actividad 2
1. Comenzar la sesin de trabajo login: password: 2. Cambie su clave de acceso actual y coloquen su lugar el nombre de usuario, o una palabra de 4 digitos, que sucede? passwd _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ 3. Coloque una clave autorizada (por favor trate no olvidarla o de anotarla en lugar seguro) passwd 4. Luego abra una sesin en otra consola virtual en modo texto Alt+F2 Login: alumno Password: .............. (ingrese la nueva clave) 5. Visualice los permisos otorgados a los siguientes archivos y explquelos. /etc/passwd : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /etc/shadow : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /bin/login : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /bin/ls :____________________________________ /etc/hosts : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 6. Cree un archivo llamado copiaclave que contenga el archivo /etc/shadow y verifique los permisos que posee y compare. cat /etc/shadow > copiaclave ls l copiaclave 7. Cambie los permisos del archivo creado (copiaclave) usando el modo simblico, otorgndole permisos de lectura solamente al propietario, al grupo y a los dems usuarios. Verifique el cambio realizados. chmod ugo+r-wx copiaclave chmod a+r-wx copiaclave ls l copiaclave Ing. Allende Ing. Serna - 73 -
UTN - FRC
LINUX
Deber obtener los siguientes permisos : r - - r - - r - 8. Haga una copia del archivo copiaclave llamado copiaclave2 y usando el modo absoluto modifique los permisos del nuevo archivo otorgndole derechos de lectura y ejecucin al propietario, solamente de lectura al grupo y ningn derecho al resto. Muestre los permisos modificados. cp copiaclave copiaclave2 chmod u=rx, g=r, o= - copiaclave2 ls l copiaclave2 Deber obtener los siguientes permisos : r - x r - - - - 9. Otorgue los mismos derechos del punto anterior al archivo copiaclave, pero utilice el modo numrico (octal). chmod 0540 ls l copiaclave 10. Cree un subdirectorio llamado "prueba". Compruebe los derechos que se le otorgaron. mkdir prueba ls l prueba 11. Modifique los permisos del directorio prueba de manera que se vean como: r- - r - - - - -, utilice cualquier mtodo. Luego verifique los cambios con: ls -l 12. Cree un archivo llamado nuevo y otorgue permiso de ejecucin con sus permisos como propietario a los dems usuarios, adems de permisos de lectura para todos los usuarios (setuid). Verifique el cambio. chmod 4444 nuevo ls l nuevo Deber obtener los siguientes permisos : r S r - - r - 13. Otorgue al archivo nuevo derecho de lectura y modificacin para todos los usuarios y privilegios de ejecucin del grupo al que pertenece el archivo (segid). chmod 2666 nuevo ls -l nuevo Obtendr los permisos: r w - r w S r w 14. Modifique los atributos del archivo nuevo para que slo se pueda abrir en modo escritura para aadir datos. Que usuario deber realizar la operacin? Verifique los cambios realizados. Usuario: root # chattr +a nuevo # lsattr nuevo 15. Cambie los atributos del archivo nuevo para que no se pueda modificar de ninguna forma. Visualice los cambios. # chattr +i nuevo # lsattr Nuevo
- 74 -
UTN - FRC
LINUX
Actividad 3
1. Comenzar la sesin de trabajo login: password: 2. Luego abra una sesin en otra consola virtual en modo texto Alt+F2 Login: alumno Password: .............. (ingrese la nueva clave) 3. Visualice los permisos otorgados a los siguientes archivos y explquelos. /etc/crontab : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /bin/cat :___________________________________ /usr/bin/yes : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4. Copie el archivo /etc/crontab en copia y verifique los permisos de ambos. Explique. cp /etc/crontab copia ls l copia etc/crontab 5. Cambie los permisos del archivo copia usando el modo simblico, otorgndole todos los permisos al propietario, permiso de lectura y ejecucin al grupo y dems usuarios. Verifique el cambio realizados. chmod u+rwx go+rx copia ls l copia Deber obtener los siguientes permisos : rwx r - x r - x 6. Cree un archivo llamado comandos que contenga los archivos de /bin, y verifique el contenido del archivo y los permisos que posee. ls /bin > comandos cat comandos ls l comandos 7. Utilizando el modo absoluto modifique los permisos del archivo comandos otorgndole derechos de lectura y ejecucin al propietario, solamente de lectura al grupo y al resto de los usuarios. Muestre los permisos modificados. chmod u=rx, g=r, o=r ls l comandos Deber obtener los siguientes permisos : r - x r - - r - 8. Otorgue los mismos derechos del punto 5 al archivo comandos, pero utilice el modo numrico (octal). chmod 0755 ls l comandos Deber obtener los siguientes permisos : rwx r - x r x 9. Realice un enlace duro del archivo comandos como comandosln y verifique los permisos de ambos. ln comandos comandosln ls -li comandos comandosln 10. Modifique los permisos del archivo comandosln de manera que se vean como: rr-----, utilice cualquier mtodo. Luego verifique los cambio con: ls -l Que sucedi con los permisos de los archivos comandos y comandosln ? Porque?
- 75 -
UTN - FRC
LINUX
11. Realice un enlace simblico del archivo /etc/crontab como crono, verifique los permisos de ambos y otorgue a crono permiso de lectura, modificacin y ejecucin al propietario, lectura y ejecucin para el grupo y de lectura para los dems usuarios. Utilice modo numrico. Que sucedi con los permisos de /etc/crontab y crono? Porque? ln -s /etc/crontab crono ls /etc/crontab crono chmod 0744 crono ls /etc/crontab crono 12. Otorgue al archivo comandos derechos de lectura para todos los usuarios y privilegios de ejecucin del grupo al que pertenece el archivo (segid). chmod 2444 comandos ls -l comandos Obtendr los permisos: r - - r - S r - 13. Modifique los atributos del archivo crono para que slo se pueda abrir en modo escritura para aadir datos. Verifique los cambios realizados. # chattr +a crono # lsattr crono 14. Cambie los atributos del archivo crono para que no se pueda modificar de ninguna forma. Visualice los cambios. # chattr +i crono # lsattr crono
Actividad 4
1. Muestre en listado extendido, los procesos que se estn ejecutando en su sesin. 2. Diga cuales son los campos que identifican el n de proceso y el n del procesos padre. 3. Genere un listado de los procesos de los usuariosxy, mustrelo ordenado segn el dueo del proceso y PID. 4. Diga cuantos procesos estn trabajando en su terminal 5. Programe la realizacin de copias de seguridad de sus archivos a las 22:30 hs
- 76 -
UTN - FRC
LINUX
8 Administracin de Procesos
- 77 -
UTN - FRC
LINUX
UTN - FRC
LINUX
Ejecute en su terminal el comando ps y obtendr datos de los procesos que se estn ejecutando en su terminal de la siguiente forma: PID 98 1 2 2 12 79 TIME 0.4 0.4 0.0 0.0 0.1 0.6 TTY COMMAND ? /usr/sbin/atd ? init [2] ? (kflushd) ? (kswapd) ? update ? /sbin/syslogd
Sin argumentos, la orden ps muestra la informacin acerca de los procesos asociados a la sesin de un usuario. La primera columna muestra el identificador de proceso o PID. Cada proceso listado tiene un tiempo de ejecucin (TIME) asociado a l, que no es tiempo real sino tiempo de CPU que el proceso ha utilizado desde que comenz. En otra columna del listado, se presenta el terminal (TTY) del que lee y al que escribe cada proceso. Generalmente un proceso est asociado a un terminal y algunos procesos no estarn asociados a ningn terminal, en cuyo caso aparece en la columna TTY el carcter ?. La ltima columna COMMAND muestra la orden que lanz ese proceso. La opcin -f de la orden ps se obtiene informacin adicional sobre los procesos: UID: identificador del propietario del proceso PPID: identificador del proceso padre C: cantidad de recursos de procesador que el proceso ha utilizado recientemente. Este valor se utiliza para asignar el procesador al proceso con menor valor de C antes que a otro con mayor valor STIME: hora del da en que se inici el proceso. (Si no es el da actual, visualiza el da y el mes en que se inici). Otras opciones que pueden ejecutarse con la orden ps son : -e : muestra todos los procesos que estn ejecutndose en el sistema. -a : obtiene todos los procesos que estn asociados a un terminal. -r : slo procesos cuyo estado sea ejecutndose. -txx : los procesos asociados al terminal xx. -u : podremos ver los procesos activos de un usuario determinado. aux: se obtiene informacin adicional sobre todos los procesos que se estn ejecutando en el sistema y no solo los de una terminal. -l : muestra informacin mas completa de la tabla, obteniendo adems: F: Flags asociados con el proceso. Cada bit de la palabra indica una condicin de tipo de proceso. S : Estado del proceso (S-sleeping, R-running). PRI : Prioridad del proceso (dinmica). NI : Valor utilizado para calcular la prioridad. ADDR : Direccin de RAM o MD de la imagen del proceso. SZ : Longitud en bloques de la imagen del proceso. WCHAN: para un proceso que se encuentra durmiendo o esperando, es la direccin del proceso por el cual espera. Adems de los procesos asociados a cada usuario, existen tambin procesos de larga duracin que soportan las actividades del sistema y otros procesos que nacen y mueren por tareas propias del sistema. La opcin -e de ps visualizar todos los procesos activos en la mquina y su salida es muy importante para poder diagnosticar el sistema: ver si hay procesos colgados o con dificultades, ver el tiempo que lleva ejecutndose, qu recursos utiliza, la prioridad relativa y conocer el PID.
- 79 -
LINUX
Cuando un usuario introduce un comando, el shell, tras analizar la lnea de comando decide si se trata de un comando propio del shell o bien un comando externo que reside en disco. En el primer caso, el proceso se lleva a cabo mediante llamadas al sistema, que consisten en peticiones a los servicio que proporciona el ncleo, siendo la nica forma que tiene el proceso de acceder al hardware del sistema. Si se trata de la segunda posibilidad el shell emite una llamada a fork( ), que provoca que el kernel del S.O. cree un clon del proceso que realiz la llamada (proceso padre), y hace correr independiente al nuevo proceso creado (proceso hijo), este buscar la trayectoria donde localizar el comando invocado almacenando el entorno del proceso padre y preparando los archivos de entrada y salida estndar. Si el comando es localizado, el shell invocar la llamada exec( ) para que ejecute el nuevo programa De todos modos el shell ser para cada usuario el padre de los procesos que l ejecute. A partir del shell se crea la estructura jerrquica de los procesos que se ejecutan desde cada terminal. En otras palabras, los procesos que se ejecutan en cada terminal son hijos del shell asociado con dicha terminal. Si eliminamos al shell se eliminan todos los procesos hijos, salvo que algn proceso se independice del proceso padre. Todo proceso proviene de otro denominado proceso padre. Solamente existe un proceso que no tiene padre y se denomina proceso 0 que es el primero que se crea al inicializarse el SO. El subdirectorio /proc/ - Un sistema de archivos virtual En Linux, todo se guarda en archivos. La mayora de usuarios estn familiarizados con los dos primeros tipos de archivos, de texto y binarios. Sin embargo, el directorio /proc contiene archivos que no son parte de ningn sistema de archivos asociado a los dispositivos fsico de almacenamiento como discos duros, CD-ROM o diskette (excepto la RAM). Estos archivos forman parte de un sistema de archivos virtual habilitado o deshabilitado en el kernel de Linux cuando est compilado. Los archivos virtuales poseen cualidades nicas. En primer lugar, la mayora de ellos tienen un tamao de 0 bytes. Sin embargo, cuando se visualiza el archivo, ste puede contener una gran cantidad de informacin. Adems, la mayora de configuraciones del tiempo y las fechas reflejan el tiempo y fecha real, lo que es un indicativo de que estn siendo constantemente modificados. Por cada uno de los procesos que se estn ejecutando en el sistema, existe en /proc/ un subdirectorio cuyo nombre es el nro. del proceso (PID) que contiene la informacin sobre el proceso. Por ejemplo: si el sistema le asigna el PID 1175 al proceso que resulta de la ejecucin del comando find / -name listado, podemos ejecutar la orden ls l del directorio correspondiente a ese proceso de usuario, y visualizar los siguientes archivos: $ ls l /proc/1175 total 0 -r- - r - - rl r- - r - - r-r- - - - - -l rwx------dr-x -----prrr-- rw -----l rwx-------rrr--rrr--rrr--
1 1 1 1 2 1 1 1 1 1 1
usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1
usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1 usuario1
0 0 0 0 0 0 0 0 0 0 0
jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32 jun 5 19:32
cmdline cwd -> /usr/include/pgsql environ exe ->/usr/bin/find fd maps mem root ->/ stat statm status
Los archivos dentro del directorio /proc/ pueden ser visualizados usando los comandos cat, more, o less lo que proveera gran cantidad de informacin acerca del sistema y los procesos. Ing. Allende Ing. Serna - 80 -
UTN - FRC Por ejemplo: $ cat /proc/1175/status Name: find State: s (sleeping) PID: 1175 PPID: 1076 UID: 500 500 500 500 GID: 500 500 500 500 Groups: 500 VmSize: 1348 KB VmLok: 0 KB VmRSS: 568 KB VmData: 136 KB VmStk: 20 KB VmExe: 52 KB VmLib: 1024 KB SigPnd: 000000000000000 SigBlk: 000000000000000 SigIgn: 800000000000000 SigCgt: 000000000000000 CapInh: 0000000f f f f f e f f CapPrm: 000000000000000 CapEff: 000000000000000
LINUX
Si visualizamos el contenido del archivo status que se bloqueo por un motivo desconocido, nos mostrara informacin referida al proceso tal como: el usuario que lo lanzo, el proceso padre, el estado, el tamao en KB, etc. Un administrador de sistemas puede utilizar el subdirectorio /proc como mtodo sencillo de informacin de acceso sobre el estado del kernel, los atributos de las mquinas, los estados de los procesos individuales y mucho ms. Archivos virtuales tales como /proc/interrupts, /proc/meminfo, /proc/mounts, y /proc/partitions proveen una vista rpida actualizada del hardware del sistema. Otros, como /proc/filesystems y el directorio /proc/sys/ proveen informacin de configuracin y de las interfaces. En lineas generales los archivos que contienen informacin sobre un tema parecido se agrupan en directorios virtuales y en subdirectorios, tales como /proc/ide. Tenga en cuenta que algunos archivos en el directorio /proc/ estn configurados para que se puedan leer slo por el usuario root. En general, todos los archivos que se encuentran en el directorio /proc solamente se pueden leer. Sin embargo, algunos se pueden usar para ajustar la configuracin del kernel. Esto ocurre con los archivos del subdirectorio /proc/sys/. Para cambiar el valor de un archivo virtual use el comando echo y el smbolo > para redirigir el nuevo valor al archivo. Por ejemplo , para cambiar el nombre del host escriba: # echo www.ejemplo.com >/proc/sys/kernel/hostname
- 81 -
UTN - FRC
LINUX
Si se ejecuta el comando ls /dev se sabe que es posible que existan mas de 25 archivos para listar, algunos nombres desaparecern de la pantalla antes de que pueda leerlos. Haciendo una tubera a la orden more este programa producir una pausa despus de cada pgina de pantalla de salida y deber pulsar Intro o Space cuando desee ir a la pagina siguiente, de esa manera la salida de ls ser mostrada en forma paginada. Otros ejemplos - Si deseamos saber cuantos archivos contiene el directorio /bin, podramos contar las palabras que se muestran con la orden ls. La tubera sera: $ ls /bin | wc -w - Si queremos saber la cantidad usuarios conectados al sistema en este momento. $ who | wc l Cuenta las lineas que muestra el comando who. Si deseamos comprobar si el usuario juan ha iniciado su sesin o a qu hora y en cul terminal: $ who | grep juan juan tty02 Sep 15 16:34 El comando who genera un listado de los usuarios conectados al sistema, grep busca en ese listado la cadena de caracteres juan y muestra por pantalla las lneas en donde la encuentra.
UTN - FRC
LINUX
Al ejecutar un proceso en modo subordinado, el shell devuelve un nmero de tarea o proceso [1] y un identificador de proceso o PID (246) con el que nos puede referir al trabajo subordinado. Normalmente las entradas, salidas y salida de error estndar de procesos subordinados se redirigen para que la sesin del terminal no se vea interrumpida por su salida, de esta forma: $ orden > salida > error & Linux permite tantos trabajos subordinados como queramos, aunque el rendimiento se reducir. Al finalizarse un proceso subordinado no se muestra ninguna notificacin. Podemos chequear el estado del proceso mediante ps. Mediante la orden jobs es posible visualizar todos los procesos en segundo plano que se estn ejecutando. Si la usa obtendr una salida como la siguiente: $ jobs [1] + Runningfind / -name temp* > listatemp & [2] + Runningls -lR / > dirlist & Si creamos procesos subordinados, sern eliminados al terminar la sesin de trabajo, ya que estn asociados al shell de presentacin. Pero podemos hacer que los procesos subordinados sigan ejecutndose despus de despedirnos mediante la orden nohup. $ nohup orden & Este comando hace que la orden se ejecute en modo subordinado y contine hasta su fin. Si la orden produce salidas al terminal, se almacenarn en este caso en un archivo nohup.out a menos que se redirijan esas salidas, ya que al finalizar la sesin no existe terminal en donde visualizarlas.
UTN - FRC
LINUX
Detencin y relanzamiento - fg y bg
En caso de desearlo, podemos detener temporalmente un proceso con la orden Control + Z, de esa forma se retoma el control del shell para ejecutar una segunda tarea. Por ejemplo: Si tiene un comando find en primer plano y pulza Ctrol.Z , el trabajo se para temporalmente. Si utiliza la orden jobs, obtendr el nro. de tarea y estado del proceso. $ find / -name temp* > listatemp Ctrol.Z $jobs [1] + Stopped find / -name temp* > listatemp & Luego se puede retomar el control sobre la tarea suspendida mediante el comando $ fg [nro.de tarea] De esta manera se vuelve a ejecucin en primer plano el proceso detenido temporalmente. En el caso del ejemplo anterior sera: $ fg [1] si lo que se desea es colocar el proceso en segundo plano o background la orden sera: $ bg [nro.de tarea] Si solo hay un trabajo parado o en la lista de jobs no es necesario poner en numero de tarea.
Planificacin de procesos
La mayora de los sistemas Linux slo tienen una CPU que ejecuta los programas, slo un programa puede estar ejecutndose realmente en cada instante, siendo el ncleo del S.O. el encargado de la asignacin del mismo a cada programa que lo solicite En estos sistemas, un proceso se ejecuta durante un breve perodo de tiempo y luego cede el control a otro proceso. Como estos cambios de proceso se realizan generalmente muy rpidos, los usuarios tienen la sensacin de que cada uno es propietario de la mquina. Por eso a estos sistemas se les conocen como de tiempo compartido. Linux al ser un sistema de tiempo compartido (multiprogramacin) utiliza un algoritmo de planificacin de procesos o Scheduling de Dos Niveles que aumenta la cantidad de procesos pequeos en memoria y puede dar pronta respuesta a los procesos interactivos. El algoritmo de Nivel Superior desplaza los procesos entre memoria y disco para que todos los procesos tengan la oportunidad de ejecutarse El algoritmo de Nivel Inferior o (planificador de CPU) elige de entre los procesos de memoria y listos para ejecutar. Este planificador de CPU utiliza colas multinivel con prioridades, en donde a los procesos del usuario le asigna valores de prioridad positiva (menor prioridad) y a los procesos del kernell le asigna valores negativos (mayor prioridad) Existe un proceso del sistema (swapper) que gestiona qu programas deben residir en memoria RAM en cada momento y, si no cupieran todos a la vez, gestiona cules deben mantenerse en disco y cules en RAM, permitiendo un equilibrio dinmico entre el tamao de memoria y los programas en ejecucin. Este proceso garantiza que todos los programas estarn en RAM en algn momento y que algunos lo estn siempre (por ejemplo el propio swapper) para que se le pueda asignar la CPU. Ing. Allende Ing. Serna - 84 -
UTN - FRC
LINUX
Si un proceso en RAM necesita crecer, se busca un hueco suficiente y se copia, liberando el antiguo. Si no existe ese hueco se pasar a disco y se volver a traer cuando se obtenga espacio. Cuando se necesite crear espacio en RAM se llevar a disco un proceso que no se est ejecutando, teniendo siempre en cuenta el tiempo que lleve en memoria. Un proceso listo para ejecutarse que est en disco, se llevar a memoria teniendo en cuenta que el que lleve ms tiempo esperando ser el primero, compitiendo desde ese momento por el uso de la CPU con todos los que estn en la memoria listos para ejecutarse. Cuando varios usuarios comparten la mquina, la responsabilidad de asignar recursos de CPU la tiene el sistema operativo por lo que bajo circunstancias normales el usuario no tiene posibilidad de controlar el tiempo de CPU para un proceso. Para gestionar esa asignacin, Linux tiene herramientas para temporizacin y planificacin de tareas, pero el usuario (superusuario o administrador) tiene cierta capacidad de modificar la planificacin que el sistema Operativo hace, modificando la prioridad de los procesos o haciendo que los procesos que no precisan rapidez en su ejecucin se ejecuten en determinados intervalos de tiempo en los que el sistema est ms desocupado. Para esto ltimo, Linux nos ofrece varias rdenes: nice, renice, at, batch y la utilidad cron.
- nice y renice
Normalmente, a todos los procesos de tiempo compartido se les asigna la misma cuota de tiempo, por lo que se dice que tienen la misma prioridad, pero Linux dispone de herramientas para modificar la prioridad de un proceso. El incremento de la prioridad de un proceso, generalmente, hace que se ejecute ms rpidamente a costa de los otros procesos deban esperar. Al contrario, al rebajar la prioridad, un proceso demanda menos tiempo de CPU durante cada intervalo, tardando as ms en completar su ejecucin. El kernel es quien asigna las prioridades iniciales, asignndole a los procesos del sistema como por ejemplo manejo de disco, terminales, etc; prioridades mas altas para que sean atendidos antes que los procesos de usuarios normales, y a los procesos que realizan muchos clculos, les otorga prioridades bajas de manera que el uso de la CPU sea equilibrado. Cuando un proceso que est ejecutndose pasa a esperar algn recurso, de todos los procesos que estn en RAM listos para ejecutarse recibe el uso de la CPU el que tenga mayor preferencia, haciendo uso de las prioridades asignadas a cada uno que se calculan dinmicamente a partir de la prioridad base y los valores C (tiempo utilizado/tiempo asignado de CPU) y NI (nice). Slo el superusuario tiene privilegios para incrementar la prioridad a un proceso, pero cada usuario puede decrementar la prioridad de sus procesos mediante la orden nice. La sintaxis de la orden es: $ nice incremento orden El kernel puede asignar una prioridad de por ejemplo 65 para un proceso en particular, pero el rango del incremento a utilizar para las orden nice y renice es de 20 a 20, si usamos un valor negativo aumentamos la prioridad del proceso, por el contrario si usamos un valor positivo la prioridad disminuye. Si no indicamos incremento, la prioridad se rebaja en 10 unidades por defecto.: Por ejemplo: $ nice find / -name postcom en este caso la orden nice hace que el proceso al find se le incremente el valor absoluto de la prioridad en 10 (por defecto) por lo que el proceso tiene menor prioridad. $ nice 14 find / -name postcom Ing. Allende Ing. Serna - 85 -
UTN - FRC
LINUX
En este caso nice hace que el proceso find incremente en 14 el valor absoluto de su prioridad por lo que el proceso tiene menor prioridad. $ nice - - 8 find / -name postcom nice en este caso decrementa el valor de la prioridad del proceso find, lo que implica que el proceso tiene mayor prioridad. El comando nice se utiliza para asignarle una determinada prioridad a un proceso que est por comenzar su ejecucin. Cuando un proceso ya se encuentra en ejecucin su prioridad puede modificarse mediante el comando renice, que funciona en forma similar a nice y cuya sintaxis es la siguiente: $ renice -<prioridad><nmero del identificador (PID)> Por ejemplo: $ renice +10 31136 en este caso el proceso cuyo PID es 31136 disminuir su prioridad . $ renice - 15 31136
at
La orden at permite planificar trabajos para una nica ejecucin posterior. Utilice at cuando quiera ejecutar un comando o trabajo en una fecha y hora determinados, el trabajo se ejecutara siempre y cuando el sistema este en marcha. at leer de la entrada estndar la/las ordenes a ejecutar en esa hora fecha determinada, finalizando la carga con CTRL-D. $ at time >orden 1 >orden 2 >orden 3.... Ctrl.d Este comando ejecutar las ordenes a la la hora especificada del da actual. El comando devuelve el nmero de trabajo y la hora en la que se ejecutar, incluso si el usuario se ha despedido de la mquina o si la mquina ha sido vuelta a arrancar antes de la hora indicada. La salida de la orden, puesta en cola, se enviar al usuario como correo a menos que se redireccione la salida de una o mas ordenes en particular a un archivo especfico. Cuando se especifica tiempo se pueden utilizar varias opciones: HH:MM hora y minutos. se puede aadir el sufijo am o pm. midnight (24:00 o 12:00pm), noon (12:00 o 12:00am) y teatime (16:00) MMDDAA , MM/DD/AA , DD.MM.AA, se pueden utilizar para indoicar fechas como 022503 now : especifica la hora actual tomorrow : el siguiente da Si se usa el signo + se puede especificar desplazamientos en minutos, horas, das, semanas o meses (minutes, hours, days, weeks, months) Por ejemplo : noon + 2 days.Por ejemplo:
- 86 -
UTN - FRC Ejemplos: at 19 at 6:30am at now at midnight at noon + 15 minutes at 4:10pm + 1 months at 1:50pm Jul 16, 2003
LINUX
#a las 7:00 de la tarde #a las 6:30 de la maana #ahora #a medianoche #15 minutos despus del medioda #a las 4:10 dentro de 1 meses # a las 13:50 hs del 16 de julio del ao 2003
batch
Esta orden le dice al shell que ejecute la tarea ahora, pero en realidad los trabajos sern atendidos tan pronto como la carga del sistema sea suficientemente baja es decir cuando el sistema este menos ocupado. Por lo que no hay manera de saber cuando se ejecutar el trabajo. Esto es til cuando se desea ejecutar muchos trabajos largos de una vez. Con lo que se evita que todos los procesos intenten ejecutarse a la vez y acaparen el CPU. La sintaxis es la siguiente: $ batch opciones time Las opciones mas importante son: -f archivo: lee los comandos que se van a planificar desde el archivo que se especifica, en lugar de pedirlos al usuario. -m : una vez que a terminado un trabajo manda un mensaje al usuario que lo planifico e incluye en el cuerpo del mensaje cualquier salida que haya generado.
Cuando se especifican tiempo se pueden utilizar varias opciones: HH:MM hora y minutos. se puede aadir el sufijo am o pm. midnight (24:00 o 12:00pm), noon (12:00 o 12:00am) y teatime (16:00) MMDDAA , MM/DD/AA , DD.MM.AA, se pueden utilizar para indoicar fechas como 022503 now : especifica la hora actual tomorrow : el siguiente da si se usa el signo + se puede especificar desplazamientos en minutos, horas, das, semanas o meses (minutes, hours, days, weeks, months) Por ejemplo : noon + 2 days.
cron
La utilidad cron se ejecuta una nica vez al iniciar el sistema y se activa cada minuto y comprueba si hay trabajos programados para ese minuto. Si los hay los ejecuta y enva el resultado por correo electrnico al usuario que lo encargo. Una vez que empieza a ejecutarse cron, cada minuto chequea la cola de trabajos planificados con at, as como los archivos crontab para ver si debe ejecutar algn proceso, lanzndolo en el momento adecuado. Si no hay nada que hacer, pasa a estado durmiendo permaneciendo inactivo hasta el prximo chequeo en el siguiente minuto. A diferencia de las rdenes at y batch que sirven solo para planificar tareas una nica vez. Linux mantiene un conjunto de tablas cronolgicas que contienen un conjunto de tareas planificadas para que se ejecuten peridicamente. Existe una tabla o archivo por cada usuario que ha enviado un trabajo y el sistema ejecuta ese trabajo utilizando la cuenta del usuario.
- 87 -
UTN - FRC
LINUX
Programar trabajos es una tarea facil, cada usuario crea un archivo de texto con cualquier nombre, que contiene una linea por cada trabajo planificado (conocido como archivo crontab) y se almacena en el directorio /usr/spool/cron/crontabs con el identificador de usuario como nombre de archivo al ejecutar la orden: $ crontab archivodetareas Por ejemplo $ crontab tareas1 En ese archivo se especifica en cada lnea, el tiempo en que queremos ejecutar una orden (puede contener tantas lneas como queramos), especificando ese tiempo en trminos de: minutos (0-59) horas (0-23) das del mes (1-31) mes del ao (1-12) das de la semana (0-6:domingo sbado). El formato de las lneas de este archivo ser: # Comentarios minuto hora diadelmes mesdelao diadelasemana orden Por ejemplo $ crontab tareas1 # backup de archivos 30 20 30 * * tar cvf ~/respaldo.tar ~/archivos/*.dat | gzip 9 ~/respaldo.tar Debemos especificar todos los campos, pudiendo colocar un * en cualquiera de ellos para indicar que se ejecute la orden en cualquier momento vlido para ese campo. Tambin podemos especificar una secuencia de valores en un campo cualquiera usando comas para separar cada valor. La orden puede contener pipes, redireccionamientos y cualquier aspecto vlido en una shell. Tanto at , batch como crontab proporcionan mecanismos de seguridad que pueden impedir a los usuarios planificar trabajos sin autorizacin. Las listas de usuarios autorizados y no autorizados se encuentran en el directorio /etc/cron.d en los archivos at.allow, at.deny, cron.allow, cron.deny respectivamente, con una lnea por usuario. Slo el superusuario puede modificar estos archivos.
uptime
Todo administrador de sistemas debe contar con toda la informacin disponible del funcionamiento del sistema para poder realizar cualquier planificacin de tareas, uptime es un comando que proporciona brevemente un informe sobre el desempeo del sistema. Este comando visualiza la hora actual, la cantidad de tiempo que el sistema lleva funcionando, es decir, el tiempo transcurrido desde la ltima vez que se inici el sistema, la cantidad de usuarios que estn actualmente en el sistema. Adems visualiza el nmero medio de trabajos esperando a ejecutarse desde el ltimo, los cinco y los diez ltimos minutos. Si ese nmero se acerca a 0 significar que el sistema est bastante desocupado, mientras que un valor cercano a 1 indica que el sistema est bastante cargado. Por ejemplo: $ uptime 8:00pm up 142 days , 6:25, 2 users, load average: 0.51, 0.52, 0.52
- 88 -
UTN - FRC
LINUX
Actividad 1
1. Para qu se utiliza el PID? 2. Pueden existir dos PID iguales en un instante dado? Por qu? 3. Puede un usuario modificar la prioridad de un proceso perteneciente a otro usuario? Porqu? En qu casos podra realizarlo? 4. Que interpretacin le da Ud. al carcter ? de la columna TTY en la salida del comando ps? 5. Investigue que informacin podemos visualizar sobre el proceso 0. 6. Cul es el size del los archivos del subdirectorio /proc? Porque?
Actividad 2
1. Inicie su sesin como usuario comn. login 2. Liste sus procesos activos. ps 3. Realice un informe de TODOS los procesos activos en el sistema. Analice su salida. ps aux | more 4. Si la salida del comando ps es : PID TTY STAT TIME COMMAND 8832 p1 R 0:00 ps 30674 p1 S 0:00 /bin/login h 31136 p1 T 0:00 analog var/log/httpd/access_log 5. Elimine el proceso access_log. Verifique la eliminacin. kill -9 31136 6. Ejecute el comando uptime y comente su resultado. 7. Realizar la bsqueda del archivo at.allow en todo el sistema de archivos find / -name at.allow 8. Detener el comando anterior y enviarlo a 2 plano. Ctrl.Z # Me devuelve el numero de trabajo por ejemplo [3] Stopped find / -name at.allow bg 3 9. Volver a poner en primer plano el proceso de bsqueda anterior. Fg 3 10. Usted es el Administrador del Sistema, y a las 2000 horas comenzarn tareas de mantenimiento del Sistema, se pide programar 20 minutos antes, un listado de los procesos activos en ese momento y un listado de los usuarios conectados al Sistema: at 19:400 (enter) >ps a (enter) >who (enter) Ctrl-D 11. Mostrar por pantalla las tareas planificadas en el punto anterior. at l (enter) Ing. Allende Ing. Serna - 89 -
UTN - FRC 12. Verificar la salida de punto 10. mail Nro de mail
LINUX
13. Buscar el texto cron en todos los archivos de su directorio de login cuya extensin sean txt y crear un archivo salidacron con el resultado de la bsqueda. Realizar esta tarea en segundo plano y cuando el sistema este menos ocupado o la carga del mismo as lo permita (batch). batch grep cron ~/*.txt > salidacron& Ctrl-D 14. Verificar la realizacin del comando anterior. more salidacron
Actividad 3
1. Analizar los numeros de PID del /proc. 2. Haga un listado recursivo y paginado de su directorio de login. ls R | more 3. Buscar los archivos qe comiencen con lin en todo el file system y redireccionar la salida al archivo listalin. Ejecutar en segundo plano. find / -name lin* & 4. Verificar su el proceso se esta ejecutando, con que estado y numero de PID. jobs 5. Diga si el proceso 1456 se esta ejecutando en: a) Su sesion de trabajo ps | grep 1456 b) En todo el sistema ps aux | grep 1456 6. Lance en background un proceso que clasifique por numero de i-nodo sus archivos. ls i ~/ | sort n & 7. Usted es un encargado de rea de una organizacin, ha ingresado al sistema como usuario10 y a las 20:00 horas termina su jornada de trabajo Entonces decide programar 30 minutos despus: Realizar una copia de los archivos que hay en su directorio de trabajo a un directorio de respaldo /home/nombre_usuario/respaldo Conocer los usuarios que estn conectados al Sistema en ese momento. at 20:30 cp * .* /home/usuario10/respaldo who Ctrl-D 8. Mostrar por pantalla las tareas planificadas en el punto anterior. at l
- 90 -
UTN - FRC
LINUX
9. Buscar en el File System el archivo at.deny. Realizar esta tarea en segundo plano y cuando la carga del sistema as lo permita (modo batch). batch find / -name at.deny & Ctrl-D 10. Verificar la realizacin del comando anterior. Qu comando utiliz. mail 11. A causa de un factor externo, la tarea de copia del ejercicio 1-a se debe completar en forma urgente. Usted es supervisor. Asgnele la mxima prioridad de ejecucin y tenga en cuenta que el proceso ya se esta ejecutando. Que pasos realizar? ps l renice -20 [pid obtenido] ps
Actividad 4
1. Genere un archivo con informacin sobre los usuarios conectados al sistema pero no se incluya usted en ese informe. 2. Programe la siguiente tarea : generar un archivo con un informe sobre el desempeo del sistema (tiempo en el que el sistema lleva funcionando, usuarios conectados, etc) cada 60 minutos. 3. Realice un informe de todos los procesos activos del usuario alumno90 y analice su salida. 4. Indique cual es la funcion del coamando renice. 5. Al lanzar la ejecucin de dos procesos simultneos, de tal forma que la salida de uno sea la entrada del otro, utilizamos un smbolo de1: a. Filtro b. Proceso subterrneo c. Redirector d. Tubera e. Ninguno.
- 91 -
UTN - FRC
LINUX
9
Administracin de Memoria
- 92 -
UTN - FRC
LINUX
texto
texto
constantes pila
datos
contexto
Fig. 1. Espacio de direcciones de un proceso. Linux utiliza para la gestin, memoria virtual paginada, para lo cual utiliza las siguientes estructuras de datos: Tabla de pginas: describe las pginas virtuales del proceso. Descriptor de bloques de disco: describe el bloque de disco que contiene una pgina determinada. Tabla de marcos de pginas: describe cada marco de pgina de la memoria real. Tabla de intercambios: registra las pginas que estn en cada uno de los dispositivos de intercambio, pues podemos definir ms de uno. Es decir, que cada segmento descripto anteriormente (fig. 1) est paginado, esto permite que inicialmente slo se cargue a la memoria real una parte del programa y de los datos. Luego, a medida que se vayan produciendo los fallos de pgina, el sistema cargar nuevos fragmentos. Para realizar el intercambio de pginas, utiliza la tabla de marcos de pgina. E administrador l genera una lista de marcos de memoria que estn disponibles para cargar la pgina solicitada. Sin embargo, existe un nmero mnimo de pginas libres que el sistema deber mantener, por lo tanto, cuando la cantidad de marcos libres disminuye a ese punto, el administrador de memoria libera algunos marcos. Podemos decir entonces que el sistema operativo Linux utiliza para la administracin de la memoria: intercambio y paginacin por demanda.
- 93 -
UTN - FRC
LINUX
Asignacin de memoria
Existen rutinas de biblioteca de C, como lo son malloc, calloc y realloc que mediante las llamadas al sistema brk y sbrk insertas en las rutinas, realizan la asignacin de memoria a los procesos. malloc( ): asigna size bytes y devuelve un puntero a la memoria asignada. La memoria no es puesta a cero. calloc( ): asigna memoria para una matriz de n elementos de size bytes cada uno y devuelve un puntero a la memoria asignada. La memoria es puesta a cero. realloc( ) : cambia el tamao del bloque de memoria apuntado a size bytes. free( ): libera el espacio de memoria apuntado.
Las versiones de librera para linux, posteriores a GNU Lib.C (2.x) incluyen una implementacin de malloc que se puede ajustar mediante variables de entorno.
Area de intercambio
El rea de intercambio o swap, es la zona de memoria virtual en el disco duro, que permite albergar temporalmente pginas de memoria RAM. La memoria virtual disponible, es la suma de la memoria real (RAM) ms la memoria definida como swap. El comando mkswap prepara un dispositivo como rea de intercambio. El tamao del sistema de archivos se puede especificar en bloques. mkswap [-c] dispositivo [bloques] El argumento dispositivos es generalmente: /dev/hda [1-8] /dev/hdb [1-8]
- 94 -
UTN - FRC
LINUX
dnde el parmetro [bloques] es el tamao deseado del rea de intercambio, dada en bloques. El tamao total de memoria es un mltiplo entero del tamao de la pgina de la mquina. Tambin podemos definir a un fichero como un rea de swap. Para ello, es necesario crear el fichero antes de ejecutar mkswap: # # # # dd if=/dev/zero of=fichero-swap bs=1024 count=8198 mkswap fichero-swap 8192 sync swapon fichero-swap
con las rdenes precedentes hemos creado un rea de swap tipo fichero, como habr observado utilizamos el promt del superusuario ( # ). El comando dd copia un fichero de la entrada estandar a la salida estandar, con un tamao de bloque seleccionado por el usuario. En ste caso, lee desde el fichero /dev/zero y lo enva al fichero-swap, lee y escribe count bloques de bs bytes por vez. Con el comando swapon le indicamos al sistema que sobre el dispositivo fichero-swap, van a tener lugar las actividades de paginado e intercambio. Las llamadas a swapon se hacen normalmente en el fichero de inicio del sistema en modo multiusuario, normalmente /etc/rc, haciendo ah que todos los dispositivos de intercambio estn disponibles, de modo que las actividades de paginado e intercambio se intercalen entre varios dispositivos o ficheros. El archivo /proc/swaps nos muestra las reas de swap disponibles en el sistema. Puede verlo con el comando cat: $ cat /proc/swaps
Monitoreando la memoria
- free y vmstat
En el directorio /proc, el sistema guarda gran cantidad de informacin referente al hardware del sistema y su configuracin, como tambin, informacin sobre los procesos. El sistema de archivos bajo /proc, es un sistema virtual. Algunos de los archivos en l, pueden ser manipulados por los usuarios directamente, y otros por utilidades que presentan al usuario un informe legible. Existen algunas utilidades como free y vmstat que se valen de stos archivos para mostrar al usuario un informe sobre la administracin de la memoria.
free
Es un comando que muestra la cantidad total de memoria fsica y de intercambio presente en el sistema, as como la memoria compartida y los buffer utilizados por el kernel. La sintaxis es : free [-b -k -m] [-s demora] [-t] por omisin muestra la cantidad de memoria en Kbytes, pero lo puede hacer en bytes(-b) o en Mbytes(-m). Por ejemplo podra lanzar el proceso para que muestre un informe sobre la utilizacin de la memoria cada 30 segundos: $ free s30 t
- 95 -
UTN - FRC Total Mem 63092 +/- buffers/cache Swap 136512 Total 199604 used 61472 23604 3248 64720 free 1620 39488 133264 134884
LINUX
es decir que cada 30 segundos el sistema emitir un informe donde las cifras estn dadas en Kbytes, mostrando al final, una lnea de totales (-t). Puede cortar la salida del comando con las teclas ctrl..c . Los datos que muestra el comando free los obtiene del archivo /proc/meminfo.
vmstat
crea informes con estadsticas sobre la memoria virtual. Da informacin sobre procesos, memoria, paginacin, E/S, trampas y actividades de la CPU. El primer informe solicitado, da medias desde el ltimo arranque. Los adicionales, dan informacin en un perodo de muestreo de longitud=[intervalo]. La sintaxis es la siguiente: vmstat [-n -v] [intervalo [nmero]] ste comando no requiere de permisos especiales. Los informes se utilizan para ayudar a eliminar cuellos de botellas. Ejemplo: $ vmstat 60 5 el comando anterior generar 5 informes, uno cada minuto. En dicha salida podemos identificar los siguientes campos: Procs r b w 0 0 0 Procesos r: n de procesos esperando su tiempo de ejecucin. b: n de procesos en espera ininterrumpible. w: n de procesos en espacio de intercambio, pero sin embargo ejecutables. Memory swpd: cantidad de memoria virtual empleada (KB). free: cantidad de memoria inactiva (KB). buff: cantidad de memoria empleada como buffers (KB). Swap si: cantidad de memoria trada del espacio de intercambio desde disco (KB/s) so: cantidad de memoria intercambiada al disco (KB/s). IO bi: bloques enviados a un dispositivo de bloques (bloques/s). bo: bloques recibidos desde un dispositivo de bloques (bloques/s). System in: n de interrupciones por segundo, incluyendo al reloj. cs: n de cambios de contexto por segundo. CPU Ing. Allende Ing. Serna - 96 swpd 3224 memory free buff 1600 4364 cache 33492 swap si so 0 4 io bi bo 11 3 system in cs 213 52 cpu us sy id 2 1 97
UTN - FRC
LINUX
Estos son porcentajes de tiempo total de CPU. us: tiempo de usuario. sy: tiempo de sistema. id: tiempo de inactividad. Para generar el informe, utiliza los fichero /proc/meminfo, /proc/*/stat. El vmstat de Linux, no se cuenta as mismo como un proceso en ejecucin.
dd
convierte y copia un fichero. Copia un fichero de la entrada estandar a la salida estandar, por omisin, con un tamao de bloque seleccionable por el usuario, a la par que, opcionalmente realiza sobre l ciertas conversiones. Lee de la entrada un bloque cada vez, empleando el tamao de bloque especificado para la entrada. (el valor predeterminado es 512 bytes). El bloque de salida tiene la misma longitud que cuando se ley a menos que se haya especificado la conversin sync, en cuyo caso los datos se rellenan con Nulos (o espacios). if=fichero bs=n bytes count=bloques lee desde fichero en vez de la entrada estandar. lee y escribe n bytes de una vez. copia bloques de tamao en bytes determinados por bs, del fichero de entrada.
dmesg
Muestra y manipula el almacenamiento intermedio de anillo del kernel. Es donde reciden los mensajes de inicio. dmesg [-c] limpia el almacenamiento intermedio despus de mostrar su contenido. Muestra un informe sobre la memoria usada y libre. free [-b -k -m] [-s demora] [-t]
-c
free
-b muestra la cantidad de memoria en bytes. -k muestra la cantidad de memoria en Kbytes (lo da por omisin) -m muestra la cantidad de memoria en Mbytes. -s demora muestra informes continuos separados por el espacio de tiempo en segundos indicado por la demora. -t muestra una lnea extra que contiene los totales.
mkswap
prepara un dispositivo como rea de intercambio. El tamao del archivosse puede especificar en bloques. mkswap [-c] dispositivo [bloques]
sistema de
-c
comprueba si hay bloques defectuosos en el dispositivo antes de crear el sistema de archivos de intercambio.
Nota: es posible crear archivos de intercambio en lugar de particiones. Obtenga ms informacin del manual (man).
- 97 -
UTN - FRC
LINUX
guarda el contenido del cach de disco dentro del disco fsico. De esta forma se fuerza la escritura en disco de la informacin que ha cambiado. des/habilita dispositivos o ficheros para el paginado y el trasiego crea informes con estadsticas sobre la memoria virtual. vmstat [-n -v] [intervalo [nmero]] nmero Intervalo indica la cantidad de veces que se debe repetir el informe. Si no se especifica, el informe se repetir continuamente hasta que se interrumpa con ctrl. c. indica la frecuencia con que se debe repetir el informe. Si no se especifica, ser slo uno.
- 98 -
UTN - FRC
LINUX
Actividad 1
1- Qu llamadas al sistema permiten asignar memoria a los procesos? 2- Cul es la funcin de la rutina de biblioteca malloc?
3- En qu directorio del file system de Linux, encontramos los archivos y directorios virtuales, que guardan informacin sobre el estado actual del sistema? 4- El comando free obtiene los datos que muestra, del archivo /proc/meminfo. Es posible ver el contenido de ste archivo con los comandos cat, more o less. $ more /proc/meminfo Este es uno de los archivos ms utilizados en el directorio /proc/, ya que proporciona mucha informacin importante sobre el uso actual de RAM en el sistema. Segn sea la distribucin el archivo tendr algunos de los siguientes campos: Mem Muestra el estado actual de RAM fsica en el sistema, incluyendo el uso en bytes de memoria total usada, libre, compartida, buffer y cach.
Swap Muestra la cantidad total de espacio swap libre y usado en bytes. MemTotal Cantidad total de RAM fsica en kilo bytes. MemFree Cantidad de RAM fsica, en kilobytes, sin utilizar por el sistema. MemShared No se utiliza con 2.4 y kernels superiores pero se deja por motivos de
uso activo.
Inact_dirty Cantidad total de buffer y pginas de la cach, en kilobytes, que podran
quedar libres.
Inact_clean Cantidad total de buffer o pginas de la cach, en kilobytes, que estn
libres y disponibles.
Inact_target Cantidad neta de asignaciones por segundo, en kilobytes, con un
promedio de un minuto.
HighTotal y HighFree Cantidad total de memoria libre, que no est mapeada en el espacio del kernel. El valor HighTotal puede variar dependiendo del tipo de kernel
utilizado.
LowTotal y LowFree Cantidad total de memoria libre implantada directamente en el espacio del kernel. El valor LowTotal depende del tipo de kernel utilizado.
- 99 -
UTN - FRC
LINUX
SwapTotal Cantidad total de swap disponible, en kilobytes. SwapFree Cantidad total de swap libre, en kilobytes.
Actividad 2
1- Utilice el comando free para dar un informe sobre la memoria usada y libre, en Mbytes y cada 75 segundos. $ free -m s75 2- Vaya al entorno grfico, abra una terminal virtual, con el cono correspondiente, y ejecute el comando: ps -aux se ejecutarn procesos lo suficientemente grandes como para reflejar cambios en los datos del archivo meminfo. 3- Regrese a modo texto y analice los nuevos informes de free. Observe que los valores en Free y en Shared han cambiado. Porque? 4- Genere con el comando utilizado en el punto 1, un archivo de informes y llmelo monitor. $ free m s75 > monitor luego de unos mitutos podemos ver su contenido y obtener un informe completo de cmo han ido cambiando los distintos espacios de memoria.
Actividad 3
1El comando vmstat obtiene los datos que muestra, del archivo /proc/stat, el cual aporta diferentes estadsticas sobre el sistema desde que fue reiniciado por ltima vez. . Es posible ver el contenido de ste archivo con los comandos cat, more o less. $ more /proc/stat Algunas de las estadsticas ms populares incluyen:
cpu Mide el nmero de jiffies (1/100 de un segundo) que el sistema ha estado en
modo usuario, modo usuario con prioridad baja, modo del sistema y tarea inactiva respectivamente. El total de todas las CPUs se da al inicio y cada CPU individual se lista debajo con sus propias estadsticas.
page Nmero de pginas que el sistema ha cargado o suprimido del disco. swap Nmero de pginas swap que el sistema ha introducido o sacado. intr Nmero de interrupciones que ha experimentado el sistema. btime Tiempo de arranque, medido por el nmero de segundos desde el 1 de enero de
1970, conocido con el nombre de epoch. 2- Muestre por pantalla, la cantidad de memoria que ha sido intercambiada desde el disco. $ vmstat 3- Del informe anterior, qu columna deberemos leer? Explique.
- 100 -
UTN - FRC
LINUX
4- De un informe de los procesos que se estn ejecutando en el sistema. vmstat figura como proceso? Porqu?
Actividad 4
1- Muestre por pantalla un informe sobre las particiones de swap, memoria swap utilizada y prioridades. Analice la informacin. $ more /proc/swaps Este archivo mide el espacio swap y su uso. Para un sistema con tan slo una particin de espacio swap, la salida de datos de /proc/swap ser: Filename /dev/hda6 Type partition Size 136512 Used 20024 Priority -1
Mientras que alguna de esta informacin se puede encontrar en otros archivos en el directorio /proc/, /proc/swap proporciona una instantnea rpida de cada nombre de archivo swap, tipo de espacio swap, el tamao total, y la cantidad de espacio en uso (en kilobytes). La columna de prioridad es til cuando mltiples archivos swap estn en uso. Cuanto ms baja es la prioridad, ms probable es que se use el archivo swap. 2- Genere un archivo de control, que contenga un informe completo sobre los procesos (listo, inactivos, etc), memoria utilizada y paginada. Realice la tarea cada 30 seg. y por el lapso de 5 minutos. Realice sta tarea en background. $ vmstat 30 10 > control&
3- Luego de ste lapso analice la informacin del archivo control. $ more control 4- Genere un archivo para swap en su directorio con el nombre intercambio, que intercambie bloques de 1kB. # # # # dd if=/dev/zero of=intercambio bs=1024 count=8198 mkswap intercambio 8192 sync swapon intercambio
5- Repita el punto 1. $ more /proc/swap ver que hay una nueva unidad tipo file para intercambio.
- 101 -
UTN - FRC
LINUX
Actividad 5
1. Linux Utiliza para la administracin de la memoria: a) Intercambio b) Prepaginacin c) Paginacin por demanda d) Particiones fijas e) Ninguna de las anteriores es correcta. 2. El comando free nos muestra datos que los obtiene del archivo: a) /proc/swap b) /proc/meminfo c) /dev/hda3 d) /proc/1276/mem e) Ninguna de las anteriores es correcta. 3. El rea de swap de un sistema LINUX se utiliza como soporte en disco para: a) Respaldo del file system b) Memoria virtual c) Tabla de i-nodos d) Boot del sistema e) Ninguna de las anteriores es correcta. 4. Cuales son las rutinas de C que realizan (mediante llamadas al sistema) la asignacin de memoria? 5. Que comando o utilidad usara si deseara conocer informacin estadstica del uso de la memoria, paginacin, etc.? 6. Genere un archivo llamado control en el que se genere un informe sobre la memoria usada y libre cada 90 segundos. Luego analice la informacin obtenida. 7. La memoria virtual en Linux, es: a) Respaldo del sistema de archivos. b) El rea de disco donde se almacena el superblock. c) Necesariamente una particin de disco. d) El rea de intercambio (swap) en el disco. e) E. Ninguna de las anteriores es correcta.
- 102 -
UTN - FRC
LINUX
10
Entrada / Salida
- 103 -
UTN - FRC
LINUX
En toda computadora existen dispositivos de entrada-salida tales como discos, impresoras, terminales, etc, y los programas de aplicacin deben poder conectarse a ellos. Linux maneja a estos dispositivos como archivos especiales que se integran al File System al igual que cualquier otro archivo y poseen su ruta de acceso en el subdirectorio /dev. Por lo que las aplicaciones pueden abrir, leer y escribir los archivos especiales de la misma forma que un archivo comn o regular. Esto se convierte en una ventaja para la seguridad y proteccin de los dispositivos de E/S, restringiendo el acceso a los distintos usuarios si es necesario. Los archivos especiales se clasifican en dos tipos de bloques y de caracteres. Los archivos especiales de bloque se utilizan para los discos u otros dispositivos de almacenamiento de datos, como disquetes, CD-Roms, Zip, etc, y consta de una serie de bloques numerados. Donde cada bloque se puede direccionar y acceder individualmente. Los archivos especiales de carcter se utilizan para las terminales, impresoras, ratones, plotters y dems dispositivos de E/S que aceptan o producen un flujo de caracteres Estos archivos no tienen un acceso aleatorio. En Linux estamos totalmente abstrados del concepto de unidades, lo cual permite que un sistema de archivos forme parte integral de la estructura de otro, de esta manera, para tener acceso a dispositivos externos de almacenamiento, por ejemplo disquetes, CD-Rom u otros discos rgidos, primero debemos incorporar este dispositivo a nuestro sistema de archivos.
- 104 -
UTN - FRC
LINUX
A continuacin se describe cada columna del archivo /etc/fstab: Dispositivo es el archivo de dispositivo correspondiente a la unidad o particin. Para sistemas de archivos virtuales debe poner none. En el caso de sistemas de archivos remotos (NFS) indican la ubicacin del mismo. Destino es el directorio de montaje de la particin. Para particiones de intercambio este campo debe contener none. Tipo especifica el tipo de sistema de archivos (Ver tabla siguiente) Opciones contiene, separadas por comas, las opciones de montaje de la particin. Algunas de las opciones ms comunes se muestran en la tabla 3.7. Frecuencia es un parmetro que indica cada cuntos das se debe hacer una copia de seguridad de los datos contenidos en la particion. Es utilizado por el comando dump Test indica el orden en que ser verificada la particin por el comando fsck. Un cero indicar que la particin no deber ser verificada automticamente.
El archivo fstab contiene una entrada especial para el sistema de archivos /proc. Este sistema de archivos /proc se utiliza para almacenar informacin acerca de los procesos del sistema, memoria disponible, y otros datos del mismo tipo. Si /proc no est montado, no funcionan comandos como ps u otro administrador de procesos. Cuando se monte un sistema de archivos mencionado en fstab, basta con dar slo el dispositivo o el punto de montaje, por ejemplo: $ mount /dev/hda3 Normalmente, slo el sper usuario (root) puede montar sistemas de archivos. Sin embargo, cuando fstab contiene la opcin user, cualquiera puede montar el sistema de archivos correspondiente.
- 105 -
UTN - FRC
ext2 Msdos
Sistema de archivos estndar de Linux. Disquetes y particiones MS-DOS. Disquetes y particiones MS-Windows 9x. Soporta nombres de archivos Vfat largos. iso9660 CD-ROM. Nfs Montaje de particiones a travs de la red. Primer sistema de archivos utilizado en Linux. Se sigue usando en los Minix disquetes de arranque Ext Primer sucesor de minix. Actualmente en desuso. umsdos Sistema de archivos que permite instalar Linux sobre una particin MS-DOS. PSF Soporte para el sistema de archivos de OS/2. Proc Sistema de archivos virtual de Linux.
-F (Empleado en conjuncin con -a Bifurca una nueva ejecucin de mount para cada dispositivo. Esto efectuar los montajes en diferentes dispositivos o servidores de NFS en paralelo. Esto tiene la ventaja de que es ms rpido; tambin las esperas en NFS van en paralelo. -f Causa que todo se realice excepto la llamada al sistema real; en otras palabras, esto no monta el sistema de archivos, es un engao''. Esta opcin es til junto con la otra opcin -v para determinar lo que la orden mount est intentando hacer. -n Monta sin escribir en /etc/mtab. Esto es necesario por ejemplo cuando /etc est en un sistema de archivos de lectura exclusiva. -t tipo sfv El argumento que sigue a -t se emplea para indicar el tipo del sistema de archivos. -o Las opciones se especifican mediante la bandera o seguida por una ristra de opciones separadas por comas. Las siguientes opciones se aplican a cualquier sistema de archivos que se est montando: Defaults Emplea las opciones predeterminadas: rw, suid, dev, exec, auto, nouser, async Dev Interpretar dispositivos especiales de caracteres o bloques en el sistema de archivos. Noauto Slo puede montarse explcitamente (esto es, la opcin -a no har que el sistema de archivos se monte). Ro Montar el sistema de archivos de lectura exclusiva. Rw Montar el sistema de archivos de lectura y escritura. Suid Permitir el efecto de los bits SUID y SGID. Sync Toda la E/S al sistema de archivos debera hacerse sincrnicamente. User Permitir a un usuario ordinario montar el sistema de archivos. Esta opcin implica las opciones noexec, nosuid y nodev (a menos que se indiquen explcitamente exec, suid y dev). Para mayor informacin, vase el comando man mount.
- 106 -
UTN - FRC
LINUX
Si ejecuta el comando mount sin parmetros obtendr una lista de los sistemas de archivos actualmente montados, similar al siguiente ejemplo: /dev/hda5 /dev/hda2 none on none on on / type ext2 (r w) on /boot type ext2 (r w) /proc (rw) /dev/pts type devpts (r w, gid=5 , mode=620)
La salida del comando mount contendr el nombre del dispositivo montado, el punto de montaje, el tipo de sistema de archivo y la opcin como fue montado. En el ejemplo, la primera lnea muestra que la particin 5 del disco duro A , fue montado en / (raiz), que el dispositivo es de tipo Ext2 y que fue montado para lectura y escritura. Por lo que el llamado "sistema de archivos raz" es montado en el directorio /. Por medio de NFS, es posible montar un sistema de archivos aunque ste resida en una maquina remota.
Desmontar umount
Tambin es necesario decir a Linux que se va a dejar de utilizar un sistema de archivos; esta operacin se llama desmontar, y se realiza con el comando umount. Cuya funcin es eliminar los dispositivos instalados. La sintaxis del comando es la siguiente: # umount
[ opciones ] dispositivo / dir
Esta orden despega de la jerarqua o rbol de archivos el o los sistemas de archivos mencionados. Un sistema de archivos se puede especificar bien dando el directorio donde ha sido montado, o bien dando el dispositivo o archivo especial donde reside Un sistema de archivo no pude ser desmontando si esta ocupado, un ejemplo claro es cuando hay en l archivos abiertos o cuando un proceso tiene su directorio de trabajo all. En casos de emergencia extrema, puede utilizar la opcin f para forzar que sea desmontando. Sin embargo si lo hace el programa que est utilizando esos archivos no terminar debidamente y puede perder parte de la informacin, por lo que se advierte que no lo haga nunca ya que es muy peligroso. La opciones mas comnmente usadas para umount son -n desmonta sin actualizar el /etc/mtab -r en caso de que el desmontaje falle, intenta remontar en modo solo lectura. -a se desmontan todos los sistemas archivos descriptos en /etc/mtab. Excepto el sistema de archivos /proc, por lo que no se hace necesario especificar el sistema de archivos que se desea desmontar. -t tipofsv Indica que las acciones solo deben realizarse sobre los sistemas de fichero del tipo especificado Los programas mount y umount, mantienen una lista de los sistemas de archivos montados actualmente en el archivo /etc/mtab. Si no se dan argumentos a mount, se muestra la lista contenida en este archivo. Los archivos /etc/mtab y /proc/mounts tiene contenidos muy similares.
- 107 -
UTN - FRC
LINUX
Comprobacin de dispositivos
El sistema de archivos proc proporciona mecanismos de comprobacin de los dispositivos reconocidos por el kernel de Linux. Estos dispositivos se encuentran documentados en el archivo /proc/devices. Este archivo contiene una lista de los dispositivos de carcter y de bloque para los que existen controladores disponibles en el kernel y sus nmeros correspondientes. Los archivos /proc/interrups, /proc/ioports, /proc/pci, proc/ide, proc/scsi contienen informacin que vara desde las IRQ utilizadas por los dispositivos, los puertos de I/O y los dispositivo PCI, IDE y SCSI del sistema.
Dispositivos Extrables
Linux soporta un mximo de 4 unidades de disquetes (que pueden ser de diferentes capacidades) en un mximo de 2 tarjetas controladoras, lo que hace un total de 8 unidades numeradas del 0 al 7 El soporte de dispositivos de CD-ROM en el kernel va ms all del hardware. Incluye el sistema de archivos ISO9660, que es el sistema de archivos estndar para los CD, esto le permite Ing. Allende Ing. Serna - 108 -
UTN - FRC
LINUX
a Linux leer los CD creados para DOS. Tambin soporta el sistema de archivos Joliet, utilizado en las versiones de Microsoft Windows NT. El soporte del CD-ROM tambin incluye las unidades de CD de grabacin CD-R y de reescritura y CD-RW Otros dispositivos extrables que son actualmente muy populares son los dispositivos de almacenamiento que se conecta a la computadora mediante puerto paralelo. Entre ellos las unidades de Zip y Jaz, que utilizan controladores que les hacen parecer dispositivos SCSI a Linux.
Si desea ver el espacio que esta utilizando el sistema actual solamente, utilice el comando: $ df . Si con esa informacin verifica que el sistema de archivos est trabajando con espacio insuficiente, puede utilizar el comando du para saber que archivos ocupan mas espacio. Este comando tiene una serie de indicadores (banderas), tambin llamados opciones, que se pueden utilizar para obtener informacin diversa. Se puede conocer la cuota de un usuario es decir la cantidad de espacio del disco que un usuario puede o esta autorizado a utilizar. Para conocer la cuota asignada a un usuario, utilice el comando: $ quota u usuarioxy El sistema responder algo como lo que sigue: User quotas for user usuarioxy (uid 503): Filesystem blocks quota limit grace /u 20 5 60 files 20 quota 60 limit 65 grace
Impresin en Linux
En sistemas en los que muchos usuarios comparten una o mas impresoras, puede tener que esperar a que un trabajo se imprima. Cada impresora tiene una cola asociada, en la que se almacenan los trabajos hasta que este disponible. Una tarea bsica de todo administrador de sistema es la de imprimir archivos, examinar la cola de impresin, eliminar trabajos de la cola, formatear archivos antes de imprimirlos, y configurar el entorno de impresin. Ing. Allende Ing. Serna - 109 -
UTN - FRC
LINUX
Linux posee cinco programas fundamentales para facilitar la tarea del administrador y permitir el manejo de la impresin, estos archivos son: lpr, lpq, lpc y lprm, que tienen por objetivo enviar, examinar y cancelar los trabajos de impresin, y se encuentran en el subdirectosio /usr/bin/ y el quinto programa llamado lpd que es el demonio de impresin y se encuentra en el sudirectorio /usr/sbin/ . Los programas, lpr, lprm, lpc y lpq trabajan por defecto con una impresora llamada "lp", pero si se define la variable de entorno PRINTER con el nombre de una impresora, pasar a ocupar el valor por defecto ocupado por lp. De la siguiente forma: $ PRINTER="nombre_de_impresora"; export PRINTER
lpr
Como usuario root, la forma ms simple de imprimir en Linux es enviar el archivo a ser impreso directamente al dispositivo de impresin. Por ejemplo: # cat tesis.txt > /dev/lp0 Pero para seguridad, slo el usuario root y los usuarios de su mismo grupo, como el demonio de impresin, son capaces de escribir directamente a la impresora. Por esto, los usuarios comunes tienen que usar lpr para imprimir un archivo sin esperar a que el trabajo que se est imprimiendo termine. El comando lpr es responsable de preocuparse por el trabajo inicial para imprimir un archivo, pasando entonces el control a otro programa, lpd, el demonio de las impresoras en lnea. Este demonio le dice entonces a la impresora cmo imprimir el archivo. La sintaxis del comando lpr es la siguiente: $ lpr [ opciones ] [ nombre_archivo ... ] El comando lpr copia el archivo a imprimir al directorio de spool, donde el archivo permanece hasta que el demonio lpd lo imprime. Cuando lpd se entera que hay un archivo para imprimir, crear un proceso fork'. Este nuevo proceso (copia de lpd), imprime el archivo mientras la copia original queda esperando otras peticiones, lo que permite mltiples trabajos de impresin en una cola.
Opciones de lpr
- Pprinter especifica la impresora a usar a travs de printer -h suprime la impresin de la pgina banner, - # num especifica el nmero de copias a imprimir -s crea un enlace simblico en lugar de copiar el archivo completo al directorio de spooling (til para archivos grandes) Por ejemplo: $ lpr -#2 s h -Pimpr informe2.txt Este comando define que se use la impresora llamada impr y crea un enlace simblico al archivo informe2.txt en el directorio de spool, donde debera ser procesado por lpd e imprimirlo sin pagina banner y por dos copias. Si no se especifica un nombre de archivo, lpr asume que la entrada ser efectuada por la entrada estndar, es posible que el usuario redirija la salida de un programa al dispositivo de impresin. Por ejemplo: $ ls l /bin | lpr Pprinter Ing. Allende Ing. Serna - 110 -
UTN - FRC
LINUX
lprm
En caso de que se desee borrar un trabajo de la cola de impresin se deber utilizar el comando lprm, de la siguiente forma: $ lprm [ Pprinter] [ - ] [ job # ] user - Pprinter especifica la cola asociada a esa impresora borra todos lo trabajos de un usuario en particular user especifica el nombre de l usuario dueo del trabajo a eliminar job # hace referencia al nmero de trabajo a eliminar de la cola.
lpq
Este comando nos permite saber qu trabajos estn actualmente en una cola de impresin particular. Para ver qu hay en la cola de la impresora por defecto (definida por /etc/printcap), solo tipee: $ lpq Waiting for lp to becom ready (offline?) Rank owner Job 1 root 0 2 root 1 3 luis 1 4 ana 1 5 maria 1 Files informe2.txt listado resumen nota resultados Total Size 72048 bytes 218248 bytes 13230 bytes 8230 bytes 5390 bytes
La salida mostrada nos indica que los trabajos 0 y 1 asociados a los archivos informe2.txt y listado respectivamente, estan en estado de espera. Al mismo tiempo lpq nos informa que la impresora no se encuentra activada para realizar los distintos trabajos de impresin.
lpc
Si lo desea puede activar la impresora introduciendo la orden lpc de la siguiente forma: # lpc start all lp : printing enabled daemon started Como ya vimos, con lpc podemos comprobar el estado de las impresoras, y controlar algunos aspectos de su uso. Particularmente, le permite activar y desactivar la cola de impresin, permite activar y desactivar impresoras, y reorganizar el orden de los trabajos en cola. Con las rdenes anteriores activamos todas las impresoras. Tambin podemos desactivarla de la siguiente manera: # lpc down lp A su vez es posible mover el orden de los trabajos que se encuentran en la cola. Por ejemplo # lpc topq lp 5 Este comando mueve el trabajo que esta en orden 5, que corresponde al usuario maria, y lo manda al principio de la cola.
- 111 -
UTN - FRC
LINUX
Si no especificamos argumentos, lpc entrar en modo dilogo. Con "?" obtenemos ayuda. Advierta que la mayora de las funciones de lpc estn reservadas para el sper usuario. Nota : Recuerde que el comando man (manual) explica con detalle todas estas rdenes y debera consultar se desea ampliar informacin.
denominacin lgica para un dispositivo fsico, y tambien definir qu puerto vamos a usar, qu directorio de spool, qu proceso deben soportar los datos, qu clase de errores debemos notificar, qu volumen de datos se permiten enviar como mximo, o limitar el acceso de ciertos dispositivos, entre otros. Su propietario debe ser root y debe tener los sig. permisos, -rw-r--r-- .
- 112 -
UTN - FRC
LINUX
Actividad 1
1. Inicie su sesin. 2. Visualice el archivo /proc/devices y analice su informacin. cat /proc/devices 3. Visualicer el archivo /proc/pci y analice su informacin. cat /proc/pci 4. Muestre por pantalla el archivo /proc/ide y analice su informacin. more -l /proc/ide 5. Visualice el archivo /proc/scsi y analice su informacin. more /proc/scsi 6. Muestre el archivo /etc/mtab y analice su informacin, que comando utiliza esta informacin? cat /etc/mtab mount 7. Visualice el archivo /etc/fstab y analice su informacin. more /etc/fstab 8. Montar el sistema de archivos de un disquete de Linux, cambiar al directorio correspondiente y mostrar su contenido. mount t ext2 /devfd0H1440 /mnt/floppy cd /mnt/floppy ls -l 9. Desmontar el sistema de archivos del disquete con umount /mnt/floppy 10. Se realiz la operacin, porqu? No, el sistema de archivos no puede ser desmontado si estamos trabajando en l. 11. Realizar la tarea necesaria para poder desmontarlo. cd umount /mnt/floppy 12. Montar el sistema de archivos de un disquete de Windows9x. Mostrar su contenido y luego desmontarlo. mount t Vfat /devfd0H1440 /mnt/floppy ls l /mnt/floppy umount /mnt/floppy 13. Enve a la cola de impresin los archivos /etc/passwd y /dev/mtab lpr h /etc/passwd lpr /etc/mtab 14. Muestre la cola de impresin y analice la informacin lpq 15. Elimine de la cola de impresin los trabajo enviado por Ud. lprm -user alumnoxy
- 113 -
UTN - FRC
LINUX
Actividad 2
1. Inicie su sesin y visualice el archivo reconocidos por el kernel de Linux que contiene informacin sobre los dispositivos
2. El comando mount utliza informacin del archivo: a. /etc/mtab b. /dev/proc c. /etc/fstab d. /etc/passwd 3. Montar el sistema de archivos de un CD de Linux, y mostrar su contenido. 4. En que casos no es posible desmontar un sistema de archivos de un disquete? a. cuando el sistema tiene una sola unidad de disquete b. cuando el sistema del disquete esta siendo usado c. cuando el usuario no tiene permiso de escritura sobre los archivos del disquete. 5. Que comando usara para mandar a cola impresin un archivo de texto? 6. Que diferencia tiene el comando lprm y lpq? 7. Explique que es el punto de montaje. 8. Cuando se realiza el montaje de un dispositivo es necesario especificar el formato del sistema de archivos de que se trata? 9. Cmo hara en Linux para conocer el contenido de un diskette D.O.S.?
- 114 -
UTN - FRC
LINUX
11
Administracin de Usuarios y Grupos
- 115 -
UTN - FRC
LINUX
Usuarios y grupos
En todo sistema es importante que cada persona que lo utilice tenga su propia cuenta de acceso. Independientemente de que su sistema tenga muchos usuarios o no, es importante comprender los aspectos de la gestin de usuarios bajo Linux, incluso si se es el nico usuario, se debe tener, presumiblemente, una cuenta distinta de root para hacer la mayor parte del trabajo. Cada persona que utilice el sistema debe tener su propia cuenta. Raramente es una buena idea, el que varias personas compartan la misma cuenta. No slo es un problema de seguridad, sino que las cuentas se utilizan para identificar unvocamente a los usuarios del sistema. Se necesita ser capaz de saber quin est haciendo qu. Los usuarios pueden ser gente real, es decir, cuentas ligadas a un usuario fsico en particular o cuentas que existen para ser usadas por aplicaciones especficas. Los grupos son siempre expresiones lgicas de organizacin, reuniendo usuarios para un propsito comn. Los usuarios dentro de un mismo grupo pueden leer, escribir o ejecutar archivos que pertenecen al grupo. Cada usuario y grupo tiene un nmero de identificacin nico llamado userid (UID) y un groupid (GID) respectivamente. Cuando se crea un archivo se asigna a un usuario y a un grupo. De la misma manera se asignan los permisos de lectura, escritura y ejecucin para el propietario del archivo, para el grupo y para cualquier otro usuario en un host. El usuario y el grupo de un archivo particular, as como los permisos en ese archivo, pueden ser cambiados por root , o generalmente, por el creador del archivo. Una de las tareas ms importantes de cualquier administrador del sistema, es la de administrar adecuadamente usuarios y grupos, as como asignar y revocar permisos. El archivo /etc/passwd contiene la informacin acerca de los usuarios. Cada lnea de este archivo contiene informacin acerca de un nico usuario; el formato de cada lnea es: Nombre de usuario : clave encriptada : UID : GID : nombre completo : dir.inicio : intrprete Por ejemplo: ana:Xv8Q981g71oKK:102:100:Ana Lopez:/home/ana:/bin/bash El primer campo , "ana", es el nombre de usuario, el identificador nico dado a cada usuario del sistema El siguiente campo, "Xv8Q981g71oKK", es la clave encriptada, que se almacena en /etc/shadow. El tercer campo "102". El user ID, o UID, es un nmero nico dado a cada usuario del sistema. El sistema normalmente mantiene la informacin de los permisos por UID, no por nombre de usuario El cuarto campo, "100", es el GID. Este usuario pertenece al grupo numerado 100. La informacin de grupos, como la informacin de usuarios, se almacena en el archivo /etc/group. El quinto campo es el nombre completo del usuario. "Ana Lopez". El sexto campo es el directorio inicial del usuario(directorio de login) es el directorio en el que se coloca inicialmente al usuario en el momento de conexin. Cada usuario debe tener su propio directorio inicial, normalmente situado bajo el directorio /home. En este caso (/home/ana) El ltimo campo el intrprete de conexin: es el intrprete de comandos que es arrancado para el usuario en tiempo de conexin. En el ejemplo (/bin/bash)
- 116 -
UTN - FRC
LINUX
Aunque no es difcil el aadir usuarios a mano cuando se est ejecutando un sistema con muchos usuarios, es fcil el olvidarse de algo. Para ello existen herramientas interactivas que van preguntando por la informacin necesaria y actualizando todos los archivos del sistema automticamente cada vez que se desee aadir usuarios. Las herramientas o comandos que se pueden utilizar para aadir, modificar y eliminar cuentas de usuarios son: adduser, moduser y deluser (puede encontrarlo tambin como useradd, usermod y userdel dependiendo del software que est instalado)
adduser
Permite crear usuarios especificando los atributos de ste, como ser el grupo al que pertenece, el directorio de conexin, etc. El formato del comando es el siguiente: # adduser [-u uid] [-g grupo primario] [-G grupo, ....] [-d directorio de login] [-c comentario] [-s shell] [-e fecha de expiracin] nombre usuario Tenga en cuenta que luego de crear un usuario con el comando adduser, es necesario definir la clave de acceso para ese usuario, utilizando el comando passwd. Por ejemplo: # adduser -u 510 g grupo primario G alumnos d /home/alumnos/usuarioxxx -s /bin/bash -e 12/31/03 usuarioxxx # passwd usuarioxxx
usermod
Cambia los atributos del usuario una vez creado. Su sintaxis es la siguiente: # usermod [-u uid] [-g grupo primario] [-G grupo, ....] [-d directorio de login] [-c comentario] [-s shell] [-e fecha de expiracin] [-p password] [-l nombre nuevo ] nombre usuario Por ejemplo: # usermod d /home/facultad/usuarioxxx -s /bin/sh usuarioxxx En este caso hemos modificado el directorio de conexin y el shell del anteriormente. usuario creado
userdel
Elimina al usuario. Este comando tiene el formato: # userdel nombre usuario Por ejemplo: # userdel usuarioxxx Si se desea "deshabilitar" temporalmente un usuario para que no se conecte al sistema (sin borrar la cuenta del usuario), se puede prefijar con un asterisco ("*") el campo de la clave en /etc/passwd. Por ejemplo, cambiando la lnea de /etc/passwd correspondiente a ana a: ana:*Xv8Q981g71oKK:102:100:Ana Lopez:/home/ana:/bin/bash Ing. Allende Ing. Serna - 117 -
UTN - FRC
LINUX
evitar que ana se conecte. Desde el modo texto se puede utilizar la aplicacin Linuxconf, pero la forma ms fcil de manejar usuarios y grupos es a travs de la aplicacin grfica del entorno KDE, Administrador de usuarios.
Administracin de Grupos
Ya vimos que cada usuario pertenece a uno o ms grupos y tambin sabemos cada archivo est asociado a un grupo que posee un conjunto de permisos que define de qu forma pueden acceder al archivo los usuarios del grupo. Hay varios grupos definidos en el sistema, como pueden ser bin, mail, y sys. Los usuarios no deben pertenecer a ninguno de estos grupos; pues se utilizan para determinar permisos de los archivos del sistema. En su lugar, los usuarios deben pertenecer a un grupo individual, como ser el grupo usuarios. Si se quiere ser detallista, se pueden mantener varios grupos de usuarios como por ejemplo estudiantes, docentes y facultad. El archivo /etc/group contiene informacin acerca de los grupos. El formato de cada lnea es: nombre de grupo : clave : GID : otros miembros Si visualizamos la informacin que contiene este archivo tendremos algo como lo siguiente: $ cat /etc/group root:*:0: estudiantes:*:100:ana, luis, mara invitados:*:200: otros:*:250: claudia El primer grupo, root, es un grupo especial del sistema reservado para la cuenta root. El siguiente grupo, estudiantes, es para usuarios normales. Normalmente tiene un GID de 100. Los usuarios ana, luis y mara son miembros de ste grupo. Recurdese que en /etc/passwd cada usuario tiene un GID por defecto. Sin embargo, los usuarios pueden pertenecer a mas de un grupo, aadiendo sus nombres de usuario a otros grupos en /etc/group. El tercer grupo, invitados, es para usuarios invitados, y otros es para "otros" usuarios. El usuario claudia es miembro de ste grupo. Se pueden usar los comandos addgroup o groupadd para aadir grupos a su sistema. Normalmente es ms sencillo aadir lneas a /etc/group uno mismo, puesto que no se necesitan ms configuraciones para aadir un grupo. Para borrar un grupo, slo hay que borrar su entrada de /etc/group.
groupadd
Permite crear un nuevogrupo. # groupadd [-g gid] nombre de grupo Por ejemplo: # groupadd - g 520 alumnos
groupmod
Permite modificar atributos de un grupo ya existente. # groupmod [-g gid] [-n nombre nuevo] nombre de grupo Por ejemplo: Ing. Allende Ing. Serna - 118 -
UTN - FRC
LINUX
groupdel
Elimina un grupo. #groupdel nombre de grupo Por ejemplo: # groupdel alumnosxx
chown
Se utiliza para cambiar el propietario de un archivo (o directorio), solo el dueo del archivo puede otorgar el archivo a otro usuario. Pero recuerdo que root que es el copropietario (invisible) de todos los archivos en el sistema, por lo que l puede ejecutar chown para cambiar el propietario de cualquier archivo. Este comando tiene la siguiente sintaxis: # chown nuevo_dueo archivo1 [archivo2 archivo3...]
chgrp
Este comando se utiliza para cambiar el grupo de un archivo. Tiene que ser propietario del archivo para ejecutar chgrp (adems de root que es copropietario virtual de todos los archivos). La sintaxis es la siguiente: $ chgrp nuevo_grupo archivo1 [archivo2 archivo3...] Hay que tener en cuenta que en el caso de un directorio se cambia solo el dueo del directorio y no del contenido de este. Para realizar el cambio de grupo de todo el directorio con su contenido la sintaxis del comando es: $ chgrp -R nuevo_grupo directorio
chsh
Permite cambiar el shell del usuario activo. $ chsh ruta_absoluta_del_nuevo_shell Por ejemplo: $ chsh /bin/ash
newgrp
Permite elegir entre los grupos del usuario, el nuevo grupo primario de ste. $ newgrp [nombre del grupo] Por ejemplo: $ newgroup tecnico
- 119 -
UTN - FRC
LINUX
groups
Muestra por pantalla los grupos a los que pertenece el usuario. $groups usuarioxx Se obtiene Nombre de usuario : grupos usuarioxx : alumnos tecnico
who
Este comando nos permite comprobar quienes estn haciendo uso del sistema. La ejecucin de este comando nos devuelve el nombre de usuario de cada uno de los usuarios que ha iniciado una sesin en el sistema, junto con el terminal , la fecha y hora de inicio y la direccin IP desde la cual estn conectados. Por ejemplo: $ who Ana Luis
tty01 tty02
4:23 3:50
finger
La ejecucin de esta orden sin argumentos nos muestra qu usuarios estn dentro del sistema, visualizando una lnea para cada usuario, con su identificador de entrada , nombre completo, el terminal que est utilizando, hora de ltima actividad, la fecha y hora de entrada en el sistema. $ finger Login Name Tty Idle Login Time Ana Ana Murillo tty01 4:23 Jun 19 8:38 Luis Luis Salerno tty02 3:50 Jun 19 9:10 Si deseamos mas informacin sobre un usuario en particular la orden finger deber llevar el argumento nombre de usuario: Por ejemplo: $finger usaurioxx Login: usuarioxx Name: Juan Perez Directory: /home/usuarioxx Shell: /bin/ksh On since Mon Jun 15 , 08:35 on tty01 (message off) On since Mon Jun 15 , 09:45 on tty12 (message off) Idle 0:06 Project: (proyecto) Plan: (planes futuros del proyecto)
- 120 -
UTN - FRC
LINUX
Actividad 1
1. Inicie una sesin como superusuario o administrador del sistema Login: root Password: ****** 2. Muestre el archivo /etc/passwd y analice su informacin. cat /etc/passwd 3. Muestre el archivo /etc/shadow y analice su informacin. cat /etc/shadow 4. Cree el grupo Alumnos y los usuarios alumnoA, alumnoB y AlumnoC que pertenezcan al grupo creado. Verifique en el archivo que corresponda que los nuevos usuarios y grupos existan. addgroup Alumnos adduser -G Alumnos alumnoA adduser -G Alumnos alumnoB adduser -G Alumnos alumnoC cat /etc/passwd cat /etc/group 5. Modifica el shell que utilizar el usuario alumnoB. usermod -s /bin/ash alumnoB 6. Si quisiera cambiar el shell del usuario que est activo en este momento que comando usara? chsh /bin/ash 7. Cambiar el grupo al que pertenece el subdirectorio copia y todos los archivos que contiene. Cambiando al grupo Alumnos. chgr -R Alumno ./copia 8. Muestre por pantalla los grupos a los que pertenece el usuarioA. groups usuarioA 9. Borrar el usuario alumnoB y alumnoC userdel alumnoB userdel alumnoC 10. Abra una sesin de trabajo como un usuario comn. Login: usuarioxx Password: ***** 11. Quien es el propietario del archivo /etc/passwd? Y el grupo? Cual es la lista de permisos? _ _ ________________________ ls l /etc/passwd 12. Crea en tu directorio de login un subdirectorio llamado "copia" y copia dentro de este el archivo /etc/passwd. Quien es ahora el propietario del archivo copiado? Y los permisos son iguales?_ ______ mkdir copia cp /etc/passwd ./copia ls l ./copia/passwd 13. Cambie el propietario del archivo passwd (que como ya vio, Ud. es el dueo y esta en el subdirectorio copia) para que pertenezca al usuario alumnoC. Verificar el cambio. Ing. Allende Ing. Serna - 121 -
LINUX
14. Vuelva a cambiar el propietario del archivo anterior para dejarlo como antes, es decir que propietario sea Ud. chown usuarioxxx ./copia/passwd Como ver no es posible ejecutar este comando ya que Ud. ya no es el propietario del archivo y no tiene permisos sobre l. 15. Ejecute el comando finger seguido de su nombre de usuario. Analice la salida de dicho comando.
Actividad 2
1. Inicie su sesin como supervisor o administrador. Login: root Password: ******* 2. Muestre el archivo /etc/group y analice su informacin. cat /etc/group 3. Quien es el propietario del archivo /dev/hda1? Y a que grupo pertenece? ____________________________________ ls l 4. Muestre los permisos que posee el archivo y explique. /ls l 5. Copie el archivo anterior (/dev/hda1) en su directorio de login. Quien es el propietario ahora. Los permisos son los mimos? Porque? cp /dev/hda1 ls l hda1 6. Cree el grupo Docentes y los usuarios docente1, docente2 y docente3 que pertenezcan al grupo creado. Verifique en el archivo que corresponda que los nuevos usuarios y grupos existan. addgroup Docentes adduser -G Docentes docente1 adduser -G Docentes docente2 adduser -G Docentes docente3 cat /etc/passwd cat /etc/group 7. Abrir en otra terminal una sesin del docente1 y crear el archivo datos con sus datos personales. Login: decente1 Password: ******* cat > datos nombre, apellido, domicilio, etc Ctrl. D 8. Cambiar el propietario del archivo /home/docente1/datos. Que el dueo sea el docente2. Verificar el cambio. Ing. Allende Ing. Serna - 122 -
UTN - FRC
9. Como supervisor modifique el shell que utilizar el usuario alumnoB. usermod s /bin/ash alumnoB 10. Muestre por pantalla los grupos a los que pertenece el docente2. groups usuarioA 11. Borrar el usuario docente1 y docente2 userdel docente1 userdel docente2 12. Ejecute el comando who seguido de su nombre de usuario: Cmo se visualiza la salida de dicho comando?
Actividad 3
1. Si usted necesita cambiarle los permisos de acceso a un archivo. Que comando debe utilizar? 2. Cree un archivo llamado recursos que contenga las 14 primeras lneas del archivo /etc/password y modifique los permisos del archivo creado de modo tal que el usuario pueda leerlo y modificarlo, el grupo pueda agregar lneas y que los otros no tengan permisos. Utilice el modo relativo. 3. Indique cual es el archivo que se modifica luego de crear un usuario y explique que informacin contiene cada lnea de ese archivo. 4. El archivo semana tiene los permisos r w x r - - - - x modifquelos para que el dueo solo pueda leer y ejecutar, el grupo pueda ejecutar solamente y los dems solo leerlo. Utilice los modos absoluto y numrico. 5. Qu comando usara para indicar que el archivo cronograma va a tener durante su ejecucin los mismos privilegios que quien lo cre? 6. Indique el nombre del superusuario de un sistema Linux y explique que lo diferencia de los dems. 7. Describa coneptualmente el contenido del archivo /etc/shadow 8. Los permisos r w r x - - x, que indican acerca de un archivo programa? 9. Dados los permisos anteriores sobre el archivo programa, modifiquelos para que se visualicen de la siguiente manera: r w r w - - - x. Utilice el modo simblico. 10. La ejecucin del comando chmod 460 alumno cambia los permisos del archivo a: a. a) r - - r w - r w x b) r - - r w - - - b. c) r w r w x - - d) - - x w x r w x 11. Para que se utilizan los comandos chgrp y chown.
- 123 -
UTN - FRC
LINUX
12
Comunicacin de usuarios
- 124 -
UTN - FRC
LINUX
Linux es un sistema operativo multiusuario, y obviamente comparte esta caracterstica con todos los sistemas Unix modernos. Permite aprovechar al mximo esas capacidades y una de ellas es que se puede utilizar a Linux como servidor de aplicaciones; desde sus terminales, los usuarios pueden conectarse a travs de una red con el servidor y ejecutar aplicaciones en l, se puede adems compartir recursos como datos, perifricos y dispositivos de almacenamiento. Pero una caracterstica a resaltar es que Unix fue creado en principio como un Sistema Operativo que facilitara la comunicacin entre ordenadores y con otros Sistemas Operativos. De hecho una de las principales motivaciones de los autores de Unix, fue poder usar ordenadores pequeos para crear programas en distintos lenguajes de alto nivel, compilarlos, etc., y una vez depurados enviarlos a travs de una conexin a otro ordenador para ejecutarlos. Linux, entonces, como sistema Unix, facilita la comunicacin de persona a persona por medio de mensajes o correo electrnico. Tema que abordaremos seguidamente. En todo sistema multiusuario que funcione como red se hace necesario que los usuarios se comuniquen entre si, para ello existe comandos que facilitan esas funciones. Dentro de estos estudiaremos wall, rwall,, write, mesg y mail.
wall
Manda un mensaje a todos los usuarios del sistema pero solo lo recibirn los usuarios que tengan su sistema configurado para poder recibir estos mensajes. Tenga en cuneta que este comando solo puede ser utilizado por el superusuario o root. El mensaje tambin emitir un pitido para atraer su atencin. La sintaxis es la siguiente: $ wall (enter) texto del mensaje Ctrol.D Si por ejemplo el administrador del sistema enva un mensaje a todos los usuarios para q ue cierren su sesin. El comando sera el siguiente: $ wall (enter) Por favor cerrar su sesin para mantenimiento del sistema. Ctrol.D Cada uno de los usuarios recibir en pantalla lo siguiente: Broadcast message from root (tty1) Fri May 20 15:45 2003 . Por favor cerrar su sesin para mantenimiento del sistema. Luego de recibido el mensaje en cada una de las terminales, el cursor espera el ingreso de un comando. Ingresando Enter vuelvo al shell.
rwall
Es similar a wall, salvo que enva el mensaje a todos los usuarios de la red local y no solo a los que estn en su sistema. La sintaxis es igual que wall. Los sistemas deben ejecutar rwalld (el daemon de rwall) para recoger y emitir mensajes rwall Ing. Allende Ing. Serna - 125 -
UTN - FRC
LINUX
write
Este comando enva mensajes d texto a otros usuarios. El formato de la orden es el e siguiente: $ write [ Usuario / Terminal ] Donde se podr utilizar uno de las opciones o ambas (usuario / terminal). Luego de ingresar este comando por teclado, se podr escribir el texto del mensaje que se desea enviar . A media que el texto se va justificando, es decir presionando Enter, el mensaje es enviado a la terminal destino del mismo. Para finalizar deber teclear Ctrol+D para volver al shell. En la terminal del usuario destino aparece un mensaje indicando que existe otro usuario que se est comunicando con l, y podr responder tambin ejecutando la orden write. Siempre que el usuario tenga habilitada la recepcin de mensajes estos aparecern sin que el usuario receptor pueda evitarlos. La recepcin de estos mensajes puede ser deshabilitada por el usuario utilizando el comando mesg.
mesg
Este comando habilita o deshabilita la comunicacin entre usuarios por medio de write. Si el usuario tiene el mesg en no o esta realizando una tarea especfica no podremos comunicarnos con write. La sintaxis es la siguiente: $ mesg [n/y] mesg y : permite que los usuarios del sistema te escriban mensajes. mesg n : prohibe que los usuarios del sistema te escriban mensajes. mesg : sin opcin muestra el estado actual del usuario (escribir o no ). En realidad este comando modifica los permisos al archivo especifico del terminal donde est trabajando el usuario, por ejemplo, el archivo /dev/pts/10 tendr deshabilitado el permiso de escritura para el grupo y los otros, si es que el usuario de esa terminal ha ejecutado el comando mesg n .
mail
El comando mail permite enviar correo a un usuario o una lista de usuarios. La sintaxis es la siguiente: $ mail Usuario1 Usuario2 Usuario3 ... El comando mail admite la opcin s para especificar un tema o subject para el e-mail que se va a mandar. Esta opcion s acepta como argumento la palabra que le siga, todo lo dems ser considerado como nombre del usuario a enviar. Si el tema posee mas de una palabra, el tema deber ir entre comillas simples para indicarlo. Por ejemplo: $ mail -s Reunin del martes ana pedro luis Cuando se enva un mensaje a un usuario que tiene abierta una sesin, el sistema no informa la recepcin del mensaje, sino que lo hace cuando este usuario inicia una nueva sesin, por lo que un usuario deber chequear voluntariamente su buzn de mensajes. El comando mail sin opciones ni argumentos visualiza el correo del usuario activo, mensaje a mensaje $ mail (enter)
- 126 -
UTN - FRC
LINUX
La salida de este comando sera algo como lo que sigue: var/spool/mail/alumno100 : 3 messages 2 news 3 unread U1 alumno103@labsis.frc.utn.edu.ar friday Set 4 8:55 Nos juntamos esta noche N1 docente25@labsis.frc.utn.edu.ar monday Set 7 10:40 Prctico prxima clase N2 alumno115@labsis.frc.utn.edu.ar tuesday Set 8 4:26 Como ands? & Ntese que al final de la salida de pantalla, aparece el smbolo &. Este smbolo es un indicador que la utilidad mail espera que ingresemos un subcomando. mail proporciona subcomandos para facilitar las operaciones de leer, guardar, borrar y responder a los mensajes. Entre ellos: (Enter) visualiza la prximo mensaje d borra el mensaje y visualiza la proxima s archivo guarda el mensaje en archivo w archivo guarda el mensaje en archivo pero sin la cabecera. m [usuarios] enva el mensaje a los usuarios nombrados q vuelve al shell x vuelve al shel sin modificar el contenido del buzn !comando escapar al shell y ejecutar el comando ? esta opcin visualiza por pantalla un resumen de toda las opciones de mail. Cada usuario en Linux tiene un buzn en el que recibe el correo que le est dirigido. El email se guarda en el buzn hasta que el usuario lo lee o lo borra. Una vez que se ha ledo el email, este se puede mover a un buzn secundario o personal. Este buzn secundario se llama mbox y se encuentra en el subdirectorio home del usuario, sin embargo el usuario puede indicar el nombre de un archivo como buzn secundario con la opcin s. Es posible enviar mensajes a uno a varios usuarios de un mismo sistema, o de la red Lan a la que se encuentre conectado, y si est conectado a Internet puede mandar a cualquier parte del mundo.
- 127 -
UTN - FRC
LINUX
Actividad 1
1. Verifique si tiene habilitada la opcion de recibir mensajes. mesg 2. Visualice los permisos del archivo pts que corresponda a su terminal. who am i ls l /dev/pts? 3. Deshabilite la recepcin de mensajes de su terminal y verifique el cambio realizado. mesg n ls l /dev/pts? 4. Enve un mensaje al usuario de la terminal mas cercana a la suya. write alumnoxy 5. Si el usuario usuario12 esta conectado, inicie una comunicacin con l. who | grep alumno12 write alumno12 6. Visualice su casilla de correo. Y analice los datos que se muestran. mail 7. Enve un correo electrnico al usuario alumnoxy+2 (xy es el nmero incluido en su nombre de usuario), cuyo tema sea Turno de exmen Dic/2003. mail s Turno de exmen Dic/2003 alumnoxy+2 8. Usted es administrador de un sistema y necesita avisar a los usuarios que cierren todas las aplicaciones en 5 minutos. wall El sistema se cerrar en 5 minutos, por favor cierre su sesin. 9. Visualice las opciones de mail. mail &? 10. Guardar los mensajes recibidos en un archivo de correo diferente a mbox. mail & s mensajes 11. Guardar los mensajes recibidos, sin cabecera, en un archivo de correo diferente a mbox. mail & w mensajes
Actividad 3
1. Cual es la funcin del comando wall? 2. Cual es el contenido de la variable mail? 3. Envi un mensaje al usuario Oliva. Utilice todos los comandos que conoce. 4. Que informacin nos muestra el archivo /dev/pts? ? 5. Si le envan un mensaje y no puede recibirlo, como debe habilitar la recepcin? 6. Guardar los mensajes recibidos en un archivo de correo llamado cartas. 7. Mande un mensaje como administrador a todos lo usuarios del sistema. 8. Enve un correo al usuario Jurez cuyo tema sea Reunin prxima semana.
- 128 -
UTN - FRC
LINUX
13
Programacin del shell
- 129 -
UTN - FRC
LINUX
En ste captulo veremos que el shell puede aceptar no slo ordenes simples, desde la lnea de comandos, sino tambin secuencia de ordenes, grupo de ordenes y ordenes condicionales. Pero, adems de ser el shell un intrprete de comandos, proporciona la posibilidad de almacenar lneas de comandos en un fichero para su posterior ejecucin. Para ello dispone de estructuras de programacin que nos permiten definir la ejecucin condicional de instrucciones, ejecucin de programas con mltiples ramificaciones, bucles y agrupacin modular de las instrucciones en subrutinas o funciones. A este archivo de comandos se lo denomina shellscripts y se lo puede crear con cualquier editor de textos, como puede ser vi, ed o el editor del mc. (El apndice II trata el editor vi ) . Para escribir programas en shell debemos primero conocer cmo definir y utilizar variables, luego conocer las estructuras de control que nos permiten controlar el flujo de ejecucin de los script
Scripts ejecutables
Antes que podamos ejecutar nuestros scrpits debern disponer del permiso de lectura y ejecucin para que el shell pueda leerlo y ejecutarlo. Para ello utilizamos el comando chmod: chmod +x scrpts es decir agregarle el permiso de ejecucin al archivo, y de esa manera poder llamarlo desde la lnea de comandos simplemente como:
./scripts
con la cadena scripts, hacemos referencia al nombre del programa que usted ha creado. Al teclear el nombre del programa (shellscripts), el shell comprobar en primer lugar si dicho archivo es ejecutable. Si es as comenzar a ejecutarlo lnea a lnea (ejecucin interpretada de comandos), ya que cada lnea se interpreta inmediatamente antes de su ejecucin, sin la necesidad de compilar el programa. Los dos caracteres ubicados delante del nombre del scripts, ./, le indican al shell que el scripts es un ejecutable que se encuentra en el directorio actual. Por lo general, por motivos de seguridad, nuestro directorio no est incluido dentro de la variable PATH, y si no especificamos donde se encuentra el scripts, el shell no podr ejecutarlo. Sin embargo, es posible agregar nuestro directorio a la variable PATH simplemente tipeando PATH=.:$PATH . Resulta conveniente crear un directorio bajo el directorio de conexin del usuario, denominado bin, con el fin de contener este tipo de ficheros. Adems deberemos modificar la variable PATH, para que incluya la trayectoria $HOME/bin
- 130 -
UTN - FRC
LINUX
Si el usuario cambia de shell o inicia otra sesin, las variables locales definidas anteriormente no sern reconocidas. Es posible transferir una variable de la zona de datos local al entorno utilizando el comando export, acompaado del identificador de la variable que desea trasladar al entorno. En la zona de entorno residirn todas las variables cuyo valores son reconocidos por todos los shell que ejecute un determinado usuario. Por ejemplo, durante el proceso de conexin, se definen algunas variables que se almacenan en la zona de datos de entorno, como puede ser la variable PS1, que guarda el carcter con el cual identificamos al shell.
Asignacin directa
Es posible asignarle un valor a una variable desde la lnea de comandos, especificando el nombre de la variable, luego el signo = y, a continuacin, el valor a asignar . No debe haber blancos a ambos lados del signo =, para que el shell no trate a la asignacin como si fuera una lnea de comandos.. Por ejemplo: a=Hola b=Amigo a y b son los nombres de las variables, Hola y Amigo es el contenido de cada una de ellas. Si necesitamos asignarle a una variable una cadena de caracteres, sta deber estar entre comillas simples o dobles para que el shell ignore los espacios en blanco, y no los tome como separador de campos. a=Hola amigo podramos asignarle tambin a una variable la ruta de acceso a un archivo que utilizamos frecuentemente, y luego simplemente hacer referencia a la variable. arch=/home/garcia/listado
Sustitucin de comandos
Otra forma de asignar un valor a una variable, es utilizar la sustitucin de comandos. Este procedimiento permite que una variable almacene la salida de un comando. La sintaxis para los shell Bourne y Korn consiste en utilizar las comillas graves, por ejemplo: fecha=`date` el comando date se ejecuta y guarda su salida en la variable fecha. El shell POSIX requiere delimitar el comando a ejecutarse entre parntesis y lo hace preceder del smbolo $. Por ejemplo: fecha=$(date) el comando date se ejecuta y guarda su salida en la variable fecha.
- 131 -
UTN - FRC
LINUX
Declare
Este comando permite declarar variables o modificar los atributos de las variables ya definidas. La sintaxis es la siguiente: declare [opciones] [var-nom[=valor]] Las opciones son las siguientes: -f Muestra slo nombres de funcin. -/+ i (-) Activa o (+) desactiva el atributo de la variable para que sea un entero. -/+ r (-) Activa o (+) desactiva el atributo de la variable y la define como de slo lectura. -/+ x (-) Activa o (+) desactiva el atributo de la variable para que pueda ser exportada al entorno. El comando declare sin argumentos muestra las variables ya declaradas.
Read
Este comando lee los datos de la entrada estndar, y asigna cada campo ingresado en la lnea de comandos a una variable diferente, recuerde que el espacio es separador de campos. Si el nmero de campos ingresados supera la cantidad de variables definidas, entonces, todos los campos sobrantes se asignan a la ltima variable definida. La sintaxis es la siguiente. read var1 var2 ... Por ejemplo: read dia mes ao luego de tipear la lnea anterior, aparecer el cursor esperando que usted ingrese el dato, por ejemplo, 15 Julio 2003 . Al dar <Enter>, se guarda la palabra 15 en la variable da, la palabra Julio en la variables mes y la palabra 2003 en la variable ao. Con read, no es posible redireccionar, por ejemplo un archivo a una variable pues este comando slo lee la entrada estndar.
- 132 -
UTN - FRC
LINUX
Existen otros mtodos para utilizar el contenido de una variable. A continuacin te presentamos una tabla con algunos de los mtodos disponibles para acceder a las variables. Mtodo $variable ${variable} Descripcin Sustituye $variable por el valor de la variable. Sustituye ${variable} por el valor de la variable. Este mtodo se emplea cuando existen otros caracteres inmediatamente a continuacin del nombre de la variable y que seran interpretados como parte de dicho nombre. Sustituye ${variable-palabra} por el valor de la variable, si es que la variable est configurada. Sino se utiliza como valor, palabra. Sustituye ${variable+palabra} por el valor de la variable, si es que la variable est configurada. Sino se ignora la instruccin. Asigna el valor de palabra a variable, si variable no estuviera configurada. Sustituye ${#variable} por la longitud, en caracteres, del valor de variable.
${variable-palabra} ${variable+palabra}
${variable=palabra} ${#variable}
Variables especiales
Mostramos en el siguiente cuadro una descripcin resumida de las variables especiales utilizadas por el shell. Estas variables almacenan un valor relacionado a la ocurrencia de un evento en la ejecucin de un comando. Descripcin Almacena el estado de salida del ltimo comando ejecutado. Contiene el identificador del ltimo proceso que se ejecut en background. $Contiene las opciones establecidas mediante el comando set. $# Contiene el nmero de argumentos posicionales que fueron pasados al script. $0 Nombre del shell script $1,$2 ...$9 Argumentos posicionales $* $@@ Lista con los argumentos posicionales. $$ Contiene el identificador del proceso actual Variable $? $!
La variable $?
Esta variable es de slo lectura que tiene como objetivo identificar estados de salida de los comandos ejecutados o caractersticas asociados a ellos. Cuando un comando finaliza su ejecucin devuelve al shell un nmero q indica si ha finalizado con xito o no su ue ejecucin. Si el estado de salida es cero 0, el comando se ejecut con xito, sino devolver otro valor que depende de la causa que provoc la terminacin anormal del comando. Podemos ver este valor con el comando: echo $?
- 133 -
UTN - FRC
LINUX
Esta variable guarda el estado de salida del ltimo comando que fue ejecutado. Esta variable no podr recoger el estado de salida de un comando que se ejecut en background (segundo plano).
La variable $@@
Esta variable muestra todos los argumentos suministrados al script, aunque stos argumentos contengan comillas. En cambio, la variable $* mostrar todos los argumentos eliminando antes todas las comillas.
Parmetros (argumentos) posicionales Cuando el shell interpreta un comando, lo hace agregando nombres de variables a cada elemento de la lnea de comandos. Estos elementos estn separados por blancos (espacios). Las variables aadidas a los elementos en la lnea de comandos son $0, $1, $2, etc. El nombre del comando es $0, el primer argumento o parmetro del comando es $1, y as con el resto. Se puede acceder a tantos parmetros posicionales como el usuario desee, pero si se componen de ms de un dgito stos debern estar encerrados entre llaves. Por ejemplo, ${15} representara al parmetro posicional nmero quince. Las llaves son necesarias pues es posible concatenar el nombre de la variable con cualquier carcter, como vamos a ver ms adelante. Veamos un ejemplo, para ello podemos crear el siguiente archivo con el comando cat o algn editor: cat >> mostrar # Ejemplo de uso de los parmentros posicionales echo $3 echo $1 $2 more $4 el siguiente paso es ejecutar el archivo anterior, pasndole cuatro argumentos. mostrar Buenos das Laura /etc/group la salida de la lnea anterior ser: Laura Buenos das root:*:0: estudiantes:*:100:ana, luis, mara invitados:*:200: otros:*:250: claudia Si deseamos indicarle al shell que un conjunto de caracteres separados por blancos representan un elemento, deberemos encerrarlos entre comillas.
UTN - FRC
LINUX
Variable Descripcin HOME=/home/lo Configura su directorio de usuario, es decir, la localizacin gin desde donde inicia la sesin. Sustituya login por su identificador de entrada al sistema, por ejemplo /home/mgarcia. LOGNAME=logi Se configura automticamente al igual que su identificador. n Guarda el nombre con el cual es usuario se conecta al sistema. PATH=path Contiene una lista de directorios que el shell examina al buscar archivos ejecutables. PS1=prompt Contiene el identificador primario de shell, por defecto es el signo $. PWD=directorio Se configura automticamente. Indica la ruta absoluta al directorio en donde el usuario est ubicado. SHELL=shell Indica la ruta absoluta al programa interprete de comandos. Por ejemplo, /bin/bash. TERM=termtype Establece el tipo de terminal en el que est trabajando. Tabla. Variables de entorno. [Tackett Jr-Burnett]
PATH
La variable PATH contiene una serie de campos separados por dos puntos (:), en donde cada campo es un directorio que contiene comandos o archivos ejecutables. Para ver el contenido de la variable PATH del usuario, ejecutamos el comando: echo $PATH no mostrar por ejemplo: /bin:/usr/sbin:/usr/local/bin
El orden en el que estn definidos los directorios en la variable, es importante, pues es en ese orden en el que el shell buscar un archivo ejecutable, y slo lo har en los directorios definidos en PATH. Es decir que al ejecutar un comando, el shell buscar el archivo primero en /bin, luego en /usr/sbin y por ltimo en /usr/local/bin. Si el directorio en el que se encuentra el comando no est definido en PATH, el sistema no dir que no lo encuentra. Si pretende crear sus propios comandos, debe incluir en la variable PATH, la ruta de acceso al directorio que contiene dichos comandos. Generalmente /usr/local/bin contiene comandos locales creados por el usuario. Puede utilizar la siguiente lnea para agregar su directorio de comandos a la variable: PATH=/home/mgarcia/ejecutables:$PATH Con una simple asignacin colocamos como primer directorio de bsqueda a /home/mgarcia/ejecutables, o podramos colocarlo como ltimo directorio de bsqueda con: PATH=$PATH: /home/mgarcia/ejecutables Debemos tener en cuenta, no crear script con nombres de comandos que ya existen, como date, cp o find pues si el directorio de nuestros ejecutables es el ltimo en la lista definida en la variable PATH, nuestros archivos nunca van a ejecutarse ya que el shell examina primero el directorio /bin, que generalmente est primero en la lista.
- 135 -
UTN - FRC
LINUX
env
El comando env ejecuta un script con un entorno modificado pues es posible pasarle como argumento el nombre y nuevo valor de una o varias variables del shell. Este comando es un fichero externo al shell, su trayectoria es /usr/bin/env. La sintaxis es la siguiente: $ env [-i] [--unset variable] [variavle=valor] [script [parmetros ...]] Opciones: [--unset variable] [variavle=valor] elimina la variable del entorno, si es que sta existe. cambia el contenido de la variable de entorno por el nuevo valor, el cual puede estar vaco, por ejemplo: variable=
[script [parmetros ...]] especifica el script a ejecutar, ste se busca de acuerdo a lo determinado por la variable de entorno PATH. Cualquier parmetro posterior pasa al script como parmetro propio. [-i] Comienza con un entorno vaco, ignorando el heredado.
El comando env sin opciones muestra una lista de las variable de entorno y sus valores actuales. Por ejemplo: $ env nos mostrar un listado parecido al siguiente: LESSOPEN=| /usr/bin/lesspipe.sh %s ENV=/root/.bashrc COLORTERM=gnome-terminal HISTSIZE=1000 HOSTNAME=localhost.localdomain LOGNAME=mgarcia MAIL=/var/spool/mail/mgarcia HOSTTYPE=i386 SHELL=/bin/bash HOME=/rhome/mgarcia : : $ env SHELL=/bin/csh ./programa
La orden anterior ejecuta el archivo programa pero el shell que lo ejecuta ya no es el definido por defecto /bin/bash sino el shell csh.
printenv
Imprime todos o una lista de variables de entorno pasadas como argumento. La sintaxis es: $ printenv [variables ...] Ing. Allende Ing. Serna - 136 -
UTN - FRC
LINUX
El estado de salida del comando es: 0 si se encontraron todas las variables especificadas. 1 Si no se encontr al menos una de las variables especificadas. 2 Si ocurri un error de escritura. Por ejemplo: $ printenv HOME SHELL /rhome/mgarcia /bin/bash el comando nos mostr el contenido de las variables HOME y SHELL. Por supuesto, el comando echo $? Mostrar el valor 0.
set
El comando set muestra tanto las variables locales como las variables de entorno y sus valores correspondientes.
unset
El comando unset asigna a una variable creada por el usuario el valor NULL. Tambin permite inhabilitar una funcin. Este comando es de gran utilidad si estamos trabajando con un script demasiado largo, eliminamos una variable simplemente utilizando el comando unset. La sintaxis es la siguiente: $ unset [-f] [lista de variables/ lista de funciones] La opcin f indica que los argumentos hacen referencia a funciones y no a variables. Las variables de entorno como PS1, HOME, etc, no pueden ser inhabilitadas.
export
Al crear una variable, sta queda definida slo para el shell que se est ejecutando. Las variables definidas en la lnea de comando podrn ser utilizadas slo por los comandos tipeados en ella. Es decir que una variable definida en un script, al concluir ste, pierde su valor. El comando expot, permite una variable definida en un shell, pueda ser utilizado por los shells posteriores. La sintaxis del comando es la siguiente: $ export [lista de variables...] Por ejemplo, si creamos el siguiente script: mes=Agosto echo $mes al ejecutarlo nos mostrar la cadena Agosto. Pero si tipeamos en la lnea de comando echo $mes, veremos que la variable est vaca. Si agregamos al script la siguiente lnea: expot mes luego de ejecutar el script, el comando echo $mes nos mostrar la cadena Agosto. El comando export, sin argumentos, muestra las variables de entorno que estn configuradas en su shell.
- 137 -
UTN - FRC
LINUX
Lneas de Ordenes
Las lneas de rdenes son una agrupacin que se pueden ejecutar en forma: secuencial, condicional o con encadenamientos de tuberas.
Secuencia de rdenes
Es un conjunto de rdenes que se pasan al shell en una lnea, separadas por punto y coma. El shell las considera como rdenes individuales y las ejecuta secuencialmente. $ orden1; orden2; orden3 Ejemplos: Suponga que desea realizar una copia del archivo morosos (que existe), luego ver el nmero de i-nodo del nuevo archivo y posicionarse en el directorio /etc, por lo que deber plantear la siguiente secuencia: $ cp morosos morososcp; ls i morososcp; cd /etc La secuencia de salida ser: 150326 /etc $ _ morosocp
Luego de copiar el archivo morosos con el nombre morososcp, el usuario queda ubicado en el directorio /etc.
Ordenes Condicionales
Las rdenes condicionales son dos rdenes relacionadas por conectivos lgicos, AND y OR, dnde la ejecucin de la segunda orden depende de la ejecucin de la primera. Despus de su ejecucin toda orden de Linux genera un cdigo de retorno, que indica si la orden se ha ejecutado con xito o ha sucedido algn tipo de error, como puede ser el no encontrar un archivo. Linux guarda el cdigo de retorno en la variable ? , que ser igual a cero o distinto de cero segn se haya ejecutado con xito o no el comando. $ orden1 && orden2 En sta lnea de comandos se utiliz el conectivo AND (&&) por lo que la orden2 se ejecuta slo cuando la orden1 se ha ejecutado con xito. $ orden1 || orden2 En sta lnea de comandos se utiliz el conectivo OR ( || ) por lo que la orden2 se ejecuta slo cuando la orden1 no se ha ejecutado con xito. Ejemplos: $ cp listado nomina && more nomina La primera orden copia el archivo listado a nomina, si la copia se realiza con xito se ejecuta la segunda orden, es decir, que la salida que genera sta lnea de comandos es el contenido del archivo nomina, si es que pudo copiarse listado a nomina..
- 138 -
UTN - FRC
LINUX
Supongamos ahora que no estamos seguro si el archivo listado est en el directorio actual o en el directorio padre. En ese caso para copiar el archivo podramos utilizar la siguiente orden: $ cp listado nomina || cp ../listado nomina si la primera orden no tiene xito se ejecuta la segunda orden, que busca al archivo listado en el directorio padre y lo copia como nomina en el directorio actual.
Grupo de ordenes
Es una secuencia de ordenes encerradas entre parntesis, que el sistema ejecuta secuencialmente pero en cuanto a las entradas y las salidas, son tratadas como una sola orden. La variable de retorno tendr el cdigo de retorno de la ltima orden de la secuencia. El formato es: $ (orden1 ; orden2 ; orden3) Sigamos con el ejemplo del punto anterior, copiar el archivo listado como nomina y luego mostrarlo por pantalla. Sin embargo, no estamos seguros de la ubicacin del archivo listado, por lo que planteamos la orden copiar, como un grupo de ordenes que si tiene xito permite la ejecucin de la orden mostrar. $ (cp listado nomina || cp ../listado nomina) && more nomina Como grupo de ordenes, si la primera orden no tiene xito se ejecuta la segunda orden, que busca al archivo listado en el directorio padre y lo copia como nomina en el directorio actual. Luego, i la copia se realiza con xito se ejecuta la tercera orden, es decir, que la salida que genera sta lnea de comandos es el contenido del archivo nomina, si es que pudo copiarse listado a nomina. Para comprender mejor su funcionamiento planteamos el siguiente ejemplo: $ ( ls /dev;pwd) > dispositivos Las salidas de los comandos ls y pwd, que se ejecutan en forma secuencial, se redirecciona al archivo dispositivos. Es decir que ste archivo tendr el contenido del directorio dev y path al directorio actual. Si no estuvieran los parntesis, si se hubiera planteado la lnea simplemente como un secuencia de comandos: $ ls /dev; pwd > dispositivos slo la salida de la segunda orden se redirecciona al archivo dispositivos.
Tubera (pipeline)
En ste tipo de lneas de ordenes la salida de una orden es entrada de la siguiente, en donde: $ orden1 | orden2 | orden3 El pipe es un buffer donde la orden deposita su salida, y desde donde el siguiente comando toma su entrada. $ who | grep pepe Ing. Allende Ing. Serna - 139 -
UTN - FRC
LINUX
El comando who genera un listado de los usuarios conectados al sistema, que deposita en el pipe, grep busca en ese listado la cadena de caracteres pepe y muestra por pantalla las lneas en donde la encuentra. Con esta orden podemos ver si el usuario pepe est conectado al sistema, en qu terminales est trabajando y a que hora se conect.
Estructuras de Control
Existen dos tipos de estructuras de control bsicas: De decisin Repetitivas o Iterativas Podemos identificas como estructuras de decisin a if fi y case esac, y como estructuras repetitivas a while, y for.
La estructura condicional if fi
Es una estructura de condicin alternativa pues permite seleccionar entre dos posibilidades de accin, si la condicin ha tenido xito. Esto es, si el valor de estatus o retorno del comando ejecutado como condicin, ha sido cero. Si la condicin est compuesta por un conjunto de comandos, la estructura if considera el estatus del ltimo comando. La sintaxis es la siguiente: if condicin then comandos else comandos fi La proposicin else, es decir la ejecucin de la rama falsa de la estructura, es opcional. Recuerde que cada comando devuelve un valor de retorno al shell, para indicar en que condiciones se ha ejecutado. Si el retorno es un "0" (verdadero), se entiende que el comando se ejecut en forma exitosa, y si retorna otro valor (falso) se interpreta como que hubo un error, y precisamente el nmero retornado, indica en que situacin se produjo tal error. La proposicin if interpreta el "0", como un verdadero, y un nmero distinto de "0", ser interpretado como falso. La condicin de esta estructura siempre debe ser un comando o un conjunto de comandos. Por ejemplo: # Objetivo: enviar un mensaje al usuario mallende, si esta conectado if who | grep mallende then write mallende else echo el usuario mallende an no ha llegado fi El comando who, que muestra un listado de los usuarios conectados al sistema, enva su salida a la tubera dnde el comando busca la cadena mallende, que es el nombre del usuario con el cual debemos comunicarnos. Si el comando tiene xito, se ejecuta la rama verdadera del condicional (then), en caso contrario la se muestra un mensaje por pantalla.
- 140 -
UTN - FRC
LINUX
esac Case compara la variable con los patrones, desde arriba hacia abajo y ejecuta los comandos asociados, con el primer patrn que reconozca y luego sale de la estructura. Los patrones son cadenas de caracteres, en donde es posible incorporar algunos metacaracteres, definidos para la proposicin case, especficamente. Uno de los usos del case, es el de validar o reconocer argumentos de un comando. Por ejemplo: # Objetivo: mostrar un men de actividades al usuario echo Por favor seleccione una opcin para echo R ver pahtname echo W Muestra usuarios conectados echo S sale del programa #el usuario debe ingresar una opcin que ser depositada en var read var case $var in R|r) echo El pathname: pwd;; W|w) echo Los usuarios conectados: who;; S|s) echo opcin Salir esac Al definir los patrones se puede utilizar el metacaracter | para la funcin lgica " O ". Tambin podemos utilizar los metacaracteres * y [ ...]. El "* "como patrn, se usa para indicar la accin a desarrollar, en el caso de que la variable analizada por el case, no sea ninguna de las previstas por los patrones anteriores.
UTN - FRC
LINUX
Se puede usar cualquier variable (generalmente se utiliza la variable "i "), la cual adoptar en cada iteracin un elemento de la lista de argumentos. Por ejemplo: # el objetivo del scrpt es ver el contenido #de todos los archivos del directorio actual for i in `ls` do more $i done en este script, la ejecucin del comando ls produce un listado de los archivos existentes en el directorio actual. La variable i, en la primera iteracin adoptar como valor el nombre del primer archivo de la lista que genere ls, en la segunda iteracin adoptar el segundo nombre de la lista, y as sucesivamente. Por lo que el nmero de iteraciones depender de la cantidad de archivos que hayan sido listados. La accin que se repite, es mostrar el archivo cuyo nombre est en la variable i. Una forma simple de escribir el comando, es la siguiente: for i in lista_de argumentos; do comandos; done Por ejemplo: for i in for i in `ls`; do more $i ; done
UTN - FRC
LINUX
#Tiene que hacer un cambio en los archivos echo Correo nuevo !!! | write $LOGNAME
(ejemplo extrado de Linux- Jack Tackett)
La condicin del ciclo while es el comando dic, quien compara los archivos omail y $MAIL. Si el comando dic se ejecuta con xito, es decir , si los archivos son iguales se ejecutan los comandos que estn en el cuerpo de acciones de while. Si no se entiende que el comando dic no ha tenido xito, y se avisa al usuario mediante el comando write que su archivo de correo ha cambiado por lo tanto ha recibido nuevos mensajes.
La orden test
Este comando permite comprobar el valor de cualquier expresin. Test devuelve un 0, si la expresin se evala como verdadera (true) y, devolver un 1 si la expresin es falsa. La sintaxis es la siguiente: $ test expresin Las expresiones pasadas a test como argumentos, pueden combinarse mediante los siguientes operadores lgicos: || (OR) devuelve true si cualquiera de las expresiones es verdadera. && (AND) ) devuelve true si ambas expresiones son verdaderas. ! (NOT) devuelve el valor opuesto de la expresin.
Algunos argumentos habituales son: !expresin Entrega el valor opuesto de la expresin. Si la expresin es true, se devolver false (expresin) && (expresin2) Entrega un valor verdadero si ambas expresiones son verdaderas. (expresin) || (expresin2) Entrega un valor verdadero si cualquiera de las expresiones es verdadera. puede combinarse con un conjunto de operadores del shell. Existen varios tipos De verificacin de archivos De comprobacin de cadenas Aritmticos
De verificacin de archivos
La sintaxis es : test opcin nombre de archivo
Las siguientes opciones devuelven el valor verdadero (true) si: -a -b -c -d -s -f -r Existe el archivo. Existe el archivo y es un archivo especial de bloque. Existe el archivo y es un archivo especial de carcter. Existe el archivo y este es un directorio. El archivo existe y su tamao es mayor que cero. El archivo existe y es un archivo regular. El archivo existe y el usuario tiene permiso de lectura. - 143 -
UTN - FRC -w -x
LINUX
El archivo existe y el usuario tiene permiso de escritura. El archivo existe y el usuario tiene permiso de ejecucin.
De comprobacin de cadenas
La sintaxis es: test [opcin cadena] [cadena operador cadena]
Las siguientes opciones devuelven el valor verdadero (true) si: -z -n La cadena es nula Existe la cadena cadena1 es igual a la cadena2 Las dos cadenas son iguales. cadena1 es distinta a la cadena2 La cadena no es nula cadena1 tiene una ordenacin anterior que cadena2. cadena2 tiene una ordenacin anterior que cadena1.
Operadores Aritmticos
La sintaxis es: test entero1 operador entero2
Las siguientes operadores devuelven el valor verdadero (true) si: numero1 -eq numero2 numero1 -ne numero2 numero1 -gt numero2 numero1 -ge numero2 numero1 -lt numero2 numero1 -le numero2 ambos enteros son iguales. los enteros son distintos. numero1 es mayor a numero2 numero1 es mayor o igual a numero2 numero1 es menor a numero2 numero1 es menor o igual a numero2
El valor que devuelve test se utiliza en combinacin con las estructuras de control ya vista. Por ejemplo: If test d prueba then rm r prueba fi El script anterior permite borrar un directorio en forma recursiva si es que este existe. If test $SHELL=/bash/csh then programa #ejecuta el comando programa else env SHELL=/bin/csh programa fi La proposicin if, ejecuta el comando test, y analiza su retorno. A su vez, el comando test analiza la condicin que utiliza un operador de comparacin de cadenas, y si sta es verdadera retorna un "0", y si es falsa retorna un "1". En el ejemplo anterior se desea ejecutar el archivo programa con el shell csh y, si ste no esta definido por defecto, lo modifica con el comando env.
- 144 -
UTN - FRC
LINUX
El comando : siempre devuelve un verdadero. Tambin podemos usar el comando true, que realiza el mismo trabajo, pero : lo hace mas rpido (el comando false siempre devuelve un falso).
La orden break
Se utiliza para salir de un bucle y se ejecuta la orden que sigue inmediatamente a ste. La sintaxis es: $ break [n] la opcin n indica el nmero de niveles o bucles de los que hay que salir. Por ejemplo: for i in lunes martes miercoles jueves do if test $i = miercoles then break else echo Hoy es $i fi done la ejecucin del script mostrar la siguiente salida: lunes martes pues cuando la variable i contenga la cadena mircoles, la orden break sale del bucle for.
La orden continue
Este comando salta a la siguiente iteracin, sin salir del bucle. Esto permite evitar la ejecucin del cuerpo de acciones para ciertos valores de la variable que controla el bucle. La sintaxis es la siguiente: $ continue [n] la opcin n indica el bucle al cual deberemos saltar. Si se le da un argumento numrico, el control va hacia el bucle indicado por dicho nmero. Por ejemplo continue 5 va hacia el comienzo del quinto bucle que engloba dicha orden.
- 145 -
UTN - FRC
LINUX
Actividad 1
1. Diga cual es el contenido de cada una de las siguientes variables. Explique las diferencias. cont1=pwd cont2=pwd cont3=`pwd` cont4=pwd cont5=pwd 2. Cree un script que solicite sus datos personales y los muestre. # en este script utilizaremos el comando read clear #limpia la pantalla echo -n Ingrese su nombre completo: read nbre echo -n Ingrese su Apellido: read ap echo n Ingrese su edad: read ed echo echo Los datos completos son:$nbre $ap $ed Recuerde que para ejecutar puede tipear alguna de las siguientes ordenes: sh nom_scrpts chmod +x nom_scripts ./nom_scripts 3. Modifique el indicador del shell en la variable PS1 para que muestre: a. su nombre de usuario. PS1=$PWD\ $ b. su login-name PS1=$LOGNAME ] \$ c. una cadena. PS1=Listo ] \$ 4. Cree un script que le permita copiar un archivo. (utilice parmetros posicionales) a. creamos el archivo con la orden cat > copiar cp $1 $2 b. lo ejecutamos como : sh copiar archivoa archivob
de esta manera al ejecutar el programa copiar, le pasamos dos argumentos o parmetros posicionales, $1 y$2, que corresponden a los nombres de los archivos con los cuales vamos a trabajar. Si los archivos no estan en el directorio actual recuerde incluir en el nombre del archivo, la ruta de acceso al mismo. 5. Cree el script saludo que le de la bienvenida cuando ud. comience una nueva sesin, y adems le muestre el shell que utiliza, la fecha y hora de conexin. # este script saluda al usuario en cada nueva conexin echo Saludos amigo $LOGNAME echo Espero se cumplan sus expectativas echo echo el shell utilizado es : $SHELL echo Hoy es: `date` echo Hora: `time` 6. Para que el archivo anterior se ejecute en cada nueva sesin, agrguelo al archivo .bash_profile y luego ejectelo. Ing. Allende Ing. Serna - 146 -
UTN - FRC
LINUX
vi .profile 7. Muestre un listado de las variables de entorno del usuario con sus respectivos valores. env 8. Por la lnea de comandos cree la variable ed=20 y luego muestre su contenido. ed=20 echo $ed 9. Defina a la variable ed como de slo lectura. declare r ed #define a la variable como de slo lectura. echo $? #verificamos si el comando anterio tuvo xito. ed=40 #asignamos un nuevo valor a la variable Ver Ud. que el shell le muestra un mensaje de error, por lo que la variable ed conserva el valor 30. 10. Ejecute el script creado en el punto 5, pero con el shell csh y nombre de usuario mtoledo. env SHELL=/bin/csh LOGNAME=mtoledo ./saludo
Actividad 2
1. Cree el script control que emita un mensaje si Ud tiene ms de tres terminales abiertas. m=`(who | grep $LOGNAME) | wc l ` if test $m -gt 3 then echo Ud. Tiene demasiadas terminales abiertas else echo la cantidad de terminales abiertas es correcta fi 2. Modifique el script anterior de forma que pueda controlar las terminales abiertas de cualquier usuario. echo -n Ingrese el nombre del usuario: read us m=`(who | grep $us) | wc l ` if test $m -gt 3 then echo $us tiene demasiadas terminales abiertas else echo la cantidad de terminales abiertas es correcta fi 3. Cree el script enlace al que deber pasarle dos parmetros posicionales (el archivo a enlazar y el nombre del enlace) si no es as, el script tendr que solicitarle esos datos. if test $# -eq 2 then #el usuario pasa al script dos parmetros echo $@ #muestra los parmetros posicionales ln $1 $2 else Ing. Allende Ing. Serna - 147 -
UTN - FRC
LINUX echo n Ingrese el nombre del archivo a enlazar: read a echo -n Ingrese el nombre del enlace: read b # verifico si el archivo a enlazar existe if test -a $a then ln $a $b else echo $a no existe fi
fi 4. Cree el script opciones que le permita seleccionar entre las siguientes actividades: 1. ver informacin sobre el espacio en disco que ocupan los sistemas de archivos montados, 2. ver un informe sobre la memoria libre y usada. 3. salir del script. While true do clear echo echo Elija una opcion del siguiente menu: echo D utilizacin del disco echo F utilizacin de la memoria echo S salir read var case $var in D|d) df read a;; F|f) free read a;; S|s) exit esac done 5. Cree el script contar que cuente y muestre las lneas de los archivos de un directorio especfico. echo -n Ingrese el nombre del directorio: read a if test -d $a then for i in `ls $a` do if test -f $i then con=`wc -c $i ` echo $con read fi done else echo $a no es un directorio fi
- 148 -
UTN - FRC
LINUX
Actividad 3
1. Que es la programacin del shell? Para que la utilizamos? 2. Como se asigna un valor determinado a una variable del shell? 3. Defina que es un parmetro posicional. 4. Explique las dos formas en que se puede ejecutar un shell script. 5. Indique el nombre de al menos tres variables de entorno y su contenido. 6. Para cada shell script mostrado, comentar en el cuadro de la derecha con sus palabras, qu hace. for i in `ls $1` do if [ -d $i ] then ls lia fi done n=0 while true do sleep 5 ps fea n=`expr $n + 1` if [ $n eq 5] then break fi done ls lia $1 2> /tmp/error if [ $? ne 0 ] then echo "No existe $1" fi while [ $# -ne 0 ] do echo $1 shift done n=`who | wc l` while [ $n ne 0 ] do wall "Termine y desconctese" sleep 5 n=`who | wc l` done halt # Apaga el sistema 7. Desarrollar un programa que genere un archivo con una lista de los sudirectorios que hay dentro un directorio cualquiera, usando parmetros posicionales.
- 149 -
UTN - FRC
LINUX
8. Desarrolle un shell script usando vi, que muestre por pantalla NP = n, donde n es la cantidad de procesos ejecutndose en el equipo, cada vez que esta cantidad cambie. Efecte el control de cambios en la cantidad de procesos en ejecucin, cada s segundos, donde s ser un nmero indicado como parmetro al script. Si no se indica parmetro, tomar s=1. 9. Desarrolle un script shell que muestre el siguiente men por pantalla y realice las funciones indicadas cuando el operador ingrese una de las opciones correctas: (Indique todos los comandos vi que utilizara para la construccin)
MENU
1. 2. 3. 4. 5. Ver espacio ocupado y disponible en discos. Efecta la copia de un archivo. Detecta si un programa determinado esta procesndose. Busca un archivo en todo el sistema de archivos. Finaliza. SU OPCIN ES:
- 150 -
UTN - FRC
LINUX
Prcticos Integradores
- 151 -
UTN - FRC
LINUX
Cree, su directorio de login los subdirectorios trabajo y practico. En el directorio trabajo crear los subdirectorios unidad1 y unidad2. Cree en el subdirectorio unidad1 el archivo terminales, con informacin de los archivos de /dev cuyos nombres comiencen con los caracteres pt. Trabaje sin cambiarse de directorio. Cree el archivo nmeros cuya informacin sea el contenido del directorio /etc, en formato extendido, incluido el n de i-nodo de los archivos. Copie las lneas del archivo numeros que tengan la cadena de caracteres rwx-----x al archivo permisos en el directorio practico. En reemplazo de los puntos 3 y 4, cul sera la lnea de comandos necesaria para crear el archivo permisos en el directorio practico con una sola lnea de comando, es decir sin crear el archivo intermedio numeros. Posicinece en el directorio unidad2. Muestre por pantalla en forma paginada el directorio /home. Utilice nombre relativo y pipeline. Busque el archivo nmeros, en su rbol de directorios, y agregue el permiso de escritura a todos los usuarios del archivo. No utilice tubera. Cree el archivo procesos, en el directorio unidad2, que contenga informacin extendida referente a los procesos activos en el sistema. Realice un enlace duro al archivo procesos en el directorio trabajo, con el nombre pro-ln. Utilice nombre relativo. Cules son las caractersticas a destacar de un enlace duro? Realice una copia de respaldo en su directorio actual de los archivos creados en este practico, con el nombre copias.tar. Y luego comprima el archivo creado. Mostrar el contenido del archivo comprimido copia.tar.Z y luego descomprimirlo. Cambie los permisos al archivo pro-ln, de forma que el dueo tenga todos los permisos, el grupo pueda leerlo y modificarlo, los otros tengan negados sus permisos. (mtodo absoluto). Desde el directorio de login borre todos los archivos creados. (slo los archivos)
1. 2. 3. 4. 5. 6. 7.
mkdir trabajo practico mkdir trabajo/unidad1 trabajo/unidad2 ls /dev/pt* trabajo/unidad1/terminales ls li /etc > numeros grep ^.rwx-----x numeros > practico/permisos ls -li /etc | grep ^.rwx-----x > practico/permisos cd trabajo/unidad2 ls ../../.. | more find ~/ -name numeros exec chmod a+w {} \ la opcion exec permite especificar un comando de linux que se ejecutara tomando como argumento c/u de los archivos encontrados por el comando find. Coloque {} donde se insertar el nombre del archivo y agregue \ al final del comando para completar la sintaxis. Chmod se ejecutara en cada archivo llamado numeros. ps -aux > procesos ln procesos ../pro-ln tar cvf copia.tar ../unidad1/terminales ../../practico/permisos ../../numeros procesos compress copia.tar zcat copia.tar.Z uncompress copia.tar.Z chmod u=rwx,g=rw,o= ../pro-ln cd rm trabajo/unidad1/* rm trabajo/unidad2/* rm numeros rm practico/permisos
- 152 -
UTN - FRC
LINUX
1.
cd mkdir parcial ls -l /tmp >> parcial/lista ln -s parcial/lista lista-ls ls i parcial/lista cp parcial/lista lista ln parcial/lista lista-1 mv parcial/lista lista-2
2. 3. 4. 5. 6. 7. 8. 9.
ps -f
10. El campo PID muestra el nmero de proceso, y el campo PPID muestra el id del proceso padre. 11. ls /dev | less 12. chmod 444 lista 13. No se modifican los permisos del archivo lista-2, pues el archivo lista, generado en el punto 5, es una copia de parcial/lista y tiene distinto nodo-i. 14. El archivo lista-ls es un enlace simblico al archivo parcial/lista, que ya no existe, por lo tanto no lo encuentra.
- 153 -
UTN - FRC
LINUX: PRCTICO INTEGRADOR N 3
LINUX
Temas: Procesos, filtros, tuberas, redireccin de entrada/salida, usuarios. 1. Marque la salida de la siguiente lnea de comando: who >> usuarios A B 2. Los usuarios conectados al sistema El contenido del archivo usuarios who | tail -5 Las 5 ultimas lneas de salida del comando who. Ninguna de las anteriores C D El contenido del directorio padre Ninguna de las anteriores
Idem al anterior : A
Los 5 usuarios conectados al sistema dos C veces B Las 5 primeras de las 5 ultimas lneas de D salida del comando who. 3.
Dadas las siguientes lneas de comandos, marque la salida de la ltima lnea de comando: mv ../listado . more 10 ../listado A Listado de los archivos que comienzan C El contenido del directorio padre con lis* B El contenido del archivo listado D Mensaje de error: no encuentra el archivo Marque la salida de la siguiente lnea de comando: grep nd xyz | wc cl A Listado de las lneas del archivo xyz que C La cantidad de lneas y caracteres de comienzan con nd cada lnea que tiene la cadena nd. B Listado de las lneas del archivo xyz que D La cantidad de lneas y caracteres de contienen la cadena nd todas las lneas que tienen la cadena nd
4.
5.
Marque la salida de la siguiente lnea de comando: who | tail -10 | head 5 A Los 5 usuarios conectados al sistema C Las 5 ultimas y las 5 primeras lneas del dos veces comando who. B Las 5 primeras de las 10 ltimas lneas D Ninguna de las anteriores de salida del comando who.
6.
Marque el comando correcto para mostrar informacin detallada sobre el proceso N 5432 si es que est corriendo en su terminal: A Ps | grep 5432 B Ps aux >> grep 5432 C D ps -f | grep 5432 Ninguno de los anteriores
1. 2. 3. 4. 5. 6.
D C D D B C
- 154 -
UTN - FRC
LINUX
1. Crear un script que permita guardar en un archivo, el nombre y n de i-nodo de los archivos de un directorio especfico., ordenado por n de i-nodo. Utilice parmetros posicionales. Ejecute el archivo con sh o como ./nom_script. If test $# -eq 2 > /dev/null then if test -d $1 then ls -I $1 | sort n o $1 else ls -I $2 | sort -n o $1 fi else echo Ingrese correctamente los parmetros fi 2. Crear un script que: a) guarde el nombre de los archivos creados en la ltima hora de trabajo, que se encuentren en un directorio especfico. b) agregue al archivo informacin extendida de los procesos activos perteneciente a un usuario en particular. clear echo -n Ingrese el nombre del directorio: read d1 echo -n Ingrese el nombre del usuario: read us1 find $d1 -maxdepth 1 -amin -60 > info ps aux | grep $us1 >> info Ejecute el script con los siguientes directorios: /proc, /root, /rhome/alumno50, /dev. Analice la informacin contenida en el archivo info, luego de cada ejecucin. 3. Crear un script que le permita agregar informes sobre los procesos corriendo en su terminal a un archivo especfico, mientras ste exista. a) Ejecute el script en background. b) Verifique, con la orden ps f, la existencia del proceso en background. c) Analice la informacin contenida en el archivo. d) Borre el archivo de informes. e) Verifique, con la orden ps f, proceso en background haya terminado. while test -a $1 do ps >> $1 # el primer parmetro posicional es el nombre del #archivo donde guardamos los informes. done
- 155 -
LINUX
1. Crear un script de opciones, con los siguientes itens: - Comparar directorios (muestre los archivos comunes) Mover archivo. Informar sobre uso de la memoria. Informar sobre los Sistemas de archivos Montados. Salir. # Script de opciones : menuop while true do echo n Menu de opciones 1 Comparar directorios 2 _ Mover archivo 3 _ Informe de memoria 4 _ Informe Sist. Montados 5 _ Salir Ingrese opcin: read resp case $resp in 1 | c) echo n Ingrese el nombre de un directorio: read d1 echo echo n Ingrese el nombre de otro directorio: read d2 cd $d1 ls 1 $d2 > dire for i in `ls -1` do if grep $I dire > /dev/null then echo $i esta en ambos directorios fi done read a;; 2 | v) echo n Ingrese el nombre del archivo a mover: read a1 echo -n Directorio destino: read a2 (find / name $a1> /dev/null && mv $a1 $a2; echo listo) || echo no se $a1 read a;; 3 | i) free -m read a;; 4 | m) mount read a;; 5 | s) exit esac done
encontro
- 156 -
LINUX
1) Explique qu hace la lnea 04 del script shell. # _______________________________________ 01 _______________________________________ 02 03 _______________________________________ 04 _______________________________________ 05 06 07 2) Qu ve el operador en pantalla si selecciona 08 la opcin 1 del men? 09 _______________________________________ 10 _______________________________________ 11 _______________________________________ 12 13 _______________________________________ 14 _______________________________________ 15 16 _______________________________________ 17 18 19 3) Explique el funcionamiento del bloque entre 20 las lneas 19 y 21. _______________________________________ 21 22 ______________________________________ 23 _______________________________________ 24 _______________________________________ 25 26 _______________________________________ 27 _______________________________________ 28 _______________________________________
Instrucciones #!/bin/bash # Script Recuperatorio 2 2003 2k10 # ----------------------------------------------PATH= . : $PATH ; export PATH opcion=9 clear while true do echo 1. Procesos en ejecucin. echo 2. Fecha del da. echo 3. Espacio en disco. echo ----------------------------------- echo 9. Finaliza echo ----------------------------------- echo e Su opcin: \a\c read opcion case $opcion in 1) clear ; top ; read nada ;; 2) batch < script1.sh ;; # El archivo script1.sh contiene (sin #): # clear ;echo Hoy es `date` ;read nada 3) clear ; df ; read nada ;; 9) break ;; *) echo e \n $opcion ??? \a read nada ;; esac done
4) Qu significa SPOOL y para qu se lo utiliza en UNIX? 5) Explique el funcionamiento de la instruccin for del shell de UNIX y de un ejemplo de uso.
- 157 -
LINUX
Tema: Permisos, filtros, memoria, procesos, variables del shell 1. Crear un subdirectorio cuyo nombre sea su nmero de legajo. Realice el examen en ste subdirectorio. 2. Copiar el contenido del archivo /etc/passwd con el nombre lista. 3. Modifique los permisos del archivo lista de forma tal que la ejecucin de la siguiente orden le de error: ls >> lista 4. Explique brevemente el modo numrico del comando chmod. Ejemplifique 5. La salida de la siguiente lnea de comando muestra: (who >> usuarios ; cp usuarios ..) && ls / a. Los usuarios conectados al sistema b. El contenido del directorio padre c. El contenido del archivo usuarios d. Ninguna de las anteriores 6. El comando para verificar que el usuario alumno12 est conectado es: a. grep alumno12 who | echo usuario alumno12 conectado b. (who | grep alunmo12) && echo usuario alumno12 conec. c. (who ; grep alumno12) && echo usuario alumno12 conectado d. who | write alumno12 && grep alumno12 7. El comando para buscar ,en background, el archivo alturas en el file system mientras edita el archivo menu es: a. find / altura && vi menu b. find / -name alturas > ruta & ; vi menu c. vi menu | grep altura d. grep / -name alturas > ruta & ; vi menu 8. El directorio /proc: a. es un sistema de archivos virtual. b. Sus archivos tiene 0 bytes de tamao. c. Sus archivos estan asociados a los dispositivos perifricos. d. Sus archivos estan asociados a los procesos activos. 9. El comando que clasifique por nmero de i-nodo los archivos de su directorio de conexin, es: a. sort -n | ls i ~/ b. ls -i ~/ | sort -n c. find / -user $LOGNAME | sort -n d. ls i | grep 160179 10. Relacione: a renice b /var/spool/lpd c swap d jobs e lp f Kill -9 g PRINTER h $? i SHELL J free K Mke2fs /dev/fd0H1440 L Pipeline M /dev/hda2 Visualiza procesos que se estn ejecutando en background. Nombre por defecto del dispositivo impresora. Guarda el nombre de la impresora definida por defecto Almacena el estado de salida del ltimo comando ejecutado. Crea un sistema de archivos en un disquete. Directorio raz de la cola de impresin. Archivo de bloque. Asigna prioridad a un proceso. Fuera la terminacin del procesos. rea que alberga pginas de memoria RAM Comunicacin de procesos Indica la ruta absoluta al programa interprete de comandos. Muestra la cantidad total de memoria fsica y de intercambio.
- 158 -
LINUX
1.Si su sesin de trabajo termina a las 20hs., deje en un archivo en su correo: A un listado de los archivos que contiene de directorio de conexin. B un listado de los usuario conectados al sistema. Muestre por pantalla las tareas planificadas. (Planificacin de procesos) 2. Defina y ejemplifique las siguientes variables del shell: HOME: ................................................................................................................ SHELL: ............................................................................................................... LOGNAME: ........................................................................................................ PATH: . MAIL: . 3. Explique el tema parmetro posicional, diga cmo los utiliza el shell. 4. Crear un shellscript que permita agregarle a todos los archivos de un directorio (slo a los archivos) la extensin .c Utilice parmetros posicionales. 5. Crear un shellscript que controle e informe sobre el nmero de terminales abiertas por un usuario, stas no pueden ser ms de 4. 6. Muestre un informe completo (paginado) de los procesos que estn corriendo en el sistema. Explique su contenido. 7. Explique que informacin tiene la variable especial $? Y cmo la utiliza el shell. 8. Busque el archivo examen, a partir de su directorio padre, cuyo dueo es el usuario alumno38. 9. Genere un archivo de control que contenga un informe completo sobre los proces os, memoria utilizada y paginada. Realice la tarea cada 30 segundos y por el lapso de 5 minutos. Realice esta tarea en background.
- 159 -
UTN - FRC
LINUX
Apndice I
- 160 -
UTN - FRC
LINUX
Metacaracteres
En Linux, los comandos utilizan una serie de caracteres especiales o comodines, que en combinacin con literales alfanumricos, permiten manejar varios archivos utilizando, en la lnea de comandos, secuencias de escritura muy cortas. El usuario puede introducir en cualquier comando uno o varios patrones, es decir, una palabra que contiene uno o varios comodines, y el shell sustituir cada patrn por una lista de todos los nombres de archivo que coinciden con ese patrn. Los comandos nunca ven los metacaracteres o comodines. Los nombres de los archivos pueden expresarse de una manera genrica de tal manera que definan un cierto tipo de archivo (basado en los nombres de los archivos), ms bien que referirse a nombres particulares. En la siguiente tabla planteamos los comodines de mayor uso: ? [ccc] [!ccc] ; \ ... ... `...` # Tabla 2. Metacaracteres del shell Coincide con ninguno o con varios caracteres Coincide con cualquier carcter individual Coincide con cualquiera de las alternativas de caracteres entre corchetes. Son legales los intervalos [0-9] o [ a-z ]. Coincide con cualquier carcter excepto aquellos entre corchetes. Termina comando: comando1;comando2 Toma literalmente el carcter que le sigue. Toma literalmente el conjunto de caracteres entre las comillas. Toma literalmente el conjunto de caracteres entre las comillas, excepto $, \, `...`. Ejecuta el comando que est encomillado. Indica que el conjunto de caracteres siguiente, es un comentario.
El comodn asterisco *
El asterisco es uno de los comodines ms usados que coincide con cero o todos los caracteres. Es decir que el patrn S.*z podra corresponder a la cadena S.z. Por ejemplo: ls docu .* el comando ls entrega una listado de todos los archivos que se llamen docu, cualquiera sea su extensin. ls *.txt en este caso, el comando ls entrega una listado de todos los archivos cuya extensin sea .txt.
El comodn ?
Este comodn reemplaza a cualquier carcter individual que est en la posicin, dentro de la cadena, donde se encuentra el comodn. Por ejemplo:
cp dato? ..
El shell crea la lista en orden alfabtico de todos los archivos que encuentre en el directorio actual, cuyo nombre sea por ejemplo dato1, datoc, dato5, datof, etc, y recin entonces la pasa a cp. El comando cp nunca ve el ?. La bsqueda que realiza el shell en el directorio actual genera una lista de cadenas que se pasa al comando cp, el comando cp copia la lista de archivos al directorio padre. Es decir, que el comodn ?, reemplaza a cualquier carcter que est en esa posicin. cp dat?? ..
- 161 -
UTN - FRC
LINUX
en este caso, se copian todos los archivos que se encuentren en el directorio actual, cuyo nombre sea por ejemplo dato1, dat2c, dat35, datff, etc, al directorio padre. Es decir, que en los ltimos dos caracteres del nombre de los archivos que comienzan con dat, puede haber cualquier combinacin de caracteres alfanumricos.
Comillas simples
...
Toma literalmente el conjunto de caracteres entre las comillas, es decir que no interpreta los caracteres especiales que se hayan incluido en la cadena delimitada por las comillas simples. Por ejemplo: $ echo Las rutas de bsqueda son: $PATH Las rutas de bsqueda son: $PATH El comando echo repiti la cadena de caracteres ingresada, sin que el shell haga alguna interpretacin.
- 162 -
UTN - FRC
LINUX
Apndice II
- 163 -
LINUX
Un editor de texto nos permite crear y modificar archivos de texto que contiene palabras y caracteres que fueron escritos desde el teclado, pero no dispone de los caracteres especiales del idioma castellano(acentos, ees, etc.). No debemos confundir un editor de textos con un procesador de texto, este ltimo no solo permite editar textos sino que tambin nos da la posibilidad de modificar la presentacin del mismo a travs de la seleccin del tipo de fuente y estilo. En Linux todo usuario debe conocer los comandos bsicos para editar archivos con vi, ya que es un editor que siempre est disponible en todos los sistemas Unix, y tiene una ventaja muy importante, y es que permite desde l mismo invocar todas las ordenes del shell, otorgando gran flexibilidad al depurar programas y ejecutarlos. Este apndice tiene como objetivo mostrar las bases para utilizar el editor vi y editar cualquier archivo. Como iniciar vi ? Para utilizar este editor de textos solo es necesario especificar el nombre de archivo a editar, indicando la ruta de acceso al mismo si el archivo se encuentra en otro subdirectorio. Si el archivo todava no existe, vi lo crear en ese momento. La sintaxis es la siguiente: $ vi nombre_de_archivo La pantalla se despejar en ese momento y mostrar el contenido del archivo. Basndonos en una pantalla tpica de 24 lneas. La estructura de la pantalla con vi tendr las siguientes secciones : Lneas de contenido del archivo Lneas con una guin () indicando lneas sin texto, que solo aparecern en caso que el texto no supere la cantidad de lneas mximas de la pantalla. Una lnea en la parte inferior para introducir comandos vi, que se muestra con dos puntos (:) . Por ejemplo: $ vi cumpleaos Luciana 12 de Mayo Pablo 25 de Abril Julieta 3 de Noviembre Ariel 12 de Julio En este archivo tenemos 4 lneas de texto, la cuarta lnea es el fin del archivo y las 19 lneas restantes no poseen texto y se muestran con guin. Si estamos creando un archivo todas las lneas comenzaran con () lo que indica que son lneas mas all del fin de archivo. Si por el contrario el archivo ya existe solo mostrar con () las lneas que no posean texto o caracteres. Pero siempre como ultima, una lnea libre para introducir comandos. Editar un archivo con el editor vi nos presenta tres posibilidades de trabajo, a esto se lo llama Modos y son los siguientes: MODO INSERCIN Este modo nos permite escribir un texto. Se debe introducir i o a para activar el modo Insertar. En el cual introduciremos el texto. Ing. Allende Ing. Serna - 164 -
UTN - FRC
LINUX
Con la opcin i todo texto se introduce a la izquierda de la posicin de cursor. Con la opcin a todo texto se inserta a la derecha de la posicin del cursor. Con la opcin A se aade texto al final de una lnea. Con la opcin o se inserta una lnea en blanco debajo de la lnea activa. Con la opcin O se inserta una lnea en blanco arriba de la lnea activa. En este modo se ve lo que se escribe y se pulsa Esc para desactivar el modo Insertar y con esto se vuelve al modo Comando. MODO COMANDO En este modo los caracteres ingresados son interpretados por el vi como comandos, es decir que cada letra o carcter que se escribe es un comando vi que hace que ocurra alguna accin, por lo tanto lo que se escribe no se ve en pantalla.
Borrar utilizando los comandos x y dd El comando x borra un carcter donde est posicionado el cursor El comando dd borra la lnea actual. Es posible pasarle a este comando el parmetro de la cantidad de lneas a borrar. Por ejemplo: 4dd Esto provoca borrar 4 lneas a borrar a partir de donde se encuentra posicionado el cursor. Juntar lneas usando J A diferencia de otros editores, vi no tiene carcter de final de lnea que se borre para juntar dos lneas, por lo que si desea hacer esto, solo debe utilizar el comando J, ubicando el cursor partir de la lnea que desee juntar Deshacer cambios con el comando u Vi recuerda la ltima insercin, eliminacin o modificacin que se hizo. Si queremos deshacerla, se debe introducir el comando u. No es necesario estar cerca de la lnea donde se hizo el cambio cuando ejecuta el comando u. Los comandos para desplazar el cursor son ignorados por u por lo que no se pueden deshacer.
- 165 -
UTN - FRC
LINUX
El editor vi en su modo comando tambin permite el acceso a otros comandos adicionales y mas complejos. Estando en el modo Insertar para ingresar debemos presiona la tecla Esc y luego escribimos dos puntos (:). Estando en el modo comando solo escribimos dos puntos (:). Algunas de la opciones son: Ver el nombre del archivo, el tamao y donde est. Utilizar el comando : f muestra el archivo que se est editando, en qu lnea se encuentra el cursor y cuntas lneas tiene. Por ejemplo: :f Informe8 [Modified] line 43 of 145 - - 32% - - col 1 Ctrl+G es una alternativa que muestra la misma informacin que :f. Guardar el trabajo Tenga en cuenta que cuando trabajamos con vi, los contenidos de los archivos son ledos en el espacio de trabajo de vi (memoria) y es necesario guardar la modificaciones realizadas para que los cambios sobre un archivo sean tomados. Para ello utilice el comando w para guardar el archivo el trabajo actual en un archivo en disco de la siguiente forma: : w nombre_de_archivo Si est realizando muchos cambios en una sesin vi, es prudente guardar el archivo peridicamente. En ese caso introduzca : w , pero si desea guardar el trabajo en un archivo diferente al que se est editando debe hacerlo con: : w nombre_archivo_nuevo Como salir de vi El comando : w q graba el archivo y sale del editor de textos Otra opcin del comando :wq es el comando ZZ. En caso de abortar los cambios Si los cambios realizados sobre un archivo, no son de nuestro agrado, podemos desecharlos con el comando :q! , que no toma los cambios realizados y sale del editor vi, volviendo al indicador del shell. Ejecutar comandos del Shell Si despus de los dos puntos (:) presionamos !Comando, podremos ejecutar comandos del shell. Por ejemplo: : !ls /bin Esto permitir que ejecute cualquier comando externo de linux sin salir del editor Comandos de bsqueda de textos :/texto/ busca un texto hacia delante, es decir a partir de donde se encuentra posicionado el cursor hasta el final del archivo :?texto? archivo busca un texto hacia atrs, o sea desde la posicin del cursor al comienzo del
- 166 -
UTN - FRC
LINUX
Comandos de sustitucin de cadenas A continuacin de los dos puntos (:) podremos ejecutar comandos de bsqueda o sustitucin de cadenas, de la siguiente forma: :1,$ s/cadena1/cadena2 Este comando sustituye la cadena1 por la cadena2 solo en la primera ocurrencia :1,$ s/cadena1/cadena2/g Con la opcin g agregada a la anterior, realizar la sustitucin de la cadena1 por la cadena2 en todas la ocurrencias que se produzcan en el archivo. Para completar cualquier comando que comience con dos puntos (:) Pulse Enter
- 167 -
UTN - FRC
LINUX
Bibliografa
1. Administracin de Red Hat Linux al descubierto - Thomas Schenk et al (Edit. Prentice Hall 2001) 2. Aprendiendo Linux - Gua en 10 minutos (Edit. Prentice Hall - 2000) John Ray -
3. Apunte Curso: Linux a fondo - Oscar Espeche (Extencin Universitaria- UTN FRC 2002) 4. Cmo Trabajar con Unix (Edicin - 1998) - Remiro del Caz - Luis Tomas Wayar
5. Compumagazine Linux- Manual de Referencia (PC Forum SA - 1999) 6. El Entorno de programacin Unix (Edit. Prentice Hall - 1987)
7. El Sistema Operativo Unix. Introduccin y aplicaciones (Edit. Marcombo 1988) 8. La Biblia de Red Hat Linux 6 - Arman Danesh (Edit. ANAYA - 1999) 9. Linux - Jack Tackett Jr Steve Burnett. (Edit. Prentice Hall - 1999)
10. Linux Instalacin, administracin y uso del sistema - Vicente J. Blanco (Edit. Rama 1996) 11. Linux- Suse 6.3 . Instalacin, Configuracin y primeros pasos - Suse GmbH (Edit. Suse - 1999) 12. Manual de ayuda en lnea de Red Hat Linux v 6.2 13. Red Hat 9 - Gua de Referencia y Gua del Usuario en Internet - 2003 14. Red Hat Linux 6.1. - Juan Carlos Espinosa (Edit. Alfaomega-Marcombo - 2000) 15. Serie Prctica Unix - Steve Moritsugu y DTR Business System, Inc. (Edit. Prentice Hall - 2000) 16. Sistemas Operativos - Willian Stallings (Edit. Prentice Hall - 1997) 17. Sistemas Operativos Modernos Andrew S. Tanenbaum (Edit. Prentice Hall 1993) 18. Programacin en Linux , con ejemplos - Kurt Wall (Edit. Prentice Hall - 2000)
- 168 -
UTN - FRC
LINUX
- 169 -