Está en la página 1de 169

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

-1-

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

-2-

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX
Primeros conceptos

Ing. Allende Ing. Serna

-3-

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

-4-

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

-6-

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Requerimientos del sistema


Linux tiene menos requisitos de hardware, para realizar ms funciones, que Windows 98 o
NT estndar. Por ej., un 486 a 100MHz y 16 Mb de RAM puede ser utilizada como una estacin
de trabajo. Este sistema es capaz de ejecutar X Window , acceder a Internet y actuar como
servidor de una red local.
Si le interesa utilizar el sistema Linux con mayores prestaciones deber contar con los
siguientes componentes:
Una CPU de la familia de los Pentium, mnimo de 133MHz.
32 Mbytes de RAM son suficientes para el funcionamiento de una estacin normal. Pero
con 64 Mb obtendremos una clara diferencia en el rendimiento general del sistema.
Disco duro de 2GB, los discos grandes ofrecen mejores prestaciones.
Una tarjeta de video para la que existan controladores disponibles.
X Window puede funcionar con tan solo 4 MB de RAM, pero su desempeo ser mucho
ms lento. Algunas aplicaciones para X Window pueden necesitar 16 MB, 32 MB o 64 MB de
RAM, como es el caso de Netscape Communicator 4.7.
Si desea instalar Linux en su PC con las suficientes aplicaciones para ser totalmente
funcional y productivo y contar con el espacio necesario para instalar un paquete de oficina (como
StarOffice 5.1) y trabajar con sus archivos, es recomendable contar con al menos 1.2 GB de
espacio en disco, al menos 32 MB de RAM y un microprocesador AMD K6, K6-II, K6-III, Pentium,
Pentium MMX, Pentium II, Pentium III, o Cyrix MII .
Si usted posee hardware casi obsoleto tenga en cuenta que se puede ejecutar Linux en un
386 con slo 4Mb de RAM, es decir que instalaremos un Linux mnimo. Sin embargo una mquina
as tendr las siguientes limitaciones:
No podr ejecutar la interfaz grfica ( X- Window System).
Habr un nmero reducido de programas en multitarea.
El bajo rendimiento evitar el uso del sistema para determinadas tareas crticas. Ej: como
servidor de red o de correo.
No obstante, esta mnima configuracin nos permitir utilizar el sistema como terminal de
un servidor Linux o Unix y como servidor de bajo rendimiento para servicios como DNS
(Domain Name Server) o servidor de comprobacin para una red pequea.

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.

Ing. Allende Ing. Serna

-7-

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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
Bibliotecas

cepos
Nivel de Usuario
Nivel del Ncleo
Interfaz de llamada al sistema

Comunicacin
entre procesos
Subsistemas de Archivos

Subsistemas
de Control de
Procesos

Planificador
Gestin de
Memoria

Cache de Buffers

Caracteres

Bloques

Controladores de Dispositivos

Control de Hardware
Nivel del Ncleo
Nivel del Hardware
Hardware

Fig. 1. Diagrama de bloques del ncleo de un sistema UNIX-LINUX Stallings

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

Ctedra: Sistemas Operativos

Versiones del Kernel


Existen dos versiones del Linux kernel:
Versin de produccin: La versin de produccin, es la versin estable hasta el momento. Esta
versin es el resultado final de las versiones de desarrollo o experimentales.
Cuando el equipo de desarrollo del kernel experimental, decide que ha conseguido un
kernel estable y con la suficiente calidad, se lanza una nueva versin de produccin o estable.
Esta versin es la que se debera utilizar para un uso normal del sistema, ya que son las versiones
consideradas mas estables y libres de fallos en el momento de su lanzamiento.
Versin de desarrollo: Esta versin es experimental y es la que utilizan los desarrolladores para
programar, comprobar y verificar nuevas caractersticas, correcciones, etc. Estos ncleos suelen
ser inestables y no se deberan usar, a no ser que sepas lo que haces.
Como interpretar los nmeros de las versiones:

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.

Unos ejemplos nos ayudaran a entenderlo mejor:

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

Ing. Allende Ing. Serna

-9-

UTN - FRC

bsh: Bourne Shell

bash: Bourne Again Shell

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 10 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

5. Cuales son las interfaces posibles de Linux?

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.

VF

5. Las siguientes son distribuciones de Linux:


a. RedHat
b. Conectiva
c. Karatte
d. Caldera
e. AutoLink
f. Suse

Ing. Allende Ing. Serna

- 11 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

2
Entrada al Sistema

Ing. Allende Ing. Serna

- 12 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

El concepto de arranque en Linux


Al encender la computadora, luego de realizar los chequeos de rutina, se carga el kernel
desde el disco rgido. El Kernel toma el mando de todo el hardware, lee los valores
predeterminados de la BIOS e inicializa las interfaces elementales de la placa base. Acto seguido
realiza la carga del Files-system, es decir que monta la particin raz al directorio /.
El Kernel establece sus tablas y realiza una serie de procesos internos antes de llamar al
proceso init . Estos procesos internos son los que tienen PID (identificador de proceso) negativo.
El proceso init tiene PID igual a uno, y lo podemos considerar como el padre de todos los
procesos. Es el que realiza realmente la inicializacin del sistema. Como lo ejecuta directamente
el kernel, init no puede ser interrumpido ni an por la seal 9, que se utiliza para interrumpir
cualquier proceso.
Init lee el fichero de configuracin /etc/inittab desde donde ejecuta diferentes procesos.
En cada terminal virtual, init ejecuta un proceso /etc/getty, que dispone la terminal para que el
usuario pueda conectarse. Para ello getty arranca el proceso login.
Desde el archivo de configuracin inittab, init ejecuta los procesos rc. Existen varios rc
ubicados en /etc. Estos procesos ejecutan comandos de inicializacin como por ejemplo montar
sistemas de archivos, inicializar el espacio de intercambio (swap), configurar la red y arrancar los
demonios; es decir, lleva al sistema a un entado en el que puede recibir ordenes de los usuarios.
Por ejemplo, /etc/rc.d/init.d/network arranca las interfaces de red.
Sencillamente el archivo /etc/sysconfig/init controla cmo el sistema aparecer y funcionar
durante el momento de arranque.
Se usan los siguientes valores:
BOOTUP=<value>, donde <value> es uno de los siguientes:
BOOTUP=color significa el color estndar del despliegue al momento de arranque,
donde el xito o falla de dispositivos y servicios al iniciarse es mostrado en diferentes
colores.
BOOTUP=verbose es un tipo de despliegue viejo, que provee de ms informacin que
el simple mensaje de xito o falla.
Cualquier otra cosa significa un nuevo despliegue, pero sin el formato ANSI.
RES_COL=<value>, donde <value> es el nmero de la columna de la pantalla para
comenzar las etiquetas de estado. Predeterminado a 60.
MOVE_TO_COL=<value>, donde <value> mueve el cursor al valor en la lnea RES_COL a
travs del comando echo -en.
SETCOLOR_SUCCESS=<value>, donde <value> coloca el color a un color que indica el
xito a travs del comando echo -en. El color predeterminado es verde.
SETCOLOR_FAILURE=<value>, donde <value> configura el color a un color que indica la
falla a travs del comando echo -en. El color predeterminado es rojo.
SETCOLOR_WARNING=<value>, donde <value> coloca el color para indicar advertencia a
travs del comando echo -en. Por defecto el color es amarillo.
SETCOLOR_NORMAL=<value>, donde <value> reconfigura el color a "normal" a travs de
echo.
LOGLEVEL=<value>, donde <value> configura el nivel de conexin de la consola inicial
para el kernel. El valor por defecto es 3; 8 significa cualquier cosa (incluyendo depuracin);
1 significa pnico del kernel. El demonio syslogd ignora esta configuracin una vez que se
ha arrancado.
PROMPT=<value>, donde <value> es uno de los siguientes valores boleanos:
yes Activa la verificacin de claves para el modo interactivo.
no Desactiva la verificacin de claves para el modo interactivo.

Ing. Allende Ing. Serna

- 13 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Cierre del sistema


Antes de apagar la mquina (servidor) deber ejecutar el comando shutdown, que enva
un aviso de cierre del sistema a los usuarios que estn conectados, y enva una seal a los
procesos activos, dndoles tiempo para almacenar sus datos. Cumplido ste tiempo los mata con
la orden kill.
No es conveniente apagar la mquina sin la ejecucin de sta orden pues debemos dar
tiempo al ncleo del sistema operativo de guardar en el disco toda la informacin que est en
memoria, como puede ser, archivos abiertos y actualizados. Linux tambin mueve y actualiza
archivos bsicos del sistema por lo que al apagar directamente la mquina podr daar stos
archivos y el sistema Linux tendr problemas luego para ejecutarse.
La estructura de la orden de cierre es la siguiente:
shutdown -t segundos -opciones] tiempo mensaje de aviso
El mensaje de aviso de cierre del sistema comienza por Broadcast Message a todos
los usuarios conectados. Luego por defecto, shutdow hace una pausa de 60 segundos antes de
continuar con el proceso de desconexin. Podemos cambiar este intervalo de tiempo con la
opcin t y nmero de seguntos de espera:
# /sbin/shutdown -t180
Ing. Allende Ing. Serna

- 14 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 15 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Formato de la lnea de comandos


Antes de conocer los comandos de Linux su formato, se hace necesario saber primero
Qu es un comando?.
Para linux, un comando es cualquier archivo ejecutable. Por lo que cada usuario puede
construir archivos con una estructura especial que le permita ser ejecutados, y aadirlo a su lista
de comandos.
Linux utiliza un formato sencillo para la lnea de comandos , en donde la mayora de ellos
est formado por slo dos letras. El formato general es:
Comando -opciones argumento1 argumento2

El nombre del comando es siempre necesario.


Los comandos siempre van escritos en letra minscula y la mayora de las opciones
tambin.
Las opciones son caracteres o adverbios que siempre van precedidos de un guin.
Los argumentos pueden o no ser necesarios, sin embargo los nombres de archivos
que especifique pueden ser rutas de acceso relativas o absolutas. Por ejemplo: ls
../../dev
En los argumentos podemos utilizar metacaracteres, como son * y ?.

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

Ing. Allende Ing. Serna

- 16 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 17 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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?
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?

Ing. Allende Ing. Serna

- 18 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

3
Conociendo el Sistema de Archivos
(File System)

Ing. Allende Ing. Serna

- 19 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 File System de Linux


En Linux (como en cualquier Sistema Operativo) se puede diferenciar el sistema de
archivos que est almacenado en las particiones del disco y otros dispositivos, y el sistema de
archivos tal y como lo presenta al usuario un equipo ejecutando Linux como software de base. En
Linux se monta un sistema de archivos de disco en el sistema de archivos del equipo en
funcionamiento.
Un disco duro no es ms que un gran espacio sobre el que se puede escribir unos y ceros.
Un sistema de archivos impone cierta estructura en ello, y hace que parezca que hay archivos
dentro de directorios, y directorios dentro de directorios. Cada archivo se representa por un i-nodo,
que contiene informacin de a quin pertenece el archivo, cundo se cre y dnde encontrar su
contenido. Los directorios tambin se representan por medio de i-nodos, pero estos contienen
informacin sobre dnde encontrar los i-nodos de los archivos que estn en el directorio.
Por ejemplo, si el sistema quiere leer /home/mara/imagen1.jpg primero busca el i-nodo del
directorio raz / , luego busca el i-nodo del directorio home en el contenido de /, luego busca el
i-nodo del directorio mara en el contenido de /home, luego el i-nodo de imagen1.jpg que le dir
qu bloques del disco leer.
La facultad que tienen los directorios de poder contener, a su vez, otros directorios
(denominados subdirectorios) permite una organizacin o estructura jerrquica con la forma de un
rbol invertido. El directorio inicial de esa jerarqua se denomina directorio raz y se simboliza con
una barra de divisin (/).
En Linux la palabra raz se utiliza para denominar dos conceptos. Uno es el usuario raz
(user root) la persona con control absoluto en la administracin del sistema. El otro es el concepto
de directorio raz: un directorio especfico que se considera la base del sistema de archivos.
Cada file system pertenece a una clase o tipo que define la caracterstica administrativa.
As como Windows 9x, usa FAT, y Windows NT hace lo suyo con NTFS, el LINUX en particular
adopta el sistema de archivo Ext2 . Aparte con este sistema de archivos Linux puede manejar los
antiguos minix y ext y otros sistemas no propios de Linux como los sistemas Fat de MS-DOS y
Windows y el sistema iso9660 de los CD-Rom.

Caractersticas de Ext2 (Extended File System 2)

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

Ing. Allende Ing. Serna

- 20 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Organizacin de los directorios


Se denomina root file system al sistema de archivos que contiene al sistema operativo y
los directorios y archivos que se distribuyen con el mismo.
En todas las distribuciones de Linux (incluso con las distintas versiones), todo parte del
directorio raz ( / ) del que cuelgan los dems directorios. Los ms importantes se enumeran a
continuacin, explicando lo que contienen:
/bin: contiene los archivos ejecutables bsicos que constituyen las herramientas elementales para
trabajar
/lib: contiene las libreras de los lenguajes instalados como por ejemplo el lenguaje C.
/etc: contiene todos los archivos de configuracin de la mayora de los programas, as como los
scripts de inicio del sistema.
/dev: contiene los archivos que permiten acceder a los dispositivos (hardware) del sistema.
/usr: contiene una gran cantidad de software que se emplea para ejecutar los programas que
demandan los usuarios. Es para archivos que puedan ser compartidos en todo el
sistema(red). Es recomendable que este directorio tenga su propia particin y sea montable
en slo lectura.
/var: contiene los archivos de datos variables. Esto incluye archivos y directorios spool, datos de
administracin, de registro y archivos temporales.
/tmp: se usa para almacenar archivos que permanecern temporalmente en el sistema.
/mnt: se usa como raz de los directorios destinados a trabajar como puntos de montaje de los
distintos file system que se montan en el sistema, por ejemplo CD-ROMs y disquetes.
/home: se usa como directorio raz de los directorios privados de los usuarios. Cada usuario
normalmente tiene asignado un directorio que lleva su nombre, donde tiene todos los
permisos que le posibilitan realizar casi todas las operaciones con archivos y sub-directorios.
/proc: es un directorio virtual que se crea en la memoria, donde se organiza cierta informacin relativa a la ejecucin de los procesos- que maneja el sistema en el momento actual.
/sbin: contiene los archivos ejecutables para el supervisor o root
/boot: Contiene los archivos necesario para el arranque del sistema, sin embargo su existencia es
opcional pues estos archivos podr esta en el directorio raz.
Linux le permitir obtener un listado de los archivos de casi cualquier directorio (excepto de
aquellos que no tienen permiso para ser accedidos).
Para visualizar el contenido de un directorio utilizamos el comando ls
Por Ej.
# ls /
bin
lib
etc
dev
usr
var
tmp
mnt
home proc sbin
La ejecucin de este comando nos muestra el contenido del directorio raz que mencionamos
anteriormente.
Ahora obtengamos un listado de los archivos del directorio usr que esta dentro de /
$ ls /usr
bin
X11R6
include
lib
local
games
sbin
Como vemos este directorio contiene a su vez otro rbol de directorios propio donde:
Ing. Allende Ing. Serna

- 21 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

/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 conexin o Home Directory


El shell de inicio de sesin del usuario tiene un directorio de inicio de sesin con el
nombre de usuario, que se encuentra por debajo /home. Por ejemplo si tenemos los siguientes
usuarios: ana, luis, mara, por debajo de /home tendremos 3 subdirectorios de esta forma:
/home/ ana
/home/ luis
/home/ mara
Desde el punto de vista de la navegacin por el sistema de archivos, estos directorios son
idnticos al resto, pero son importantes porque al iniciar su sesin, cada usuario es ubicado en
ese punto del file system, luego el usuario podr desplazarse por los demas directorios, de
acuerdo a los permisos que le hayan otorgado.

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/

Trayectorias o rutas de acceso


Una trayectoria o ruta de acceso no es ms que un camino capaz de designar la ubicacin
de un archivo o directorio en el que estamos trabajando.
Se pueden clasificar en trayectorias (rutas de acceso) absolutas o relativas.
Las trayectorias absolutas comienzan siempre en el directorio raz (comenzarn con el smbolo
/) y contina con los directorios que hay que recorrer hasta llegar al archivo buscado, con el
smbolo / entre los componentes de la ruta.
Si se desea ejecutar el programa C++ que se encuentra en el subdirectorio /usr/bin se
deber definir la trayectoria absoluta del archivo en cuestin .
$ /usr/bin/c++
Otra forma de ejecutar el archivo C++ es cambiar de directorio de trabajo y luego ejecutar
el programa. Para ello existe el comando cd que nos permite desplazarnos o cambiar de un
directorio a otro. Finalmente la secuencia de comandos ser la siguiente:
Ing. Allende Ing. Serna

- 22 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

$ cd usr/bin
$ c++
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
/
(raz)

dev

home

bin

/ raz

ana

ome
luis

mara

/ raz

ome
texto

datos

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.

Recorriendo el File System


A partir de ahora se har una breve recorrida a algunos componentes del File System o
directorio raz para ello utilizaremos el comando ls con la opcin l que nos muestra un listado
extendido del contenido de un directorio.
Ing. Allende Ing. Serna

- 23 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 24 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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?__________________________________________

Ing. Allende Ing. Serna

- 25 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

9. Y cual es la trayectoria relativa, si su directorio de trabajo es /usr/bin/?

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

Ing. Allende Ing. Serna

- 26 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

4
Manejo de Archivos

Ing. Allende Ing. Serna

- 27 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 28 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Implantacin de archivos (i-nodo)


Al momento de crear un nuevo archivo el sistema le otorga a ste un nmero que es fijo y
nico: el i-nodo. Crea a su vez una entrada en la tabla de directorio donde va a estar ubicado el
archivo. Esta entrada de directorio en Linux consta del nombre del archivo y de un nmero
denominado i-nodo, que es nico para cada archivo. Es la ficha administrativa o estructura que
contiene los datos que permiten administrar al archivo. Este i-nodo contiene los atributos de
archivo o sub-directorio y los punteros que permiten localizar en orden cada uno de los bloques
del archivo o sub-directorio en el disco.
Bytes 2

14
Nombre de archivo

Nmero de
nodo-i

Fig. 2 . Una entrada de directorio en Linux Tanenbaum

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

modo

**

bin

tamao
tiempo

30

erik

51

jim

modo

26

**

**

dick

tamao
tiempo

19

64

grants

92

books

dev
lib

usr

26

home

45

tmp

La bsqueda por
resultado en el nodoi6

El nodo-i 6 indica
que /home est
en el bloque 132

El bloque 406 es para el


directorio
/home/usuarioxx

14

132

El nodo-i 26
corresponde a
/home/usuarioxx

60

texto

usuarioxx

81

monix

bal

17

src

/home/usuarioxx
corresponde al
nodo-i 26

406

El nodo-i 26 indica
que
/home/usuarioxx
est en el bloque
406

/home/usuarioxx/texto
corresponde al nodo-i 60

Fig. 3. Pasos en la bsqueda de /home/usuarioxx/texto Tanenbaum

Ing. Allende Ing. Serna

- 29 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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

Crear archivos - cat


La forma ms sencilla de crear un archivo es utilizando el comando cat, que tambin nos
permite ver el contenido un archivo y concatenar archivos, pero lo que nos interesa es que cat
junto con el concepto de redireccionamiento, nos permite crear archivos de la siguiente forma:
$ cat > nom-archivo
El comando cat toma datos de la entrada estandar (el teclado) y los redirecciona (los
guarda) a un archivo. En ste caso el usuario puede tipear todas las lneas necesarias y

Ing. Allende Ing. Serna

- 31 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Crear Directorios - mkdir


Para crear un directorio se utiliza el comando mkdir .

Ing. Allende Ing. Serna

- 32 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

$ mkdir directorio-nuevo
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.

Borrar Directorios - rmdir


Si lo que deseamos es eliminar el directorio tenemos que emplear el comando rmdir.
$ rmdir directorio-nuevo
Para poder eliminar un directorio ste debe estar vaco. Por lo tanto la tarea previa a la eliminacin
de cualquier directorio, es eliminar todos los archivos que ste contiene.
Sin embargo podemos eliminar un directorio y subdirectorios con el comando rm r, pues borra en
forma recursiva desde el directorio que se dio como argumento. Supongamos que listados es un
directorio que necesitamos borrar, pero no est vaco, por lo que debemos tipear:
$rm r listados
esta orden borra todos los archivos y subdirectorios que contiene listados, incluso borra el
mismo directorio listados.
Es conveniente prestar mucha atencin antes de ejecutar el comando rm y rm

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.

Ing. Allende Ing. Serna

- 33 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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>

- ?<patron>
- tecla b:

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.

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

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 35 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Mover o Renombrar Archivos - mv


Otro comando comn para la manipulacin de archivos es mv, que mueve o renombra
archivos. Si la operacin la realiza dentro de un mismo directorio, el renombrar un archivo
implica cambiarle el nombre no su i-nodo. Si la operacin consiste en mover el archivo a otro
directorio, implica simplemente cambiar de tabla de directorio el archivo conservando el n de inodo y por supuesto sus atributos.
Su sintaxis es la misma que para el comando cp.
$ mv nom-archivo nom-nuevo
mv puede mover un conjunto de archivos de un directorio a otro, con la siguiente sintaxis:
$ mv archivo-1 archivo-2 ... direc-destino
Si la ejecucin de este comando genera algn mensaje de error, verifique:
1 el nombre y ruta de acceso del archivo a mover.
2 los permisos del archivo que quiere mover.
3 los permisos del directorio a donde est el archivo
4 los permisos del directorio donde va a depositar el archivo.
pues un archivo que no tenga permiso de lectura, no puede ser movido, como tampoco podremos
mover los archivos de un directorio que no tenga el permiso de escritura o modificacin. Ya que,
los archivos debern borrarse de una tabla de directorio y darse de alta en otra.
Por ejemplo:
$ mv listado listacop
esta orden cambia el nombre del archivo listado por listacop, dentro de un mismo directorio.
$ mv listado lista /home/suares/
esta orden borra los archivos listado y lista de la tabla de directorio actual y los agrega a la tabla
de directorio suares. Como est modificando directorios, necesita en ellos el permiso de
escritura(w).

Archivos compartidos - Enlaces - ln


Hay ocasiones en donde varios usuarios necesitan compartir los archivos. Conviene que
un archivo compartido aparezca en forma simultanea en distintos directorios los cuales pertenecen
a distintos usuarios. Un archivo compartido es muy conveniente pero puede ser muy problemtico.
Linux enfrenta esta situacin a travs de lo que llamamos enlaces.
Los enlaces le permiten dar a un nico archivo mltiples nombres, pero los archivos son
identificados por el sistema por su nmero de i-nodo, el cual es el nico identificador del archivo
para el sistema de archivos.
Un directorio es una lista de nmeros de i-nodo con sus correspondientes nombres de
archivo. Cada nombre de archivo en un directorio es un enlace a un i-nodo particular.

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.

Ing. Allende Ing. Serna

- 36 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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
-s
-f

Permite al super-usuario hacer enlaces rgidos a directorios.


Crear enlace simblico.
Borrar los archivos de destino que ya existen.

Ing. Allende Ing. Serna

- 37 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 38 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

utiliz camino absoluto o relativo para nombrar los

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 se guarda en el archivo
Ing. Allende Ing. Serna

- 39 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

personal

dir-2

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

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 41 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 nos muestra el n de i-nodo y algunos de los atributos de cada archivo del
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 ../dato1 ../dato2 .
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

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 43 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 44 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

5
Respaldo, Compresin, Divisin
y Comparacin de Archivos

Ing. Allende Ing. Serna

- 45 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 46 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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

Dividir un archivo en mltiples archivos mas pequeos


A veces resulta muy til dividir archivos en partes mas pequeas por ejemplo cuando se
quiere guardarlo en un diskette y el tamao supera el limite de almacenamiento.
Otro ejemplo, se da cuando se desea enviar archivos a travs de la red y es mucho mas
sencillo y prctico enviar archivo pequeos y transferirlos en forma separada, luego con cat es
fcil reconstruir el original.

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

Ing. Allende Ing. Serna

- 48 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 notas.1

>

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

Ing. Allende Ing. Serna

- 49 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 52 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

6
Filtros

Ing. Allende Ing. Serna

- 53 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 54 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 archivo 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

Ctedra: Sistemas Operativos

$ 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-9] concuerda con cualquier
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.

Ing. Allende Ing. Serna

rgarcia
rgarcia
rgarcia

...
...
...

1076
1085
1086

las lneas del archivo directorios que coinciden con

- 56 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Buscar archivos - find


Este comando se utiliza para buscar archivos en el file system, desde un directorio
especfico y en forma recursiva sobre las ramas inferiores a ste. La bsqueda se realiza de
acuerdo al nombre del archivo o a algn atributo de ste que recordemos.
La estructura bsica del comando es:
$ find pathname -opciones argumentos
donde pathneme hace referencia a la ruta absoluta o relativa al directorio donde va ha comenzar
la bsqueda.
Si necesita buscar un archivo en todo el file system, es conveniente que lo haga como
usuario root, sino van ha comenzar ha aparecer mensajes de permiso denegado en ciertos
directorios.
Las nuevas versiones de Linux permiten que find acepte y examine varios directorios iniciales.
$ find

/dev

../sistemas /proc/1175

-name

deudores

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.

Ing. Allende Ing. Serna

- 57 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

descripcin
Archivo regular u ordinario
Directorio
Archivo de dispositivo de bloque
Archivo de dispositivo de carcter
Enlace simblico
Conector o pipe con nombre

- 58 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

$ find /etc -type l


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 1Examina un nivel de profundidad de directorio
-level 2Examina 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

Ctedra: Sistemas Operativos

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.

Ordenar archivos - sort


Ordena alfabticamente lneas de uno o ms archivos que se indican como argumento y
muestra las lneas ordenadas por la salida estndar. Es comando no modifica el archivo original,
sino que genera una salida ordenada del mismo. En realidad el ordenamiento no es estrictamente
alfabtico, sino ms bien de acuerdo al valor ASCII de los caracteres.
$sort [-t separador][-o arch. salida][ - opciones] [+pos1 [pos2]][archivos a ordenar...]
...................................................
..........texto ordenado ................
...................................................
sort supone que cada lnea del texto est compuesta por campos o palabras. Por defecto el
ordenamiento se realiza segn el primer campo. Las lneas que emoiezan con una letra
mayscula se ordena al principio del listado, pues las maysculas tiene un valor ASCII menor a
las letras minsculas. Los valores ms pequeos son para el espacio y el signo !. Tambin tiene
varias opciones para controlar el orden de clasificacin. Como ejemplo vemos a continuacin
algunas opciones:
-r
-n
-nr
-f
u
+pos1 [pos2]

invierte el orden normal.


clasifica segn el valor numrico ( no ASCII ).
clasifica en rden numrico inverso.
no discrimina entre maysculas y minsculas .
clasifica y elimina las lneas que son idnticas.
donde pos1 es un nmero. Clasifica segn el campo de orden
pos1+1 de cada lnea. El campo comienza en la pos1 y termina en
pos2 o al final de la lnea. (claves de ordenacin)

Para ver cmo trabaja el comando podra crear el archivo lista con las siguientes lneas
(apellido, legajo, documento):
Gutierrez

45378

Ing. Allende Ing. Serna

30569025
- 60 -

UTN - FRC
Torres
Albama
Kirmat

LINUX
42963
40258
45147

Ctedra: Sistemas Operativos

32987026
32025147
33589632

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 +1n -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

total 2
-rw-rr-- 1 Pedro docent
-rw-rr-- 1 Mirta docent

25 Feb
1972 Feb

1 11:33 rep01
3 15:03 rep-02

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

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 62 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 ^, para 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 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

5. Cuente las lneas del archivo directorios.


wc -l directorios

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.

Ing. Allende Ing. Serna

- 64 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

7
Seguridad y Proteccin

Ing. Allende Ing. Serna

- 65 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Seguridad del sistema de archivos


En cualquier sistema multiusuario, los sistemas de archivos contienen informacin muy
valiosa por lo que es preciso que existan mtodos que protejan los datos, por ejemplo que
impidan a un usuario no autorizado copiar, borrar, modificar algn archivo sobre el cual no tiene
permiso.
Para esto Linux, utiliza un sistema de autenticacin de usuarios al iniciar una sesin y un
sistema de permisos de acceso a los archivos y directorios.

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 .

Que puedo hacer si me olvide la Clave?


Si es un usuario comn acuda a la persona que posee la clave de supervisor y solicite una
nueva.
En caso de olvidar la contrasea de root, no hay problema.
La opcin es arrancar con el disco de arranque creado en el momento de la instalacin, y
cuando el sistema comienza a bootear ingresar en el prompt lo siguiente:
boot: linux single
Esto permitir cambiar el nivel de ejecucin a sistema monousuario por lo que no pedir
contrasea, all utilice el comando passwd con el usuario root y coloque la clave deseada.
$ passwd root
New Unix password: ____
Retype New Unix Password: _____

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

Ctedra: Sistemas Operativos

Cada archivo posee tres tipos de permisos que se identifican con letras y son:
r

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

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

Ing. Allende Ing. Serna

- 67 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 68 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Modo numrico
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.

Los bits suid, sgid y sticky


Como ya vimos, los permisos de los archivos en Linux se corresponden con un nmero en
octal que varan entre 000 y 777; sin embargo, existen unos permisos especiales que hacen variar
ese nmero entre 0000 y 7777, se trata de los bits de permanencia sticky (1000), sgid (2000) y
suid (4000).
El bit de suid o setuid se activa sobre un archivo, aadindole 4000 a la representacin
octal de los permisos del archivo, otorgndole adems permiso de ejecucin con los permisos del
propietario, cualquiera sea el usuario que lo ejecuta; al hacer esto, en lugar de la x en la primera
terna de los permisos, aparecer una s, o una S si no hemos otorgado el permiso de ejecucin
correspondiente (en este caso el bit no tiene efecto). Veamos un ejemplo:
# chmod 4777 archivo1
Ing. Allende Ing. Serna

- 69 -

UTN - FRC
# chmod 4444 archivo2
# ls -l archivo1
-rwsrwxrwx 1
root
# ls -l archivo2
-r-Sr--r-1
root

LINUX

other

other

Ctedra: Sistemas Operativos

May

17:51

archivo1

May

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
# ls -l archivo2
-rwxrwSr-- 1 root other

May

0 May

17:51

archivo1

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

May

other

May 9

17:51
17:51

archivo1
archivo2

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/

Ing. Allende Ing. Serna

- 70 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Atributos de los archivos


En el sistema de archivos ext2 (Second Extended File System) de Linux tambin existen
ciertos atributos para los archivos que pueden ayudar a incrementar la seguridad de un sistema.
Estos atributos son los mostrados en la siguiente tabla.
Atributos de los archivos en ext2
Atributo
A
S
A
C
I
D
S
U

Significado
Dont update Atime
Synchronous updates
Append only
Compressed file
Immutable file
No Dump
Secure deletion
Undeletable file

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

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 72 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Actividad 1
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

Ctedra: Sistemas Operativos

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 copiaclave
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

Ing. Allende Ing. Serna

- 74 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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?

Ing. Allende Ing. Serna

- 75 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 76 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

8
Administracin de Procesos

Ing. Allende Ing. Serna

- 77 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Conceptos generales sobre Procesos


Linux es un sistema multitarea, ya que puede realizar distintas tareas concurrentemente
(puede comenzar una antes de que termine otra).
Todos los recursos del sistema pueden ser compartidos por muchos usuarios y el S.O. es
el encargado de crear la ilusin de que cada usuario tiene dedicado el sistema completo para l.
Sin embargo, en realidad, entre que pulsamos la tecla y se completa la orden introducida,
el sistema atiende cientos de peticiones de todos los usuarios y esto es lo que se le llama
administracin de procesos, que es el concepto alrededor del cual gira la caracterstica de la
multitarea.
Un proceso en el concepto ms simple sera un programa cargado en la memoria
destinado a ejecutarse. Pero desde un enfoque mas minucioso un proceso es una instancia de un
programa en ejecucin con su propio espacio de direcciones, es decir que un programa LINUX
puede iniciar varios procesos al mismo tiempo. Todo lo que ejecutamos bajo LINUX es un proceso
que puede identificarse mediante un PID nro. identificador de proceso- que es nico para cada
uno de los procesos que se encuentran en ejecucin, este PID ser un entero entre 0 y 65564,
comenzando por 0 cuando se arranca el sistema y volviendo a empezar en 0 al llegar al mximo,
pero siempre se asigna un PID que no est asociado a un proceso activo en el momento de
ejecutar el nuevo proceso.
Todo proceso consta de un programa ejecutable, sus datos, su pila, sus punteros de pila y
programa, los registros y, en definitiva, cualquier informacin que sea necesaria para que este
pueda ser ejecutado y tiene una existencia temporaria en la memoria de la mquina.
Estados y tipos de los procesos
En un sistema operativo multitarea los estados bsicos en los que se puede encontrar un
proceso son:
Ejecutndose: Solo existe un proceso utilizando la CPU que puede estar en dos modos:
modo user: ejecuta instrucciones del programa de usuario.
modo kernel: ejecuta instrucciones del kernel (llamadas al sistema operativo).
Listo para ejecutar: En este estado puede haber varios procesos que compiten por el uso de
CPU y pasan a ejecutarse cuando reciben permiso. Pueden estar en memoria RAM o en disco.
Durmiendo o esperando: Tambin pueden existir varios procesos en este estado que se
encuentran a la espera de obtener un recurso o de que ocurra algn suceso. Igualmente pueden
estar en RAM o en disco. No podran ejecutarse aunque se les asigne la CPU, sino que cuando
obtienen el recurso solicitado u ocurre el suceso esperado, pasan a una cola de procesos
"preparados para ejecutarse".
En LINUX podemos distinguir tres tipos de procesos, cada uno con caractersticas y
atributos
diferentes, en funcin de cmo se haya comenzado su ejecucin
Interactivos: Iniciados y controlados por un shell. Pueden ejecutarse en primer plano
(foreground) o segundo plano (background)
En cola: No estn asociados a ningn terminal, sino que se envan a una cola en la que
esperan para ejecutarse secuencialmente.
Demonios: Usualmente lanzados al iniciar el sistema y se ejecutan en background mientras
sean necesarios.
Tabla de procesos
Linux al igual que Unix, utiliza una tabla de procesos, en la que se centraliza la informacin
de cada uno de los procesos. Esta tabla se encuentra compuesta por filas, cada una de las cuales
contiene informacin sobre un solo proceso
Algunos datos de esa tabla pueden mostrarse a travs de la orden ps. Este comando nos
muestra informacin sobre los procesos que estn activos al momento de ejecutar la orden.
Ing. Allende Ing. Serna

- 78 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 79 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Creacin de procesos
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 - - r- 1 usuario1
l r- - r - - r- 1 usuario1
-r- - - - - -- 1 usuario1
l rwx------- 1 usuario1
dr-x -----2 usuario1
prrr-1 usuario1
- rw -----1 usuario1
l rwx------- 1 usuario1
-rrr-1 usuario1
-rrr-1 usuario1
-rrr-1 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

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 81 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Piping o Comunicacin de los procesos


De la misma manera que la salida estndar se puede guardar en un archivo como ya lo
vimos en redireccionamiento, tambin es posible enviar esa salida a un pipe, desde el cual un
segundo comando tomar su entrada. Es lo que se llama proceso piping (proceso de conexin)
porque se crea una pipeline (tubera o conducto) que consiste en un canal de informacin que
recibe datos por un extremo y los transmite (modificados) por el otro. Por un extremo del pipe se
escribe y del otro se lee. Los pipes son creados y destruidos, por el kernel, en la memoria.
El piping es un mecanismo que permite que los comandos de Linux se combinen
fcilmente directamente desde la lnea de comandos. Tambin es muy eficiente ya que la salida
del primer programa alimenta directamente el segundo programa, sin tener que pasar por la
escritura de archivos de disco temporales.
Las tuberas pueden estar formadas por un nmero ``ilimitado'' de comandos. Estos no se
ejecutan secuencialmente, o sea no se espera a que termine uno para ejecutar el siguiente, sino
que se va haciendo de forma concurrente. La conexin o piping se indica con la barra vertical de
pipe ( | ) entre los comandos.
Por ejemplo :
$ ls /dev | more
ls /dev

more

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.

Procesos Background o en Segundo Plano


La multitarea de Linux le permite correr varios procesos a la vez, pero al lanzar un proceso
desde un shell, no podemos volver a lanzar otro proceso desde el hasta que finalice la ejecucin
del primero. Sin embargo, podemos hacer que el shell quede disponible para poder lanzar nuevos
procesos en el momento de ejecutar una orden, lanzndola en lo que se conoce como modo
subordinado -background- ( o ejecucin en segundo plano), lo que permite retomar el control del
teclado y pantalla para lanzar nuevos procesos. Para ello se utiliza el operador & de la siguiente
forma:
$ orden &
[1] 246
Ing. Allende Ing. Serna

- 82 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Eliminacin de procesos - kill


Cuando se detecte algn error, tales como uso de mucha CPU, no producir la salida
esperada, producir salida excesiva, error de programacin, entrar en estado bloqueado, etc.; o se
quiera detener algn trabajo largo se puede desear eliminar el proceso. Un usuario puede eliminar
cualquier proceso del cual sea propietario y el superusuario cualquier proceso del sistema excepto
los pids 0, 1, 2, 3 y 4.
Si el proceso a eliminar est ejecutndose en modo interactivo, se har pulsando CTRL-C
o CTRL-D (segn el shell utilizado). Sin embargo, para un proceso subordinado no existe terminal
asociado, por lo que no podremos eliminarlo de esa manera. Para hacerlo, otra forma existente es
mediante la orden kill con el PID del proceso o el identificador de tarea (con el smbolo % delante)
que se desea eliminar como argumento. Tras ejecutar esta orden el proceso desaparecer de la
tabla de procesos al ejecutar ps. Se pueden especificar mltiples pids como argumentos de la
orden kill separados por espacios.
$ kill pid1 pid2 pid3
Por determinados motivos kill sin opciones puede fallar, por lo que ser conveniente
ejecutar ps luego de kill para asegurarnos de que elimin el proceso y que ste no ha sido lanzado
por el sistema con un nuevo PID.
Al eliminar un proceso, realmente se est indicando al sistema que enve a ese proceso
una seal; las seales se utilizan para comunicacin entre procesos y es misin de la aplicacin
responder adecuadamente a la seal.
Las seales tiles para enviar a travs de kill son:
-2 : interrumpe el proceso ( idem Ctrl.c)
-9 : fuerza la terminacin del proceso. Ningn proceso puede ignorar esta seal.
Ing. Allende Ing. Serna

- 83 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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.

Prioridades de los procesos

- 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

Ctedra: Sistemas Operativos

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

Ejecutar tareas en forma programada - at, batch, cron


Linux ofrece la capacidad de programar procesos para que se ejecuten en un momento
determinado, incluso sin necesidad de iniciar la sesin en la computadora,

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:

Ing. Allende Ing. Serna

- 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

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 87 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 88 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

LINUX

Ctedra: Sistemas Operativos

12. Verificar la salida de punto 10.


mail
Nro de mail
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

Ing. Allende Ing. Serna

- 90 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

1 Cedido por el Ing. J.C. Vazquez

Ing. Allende Ing. Serna

- 91 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

9
Administracin de Memoria

Ing. Allende Ing. Serna

- 92 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Administracin de Memoria en Linux


La Memoria Principal es un recurso valioso que se debe asignar y compartir entre los
procesos activos. Mantener en memoria la mayor cantidad posible de procesos, permite hacer un
uso eficiente del procesador y de los servicios de E/S, el micro no tendr tiempos ociosos pues
siempre habr un procesos para ejecutar. Una de las tareas ms importantes y complejas de un
sistema operativo es la gestin de la memoria.
Todos los procesos activos en el sistema tiene asignada un rea de memoria que les es
propia, en la que podemos identificar varios segmentos dependiendo de los datos que contenga, a
saber:
Segmento de texto: contiene el cdigo del proceso.
Segmento de constantes: contiene valores predefinidos por el proceso.
Segmento de datos: almacena el valor de las variables.
Segmento de pila: almacena resultados temporales y parmetro de llamadas a funciones.
Segmento de contexto: contiene informacin relativa al proceso que es utilizada por el
kernel.

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. El administrador
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.

Ing. Allende Ing. Serna

- 93 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Archivo mapeado en memoria


Un archivo mapeado en memoria es una copia idntica del archivo que est en el disco.
Acceder a un archivo que est en memoria es mucho ms rpido que acceder al cach de
disco. Las operaciones de E/S sobre un archivo mapeado en memoria, evitan utilizar los buffers
del kernel por lo que son ms rpidas.
Estos archivos se pueden utilizar tambin para compartir datos, es decir, que varios procesos
concurrentes pueden acceder al archivo mapeado en memoria. Los datos sern independientes
de los procesos.
El archivo /usr/include/asm/unistd tiene todas las llamadas al sistema
incluidas las de administracin de memoria, como ser: mmap, munmap, sbrk, mlock, y munlok.
Las siguientes son algunas de las llamadas al sistema que administran el mapeo en memoria
de los archivos:
mmap
Mapea un archivo de disco en memoria.
munmap
Elimina el mapaeo de un archivo
msync
Salva el archivo mapeado, al disco.
mprotect
Limita el acceso a la imagen en memoria (proteccin)
mlockall
Evita que cualquier porcin de la imagen en memoria sea
intercambiada con su contraparte de disco.
munlockall Elimina el bloqueo establecido por mlockall.
Necesitar utilizar las llamadas al sistema cuando decida implementar su propio mtodo de
administracin de memoria

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

Ing. Allende Ing. Serna

- 94 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 95 -

UTN - FRC

LINUX
Total
used
Mem 63092
61472
+/- buffers/cache 23604
Swap 136512
3248
Total 199604 64720

Ctedra: Sistemas Operativos

free
shared buffers cached
1620
27580 4364
33504
39488
133264
134884

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

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

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 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Comandos para la administracin de memoria

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

dmesg

-c

free

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.

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

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

sistema de

mkswap -c dispositivo bloques


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

Ing. Allende Ing. Serna

- 97 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

sync

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.

swapon

des/habilita dispositivos o ficheros para el paginado y el trasiego

vmstat

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.

Ing. Allende Ing. Serna

- 98 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

compatibilidad con versiones del kernel precedentes.

Buffers Cantidad de RAM fsica, en kilobytes, usada para los archivos de buffers.
Cached Cantidad de RAM fsica en kilobytes usada como memoria cach.
Active Cantidad total de buffer o memoria cach de pgina, en kilobytes, que est en

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.

Ing. Allende Ing. Serna

- 99 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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
1-

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

Ing. Allende Ing. Serna

- 100 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 101 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 102 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

10
Entrada / Salida

Ing. Allende Ing. Serna

- 103 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Montar y Punto de montaje


Para poder acceder a un sistema de archivos es necesario identificarlo como de un tipo
concreto, esta operacin se conoce con el nombre de montar. En sntesis el comando mount de
Linux abstrae el hardware haciendo una unidad de disco u otro dispositivo se asocie al sistema
de archivos en un determinado directorio. He aqu donde aparece un nuevo trmino: punto de
montaje, que hace referencia al directorio que se asocia con una particin especifica del disco
duro u otro dispositivo de bloque. Este directorio (punto de montaje) debe ser creado
previamente al montaje del dispositivo.
La sintaxis de mount es la siguiente:
# mount opciones dispositivo

dir

Este comando le dice al kernel que al sistema de archivos que encuentre en dispositivo
(que se refiere a algunas de las particiones, discos duros o dispositivos que vamos a montar) lo
anexe al directorio dir, y mientras este sistema de archivos permanezca montado, el camino de
dir, tambin llamado punto de montaje, hace referencia a la raz del sistema de archivos en
dispositivo. En el campo opciones se introducen datos el tipo de sistema de archivos, si va a
ser montado de slo lectura, etc.
En principio, es necesario ser root para utilizar dicho comando,(salvo que se use la
opcin user). Esto es as para garantizar la seguridad del sistema. No es deseable que
usuarios normales estn montando y desmontando sistemas de archivos a su antojo.
No siempre es necesario especificar el formato del sistema de archivos. Las ltimas
versiones del kernel, lo reconocen automticamente.

Ing. Allende Ing. Serna

- 104 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Montar sistemas de archivos en forma automatizada


La orden mount av, usualmente ejecutada en un guin de arranque, hace que todos los
sistemas de archivos mencionados en /etc/fstab se monten como se indique, excepto aquellos
cuya lnea contenga la palabra clave noauto.
El archivo /etc/fstab contiene informacin sobre los sistemas de archivos instalados. Durante
el arranque, el sistema procesa este archivo y monta automticamente los volmenes
correspondientes. Adems, comandos como fsck, mount y umount utilizan la informacin
contenida en l. Cada sistema de archivos se describe en una lnea formada por campos
separados por uno o varios espacios. El administrador del sistema es responsable de la
creacin y mantenimiento de este archivo, y el orden de las lneas es importante, ya que el
archivo es siempre recorrido de forma secuencial, y para montar algunas particiones es
necesario haber montado previamente otras.
Si ejecutamos a orden cat /etc/fstab obtendremos lo siguiente:
/dev/hda2
/dev/hda3
/dev/hda4
/dev/fd0
/dev/cdrom
/proc

/
/usr
swap
/mnt/floppy
/mnt/cdrom
/proc

ext2
ext2
swap
auto
iso9660
proc

defaults
defaults
swap
noauto,owner
auto
none

1
0
0
0
0
0

1
0
0
0
0
0

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.

Ing. Allende Ing. Serna

- 105 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Sistemas de archivos soportados por Linux


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.

Algunas de la opciones disponibles para la orden mount


-a

Monta todos los sistemas de archivos (del tipo dado) mencionados en fstab.

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

Ing. Allende Ing. Serna

- 106 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 107 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Utilizar un sistema de archivos en disquete


En un disquete se puede crear un sistema de archivos de la misma manera que se hace en
un disco duro. Para ello se utiliza el comando mke2fs definiendo el dispositivo de la siguiente
forma:
# mke2fs /dev/fd0H1440
Este comando crea un sistema de archivos para Linux en el disquete en /dev/fd0H1440
(recuerde que el tamao del sistema de archivos debe ser el mismo que el tamao del disquete) y
luego para poder acceder al disquete, se debe montar el sistema de archivos que contiene.
# mount -t ext2 /dev/fd0 /mnt/floppy
Esto montar el disquete /dev/fd0 en el directorio /mnt/floppy (previamente creado) y los
archivos del disquete aparecern debajo del directorio /mnt/floppy. La opcin "-t ext2" especifica
el tipo de sistema de archivos de Linux.
El "punto de montaje" debe existir en el momento de utilizar el comando mount. Si no
existiese, debe crearlo con el comando mkdir.
Es importante que no quite un disquete antes de haberlo desmontado; esto puede hacerse
con el comando:
# umount /dev/fd0H1440 umount /mnt/floppy
No cambie los disquetes como se hace en un sistema MS-DOS; siempre que cambie
disquetes, desmonte con umount el primero y monte con mount el siguiente.
No olvide que un sistema de archivo no pude ser desmontando si esta ocupado. (con
archivos abiertos o tiene su directorio de trabajo all)
Si tiene otro tipo de sistema de archivos en el disquete, necesitar especificrselo al comando
mount. Por ejemplo si el disquete es DOS, la opcin ser :.
# mount -t msdos /dev/fd0H1440 /mnt/floppy
Tambin podr formatear un disquete como DOS con el comando:
#mkfs t msdos /dev/fd0H1440

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

Ctedra: Sistemas Operativos

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.

Informacin sobre el espacio del disco - df - du y quota


El administrador del sistema (root) debe controlar constantemente todos los sistemas de
archivos (file system) para asegurarse de que no se estn llenando, ya que esto podra provocar
errores de aplicacin, errores del sistema, e incluso corrupcin de archivos.
Para saber qu porcentaje de una particin se est utilizando, se puede usar el comando
df (disk free space). Con este comando podremos ver los sistemas de archivos montados y el
nmero de bloques de espacio del disco libres que tiene cada uno.
El formato del comando es el siguiente:
$ df
y obtendr una salida como esta:
File system
1k-Bloques
/dev/root
1433600
/dev/boot
30720
/dev/u
2494444

Usados
1112914
17606
2197484

Libres
%usado Pto.montaje
320686
78%
/
13114
58%
/stand
296960
89%
/u

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

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 111 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Directorios y archivos importantes

El directorio de la cola de impresin, o directorio de spool, es donde se almacenan los


datos a la espera de que lpd decida qu hacer con ellos y por tal motivo es un directorio
muy importante, pero en un sistema comn cada impresora debera tener su directorio de
spool, lo que facilita notablemente el mantenimiento. En la mayora de las instalaciones,
/var/spool/lpd es el directorio de spool raz, y cada impresora segn su nombre debera
tener un subdirectorio particular. Por ejemplo /var/spool/lpd/HP690.

El archivo /etc/printcap es un archivo de texto, en donde cada entrada del archivo


/etc/printcap describe una impresora. Es decir que cada entrada de printcap provee una

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

Ing. Allende Ing. Serna

- 112 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 113 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 114 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

11
Administracin de
Usuarios y Grupos

Ing. Allende Ing. Serna

- 115 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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)

Agregar, modificar y borrar usuarios


Para crear un nuevo usuario hay que seguir varios pasos. Por un lado se debe crear una
entrada en /etc/passwd, con un nombre de usuario y UID nicos. Se debe especificar el GID,
nombre completo y resto de informacin. Se debe crear el directorio inicial, y poner los permisos
en el directorio para que el usuario sea el dueo. Se deben suministrar archivos de comandos de
inicializacin en el nuevo directorio y se debe realizar alguna otra configuracin del sistema.

Ing. Allende Ing. Serna

- 116 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

# groupmod g 525 n alumnosxx alumnos

groupdel
Elimina un grupo.
#groupdel nombre de grupo
Por ejemplo:
# groupdel alumnosxx

Otros comandos para usuarios y grupos

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

Ing. Allende Ing. Serna

- 119 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

groups
Muestra por pantalla los grupos a los que pertenece el usuario.
$groups usuarioxx
Se obtiene
Nombre de usuario : grupos
usuarioxx : alumnos tecnico

Informacin adicional sobre los usuarios


Por el hecho de existir muchos usuarios haciendo uso del sistema a la vez, puede ser til
adems de un resumen de los procesos que se est ejecutando (ps), conocer quin esta
conectado y como est haciendo uso del sistema en un determinado momento. Mediante las
ordenes: finger y who.

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

Jun 19 8:38
Jun 19 9:10

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)

Ing. Allende Ing. Serna

- 120 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

chown alumnoC ./copia/passwd


ls l
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
comando.

seguido de su nombre de usuario. Analice la salida de dicho

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

LINUX

Ctedra: Sistemas Operativos

chown docente2 /home/docente1/datos


ls l
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.

Ing. Allende Ing. Serna

- 123 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

12
Comunicacin de usuarios

Ing. Allende Ing. Serna

- 124 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 que
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

Ctedra: Sistemas Operativos

write
Este comando enva mensajes de texto a otros usuarios. El formato de la orden es el
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)

Ing. Allende Ing. Serna

- 126 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 127 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 128 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

13
Programacin del shell

Ing. Allende Ing. Serna

- 129 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Variables del shell


Una variable es un objeto que tiene un valor determinado. Las variables son muy
importantes ya que la mayora de los programas las utilizan para obtener de ellas, valores de
configuracin.
Adems una de las caractersticas de Linux es que nos permite escribir scripts o programas para
el shell, por lo que se hace necesario conocer el uso de las variables.
Cuando se crean las variables, el shell puede almacenarlas en dos zonas:
la zona de datos locales
la zona de datos de entorno.
Cuando se define una variable desde la lnea de comandos, se almacena en la zona de dato
local. Es una variable propia del shell actual. Cualquier variable que resida en la zona de datos
local de un proceso, ser ignorada por el/los procesos hijos.

Ing. Allende Ing. Serna

- 130 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Formas para crear una variable


Al crear una variable debemos pensar que identificador o nombre vamos a utilizar para la
misma. El identificador de la variable debe comenzar con un carcter alfabtico, luego puede
contener caracteres numricos y el carcter de subrayado. No hay restricciones para la longitud
del identificador o nombre de la variable. Las nicas variables en shell son del tipo carcter.
Para crear una variable podemos utilizar el mtodo de asignacin, sustitucin de comandos o
las rdenes read y declare, que detallaremos a continuacin.

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.

Ing. Allende Ing. Serna

- 131 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Como utilizar el contenido de una variable


Es posible utilizar el contenido de una variable en una lnea de comando simplemente
hacindola preceder del smbolo $, procedimiento al que llamamos sustitucin de variables. Por
ejemplo:
$ cat $arch
en el ejemplo anterior, el shell, primero sustituye la variable arch por su valor y luego ejecuta el
comando. El comando anterior muestra el contenido del archivo /home/garcia/listado, valor que
habamos asignado anteriormente.
Si el identificador de la variable debe estar concatenado a una cadena de caracteres o bien
a otra variable, se hace necesario encerrar al identificador entre llaves.
Por ejemplo:
echo Hoy es ${dia} de ${mes}
la salida de esta lnea de comandos es :
Hoy es 15 de Julio

Ing. Allende Ing. Serna

- 132 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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}

${variable-palabra}

${variable+palabra}

${variable=palabra}
${#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.

Tabla : Mtodos alternativos de acceso a variables en bash [Thomas Scheck at al]

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.

Variable
$?
$!

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

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 que indica si ha finalizado con xito o no su
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 $?

Ing. Allende Ing. Serna

- 133 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Variables de entorno del usuario


Las variables de entorno guardan informacin importante y necesaria para los programas
que se ejecutarn y para el shell mismo. Incluso parte del proceso de conexin al sistema, por
parte del usuario, consiste en la creacin de su entorno. Por ejemplo: algunos programas
necesitarn que la ruta de acceso al archivo de ayuda, est guardada en alguna variable; o
cuando ejecutemos un comando, el shell necesitar saber la ruta de acceso al directorio donde
estn los archivos ejecutables; o algunas otras variables especifican configuraciones
personalizadas, etc. Usted puede ver el valor predeterminado de las variables de entrono
simplemente utilizando el comando set o env, cuyo uso se detalla ms adelante.
Ing. Allende Ing. Serna

- 134 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 135 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Uso de comandos adicionales

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]

elimina la variable del entorno, si es que sta existe.

[variavle=valor]

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 ...]
El estado de salida del comando es:
Ing. Allende Ing. Serna

- 136 -

UTN - FRC
0
1
2

LINUX

Ctedra: Sistemas Operativos

si se encontraron todas las variables especificadas.


Si no se encontr al menos una de las variables especificadas.
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.

Ing. Allende Ing. Serna

- 137 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 138 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 140 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

La estructura condicional case


Es una estructura de condicin que permite seleccionar una entre varias posibilidades de
accin, segn sea el valor de la variable. Compara el valor de una nica variable con los patrones
especificados en su estructura. Si encuentra algn patrn coincidente al valor de la variable,
ejecuta la lista de comandos asociada a ese patrn, y luego la secuencia del programa continua
fuera de la estructura.
La sintaxis es la siguiente:
case

$vaiable in
patrn1) comando1
comando2 ;;
patrn2) comando3
comando4;;
:
:
*) accin por defecto ;;

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.

La estructura repetitiva for


Esta estructura ejecuta el cuerpo de acciones un nmero finito de veces. Este comando puede
ejecutarse tanto en un programa del shell, como desde la lnea de comandos. La sintaxis es la
siguiente:
for variable in lista_de argumentos
do
comandos1
comando2
:
done
Ing. Allende Ing. Serna

- 141 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

La estructura repetitiva while


Esta instruccin se utiliza para repetir una serie de comandos varias veces, de acuerdo a
una condicin que controla el ciclo. Es decir mientras la condicin, sea verdadera, el cuerpo de
acciones se ejecuta.
La sintaxis es la siguiente:
while condicin
do
comandos1
comando2
:
done
En cada iteracin, while ejecuta la condicin, que es un comando. Si este comando
concluye con xito (retorna un "0", o sea un verdadero), se ejecutan los comandos del cuerpo del
while. Si el retorno del comando es un falso, finaliza el ciclo, y se contina ejecutando la
instruccin siguiente a done. La sentencia done indica el final del cuerpo de acciones, y el
programa regresa al comienzo del while, y se ejecuta de nuevo el comando de condicin.
Analicemos EL siguiente ejemplo:
# Objetivo: avisar al usuario si el buzn de correo ha cambiado
#Sugerencia: Ejecutar esto en segundo plano
#Obtener un tamao del buzn para compararlo
cp $MAIL omail
# MAIL es una variable especial referida al buzn del usuario
while diff omail $MAIL > /dev/null
do
cp $MAIL omail
sleep 30
#pausa de 30 segundos
done
Ing. Allende Ing. Serna

- 142 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

El comando test
de operadores:

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.

Ing. Allende Ing. Serna

- 143 -

UTN - FRC
-w
-x

LINUX

Ctedra: Sistemas Operativos

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=cadena2
cadena1==cadena2
cadena1 != cadena2
cadena
cadena1<cadena2
cadena1>cadena2

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.

Ing. Allende Ing. Serna

- 144 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Ing. Allende Ing. Serna

- 145 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ctedra: Sistemas Operativos

vi .bash_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

Ctedra: Sistemas Operativos

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 -1 $a`
do
if test -f $a/$i
then
con=`wc -c $a/$i `
echo $con
read
fi
done
else
echo $a no es un directorio
fi

Ing. Allende Ing. Serna

- 148 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Cedido por el Ing. J.C.Vazquez

Ing. Allende Ing. Serna

- 149 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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:

Cedido por el Ing. J.C.Vazquez

Ing. Allende Ing. Serna

- 150 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Prcticos Integradores

Ing. Allende Ing. Serna

- 151 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRCTICO INTEGRADOR N 1


Temas: File system. Rutas. Procesos. Filtros. Enlaces. Tubera.edireccin E/S. Permisos.
Metacaracteres.

1. Cree, su directorio de login los subdirectorios trabajo y practico. En el directorio trabajo crear los
subdirectorios unidad1 y unidad2.
2. 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.
3. Cree el archivo nmeros cuya informacin sea el contenido del directorio /etc, en formato extendido, incluido
el n de i-nodo de los archivos.
4. Copie las lneas del archivo numeros que tengan la cadena de caracteres rwx-----x al archivo permisos en
el directorio practico.
5. 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.
6. Posicinece en el directorio unidad2. Muestre por pantalla en forma paginada el directorio /home. Utilice
nombre relativo y pipeline.
7. Busque el archivo nmeros, en su rbol de directorios, y agregue el permiso de escritura a todos los usuarios
del archivo. No utilice tubera.
8. Cree el archivo procesos, en el directorio unidad2, que contenga informacin extendida referente a los
procesos activos en el sistema.
9. 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?
10. 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.
11. Mostrar el contenido del archivo comprimido copia.tar.Z y luego descomprimirlo.
12. 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).
13. Desde el directorio de login borre todos los archivos creados. (slo los archivos)

1. mkdir trabajo practico


mkdir trabajo/unidad1 trabajo/unidad2
2. ls /dev/pt* trabajo/unidad1/terminales
3. ls li /etc > numeros
4. grep ^.rwx-----x numeros > practico/permisos
5. ls -li /etc | grep ^.rwx-----x > practico/permisos
6. cd trabajo/unidad2
ls ../../.. | more
7. 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.
8. ps -aux > procesos
9. ln procesos ../pro-ln
10. tar cvf copia.tar ../unidad1/terminales ../../practico/permisos ../../numeros procesos
compress copia.tar
11. zcat copia.tar.Z
uncompress copia.tar.Z
12. chmod u=rwx,g=rw,o= ../pro-ln
13. cd
rm trabajo/unidad1/*
rm trabajo/unidad2/*
rm numeros
rm practico/permisos

Ing. Allende Ing. Serna

- 152 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRCTICO INTEGRADOR N 2


Temas: Enlaces, permisos, administracin de procsos, tuberas, redireccin de entrada/salida.
1. Crear, en el directorio de conexin, el subdirectorio parcial.
2. Crear el archivo lista en el directorio parcial, con la salida del comando ls l /temp
3. Crear, en su directorio de conexin, un acceso directo (enlace simblico) al archivo lista, con el nombre
list-ls.
4. Muestre por pantalla el i-nodo del archivo lista. Recuerde ste nmero.
5. Ejecute el comando necesario para permitir que el archivo lista figure en el directorio de login o
conexin con distinto n de i-nodo.
6. Idem al anterior pero con el mismo n de i-nodo y con el nombre de list-1.
7. Ejecute el comando necesario para permitir que el archivo lista figure en el directorio de login o
conexin como lista-2 pero con el mismo n de i-nodo, logrando en la misma accin que el archivo lista
desaparezca del directorio parcial.
8. Analice la diferencia entre utilizar el comando cp y mv.
9. Muestre en listado extendido, los procesos que se estn ejecutando en su sesin.
10. Diga cuales son los campos que identifican el n de proceso y el n del procesos padre.
11. Muestre el contenido del directorio donde Linux archiva los drivers. Realice esta tarea en forma
paginada.
12. Modifique los permisos del archivo lista de forma tal que la ejecucin de la siguiente orden le de error:
ls >> lista
13. Diga que sucede con los permisos del archivo lista-2, se modifican con la accin del punto anterior?
14. Ejecute la orden: more lista-ls y diga porqu le da error.

1. cd
mkdir parcial
2. ls -l /tmp >> parcial/lista
3. ln -s parcial/lista lista-ls
4. ls i parcial/lista
5. cp parcial/lista lista
6. ln parcial/lista lista-1
7. mv parcial/lista lista-2
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.

Ing. Allende Ing. Serna

- 153 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRCTICO INTEGRADOR N 3


Temas: Procesos, filtros, tuberas, redireccin de entrada/salida, usuarios.
1. Marque la salida de la siguiente lnea de comando: who >> usuarios
A
B

Los usuarios conectados al sistema


El contenido del archivo usuarios

2. Idem al anterior :

C
D

El contenido del directorio padre


Ninguna de las anteriores

who | tail -5

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.

Las 5 ultimas lneas de salida del


comando who.
Ninguna de las anteriores

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

1.
2.
3.
4.
5.
6.

C
D

ps -f | grep 5432
Ninguno de los anteriores

D
C
D
D
B
C

Ing. Allende Ing. Serna

- 154 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRCTICO INTEGRADOR N 4


Temas: Variables. Estructura condicional. Programacin del shell.

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 $2
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

Ing. Allende Ing. Serna

- 155 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRCTICO INTEGRADOR N 5


Temas: Variables. Estructura condicional. Programacin del shell.

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;;

encontro

3 | i) free -m
read a;;
4 | m) mount
read a;;
5 | s) exit
esac
done

Ing. Allende Ing. Serna

- 156 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRACTICO INTEGRADOR N 6


Tema: Programacin del shell

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.

Cedido por el Ing. J.C.Vazquez

Ing. Allende Ing. Serna

- 157 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRACTICO INTEGRADOR N 7


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

Ing. Allende Ing. Serna

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 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

LINUX: PRACTICO INTEGRADOR N 8


Tema: Parmetros posicionales, manejo de archivos, procesos, programacin del shell

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 procesos, memoria
utilizada y paginada. Realice la tarea cada 30 segundos y por el lapso de 5 minutos. Realice esta
tarea en background.

Ing. Allende Ing. Serna

- 159 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Apndice I

Ing. Allende Ing. Serna

- 160 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 161 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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.

Rangos [ abc ] [ a-z ] [ 0-9]


Como primer uso, podemos decir que los corchetes permiten delimitar a un conjunto de
caracteres, de los cuales al menos uno debe coincidir con el carcter de la cadena, que est en
una posicin especfica. Veamos un ejemplo, supongamos que necesitamos copiar el archivo eje
al directorio padre, sabemos que lo hemos identificado con una letra al final del nombre, pero no
recordamos si es a, f o z, por lo cual podramos tipear:
$ cp eje[afz] ..
As copiar cualquier archivo cuyo nombre comience con la cadena eje y finalice con x, y,
o z, es decir que puede copiar el archivo ejea, ejef y ejez
Como segundo uso podemos especificar dentro de los corchetes un intervalo, ya sea
alfabtico o numrico, de valores que puede asumir un determinado carcter en una cadena que
utilizamos como patrn. Por ejemplo:
$ ls -l r1-5ta
El comando anterior realizar un listado extendido de los archivo r1ta, r2ta, r3ta, r4ta y
r5ta.

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.

Comillas dobles ...


Toma literalmente el conjunto de caracteres entre las comillas, excepto los caracteres $, \,
`...` , es decir, que permite que el shell los interprete. Por ejemplo:
$ echo Las rutas de bsqueda son: $PATH
Las rutas de bsqueda son: /bin:/sbin:/usr/bin
El comando echo muestra la cadena de caracteres ingresada, y el contenido de la variable
PATH, es decir las rutas absolutas a los directorios donde estn los archivo ejecutables.
$ echo La fecha es: `date`
La fecha es: 06-23-03
El comando echo nos muestra la cadena ingresada y la salida del comando date en el
formato configutrado en su sistema.

Ing. Allende Ing. Serna

- 162 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

Apndice II

Ing. Allende Ing. Serna

- 163 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

INTRODUCCIN AL EDITOR DE TEXTO VI


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

Ctedra: Sistemas Operativos

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.

Los comandos bsicos para editar un archivo


Para moverse o desplazarse con el cursor se utilizan los comandos:
h
mueve el cursor a la izquierda
j
mueve el cursor hacia abajo
k
mueve el cursor hacia arriba
l
mueve el cursor hacia la derecha
0 (cero) mueve el cursor al principio de la lnea
$
mueve el cursor al final de la lnea
Cuando introduce estos comandos no aparecen en la pantalla y en su lugar el cursor se
desplazar en la direccin deseada.
Nota: No dependa demasiado de la teclas de flecha ( ), a veces se puede dar el
caso de que no funcionen, ya que requieran ciertas configuraciones del teclado, del terminal y
de determinados archivos del sistema, o suelen ser muy lentos en un sistema de red muy
cargado.

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.

Ing. Allende Ing. Serna

- 165 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

Ing. Allende Ing. Serna

- 166 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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

MODO SOLO LECTURA


Es una buena precaucin en aquellos casos en que solo se necesita ver el contenido de un
archivo y no se quiere realizar ningn cambio, editando un archivo en modo Solo Lectura. Para
ello, sustituya el comando vi por view en la lnea de comandos de la siguiente forma
$ view nombre de archivo
View inicia el editar vi en modo solo lectura, y si intenta escribir el archivo presentar un
mensaje de error.
Warning: Changing a readonly file
Se puede anular el modo Solo Lectura de view y guardar los cambios, de la siguiente
manera:
:w!
Esto provoca que se abandone el Modo Solo Lectura y ingrese al Modo Comando donde el
editor nos permite modificar el archivo

Ing. Allende Ing. Serna

- 167 -

UTN - FRC

LINUX

Ctedra: Sistemas Operativos

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 -

5. Compumagazine Linux- Manual de Referencia


(PC Forum SA - 1999)
6. El Entorno de programacin Unix
(Edit. Prentice Hall - 1987)

- Luis Tomas Wayar

- Brian W. Kernighan - Rob Pike

7. El Sistema Operativo Unix. Introduccin y aplicaciones


(Edit. Marcombo 1988)

- Jos Canosa

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)

Ing. Allende Ing. Serna

- 168 -

UTN - FRC

Ing. Allende Ing. Serna

LINUX

Ctedra: Sistemas Operativos

- 169 -

También podría gustarte