Sunteți pe pagina 1din 139

Conceptos de Sistemas Operativos

Hardware
Qu es un Sistema Operativo
Historia de los Sistemas Operativos
Conceptos de Sistemas Operativos
Procesos
Archivos
Llamadas al Sistema
El intrprete de comandos ("shell")
Ejemplos de comandos
Referencias
Una computadora sin software no presta ninguna utilidad. El software puede clasificarse en dos
grandes grupos:
programas de sistema (software de base, software de sistema): controlan la operacin de la
computadora.
programas de aplicacin (software de aplicacin): resuelven problemas para los usuarios.
El Sistema Operativo es el programa fundamental entre los programas de sistemas; controla todos
los recursos de la computadora y proporciona la base sobre la que pueden escribirse los programas
de aplicacin. Es un nivel de software por encima del hardware que controla todas las partes del
sistema y presenta al usuario una interfaz o mquina virtual.
En un sistema de computacin se reconocen los siguientes niveles, yendo desde el usuario hacia la
mquina fsica:
Programas de aplicacin: Sistema bancario, Reservaciones areas, Juegos.
Compiladores, Editores, Intrprete de comandos.
Sistema operativo.

Hardware:
Lenguaje de mquina: instrucciones directas a la mquina. Tiene de 50 a 300 instrucciones y es muy
difcil de programar.
Microprogramacin: control directo de dispositivos. En memoria de slo lectura, o a veces en el
propio hardware; interpreta el lenguaje de mquina.
Dispositivos fsicos: chips, barras, cables, fuentes de potencia, conectores, etc.
El sistema operativo ejecuta en modo superusuario, con plenos poderes; no puede ser alterado por el
usuario. Los compiladores y editores se ejecutan en modo usuario, con poderes limitados. Cada
usuario podra escribir su propio editor, compilador u otro utilitario. Los programas de aplicacin
son escritos por los usuarios para resolver problemas particulares.

Qu es un sistema operativo.
Como mquina extendida. El sistema operativo presenta al usuario una mquina extendida o
mquina virtual ms fcil de programar que accionar en forma directa sobre el hardware
subyacente. En este sentido se dice que el sistema operativo "define un ambiente de trabajo".
Como controlador de recursos. Permite la asignacin ordenada de procesadores, memoria y

dispositivos de entrada/salida para los varios programas que compiten por el uso de estos recursos.

Historia de los Sistemas Operativos.


Primera generacin (1945-1955): bulbos y conexiones. Programacin en lenguaje de mquina
absoluto, o realizando directamente las conexiones elctricas. Alrededor de 1950 se introducen las
tarjetas perforadas.
Segunda generacin (1955-1965): transistores y sistemas de procesamiento por lotes. Los
programas y datos se entregaban en tarjetas, se acumulaban y luego eran procesados todos juntos
por la mquina, buscando minimizar los tiempos muertos.
Tercera generacin (1965-1980): circuitos integrados y multiprogramacin. El sistema 360 de IBM
unifica computadoras comerciales y cientficas en una sola lnea de mquinas con software
compatible. Se introduce la multiprogramacin, que divide la memoria en partes y ejecuta un
programa distinto en cada una. El spooling permite la operacin simultnea y en lnea de
perifricos. El tiempo compartido es una variante de multiprogramacin que habilita a cada usuario
una terminal en lnea. MULTICS, un gigantesco sistema operativo, fracasa en su construccin pero
aporta muchas ideas que hacen surgir UNIX.
Cuarta generacin (1980-1990): estaciones de trabajo y computadoras personales. Sistemas
operativos DOS y UNIX. Software "amigable con el usuario". Sistemas operativos de red, con
varias computadoras interconectadas que pueden ser accedidas por un mismo usuario. Sistemas
operativos distribudos, compuestos por varios procesadores que se presentan al usuario como un
sistema nico.

Conceptos de Sistemas Operativos.


La interfaz entre los programas de usuario y el sistema operativo est formada por llamadas al
sistema capaces de crear, utilizar y eliminar procesos y archivos.
Procesos.
Un proceso es bsicamente un programa en ejecucin. Consta del programa ejecutable, datos, pilas,
registros y toda la informacin necesaria para ejecutar. Un intrprete de comandos (shell) es un
proceso que lee los comandos de usuario desde una terminal y crea procesos hijo para ejecutar ese
comando. Se crea as un rbol de procesos en ejecucin. Los procesos se manejan mediante seales
que los obligan a suspender, reiniciar o terminar su accin. Las seales se utilizan tambin para
comunicacin entre procesos.
Cada usuario tiene asignado un identificador de usuario (uid), y grupos de usuarios tienen un
identificador de grupo (gid). Un proceso tiene asignado el uid y gid del usuario que lo inici.
Ambos identificadores se utilizan para proteger la informacin manejada por el proceso.
Archivos.
Existen llamadas al sistema para crear, eliminar, leer y escribir archivos. Los archivos se agrupan en
directorios, y existen llamadas al sistema para crear y eliminar directorios, y para colocar y quitar
archivos de ellos. Esto crea una jerarqua de directorios y archivos llamada sistema de archivos. Un
archivo se reconoce unvocamente dando la ruta de acceso, que es la sucesin de directorios que
permiten alcanzar el archivo a partir del directorio raz. Cada proceso activo tiene un directorio de
trabajo en el que se buscan primariamente los archivos cuando se indica slo el nombre y no la ruta
de acceso.
En un sistema multiusuario, es preciso dar privacidad a los archivos de cada persona. UNIX utiliza
un cdigo de 9 bits en 3 grupos de 3 bits. Estos grupos correspondientes al dueo, el grupo y el

resto del mundo. Cada conjunto de 3 bits corresponde a permiso de lectura, escritura y ejecucin. Se
presentan como rwx (Read, Write, eXecute); cuando uno de estos permisos est denegado se
sustituye la letra por -, como en r-- o en rw-.
Para acceder a un archivo, se verifican primero sus permisos; si son correctos, el sistema devuelve
un descriptor de archivo o "entrada de manejo", un nmero entero que se utiliza en todas las
operaciones subsiguientes. Al cerrarse el archivo, el descriptor es desasignado y el nmero entero
queda disponible para otro acceso.
UNIX maneja los dispositivos de entrada y salida con un artificio que los presenta como archivos
especiales, lo que permite escribir y leer en ellos con las mismas llamadas al sistema que se usan
para los archivos. Los archivos especiales de bloque se usan para dispositivos que organizan los
datos en bloques de tamao fijo y acceso aleatorio, como los discos. Los archivos especiales de
caracteres modelan los dispositivos formados con flujos de caracteres como las terminales,
impresoras e interfaces de red.
En UNIX y DOS, al iniciar un proceso se establece el descriptor de archivo 0 como entrada estndar
para recibir datos desde el teclado y el descriptor de archivo 1 como salida estndar para presentar
informacin en la pantalla. El descriptor de archivo 2 es el de error estndar; se usa para mensajes
de error y se asigna normalmente a la pantalla.
La interconexin de procesos se realiza a travs de una tubera, entubamiento, tubo o secuencia de
comandos, indicado por el caracter | (barra vertical). Un tubo es un seudoarchivo en el cual un
primer proceso escribe su salida para ser leda por un segundo proceso; la salida del primero es la
entrada del segundo.
Llamadas al sistema.
Los programas de usuario se comunican con el sistema operativo mediante llamadas al sistema.
Para cada llamada existe un procedimiento de biblioteca que puede ser invocado desde un programa
de usuario mediante un nombre y parmetros.

El intrprete de comandos (shell).


El intrprete de comandos de UNIX, o shell, es un proceso que muestra un indicador de comandos
($, %, o #) y aguarda que el usuario digite un comando. Toda vez que el usuario digita un comando,
el intrprete lo valida, y si es correcto crea un proceso hijo que realiza la accin encomendada. Al
terminar el proceso hijo, exhibe nuevamente el indicador de comando e intenta leer una nueva lnea
de la entrada.
Ejemplos de comandos (UNIX):
date
imprime la fecha.
date >archivo1
imprime la fecha pero la redirecciona hacia el archivo1.
sort <archivo1 >archivo2
lee archivo1, reordena sus lneas y las graba en archivo2.
cat arch1 arch2 arch3 | sort >/dev/lp
concatena los archivos arch1, arch2 y arch3, dirige su salida hacia el comando sort que ordena las
lneas de los tres archivos juntos y las enva al dispositivo de impresin /dev/lp.
Referencias: Tanenbaum[1992]

Introduccin a UNIX
Qu es UNIX
Caractersticas
Historia de UNIX
Antecedentes
UNIX
Versiones actuales de UNIX
Objetivos de UNIX
Filosofa del sistema UNIX
El UNIX moderno
Referencias

Qu es UNIX.
Esctrictamente, UNIX designa el ncleo de un sistema operativo multiusuario y multitarea. En un
sentido ms amplio, comprende el ncleo del sistema operativo ms un conjunto de programas que
permiten compilar lenguajes de programacin, editar texto, interpretar comandos, manejar archivos
y discos, acceder a otras mquinas, establecer comunicaciones telefnicas, enviar y recibir correo
electrnico, manejar las colas de impresin y un sinfn de tareas ms. Algunos de estos programas
pueden haber sido desarrollados por los propios usuarios.
UNIX designa al mismo tiempo un cierto "ambiente de trabajo", un conjunto de circunstancias que
encuentra el usuario de la computadora donde corre UNIX, tales como la presentacin en pantalla,
los programas disponibles y la forma de trabajo que impone o permite.
Cuando hablemos de UNIX nos estaremos refiriendo al sentido amplio y, conjuntamente, a su
ambiente de trabajo.

Caractersticas:
muchas herramientas de software (compiladores, editores, utilitarios para muchas tareas).
reutiliza el software, a travs de la combinacin de comandos simples en aplicaciones
complejas.
portable: el mismo sistema operativo corre en un espectro de mquinas que van desde
notebooks a supercomputadoras. Es el nico sistema operativo con estas caractersticas.
flexible: se adapta a muchas aplicaciones diferentes.
potente: dispone de muchos comandos y servicios ya incorporados.
multiusuario: atiende a muchas personas simultneamente.
multitarea: hace muchas cosas a la vez.
elegante: sus comandos son breves, coherentes, especficos para cada tarea y muy eficientes.
orientado a redes desde el comienzo.
dispone de un estndar (POSIX) que debe cumplir todo sistema operativo que pretenda ser
UNIX, lo que asegura una evolucin predecible.

Historia de UNIX
Antecedentes:
las computadoras ejecutan un trabajo por vez (aos '40 y '50).
los trabajos se agrupan y ejecutan "por lotes" (aos '60).

CTSS, un sistema operativo de propsito general y tiempo compartido, logra enorme xito.
MULTICS, un ambicioso proyecto de sistema operativo para cientos de usuarios fracasa y
no llega a terminarse.
UNIX.
Ken Thomson, desarrollador de MULTICS, con ideas y apoyo de algunos compaeros,
escribe un nuevo MULTICS ms modesto en una mquina PDP-7 desechada (1969). Brian
Kernighan, compaero de Thomson, lo llama irnicamente UNICS.
UNIX pasa a una mquina PDP-11 (1970). Ritchie dise y escribi un compilador para
lenguaje C.
Thomson y Ritchie reescriben UNIX en C, rompiendo la tradicin de sistemas operativos
escritos en lenguaje ensamblador (1973). Esto aumenta la portabilidad del sistema hacia
otras mquinas.
Thomson y Ritchie reciben el premio Turing por un memorable artculo sobre UNIX escrito
en 1974.
UNIX es adoptado en las universidades, por tratarse de un "sistema abierto" que proporciona
todo el cdigo fuente (1974).
BSD y System V; el estndar de POSIX.
El desmembramiento de AT&T (1984) permite a esta empresa ingresar en el mercado de
computadoras, y produce la primera versin comercial de UNIX, el Sistema III, que pronto
es sustitudo por el Sistema V versiones 2, 3 y 4.
La Universidad de Berkeley produjo una versin mejorada para la PDP-11, llamada 1BSD;
luego fueron la 3BSD y luego 4BSD, que incorpor el protocolo de redes TCP/IP.
El grupo POSIX estudi y propuso un estndar para UNIX, llamado 1003.1, que define un
conjunto de procedimientos de biblioteca que cualquier sistema conforme con UNIX debe
proporcionar. Esto resolvi la controversia entre Sistema V y BSD.
Se forma OSF, Open Software Foundation, integrada por IBM, DEC, HP y otros para
enfrentar a AT&T. Crea un UNIX con ms prestaciones que el estndar de POSIX.
Versiones actuales de UNIX.
AT&T, para enfrentar a OSF, crea UI, UNIX International, junto con otras empresas; crea
otro UNIX ampliado de POSIX.
IBM crea su propia variante de UNIX, llamada AIX. La confusin de versiones contina.
surgen las versiones UNIX de dominio pblico FreeBSD y Linux, que se distribuyen sin
costo. Linux es desarrollado por una multitud de personas y equipos de trabajo a travs de
Internet. FreeBSD es desarrollado por un grupo de trabajo cerrado.
UNIX hacia el usuario final: distribuciones fciles de instalar (SuSE, Redhat, Mandrake,
Corel), aplicaciones de escritorio (Applixware, StarOffice), programas asistentes de
administracin para estaciones de trabajo o servidores.

Objetivos de UNIX.
UNIX fue diseado teniendo en mente los siguientes objetivos:
crear un sistema interactivo de tiempo compartido diseado por programadores y para
programadores, destinado a usuarios calificados.
que fuera sencillo, elegante, escueto y consistente.
que permitiera resolver problemas complejos combinando un nmero reducido de comandos
bsicos.

Filosofa del sistema UNIX.


Los objetivos con que se cre determinaron una "filosofa" de UNIX caracterizada por:
comandos cortos, simples, especficos y muy eficientes, que "hacen una sola cosa pero la
hacen muy bien".
entrada y salida estandarizadas que permiten la interconexin de comandos. Esto se llama
entubamiento ("pipelining"): la salida de un comando es tomada por el siguiente como
entrada.

El UNIX moderno.
Orientado en primera instancia a terminales de caracteres, actualmente dispone de la interface
grfica X-Windows. Esto ha simplificado mucho el uso para los no especialistas.
Es ideal para trabajar como servidor: una mquina potente como servidor, terminales o
computadores personales baratas en los puestos de trabajo. El paquete de libre uso Samba permite
que una mquina UNIX acte como servidor de puestos de trabajo Windows 3.11, Windows 95, y
Windows NT.
Se orienta en la direccin contraria a la tendencia de hacer invisible al usuario el sistema operativo,
permitiendo el uso de todas las bibliotecas, llamadas al sistema y herramientas internas, aunque su
uso requiere un alto nivel de especializacin. Es posible compilar un ncleo especficamente
adaptado a las necesidades particulares de una empresa o grupo de trabajo, reduciendo el uso de
recursos y aumentando la rapidez.
Las mquinas RISC de los '80 y '90 adoptaron UNIX como sistema operativo; es por lejos el
sistema predominante en las estaciones de trabajo orientadas a clculos e investigacin. Tambin
fue adoptado para la creacin de Internet, mayoritariamente soportada por UNIX.
Por sus caractersticas de diseo, est especialmente preparado para su ampliacin y desarrollo en
64 bits y el multiprocesamiento en varias CPUs.
Referencias: Kernighan-Pike[1987], Coffin[1989], Tanenbaum[1992]

Tutorial
Emulador de Terminal
Ingreso al sistema (login)
Directorios
Listado de archivos
Manual de UNIX
Contenido de un archivo
Crear y borrar un archivo
Correo electrnico de UNIX
Usuarios en el sistema
Talk
Cambio de contrasea
Fin de Sesin
Otros
Bibliografa y Referencias

Emulador de Terminal.
Para ingresar a un sistema UNIX remoto desde un PC se usa habitualmente un "emulador de
terminal". Este programa permite al PC comportarse como una terminal (teclado y pantalla, sin
procesador) conectada directamente a la mquina UNIX. En el emulador de terminal se deben fijar
los siguientes parmetros:

Nombre descriptivo de la conexin a establecer (arbitrario).


Nombre en la red de la mquina a la que se quiere conectar.
Tipo de terminal que se emular (VT100 es el ms conocido).
Conexin va TCP/IP, protocolo de comunicacin en la red.

Ingreso al sistema (login).


login: id-usuario
password:
id-usuario es el nombre identificador del usuario para ingreso al sistema, proceso que se denomina
"login". Este nombre de usuario suele tener hasta 8 caracteres (letras, nmeros y algunos smbolos),
debe comenzar con minscula. UNIX distingue entre maysculas y minsculas. En el ingreso al
sistema, no se permiten correcciones.
<mensaje del da>
se despliega siempre despus del login, es puesto por el administrador del sistema para informacin
o bienvenida.
<noticias>
aviso de noticias nuevas. Las noticias se usan para informaciones generales de mayor tiempo de
validez. Las noticias no aparecen ms despus de haber sido ledas. Para leer las noticias debe
digitarse el comando news.
You have mail
indica que hay mensajes de otros usuarios, o del sistema. El correo electrnico permite a cualquier
usuario enviar y recibir mensajes.

$
es el indicador de comandos del sistema; indica que el sistema est listo y aguarda una orden del
operador, que debe ser escrita a continuacin de $ y finalizada con la tecla <Enter>.
En los siguientes ejemplos debe escribirse el comando tal cual se muestra, digitando la tecla
<Enter> al final.
date
comando que muestra la fecha y hora.
who
muestra los nombres de usuarios conectados al sistema en este momento.
hostname
muestra el nombre de la mquina UNIX.

Directorios.
Cada usuario tiene un directorio propio, llamado a veces "directorio home". Cuando el usuario
ingresa al sistema ya est ubicado en su directorio propio. El comando
pwd
muestra el directorio actual.
cd /home
cambia hacia el directorio /home, lo que puede verificarse con el comando pwd.
cd
sin parmetros devuelve al usuario a su directorio propio, desde cualquier lugar donde est. Este
comando es til cuando se han hecho varios cambios de directorio y se quiere retornar a una
situacin conocida, ubicndose en el directorio propio.

Listado de archivos.
Ensayemos el comando ls:
ls
lista archivos del directorio actual.
ls -l /bin
lista archivos en el directorio /bin; aqu se encuentran los archivos de comandos ejecutables del
sistema. No cambia de directorio; el directorio actual sigue siendo el mismo.
ls -l
lista archivos en formato largo, dando detalles. El -l se llama opcin o bandera; se lee "menos ele".
La salida obtenida consta de renglones parecidos a
-rw-rw-rw- 1 esteban users 138 Apr 5 19:34 leame
y se interpretan as:
indica el tipo de archivo de que se trata, con esta convencin:
- archivo comn,
d directorio,
l enlace o referencia a otro archivo.
rw-rw-rw
son los permisos del archivo;
r (read) permiso para leer el archivo
w (write) permiso para modificar o eliminar el archivo

x (execute) si se trata de un archivo, permiso para ejecutarlo


como
programa; si se trata de un directorio, permiso para ingresar
en l y recorrerlo.
Los tres grupos de 3 caracteres indican permisos para el dueo del archivo (esteban), su grupo
(users) y el resto del mundo.
1
cantidad de enlaces, referencias a este archivo desde otros archivos ubicados en diferentes lugares.
esteban
nombre del usuario dueo del archivo.
users
nombre del grupo al que pertenece el archivo
138
tamao en bytes del archivo. Si se trata de un directorio, este nmero es de control del sistema, sin
interpretacin inmediata para el usuario.
Apr 5 19:34
fecha y hora de ltima modificacin. Si no aparece el ao, se asume el ao corriente.
leame
nombre del archivo. Notar que el nombre del archivo est siempre al final.
ls -a
muestra tambin archivos ocultos, normalmente no visibles en el listado. Los archivos cuyo nombre
empieza con un punto son ocultos, en este sentido. Las entradas . y .. representan el directorio
actual y el directorio padre, respectivamente.
ls -la
formato largo y archivos ocultos.
ls -la /var
listado de archivos visibles y ocultos en formato largo del directorio /var.

Manual de UNIX.
UNIX dispone de un manual en lnea o "pginas man" con informacin sobre comandos, archivos y
otros elementos del sistema operativo. Aunque muy tcnicas y a veces difciles de comprender, son
una referencia obligada para operar con solvencia.
man ls
muestra la pgina man del comando ls, paginada para poder leer una pantalla por vez. Para salir
antes de terminar, digitar 'q'.
man man
muestra la pgina man del propio comando man.
man man > man.txt
redirecciona la salida y graba el contenido de la pgina man en el archivo man.txt, lo que se puede
verificar con ls.

Contenido de un archivo.
cat man.txt
muestra el contenido del archivo. El archivo man.txt, por provenir de una pgina man, contiene

muchos caracteres de control para regular su despliegue en pantalla. El comando cat no intrepreta
estos caracteres de control. El comando cat permite tambin concatenar archivos, segn se ver.
head man.txt
muestra las primeras 10 lneas de un archivo.
tail man.txt
muestra las 10 lneas finales de un archivo.
cat man.txt | more
lee una nota larga paginando; la salida de cat es tomada por more, que presenta la informacin
pgina por pgina. Para interrumpir el paginado de more, digitar 'q'. La tecla espaciadora avanza
una pantalla, la combinacin de teclas Ctrl-B retrocede una pantalla.
more man.txt
presenta la informacin de man.txt ya paginada.
ls -l /etc | more
muestra el extenso contenido del directorio /etc paginando la salida.

Crear y borrar un archivo.


touch nota.vacia
crea el archivo nota.vacia, sin contenido alguno.
ls -l nota.vacia
muestra datos del archivo creado.
cat nota.vacia
no muestra nada, el archivo est vaco.
touch .archivo_oculto
crea un archivo vaco y oculto.
ls
no muestra el archivo oculto creado, pero
ls -a
s lo muestra.
ls -la
muestra datos en formato largo del archivo oculto.
rm nota.vacia
borra el archivo nota.vacia. Como muchos comandos de UNIX, su nombre deriva de palabras
inglesas: rm proviene de "remove", eliminar o borrar.
rm -i man.txt
borrado interactivo, pide confirmacin antes de actuar.
rm .archivo_oculto
ls -la
borra el archivo oculto y verifica listando los archivos del directorio.
echo Mensaje en pantalla
muestra en la pantalla la leyenda indicada.
echo Este es el archivo mensaje1 > mensaje1
direcciona la salida del comando echo y graba la leyenda en el archivo mensaje1.
ls -l mensaje1
cat mensaje1
muestra datos del archivo y verifica su contenido.

echo Esta lnea es agregada >> mensaje1


echo Esta es otra lnea agregada >> mensaje1
cat mensaje1
redirecciona la salida de echo para agregar dos lneas ms al archivo ya existente mensaje1.
Verifica el contenido con cat.

Correo electrnico de UNIX.


Para leer el correo, digitar
mail
Este comando ingresa al usuario en el sistema de correo electrnico de UNIX. Revisa la casilla de
entrada de mensajes mostrando la lista de recibidos. De ahora en adelante, slo se aceptan los
comandos propios de mail. El indicador de comandos de mail es
&
Comandos disponibles dentro del sistema de correo:
d borra mensaje corriente, marcado con '>'
? muestra lista de comandos para manejo de mensajes
5 muestra el mensaje 5
h muestra la lista de mensajes
h 3 muestra la lista de mensajes comenzando en el 3
q sale del programa de correo
Para enviar un correo al usuario juan, desde la lnea de comando de UNIX digitar
mail juan
Escribir entonces el texto del mensaje. Antes de llegar al fin de la pantalla, digitar <Enter> para que
cambie al otro rengln. El comando mail no es un editor: no arregla las lneas ni permite corregir
lneas anteriores. Al finalizar de escribir el mensaje, digitar
.
(un punto solo en una lnea) y dar <Enter>. Un punto solo en la lnea termina el mensaje y devuelve
al usuario a la lnea de comandos de UNIX.
El usuario puede probar el correo envindose un mensaje a s mismo y luego leyndolo.
mail juan esteban
enva mensaje al usuario juan y al usuario esteban.
mail -s "Mensaje de prueba" juan
enva un mensaje de prueba al usuario juan con el ttulo "Mensaje de prueba". Es de cortesa indicar
siempre el tema del mensaje, para que el destinatario sepa inmediatamente de qu se trata.
Existen en UNIX muchos programas para manejo de correo, ms potentes y sofisticados; aqu nos
limitamos a mail como ejemplo de un comando de UNIX ms bien artesanal, pero siempre
presente y til para mensajera sencilla.

Usuarios en el sistema.
who
muestra los usuarios que estn actualmente en el sistema. Indica identificador de usuario, terminal
en que est conectado, fecha y hora de ingreso al sistema.
who am i
da informacin sobre el usuario que est trabajando, indicando su mquina y nombre de usuario,
terminal, fecha y hora.
whoami
presenta slo el nombre del usuario que est operando.

id
proporciona la identificacin del usuario invocante, dando el nombre de usuario y su nmero (UID),
nombre de grupo primario y su nmero (GID), nombres de otros grupos a los cuales pertenece (si
los hay) y sus nmeros.
id jperez
proporciona datos de identificacin del usuario indicado (jperez).
finger
proporciona nombre del usuario en el sistema, nombre en la vida real y otros datos del usuario
invocante, indicando si est en este momento en el sistema, y si tiene correo por leer.
finger jperez
proporciona informacin sobre el usuario indicado.

Talk.
Talk es un programa que permite a dos usuarios en el sistema comunicarse escribiendo en el
teclado. Al invocar talk la pantalla se divide en dos partes, cada una correspondiente a uno de los
usuarios. Ambos pueden escribir simultneamente, y ambos ven la salida en su parte
correspondiente de la pantalla.
talk usuario1
solicita apertura de una sesin de talk al usuario1, que debe responder con otro comando similar
cuando recibe el pedido.
Para terminar la sesin de talk, cualquiera de los usuarios puede digitar Ctrl-C.
El comando mesg permite regular si se desea recibir mensajes o no. Para evitar recibir mensajes de
talk es posible bloquear a otros usuarios el acceso a la terminal donde uno est trabajando;
quienes intenten iniciar una sesin recibirn un mensaje indicando que la terminal destino no est
habilitada para recibir mensajes.
mesg n
deshabilita recepcin de mensajes,
mesg y
habilita recepcin de mensajes.
mesg
muestra el estado: si responde "y" est habilitada la recepcin, si responde "n" se rechazan los
pedidos de conexin.

Cambio de contrasea.
passwd
pide la vieja contrasea y luego la nueva; la nueva contrasea deber ingresarse dos veces, para
evitar posibles errores de digitacin. En sistemas con servicio de informacin de red (NIS), el
comando es
yppasswd
El administrador del sistema indicar cul de estos comandos debe usar.

Fin de sesin.
exit
termina la sesin con UNIX, vuelve a presentar el mensaje inicial
login:
habilitando a un nuevo usuario a ingresar al sistema. Las teclas <Ctrl-D> tambin terminan la
sesin.

Otros.
Las teclas Ctrl-C interrumpen la ejecucin de un comando. Las teclas Ctrl-D indican un fin de
ingreso; si se dan en el indicador de comandos, termina la sesin UNIX. En UNIX no hay un
caracter reservado para fin de archivo; Ctrl-D simplemente indica la terminacin de un flujo de
datos.
En UNIX, la tecla <Enter> coloca un caracter nueva lnea, que en ASCII es <Ctrl-J>; con la tecla
<Enter> DOS o MS-Windows colocan dos caracteres al final de una lnea: un nueva lnea <Ctrl-J>
y un retorno <Ctrl-M>. Al mirar un archivo creado en DOS o MS-Windows con algunos programas
UNIX se pueden llegar a ver caracteres '^M' al final por esta razn.
Algunas terminales adminten un control instantneo de la salida, con las teclas
<Ctrl-S>
detiene despliegue.
<Ctrl-Q>
contina despliegue.
En las mquinas UNIX, el terminal de la propia mquina UNIX se denomina "consola"; se usa
preferentemente para administracin del sistema. Todas las teclas de control funcionan bien en la
consola; el funcionamiento en los emuladores de terminal depende de la construccin del programa
de emulacin.

Preguntas y Ejercicios.
Ejercicios Complementarios

Bibliografa y Referencias.
Comandos:
apropos cat cd date exit echo finger head hostname id info less ls
mail man mesg more passwd pwd rm talk tail touch whatis who who am
i whoami
Referencias: Kernighan-Pike[1987], Coffin[1989]

Preguntas y Ejercicios.
Ficha referencia: Tutorial
Los ejercicios propuestos referencian comandos vistos en esta ficha y anteriores. No obstante,
algunas de las tareas pedidas exigen conocer opciones no mencionadas. Las mismas pueden
encontrarse en la "Resea de Comandos".
1. LISTADO DE ARCHIVOS (terico).
Estudiar el formato largo de salida del comando ls. Interpretar las siguientes lneas de salida:
drwxr-xr-x 5 pedroso prod
512 Sep 11 15:09 articulos
-rw-r--r-- 1 pedroso prod
1430 Ago 10 07:56 docum1.prod
-rwxr-xr-x 3 admin1 adminfo 2330 Jan 7 09:34 rv
lrwxr--r-- 1 nicasio almacen 9500 Sep 11 10:56 listado.partes
2. LISTADO DE ARCHIVOS.
Estudiar el comando ls.
a) Listar recursivamente todos los archivos bajo el directorio /etc deteniendo el despliegue en
cada pantalla.
b) Probar otras opciones del comando ls usando el directorio /etc o /bin.
c) Listar archivos visibles e invisibles bajo el directorio corriente, en formato largo.
3. REDIRECCION E/S.
a) Crear el archivo cap1 con el contenido "Este es el captulo 1". Repetir con cap2 y cap3.
Verificar mostrando cada uno con cat.
b) Mostrar en pantalla uno tras otro, de una sola vez, los archivos cap1, cap2 y cap3 creados.
c) Grabar en un nico archivo, llamado libro, los archivos cap1, cap2 y cap3.
4. EDITOR ae.
El editor por excelencia de UNIX es vi, presente en todas las variedades de UNIX, usado
preferentemente para administracin del sistema. La distribucin Linux Debian/GNU contiene un
editor sencillo y pequeo llamado ae. Invocarlo escribiendo ae. Interpretar la ayuda y experimentar
con l creando y modificando textos breves.
5. SISTEMA DE ARCHIVOS.
a) Trasladarse al directorio doc, debajo del directorio usr, debajo del directorio raz. Mostrar el
directorio actual.
b) Trasladarse al directorio local, debajo del directorio usr, debajo del directorio raz. Mostrar el
directorio actual; mostrar los archivos contenidos en l.
c) Trasladarse al directorio propio del usuario desde cualquier otro directorio.
6. USUARIOS.
a) Mostrar informacin relativa al usuario en la sesin actual.
b) Mostrar qu usuarios hay en el sistema en el momento actual.
c) Mostrar el nombre de la mquina.
7. MANUAL.
a) Desplegar en pantalla la pgina del manual para el comando que muestra en pantalla las pginas
del manual.
b) Guardar en el archivo pwd.man del directorio actual, la pgina del manual pwd.
c) Mostrar el archivo pwd.man con el comandos more; luego visualizarlo con ae. Puede

explicar las diferencias?


8. FILTROS.
a) Grabar la salida de la pgina man del comando echo en el archivo echo.man. Verificar
mostrando echo.man con more.
b) Mostrar las 15 primeras lneas del archivo echo.man. Mostrar las ltimas 20 lneas del
archivo echo.man.
c) Capturar las 15 primeras lneas del archivo echo.man en el archivo extracto.echo.man.
d) Agregar al archivo extracto.echo.man las ltimas 20 lneas del archivo echo.man.
9. MAIL (terico).
Estudiar el comando mail. Asegurarse de ser capaz de invocar el programa de correo para leer
mensajes recibidos, y luego emitir comandos internos del programa de correo para
- mostrar la lista de mensajes recibidos;
- mostrar la lista de mensajes recibidos comenzando en el 21;
- leer el mensaje 5;
- borrar los mensajes 5, 7, 9 al 23;
- salir del correo actualizando la casilla.
10. MAIL.
a) Envese usted mismo un mensaje de correo con el ttulo "Mensaje 1" y el siguiente contenido:
Este es el mensaje 1.
Va dirigido a m mismo.
Saludos,
Yo.
Repita con textos similares para los mensajes de ttulo "Mensaje 2" y "Mensaje 3".
b) Lea el primero, y slo el primero, de todos estos mensajes con el comando mail, y salga de
mail. Vuelva a digitar mail. Cuntos mensajes tiene? Cules han quedado? Confirme leyendo el
mensaje 2, y slo ste.
c) Digite ahora el comando
mail -f mbox
Cul es su contenido? Para qu servir el archivo mbox?
d) Pruebe borrar algn mensaje del archivo mbox, salga de mail y vuelva a leer los mensajes de
mbox con mail -f mbox. Qu ha pasado?
e) Repita estas pruebas hasta asegurarse de comprender bien el funcionamiento de mail.
11. SISTEMA DE ARCHIVOS.
Estudie el comando touch. Qu har el comando touch archref si este archivo no existe?
Y si ya existe? Verificar en mquina.
12. SEGURIDAD.
a) El usuario jperez desea cambiar su contrasea. Cmo hace? Qu ayuda debe pedir al
supervisor?
b) El usuario jperez olvid su contrasea. Qu puede hacer por s mismo? Necesita ayuda del
supervisor?
c) Un usuario informa al supervisor que olvid su contrasea. Cmo puede el supervisor
averiguar la contrasea que el usuario olvid?
d) Cmo hace el supervisor para cambiar la contrasea del usuario jperez?
13. DOCUMENTACION.
a) Estudiar las opciones del comando man y probarlas.
b) Estudiar y probar los comandos whatis y apropos. Qu diferencia hay entre uno y otro?

c) Debian y otras variedades de Linux traen un programa de documentacin en lnea ms


sofisticado llamado info. Cmo podra obtenerse informacin sobre este comando? Tratar de
determinar cules son sus capacidades y compararlo con man.
14. DOCUMENTACION.
Estudiar en la Resea de Comandos los comandos mencionados en la ficha correspondiente a estos
ejercicios. Interpretar, hasta donde sea posible con los conocimientos actuales, las opciones
ofrecidas. Disear ejemplos para probarlas. Volver a revisar estas descripciones breves al
reencontrar los comandos a lo largo del curso.
15. DOCUMENTACION.
Las pginas man pueden ser difciles de interpretar. No obstantes, son la referencia obligada para
conocer el sistema, y la autoridad ltima en cuanto a su funcionamiento. En el trabajo con UNIX es
muy frecuente, an para usuarios experimentados, consultar estas pginas, debido la enorme
cantidad de opciones ofrecidas y el control fino que permite el sistema. Revisar el contenido de la
pgina man correspondiente a bash, el intrprete de comandos. Observar su extensin, contenido
general y forma de redaccin.

Tutorial
Ejercicios complementarios
Fichas referencia: Tutorial, Resea de Comandos.
1. Agregar al final del archivo libro en el directorio /home/autor el archivo capitulo.11 del
directorio actual.
2. Averiguar si hay algn comando que referencie la palabra "sound" en su descripcin de
primera lnea en las pginas man.
3. Desplegar en forma sucesiva y paginada, las primeras 3 lineas de los archivos de nombre
empezado con "aba" y terminado con ".log" del directorio /var/log/otros.
4. Enviar un correo al usuario carletto del dominio nsk.com.uy, con ttulo "Desayuno de
trabajo". El texto del mensaje est en el archivo invitacion.txt.
5. Enviar un correo a los usuarios carletto del dominio nsk.com.uy, y a los usuario fermin y
aparicio del dominio toros.edu.uy, todo en un solo comando. El ttulo es "Saludos matinales"
y el texto del mensaje se encuentra en salusmat.txt.
6. Escribir un comando para cambiar la contrasea propia. Escribir un comando para cambiar
la contrasea del usuario pocholo (es posible? en qu caso?).
7. Escribir un comando que muestre los grupos a los que pertenece el usuario jperez.
8. Grabar en el archivo contra.senia la pgina man del comando que cambia la contrasea del
usuario. Visualizar con more. Por qu se ven caracteres extraos?
9. Listar archivos visibles e invisibles bajo el directorio corriente
10.Listar archivos visibles y ocultos, en formato largo, en el directorio actual.
11.Listar archivos visibles y ocultos, en formato largo, en el subdirectorio HOWTO del
subdirectorio doc del directorio usr que est colgado del raz.
12.Listar recursivamente todos los archivos bajo el directorio /var.
13.Listar recursivamente todos los directorios, subdirectorios y archivos visibles e invisibles
bajo el directorio /etc deteniendo el despliegue en cada pantalla.
14.Listar recursivamente y en formato largo todos los archivos visibles e invisibles bajo el
directorio /var deteniendo el despliegue en cada pantalla.
15.Mostrar el directorio actual.
16.Mostrar informacin relativa al usuario en la sesin actual.
17.Mostrar los archivos del directorio /usr/doc/HOWTO a) en listado breve; b) en listado largo;
c) incluyendo archivos ocultos; d) en listado largo e incluyendo archivos ocultos.
18.Obtener informacin del comando passwd.
19.Obtener nombres de comandos relacionados con la contrasea, en ingls, "password".
20.Para qu sirve el comando apropos? Dar un ejemplo de uso.
21.Pedir al sistema informacin sobre el usuario root. Si conoce ms de un comando, indicarlos
todos.
22.Qu es el UID? Qu es el GID?
23.Trasladarse, desde cualquier lugar, hacia el directorio propio del usuario. Luego, escribir un
comando para indicar el directorio actual.

GNU info
info es un programa del proyecto GNU para leer o imprimir informacin. Sustituye a las pginas
man, forma tradicional de mantener informacin acerca del sistema UNIX. Para obtener
informacin sobre info, escribir
info info
info se basa en hipertexto; la informacin se organiza en "nodos" hacia los cuales es posible
desplazarse. Un nodo es el texto que describe una unidad temtica. Los nodos se organizan
jerrquicamente. El encabezado de cada nodo muestra el archivo donde se encuentra la
informacin, el nombre del nodo actual, el nodo siguiente en la organizacin temtica, el nombre
del nodo previo en la organizacin temtica, y el nodo superior en la jerarqua de informacin.
El tema del nodo aparece en doble subrayado.
Ejemplo de pantalla de info:

File: info-stnd.info,

Node: Top,

Next: What is Info,

Up: (dir)

File: info-stnd.info,
Program
********************

Node: Top,

Next: What is Info,

Up: (dir)The GNU Info

This file documents GNU Info, a program for viewing the on-line
formatted versions of Texinfo files, version 2.11. This documentation
is different from the documentation for the Info reader that is part of
GNU Emacs.
* Menu:
*
*
*
*

What is Info::
Options::
Cursor Commands::
Scrolling Commands::

Options you can pass on the command line.


Commands which move the cursor within a node.
Commands for moving the node around
in a window.
* Node Commands::
Commands for selecting a new node.
* Searching Commands::
Commands for searching an Info file.
* Xref Commands::
Commands for selecting cross references.
* Window Commands::
Commands which manipulate multiple windows.
* Printing Nodes::
How to print out the contents of a node.
--zz-Info: (info-stnd.info.gz)Top, 28 lines --Top------------------------------

Pantalla:
`--All----' abajo a la derecha: todo el texto cabe en una
pantalla;
`--Top----' abajo a la derecha: hay ms texto en pantallas
siguientes.
Menes:
Los menes tienen esta estructura:

* Menu:
* Item1: Ttulo-item1
* Item2: Ttulo-item2

Descripcin ttulo item 1


Descripcin ttulo item 2

Para ir hacia un item de men: colocar el cursor y dar Enter; Ctrl-g para arrepentirse (antes de dar el
Enter).
Otra forma: m, luego el nombre del item o las primeras letras, TAB puede completar cuando las
letras son suficientes
Para volver al nodo superior, u. Elegir un item de men "baja" a ese nodo; con u se "sube" de
regreso a l.
* Item3::
A este nodo (con ::) se llega slo con dar Enter con el cursor sobre l.
* Note Cross: Ref-Cruzada
Referencia cruzada
Para ir a una referencia cruzada, f. Con f? se muestra la lista de referencias cruzadas en el nodo
actual. Ctrl-g cancela.
Para terminar, q. Para volver a la informacin de info, m, luego Info.
Teclas:
h
?
Ctrl-g
Ctrl-L

invoca tutorial de info


lista de comandos de info, l para salir
aborta lo que se est haciendo
refresco de pantalla

ESPACIO
BS o Del
b

avanzar en el texto
retroceder en el texto
comienzo del nodo

n
p
m
f
u
l
d

nodo siguiente en la ordenacin temtica


nodo previo en la ordenacin temtica
elegir item de men, ir hacia ese nodo
seguir una referencia cruzada
a nodo superior
nodo anterior visitado (last)
a nodo directorio

salir de info

1..5
g

elegir item 1 .. 5 del men de nodo


mover a un nodo indicando su nombre;
puede darse el nombre de archivo, as
(nombre-archivo)nombre-nodo
buscar una cadena de caracteres, elegir el nodo
de la siguiente ocurrencia

Introduccin al "shell"
Crear dos archivos de prueba
Comandos en el sistema UNIX
Estructura de Comandos
Expansiones de la lnea de comandos
Variables de ambiente
Entrecomillado de argumentos
PS1
Entrada estndar y salida estndar
Fin de flujo
Agregar la salida estndar a un archivo
Error estndar
Interconexin de comandos (entubamiento)
Filtros
Campos y delimitadores
Valores de retorno de los comandos
El operador grave
Secuencias de comandos
Redireccin del shell
Fin
Bibliografa y Referencias
El intrprete de comandos o "shell" acta entre el sistema operativo y el operador. Provee al usuario
una interfaz hacia el sistema operativo. El usuario dialoga con el intrprete de comandos, y ste
transfiere las rdenes al sistema operativo, que las ejecuta sobre la mquina.

Crear dos archivos de prueba.


Con el comando cat puede crearse un archivo aceptando el teclado como entrada estndar y
direccionando la salida estndar hacia un archivo:
cat >nota
digitar las siguientes lneas, tal cual estn, terminando cada lnea dando <Enter>; finalizar con
<Ctrl-D>. Digitar con cuidado: una vez pasados al rengln siguiente, no puede volverse atrs para
corregir.
El shell es un intrprete de comandos.
Es tambin un lenguaje de programacin.
Los programas escritos con el shell se llaman scripts.
Digitar <Ctrl-D> para finalizar el ingreso.
cat nota
muestra el contenido digitado.
Crear del mismo modo el archivo LEAME, haciendo
cat > LEAME
con este contenido:
Este es el archivo LEAME.
Recuerde que UNIX diferencia entre maysculas y minsculas.

El archivo LEAME tendr este contenido.


cat LEAME
para verificar el contenido.

Comandos en el sistema UNIX.


En UNIX, los comandos son programas ejecutables separados. El shell es un intrprete de
comandos: puede expandir y cambiar la manera en que actan los comandos, admite el uso de
comodines y la interconexin o entubamiento de comandos.

Estructura de comandos.
La estructura general de un comando es la siguiente:
nombre opciones argumentos
nombre es el nombre del comando. Las opciones o banderas controlan la forma en que acta el
comando; van precedidas por el signo - (menos). Los argumentos son comnmente nombres de
archivos o nombres de login de usuarios.
pr -l23 nota
pr -l23 LEAME
da formato y muestra el archivo indicado en pginas de 23 lneas de largo para que quepa en la
pantalla.
pr -d -l23 LEAME
muestra el archivo LEAME a doble espacio, largo de pgina 23.
pr -d -o15 -l23 LEAME
doble espacio, margen izquierdo de 15 espacios, largo de pgina 23.
pr -l23 nota LEAME | more
muestra los dos archivos uno tras otro, pero los pagina separados.
cat nota LEAME
concatena los archivos; los presenta uno tras otro.
cat nota LEAME | pr -l23
concatena los archivos y luego les da formato a los dos juntos.

Expansiones de la lnea de comando.


Los comodines son caracteres que sustituyen cadenas de caracteres.
*
secuencia de caracteres cualesquiera, 0 o ms.
?
caracter cualquiera, uno y uno slo; debe aparear un
caracter.
[...] sustituye los caracteres indicados individualmente.

Variables de ambiente.
Las variables de ambiente son cadenas de caracteres de la forma
nombre=valor
nombre es cualquier cadena de caracteres que no incluya $ ni espacio (\b); valor es cualquier
cadena; puede incluir el espacio si el valor est entre comillas.
MUESTRA="hola chicos"

asigna "hola chicos" a la variable MUESTRA.


echo $MUESTRA
muestra en pantalla el contenido de la variable MUESTRA. Para exhibir el contenido de una variable
de ambiente se escribe echo $nombre-variable. En general, para hacer uso del contenido de
una variable, se escribe $nombre-variable.
Es una costumbre muy arraigada en UNIX usar maysculas para los nombres de variable, as como
es una regla usar minsculas para los comandos. Las opciones pueden ser maysculas y minsculas;
la opcin -a no es lo mismo que -A.
Las variables de ambiente pueden ser usadas como nombres de comando o como argumentos de un
comando.
XYZ="cat nota"
$XYZ
la variable XYZ contiene un comando, y al ser invocado su contenido, el comando es ejecutado.
echo hola $MUESTRA chicos
la variable puede usarse en la formacin de cadenas.
echo hola${MUESTRA}chicos
la variable puede embeberse en una cadena; las llaves delimitan el nombre de la variable.
env
muestra las variables de ambiente definidas. Muchas son fijadas en el ingreso del usuario al sistema
(variables de login); y otras son propias del shell (variables del shell).
echo $LOGNAME
muestra el nombre de login del usuario.
echo $HOSTNAME
muestra el nombre de la mquina.
echo $NOEXISTE
Las variables no definidas no muestran nada cuando son referenciadas.

Entrecomillado de argumentos en la lnea de comandos.


Los espacios separan argumentos. El entrecomillado obliga a tratar una cadena con espacios como
si fuera un solo argumento. Cuando se usan comillas dobles (" ") el shell interpreta las variables de
ambiente includas, actuando segn su contenido:
MUESTRA="Mi nombre de login es $LOGNAME"
echo $MUESTRA
Cuando se usan comillas simples (' ') el shell no interpreta las variables de ambiente, tratando sus
nombres como cadenas:
MUESTRA='La variable $LOGNAME contiene su nombre de login'
echo $MUESTRA
Las comillas simples permiten usar comillas dobles:
echo '"hola chicos"'

PS1.
Aunque generalmente los omitimos, en los ejemplos de esta seccin mostraremos el indicador de

comandos y la salida de ejecucin.


La variable smbolo de indicador de comandos nivel 1 PS1 (Prompt Symbol level 1) es un valor de
ambiente que puede no aparecer en la salida de env:
$ echo $PS1
$
responde con el indicador de comandos actual, $.
$ PS1=hola:
hola:
carga un nuevo indicador de comandos; el sistema responde con el nuevo indicador de comandos,
hola:.
hola: MUESTRA="ingrese comando:"
hola: PS1=$MUESTRA
ingrese comando: MUESTRA=hola
ingrese comando: echo $MUESTRA
hola
ingrese comando:
la variable MUESTRA cambi pero el indicador no cambi;
ingrese comando: PS1='$'
$
repone el indicador de comandos.

Entrada estndar y salida estndar.


Los comandos leen como entrada una secuencia de caracteres (flujo de entrada o "input stream"), y
escriben a la salida otra secuencia de caracteres (flujo de salida o "output stream"). Estas secuencias
no tienen estructura interna alguna, y se les llama entrada estndar y salida estndar.
cat nota > nota2
redirige la salida estndar a un archivo que crea o sobreescribe, en vez de a la pantalla.
mail juan < nota
toma la entrada estndar de un archivo en vez del teclado.
pr < nota > nueva.nota
el archivo nota es la entrada, el archivo nueva.nota es la salida.
cat nueva.nota
muestra el archivo donde se grab la salida con formato.
Los smbolos < y > redirigen entrada y salida estndar:
< nombre_entrada
redirige la entrada estndar
> nombre_salida
redirige la salida estndar
MUESTRA=/etc/passwd
pr < $MUESTRA > lista.usuarios
more lista.usuarios
Los comandos y los archivos tienen una estructura orientada a caracter. En muchos comandos se
puede intercambiar teclado por archivos o dispositivos de hardware.
cat nota
cat < nota
son comandos equivalentes porque cat opera sobre un archivo y tambin sobre la entrada estndar.

cat nota LEAME nueva.nota


cat nota - nueva.nota < LEAME
son comandos equivalentes. El signo menos (-) aislado equivale a tomar en ese punto la entrada
estndar, que usualmente est asignada al teclado.

Fin de flujo.
El ingreso de datos desde el teclado, as como el despliegue en pantalla, se manejan en UNIX como
"flujos de caracteres", una serie de caracteres uno tras otro. Para indicar en el teclado el fin de un
flujo de caracteres se usa Ctrl-D. Este smbolo no forma parte del ingreso; simplemente indica el
final del ingreso, que ya no se escribir ms. En UNIX no hay un caracter especial para indicar fin
de archivo; el sistema sabe cuando termina un archivo por medio de contadores.
cat nota - nueva.nota > arch.salida
procesa el archivo nota, lee lo que se digite en el teclado hasta recibir un Ctrl-D, procesa
nueva.copia y escribe todo en el archivo arch.salida; se renen tres fuentes distintas en una nica
salida.
cat arch.salida
muestra todo lo reunido.

Agregar la salida estndar a un archivo.


cat < nota > nota.copia
cat nota nota.copia > doble.nota
rm nota.copia
doble.nota contiene nota dos veces. Se logra lo mismo con
cat nota > dup.nota
cat nota >> dup.nota
El smbolo >> redirige la salida estndar a un archivo, pero agregando al final del mismo en lugar
de reemplazar su contenido.

Error estndar.
Adems de los flujos de entrada y salida estndar, existe un tercer flujo de caracteres, el error
estndar, hacia donde se dirigen los mensajes de error. El error estndar est dirigido habitualmente
a la pantalla, pero mediante 2> o 2>> se redirige el error estndar hacia un archivo de errores. Los
flujos estndar se reconocen por los siguientes nmeros:
0
1
2

la entrada estndar, usualmente el teclado;


la salida estndar, usualmente la pantalla;
el error estndar, usualmente la pantalla.

echo Archivo de errores > salida.error


cat noexiste 2>>salida.error
cat salida.error
el archivo salida.error contiene el mensaje inicial y el de error.
ls noexiste 2>>salida.error
rm noexiste 2>>salida.error
cat salida.error
rene los mensajes de error en el archivo salida.error .

Interconexin de comandos (entubamiento).


El operador | hace que la salida del comando precedente sea la entrada del comando siguiente,
creando un entubamiento o interconexin de comandos.
cat nota LEAME | pr > salida
hace que la concatenacion de los archivos nota y LEAME sea servida al comando pr, cuya salida
est redirigida a un archivo.
cat - LEAME < nota | pr > salida
tiene el mismo efecto. Notar la posicion de redireccion <.
Los operadores < y > redirigen, | conecta comandos.

Filtros.
Muchos comandos estn pensados para ser interconectados, pasando simplemente la entrada hacia
la salida, por lo que se les llama habitualmente filtros.
echo 'hola chicos' | tr l p
tr traduce caracteres y produce 'hopa chicos'.
echo 'hola chicos' | tr lo pa
produce 'hapa chicas'.

Campos y delimitadores.
Un campo es una cadena de caracteres separada por un caracter delimitador. El archivo /etc/passwd
tiene en cada lnea una serie de campos separados por dos puntos (:) .
more /etc/passwd
muestra el contenido de /etc/passwd.
cut -f1 -d: < /etc/passwd
cut -f1,3,5 -d: < /etc/passwd
muestra los campos pedidos usando el delimitador : (dos puntos).
cut -c1-8 < /etc/passwd
muestra columnas 1 a 8.
ls -l | cut -c56corta el listado de archivos desde donde empieza el nombre al final.
sort < /etc/passwd | cut -f1 -d: | more
ordena las lneas, corta el primer campo y presenta los nombres de usuarios habilitados en el
sistema.
env | cut -f1 -d= | sort
muestra nombres de variables de ambiente ordenadas; el separador es =.

Valores de retorno de los comandos.


Los comandos devuelven un cdigo de retorno 0 si el comando termina correctamente, o un nmero
entre 1 y 255 segn la razn de falla. El cdigo de retorno del ltimo comando queda en una
variable llamada '?', que se interroga como $?.
cat noexiste
ERROR=$?
echo $?

echo $ERROR
guarda el cdigo de error; la asignacin termina bien, por lo que en $? queda 0, pero en ERROR
qued el nmero de error de la operacin fallida. $? es una 'variable de shell' mantenida
internamente por el propio intrprete. Otras variables de shell son:
#
$

nmero de argumentos en el comando para la shell actual


nmero de proceso para el shell actual

Estas variables se interrogan como $# y $$.

El operador grave.
El acento grave (`) asigna a una variable de ambiente la salida estndar de un comando. El largo de
la variable es limitado, pero usualmente > 5120 en SVR4.
MUESTRA=`echo $LOGNAME`
echo $MUESTRA
escribe el nombre de login del usuario.
wc /etc/passw
cuenta lneas, palabras y caracteres.
El comando wc (word count) acepta opciones -l para lneas, -w para palabras y -c para caracteres.
TOTALPALABRAS=`cat * | wc -w`
echo $TOTALPALABRAS
cuenta las palabras en todos los archivos del directorio. Tambin
echo `cat * | wc -w`
echo Total de palabras en el directorio: `cat * | wc -w`
El acento grave permite ejecutar un comando dentro de otro, encerrando el comando anidado entre
acentos graves.

Secuencias de comandos.
El shell es tambin un lenguaje de programacin. Pueden escribirse varios comandos en una misma
lnea separndolos con ; (punto y coma).
date ; echo Hola ; echo $LOGNAME
MUESTRA=`date ; echo Hola ; echo $LOGNAME`;echo $MUESTRA

Redireccin del shell.


El shell que atiende los comandos del usuario es el login shell; arranca cuando el usuario ingresa al
sistema y termina cuando sale. Escribir sh como comando invoca una segunda instancia del shell,
que puede terminarse con el comando exit o con <Ctrl-D>.
Puede crearse un archivo de comandos haciendo
cat > datos.usuario
y escribiendo las siguientes lneas. Pueden omitirse los comentarios (de # en adelante)
echo Salida del comando datos.usuario
echo Fecha: `date `
# fecha y hora
echo Usuario: $LOGNAME
# nombre de login del usuario

ps
# procesos corriendo del usuario
echo Shell actual: $$
# nmero de proceso para el shell
actual
finalizar con <Ctrl-D>. Los # indican comentario.
Para convertir el archivo en ejecutable para el usuario, hacer
chmod u+x datos.usuario
Verificar con ls -l. Los comandos ingresados en el archivo pueden ejecutarse con
sh datos.usuario
Este comando invoca una nueva instancia de shell que no es la del ingreso al sistema.
Agregar una lnea ms haciendo
cat datos.usuario - >> masdatos.usuario
y escribiendo
cat noexiste
# intenta mostrar un archivo inexistente
Finalizar con <Ctrl-D>.
echo "Archivo de errores del usuario" > errores.usuario
coloca una lnea descriptiva en el archivo errores.usuario.
cat errores.usuario
verifica su contenido.
sh <masdatos.usuario >salida.usuario 2>>errores.usuario
lee los comandos del archivo masdatos.usuario en la entrada estndar, redirige la salida estndar al
archivo salida.usuario y redirige la salida del error estndar al archivo errores.usuario.
cat salida.usuario
cat errores.usuario

Fin.
Borrar con el comando rm los archivos auxiliares; conservar para referencia los archivos nota,
LEAME, datos.usuario , masdatos.usuario y eventualmente otros que le interesen.

Preguntas y Ejercicios
Ejercicios Complementarios

Bibliografa y Referencias:
Comandos: cat chmod pr echo env tr cut sort wc ps
Referencias:
Coffin[1989], Greenfield[].
Pginas man/info de Linux "bash" ("Bourne-Again SHell").

Preguntas y Ejercicios.
Ficha Referencia: Introduccin al Shell
Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
Estructura del archivo /etc/hosts:
#nmero_IP nombre_mquina alias
10.137.137.250
liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (lneas comenzadas por #).
1. COMANDOS. Cambiar hacia el directorio /etc, verificar que se est all mostrando el
nombre del directorio actual, desplegar la lista de archivos en ese directorio, volver al
directorio propio, verificar.
2. COMANDOS. Estudiar en la resea de comandos el comando more, asegurndose de
conocer la forma de avanzar una pgina, retroceder una pgina, avanzar y retroceder una
lnea, y salir de more. Sugerencia: usar el comando man ls para mostrar la pgina man
del comando ls ; las pginas man se paginan con more automticamente. Repetir con
less, anotando las diferencias.
3. FILTROS. Crear el archivo hosts.txt con las 10 primeras lneas del archivo
/etc/hosts; crear el archivo group.txt con las 10 ltimas lneas del archivo
/etc/group . Verificar su contenido. Concatenar ambos archivos presentndolos juntos
en pantalla.
4. FILTROS. Presentar el archivo largo /etc/inetd.conf con formato de impresin
fijando el largo de pgina en 23; paginar la presentacin en pantalla para poder examinarlo.
5. REDIRECCION. Crear el archivo lineas con el texto "Archivo lineas" como contenido.
Verificar con listado largo sus caractersticas de creacin, explicando la salida del comando
ls -l. Agregar al archivo creado una lnea de texto, por ejemplo "Esta es la lnea 1", y
mostrar su contenido. Repetir agregando otra lnea similar, y mostrar el contenido del
archivo.
6. COMANDOS. Analizar la salida de los siguientes comandos: who, who am i,
whoami e indicar las direrencias. Analizar la salida de los comandos hostname, id.
7. COMANDOS. Analizar la salida del comando finger nombre-usuario . Use
primero su propio nombre de usuario, luego el de otro usuario del sistema. Qu
informacin brinda?
8. COMANDOS. Usando el directorio /bin, mostrar todos los nombres de archivo que
empiecen con c; mostrar luego todos losnombres de archivo que terminen con t; mostrar
finalmente los nombres de archivo que empiecen con c y terminen con t.
9. VARIABLES.
a) Asignar el valor "Lunes" a la variable DIA1, el valor "Martes" a la variable DIA2, hasta
asignar "Domingo" a la variable DIA7.
b) mostrar el valor de todas para verificar.
c) Usando estas variables, obtener la salida
Semana: Lunes Martes Mircoles Jueves Viernes Sbado Domingo
d) Usando slo las variables definidas, cargar en la variable SEMANA la lista de das,
separados por espacios. Mostrar el contenido de SEMANA para verificar.

10.VARIABLES.
Usando variables del ambiente del usuario (variables de login), mostrar
a) va del directorio propio del usuario;
b) nombre de login del usuario;
c) nombre de la terminal en uso en la sesin actual;
d) nombre del intrprete de comandos actual.
e) va de bsqueda de ejecutables.
f) Mostrar todas las variables de ambiente. Cules puede reconocer?
11.VARIABLES.
a) Fijar el valor de la variable VIAS en "/usr/doc:/var/lib/dpkg"; mostrar su contenido.
b) agregar a la variable VIAS el directorio /usr/doc/HOWTO al final, y /usr/doc/FAQ
al principio.
12.ERROR.
a) Qu muestra el shell para la variable NOEXISTO ? Qu cdigo de error devuelve?
b) Asignar a la variable NULA la cadena nula. Qu muestra el shell para esta variable? Qu
codigo de error devuelve? Repetir asignando blancos.
c) Asignar a la variable BLANCOS una cadena con blancos embebidos, por ejemplo "Esta
cadena contiene blancos". Qu pasa si no se usan comillas al asignar? Explicar el
comportamiento. Mostrar el cdigo de error devuelto en cada caso.
d) Mostrar el contenido del archivo /etc/group. Qu cdigo de error devuelve el
comando?
e) Mostrar el contenido del archivo noexiste. Qu cdigo de error devuelve el comando
13.REDIRECCION.
a) Con el comando cat, mostrar en pantalla el archivo /etc/services.
b) Escribir el comando cat de modo redireccionando la entrada estndar desde el archivo
/etc/services y la salida estndar hacia el archivo servicios.txt. Visualizar servicios.txt.
c) Usando echo, crear un archivo errores.txt con contenido "Archivo de Errores".
d) Con el comando cat, intentar mostrar el archivo noexiste.xxx sin redireccionar entrada
estndar, pero redireccionando la salida estndar hacia noexiste.txt y el error estndar para
agregar al archivo errores.txt. Visualizar errores.txt.
14.REDIRECCION (terico).
a) Haciendo uso del shell bash invocar el script comotodo para que lea desde el archivo
larguisimo, no muestre ni grabe su salida y grabe los errores en el archivo errores.
b) Repetir para que no muestre ni grabe los errores.
15.VARIABLES.
Predecir y explicar la salida de los siguientes comandos:
echo $LOGNAME
echo "$LOGNAME"
echo '$LOGNAME'
echo \"$LOGNAME\"
echo "Mi login es $LOGNAME"
echo 'Mi login es $LOGNAME'
16.EXPANSIONES DEL SHELL (terico).
Escribir expresiones para englobar todos los nombres de archivos que
a) comiencen con un dgito.
b) terminen con una vocal.
c) terminen con una letra mayscula.
d) de 6 caracteres terminados en dos dgitos.
e) formados por tres letras: una minscula, una mayscula o minscula, una vocal
minscula. Ejemplos: sTa, bta, mbu, tTo.
f) empezados con letra minscula, terminados con un punto y tres dgitos.
17.VARIABLES DE AMBIENTE.

a) visualizar el contenido de la variable que guarda el indicador de comandos; copiar en un


papel su valor actual.
b) Cambiar el indicador de comandos para que se muestre as:
UNIX listo>
Recordar que > es un caracter de redireccin del shell; es interpretado por el shell.
c) Inicializar la variable VAR1 con la cadena "shell bash 1". Mostrar su contenido. Invocar
ahora el shell csh. Mostrar contenido de la variable VAR1. Explique.
d) Salga de csh. Qu valor tiene VAR1 ? Explique.
e) En el primer shell (shell de login), ejecute el comando
export VAR1
y repita el paso anterior. Qu ha pasado?
f) Si en lugar de csh invocamos una nueva instancia de bash, ocurrir lo mismo?
18.FILTROS.
a) Obtener una lista de los usuarios habilitados en el sistema, usando el archivo
/etc/passwd. Sugerencia: filtrar las lneas de comentario conectando la salida del listado
con el comando de filtro grep -v "^#", que elimina las lneas empezadas con "#".
b) Repetir, pero mostrando slo nombre de login y nombre en la vida real.
c) Repetir, ordenando alfabticamente.
d) Crear el archivo usuarios.txt con la lista, con un encabezado similar a ste:
===================================
Usuarios en el Sistema.
Lunes 23 de Agosto de 1999, 20:45
==================================
e) Presentar el contenido del archivo en formato de impresin, con encabezado en cada
pgina diciendo "Lista de Usuarios", longitud de pgina 23 y margen izquierdo 12.
19.FILTROS. a) Contar la cantidad de lneas, palabras y caracteres en el archivo
historia.txt.
b) Contar la cantidad de usuarios habilitados en el sistema.
c) Contar la cantidad de archivos en el directorio /bin usando el comando ls.
d) Repetir usando el comando ls -l. Explicar la diferencia.
20.FILTROS. a) Mostrar el archivo historia.txt todo en maysculas. Resolver bien la
y las vocales acentuadas.
b) Repetir, pero dejando las vocales acentuadas minsculas como vocales no acentuadas
maysculas.
c) Transformar todos los espacios en subrayas (_). Contar ahora las palabras. Cuntas haba
en el archivo sin transformar?
21.OPERADOR GRAVE. a) Escribir comandos para cargar la variable LISTA con los
nombres de los archivos del directorio actual.
b) Crear el archivo usuarios.txt con 4 o 5 nombre propios, uno en cada lnea. Cargar
en la variable USUARIOS el contenido del archivo usuarios.txt. Mostrar contenido de
USUARIOS
c) Sin editar el archivo usuarios.txt, agregar al final del mismo la fecha y hora del da.
d) Cmo hara para agregar la fecha y hora del da al principio del archivo?
22.PROCESOS. a) Mostrar los procesos propios corriendo en el sistema.
b) Explicar la salida del comando ps auxw.
c) Idem para ps ajxw.
d) Si estamos corriendo varias instancias de bash, cmo sabemos cul es el shell de login?
Nota. Para estos ejercicios, el archivo historia.txt puede ser sustitudo por cualquier archivo
de texto en espaol.

Introduccin al Shell
Ejercicios complementarios
Fichas referencia: Introduccin al Shell, Resea de Comandos.
1. Agregar a la variable PATH el directorio /usr/local/bin de modo que los comandos sean
buscados en ese directorio antes que en cualquier otro.
2. Agregar a la variable PATH los nombres de directorio /var/lib/dpkg y /usr/doc/HTML.
3. Al escribir comandos, qu diferencia hay entre usar comillas dobles y simples?
4. Al ingresar comandos, para qu sirven los smbolos ";" y "|"?
5. Asignar a la variable DIA el valor "Lunes" y mostrarla.
6. Asignar a la variable PATH el contenido de la propia variable PATH ms el directorio
/opt/Office52.
7. Borrar del directorio actual los archivos carta_10 a carta_30 inclusive.
8. Desplegar en pantalla uno tras otro los archivos cap1, cap2 ... cap9 del directorio actual
deteniendo el despliegue a cada pantalla.
9. Diferenciar los caracteres "|", "\", "/" y ";" en el shell, indicando para qu se usa cada uno.
10.Ejecutar el comando nodigo de modo que no produzca ninguna salida ni muestre ningn
error.
11.Ejecutar el comando nsk del directorio /usr/local/bin de modo que tome su entrada del
archivo datos del directorio del usuario jperez en /home, grabe su salida en el archivo
jperez.dts del directorio actual y los errores en jperez.errs del directorio actual.
12.Ejecutar el comando (hipottico) llamado nsk ubicado en el directorio /usr/local/bin de
modo que tome su entrada del archivo datos del directorio del usuario jperez en /home,
grabe su salida en el archivo jperez.dts del directorio actual y los errores en jperez.errs del
directorio actual.
13.Escribir un script que reciba un nombre de archivo como parmetro y agregue, al principio
del archivo, las leyendas MEMORANDUM | Montevideo, URUGUAY | (fecha del da) |
(rengln en blanco) | , donde la barra vertical indica cambio de lnea. Si se usan archivos
temporales, eliminarlos al terminar. Sugerencia: el nombre de archivo pasado como
parmetro est disponible, dentro del script, en la variable llamada $1.
14.Fijar en la variable TRABAJO el nombre /grupos/docentes/examenes/dic1999. Usar la
variable para trasladarse rpidamente a ese directorio.
15.Los parntesis y otros smbolos son "interpretados por el shell". Cmo puede escaparse esta
intepretacin y mostrar los parntesis? Escribir un comando que muestre en pantalla la
leyenda "(aqu se ven los parntesis)" de todas las formas que sepa hacerlo.
16.Mostrar el cdigo de error del ltimo comando ejecutado.
17.Mostrar la pgina del manual del comando que da formato para imprimir.
18.Mostrar las primeras dos lneas de los archivos cap01.txt a cap99.txt del directorio novela
bajo el directorio actual. Mostrar la salida paginada.
19.Mostrar las ltimas 20 lneas del archivo lista.001 del directorio padre del actual.
20.Mostrar todas las variables de ambiente.
21.Para qu sirve el operador grave? Dar un ejemplo.
22.Qu contiene la variable PATH?

UNIX y C
El sistema operativo UNIX suele venir acompaado de un compilador para lenguaje C. Escribiendo
programas en lenguaje C es posible crear comandos indistinguibles de los propios de UNIX. Como
ejemplo, puede crearse el siguiente archivo, usando un editor de texto sencillo como el ae, o el
comando cat si se tiene f en la propia digitacin.
Contenido del archivo hola.c:
/* hola.c: programa de saludo */
#include <stdio.h>
main()
{
printf("Hola, mundo\n");
}
Compilar el contenido de este archivo con el comando
cc hola.c -o hola
Esto crea el archivo de salida hola, ejecutable en UNIX mediante el comando
./hola
Imprime, como es de suponer, la frase "Hola mundo".
Un ejemplo ms interesante, con uso de llamadas a la biblioteca del sistema, es el ejemplo
siguiente, una versin muy mnima del comando cat, que llamaremos cati.
Contenido del archivo cati.c:
/* cati: cat versin mnima */
# define LARGO 1024
/* define valor de variable LARGO */
main()
{
char bufer[LARGO];
int n;

/* declara un arreglo de caracteres */


/* para contar caracteres ledos */

/* llamada al sistema para leer caracteres desde la entrada


estndar (0), hacia el arreglo bufer, en cantidad igual al
tamao del arreglo bufer
*/
n = read(0, bufer, sizeof bufer);
/* primera lectura */
/* repite mientras haya caracteres ledos, es decir, n>0 */
while (n > 0)
{
/* llamada al sistema para escribir caracteres en salida
estndar (1), en cantidad n, extrayendo desde arreglo
bufer
*/
write(1, bufer, n);
n = read(0, bufer, sizeof bufer);

/* siguientes lecturas */

}
exit(0);

/* sale devolviendo cdigo de retorno 0 */

}
Los extensos comentarios explican el funcionamiento. Compilar este programa con el comando
cc cati.c -o cati
Esto crea el archivo de salida cati, ejecutable en UNIX. El comando
./cati <hola.c
muestra el contenido del programa hola.c. Esta versin mnima slo funciona redireccionando la
entrada estndar. Puede probarse su funcionamiento ingresando datos desde el teclado, finalizando
con Ctrl-D. El programa puede interrumpirse con Ctrl-C. Qu diferencia hay?
Es un problema de programacin algo ms complejo asimilar un nombre de archivo como
parmetro y hacer que el programa despliegue el contenido de este archivo.
La razn por la que estos programa se invocan como ./hola y no simplemente hola es que el
directorio actual no est habitualmente en la va de bsqueda de ejecutables (variable PATH).
Colocando las versiones ejecutables de los programas hola o cati en un directorio como /bin
los hara ejecutables directamente como cualquier comando de UNIX.
Estos ejemplos muestran la versatilidad de UNIX como sistema operativo: puede uno ampliarlo con
comandos construdos por uno mismo que se integran perfectamente a los comandos propios del
sistema. En las distribuciones de UNIX de dominio pblico suelen venir los fuentes en C de todos
los comandos, lo cual permite, al usuario con conocimento suficiente, modificar o corregir estos
programas.

Sistema de Archivos
Archivos
Directorios
Nombres de Archivo
Directorio Propio. Directorio Actual
Nombres de Directorio
Cambios de directorio
Estructura Interna de los Archivos
Propiedades de los archivos
Tipo y Permisos de achivos
El sistema de archivos en UNIX
Preguntas y Ejercicios
Bibliografa

El sistema UNIX funciona totalmente en base a archivos. Los programas, los datos, los directorios y
an los controladores de dispositivos tales como discos, modems e impresoras, son archivos.
El sistema de archivos de UNIX se organiza en una jerarqua de directorios que resulta en una
estructura arborescente.

Archivos.
Cada archivo tiene asociado un nombre, un contenido, un lugar de ubicacin e informacin de tipo
administrativo, tal como dueo y tamao. El contenido de un archivo puede ser texto, programas
fuente, programas ejecutables, imgenes, sonidos y otros.
Estructuralmente un archivo es una secuencia de bytes de datos que reside en forma
semipermanente en algn medio estable, como ser una cinta magntica o un disco.

Directorios.
Los archivos se agrupan en directorios. Un directorio es un archivo que contiene una lista de
nombres de archivo e informacin acerca de los mismos. Dentro del sistema de archivos, un
directorio es una localizacin capaz de contener otros directorios o archivos. Dos archivos que se
encuentren en distinto directorio pueden tener el mismo nombre sin confundirse.
El comando ls permite listar el contenido de un directorio:
ls /var
el argumento es un directorio; la salida son los nombres de archivos y subdirectorios en ese
directorio.
ls nota
el argumento es un archivo, la salida es el nombre del archivo.
ls -l /var
muestra los archivos y subdirectorios contenidos en /var en formato largo.
ls -ld /var
muestra caractersticas del directorio /var en lugar de los archivos y subdirectorios contenidos en
l.

Nombres de archivos.
Para el nombre de archivo se puede usar prcticamente cualquier caracter, incluso caracteres no
visibles. Los caracteres $ ; \ & ! * | causan confusin y no conviene usarlos. Se aconseja
usar solamente letras, nmeros, punto, guin y subraya. UNIX diferencia maysculas y minsculas:
el archivo NOTA.TXT es distinto del archivo nota.txt y tambin de Nota.txt. No se
distingue entre nombre de archivo y extensin: nota.nueva.txt es un nombre de archivo
vlido, y LCK..modem tambin.
Un archivo que comienza por un punto no es visible:
touch .noseve
ls
ls -a
ls no lo muestra, pero s ls -a.
rm .noseve
lo borra como a cualquier archivo.

Directorio propio. Directorio actual.


Al ingresar al sistema cada usuario entra en su directorio propio, un directorio privado que no es
tocado por el sistema ni por los otros usuarios. El directorio en el cual se encuentra posicionado el
usuario en un momento dado se denomina su directorio actual.
cd /usr/bin
pwd
cambia al directorio /usr/bin; el directorio actual es /usr/bin.
cd
pwd
devuelve al usuario a su directorio propio, que es ahora el directorio actual.
echo $HOME
nuestra el nombre del directorio propio. HOME es una variable de ambiente que contiene el nombre
del directorio propio del usuario.
cd $HOME
tiene el mismo efecto que cd.

Nombres de directorios.
Un directorio puede contener otros directorios as como archivos ordinarios, lo que genera una
jerarqua o rbol de directorios. El directorio superior o directorio raz se denomina /.
cd /
pwd
el directorio actual es el directorio raz.
cd
vuelve al directorio propio del usuario.
El caracter / se usa tambin para separar los componentes de un nombre de archivo completo:
/export/home/usuario1/nota.
La porcin /export/home/usuario es la ruta, nota es el nombre del archivo. Si se omite la
ruta, se asume que el archivo se encuentra en el directorio actual. Un nombre tal como
textos/libro/capitulo.1 indica que su ruta comienza a partir del directorio actual. Sera
lo mismo escribir ./textos/libro/capitulo.1 ya que el punto designa el directorio
actual. Dos puntos seguidos designan el directorio de nivel superior al actual. Si el directorio actual

es /home/usuario1
ls ../usuario2
muestra el contenido de los archivos en /home/usuario2
El caracter / separa directorios includos como parte de un nombre de archivo o directorio.
ls dir1
es un direccionamiento relativo;
ls /home/esteban/dir1
es un direccionamiento absoluto.
Pueden usarse comodines para referenciar directorios y archivos:
cat /home/esteban/*/*

Cambios en la jerarqua de directorios.


mkdir nuevo.dir
crea un nuevo directorio.
rmdir nuevo.dir
borra un directorio existente; acta slo sobre directorios vacos.
mkdir dir1
mkdir dir1/dir2
touch dir1/dir2/arch2 dir1/arch1
ls -lR
muestra todos los archivos y directorios creados;
rm -r dir1
borra el directorio y todos los archivos y subdirectorios que pueda contener.

Estructura interna de los archivos.


Un archivo es una secuencia de bytes. Un byte es equivalente a un caracter. El sistema no impone
estructura alguna a los archivos ni asigna significado a su contenido; el significado de los bytes
depende totalmente de los programas que interpretan el archivo.
En ningn caso hay ningn byte que no haya sido colocado por el usuario o un programa. No hay
caracter de fin de archivo. El ncleo del sistema UNIX se mantiene al tanto del tamao de los
archivos sin introducir ningn caracter especial. El caracter nuevalnea es interpretado por las
terminales como nueva lnea y retorno de carro (CR LF, carriage-return y line-feed), necesario para
desplegar correctamente los renglones en la terminal. Al apretar la tecla Enter el ncleo transmite a
la terminal CR LF, pero en un archivo se guarda slo LF.
Qu hay dentro de un archivo? El ncleo no puede decirnos nada del tipo de archivo: no lo conoce.
Todos los archivos tienen la misma estructura interna. El comando file hace una conjetura: lee
algunos bytes y busca indicios sobre el tipo de contenido. En los sistemas UNIX hay slo una clase
de archivo. Lo nico que se requiere para accederlo es su nombre.

Propiedad de los archivos.


Cada usuario es dueo de los archivos creados por l, hasta que los borre o los ceda a otro usuario.
Cada usuario pertenece a un grupo, y puede compartir archivos con los usuarios de ese grupo. Cada
archivo est asignado a un grupo de usuarios, al cual debe pertenecer su dueo. El comando ls -l
muestra dueo y grupo de los archivos listados.

Tipo y permisos de archivos.


Cada archivo tienen un conjunto de permisos asociados con l que determinan qu puede hacerse
con el archivo y quin puede hacerlo.
Los permisos de un archivo se indican con 10 caracteres:
1 caracter para tipo de archivo,
3 caracteres [rwx] para permisos del dueo,
3 caracteres [rwx] para permisos del grupo,
3 caracteres [rwx] para permisos de otros.
Caracter para tipo de archivo:
d directorio
l enlace simblico
- archivo normal
b archivo controlador de dispositivo orientado a bloques
c archivo control de dispositivo orientado a caracteres
Caracteres de permisos:
r acceso de lectura (read)
w acceso de escritura (write)
x acceso de ejecucin (execute)
cuyo significado vara segn se trate de archivos o directorios:
Permiso Archivos

Directorios

leer archivos

ver contenido de directorios

grabar en un archivo

crear y borrar archivos

ejecutar como programa ingresar a un directorio

sin derechos
sin derechos
El ingreso a un directorio (permiso x) permite ejecutar un archivo contenido dentro de l, o
trasladarse a ese directorio; para estas operaciones no es necesario poder ver los nombres de los
archivos contenidos (permiso r).
Un archivo se declara ejecutable dndole permiso de ejecucin. Se ejecuta dando su nombre. Los
comandos de UNIX son archivos ejecutables.
Ejemplos de permisos de archivo:
rwxr--r-rw-rw-r-rw-------

El sistema de archivos en UNIX.


Un sistema de archivos en UNIX puede contener miles de archivos, cientos de directorios y cientos
de enlaces simblicos, dependiendo de la distribucin y de lo que se haya instalado. Como
referencia, la distribucin Debian/GNU 2.1 viene con cerca de 2500 paquetes para instalar. Una
instalacin normal puede insumir un 25% en herramientas de administracin, y un 10 % en
herramientas de desarrollo. Borrar, alterar o cambiar permisos de archivos puede conducir a
resultados impredecibles.
$ ls -F /
es til para recorrer el sistema de archivos, bajando luego a los subdirectorios.
Los requerimientos de las redes cambiaron la organizacin funcional del sistema de archivos. En un
lugar grande, la red se configura con un conjunto de mquinas heterogneas, cada una responsable

del mantenimento y uso de cada archivo. Los archivos pueden ser especficos para cierta mquina,
compartidos por varias mquinas del mismo tipo, o accesibles a casi cualquier tipo de mquina en la
red. Enlaces simblicos hacia la anterior localizacin de los archivos ayudan al acceso. Un
directorio puede ser real o un enlace simblico a otro; usar /bin/pwd para si se ha llegado al
directorio directamente o a travs de un enlace simblico.
Convenciones en nombres de archivos y directorios.
/bin
/boot
/cdrom
/dev
./dsk
./fd
./kd
./kmem
./null
./osm
./pts
./rdsk
./term
./xt
/dosc
/etc
./init.d
./rc?.d
nmero de
./skel
/export
/floppy
/home
/lib
/lost+found
/mnt
/proc
/root
/sbin
/tmp
/usr
./X11R6
./bin
./doc
./include
./info
./lib
./local
./man
./sbin
./share
./src

archivos ejecutables, comandos de usuario


archivos de arranque
punto de montaje para la uniad de CD-ROM
archivos especiales de dispositivos
[subdirectorios propios de System V]
dispositivos de disco
dispositivos descriptores de archivo
dispositivos de teclado y despliegue
memoria
dispositivo para descarte de salidas
mensajes de error del ncleo
pseudo ttys; igual que /dev/pts*
dispositivos crudos de disco
terminales; igual que /dev/tty*
pseudo ttys; para capas DMD
punto de montaje para la particin DOS
configuracin de paquetes, configuracin de sistema
scripts de arranque y detencin de programas
enlaces a scripts, con K o S (Kill o Start), y
secuencia para controlar el arranque
archivos de inicializacin para nuevos usuarios
directorios de usuarios en sistemas grandes
para montar una unidad de disquete
objetos relacionados con los usuarios
bibliotecas de desarrollo y material de apoyo
archivos perdidos
punto de montaje de dispositivos externos
archivos de control de procesos
directorio propio para el supervisor (root)
archivos ejecutables de administracin
archivos temporales
ejecutables, documentacin, referencia
sistema X-Windows
ms ejecutables
documentos de paquetes de software
encabezados .h de bibliotecas en C
archivos de info, informacin de UNIX (GNU)
ms bibliotecas en C
ejecutables instalados por el administrador
subdirectorios de pginas del manual
ms archivos ejecutables de administracin
compartidos
(source) cdigo fuente del kernel

/var
./backup
./catman
./lib
./lock
./log
./spool
otros
./run

archivos de log, auxiliares, archivos que crecen


respaldo de algunos archivos del sistema
pginas man ya formateadas
informacin propia de programas
control de bloqueos
archivos de registro de mensajes (log) del sistema
colas de impresin, intermedios de correo y
informacin de procesos (PIDs)

Preguntas y Ejercicios.
Bibliografa.
Comandos:
ls cat cd echo file mkdir pwd rm rmdir touch
Referencias: Kernighan-Pike[1987], Coffin[1989]

Preguntas y Ejercicios.
Ficha Referencia: Sistema de Archivos
1. TIPOS DE ARCHIVO. a) con el comando which determinar la ubicacin de los archivos bash,
vi, adduser . Si alguno de estos archivos no se lograra ubicar, cul puede ser la razn? Se
puede corregir?
b) con el comando file deducir el tipo de cada uno de estos archivos.
c) repetir con los archivos hola.c, hola, nota, LEAME, /etc/passwd, /usr,
/dev/ttyS0, /dev/hda, /dev/hda1, /etc/init.d/network,
/usr/sbin/adduser, /dev/modem, /dev/mouse.
c) repetir con los archivos hola.c, cati.c. Por qu da distinto si ambos son programas en C?
2. SISTEMA DE ARCHIVOS. Con el comando ls -F explorar los dos primeros niveles del
sistema de archivos. Determinar cules directorios y subdirectorios puede reconocer en cuanto a
contenido. Comparar con el esquema de referencia. Anotar diferencias; esto es til a la hora de
buscar ubicaciones.
3. SISTEMA DE ARCHIVOS. Diferencie las dos acepciones habituales de "sistema de archivos",
explicando cada una. Liste todos los tipos de sistema de archivos que conozca, indicando qu
sistema operativo los usa.

Manejo de Archivos
Copia de Archivos
Mover, cambiar de nombre
Enlaces "hard"
Enlaces simblicos
Opciones del comando ls
Cambio de dueo y grupo
Modos de permisos
Listado de permisos de los directorios
Cambio de permisos
basename, dirname
Archivos de dispositivos
El comando "mesg"
Otros dispositivos
Preguntas y Ejercicios
Bibliografa y Referencias

En los ejemplos siguientes se asume al usuario ubicado en su directorio personal, el cual contiene
los archivos nota y LEAME. El resultado de cada ejemplo debe comprobarse mediante comandos
tales como pwd,ls, cat o more.

Copia de archivos.
cp nota nota.copia
copia el archivo nota en nota.copia. Si el directorio propio del usuario es
/home/usuario1,
cp ./nota /home/usuario1/nota.copia
hace lo mismo indicando las rutas. Si el archivo destino existe lo sobreescribe y realiza la copia sin
comentario ni advertencia.
mkdir dir1
cp nota dir1
si el destino es un directorio, el archivo se copia en ese directorio.
cp nota LEAME dir1
pueden copiarse varios archivos hacia un directorio.
mkdir dir2
touch dir2/arch2 dir2/arch3
ls dir2
cp dir2/* .
copia todos los archivos en dir2 hacia el directorio actual.
Para copiar un directorio es preciso usar la opcin -r, de "recursivo":
cp -r dir1 dir3
ls -l dir3
copia el directorio dir1 y todo el contenido en el dir3.

rmdir dir3
fracasa porque dir3 no est vaco.
rm -r dir3
con la opcin -r, "recursivo", se puede borrar completamente un directorio y todo su contenido,
sean estos archivos o subdirectorios.
rm -r dir1/* dir2
borra todos los archivos bajo dir1 y dir2; borra tambin el directorio dir2 pero no el dir1.
rm arch? nota.copia
borra del directorio actual los archivos arch1, arch2, .., y nota.copia.

Mover, cambiar de nombre.


echo "Hola todos" > hola
cat hola
mv hola saludo
cat saludo
mv cambia el nombre del archivo hola por el de saludo.
mv saludo dir1/saludo.1
mueve hacia otro directorio cambiando el nombre.
mv dir1 dirnuevo
cambia de nombre archivos o directorios.
rm -r dirnuevo
elimina dirnuevo y todos sus archivos.

Enlaces "hard".
Un enlace "hard" (hard link) es una nueva referencia a un mismo archivo; consiste en una nueva
entrada de directorio que apunta a un archivo ya existente y apuntado desde otra entrada de
directorio. El contenido se encuentra en un solo lado, pero el archivo puede ser accedido desde
varios lugares, eventualmente con diferentes nombres.
echo 'Hola todos de nuevo!' > adios
ln adios adios.ln0
ln crea un segundo nombre referido al mismo archivo; no se hace copia, crea un enlace (link).
Verificar que
ls -l adios*
muestra un conteo de 2 en la columna de enlaces. Al crear el enlace con el comando ln, observar
que el archivo existente va en primer lugar, luego uno o ms nombres de enlaces a crear.
ln adios adios.ln1
ln adios adios.ln2
ls -l adios*
muestra el conteo de enlaces hard en estos archivos.
mkdir dir2

ln adios dir2/adios
hace aparecer en dir2 un enlace llamado adios hacia el archivo adios del directorio actual. Un
enlace hard puede hacer aparecer un mismo archivo en ms de un directorio, con igual o distinto
nombre; el contenido est en un solo lado, no est repetido.
rm adios*
ls -l dir2/adios
Cuando se borra un archivo con varios enlaces, slo se borra el enlace. El archivo es realmente
borrado slo cuando desaparece el ltimo enlace.
ln dir2 dir2ln
da error; no se puede crear un enlace hard para un directorio.

Enlaces simblicos.
Un enlace simblico (symbolic link) es un archivo que apunta a otro archivo o directorio. El archivo
de enlace simblico contiene solamente la ruta del otro archivo o directorio.
ln -s nota nota.ls0
crea nota.ls0 como enlace simblico.
ln -s dir2 dir2ls
crea dir2ls como enlace simblico hacia un directorio.
ls -l
muestra la letra l en el tipo de archivo para indicar que es un enlace simblico.
ls dir2
ls dir2ls
muestran el mismo contenido de archivos.
ls -l dir2ls
muestra que es un enlace simblico e indica hacia donde apunta.
cd dir2ls
ls -l
muestra el contenido de dir2, enlazado desde dir2ls.
pwd
indica el directorio con nombre del enlace, pero
/bin/pwd
muestra el directorio verdadero, no el enlace simblico; pwd indica la ruta por la que se lleg al
directorio, /bin/pwd indica la ruta de acceso al verdadero directorio. Conviene usar /bin/pwd
para evitar ser engaado por enlaces simblicos a directorios. El comando pwd es interno del shell,
/bin/pwd es un programa aparte.
cd ..
mv dir2 DIR2
cambia el nombre del directorio real; el enlace simblico sigue apuntando a dir2, por lo que
cd dir2ls
da error, ya que no existe el objeto real.
mv DIR2 dir2
repone el nombre original al que apunta el enlace.
rmdir dir2ls
da error porque no es un directorio sino un enlace.
rm dir2ls
borra el enlace. Un enlace simblico se borra con rm, y no con rmdir, puesto que el enlace

simblico es un archivo y no un directorio, an cuando sea un enlace simblico hacia un directorio.


ls dir2
cuando se borra un enlace simblico, slo se borra un archivo puntero, y no el objeto real.

Opciones del comando ls.


ls -1
muestra un item por lnea. Cuando ls se usa en interconexiones, la salida de ls presenta un item
por lnea por defecto.
ls -C
fuerza el despliegue encolumnado.
ls -a
muestra todos los archivos, incluyendo los que comienzan con punto, normalmente no mostrados.
El directorio corriente . y el directorio padre .. son entidades reales.
ls -F /bin
ls -F
agrega sufijo que indica el tipo de archivo: / directorio, * ejecutable, @ enlace simblico.
ls -R
muestra recursivamente todos los archivos, subdirectorios y archivos dentro de subdirectorios. Para
ver un listado ms largo,
ls -CR /etc | more
ln -s dir2 dir2ls
ln nota nota.ln0
ls -l
listado largo, muestra atributos de los archivos: tipo de archivo (primer caracter), permisos (9
caracteres), enlaces hard (en archivos), dueo, grupo, tamao en bytes, fecha y hora, nombre.
-rw-r--r-- 1 esteban other 138 Apr 5 19:34 LEAME
drwxr-xr-x 2 esteban other 138 Apr 5 19:34 dir2
lrw-r--r-- 1 esteban other 138 Apr 5 19:34 dir2ls ->./dir2
-rw-rw-rw- 1 esteban other 138 Apr 5 19:34 nota
El smbolo -> indica "apunta hacia" para enlaces simblicos.

Cambio de dueo y grupo.


chown usuario1 nota
cambia el dueo del archivo nota adjudicndoselo a usuario1.
chown usuario1 arch1 arch2
cambia el dueo de la lista de archivos indicada. No puede revertirse, ya que el usuario actual dej
de ser dueo de esos archivos. Si el archivo tiene permiso de lectura, es posible copiarlo para
disponer de una copia propia. El cambio de dueo no est permitido a usuarios comunes, sino
reservado al supervisor para evitar que a un usuario se le adjudiquen archivos sin su consentimiento.
chgrp tecnicos nota
cambia de grupo el archivo notas, adjudicndoselo al grupo tecnicos. El dueo debe pertenecer
al grupo tecnicos.
chgrp tecnicos arch1 arch2
cambia el grupo de la lista de archivos.

Modos de permisos.
Los permisos de archivos y directorios se cambian con el comando chmod. Pueden expresarse de
dos maneras: simblica y absoluta.
En la forma simblica, se usa la siguiente sintaxis:
[ugoa...][[+-=][rwxstugo...]
+
=
r
w
x
s
t
u
g
o
a

agrega permiso a los existentes


quita permiso de los existentes
nicos permisos asignados al archivo
lectura
escritura
ejecucin, o acceso si es directorio
usa el id del dueo o grupo del archivo al ejecutar
fijar "sticky bit" a un directorio: slo dueos pueden borrar
usuario (dueo)
grupo
otros
todos (dueo, grupo y otros)

Ejemplos de permisos en notacin simblica:


u+r
g+w-r
ug+r
ugo+w-rx

u+rwx,g+r-wx,o-rwx

chmod u+rwx,g+rw-x,o+r-wx arch1


chmod u=rwx,g=rw,o=r arch1
cambian los permisos de los archivos indicados.
En modo absoluto se usa un cdigo de 4 dgitos octales 0..7, en la forma Nnnn.
N, primer dgito:
4 fijar ID del dueo al ejecutar
2 fijar ID del grupo al ejecutar
1 fijar "sticky bit" a un directorio
nnn, 3 dgitos: permisos del usuario, grupo y otros, con el cdigo
4 lectura
2 escritura
1 ejecucin, o acceso si es directorio
Ejemplos de permisos en notacin absoluta:
0777
0755
0764
0640

0710

chmod 0764 arch1


cambia los permisos como en el ejemplo anterior.

Listado de permisos de los directorios.


ls -l
muestra los permisos y otros atributos.
Para obtener informacin del directorio dir1 ubicado en el directorio actual,
ls -l

lista todos los archivos, entre los que aparece dir1;


ls -l dir1
lista el contenido del directorio dir1.
ls -ld dir1
trata la entrada dir1 como archivo, sin listar su contenido, y dando sus atributos como directorio.
ls -ld .
muestra atributos del directorio actual.

Cambio de permisos.
chmod u-w nota
quita permisos de escritura al dueo.
chmod u+w nota
concede permisos de escritura al dueo.
chmod u-w+x nota
chmod u-wx+r nota
cambian varios permisos del dueo al mismo tiempo.
chmod u+w nota
chmod g+w nota
chmod o+w nota
concede permiso de escritura solo al usuario, al grupo o a otros.
chmod u+rw-x,g+r-wx,o+r-wx nota
fija todos los permisos en una sola operacin. Los permisos que no se mencionen quedan como
estn.
chmod 0644 nota
realiza lo mismo en notacin absoluta.
El comando chmod admite las opciones
-v verboso, describe los permisos cambiados
-f no da error sobre permisos que no pueden cambiarse
-R recursivo, cambia permisos de directorios y sus archivos
chmod -v u+rwx,g+rw-x,o+r-wx arch1
chmod -v 764 arch1
chmod -v 444 arch1
chmod u=rw,go=r arch1
fija permisos en rw-r--r--.
chmod u=rwx,u+s arch1
ejecutar arch1 con permiso del dueo de arch1.
chmod -vR a+r dir1
da permiso de lectura a todos los directorios bajo dir1, anunciando en forma verbosa lo hecho.
chmod ugo+rwx dirtodos
chmod a+t dirtodos
fija "sticky bit": a pesar de tener el directorio permisos totales para todos, slo pueden borrarse los
archivos propios del usuario, no los ajenos.
chmod 1777 dirtodos
realiza lo mismo.
Los permisos s (setuid, setgid) hacen que un archivo ejecutable ejecute con permisos del usuario
dueo o del grupo dueo del archivo, cualquiera sea el usuario y grupo de quien lo invoca. El

permiso setgid sobre un directorio hace que los archivos y subdirectorios creados en l pertenezcan
al grupo del directorio, y no al grupo primario del usuario, como es normal; esto es til para los
grupos de trabajo. El permiso t (sticky bit) se aplica a directorios con permisos totales; limita la
operacin de borrado al dueo del archivo o subdirectorio. Los modos S y T, que pueden aparecer
en ls -l, indican modos sin sentido: setuid o setgid sobre archivos no ejecutables, sticky bit sobre
directorio sin permisos para todos.

basename, dirname
echo $EDITOR
muestra la variable de ambiente que contiene el nombre del editor por defecto. Si no aparece nada,
inicializarla:
which vi
para obtener la va hacia el editor vi.
EDITOR=/usr/bin/vi
echo $EDITOR
muestra el nombre del editor a usar por defecto.
MIEDITOR=`basename $EDITOR`
echo "Mi editor es $MIEDITOR"
muestra el nombre del archivo sin ruta; basename quita la ruta a un nombre de archivo calificado
con ruta.
DIREDITOR=`dirname $EDITOR`
dirname separa la ruta del nombre completo.
echo "Mi editor es $MIEDITOR en el directorio $DIREDITOR"
muestra el uso en comandos de variables de ambiente.
echo "Mi editor es "`basename $EDITOR`" en "`dirname $EDITOR`
muestra el uso del operador grave para ejecutar comandos dentro de otros comandos.

Archivos de dispositivos.
El sistema de archivos de UNIX provee una interface estndar entre los dispositivos de hardware y
el sistema operativo que acta igual que un archivo comn: todas las operaciones de entrada y
salida se hacen escribiendo y leyendo sobre un archivo. No se trata de un archivo comn en disco;
acta como una ruta hacia un canal de entrada/salida del hardware. As como se redirige la salida de
un comando hacia un archivo, puede redirigirse tambin hacia un disco, una cinta o un mdem con
slo mencionar el nombre del dispositivo correspondiente.
tty
devuelve el nombre del dispositivo asociado al terminal, por ejemplo /dev/tty1. Tomando ese
mismo nombre
ls -l /dev/tty1
obtenemos un listado de atributos del "archivo" controlador de este dispositivo, algo as como
crw-rw-rw- 1 usuario1 otros .... /dev/tty1
El primer caracter indica el tipo de dispositivo: c si es orientado a caracteres, b si es orientado a
bloques. Terminales, impresoras y modems son orientados a caracter, discos y cintas son orientados
a bloque.
cat - < /dev/tty1
para escuchar en la propia sesin de terminal; escribir varias lneas y finalizar con Ctrl-D.

cat - < `tty`


produce el mismo efecto. Luego probar
$ cat - > `tty`
puede explicarse el comportamiento?

El comando mesg.
ls -l `tty`
Si otros usuarios pueden leer y escribir en este dispositivo, tambin pueden ver lo que se est
haciendo o an escribir directamente en el terminal redirigiendo su salida. Esto se usa en los
comandos wall (write all, escribir a todos) y write (escribir mensajes entre usuarios).
mesg
muestra si est habilitada o no la recepcin de mensajes.
mesg y
cambia permisos de grupo y otros en el dispositivo, aceptando mensajes.
mesg n
rechaza mensajes. Verificar con
ls -l `tty`
que muestra los permisos que regulan la terminal del usuario.
ls -l /dev/tty?
muestra los permisos de las terminales principales;
ls -l /dev/tty??
muestra una cantidad de tipos de terminal disponibles.

Otros dispositivos.
cat /etc/passwd
cat /etc/passwd > /dev/null
El dispositivo /dev/null acta como una papelera de tamao ilimitado que recibe la salida a
descartar. No guarda nada; lo que all se enve se pierde para siempre.
Todos los dispositivos de hardware del sistema tienen una representacin en el directorio /dev.

Preguntas y Ejercicios.
Bibliografa.
Comandos: chgrp chmod chown ln ls mesg tty
Referencias: Kernighan-Pike[1987], Coffin[1989]

Preguntas y Ejercicios.
Ficha Referencia: Manejo de Archivos
1. ARCHIVOS. Sea la siguiente salida del comando ls -l:
-rwsr-xr-x 1 victor docentes 29024 ene 1 16:29 controlar
-rw-rw-r-- 1 victor docentes 2300 may 18 09:37 borrador.txt
-rw-r--r-- 1 victor docentes 5895 may 15 12:08 index.htm
-rwxr-xr-x 1 victor docentes 29024 ene 1 16:29 revisar
-rwxr--r-- 1 victor docentes 29024 ene 1 16:29 mostrar
drwxrwxrwt 2 victor tecnicos 1024 may 1 17:23 trabajos
drwxr-xr-x 2 victor tecnicos 1024 oct 16 1998 netscape3
drwxrwx--x 2 victor tecnicos 1024 may 11 7:29 finanzas
drwxrwxr-x 2 victor tecnicos 1024 jul 7 6:54 redes
drwxr-xr-x 2 jperez docentes 1024 jun 17 19:35 corporacion
El usuario jperez, del grupo docentes, tiene acceso al presente directorio. Indicar, si los hay:
a) Archivos de los que puede mostrar contenido.
b) Archivos que puede ejecutar como programa.
c) Archivos en los que puede modificar contenido.
d) Subdirectorios en los que puede ingresar.
e) Subdirectorios en que puede grabar.
f) Subdirectorios en los que puede borrar archivos que no sean de l.
g) Subdirectorios en los que puede ejecutar programas contenidos en ellos pero no ver
nombres de archivos.
h) Archivos que puede ejecutar como programa con permisos del usuario victor.
2. ARCHIVOS. Sea la siguiente salida de ls -l:
-rw-r--r-- 1 root root 33280 jun 12 19:40 Carta.doc
drwxrwxrwx 5 victor staff 1024 dic 4 1999 step
drwxrwxr-x 22 victor staff 1024 nov 20 1999 Office51
drwxr-x--- 6 victor staff 1024 may 7 16:43 argos
drwxrwxr-- 21 victor staff 1024 jul 11 18:22 bajados
-rw-rw---- 3 root root 542 jul 13 11:26 boor.exe
drwxrwxrwt 3 victor staff 1024 may 25 10:02 borrador
-rwsrwsr-x 1 root root 9218 jun 12 19:41 pph3
drwxrwx--x 2 victor victor 1024 may 7 16:47 cdir
-rw-rw-r-- 3 root root 542 jul 13 11:26 mysql-doc
-rw-r-xr-- 3 victor staff 1084 ago 1 10:01 ver.exe
-rwxr-xr-x 3 victor staff 1084 ago 1 10:01 ver
drwxr-xr-x 7 victor victor 1024 jul 25 11:48 lit
Indicar, si los hay,
a) directorios pblicos;
b) archivos que tienen enlaces hard;
c) archivos ejecutables;
d) directorios recorribles por todo el mundo;
e) directorios donde el grupo puede borrar archivos;
g) archivos que son enlaces simblicos.
f) archivos ejecutables con permisos de root;
3. CREAR Y BORRAR ARCHIVOS Y DIRECTORIOS.
a) Crear los archivos abaco, abajo, arriba, abalorio, balero, manejo.
Verificar.

b) Crear bajo el directorio actual los directorios ./varios,


./varios/subdir1, ./varios/subdir2, ./varios/subdir1/subdir11.
Copiar o crear en todos estos directorios los archivos de a). Verificar con listado recursivo.
c) Borrar del directorio actual todos los archivos cuyo nombre empiece con "aba". Verificar
el borrado, y la permanencia de estos archivos bajo el directorio varios y sus subdirectorios.
d) Borrar del subdirectorio varios/subdir2 el archivo de nombre "balero".
e) Borrar todos los archivos y subdirectorios bajo varios/subdir1 , includo el propio
subdir1.
f) Borrar todos los archivos y subdirectorios bajo varios , dejando este directorio vaco.
g) Borrar el directorio varios.
4. MOVER, CAMBIAR NOMBRE (terico).
Escriba comandos para:
a) mostrar nombre, dueo y grupo del archivo arch1 que est en el subdirectorio textos
del subdirectorio usuario7 del subdirectorio home del directorio export .
b) mover archivos cap1, cap2 ... cap9 desde el subdirectorio borrador hacia el
subdirectorio libro, ambos subdirectorios dentro del directorio propio del usuario; usar la
variable HOME para escribir las vas.
c) concatenar los archivos cap1, cap2 .... cap9 del subdirectorio
/export/home/usuario7/capitulos en un nico archivo sandokan ubicado en
el directorio /export/home/libros.
5. ENLACES. En su directorio de trabajo, cree un archivo arch1 con el contenido "Este es
arch1".
a) Cree un enlace simblico liga1 hacia el archivo arch1; verifique tipo de archivo,
conteo de enlaces y contenido de ambos archivos.
b) Cree un enlace hardware liga0 hacia el archivo arch1 ; verifique tipo de archivo,
conteo de enlaces y contenido de ambos archivos.
6. ENLACES. Marque todos los tipos de enlace que pueden establecerse en los siguientes
casos.
a) enlace hacia un archivo en el mismo directorio:
_____ hardware _____ simblico
b) enlace hacia un archivo en el mismo sistema de archivos:
_____ hardware _____ simblico
c) enlace hacia un archivo en otro sistema de archivos:
_____ hardware _____ simblico
d) enlace hacia un directorio en el mismo sistema de archivos:
_____ hardware _____ simblico
e) enlace hacia un directorio en otro sistema de archivos:
_____ hardware _____ simblico
7. ENLACES. Copiar el archivo nota en el archivo nota.texto . Crear los enlaces
simblicos mensaje, misiva, esquela y carta hacia el archivo nota. Crear los
enlaces hard mensaje0, misiva0, esquela0 y carta0 hacia el archivo
nota.texto . En ambos casos, verificar conteo de enlaces, tipos de archivo y contenidos.
Borrar nota.texto ; analizar la situacin estudiando conteo de enlaces y contenidos.
8. ENLACES. Crear en el directorio propio los enlaces public , docums y textos hacia
el directorio /usr/doc . Qu tipo de enlace debe emplearse? Por qu?
9. DUEOS Y GRUPOS (terico). Cambiar de dueo y grupo todos los archivos del
directorio /export/trabajos que terminan con la palabra "obra", asignndolos al
dueo jperez , grupo obras.
10.DUEOS Y GRUPOS (terico). Asignar al grupo mant el directorio
/export/home/mantdir y todos sus archivos y subdirectorios. Cambiar el dueo de
estos mismos archivos para el usuario jefemant.
11.PERMISOS.

a) Transformar los siguientes permisos simblicos en absolutos:


rwxr-xr-x
r-xr--r-rw-r----r-x--x--x
b) Transformar los siguientes permisos absolutos en simblicos:
644
755
610
631
c) Fijar, en modo simblico, los permisos de arch1 en modo 754.
d) Fijar, en modo absoluto, los permisos de arch1 en modo rwxr-x--x.
12.PERMISOS.
a) Fijar los permisos del directorio dir1 de modo que todos lo puedan leer y recorrer, pero
slo el dueo pueda modificar sus archivos: 1) en modo simblico; 2) en modo absoluto.
b) Modificar para que el grupo tambin pueda modificar archivos
13.PERMISOS.
a) Fijar en modo simblico los permisos del archivo ejecutable exec.tar para que sea
ejecutable por todos, legible por el dueo y el grupo y modificable solo por el dueo. Repetir
en modo absoluto.
b) Fijar en modo absoluto los permisos del directorio dir1 de modo que slo el dueo y el
grupo lo puedan recorrer y leer, y slo el dueo pueda grabar y borrar en l. Repetir en modo
simblico.
14.PERMISOS. Crear la siguiente estructura de directorios y archivos:
dir1
arch1-1
dir2
arch2-1
Investigar el significado de los permisos r, w, x sobre directorios variando los permisos de
los directorio dir1 y dir2 como sea necesario y verificando qu operaciones pueden
realizarse sobre los archivos contenidos en l. Expresar los resultados en una tabla.

Manejo de Archivos
Ejercicios complementarios
Fichas referencia: Manejo de Archivos, Resea de Comandos.
1.
2.
3.
4.
5.

Actualizar la fecha del archivo /tmp/control.tmp.


Borrar el enlace simblico liga1.
Borrar el enlace simblido nota1.txt que apunta al archivo ../carta.txt.
Cambiar de nombre el directorio sumarios.textos por el de resumenes.
Cambiar de nombre el archivo /export/trabajos/nota.txt por el de carta.txt en el mismo
directorio.
6. Mover el archivo nota.txt del subdirectorio trabajos del directorio padre del actual hacia el
directorio actual.
7. Con qu comando se borra un archivo? Y un directorio? Con qu comando se borra un
enlace hard? Y un enlace simblico? Con qu comando se borra un enlace simblico a un
directorio?
8. Copiar, desde el directorio /parte2/aplics1/conf el archivo .exrc hacia el directorio actual.
Actualizar su fecha.
9. Copiar, desde el directorio /usr/local/conf todos los archivos de nombre terminados en ".cnf"
hacia el directorio /grupos/admin/config.
10.Crear en el subdirectorio bin del directorio propio, un enlace hard hacia el script may2min
ubicado bajo utils en el directorio propio.
11.Crear, en el subdirectorio bin del directorio propio, un enlace simblico al script
/usr/local/bin/conectar con nombre conec.
12.Crear los siguientes enlaces, o indicar si no es posible: 1) lnarch3, enlace simblico hacia el
archivo arch3; 2) lharch3, enlace hard hacia el archivo arch3; 3) lndir3, enlace simblico
hacia el directorio dir3; 4) lhdir3, enlace hard hacia el directorio dir3.
13.Crear un enlace del directorio /var/admin (a crear) hacia el directorio /var/log (existente).
14.Crear un enlace hard de nombre carta.hard en el subdirectorio cartas.varias del directorio
actual, hacia el archivo carta.txt del directorio actual. Crear un enlace simblico carta.sim en
el directorio /grupos/cartas/pedroso hacia el archivo carta.txt del directorio actual.
15.Crear un archivo vaco arch1 en el directorio actual. Crear un enlace hard liga0 hacia el
archivo arch1. Cmo s que esos archivos tienen enlaces hard?
16.Crear un enlace simblico liga1 hacia el archivo arch1 del directorio actual. Cmo s que
el archivo liga1 es un enlace simblico?
17.Determinar la va completa del comando xeyes.
18.Determinar la va completa del comando vim (es una versin del editor vi ampliado en sus
capacidades). Sin ejecutarlo, determinar si es posible escribir solamente vim para invocarlo,
o ser necesario indicar su ruta completa.
19.El archivo ejecutable idprint es ejecutable para todos. Fijar sus permisos para que corra
con los permisos del dueo del archivo y del grupo al que pertenece el archivo, y no con los
permisos de quien lo invoca.
20.Eliminar el directorio propio y todos los archivos y subdirectorios del usuario pedrogom,
ubicados bajo el directorio /home.
21.Eliminar el subdirectorio basura que est bajo el subdirectorio home del directorio export: a)
si est vaco, b) si tiene archivos, c) si tiene archivos ocultos.
22.Eliminar recursivamente todos los archivos y subdirectorios bajo el directorio hardware
ubicado bajo el directorio material del directorio export: a) includo el propio directorio
hardware; b) dejando el directorio hardware vaco.
23.En el directorio /export/novela se encuentran los archivos indice.txt, cap1.txt a cap33.txt y
biblio.txt. Copiar hacia el directorio actual los archivos cap1.txt a cap33.txt. Usar un solo
comando.

24.Escribir comandos para borrar: 1) arch1, un archivo; 2) lharch2, un enlace hard al archivo
arch2; 3) lnarch2, un enlace simblico al archivo arch1; 4) dir 1, un directorio vaco; 5) dir2,
un directorio lleno, junto con todos sus archivos; 6) lndir3, enlace al directorio dir3.
25.Escribir un comando (uno solo) para ejecutar cada una de las tareas siguientes en los
directorios trab1, trab2 y trab3 del directorio actual, en forma simultnea: 1) crear en los tres
directorios archivos resumen.txt; 2) crear en los tres directorios enlaces simblicos tmp
hacia el directorio /tmp; 3) crear en los tres directorios archivos 00indice con fecha y hora
actuales; 4) agregar a los tres archivos 00indice la leyenda "Montevideo, URUGUAY"; 5)
eliminar en los tres directorios los subdirectorios basura y todos los archivos y
subdirectorios bajo basura.
26.Escribir un comando y uno solo para ejecutar cada una de las tareas siguientes:
a) fijar, en modo absoluto, el archivo arch1 en modo rwxr-x--x.
b) fijar, en modo simblico, el arch1 en modo 754.
27.Fijar, en modo simblico y absoluto, los siguientes permisos:
a) del archivo /usr/local/bin/conectar de modo que todos lo puedan ejecutar, el usuario lo
pueda leer y escribir, y el grupo lo pueda leer.
b) del archivo resumen.txt para que el dueo pueda leer y escribir, el grupo pueda leer y el
resto no pueda nada.
d) del directorio varios para que el dueo pueda ver, recorrer y borrar archivos, el grupo
pueda ver y recorrer, y el resto slo pueda recorrer. Usar modo absoluto y modo simblico.
e) del directorio yugo de modo que todos puedan ejecutar los programas contenidos en l,
pero slo pueda verlos y modificarlos el dueo del directorio.
f) del archivo vlub, ejecucin para todos, lectura y modificacin para el dueo, lectura para
el grupo, en el archivo vlub.
28.del directorio /grupos/digrafico para permitir a todos ver la lista de archivos contenidos e
ingresar al directorio, pero modificar permisos o borrar archivos contenidos solamente al
dueo y al grupo. En modo simbico y absoluto.
29.Fijar en modo simblico y absoluto los siguientes permisos:
a) totales para todos en el directorio /temporal, pero de modo que un usuario pueda borrar
solamente sus propios archivos.
b) del archivo hagoalgo de modo que sea ejecutable por todos y corra con los permisos del
dueo del archivo y no de quien lo invoca.
30.Listar las caractersticas del directorio /var/spool/mail (no su contenido) y agregar esta lnea
al final del archivo logdirs.txt.
31.Marque todos los tipos de enlace (hard, simblico o ninguno) que pueden establecerse en los
siguientes casos:
a) enlace hacia un archivo en el mismo directorio;
b) enlace hacia un archivo en el mismo sistema de archivos;
c) enlace hacia un archivo en otro sistema de archivos;
d) enlace hacia un directorio en el mismo sistema de archivos;
e) enlace hacia un directorio en otro sistema de archivos.
32.Mostrar, uno tras otro, el contenido de los archivo arch1 y arch2, con todas sus letras en
maysculas, paginando la salida. No hay vocales acentuadas ni .
33.Qu es el "sticky bit? Para qu sirve? Se aplica a directorios, a archivos o a ambos? Qu
permisos debe tener un archivo o directorio para que tenga sentido colocar un "sticky bit"?
34.Qu significa el permiso "s" para el dueo de un archivo? Y para el grupo? Si se trata de
un directorio, cmo se responden las preguntas anteriores?
35.Qu significa el permiso "x" en un archivo? Y en un directorio?
36.Transformar los siguientes permisos:
a) absolutos en simblicos: 644, 610.
b) simblicos en absolutos: rwxr-xr-x, rw-r-----.

Editor vi.
Uso bsico de vi
Modos de vi
Gua de Supervivencia
Uso avanzado de vi
Modo Comando
Modo Texto
Modo "ex" o ltima lnea
Tipos de Terminal
Preguntas y Ejercicios
Bibliografa y Referencias

Uso bsico de vi.


El editor vi es un editor de texto de pantalla completa que maneja en memoria el texto entero de un
archivo. Es el editor clsico de UNIX; est en todas las versiones. Puede usarse en cualquier tipo de
terminal con un mnimo de teclas; esto lo hace difcil de usar hasta que uno se acostumbra.
Existe un editor vi ampliado llamado vim que contiene facilidades adicionales, as como diversas
versiones del vi original. En todos los casos, el conjunto de comandos bsicos es el mismo.
Existen en UNIX otros editores ms potentes y verstiles, como emacs, que provee un ambiente de
trabajo completo; tambin versiones fciles de manejar como jove o pico, o an mnimas e
inmediatas como ae. En ambiente X-Windows hay muchos editores amigables, fciles de usar y con
mltiples capacidades. No obstante, vi est en todos los UNIX, requiere pocos recursos, se usa
mucho en administracin, para programar y en situaciones de emergencia. En casos de roturas de
discos, corrupcin de sistemas de archivos, errores en el arranque y otras catstrofes, puede ser el
nico editor disponible. Como la mayora de las configuraciones en UNIX se manejan editando
archivos, disponer de esta capacidad es esencial en la administracin de un sistema.

Modos de vi.
Existen tres modos o estados en vi:
modo comando: las teclas ejecutan acciones que permiten desplazar el cursor, recorrer el
archivo, ejecutar comandos de manejo del texto y salir del editor. Es el modo inicial de vi.
modo texto o modo insercin: las teclas ingresan caracteres en el texto.
modo ltima lnea o ex: las teclas se usan para escribir comandos en la ltima lnea al final
de la pantalla.

Gua de supervivencia.
Con unos pocos comandos bsicos se puede ya trabajar en vi editando y salvando un texto:
vi arch1 arranca en modo comando editando el archivo arch1
i
inserta texto a la izquierda del cursor
a
agrega texto a la derecha del cursor
ESC
vuelve a modo comando
x
borra el caracter bajo el cursor
dd
borra una lnea
h o flecha izquierda
mueve el cursor un caracter a la izquierda
j o flecha abajo
mueve el cursor una lnea hacia abajo
k o flecha arriba
mueve el cursor una lnea hacia arriba

l o flecha derecha
mueve el cursor un caracter a la derecha
:w
salva el archivo (graba en disco)
:q
sale del editor (debe salvarse primero)

Uso avanzado de vi.


Invocacin de vi.
vi
abre la ventana de edicin sin abrir ningn archivo.
vi arch1
edita el archivo arch1 si existe; si no, lo crea.
vi arch1 arch2
edita sucesivamente los archivos arch1 y luego arch2.
vi +45 arch1
edita el archivo arch1 posicionando el cursor en la lnea 45.
vi +$ arch1
edita el archivo arch1 posicionando el cursor al final del archivo.
vi +/Habia arch1
edita el archivo arch1 en la primera ocurrencia de la palabra "Habia".

Cambio de modo.
comando a texto:
teclas de insercin i I a A o O, o
tecla de sobreescritura R.
texto a comando:
tecla ESC.
comando a ltima lnea:
teclas : / ?
ltima lnea a comando:
tecla ENTER (al finalizar el comando), o
tecla ESC (interrumpe el comando).
Confundir un modo con otro la de mayor dificultades para el manejo de vi. Puede activarse un
indicador de modo escribiendo
:set showmode
Esto hace aparecer una leyenda que indica si se est en modo comando o insercin.

Modo Comando.
El editor vi, al igual que todo UNIX, diferencia maysculas y minsculas. Confundir un comando
en minscula digitando uno en mayscula suele tener consecuencias catastrficas. Se aconseja
evitar sistemticamente el uso de la traba de maysculas; mantener el teclado en minsculas.
Nmeros multiplicadores.
Muchos comandos aceptan un nmero multiplicador antes del comando. La accin es idntica a
invocar el comando tantas veces como indica el multiplicador. Ejemplos:
10j

en modo comando avanza 10 lneas;


5Y
copia 5 lneas y las retiene para luego pegar.
Ejemplos de manejo.
Los siguientes ejemplos de manejo asumen que el editor se encuentra en modo comando.
flechas
mueven el cursor (si el terminal lo permite)
h j k l
mueven el cursor (igual que las flechas)
itextoESC
inserta la palabra "texto" y vuelve a comando
x
borra el caracter sobre el cursor
dw
borra una palabra
dd
borra una lnea
3dd
borra las 3 lneas siguientes
u
deshace ltimo cambio
ZZ
graba cambios y sale de vi
:q!ENTER
sale de vi sin grabar cambios
/expresinENTER
busca la expresin indicada
3Y
copia 3 lneas para luego pegar
:6r arch3
inserta debajo de la lne 6 el archivo arch3
Movimiento del cursor:
flechas
h o BS
l o SP
k o j o +
$
0
1G
G
18G
Ctrl-G
w
e
E
b
^
%
H
L
M
23|

mover en distintas direcciones


una posicin hacia la izquierda
una posicin hacia la derecha
una lnea hacia arriba
una lnea hacia abajo
fin de lnea
principio de lnea
comienzo del archivo
fin del archivo
lnea nmero 18
mostrar nmero de lnea actual
comienzo de la palabra siguiente
fin de la palabra siguiente
fin de la palabra siguiente antes de espacio
principio de la palabra anterior
primera palabra de la lnea
hasta el parntesis que aparea
parte superior de la pantalla
parte inferior de la pantalla
al medio de la pantalla
cursor a la columna 23

Control de pantalla.
Ctrl-f
Ctrl-b
Ctrl-l

una pantalla adelante


una pantalla atrs
redibujar la pantalla

Ctrl-d
Ctrl-u

media pantalla adelante


media pantalla atrs

Ingreso en modo texto:


i
I
a
A
o
O
R

insertar antes del cursor


insertar al principio de la lnea
insertar despus del cursor
insertar al final de la lnea
abrir lnea debajo de la actual
abrir lnea encima de la actual
sobreescribir (cambiar) texto

Borrar
x
dd
D
dw
d$
d0

borrar
borrar
borrar
borrar
borrar
borrar

caracter bajo el cursor


lnea, queda guardada
desde cursor a fin de lnea
desde cursor a fin de palabra
desde cursor a fin de lnea
desde cursor a principio de lnea

Copiar y pegar
Y o yy
P
p
yw
y$
"ayy o "aY
'a' "ayw
"ap
"aP
"bdd
"bdw

copiar lnea
pegar antes del cursor
pegar despus del cursor
copiar palabra
copiar de cursor a fin de lnea
copiar lnea en buffer llamado 'a'
copiar palabra en buffer llamado
pegar desde buffer 'a', a la derecha del cursor
pegar desde buffer 'a', a la izquierda del cursor
borrar lnea y guardar en buffer 'b'
borrar palabra y guardar en buffer 'b'

Bsqueda
/str
?str
n
N
fc
Fc
tc
Tc
;
,

buscar hacia adelante cadena de caracteres 'str'


buscar hacia atrs cadena de caracteres 'str'
repetir ltimo comando / o ?
repetir ltimo comando / o ? para el otro lado
buscar el siguiente caracter 'c' en la lnea
buscar el anterior caracter 'c' en la lnea
ir al caracter anterior al siguiente 'c'
ir al caracter posterior al precedente 'c'
repetir el ltimo comando f, F, t, o T
ltimo comando f, F, t, o T para el otro lado

La cadena a buscar en / o ? puede ser una expresin regular.


La accin de f, F, t y T alcanza slo a la lnea actual; si el caracter buscado no est en esa lnea el
cursor no se mueve.

Reemplazo
Estos comandos admiten multiplicadores: un nmero delante del comando. Al dar un comando de
reemplazo el editor coloca un smbolo $ en donde termina el pedido de reemplazo. El usuario
escribe normalmente, sobreescribiendo, hasta donde necesite, y sale con ESC. Estos comandos
admiten multiplicadores: 3cw abre un rea de reemplazo para 3 palabras.
c
cw
C o c$
c0

reemplaza
reemplaza
reemplaza
reemplaza

caracteres
palabras
hasta el fin de lnea
desde el comienzo de lnea

Otros
J
ZZ
u
U

unir dos lneas en una


grabar cambios si los hubo y salir
deshacer ltima accin
deshacer todos los cambios en una lnea

Modo Texto.
BS
ESC

borrar caracter hacia la izquierda


pasar a modo comando

Modo ex o ltima lnea.


:q
:q!
:w
:w arch1
:wq
:r arch2
:e arch2
:e! arch2
:r! comando
:shell

salir si no hubo cambios


salir sin guardar cambios
guardar cambios
guardar cambios en archivo arch1
guardar cambios y salir
insertar un archivo
editar un nuevo archivo
idem sin salvar anterior
insertar salida de comando
salir al shell (vuelve con exit)

Mover
:1
:15
:$

mueve a lnea 1
mueve a lnea 15
mueve a ltima lnea

Opciones
:set
:set
:set
:set
:set

nu
nonu
showmode
noshowmode

cambio de opciones
mostrar nmeros de lnea
no mostrar nmeros de lnea
mostrar modo actual de vi
no mostrar modo actual de vi

Reemplazo
La sintaxis del comando de bsqueda y reemplazo es la siguiente:

:<desde>,<hasta>s/<buscar>/<reemplazar>/g
<desde>, <hasta> indican lneas en el archivo; <buscar> y <reemplazar> son cadenas de
caracteres o expresiones regulares; / es un separador, s (sustituir) y g (global) son letras de
comando para el manejo de expresiones regulares.
:1,$s/Martes/martes/g
cambia Martes por martes en todo el archivo.
:.,5s/ayuda/&ndo/g
cambia ayuda por ayudando desde lnea actual hasta la 5a. lnea.

Tipo de terminal.
vi es independiente del tipo de terminal, pero la variable de ambiente TERM debe estar fijada
correctamente. Si no se conoce o no existe el tipo exacto de terminal, en la mayora de los
terminales remotos el tipo ansi da buenos resultados. Para fijar el terminal en tipo ansi, digitar
TERM=ansi;export TERM
Algunos comandos, especialmente more y a veces vi, pueden no responder bien en la terminal o el
emulador que se est usando. En estos casos, puede usarse Ctrl-L para refrescar la pantalla.

Preguntas y Ejercicios.
Bibliografa y Referencias.
Comandos: vi, ed, vim
Referencias:
Coffin[1989], Greenfield[].
Pginas man/info de Linux vi y ed; en ed se definen y explican expresiones regulares.
Documentacin en lnea de Linux, /usr/doc/vim (editor vim, un vi extendido), y pgina
man/info de vim.

Preguntas y Ejercicios.
Ficha Referencia: Editor vi
1. Por qu el editor vi es tan complicado de manejar? Sugerencia: recordar que no usa teclas de
funcin ni teclas compuestas, ni tampoco requiere de las flechas.
2. Definir brevemente los modos del editor vi, indicando para qu sirven las teclas en cada caso.
3. Crear un archivo de texto breve. Realizar agregados y correcciones elementales usando los
comandos de la Gua de Supervivencia. Grabar y volver a editar ese archivo. Memorizar estos
comandos.
4. Crear un archivo de texto breve o usar el anterior. Probar los comandos descritos. Marcar los
comandos que se consideren de uso ms frecuente dentro de cada categora de uso.

Expresiones Regulares
Expresiones Regulares
Metacaracteres
Expresiones regulares bsicas
Expresiones regulares de un slo caracter
Construccin de expresiones regulares
Ejemplos de expresiones regulares bsicas
Expresiones regulares extendidas
Ejemplos de expresiones regulares extendidas
Expresiones Regulares en GNU
Preguntas y Ejercicios
Bibliografa y Referencias

Expresiones Regulares.
La expresiones regulares (ER) son una forma de describir cadenas de caracteres. Se usan en
operaciones de apareamiento o comparacin. Las expresiones regulares permiten realizar bsquedas
o sustituciones de gran complejidad.
Las bsquedas en el editor vi con los comandos / y ? aceptan expresiones regulares; esto hace las
bsquedas mucho ms potentes y flexibles. Las expresiones regulares son aceptadas en otros
editores y en muchos comandos, si bien con algunas diferencias de sintaxis.
Una expresin regular es un patrn que describe un conjunto de cadenas de caracteres. Por ejemplo,
el patrn aba*.txt describe el conjunto de cadenas de caracteres que comienzan con aba,
contienen cualquier otro grupo de caracteres, luego un punto, y finalmente la cadena txt. El
smbolo * se interpreta como "0, 1 o ms caracteres cualesquiera".
Las expresiones regulares se construyen como las expresiones aritmticas, usando operadores para
combinar expresiones ms pequeas. Analizaremos esos operadores y las reglas de construccin de
expresiones regulares, atendiendo siempre al conjunto de cadenas que representa cada patrn.

Metacaracteres.
La construccin de expresiones regulares depende de la asignacin de significado especial a
algunos caracteres. En el patrn aba*.txt el caracter * no vale por s mismo, como el caracter
asterisco, sino que indica un "conjunto de caracteres cualesquiera". Asimismo, el caracter ? no se
interpreta como el signo de interrogacin sino que representa "un caracter cualquiera y uno solo".
Estos caracteres a los que se asigna significado especial se denominan "metacaracteres".
El conjunto de metacaracteres para expresiones regulares es el siguiente:
\ ^ $ . [ ] { } | ( ) * + ?
Estos caracteres, en una expresin regular, son interpretados en su significado especial y no como
los caracteres que normalmente representan. Una bsqueda que implique alguno de estos caracteres
obligar a "escaparlo" de la interpretacin mediante \, como se hace para evitar la interpretacin por
el shell de los metacaracteres del shell. En una expresin regular, el caracter ? representa "un
caracter cualquiera"; si escribimos \?, estamos representando el caracter ? tal cual, sin significado
adicional.

Expresiones Regulares Bsicas.


Una expresin regular determina un conjunto de cadenas de caracteres. Un miembro de este
conjunto de cadenas se dice que aparea, equipara o satisface la expresin regular.

ERs de un slo caracter.


Las expresiones regulares se componen de expresiones regulares elementales que aparean con un
nico caracter:
Exp.Reg.

aparea con

ER que aparea con el caracter ordinario c

(punto) ER que aparea con un caracter cualquiera excepto nueva lnea

[abc]

ER de un caracter que aparea con a, b o c

[^abc]

ER de un caracter que no sea a, b o c

[0-9][a-z]
[A-Z]

ERs de un caracter que aparean con cualquier caracter en el intervalo indicado.


El signo - indica un intervalo de caracteres consecutivos.

\e

ER que aparea con alguno de estos caracteres (en lugar de la e):


. * [ \
cuando no estn dentro de [ ]
^
al principio de la ER, o al principio dentro de [ ]
$
al final de una ER
/
usado para delimitar una ER

Los parntesis rectos [] delimitan listas de caracteres individuales. Muchos metacaracteres pierden
su significado si estn dentro de listas: los caracteres especiales . * [ \ valen por s dentro de
[]. Para incluir un caracter ] en una lista, colocarlo al principio; para incluir un ^ colocarlo en
cualquier lugar menos al principio; para incluir un - colocarlo al final.
Dentro de los conjuntos de caracteres individuales, se reconocen las siguientes categoras:
[:alnum:]
[:alpha:]
[:cntrl:]
[:digit:]
[:graph:]
[:lower:]
[:print:]
[:punct:]
[:space:]
[:upper:]
[:xdigit:]

alfanumricos
alfabticos
de control
dgitos
grficos
minsculas
imprimibles
de puntuacin
espacios
maysculas
dgitos hexadecimales

Por ejemplo, [[:alnum:]] significa [0-9A-Za-z], pero esta ltima expresin depende de la
secuencia de codificacin ASCII, en cambio la primera es portable, no pierde su significado bajo
distintas codificaciones. En los nombres de categoras, los parntesis rectos forman parte del
nombre de la categora, no pueden ser omitidos.

Construccin de Expresiones Regulares.


Una Expresin Regular se contruye con uno o ms operadores que indican, cada uno, el caracter a
buscar. Los operadores ms comunes y aceptados son los siguientes:

Operador Significado
c

un caracter no especial concuerda consigo mismo

\c

elimina significado especial de un caracter c; el \ escapa el significado especial

indica ubicado al comienzo de la lnea (cadena nula al principio de lnea)

indica ubicado al final de la lnea (cadena nula al final de lnea)

(punto) un caracter individual cualquiera

[...]

uno cualquiera de los caracteres ...; acepta intervalos del tipo a-z, 0-9, A-Z (lista)

[^...]

un caracter distinto de ... ; acepta intervalos del tipo a-z, 0-9, A-Z

r*

0, 1 o ms ocurrencias de la ER r (repeticin)

r1r2

la ER r1 seguida de la ER r2 (concatenacin)

Ejemplos de Expresiones Regulares Bsicas.


Las expresiones regulares se aprenden mejor con los ejemplos y el uso.
Exp.Reg.

aparea con

a.b

axb aab abb aSb a#b ...

a..b

axxb aaab abbb a4$b ...

[abc]

a b c (cadenas de un caracter)

[aA]

a A (cadenas de un caracter)

[aA][bB]

ab Ab aB AB (cadenas de dos caracteres)

[0123456789]

0123456789

[0-9]

0123456789

[A-Za-z]

A B C ... Z a b c ... z

[0-9][0-9][0-9]

000 001 .. 009 010 .. 019 100 .. 999

[0-9]*

cadena_vaca 0 1 9 00 99 123 456 999 9999 ...

[0-9][0-9]*

0 1 9 00 99 123 456 999 9999 99999 99999999 ...

^.*$

cualquier lnea completa

En el editor vi, las expresiones regulares permiten realizar bsquedas tales como:
/^Desde
busca lneas que empiecen con la cadena Desde
/final$
busca lneas que termine con la cadena final
/\$25
busca lneas que contengan $25; \ escapa el $

Expresiones Regulares Extendidas.


Algunos comandos, como egrep o grep -E, aceptan Expresiones Regulares Extendidas, que
comprenden las Expresiones Regulares Bsicas ms algunos operadores que permiten
construcciones ms complejas. Los operadores incorporados son los siguientes:

Operador

Significado

r+

1 o ms ocurrencias de la ER r

r?

0 o una ocurrencia de la ER r, y no ms

r{n}

n ocurrencias de la ER r

r{n,}

n o ms ocurrencias de la ER r

r{,m}

0 o a lo sumo m ocurrencias de la ER r

r{n,m}

n o ms ocurrencias de la ER r, pero a lo sumo m

r1|r2

la ER r1 o la ER r2 (alternativa)

(r)

ER anidada

"r"
evita que los caracteres de la ER r sean interpretados por el shell
La repeticin tiene precedencia sobre la concatenacin; la concatenacin tiene precedencia sobre la
alternativa. Una expresin puede encerrarse entre parntesis para ser evaluada primero.

Ejemplos de Expresiones Regulares Extendidas:


Exp.Reg.Ext.

aparea con

[0-9]+

0 1 9 00 99 123 456 999 9999 99999 99999999 ..

[0-9]?

cadena_vaca 0 1 2 .. 9

^a|b

a b

(ab)*

cadena_vaca ab abab ababab ...

^[0-9]?b

b 0b 1b 2b .. 9b

([0-9]+ab)*

cadena_vaca 1234ab 9ab9ab9ab 9876543210ab


99ab99ab ...

Expresiones regulares en GNU.


En GNU, no se distinguen expresiones regulares bsicas de extendidas; los comandos aceptan todas
las expresiones regulares. En ese caso, como siempre se estn usando extendidas, los metacaracteres
?, +, {, |, (, y ) deben ser escapados cuando se quieren usar como caracteres normales,
escribiendo \?, \+, \{, \|, \(, y \).

Preguntas y Ejercicios.
Bibliografa y Referencias.
Referencias: Kernighan-Pike[1987], Coffin[1989]

Preguntas y Ejercicios.
Ficha Referencia: Expresiones Regulares
En algunos de los ejercicios que siguen se pide usar el archivo uy_hist1.txt. Copiarlo en el
directorio de trabajo antes de comenzar. Los comandos grep y grep -E buscan lneas que
contengan expresiones regulares bsicas y extendidas, respectivamente.
1. El archivo uy_hist1.txt fue obtenido de Internet con un navegador en DOS. Usar el editor
vi en slo lectura, para verificar la presencia del caracter visualizado como "^M", correspondiente a
retorno de carro (CR). Crear el archivo historia1.txt, eliminando el caracter CR. Verificar
con vi.
2. Abrir el archivo historia1.txt con el editor vi, en slo lectura. Buscar hacia adelante
(comando /), la palabra "Uruguay". Reiterar la bsqueda (comando n) hasta verificar que
recomienza al principio del archivo. Repetir hacia atrs (comando ?).
3. Con el comando grep, extraer del archivo historia1.txt lneas que empiecen con la
cadena "es". Buscar luego lneas que terminen con la cadena "del".
4. Crear el archivo palabras.txt, que contiene todas las palabras del archivo
historia1.txt, una por lnea. Recordar que en espaol existen la y las vocales acentuadas.
Verificar con vi -R o more.
5. Una misma palabra puede a veces contener una mayscula, o estar escrita totalmente en
maysculas, lo que la har aparecer como palabras distintas. Crear el archivo palabras.min
con todas las palabras del archivo palabras.txt en minsculas.
6. En el archivo historia1.txt mostrar
a) lneas que empiecen con "a";
b) lneas que terminen con "l";
c) lneas que empiecen con "e" y terminen con "l".
7. En el archivo historia1.txt mostrar
a) lneas que contengan la palabra "ganado";
b) lneas que contengan la palabra "gaucho" y "ganado";
c) lneas que contengan la palabra "ganado" pero no la palabra "vacuno".
8. En un archivo de texto se debe determinar
a) cantidad de lneas que contengan la cadena "se".
b) cantidad de lneas que contengan la palabra "se".
c) cantidad de lneas que contengan "se" dentro de una palabra.
d) lneas que contengan al mismo tiempo la palabra "se" separada y la cadena "se" como parte de
palabra.
Construir primero un "juego de prueba" (un archivo de texto) contemplando todas las posiblidades
de ubicacin de los caracteres "se" como palabra y como cadena, en el medio y a los extremos de
palabra, al principio de lnea o al final de lnea, etc. Verificar la correcta deteccin en todos los
casos pedidos. Verificar finalmente que la suma "cierra".
9. Crear el archivo histo1.txt con las primeras 5 lneas del archivo historia1.txt que
contengan slo minsculas y eliminando las lneas en blanco. Eliminar la primera lnea en blanco
parece difcil. Puede hacerse?
10. Sin considerar vocales acentuadas, mostrar el archivo histo1.txt
a) con las vocales en maysculas y las consonantes en minsculas;
b) con las vocales en minscula y las consonantes en mayscula.

11. Mostrar el archivo historia1.txt eliminando todas las vocales, sean stas maysculas o
minsculas y estn acentuadas o no. Puede leerse el texto tal como queda?
12. Un diptongo est formado por dos vocales, una fuerte y una dbil, o dos dbiles. Las vocales
fuertes son a, e, o; las vocales dbiles son i, u. La acentuacin de u o i destruye el diptongo. En el
archivo historia1.txt
a) mostrar todas las palabras con diptongo formado por dos vocales dbiles, ordenadas y sin repetir;
b) mostrar del mismo modo todos los diptongos con a;
c) buscar una expresin regular mnima que despliegue todos los diptongos.
13. Usando el archivo /etc/passwd, y el listado de usuarios con ypcat passwd si el
sistema usa NIS, extraer los siguientes registros:
a) usuarios con la palabra "Unix" al principio del campo de comentario.
b) usuarios del grupo 101.
c) usuarios de los grupos 100, 101 o 105.
d) usuarios con directorio propio de la forma "/home/un*".
e) usando /etc/passwd, listar usuarios con UID de 1 digitos.
f) usando /etc/passwd, listar usuarios con UID de 1 o 2 digitos
g) usuarios con nombre de exactamente 4 caracteres.
h) usuarios con nombre de 4 caracteres empezando con r.

Filtros.
sort
grep
find
fgrep y egrep
tr
uniq
dd
Preguntas y Ejercicios
Bibliografa y Referencias
Se da el nombe de filtros a un grupo de comandos que leen alguna entrada, realizan una
transformacin y escriben una salida. Adems de los que veremos aqu, incluye comandos tales
como head, tail, wc, y cut.

sort
La comparacin u ordenacin puede ser por caracteres ASCII o por valor numrico. La ordenacin
ASCII es la ms parecida a la alfabtica; sigue el orden del juego de caracteres ASCII. En este
ordenamiento, los caracteres idiomticos (vocales acentuadas, ) no se encuentran en el orden
alfabtico tradicional. En la ordenacin numrica se respeta la ordenacin por valor numrico de la
cadena de caracteres: 101 va despus de 21; en ordenamiento ASCII sera al revs.
sort arch1
ordena segn el cdigo ASCII.
sort -n arch2.num
ordena numricamente.
Si no se indican campos de ordenacin, la comparacin se hace sobre toda la lnea. Si se indican
campos, la comparacin se hace considerando la cadena de caracteres iniciada en el primer caracter
del primer campo hasta el ltimo caracter del ltimo campo.
sort -t: -k1,3 arch1.txt
ordena por campos separados por ":", tomando en cuenta para la comparacin los caracteres desde
el primero del campo 1 hasta el ltimo del campo 3.
sort -t: -k1.3,3.5 arch1.txt
ordena por campos tomando en cuenta desde el 3er. caracter del campo 1 hasta el 5to. caracter del
campo 3.
sort -nr arch2.num
ordena en orden numrico descendente.
sort -k3 arch3.txt
ordena alfabticamente, usando como cadena de comparacin la comprendida desde el primer
caracter del 3er. campo hasta el fin de lna. Como no se indica separador, los campos se definen por
blancos (espacio o tabulador).

find
El comando find explora una rama de directorios buscando archivos que cumplan determinados
criterios. El comando find en GNU es extremadamente potente, permitiendo criterios de bsqueda
tales como:

el nombre contiene cierta cadena de caracteres o aparea con algn patrn:


son enlaces a ciertos archivos;
fueron usados por ltima vez en un cierto perodo de tiempo;
tienen un tamao comprendido dentro de cierto intervalo;
son de cierto tipo (regular, directorio, enlace simblico, etc.);
pertenecen a cierto usuario o grupo;
tienen ciertos permisos de acceso;
contienen texto que aparea con cierto patrn.

Una vez ubicados los archivos, find puede realizar diversas acciones sobre ellos:

ver o editar;
guardar sus nombres en otro archivo;
eliminarlos o renombrarlos;
cambiar sus permisos de acceso;
clasificarlos por grupos.

find /var -name *.log -print


busca en el directorio /var los archivos terminados en .log, imprime sus nombres en la salida.
find /tmp -size +200k -print
busca archivos mayores de 200k. En los argumentos numricos, +N es mayor que N, -N es menor
que N, N es exactamente igual a N.
find /var/spool/mail -atime +30 -print
busca archivos no accedidos hace ms de 30 das. La opcin -atime se refiere a tiempo transcurrido
desde ltima lectura, -mtime desde ltima modificacin de estado o permisos, -ctime de contenido.
find /var/tmp -empty -exec rm {} \;
busca archivos vacos y los borra.
find /home -nouser -ls
busca archivos en los cuales en lugar del nombre de usuario dueo aparece un nmero (UID). Esta
situacin se da cuando la cuenta de usuario ha sido borrada pero han permanecido los archivos
creados por ese usuario.

grep
El comando grep (Global Regular Expression and Print) permite buscar las lneas que contienen
una cadena de caracteres especificada mediante una expresin regular. Lee la entrada estndar o una
lista de archivos y muestra en la salida slo aquellas lneas que contienen la expresin indicada. La
sintaxis es
grep patrn archivos
donde el patrn a buscar es una expresin regular.
Crear un archivo con los das de la semana, uno por lnea; llamarle dias.
grep martes dias
grep tes dias
muestra las lneas del archivo dias que contienen la cadena "tes".
grep unix01 /etc/passwd
grep unix0[1-9] /etc/passwd
ls -l /usr | grep '^d'
lista slo los subdirectorios del directorio /usr (la lnea empieza con "d").

ls -l / | grep '.......rw'
lista slo los archivos que otros pueden leer y escribir en el directorio principal.
grep '^[^:]*::' /etc/passwd
busca usuarios sin contrasea; caracteres al principio de lnea que no sean ":", y luego "::" (el
segundo lugar, que es el de la contrasea, est vaco).
grep '^[^:]*:\*:' /etc/passwd
busca usuarios que no pueden entrar al sistema; tienen un * en el lugar de la contrasea; \ escapa el
significado del segundo *, que vale como caracter a buscar.

Ninguna expresin regular de grep aparea con un caracter nueva lnea; las expresiones se aplican
individualmente a cada lnea.
Entre las opciones de grep se cuentan -i para evitar distinguir entre maysculas de minsculas, -n
para mostrar el nmero de lnea y -v para buscar lneas que no contengan la expresin regular
indicada.

fgrep y egrep
Hay dos versiones de grep que optimizan la bsqueda en casos particulares:
fgrep (fixed grep, o fast grep) acepta solamente una cadena de caracteres, y no una expresin
regular, aunque permite buscar varias de estas cadenas simultneamente;
egrep (extended grep), que acepta expresiones regulares extendidas con los operadores + ? | y
parntesis.
fgrep no interpreta metacaracteres, pero puede buscar muy eficientemente muchas palabras en
paralelo, por lo que se usa mucho en bsquedas bibliogrficas; egrep acepta expresiones ms
complejas, pero es ms lento; grep es un buen compromiso entre ambos.
fgrep martes dias
busca la cadena martes en el archivo dias.
En fgrep y egrep puede indicarse la opcin -f buscar.exp, donde buscar.exp es un
archivo que contiene la expresin a buscar: cadenas simples para fgrep, expresiones regulares
para egrep, separadas por nueva lnea; las expresiones se buscan en paralelo, es decir que la salida
sern todas las lneas que contengan una cualquiera de las expresiones a buscar.
Crear un archivo buscar.fgrep con las cadenas "tes" y "jue", una por lnea. El comando
fgrep -f buscar.fgrep dias
extrae del archivo dias las lneas que contienen estas cadenas.
El comando grep soporta fgrep y egrep como opciones -F y -E, respectivamente.
grep -F -f buscar.fgrep dias
egrep "tes|jue" dias
grep -E "tes|jue" dias
obtienen el mismo efecto del comando anterior.
egrep "([0-9]+ab)*1234" archivo
busca cadenas comenzadas opcionalmente por un dgito y los caracteres ab, todo el parntesis 0 o
ms veces, y hasta encontrar la cadena 1234.

Escribir grep -E es similar a egrep, aunque no idntico; egrep es compatible con el comando
histrico egrep; grep -E acepta expresiones regulares extendidas y es la versin moderna del
comando en GNU. fgrep es idntico a grep -F.

tr
El comando tr translitera los caracteres de la entrada: sustituye unos caracteres por otros. La
sustitucin es caracter a caracter. Entre sus opciones se encuentran -d para borrar caracteres; -c para
sustituir complemento de los caracteres indicados, es decir, que no sean sos; y -s para comprimir
caracteres repetidos en uno solo.
cat dias | tr a-z A-Z
convierte todo a maysculas.
cat dias | tr -d aeiou
borra todas las vocales del archivo dias.
Agregar al archivo dias lneas en blanco, varias seguidas, intercaladas entre los nombres de los
das.
cat dias
cat dias | tr -s "\n*"
convierte varios caracteres nueva lnea seguidos en una solo; elimina renglones en blanco.
cat nota | tr -c "[a-zA-Z0-9]" "_"
transforma todos los caracteres que no sean letras o nmeros en subrayas.
cat nota | tr -cs "[a-zA-Z0-9]" "[\n*]"
transforma todos los caracteres que no sean letras o nmeros en nuevalnea, y comprime las
nuevalneas repetidas en una sola; deja cada palabra sola en un rengln.
ls -l /usr | tr -s " " | cut -f3,4
comprime los blancos en la salida para poder cortar campos.

uniq
El comando uniq excluye todos los renglones adyacentes duplicados menos uno; es decir, elimina
renglones repetidos consecutivos. La opcin -c escribe el nmero de ocurrencias al comienzo del
rengln.
El siguiente ejemplo muestra las 5 palabras ms frecuentes en el conjunto de archivos:
cat *.txt | tr -sc A-Za-z '\012' | \
sort | uniq -c | sort -n | tail 5
cat lista todos los archivos, tr comprime el rengln eliminando blancos, sort los ordena, uniq
cuenta las ocurrencias y elimina repetidos, sort -n ordena por cantidad de ocurrencias y tail
muestra las 5 ocurrencias ms frecuentes.

dd
El comando dd es un convertidor de datos: convierte de ASCII a EBCDIC y a la inversa, cambia
los tamaos de los bloques de registros, hace ajuste de blancos y otras transformaciones usuales
cuando se manejan transferencias entre sistemas operativos distintos o datos en bruto, sin formato,
como en los respaldos en cinta.

Preguntas y Ejercicios.
Bibliografa y Referencias.
Comandos: sort, find, grep, fgrep, egrep, tr, uniq, dd
Referencias: pginas man, nodos info, Kernighan-Pike[1987], Coffin[1989].

Preguntas y Ejercicios.
Ficha Referencia: Filtros
Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
Estructura del archivo /etc/hosts:
#nmero_IP nombre_mquina alias
10.137.137.250
liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (lneas comenzadas por #).
1.
Buscar a partir del directorio /var todos los archivos de nombre core y mostrar a) sus nombre; b)
sus nombres en listado largo; c) eliminarlos.
2.
Un archivo acceso.log de registro de accesos de usuarios a un sistema UNIX, genera un
rengln por acceso, el primer campo es el nombre del usuario, y los campos estn separados por
":".
a) Escribir comandos que muestren el nombre de cada usuario y la cantidad de accesos registrados,
en orden alfabtico.
b) Extraer del archivo acceso.log las lneas correspondientes al usuario jperez del mes de
mayo del ao 1997. La fecha figura en el formato "1300 15 Mayo 1997"; el primer nmero es la
hora.
c) Extraer del archivo acceso.log las lneas que correspondan al usuario jperez o al usuario
elopez.
3.
En el archivo NoMBreS.tXT un mismo nombre puede estar en maysculas y minsculas,
mezcladas de diferentes maneras. Generar una lista de nombres en minscula con los 7 nombres que
aparecen menos veces, sin importar como estn escritos.
4.
Un archivo palabras.txt contiene palabras distintas una por lnea. Extrar todas las palabras
que empiecen y terminen con vocal, en minscula o mayscula.
5.
Usar el archivo /etc/passwd o el comando ypcat passwd si el sistema usa NIS, para
resolver las siguientes preguntas. En estos archivos pueden haber comentarios, lneas empezadas
por #, que deben eliminarse de la bsqueda. Recordar que el caracter # es interpretado por el shell.
a) eliminar los comentarios.
b) extraer una lnea que muestre directorio propio y shell del usuario elopez.
c) listar los usuarios que usan el shell /bin/bash.
d) listar los usuarios que no usan el shell /bin/bash.
e) contar la cantidad de usuarios.

6.
Realizar las tareas indicadas, si es posible; si no lo es, indicar los motivos. Presentar el archivo
/etc/passwd ordenado segn los siguientes criterios:
a) ordenado por nombre de login de usuario.
b) ordenado por nmero de usuario.
c) ordenado por nmero de grupo y dentro de cada grupo por nmero de usuario.
d) ordenado por nmero de grupo y dentro de cada grupo por campo de comentario.
7.
Encontrar las 5 palabras ms frecuentes en el texto historia1.txt, e indicar la cantidad de
veces que fue usada cada una. Indicacin: transformar primero todas las palabras a minscula.

Programacin del Shell


Comandos multilnea
El archivo de comandos (script)
Comentarios en los scripts
Comandos de programacin
true
false
if
for
case
while
until
exit
expr
test
read
Parmetros
Depuracin
Preguntas y Ejercicios
Bibliografa y Referencias

El intrprete de comandos o "shell" de UNIX es tambin un lenguage de programacin completo.


La programacin de shell se usa mucho para realizar tareas repetidas con frecuencia. Los
diseadores de sistemas suelen escribir aplicaciones en el lenguaje de base del sistema operativo, C
en el caso de UNIX, por razones de rapidez y eficiencia. Sin embargo, el shell de UNIX tiene un
excelente rendimiento en la ejecucin de "scripts" (guiones); sta es la denominacin aplicada a los
programas escritos en el lenguaje del shell. Se han creado aplicaciones completas usando solamente
scripts.

Comandos multilnea.
Una lnea de comando termina con un caracter nuevalnea. El caracter nuevalnea se ingresa
digitando la tecla ENTER. Varios comandos pueden escribirse en una misma lnea usando el
separador ";"
echo $LOGNAME; pwd; date
Si un comando no cabe en una lnea, la mayora de los intrpretes continan la digitacin en la lnea
siguiente. Para establecer especficamente que un comando contina en la lnea siguiente, hay dos
formas, mutuamente excluyentes (se usa una u otra, pero no ambas al mismo tiempo):
- terminar la primera lnea con \ :
$ echo $LOGNAME \
> $HOME
que muestra algo como
jperez /home/jperez
- dejar una comilla sin cerrar:
$ echo "$LOGNAME
> $HOME"
que produce el mismo resultado.
En los ejemplos anteriores hemos escrito los indicadores de comando. Al continuar el comando en
la segunda lnea, el indicador de comandos cambia de $ a >, es decir, del indicador de comando de

primer nivel PS1 al indicador de comando de segundo nivel PS2. Si no se quiere terminar el
comando multilnea, puede interrumpirse el ingreso con Ctrl-C, volviendo el indicador de comando
a PS1 inmediatamente.

El archivo de comandos (script).


Es cmodo poder retener una lista larga de comandos en un archivo, y ejecutarlos todos de una sola
vez slo invocando el nombre del archivo. Crear el archivo misdatos.sh con las siguientes
lneas:
# misdatos.sh
# muestra datos relativos al usuario que lo invoca
#
echo "MIS DATOS."
echo " Nombre: "$LOGNAME
echo "Directorio: "$HOME
echo -n "Fecha: "
date
echo
# fin misdatos.sh
El smbolo # indica comentario. Para poder ejecutar los comandos contenidos en este archivo, es
preciso dar al mismo permisos de ejecucin:
chmod ug+x misdatos.sh
La invocacin (ejecucin) del archivo puede realizarse dando el nombre de archivo como
argumento a bash
bash misdatos.sh
o invocndolo directamente como un comando
misdatos.sh
Puede requerirse indicar una va absoluta o relativa, o referirse al directorio actual,
./misdatos.sh
si el directorio actual no est contenido en la variable PATH.

Comentarios en los scripts.


En un script todo lo que venga despus del smbolo # y hasta el prximo caracter nuevalnea se
toma como comentario y no se ejecuta.
echo Hola todos
# comentario hasta fin de lnea
slo imprime "Hola todos".
# cat /etc/passwd
no ejecuta nada, pues el smbolo # convierte toda la lnea en comentario.
Los scripts suelen encabezarse con comentarios que indican el nombre de archivo y lo que hace el
script. Se colocan comentarios de documentacin en diferentes partes del script para mejorar la
comprensin y facilitar el mantenimiento. Un caso especial es el uso de # en la primera lnea para
indicar el intrprete con que se ejecutar el script. El script anterior con comentarios quedara as:
#!/bin/bash
# misdatos.sh
#
# muestra datos propios del usuario que lo invoca
#
echo "MIS DATOS."

echo " Nombre: "$LOGNAME


echo "Directorio: "$HOME
echo -n "Fecha: "
date
# muestra fecha y hora
echo
# lnea en blanco para presentacin
# fin misdatos.sh
La primera lnea indica que el script ser ejecutado con el intrprete de comandos bash. Esta
indicacin debe ser siempre la primera lnea del script y no puede tener blancos.

Estructuras bsicas de programacin.


Las estructuras bsicas de programacin son slo dos: la estructura repetitiva y la estructura
alternativa. Cada forma tiene sus variaciones, y la combinacin de todas ellas generan mltples
posibilidades, pero detrs de cualquiera de ellas, por compleja que parezca, se encuentran siempre
repeticiones o alternativas.
Estructura repetitiva: se realiza una accin un cierto nmero de veces, o mientras dure una
condicin.
mientras haya manzanas,
pelarlas;
desde i = 1 hasta i = 7
escribir dia_semana(i);
Esta escritura informal se denomina "pseudocdigo", por contraposicin al trmino "cdigo", que
sera la escritura formal en un lenguaje de programacin. En el segundo ejemplo,
dia_semana(i) sera una funcin que devuelve el nombre del da de la semana cuando se le da
su nmero ordinal.
Estructura alternativa: en base a la comprobacin de una condicin, se decide una accin
diferente para cada caso.
si manzana est pelada,
comerla,
en otro caso,
pelarla;
# orculo
caso $estado en
soltero)
escribir "El casamiento ser su felicidad";
casado)
escribir "El divorcio le devolver la felicidad";
divorciado)
escribir "Slo ser feliz si se vuelve a casar";
fin caso
Funciones: una tarea que se realiza repetidamente dentro del mismo programa puede escribirse
aparte e invocarse como una "funcin". Para definir una funcin es preciso elegir un nombre y
escribir un trozo de cdigo asociado a ese nombre. La funcin suele recibir algn valor como
"parmetro" en base al cual realiza su tarea. Definida as la funcin, para usarla basta escribir su
nombre y colocar el valor del parmetro entre parntesis.

funcin area_cuadrado (lado)


devolver lado * lado;
funcin dia_semana(da_hoy)
caso $dia_hoy en
1)
devolver "Lunes";;
2)
devolver "Martes";;
3)
devolver "Mircoles";:
4)
devolver "Jueves";;
5)
devolver "Viernes;;
6)
devolver "Sbado";;
7)
devolver "Domingo";;
fin caso;

Comandos de programacin.
En esta seccin veremos los comandos tpicos de programacin del shell. Obsrvese que el shell
toma la convencin inversa de C para cierto y falso: cierto es 0, y falso es distinto de 0. El shell
adopta esta convencin porque los comandos retornan 0 cuando no hubo error. Veremos dos
comandos, true y false, que retornan siempre estos valores; se usan en algunas situaciones de
programacin para fijar una condicin.
true
Este comando no hace nada, slo devuelve siempre 0, el valor verdadero. La ejecucin correcta de
un comando cualquiera devuelve 0.
true
echo $?
muestra el valor 0; la variable $? retiene el valor de retorno del ltimo comando ejecutado.
false
Este comando tampoco hace nada slo devuelve siempre 1; cualquier valor diferente de 0 se toma
como falso. Las diversas condiciones de error de ejecucin de los comandos devuelven valores
diferentes de 0; su significado es propio de cada comando.
false
echo $?
muestra el valor 1.
if
El comando if implementa una estructura alternativa. Su sintaxis es
if expresin ; then comandos1 ; [else comandos2 ;] fi
o tambin
if expresin

then
comandos1
[else
comandos2]
fi
Si se usa la forma multilnea cuando se trabaja en la lnea de comandos, el indicador cambia a >
hasta que termina el comando.
La expresin puede ser cualquier expresin lgica o comando que retorne un valor; si el valor
retornado es 0 (cierto) los comandos1 se ejecutan; si el valor retornado es distinto de 0 (falso) los
comandos1 no se ejecutan. Si se us la forma opcional con else se ejecutan los comandos2.
if true; then echo Cierto ; else echo Falso ; fi
siempre imprime Cierto; no entra nunca en else.
if false; then echo Cierto ; else echo Falso ; fi
siempre imprime Falso, no entra nunca en then.
Construcciones ms complejas pueden hacerse usando elif para anidar alternativas. Escribir en un
archivo las lneas que siguen
# ciertofalso.sh: escribe cierto o falso segn parmetro
numrico
#
if [ $1 = "0" ]
then
echo "Cierto: el parmetro es 0."
else
echo "Falso: el parmetro no es 0."
fi
Convertir el script en ejecutable. Invocar este script con
./ciertofalso.sh N
donde N es un nmero entero 0, 1, 2, etc. La variable $1 hace referencia a este parmetro de
invocacin. Verificar el resultado.
Crear y ejecutar el siguiente script:
# trabajo.sh: dice si se trabaja segn el da
#
invocar con parmetros:
#
domingo, feriado, u otro nombre cualquiera
#
if [ $1 = "domingo" ]
then
echo "no se trabaja"
elif [ $1 = "feriado" ]
then
echo "en algunos se trabaja"
else
echo "se trabaja"
fi

for
Este comando implementa una estructura repetitiva, en la cual una secuencia de comandos se
ejecuta una y otra vez. Su sintaxis es
for variable in lista ; do comandos ; done
Se puede probar en la lnea de comandos:
for NUMERO in 1 2 3 4 ; do echo $NUMERO ; done
for NOMBRE in alfa beta gamma ; do echo $NOMBRE ; done
for ARCH in * ; do echo Nombre archivo $ARCH ; done
El caracter * es expandido por el shell colocando en su lugar todos los nombres de archivo del
directorio actual.
Crear y probar el siguiente script.
# listapal.sh: lista de palabras
#
muestra palabras de una lista interna
#
LISTA="silla mesa banco cuadro armario"
for I in $LISTA
do
echo $I
done
# fin listapal.sh
En el siguiente script, el comando expr calcula expresiones aritmticas; notar su sintaxis.
# contarch.sh
#
muestra nombres y cuenta archivos en el directorio actual
#
CUENTA=0
for ARCH in *
do
echo $ARCH
CUENTA=`expr $CUENTA + 1`
# agrega 1 a CUENTA
done
echo Hay $CUENTA archivos en el directorio `pwd`
# fin contarch.sh
case
Este comando implementa alternativas o "casos"; elige entre mltiples secuencias de comandos la
secuencia a ejecutar. La eleccin se realiza encontrando el primer patrn con el que aparea una
cadena de caracteres. Su sintaxis es
case $CADENA in
patrn1)
comandos1;;
patrn2)
comandos2;;
...
*)
comandosN;;

esac
El patrn * se coloca al final; aparea cualquier cadena, y permite ejecutar comandosN cuando
ninguna de las opciones anteriores fue satisfecha. Crear el siguiente script:
# diasemana.sh: nombres de los das de la semana
#
invocar con nmero del 0 al 6; 0 es domingo
case $1 in
0)
echo Domingo;;
1)
echo Lunes;;
2)
echo Martes;;
3)
echo Mircoles;;
4)
echo Jueves;;
5)
echo Viernes;;
6)
echo Sbado;;
*)
echo Debe indicar un nmero de 0 a 6;;
esac
Invocarlo como
diasemana.sh N
donde N es cualquier nmero de 0 a 6, otro nmero, o una cadena cualquiera. Verificar el
comportamiento.
Crear el archivo estacion.sh con estas lneas:
# estacion.sh
#
indica la estacin del ao aproximada segn el mes
#
case $1 in
diciembre|enero|febrero)
echo Verano;;
marzo|abril|mayo)
echo Otoo;;
junio|julio|agosto)
echo Invierno;;
setiembre|octubre |noviembre)
echo Primavera;;
*)
echo estacion.sh: debe invocarse como
echo estacion.sh mes
echo con el nombre del mes en minscula;;
esac
# fin estacion.sh
El valor $1 es el parmetro recibido en la lnea de comando. La opcin *) aparea con cualquier
cadena, por lo que acta como "en otro caso"; es til para dar instrucciones sobre el uso del
comando. En las opciones, | acta como OR; pueden usarse tambin comodines * y ?. Invocar el
script:
bash estacion.sh octubre
bash estacion.sh
Cmo podra modificarse el script anterior para que aceptara el mes en cualquier combinacin de

maysculas y minsculas?
while
Este comando implementa una estructura repetitiva en la cual el conjunto de comandos se ejecuta
mientras se mantenga vlida una condicin (while = mientras). La condicin se examina al
principio y luego cada vez que se completa la secuencia de comandos. Si la condicin es falsa desde
la primera vez, los comandos no se ejecutan nunca. Su sintaxis es
while condicin ; do comandos ; done
En el guin que sigue la expresin entre parntesis rectos es una forma de invocar el comando
test, que realiza una prueba devolviendo cierto o falso. El operador -lt, "lower than", significa
"menor que". Observar su sintaxis, sobre todo la posicin de los espacios en blanco, obligatorios.
# crear1.sh
# crea archivos arch1....arch9, los lista y luego borra
VAL=1
while [ $VAL -lt 10 ]
# mientras $VAL < 10
do
echo creando archivo arch$VAL
touch arch$VAL
VAL=`expr $VAL + 1`
done
ls -l arch[0-9]
rm arch[0-9]
# fin crear1.sh
until
Este comando implementa una estructura repetitiva en la cual el conjunto de comando se ejecuta
hasta que se cumpla una condicin. En cuanto la condicin se cumple, dejan de ejecutarse los
comandos. La condicin se examina al principio; si es verdadera, los comandos no se ejecutan.
Notar la diferencia con while. Su sintaxis es
until condicin ; do comandos ; done
Usando until, el script anterior se escribira
# crear2.sh
# crea archivos arch1....arch9, los lista y luego borra
VAL=1
until [ $VAL -eq 10 ]
# hasta que $VAL = 10
do
echo creando archivo arch$VAL
touch arch$VAL
VAL=`expr $VAL + 1`
done
ls -l arch[0-9]
rm arch[0-9]
# fin crear2.sh
exit
Este comando se utiliza en programacin de shell para terminar inmediatamente un script y volver

al shell original.
exit
en un script, termina inmediatamente el script; en la lnea de comando, termina la ejecucin del
shell actual, y por lo tanto la sesin de UNIX.
exit 6
termina el script devolviendo el nmero indicado, lo que puede usarse para determinar condiciones
de error.
exit 0
termina el script devolviendo 0, para indicar la finalizacin exitosa de tareas. Escribir slo exit
tambin devuelve cdigo de error 0.
El siguiente script ofrece un ejemplo de uso.
#!/bin/bash
# exitar.sh: prueba valores de retorno de exit
#
clear
echo "Prueba de valores de retorno"
echo " Invocar con parmetros "
echo "
bien, error1, error2, cualquier cosa o nada"
echo " Verificar valor de retorno con"
echo '
echo $?'
echo
VALOR=$1
case $VALOR in
bien)
echo "
-> Terminacin sin error."
exit 0;;
error1)
echo "
-> Terminacin con error 1." ; exit 1;;
error2)
echo "
-> Terminacin con error 2." ; exit 2;;
*)
echo "
-> Terminacin con error 3."
echo "
(invocado con parmetro no previsto o sin
parmetro."
exit 3;;
esac
expr
Este comando recibe nmeros y operadores aritmticos como argumentos, efecta los clculos
indicados y devuelve el resultado. Cada argumento debe estar separado por blancos. Opera slo con
nmeros enteros y realiza las operaciones suma (+), resta (-), multiplicacin (*), divisin entera (/),
resto de divisin entera (%). Los smbolos * y / deben ser escapados escribiendo \* y \/, al igual que
los parntesis, que deben escribirse \( y \).
El comando expr usa la convencin de C para cierto y falso: 0 es falso, y distinto de 0 es cierto.
No confundir con la convencin que toma el shell en sus valores true y false, que es la contraria.
expr 4 + 5
devuelve 9 ( 4 + 5 = 9 ).
expr 3 \* 4 + 6 \/2
devuelve 15 ( 3 * 4 + 6 /2 = 15 ).

expr 3 \* \( 4 + 3 \) \/2
devuelve 10 ( 3 * (4 + 3) / 2 = 10 ).
expr tambin realiza operaciones lgicas de comparacin, aceptando los operadores =, !=, >,
<, >= y <=. El operador != es "no igual"; el ! se usa para negar. Estos caracteres tambin
requieren ser escapados.
echo `expr 6 \< 10`
devuelve 1, cierto para expr.
echo `expr 6 \> 10`
devuelve 0, falso para expr.
echo `expr abc \< abd`
devuelve 1, cierto para expr.
test
Este comando prueba condiciones y devuelve valor cierto (0) o falso (distinto de 0) segn el criterio
de cierto y falso del shell; esto lo hace apto para usar en la condicin de if. Tiene dos formas
equivalentes
test expresin
[ expresin ]
Los blancos entre la expresin y los parntesis rectos son necesarios.
test devuelve cierto ante una cadena no vaca, y falso ante una cadena vaca:
if test "cadena" ; then echo Cierto ; else echo Falso; fi
if test "" ; then echo Cierto ; else echo Falso ; fi
if [ cadena ] ; then echo Cierto ; else echo Falso; fi
if [ ] ; then echo Cierto ; else echo Falso ; fi
test prueba una cantidad de condiciones y situaciones:
if [ -f archivo ]; then echo "Existe archivo"; \
else echo "No existe archivo"; fi
La condicin [ -f archivo ] es cierta si archivo existe y es un archivo normal; anlogamente,
-r comprueba si es legible, -w si puede escribirse, -x si es ejecutable, -d si es un directorio, -s si
tiene tamao mayor que 0.
Las condiciones
[ $DIR = $HOME ]
[ $LOGNAME = "usuario1" ]
[ $RESULTADO != "error" ]
comparan cadenas de caracteres; = para igualdad y != para desigualdad.
La condicin
[ "$VAR1" ]
devuelve falso si la variable no est definida. Las comillas dan la cadena nula cuando VAR1 no est
definida; sin comillas no habra cadena y dara error de sintaxis.
La condicin
[ expnum1 -eq expnum2 ]
compara igualdad de expresiones que resultan en un nmero. Pueden ser expresiones numricas o
lgicas, ya que stas tambin resultan en nmeros. Los operadores numricos derivan sus letras del
ingls, y son -eq (igualdad), -neq (no igual, desigualdad), -lt (menor), -gt (mayor), -le (menor o
igual), -ge (mayor o igual).

El comando test se usa mucho para determinar si un comando se complet con xito, en cuyo
caso el valor de retorno es 0. El siguiente script crea un archivo si no existe.
# nvoarch.sh
# recibe un nombre y
# si ya existe emite
if [ -f $1 ]
then
echo El archivo $1
else
touch $1
echo Fue creado el
fi
echo
# fin nvoarch.sh

crea un archivo de ese nombre;


un mensaje
ya existe
archivo $1

Para comprobar su accin,


bash nvoarch.sh nuevo1
ls -l nuevo1
crea el archivo; ls comprueba que existe;
bash nvoarch.sh nuevo1
da mensaje indicando que el archivo ya existe.
Otros operadores aceptados por test son -a (AND) y -o (OR).
# rwsi.sh
# indica si un archivo tiene permiso de lectura y escritura
ARCH=$1
if [ -r $ARCH -a -w $ARCH ]
then
echo El archivo $ARCH se puede leer y escribir
else
echo Al archivo $ARCH le falta algn permiso
fi
ls -l $ARCH
# fin rwsi.sh
read
Este comando tiene como propsito solicitar informacin al usuario. Su ejecucin captura las
digitaciones del usuario, hasta obtener un caracter nueva lnea (techa Enter). El ejemplo siguiente
obtiene datos del usuario, los repite en pantalla, solicita confirmacin y emite un mensaje en
consecuencia.
# yo.sh: captura datos del usuario
#
clear
echo "Datos del usuario."
echo -n "Nombre y apellido: "; read NOMBRE
echo -n "Cdula de identidad: "; read CEDULA
echo
echo "Ha ingresado los siguientes datos:"

echo "
Nombre y apellido: $NOMBRE"
echo "
Cdula de Identidad: $CEDULA"
echo -n "Es correcto?(sN):"; read RESP
if [ "$RESP" = "s" -o $RESP = "S" ]
then
echo "Fin de ingreso."
else
echo "Debe ingresar sus datos nuevamente."
fi

Parmetros.
El siguiente programa muestra los parmetros que recibe al ser invocado:
# ecopars.sh
# muestra los parmetros recibidos
echo Cantidad de parmetros: $#
for VAR in $*
do
echo $VAR
done
# fin ecopars.sh
ecopars.sh Enero Febrero Marzo
muestra la cantidad y los parmetros recibidos. La variable $* contiene la lista de parmetros, y $#
la cantidad.
Dentro del script, los parmetros recibidos pueden referenciarse con $1, $2, $3, ..., $9, siendo $0 el
nombre del propio programa. Debido a que se los reconoce por su ubicacin, se llaman parmetros
posicionales. El siguiente programa se invoca con tres parmetros y muestra sus valores:
# mostrar3.sh
# se invoca con 3 parmetros y los muestra
echo nombre del programa: $0
echo parmetros recibidos:
echo $1; echo $2; echo $3
echo
# fin mostrar3.sh
Cmo se podra verificar la invocacin con 3 parmetros, y emitir un mensaje de error en caso
contrario (cuando el usuario ingresa menos de 3 parmetros)?

Depuracin.
Se llama depuracin ("debug") de un programa al proceso de verificar su funcionamiento en todos
los casos posibles y corregir sus errores ("bugs", "pulgas"; del ingls, literalmente, "chinche"; por
extensin, insecto pequeo).
Cuando se est escribiendo un script, puede convenir invocarlo de forma especial para generar
informacin de comandos ejecutados y errores, para ayudar en la depuracin. Las salidas se
imprimen en el error estndar, por lo que pueden direccionarse a un archivo sin mezclarse con la
salida del comando.
bash -x ecopars.sh

imprime cada comando en la salida;


bash -v ecopars.sh
invoca el script obteniendo una salida verbosa con informacin sobre cada comando ejecutado.
bash -xv ecopars.sh 2>ecopars.err
rene las dos fuentes de informacin y direcciona el error estndar a un archivo.

Preguntas y Ejercicios
Bibliografa y Referencias.
Comandos: true false if for case while until exit expr test
Referencias: Coffin[1989], Kernighan-Pike[1984]; pginas man de Linux "bash" ("Bourne-Again
shell").

Programacin del Shell


Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando Estructura del archivo /etc/hosts:
#nmero_IP nombre_mquina alias
10.137.137.250
liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (lneas comenzadas por #).
En los sistemas con NIS, para passwd y group usar el comanto ypcat en lugar de cat para
listar estos archivos, o el comando ypmatch para extraer una lnea sola de alguno de ellos.
Ejemplos:
ypcat passwd
ypcat group
ypmatch jperez passwd
Nota.
En la construccin de los siguientes programas o 'scripts' se valorar la presentacin interna y
externa. En la presentacin interna, importa la indentacin, los comentarios, la claridad de los
comandos, la significacin de los nombres elegidos; todo esto debe permitir considerar al
programa como 'autodocumentado'. En la presentacin externa, importan las leyendas
aclaratorias, ayudas, y avisos de ejecucin que favorezcan al usuario ocasional. Se aconseja
colocar los archivos de los programas en un subdirectorio bin del directorio propio del
usuario, donde no deber haber otra cosa que estos programas.
1. Recibir un nombre de archivo como parmetro e indicar, imprimiendo todas las leyendas
que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.
2. Recibir varios nombres de archivo como parmetros, y para cada uno validar si el nombre
corresponde a un archivo comn existente, y si es as mostrarlo en pantalla paginando.
3. Recibir un nombre de directorio, validar existencia y condicin de directorio y mostrar
nombres de todos los directorios y subdirectorios bajo l, en formato de pgina largo 23.
4. Escribir un programa seaejec que reciba un nombre de archivo, verifique que existe y
que es un archivo comn, lo convierta en ejecutable para el dueo y el grupo y muestre el
modo final.
5. Escribir un programa copiabin.sh que mueva todos los programas del directorio
actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario,
muestre los nombres de los que mueve e indique cuntos ha movido o que no ha movido
ninguno. Si el directorio bin no existe, deber ser creado.
6. Usando el archivo /etc/passwd escribir el programa usuarios que lista los nombres de
login, el directorio propio del usuario y el intrprete invocado por defecto de todos los
usuarios, ordenados alfabticamente por nombre de login.

7. Usando solamente el archivo /etc/group, escribir los siguientes programas:


a) 'grupo1': listar los nombres y nmeros de grupo y la lista de usuarios de cada uno,
ordenados por nombre.
b) 'grupo2': igual, ordenados por nmero de grupo.
c) 'grupo3': rene las dos salidas anteriores, con leyendas explicativas adecuadas para cada
parte y para cada columna, as como nombre de la mquina y fecha del da.
8. Escribir un programa usugrup que dado un nombre de login de usuario determine si
existe en el sistema, y si es as, presente su nombre de usuario, , nmero de usuario (UID),
grupo primario y grupos secundarios si los tiene, con leyendas adecuadas.
9. Escribir un programa grupusu que dado un nombre de grupo determine si existe en el
sistema, y si es as, presente su nombre, nmero de grupo (GID), y lista de usuarios que
pertenezcan a l, ya sea como grupo primario (en /etc/passwd) o como grupo secundario (lista
en /etc/group).
10. Escribir los siguientes programas:
a) ligass: muestra los nombres de archivo que son enlaces simblicos.
b) ligash: muestra los archivos que tiene enlaces hard.
Ambos programas reciben un nombre como como parmetro, y validarn que corresponda a
un directorio del sistema.
*11. Escribir un programa saludo que, segn la hora, escriba el saludo correspondiente al
nombre de pila del usuario. En el archivo /etc/passwd los usuarios deben estar ingresados con
nombre y apellido separados por blanco. Los saludos corresponden a las siguientes horas:
Buenos das, de 05:00 hasta 12:59; Buenas tardes, de 13:00 hasta 19:59; Buenas noches 20:00
hasta 04:59. Ejemplo de mensaje: Buenos das, Juan.
A efectos de pruebas, se recibirn la hora y el nombre de login como parmetros, dejando
comentados los comandos donde se extrae la hora real y se toma el usuario real.
12. Un script de respaldo produce, entre otros mensajes, lneas del tipo
"Total bytes written 18804023"
Guarda su salida en el archivo respaldo.error. Escribir un script total.cinta que
sume los bytes grabados e indique el total en bytes, Mb y Gb.
Crear un archivo respaldo.error de prueba, con un contenido tal como

Programacin del Shell


Ejercicios resueltos
Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando Estructura del archivo /etc/hosts:
#nmero_IP nombre_mquina alias
10.137.137.250
liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (lneas comenzadas por #).
En los sistemas con NIS, para passwd y group usar el comanto ypcat en lugar de cat para
listar estos archivos, o el comando ypmatch para extraer una lnea sola de alguno de ellos.
Ejemplos:
ypcat passwd
ypcat group
ypmatch jperez passwd
Nota.
En la construccin de los siguientes programas o 'scripts' se valorar la presentacin interna y
externa. En la presentacin interna, importa la indentacin, los comentarios, la claridad de los
comandos, la significacin de los nombres elegidos; todo esto debe permitir considerar al
programa como 'autodocumentado'. En la presentacin externa, importan las leyendas
aclaratorias, ayudas, y avisos de ejecucin que favorezcan al usuario ocasional. Se aconseja
colocar los archivos de los programas en un subdirectorio bin del directorio propio del
usuario, donde no deber haber otra cosa que estos programas.
1. Recibir un nombre de archivo como parmetro e indicar, imprimiendo todas las leyendas
que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.
#!/bin/bsh
# carsarch.sh: caractersticas de un archivo
echo Caracteristicas del archivo $1
if [ -r $1 ]
then
echo es legible
fi
if [ -w $1 ]
then
echo es grabable
fi
if [ -r $1 ]
then
echo es ejecutable
fi

2. Recibir varios nombres de archivo como parmetros, y para cada uno validar si el nombre
corresponde a un archivo comn existente, y si es as mostrarlo en pantalla paginando.
#!/bin/bash
# mostrarchs.sh: muestra contenido de varios archivos
for VAR in $*
do
if [ -f $VAR ]
then
more $VAR
else
echo No existe $VAR
fi
done
3. Recibir un nombre de directorio, validar existencia y condicin de directorio y mostrar
nombres de todos los directorios y subdirectorios bajo l, en formato de pgina largo 23.
#!/bin/bash
# esdir.sh: verifica directorio y muestra contenido recursivo
clear
if [ -d $1 ]
then
echo Directorios bajo $1
echo "Digite Enter para continuar"; read; clear
ls -lR $1 2>/dev/null | grep '^d' | pr -l24 | more -24
# el valor 24 en more es para visualizar en pantalla
else
echo No existe el directorio $1
fi
4. Escribir un programa seaejec que reciba un nombre de archivo, verifique que existe y
que es un archivo comn, lo convierta en ejecutable para el dueo y el grupo y muestre el
modo final.
#!/bin/bash
# seaejec: convierte un archivo en ejecutable
#
ARCH=$1
if [ -f $ARCH ]
# existe y es archivo regular
then
chmod ug+x $ARCH
ls -l $ARCH
else
echo "seaejec: el archivo $ARCH no pudo ser convertido"
fi
5. Escribir un programa copiabin.sh que mueva todos los programas del directorio actual
(archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre
los nombres de los que mueve e indique cuntos ha movido o que no ha movido ninguno. Si
el directorio bin no existe, deber ser creado.

#!/bin/bash
# copiabin.sh: copia archivos ejecutables hacia $HOME/bin
#
# si el directorio bin no existe lo crea
if [ ! -d $HOME/bin ]
then
mkdir $HOME/bin
fi
# copia de archivos
N=0
# contador de archivos copiados
for ARCH in *
do
if [ -x $ARCH -a -f $ARCH ] # ejecutable y archivo comn
(no directorio)
then
cp $ARCH $HOME/bin
echo " $ARCH fue copiado a $HOME/bin"
N=`expr $N + 1`
fi
done
if [ $N -eq 0 ]
then
echo "No se copi ningn archivo"
else
echo "Fueron copiados $N archivos"
fi
6. Usando el archivo /etc/passwd escribir el programa usuarios que lista los nombres de
login, el directorio propio del usuario y el intrprete invocado por defecto de todos los
usuarios, ordenados alfabticamente por nombre de login.
# usuarios: lista datos de usuarios
#
echo "Nombres de usuarios, Directorio propio, intrprete de
comandos"
ypcat passwd | cut -d: -f1,6,7 | sort | more
echo
7. Usando solamente el archivo /etc/group, escribir los siguientes programas:
a) 'grupo1': listar los nombres y nmeros de grupo y la lista de usuarios de cada uno,
ordenados por nombre.
b) 'grupo2': igual, ordenados por nmero de grupo.
c) 'grupo3': rene las dos salidas anteriores, con leyendas explicativas adecuadas para cada
parte y para cada columna, as como nombre de la mquina y fecha del da.
#!/bin/bash
#
# grupo1:
clear
echo "Grupos por nombre:"
echo --------------------------------------------------------echo "login:nmero_de_grupo:lista de usuarios"

echo --------------------------------------------------------ypcat group | cut -d: -f1,3,4 | sort | more -18


echo --------------------------------------------------------echo Digite Enter para continuar
read
clear
#!/bin/bash
#
# grupo2:
echo "Grupos por nmero:"
echo --------------------------------------------------------echo "login:nmero_de_grupo:lista de usuarios"
echo --------------------------------------------------------ypcat group | cut -d: -f1,3,4 | sort -t: -n +1 | more -18
echo --------------------------------------------------------echo
#!/bin/bash
#
# grupo3:
clear
./grupo1
echo
./grupo2
echo
echo Mquina: `hostname`
echo Fecha: `date`
8. Escribir un programa usugrup que dado un nombre de login de usuario determine si
existe en el sistema, y si es as, presente su nombre de usuario, , nmero de usuario (UID),
grupo primario y grupos secundarios si los tiene, con leyendas adecuadas.
#!/bin/bash
# usugrup: datos y grupos de un usuario
#
USUARIO=$1
id $USUARIO 1>/dev/null 2>&1
ERROR=$?
if [ $ERROR -ne 0 ]
then
echo "El usuario " $USUARIO "no existe"
exit
fi
NOMBRE=`id $USUARIO | cut -f1 -d" "`
echo \(UID\) y nombre: $NOMBRE
GRUPO1=`id $USUARIO | cut -f2 -d" "`
echo \(GID\) y grupo primario: $GRUPO1
if test `id $USUARIO | tr " " "\n" | wc -l` -gt 2
then
GRUPOS2=`id $USUARIO | cut -f3 -d" "`
echo \(GIDs\) y grupos secundarios: $GRUPOS2

fi
9. Escribir un programa grupusu que dado un nombre de grupo determine si existe en el
sistema, y si es as, presente su nombre, nmero de grupo (GID), y lista de usuarios que
pertenezcan a l, ya sea como grupo primario (en /etc/passwd) o como grupo secundario (lista
en /etc/group).
#!/bin/bash
# determina usuarios en un grupo
GRUPO=$1
# nombre de variable significativo
EXISTE=`ypcat group | grep "^$GRUPO"`
if [ ! $EXISTE ]
then
echo "El grupo $GRUPO no existe."
exit
fi
# extrae nmero del grupo
GID=`echo $EXISTE | cut -d: -f3`
echo "El nmero del grupo $GRUPO es $GID"
# busca usuarios con este grupo primario
echo Usuarios en este grupo como primario:
# corta campos usuario e id grupo,
# selecciona lneas con $GID al final,
# luego corta el GID, deja nombre usuario
ypcat passwd | cut -d: -f1,4 | grep :$GID$ | cut -d: -f1
# busca usuarios con este grupo secundario
echo Usuarios en este grupo como secundario: echo $EXISTE |
cut -d: -f4 | tr "," " "
10. Escribir los siguientes programas:
a) ligass: muestra los nombres de archivo que son enlaces simblicos.
b) ligash: muestra los archivos que tiene enlaces hard.
Ambos programas reciben un nombre como como parmetro, y validarn que corresponda a
un directorio del sistema.
#!/bin/bash
# ligass: lista archivos que son enlace simblico o tienen
enlaces hard
# simblicos: en ls -l se busca que empiece con l
if [ ! -d $1 ]
then
echo Error: ligas: $1 no es un directorio
exit
fi
echo Archivos que son enlace simblico:
ls -l | grep "^l" | cut -56 -

echo
# hard: se busca 3 espacios y distinto de 1 como contador de
enlaces
echo Archivos que tienen enlace hard:
ls -l | grep -v "^d" | cut -c11 - | grep -v "^ 1" | cut -c46 *11. Escribir un programa saludo que, segn la hora, escriba el saludo correspondiente al
nombre de pila del usuario. En el archivo /etc/passwd los usuarios deben estar ingresados con
nombre y apellido separados por blanco. Los saludos corresponden a las siguientes horas:
Buenos das, de 05:00 hasta 12:59; Buenas tardes, de 13:00 hasta 19:59; Buenas noches 20:00
hasta 04:59. Ejemplo de mensaje: Buenos das, Juan.
A efectos de pruebas, se recibirn la hora y el nombre de login como parmetros, dejando
comentados los comandos donde se extrae la hora real y se toma el usuario real.
#!/bin/bash
# saludo.cmd
# script en UNIX que saludo al usuario por su nombre
NOMBRE=`cat /etc/passwd | grep "^$LOGNAME" | \
cut -d: -f5 | cut -d' ' -f1`
# si el usuario no tiene ingresado un nombre, toma "Nadie"
NOMBRE=${NOMBRE:-Nadie}
HORA=`date | cut -c12-13 | tr -d ' '`
if expr "$HORA" \<= 5 > /dev/null
then
echo 'Buenas noches, '$NOMBRE
elif expr "$HORA" \<= 12 > /dev/null
then
echo 'Buenos dias, '$NOMBRE
elif expr "$HORA" \<= 19 > /dev/null
then
echo 'Buenas tardes, '$NOMBRE
elif expr "$HORA" \<= 24 > /dev/null
then
echo 'Buenas noches, '$NOMBRE
fi
12. Un script de respaldo produce, entre otros mensajes, lneas del tipo
"Total bytes written 18804023"
Guarda su salida en el archivo respaldo.error. Escribir un script total.cinta que
sume los bytes grabados e indique el total en bytes, Mb y Gb.
Crear un archivo respaldo.error de prueba, con un contenido tal como
Total bytes written 1800
Total bytes written 1000
#
# total.cinta: cantidad de bytes grabados en cinta
#
TOTAL=0
LISTA=`cat respaldo.error | tr -dc "[0-9] "`
for NUM in $LISTA
do
TOTAL=`expr $TOTAL + $NUM`

done
echo "Total General de bytes respaldados: "$TOTAL
TOTALMB=`expr $TOTAL \/ 1000000`
echo "Total General de MB respaldados: "$TOTALMB
TOTALGB=`expr $TOTALMB \/ 1000`
echo "Total General de GB respaldados: "$TOTALGB

Comandos de Usuario
Ultima revisin: Set 2001
Propsito
Metalenguaje y convenciones
Referencias
Comandos:
apropos banner cal cat cd chmod clear cmp cp cut date diff echo
env exit file head hostname id info less ln ls dir vdir mail man
mesg mkdir more mv passwd pr printenv ps pwd rm rmdir tail talk
touch umask wc whatis which who whoami
Propsito:
Esta gua resume la sintaxis, opciones ms frecuentes y ejemplos de uso de los comandos UNIX de
ms uso en la prctica. En descripcin se presenta nombre del comando, sintaxis resumida, accin
principal, opciones ms usuales, ejemplos y observaciones, si las hay.
Esta gua no puede ni pretende sustituir la consulta de las pginas man.
Metalenguaje y convenciones:
...
[]
{A|B}
TAB
LF
CR
ESPACIO
blanco
UID
GID
(su)

repeticin del ltimo item


item opcional, puede estar o no
item opcional obligatorio, debe tomarse A o B
tecla o caracter tabulador
caracter nueva lnea
caracter retorno de carro
caracter o tecla de barra espaciadora
caracter TAB o ESPACIO, delimita palabras
identificador de usuario (nmero)
identificador de grupo (nmero)
requiere permiso de supervisor

Los items en minsculas van tal cual, los items en MAYUSCULAS deben ser sustitudos por
valores del usuario.

apropos
apropos [OPCIONES] PALABRA-CLAVE ...
busca entre las descripciones cortas de las pginas del manual la presencia de la palabra clave.
-r interpreta cada nombre como una expresin regular
-w interpreta cada nombre como conteniendo caracteres comodines
apropos man
apropos -w man*

banner
banner MENSAJE
Muestra el mensaje (cadena de caracteres) en letras grandes y girado 90; para imprimir carteles.
-wN

en un ancho de N columnas

banner -w 40 Hola!
banner a

cal
cal [OPCIONES] [[MES]AO]
Sin parmetros, muestra calendario del mes actual; el ao debe indicarse con centuria, 1-1999; el
mes en nmero 1 a 12.
-j
-y

da juliano, contado desde el 1 de enero


calendario del ao en curso

cal
cal 1998
cal 11 1997
cal 9 1752
muestra el mes del ao en que se saltearon 11 das para compensar aos bisiestos.

cat
cat [OPCIONES] [ARCHIVO ...]
Concatena los archivos indicados y los muestra en la salida estndar. Sin argumentos, recibe de la
entrada estndar (-).
-A
-b
-E
-n
-s
-t
-v
-T

equivalente a -vET
numera las lneas que no estn en blanco
muestra $ al final de cada lnea
numera las lneas
reemplaza varias lneas en blanco por una sola
equivale a -vT
muestra caracteres no imprimibles excepto LF y TAB
muestra TAB como ^I

cat /etc/group
cat cap1 cap2 cap3
muestra sucesivamente los archivos cap1, cap2 y cap3.
cat cap1 cap2 cap3 > libro
rene los archivos cap1, cap2 y cap3 en el archivo libro.
cat arch1 arch2 > arch1
hace perder los datos originales en arch1.

cd
cd [DIRECTORIO]
cambia directorio de trabajo; sin parmetros, cambia al directorio propio del usuario como aparece
en $HOME. En Linux, es un comando interno del shell; ver bash(1).
cd /etc
cd

chmod
chmod [OPCION] MODO ARCHIVO ...
cambia los permisos de acceso a los archivos indicados. No cambia los permisos de los enlaces
simblicos.
-v
-R

verboso, describe accin sobre cada archivo.


recursivo, cambia permisos de subdirectorios y sus contenidos

chmod -R 0755 documentos/visibles


chmod ug+rw-x,o+r-wx cap*.txt

clear
clear
borra la pantalla del terminal.

cmp
cmp [OPCIONES] ARCH1 ARCH2 [SALTEAR1 [SALTEAR2]]
compara dos archivos. Si son iguales, no dice nada; si difieren, marca el byte y el nmero de lnea
de la primera diferencia.
-l
-s

nmero de byte (decimal) y bytes diferentes (octal) para cada


diferencia.
devueve solamente un valor de retorno, sin escribir nada.

Los valores de retorno son 0 si los archivos son iguales, 1 si diferen, >1 si hubo un error. Los
valores decimales SALTEAR1 y SALTEAR2 indican la posicin de byte donde comienza la
comparacin en ARCH1 y ARCH2; puede expresarse en hexadecimal precediento el nmero con 0x,
o en octal precediendo con 0.

cp
cp [OPCIONES] ARCH_ORIGEN ARCH_DESTINO
cp [OPCIONES] ARCHIVO ... DIRECTORIO

copia ARCH_ORIGEN hacia ARCH_DESTINO; copia los archivos indicados hacia DIRECTORIO.
Por defecto no copia directorios.
-d
-f
-i
-l
-p
-s
-R
-v

copia enlaces simblicos como tales


forzoso, sobreescribe archivos destino si existen
avisa antes de sobreescribir archivos existentes
crea enlaces hard en lugar de copiar los archivos
preserva dueo, grupo, permiso y fecha
crea enlaces simblicos en lugar de copiar los archivos
recursivo, copia directorios y sus archivos
verboso, escribe el nombre de cada archivo que copia

cp arch1 /dir1/arch1
cp -vi arch1 arch2
cp -dpRv dir1 /dir2/subdir2 dirtodo
mejor forma de copiar exactamente una estructura de directorios, recursivamente, conservando
permisos y manteniendo enlaces simblicos; verboso puede omitirse.

cut
cut -f CAMPOS [-d DELIM][ARCHIVO ...]
cut -c COLUMNAS [ARCHIVO ...]
extrae partes de cada lnea de los archivos indicados o de la entrada estndar. Los campos y
columnas se indican con nmeros 1, 2,... o con intervalos n-m. Intervalos incompletos: -n es 1-n, mes m hasta el ltimo campo o columna.
-f
-c
-d
-s

campos numerados, por defecto separados por TAB


columnas, ubicacin posicional de caracteres en la lnea
fija el caracter delimitador de campos, TAB por defecto
con -f para no imprimir lneas que no contengan el delimitador

cat /etc/passwd | cut -d: -f1,3,5-6


cat /etc/passwd | cut -c1-15
ls -l | cut -c57corta slo el nombre del archivo, al final (puede requerir ajuste en el valor de columna).

date
date [OPCION] [+FORMATO]
muestra fecha y hora. Con +FORMATO la presenta segn el patrn indicado.
date [-u|--utc|--universal] [ MMDDHHmm [[CC]YY][.SS] ]
fija (su) fecha y hora.
-u --utc --universal
Formato para fijar la hora:
MM mes (01-12)
DD da (01-31)
HH hora (00-23)

hora universal (GMT)

mm
CC
YY
SS

mminuto (00-59)
centuria
ao
segundos (00-59)

Formato para presentar la fecha y la hora (+FORMATO):


'%H' hora (00-23)
'%M' minuto (00-59)
'%S' segundos (00-59)
'%T' hora en 24 horas (hh:mm:ss)
'%X' hora en representacin local (%H:%M:S)
'%a' nombre local abreviado del da
'%A' nombre local completo del da
'%b' nombre local abreviado del mes
'%B' nombre local completo del mes
'%c' fecha y hora locales
'%d' da del mes (01-31)
'%m' mes (01-12)
'%w' da de la semana (0-6), 0 es Domingo
'%x' fecha local
'%y' 2 dgitos del ao (00-99)
'%Y' 4 dgitos del ao (1970....)

diff
diff ARCHIVO1 ARCHIVO2
muestra las diferencias existentes entre dos archivos.
diff nota1 nota2

echo
echo [OPCIONES] MENSAJE ...
escribe en la salida estndar los mensajes, separados con un espacio y con LF al final. Muchos
shells tienen un comando interno del mismo nombre; ste, fuera del shell, debe invocarse como
/bin/echo.
-n
suprime LF al final
-e
interpreta estos caracteres especiales, dentro de " "
\a
campana
\b
retroceso
\c
suprime LF al final
\f
cambio de pgina
\n
nueva lnea (LF)
\r
retorno de carro (CR)
\t
tabulador horizontal
\v
tabulador vertical
\\
barra inversa
\nnn caracter ASCII nnn en octal

echo Hola Todos!


echo -n Hola Todos!
echo -e "\a"
echo -e "\101"
muestra la letra A, que es 101 en octal.

env
env [OPCIONES][NOMBRE=VALOR]...[COMANDO [ARGUMENTO ...]]
Sin argumentos, muestra valores de variables de ambiente; con argumentos, corre el comando
indicado con las variables de ambiente modificadas segn se indique.
-i comenzar con un ambiente virgen, ignorando el actual
env
env DIR=/etc listadir1
lista el contenido del directorio /etc; listadir es un archivo ejecutable que contiene la lnea ls
dir1, para listar contenido del directorio dir1.
echo Directorio $HOME
ls -l $HOME
muestra el directorio propio del usuario, guardado en la variable de ambiente HOME.

exit
exit [N]
produce la salida del shell con estado de terminacin N (nmero); si no se indica retorna con 0.

file
file OPCIONES ARCHIVO
intenta determinar el tipo de archivo de que se trata: texto ASCII, cdigo C, script en diversos
lenguajes, binario, otros.
-z

examina archivos comprimidos

file cati.c
este archivo contiene cdigo C.
file adduser
este archivo es un script en Perl.
file /bin/cat
es un ejecutable binario.

head
head [OPCIONES] ARCHIVO ...
muestra la primera parte de un archivo, por defecto 10 lneas. Si son varios archivos muestra un
encabezado con el nombre de cada archivo.

-v
-q
-N
-n N

verboso, imprime encabezamiento con nombre del archivo


silencioso, no imprime encabezado con nombre del archivo
imprime primeras N lneas, por defecto 10
imprime primeras N lneas

head -24 /etc/inetd.conf

hostname
hostname [NOMBRE]
sin argumentos, da el nombre de la mquina; con NOMBRE, fija el nombre de la mquina (su).
-h
-f
-d
-i
-a
-v

ayuda
--fqdn
nombre de mquina completo, con dominio DNS
--domain nombre de dominio DNS
--ip-address
direccin (nmero IP)
--alias
nombres de alias
verboso

id
id [OPCIONES] [NOMBRE_USUARIO]
muestra informacin sobre un usuario. Muestra nombre, UID, grupo, GID y grupos suplementarios.
Si el id real y el efectivo no corresponden muestra ambos. Las opciones limitan el despliegue.
-g
-G
-n
-r
-u

slo el grupo primario


grupos suplementarios
nombre en lugar de nmero; requiere -u, -g, o -G
real en lugar de efectivo; requiere -u, -g o -G
slo el nmero de usuario (UID)

id
id webmaster
muestra datos del usuario webmaster.

info
info [NOMBRE]
sistema de informacin de GNU sobre UNIX.
info info
muestra informacin sobre info, con tutorial para aprender a manejar info.

less
less [OPCIONES] [ARCHIVO]

programa de paginado y bsqueda similar a more, con ms opciones y comandos. Permite


movimiento hacia adelante y atrs, pero no lee todo el archivo al principio, por lo que es ms
rpido. Sus comandos estn tomados de more y vi (ver more).
--help -?
muestra ayuda sobre comandos internos

ln
ln [OPCIONES] ORIGEN [DESTINO]
ln [OPCIONES] ORIGEN ... DIRECTORIO
si el ltimo argumento es un directorio, ln crea en ese directorio enlaces a todos los archivos origen
con el mismo nombre; si slo se indica un nombre de archivo, crea un enlace hacia ese archivo en el
directorio actual; si se indican dos archivos, crea un enlace con el primer nombre (archivo real)
hacia el segundo (enlace). Por defecto, crea enlaces hard y no elimina archivos existentes.
-f
-i
-s
-v
ln
ln
ln
ln

forzoso, elimina archivos destino existentes


interactivo, pide confirmacin para eliminar archivos
simblico, crea enlaces simblicos en lugar de hard
verboso, da el nombre de cada enlace creado
nota nota.ln
-s /etc/passwd
-s datos.usuario datos.usu.ln
-sv datos.usuario LEAME dir2

ls, dir, vdir


ls [OPCIONES] [NOMBRE]
Para cada nombre de directorio, lista contenido de directorio; para cada nombre de archivo, indica
su nombre y datos. La salida est ordenada alfabticamente por defecto. Sin nombre, lista el
directorio corriente. La opcin -l muestra, separados por espacios, los campos tipo archivo y
permisos, cantidad de enlaces hard, dueo, grupo, tamao, mes, da, hora o ao, nombre.
-1
-a
-c
-C
-d
-F
-i
-k
-l
-r
-R
-s
-t
-u
-U
-x

un nombre de archivo por lnea


todos los archivos, incluso no visibles comenzados por .
ordenar por fecha de estado de ltimo cambio (ctime en inodo)
salida en columnas con ordenamiento por columnas
lista directorios como archivos, no su contenido
indica tipo: / directorio, * ejecutable, @ enlace simblico
inodo, nmero de ndice de cada archivo
tamaos en KB
listado en formato largo
invertir ordenamiento
listar recursivamente subdirectorios
tamao en bloques de 1024 bytes
ordenar por fecha de ltima modificacin (mtime en inodo)
ordenar por fecha de ltimo acceso (atime en inodo)
no ordenar
salida en columnas con ordenamiento por filas

dir
equivale al ls -C.
vdir
equivale a ls -l.

mail
mail [OPCIONES] [DESTINO ...]
procesador de correo electrnico de UNIX. Sin argumentos, muestra lista de mensajes en la casilla
de entrada y permite manipularlos. Si hay un destino, lee de la entrada estndar hasta un "." aislado
en una lnea y enva lo ledo como mensaje a destino.
-v
-s
-c
-b
-f
-u

verboso, muestra detalles de entrega


TEMA
especifica el tema (subject) del mensaje
LISTA
enva copias a LISTA de usuarios, separados por coma
LISTA
enva copia ciega a LISTA de usuarios
[ARCH]
lee contenido de archivo propio mbox o el indicado
USUARIO equivale a mail -f /var/spool/mail/USUARIO

Comandos internos de mail:


& indicador de comandos de mail
? muestra lista de comandos para manejo de mensajes
d borra mensaje corriente, marcado con '>'
N muestra el mensaje nmero N
q sale del programa de correo
mail -s "Saludos para todos " -c pedro,mateo@nsk.com.uy juan
enva un mensaje al usuario juan, tema "Saludos para todos", con copia a usuarios pedro y mateo.

man
man [OPCIONES] [SECCION] NOMBRE ...
Da formato y muestra las pginas del manual en lnea. Si no se indica seccin, muestra slo la
primera que encuentre; si se indica seccin como nmero 1-9, muestra la pgina que haya en la
seccin indicada. Las pginas estn organizadas en secciones, reconocidas por un dgito, y
eventualmente subsecciones indicadas por una o ms letras.
-a
-d
-f
-h
-k
-w

muestra pginas en todas las secciones


muestra informacin de depuracin propia de man
equivalente a whatis
muestra ayuda para man
equivalente a apropos
no imprime las pginas, sino las ubicaciones

Secciones del manual:


1 programas ejecutables y guiones (scripts)
2 llamadas al sistema (funciones del ncleo)
3 llamadas a biblioteca (funciones de biblioteca)
4 archivos especiales (generalmente en /dev)

5
6
7
8

formatos de archivos
juegos
paquetes de macros
comandos de administracin (su)
man -h
man man
man -a man

mesg
mesg [y|n]
controla acceso de escritura a la terminal propia por otros usuarios, tpicamente con programas tales
como talk y write. Sin parmetros, muestra el estado: is y si est habilitada escritura, is n
si no est habilitada escritura.
y
n

permite a otros escribir mensajes en la terminal


no permite a otros escribir mensajes en la terminal
mesg
mesg y
mesg n

mkdir
mkdir [OPCIONES] [-m MODO] DIRECTORIO ...
crea los directorios indicados. Por defecto, el modo es 0777 menos los bits de umask.
-m MODO

permite fijar el modo para el nuevo directorio;


el modo es simblico y usa el modo por defecto como

partida.
-p
crea primero todos los directorios padre inexistentes,
con el modo de umask modificado con u+wx
--verbose
informa sobre la creacin de directorios
mkdir dir1 dir2
mkdir -p ltr/jd/jan
crea la estructura de directorios ltr/jd/jan.

more
more [OPCIONES][-N][+/CADENA[-N] [ARCHIVO ...]
pagina el texto dividindolo en pantallas, presentando una por vez.
-N
-d
-s

fija tamao de pantalla en N lneas


muestra mensajes de ayuda
comprime en una varias lneas en blanco seguidas

-u suprime subrayados
+/cadena
busca la cadena antes de mostrar
+N comienza a mostrar a partir de la lnea N
Durante el despliegue, reconoce los comandos siguientes, algunos de los cuales pueden ir
precedidos de un nmero multiplicador:
h
muestra resumen de estos comandos
ESPACIO avanza una pantalla
ENTER
muestra siguiente lnea
f
avanza una pantalla; ^F
b
retrocede una pantalla; tambin ^B
^L
(Ctrl-L) redibuja la pantalla
=
muestra nmero de lnea actual
/PATRON busca hacia adelante la expresin regular PATRON
?/PATRON busca hacia atrs la expresin regular PATRON
n
repetir ltima bsqueda
.
repetir el comando anterior

ir a lugar de comienzo de ltima bsqueda


q, Q
sale

mv
mv [OPCIONES] ARCH_ORIGNEN ARCH_DESTINO
mv [OPCIONES] ARCHIVO ... DIRECTORIO
cambia de nombre ARCH_ORIGEN, o mueve hacia ARCH_DESTINO si el archivo destino invoca
otro directorio; mueve ARCHIVO y los siguientes archivos hacia DIRECTORIO. Entre sistemas de
archivos slo puede mover archivos normales.
-f
-i
-v
-u

forzoso, sobreescribe archivos destino si existen


avisa antes de sobreescribir archivos existentes
verboso, escribe el nombre de cada archivo que mueve
no mover si existe archivo destino ms nuevo o de igual fecha

mv nota notanueva
mv -vi LEAME LEAME2
mv -v arch1 notanueva LEAME /dir2/subdir2

passwd
passwd [OPCIONES] [NOMBRE]
cambia la contrasea del usuario. El superusuario puede cambiar las contraseas de otros usuarios.
En general, las contraseas deben tener entre 6 y 8 caracteres, contener maysculas, minsculas,
dgitos 0 a 9 o signos de puntuacin; no se admiten contraseas simples ni parecidas al nombre del
usuario. Si el superusuario asigna contraseas poco seguras no hay advertencia.
-x M
-n M
-n M

mximo nmero de das de validez; luego pide cambiar


mnimo nmero de das antes de poder cambiar
nmero de das de advertencia antes de expirar

passwd
permite cambiar la contrasea del usuario invocante
passwd jperez
(su) cambia la contrasea del usuario jperez.

pr
pr [OPCIONES] ARCHIVO ...
escribe en salida estndar un texto con formato, paginado y opcionalmente en varias columnas.
+P1[:P2] de pgina P1 a pgina P2
-C en C columnas
-a escribe las columnas a travs y no hacia abajo
-d a doble espacio
-f separar pginas con salto de pgina
-h reemplazar encabezado con el indicado
-l largo de pgina en lneas; por defecto 66
-m escribir archivos en paralelo uno en cada columna
-o margen izquierdo; se suma al ancho indicado por -w
-w ancho de pgina en columnas; por defecto 72
pr
pr
ls
ls

-o8 -l23 -h "Lista de usuarios" /etc/passwd


-o2 -l22 -h "Lista de servicios" /etc/services | more
/etc | pr -2 -b -l23 | more
/etc | pr -3 -b -l23 -a | more

printenv
printenv [VARIABLE] ...
muestra el valor de todas las variables de ambiente; si se indica un nombre de variable, puestra el
valor de esa variable.
printenv TERM

ps
ps [OPCIONES] [PID] ...
informa sobre procesos en ejecucin. Para las opciones, no debe usarse -, aunque es aceptado.
l
u
j
s
a
x
w

formato largo
formto usuario, muestra nombre, PID, hora inicio, estado
formato trabajos, muestra PGID y SID
formato seales
mostrar tambin procesos de otros usuarios.
mostrar tambin procesos sin terminal de control
no truncar lneas para caber en un ancho de pgina;
agregar una w para cada lnea ms

h
r

sin encabezado
slo procesos en ejecucin

ps auxwww | more
muestra todos los procesos en ejecucin, en formato usuario, an los sin terminal, admitiendo hasta
4 lneas por comando.

pwd
pwd
imprime toda la ruta del directorio corriente; todos los componentes mostrados sern los directorios
reales, no enlaces simblicos. El shell tiene una versin interna de pwd, por lo que para ejecutar
sta, que es externa, es preciso escribir
ls -l /var/spool/mail
muestra /var/spool/mail como enlace simblico a /var/mail (Debian).
cd /var/spool/mail
pwd
versin interna del shell, muestra /var/spool/mail, el enlace simblico.
/bin/pwd
versin externa, muestra /var/mail, el directorio real.

rm
rm [OPCIONES] NOMBRE ...
elimina los archivos indicados; por defecto no elimina directorios.
-f
-i
-r, -R
-v

ignora archivos inexistentes y nunca pide confirmacin


interactivo, pregunta antes de eliminar cada archivo.
recursivo, borra directorios y su contenido
verboso, muestra nombre de cada archivo eliminado

rm arch1 arch2 dir1/arch3


rm -riv dir1/subdir1
rm -r *
elimina TODOS los archivos y subdirectorios; no avisa. Cuidado!

rmdir
rmdir [OPCIONES] DIRECTORIO ...
elimina directorios vacos.
-p

elimina directorios padre si quedan vacos

rmdir dir2
rmdir -p dir1/subdir11/subdir111

tail
tail [OPCIONES] ARCHIVO ...
muestra la ltima parte de un archivo, por defecto 10 lneas. Si son varios archivos muestra un
encabezado con el nombre de cada archivo.
-f
-v
-q
-N
-n N

contina tratando de leer; para archivos en crecimiento


verboso, imprime encabezamiento con nombre del archivo
silencioso, no imprime encabezado con nombre del archivo
imprime ltimas N lneas
idem

talk
talk USUARIO [TTY]
conversar con otro usuario. Si est en la misma mquina, alcanza con el nombre de login del
usuario; si est en otra mquina, es preciso usar la forma usuario@maquina. Si el usuario tiene
varias sesiones a la vez, puede indicarse la terminal, usualmente en la forma ttyXX.

touch
touch [OPCIONES] ARCHIVO ...
cambia fecha, hora de acceso y/o modificacin de los archivos indicados; les pone la fecha y hora
actuales. Si los archivos no existen los crea vacos.
-a
cambia slo fecha de acceso
-c
no crea el archivo si no existe
-m
cambiar slo fecha de modificacin
-r arch_ref
fija la fecha segn fecha del archivo arch_ref
-t MMDDhhmm[[CC]YY][.ss]
fija la fecha indicando mes MM, da DD, hora hh y minuto mm;
puede agregarse tambin centuria CC y ao YY y segundos ss.
touch 01011200 dia1enero.h1
touch ahora.arc
touch -r antes.arch arch1 arch2

umask
umask [-S] [MODO]
fija la mscara para permisos de creacin segn modo. Si modo se indica con nmero, es en octal;
si no, es en modo simblico. En general, los permisos de creacin sern, para directorios, 0777
menos los bits de mscara; para archivos 0666 menos los bits de mscara. La mscara vigente es la
fijada por defecto o la que se fije con este comando. Sin parmetros, umask muestra la mscara
vigente. La mscara indica los permisos que se quitan al permiso fijado.
-S

muestra la mscara, sin fijarla (por defecto, sin parmetros)

umask
muestra la mscara vigente.
umask 022
fija los permisos de creacin de archivos en 0666 - 022, es decir, 0644; los de directorios en 2777 022, es decir, 2755 (Debian).

uname
uname [OPCIONES]
muestra informacin de la mquina y del sistema operativo:
-a
-m
-n
-p
-r
-s
-v

toda la informacin
mquina, tipo de hardware
nombre de mquina en la red
tipo de procesador
edicin (release) del sistema operativo
nombre del sistema operativo
versin del sistema operativo

wc
wc [OPCIONES] ARCHIVO ...
cuenta lneas, palabras y caracteres de los archivos indicados o de la entrada estndar. Si son varios
los archivos, imprime una lnea por cada uno y un total.
-c
-w
-l

slo caracteres
slo palabras
slo lneas

man pwd | wc -l
wc /etc/passwd /etc/group

whatis
whatis [OPCIONES] NOMBRE ...
muestra una descripcin corta de los comandos similares a nombre.
-r interpreta cada nombre como una expresin regular
-w interpreta cada nombre como conteniendo caracteres comodines
whatis man
whatis -w man*

which
which PROGRAMA ...

indica la ruta completa de PROGRAMA, si ste est accesible a travs de la variable PATH..

who
who [OPCIONES] [am i]
Quin est en el sistema. Muestra nombre de login, lnea de terminal, hora de ingreso, nombre de
mquina remota o display X.
am i
-H
-u
-w
-m

mquina y nombre de login del usuario invocante


muestra encabezado de columnas
tiempo inactivo; "old" es >24 horas; "." activo reciente
si el usuario recibe (+) o no (-) mensajes
igual que 'who am i'

whoami
whoami
Muestra identificador del usuario efectivo actual. Si se ha usado su para adoptar otro usuario,
whoami muestra el nombre asociado con el usuario adoptado.

Referencias:
Linux Debian/GNU. Pginas man, info.

Comandos de Filtro
Referencias
dd find grep, fgrep, egrep sort tr uniq

dd
dd OPCION ...
copia un archivo, de entrada estndar a salida estndar por defecto, opcionalmente cambiando
tamao de bloques de entrada salida y realizando diversas conversiones.
if=ARCHIVO leer la entrada del archivo indicado.
of=ARCHIVO dirigir la salida al archivo indicado.
ibs=BYTES
leer la entrada en bloques de BYTES bytes.
obs=BYTES
grabar la salida en bloques de BYTES bytes.
bs=BYTES
leer y grabar entrada y salida en bloques.
conv=CONVERSION[,CONVERSION]... convertir segn argumentos.
Las opciones numricas admiten los multiplicadores b para 512, k para 1024.
Los argumentos de conversin se separan por comas sin espacios; incluyen:
ascii convierte EBCDIC a ASCII.
ebcdic
convierte ASCII a EBCDIC.
ibm
convierte ASCII a EBCDIC alternativo.
block embloca cada lnea de entrada en 'cbs' bytes, reemplaza
nueva lnea por espacio, rellena con espacios.
unblock reemplaza espacios finales de cada bloque con nueva
lnea.
lcase convierte maysculas a minsculas
ucase convierte minsculas a maysculas.
notrunc no truncar el archivo de salida.

find
find [DIRECTORIO...] [EXPRESION]
Recorre una jerarqua de directorios buscando archivos seleccionados segn cierta expresin y
muestra informacin sobre los encontrados.
Argumentos numricos:
+N
-N
N

mayor que N
menor que N
exactamente N.

Criterios de bsqueda:
-name PATRON

el nombre aparea con PATRON;

-iname PATRON
-path PATRON
-ipath PATRON
-regexp EXP
-iregexp EXP
-lname PATRON
-ilname PATRON
-atime N
-ctime N
-mtime N
-amin N
-cmin N
-mmin N
-daystart
-size N[bckw]
bytes)
-empty
-user UNAME
-group GNAME
-uid N
-gid N
-nouser
-nogroup

idem,insensible a mayculas;
nombre con va completa;
idem, insensible a maystulas;
nombre aparea con expresin regular EXP
idem, insensible a maysculas;
archivo es un enlace simblico;
idem, insensible a maysculas;
ltimo acceso N*24 horas atrs
ltimo cambio de estado N*24 horas atrs
ltima modificacin N*24 horas atrs
ltimo acceso N minutos atrs
ltimo cambio de estado N minutos horas atrs
ltima modificacin N minutos atrs
mide tiempos desde las 0 horas de hoy
tamao de N bloques, caracteres, KB o palabras (2
archivo
archivo
archivo
archivo
archivo
archivo
archivo

vaco, regular o directorio


del usuario UNAME
del grupo GNAME
del usuario de nmero N
del grupo de nmero N
sin dueo asignado
sin grupo asignado

Acciones:
-print
imprime la ruta completa de los archivos encontrados.
-ls
lista los archivos encontrados en formato ls -dils
-exec COMANDO {} \; ejecuta COMANDO sobre los archivos encontrados
find /usr/local/doc -name '*.texi'
busca en el directorio indicado los archivos de nombre indicado.
find /usr/src -name '*.c' -size +100k -print
muestra nombres de archivos terminados en .c con tamao mayor de 100 K.
find . -lname '*sysdep.c'
busca enlaces simblicos del nombre indicado.
find /u/bill -amin +2 -amin -6
archivos que fueron ledos entre 2 y 6 minutos atrs.
La medicin de tiempos se hace desde 24 horas atrs (1 da atrs); para medir tiempos desde las 0
horas del da de hoy, usar la opcin -daystart.
find ~ -daystart -type f -mtime 1
archivos que fueron modificados ayer.
find / -empty -exec rm -rf '{}' ';'
busca archivos o directorios vacos y los elimina.
find . -name '*.h' -exec diff -u '{}' /tmp/master ';'
compara archivos de "header" (*.h) del directorio corriente contra el archivo /tmp/master.

grep, egrep, fgrep


grep [ -e PATRON | -f ARCHIVO | PATRON ] OPCIONES ARCHIVO ...
recorre los archivos indicados extrayendo las lneas que aparean con un patrn de cadena de

caracteres.
-G
-E
-F

el patrn es una expresin regular bsica; opcin por defecto


el patrn es una expresin regular extendida
el patrn es una cadena fija

Existen dos variantes: egrep, similar a grep -E, y fgrep, igual a grep -F.
-c slo muestra la cantidad de lneas
-e PATRON usa el patrn indicado; til cuando el patrn empieza
con -f ARCHIVO obtiene los patrones del archivo, uno por lnea
-h suprime indicacin de archivo cuando se busca en varios
archivos
-i ignora maysculas y minsculas en el patrn y en los archivos
-n indicar nmero de lnea
-v muestra las lneas que no aparean con el patrn
-w aparea el patrn como una palabra
-x el patrn aparea con toda la lnea

sort
sort [OPCIONES] [ARCHIVO...]
ordena, mezcla o compara todas las lneas de los archivos indicados o de la entrada estndar. Tiene
3 modos de operacin: ordenar, verificar orden, mezclar archivos.
-c
-m

verifica si los archivos ya estn ordenados


mezcla archivos ordenados en uno solo, ordenado

-b ignora blancos adelante en la ordenacin


-d ordena considerando slo letras, nmeros y blancos
-f ordena como si todas fueran maysculas
-i ignora caracteres no imprimibles (fuera de 040-0176 octal)
-n ordena como valores numricos y no como ASCII
-r invertir el sentido de la ordenacin
-o arch archivo de salida; puede ser el de entrada
-t usar el caracter indicado como separador de campos
-k POS1[,POS2] campos de ordenacin, POS1 hasta POS2 inclusive;
o hasta el final si no hay POS2
Las posiciones POS1 y POS2 son de la forma F.C donde F es el nmero del campo y C es el
primer caracter desde el comienzo del campo (para POS1) o desde el final del campo (para POS2);
si se omite C se ordena tomando en cuenta el primer caracter del campo.
cat
cat
cat
cat

/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd

|
|
|
|

sort
sort
sort
sort

-t:
-t: +4 -f | cut -d: -f5
-t: +5 | cut -d: -f6
-t: -n -k3,5 | cut -d: -f4,5

tr
tr [OPCION]... CONJ1 [CONJ2]
copia entrada en salida traduciendo, comprimiendo o borrando caracteres. CONJ1 y CONJ2 definen
un conjunto ordenado de caracteres a transformar. La opcin -c reemplaza CONJ1 por su
complemento, los caracteres no especificados en el conjunto.
-d elimina los caracteres de CONJ1.
-s comprime caracteres repetidos en CONJ1 en una sola ocurrencia.
-ds primero borra segn CONJ1 y despus comprime segn CONJ2.
El formato de CONJ1 y CONJ2 se parece al de las expresiones regulares, pero son slo listas de
caracteres. La mayora de los caracteres se representan a s mismos, pero existen las siguientes
abreviaturas:
\a Control-G,
\b Control-H,
\f Control-L,
\' Control-J,
\r Control-M,
\t Control-I,
\v Control-K,
\OOO caracter representado por dgitos octales
\\ barra inversa.
M-N
0-9

intervalo de caracteres desde el M al N (M anterior al N)


equivale a 0123456789

La notacin [:CLASE:] expande a los caracteres predefinidos en las clases:


alnum
alpha
blank
cntrl
digit
graph
lower
print
punct
space
upper
xdigit

letras y nmeros.
letras.
espacio.
caracteres de control.
nmeros.
caracteres imprimibles, excludo el espacio.
minsculas
caracteres imprimibles, includo el espacio.
signos de puntuacin.
espacio
maysculas.
dgitos hexadecimales.

La traduccin se realiza cambiando el primer caracter de CONJ1 por el primer caracter de CONJ2,
el 2o. de CON1 por el 2o. de CONJ2, etc. Los caracteres no indicados en CONJ1 pasan
incambiados.
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'
convierten minsculas en maysculas.

tr -d '\000'
elimina caracteres nulos (octal 000).
tr -cs '[a-zA-Z0-9]' '[\n*]'
separa las palabras una por lnea.
tr -s '\n'
comprime caracteres nueva lnea en uno solo (elimina lneas en blanco).

uniq
uniq [OPCION]... [ENTRADA [SALIDA]]
muestra una nica lnea para una entrada ordenada, eliminando lneas repetidas sucesivas.
Opcionalmente, puede mostrar solo lneas que aparecen una vez, o slo lneas que aparecen varias
veces. La entrada debe estar ya ordenada; si no lo est, puede usars sort -u para lograr un efecto
similar.
-f N
-s N
-c
-i
-d
-u

saltear
saltear
indicar
ignorar
mostrar
mostrar

N campos antes de verificar unicidad.


N caracteres antes de verificar unicidad.
junto a cada lnea el nmero de veces que aparece.
maysculas y minsculas al comparar.
slo lneas repetidas.
slo lneas nicas.

Los campos son cadenas de caracteres separadas por uno o ms blancos (espacios o tabuladores). Si
se indican saltear campos y caracteres, los campos se saltean primero.

Referencias:
Linux Debian/GNU. Pginas man, info.

Bibliografa
Kernighan-Pike[1984]
Kernighan, Brian y Pike, Rob. "El entorno de programacin UNIX", Prentice Hall, 1987
(Edicin en ingls de 1984).
Morgan-McGilton[1989]
Morgan, Rachel y McGilton, Henry. "Introduccin al UNIX Sistema V", McGraw-Hill, 1989
(Edicin en ingls de 1987).
Coffin[1989]
Coffin, Stephen. "UNIX System V Release 4, the Complete Reference", Osborne McGrawHill, 1989.
Welsh[1995]
Welsh, Matt. "Linux installation and getting started guide".
Greenfield[]
Greenfield, Larry. "The Linux User's Guide".
Tanenbaum[1992]
Tanenbaum, Andrew, "Sistemas operativos modernos", Prentice Hall, 1993 (Edicin en ingls
de 1992).

Centro de Informtica.
Sistemas Operativos II (UNIX), Curso 1997.

2a. prueba de evaluacin. RESOLUCION.


Escribir comandos o interconexiones para resolver las situaciones que se indican. Cada pregunta
vale 4 puntos.
1. Un archivo acceso.log de registro de accesos de usuarios a un sistema UNIX, genera un rengln
por acceso, el primer campo es el nombre del usuario, y los campos estn separados por ":". Escribir
comandos que muestren el nombre de cada usuario y la cantidad de accesos registrados, en orden
alfabtico.
cat acceso.log | cut -d: -f1 | sort | uniq -c
2. Extraer del archivo acceso.log las lneas correspondientes al usuario jperez del mes de mayo del
ao 1997. La fecha figura en el formato "1300 15 Mayo 1997"; el primer nmero es la hora.
cat acceso.log | grep jperez | grep Mayo
3. Extraer del archivo acceso.log las lneas que correspondan al usuario jperez o al usuario elopez.
cat acceso.log | egrep "jperez|elopez"
4. Un archivo de nombres NoMBreS.tXT es tal que un mismo nombre puede estar en maysculas y
minsculas, mezcladas y de diferentes maneras. Generar una lista de nombres en minscula con los
7 nombres que aparecen menos veces, sin importar como estn escritos.
cat NoMBreS.tXT | tr [a-z] [A-Z] | sort | uniq -c | \
sort -nr | head -7
5. Un archivo palabras.txt contiene palabras distintas una por lnea. Extrar todas las palabras que
empiecen y terminen con vocal, en minscula o mayscula.
cat palabras.txt | greo "^[aeiouAEIOU].*[aeiouAEIOU]"
6. Escribir comandos para realizar las siguientes tareas:
- actualizar fecha y hora del archivo LEAME, sin alterarlo.
touch LEAME
- cambiar la contrasea propia.
passwd
- trasladarse al directorio propio sin escribirlo.
cd
- invocar el editor vi en slo lectura del archivo LEAME.
vi -R LEAME
7. Usando el archivo /etc/passwd,
- extraer una lnea que muestre directorio propio y shell del usuario elopez.
cat /etc/passwd | grep elopez
- listar los usuarios que usan el shell /bin/bash.
cat /etc/passwd | grep /bin/bash

- listar los usuarios que no usan el shell /bin/bash.


cat /etc/passwd | grep -v /bin/bash | grep -v '#'
- contar la cantidad de usuarios
cat /etc/passwd | grep -v '#' | wc -l
Recordar que el archivo /etc/passwd suele tener comentarios, y que # puede ser interpretado por el
shell.
8. Realizar las tareas siguientes:
- deshabilitar recepcin de mensajes, verificar que as qued.
mesg n; mesg
- indicar la ruta completa del comando UNIX nslookup.
which nslookup
9. Escribir comandos para ingresar como superusuario, cambiar el archivo /etc/group hacia el grupo
adm, salir de superusuario.
su; chgrp adm /etc/group; exit
10. Presentar el archivo /etc/passwd con formato de pgina de largo 23 lneas, margen de 8 espacios
y encabezado por la leyenda "Usuarios del Sistema".
cat /etc/passwd | pr -o8 -l23 -h "Usuarios del Sistema"

Examen Diciembre 1997


PARTE I. Sin consulta de material.
1. Para qu sirve el operador grave?
2. Al escribir comandos, qu diferencia hay entre usar comillas dobles y simples?
3. Ejecutar el comando nodigo de modo que no produzca ninguna salida ni muestre ningn error.
4. Qu son los procesos? Qu son las seales?
5. Qu son BSD y SYSTEM V? Qu es POSIX?
6. Puede haber un enlace hard hacia un directorio? Puede haber un enlace simblico hacia un
directorio? Qu diferencia hay?
7. Con qu comando se borra un archivo? Y un directorio? Con qu comando se borra un enlace
simblico hacia un archivo? Con qu comando se borra un enlace simblico hacia un directorio?
8. Qu es el "shell"? Qu hace? En un mismo sistema UNIX, puede haber ms de un shell?
Explicar.
9. Escribir un comando y uno solo para ejecutar cada una de las siguientes tareas, en el directorio
actual:
- crear directorios trab1, trab2, trab3;
- asignar los tres directorios al usuario gerente;
- asignar los tres directorios al grupo trabajos;
- fijarles permiso total para el usuario y el grupo, pero slo lectura y recorrido para otros.
10. Escribir un comando (uno solo) para ejecutar cada una de las tareas siguientes en los directorios
trab1, trab2 y trab3 del directorio actual, en forma simultnea:
- crear en los tres directorios archivos resumen.txt.
- crear en los tres directorios enlaces simblicos tmp hacia el directorio /tmp.
- crear en los tres directorios archivos 00indice con fecha y hora actuales.
- agregar a los tres archivos 00indice la leyenda "Montevideo, URUGUAY".
- eliminar en los tres directorios los subdirectorios basura y todos los archivos y subdirectorios bajo
basura.
PARTE II: Con libre consulta de material.
Escribir scripts para realizar las siguientes tareas.
1. Dado un archivo de texto cuyo nombre se recibe como parmetro, crear un archivo
diccionario.txt que contenga todas las palabras de ese texto sin repetir, ordenadas y en mayscula.
Debern extraerse del texto slo las palabras, evitando smbolos y nmeros.
2. Un archivo de registro de eventos en un sistema UNIX tiene en su primer campo el nombre del
evento, en el campo 2 el nombre de login del usuario y en el campo 5 la cantidad de minutos en
sesin; el separador de campos es ":". Escribir un script que reciba un nombre de login, extraiga los
registros del evento "login" del usuario indicado, y calcule el total de minutos en sesin de ese
usuario. El archivo de registro es /var/log/events.log. Si el usuario no tiene ningn login, deber dar
un mensaje adecuado.
3. Usando el archivo /etc/group, escribir un script que reciba el nombre de un grupo como
parmetro y presente el nmero de grupo, el nombre del grupo, la lista de usuarios y la cantidad de
usuarios.
4. Escribir un script que reciba el nombre de un directorio como parmetro, verifique que existe y

que es un directorio, determine si est ya contenido en la variable PATH, y si no est lo agregue; en


ambos casos emitir un mensaje indicando la condicin y mostrar el contenido de la variable
PATH.

Examen Diciembre 1997


Resolucin
PARTE I. Sin consulta de material.
1. Para qu sirve el operador grave?
Para ejecutar un comando dentro de otro comando; un uso comn es ejecutar un
comando y colocar su salida en una variable de ambiente.
2. Al escribir comandos, qu diferencia hay entre usar comillas dobles y simples?
Lo que est dentro de las comillas dobles es interpretado por el shell. Las variables de
ambiente, el asterisco, etc., son expandidos a sus valores. Lo que est dentro de comillas
simples no es interpretado en modo alguno; son los caracteres escritos y nada ms.
3. Ejecutar el comando nodigo de modo que no produzca ninguna salida ni muestre ningn error.
nodigo 1>/dev/null 2>&1
4. Qu son los procesos? Qu son las seales?
Un proceso es un programa en ejecucin. Las seales son valores que se hacen llegar a
los procesos para controlarlos mientras se estn ejecutando.
5. Qu son BSD y SYSTEM V? Qu es POSIX?
BSD y SYSTEM V son dos lneas diferentes de desarrollo de los sistemas operativos
UNIX. POSIX es un estndar que se pretende que cumpla todo sistema operativo que
desee llamarse UNIX.
6. Puede haber un enlace hard hacia un directorio? Puede haber un enlace simblico hacia un
directorio? Qu diferencia hay?
No puede haber enlace hard hacia directorio; s puede haber enlace simblico hacia
directorio. El enlace hard es slo una referencia ms hacia el archivo; el enlace
simblico es un pequeo archivo que contiene un puntero hacia el archivo real. Cada
enlace simblico genera un nuevo pequeo archivo; los enlaces hard no generan nuevos
archivos.
7. Con qu comando se borra un archivo? Y un directorio? Con qu comando se borra un enlace
simblico hacia un archivo? Con qu comando se borra un enlace simblico hacia un directorio?
Un archivo se borra con rm; un directorio se borra con rmdir; un enlace simblico se
borra con rm, sea a directorio o a archivo, ya que un enlace simblico es en definitiva
un archivo.
8. Qu es el "shell"? Qu hace? En un mismo sistema UNIX, puede haber ms de un shell?
Explicar.
El shell es el intrprete de comandos, que recibe los comandos del operador, los

interpreta y los transfiere al ncleo o "kernel" del sistema operativo. En un mismo


sistema puede haber ms de un shell; cada usuario puede tener uno diferente, e incluso
un mismo usuario puede invocar un shell diferente del que est atendiendo su sesin
actual.
9. Escribir un comando y uno solo para ejecutar cada una de las siguientes tareas, en el directorio
actual:
- crear directorios trab1, trab2, trab3;
- asignar los tres directorios al usuario gerente;
- asignar los tres directorios al grupo trabajos;
- fijarles permiso total para el usuario y el grupo, pero slo lectura y recorrido para otros.
mkdir
chown
chgrp
chmod

trab1 trab2 trab3


gerente trab?
trabajos trab?
775 trab?

10. Escribir un comando (uno solo) para ejecutar cada una de las tareas siguientes en los directorios
trab1, trab2 y trab3 del directorio actual, en forma simultnea:
- crear en los tres directorios archivos resumen.txt.
- crear en los tres directorios enlaces simblicos tmp hacia el directorio /tmp.
- crear en los tres directorios archivos 00indice con fecha y hora actuales.
- agregar a los tres archivos 00indice la leyenda "Montevideo, URUGUAY".
- eliminar en los tres directorios los subdirectorios basura y todos los archivos y subdirectorios bajo
basura.
touch trab?/resumen.txt
ln -s /tmp trab?/tmp
date > trab?/00indice
echo "Montevideo, URUGUAY" >> trab?/00indice
rm -r trab?/basura
PARTE II: Con libre consulta de material.
Escribir scripts para realizar las siguientes tareas.
1. Dado un archivo de texto cuyo nombre se recibe como parmetro, crear un archivo
diccionario.txt que contenga todas las palabras de ese texto sin repetir, ordenadas y en mayscula.
Debern extraerse del texto slo las palabras, evitando smbolos y nmeros.
cat $1 | tr -cs "[a-zA-Z]" "\n" | tr [a-z] [A-Z] | \
sort | uniq > diccionario.txt
2. Un archivo de registro de eventos en un sistema UNIX tiene en su primer campo el nombre del
evento, en el campo 2 el nombre de login del usuario y en el campo 5 la cantidad de minutos en
sesin; el separador de campos es ":". Escribir un script que reciba un nombre de login, extraiga los
registros del evento "login" del usuario indicado, y calcule el total de minutos en sesin de ese
usuario. El archivo de registro es /var/log/events.log. Si el usuario no tiene ningn login, deber dar
un mensaje adecuado.
cat /var/log/events.log | grep login | grep $1 > logusu.tmp
if [ ! -s logusu.tmp ] # si logusu.tmp no tiene tamao >0
then

echo "El usuario $1 no tiene login"


exit
fi
MINUTOS=`cat logusu.tmp | cut -f5 -d:`
TOTAL=0
for MIN in $MINUTOS
do
TOTAL=`expr $TOTAL + $MIN`
done
echo "El usuario $1 tiene $TOTAL minutos de login"
3. Usando el archivo /etc/group, escribir un script que reciba el nombre de un grupo como
parmetro y presente el nmero de grupo, el nombre del grupo, la lista de usuarios y la cantidad de
usuarios.
GRUPO=`cat /etc/group | grep ^$1`
echo "Nombre grupo:" `echo $GRUPO | cut -f1 -d:`
echo "Nmero grupo:" `echo $GRUPO | cut -f3 -d:`
echo "Lista de Usuarios:" `echo $GRUPO | cut -f4 -d:`
echo "Cantidad de usuarios" `echo $GRUPO | tr "," " " | wc -w`
4. Escribir un script que reciba el nombre de un directorio como parmetro, verifique que existe y
que es un directorio, determine si est ya contenido en la variable PATH, y si no est lo agregue; en
ambos casos emitir un mensaje indicando la condicin y mostrar el contenido de la variable
PATH.
DIR=$1
if [ ! -d $DIR ]
then
echo $DIR no existe o no es un directorio
exit
fi
ESTA=`echo $PATH | grep $DIR`
if [ -z $ESTA ] # $ESTA es vaco, $DIR no est en $PATH
then
PATH=$PATH:$DIR
echo $DIR fue agregado a la variable PATH
else
echo $DIR ya se encuentra en la variable PATH
fi
echo PATH=$PATH

Examen Febrero 1998


PARTE I. Sin consulta de material.
1. Al ingresar comandos, para qu sirven los smbolos ";" y "|"?
2. Los parntesis y otros smbolos son "interpretados por el shell". Cmo puede escaparse esta
intepretacin y mostrar los parntesis? Escribir un comando que muestre en pantalla la leyenda
(aqu se ven los parntesis)
de todas las formas que sepa hacerlo.
3. Ejecutar el comando nsk del directorio /usr/local/bin de modo que tome su entrada del
archivo datos del directorio del usuario jperez en /home, grabe su salida en el archivo
jperez.dts del directorio actual y los errores en jperez.errs del directorio actual.
4. Mostrar en pantalla el calendario del mes actual. Luego mostrar en pantalla el calendario del mes
de marzo del ao en curso, y finalmente el calendario de 1999
5. Mostrar las primeras dos lneas de los archivos cap01.txt a cap99.txt del directorio novela bajo el
directorio actual. Mostrar la salida paginada.
6. Cules son los tres modos del editor vi? Cmo se pasa de uno a otro?
7. Escribir comandos para borrar
- arch1, archivo;
- lharch2, enlace hard al archivo arch2;
- lnarch2, enlace simblico al archivo arch1;
- dir 1, directorio vaco;
- dir2, directorio lleno, junto con todos sus archivos;
- lndir3, enlace al directorio dir3.
Crear los siguientes enlaces, o indicar si no es posible:
- lnarch3, enlace simblico hacia el archivo arch3.
- lharch3, enlace hard hacia el archivo arch3.
- lndir3, enlace simblico hacia el directorio dir3.
- lhdir3, enlace hard hacia el directorio dir3.
8. Fijar los permisos del archivo resumen.txt para que el dueo pueda leer y escribir, el grupo pueda
leer y el resto no pueda nada. Usar modo absoluto y modo simblico.
9. Fijar los permisos del directorio varios para que el dueo pueda ver, recorrer y borrar archivos, el
grupo pueda ver y recorrer, y el resto slo pueda recorrer. Usar modo absoluto y modo simblico.
10. Escribir un script que reciba un nombre de archivo y agregue, al principio del archivo, las
leyendas
MEMORANDUM.
Montevideo, URUGUAY.
(fecha del da)
(rengln en blanco)
Se dispone del comando fecha que pone la fecha en espaol. Si se usan archivos temporales,
eliminarlos al terminar.
PARTE II: Con libre consulta de material.
Escribir scripts para realizar las siguientes tareas.

1. Escribir un script que reciba como parmetros un nombre de login, un nombre verdadero y un
nmero de usuario, y cree ese usuario con grupo primario 101, directorio en /home y shell bash.
2. Escribir un script que reciba como parmetro una palabra y el nombre de un archivo de texto, e
indique si la palabra est contenida en el archivo de texto y cuntas veces.
3. El comando ls -l muestra la cantidad de enlaces hard en el campo 2, y el nombre del archivo en el
campo 9; los campos estn separados por uno o ms espacios. Escribir un script que muestre, para
los archivos que tengan enlace hard, la cantidad de enlaces hard y el nombre del archivo.
4. El comando ps -auxw muestra los procesos que estn corriendo. Sus campos, separados por uno o
ms espacios, indican en el lugar 2 el nmero identificador de proceso y en el lugar 11 el comando
de invocacin. Escribir un script que reciba el nombre de un comando y devuelva el (los)
identificador(es) de proceso de ese comando, o indique que no est corriendo.

Examen Febrero 1998


Resolucin
PARTE I. Sin consulta de material.
1. Al ingresar comandos, para qu sirven los smbolos ";" y "|"?
Ambos separan comandos. El smbolo ";" permite escribir varios comandos en una
misma lnea, que se ejecutan en forma independiente; el smbolo "|" dirige la salida de
un comando hacia la entrada del siguiente.
2. Los parntesis y otros smbolos son "interpretados por el shell". Cmo puede escaparse esta
intepretacin y mostrar los parntesis? Escribir un comando que muestre en pantalla la leyenda
(aqu se ven los parntesis)
de todas las formas que sepa hacerlo.
echo '(aqu se ven los parntesis)'
echo "(aqu se ven los parntesis)"
echo \(aqu se ven los parntesis\)
3. Ejecutar el comando nsk del directorio /usr/local/bin de modo que tome su entrada del
archivo datos del directorio del usuario jperez en /home, grabe su salida en el archivo
jperez.dts del directorio actual y los errores en jperez.errs del directorio actual.
/usr/local/bin/nsk </home/jperez/datos >jperez.dts 2>jperez.errs
4. Mostrar en pantalla el calendario del mes actual. Luego mostrar en pantalla el calendario del mes
de marzo del ao en curso, y finalmente el calendario de 1999
cal
cal 03 1998
cal 1999
5. Mostrar las primeras dos lneas de los archivos cap01.txt a cap99.txt del directorio novela bajo el
directorio actual. Mostrar la salida paginada.
head -2 novela/cap[0-9][0-9].txt | more
6. Cules son los tres modos del editor vi? Cmo se pasa de uno a otro?

Los modos son comando, insercin de texto y ltima lnea o modo ex. Para pasar de
comando a insercin se digita i, I, a, A, o, O, que permiten insertar texto en diferentes
formas. Para volver a modo comando, tecla ESC. Para pasar de modo comando a ltima
lnea digitar ":". Para pasar de ltima lnea a modo comando, con ENTER al ejecutar el
comando de ltima lnea o con ESC para cancelarlo. No se puede pasar directamente de
insercin a ltima lnea o viceversa.
7. Escribir comandos para borrar
- arch1, archivo;
- lharch2, enlace hard al archivo arch2;
- lnarch2, enlace simblico al archivo arch1;
- dir 1, directorio vaco;
- dir2, directorio lleno, junto con todos sus archivos;
- lndir3, enlace al directorio dir3.
Crear los siguientes enlaces, o indicar si no es posible:
- lnarch3, enlace simblico hacia el archivo arch3.
- lharch3, enlace hard hacia el archivo arch3.
- lndir3, enlace simblico hacia el directorio dir3.
- lhdir3, enlace hard hacia el directorio dir3.
rm arch1
rm lharch2
rm lnarch2
rmdir dir1
rm -r dir2
rm lndir3
ln -s arch3 lnarch3
ln arch3 lharch3
ln -s dir3 lndir3
(no es posible)
8. Fijar los permisos del archivo resumen.txt para que el dueo pueda leer y escribir, el grupo pueda
leer y el resto no pueda nada. Usar modo absoluto y modo simblico.
chmod u+rw-x,g+r-wx,o-rwx resumen.txt
chmod 640
9. Fijar los permisos del directorio varios para que el dueo pueda ver, recorrer y borrar archivos, el
grupo pueda ver y recorrer, y el resto slo pueda recorrer. Usar modo absoluto y modo simblico.
chmod u+rwx,g+rx-w,o+x-rw varios
chmod 751
10. Escribir un script que reciba un nombre de archivo y agregue, al principio del archivo, las
leyendas
MEMORANDUM.
Montevideo, URUGUAY.
(fecha del da)
(rengln en blanco)
Se dispone del comando fecha que pone la fecha en espaol. Si se usan archivos temporales,
eliminarlos al terminar.

echo "MEMORANDUM." > temporal.tmp


echo "Montevideo, URUGUAY." >> temporal.tmp
fecha >> temporal.tmp
echo >> temporal.tmp
cat $1 >> temporal.tmp
rm $1
mv temporal.tmp $1
PARTE II: Con libre consulta de material.
Escribir scripts para realizar las siguientes tareas.
1. Escribir un script que reciba como parmetros un nombre de login, un nombre verdadero y un
nmero de usuario, y cree ese usuario con grupo primario 101, directorio en /home y shell bash.
NOMLOGIN=$1
NUMERO=$2
NOMBRE=$3
echo "$NOMLOGIN::$NUMERO:101:$NOMBRE:/home/
$LOGIN:/bin/bash" \
/etc/passwd
mkdir /home/$NOMLOGIN
2. Escribir un script que reciba como parmetro una palabra y el nombre de un archivo de texto, e
indique si la palabra est contenida en el archivo de texto y cuntas veces.
HAY=`cat $2 | tr -cs "[a-zA-Z]" "\n" | tr [a-z] [A-Z] | \
sort | grep $1 | uniq -c`
echo "La palabra $1 est contenida $HAY veces en $2"
3. El comando ls -l muestra la cantidad de enlaces hard en el campo 2, y el nombre del archivo en el
campo 9; los campos estn separados por uno o ms espacios. Escribir un script que muestre, para
los archivos que tengan enlace hard, la cantidad de enlaces hard y el nombre del archivo.
ls -l | tr -s " " | cut -d" " -f2,9 | grep -v "^1"
4. El comando ps -auxw muestra los procesos que estn corriendo. Sus campos, separados por uno o
ms espacios, indican en el lugar 2 el nmero identificador de proceso y en el lugar 11 el comando
de invocacin. Escribir un script que reciba el nombre de un comando y devuelva el (los)
identificador(es) de proceso de ese comando, o indique que no est corriendo.
PROCESO=$1
NUMEROS=`ps -auxw | tr -s " " | grep $1 | cut -d" " -f2`
if [ -z $NUMEROS ]
then
echo "El proceso $PROCESO no est corriendo"
else
echo "El proceso $PROCESO tiene idenfificador\(es\)"
echo $NUMEROS
fi

Examen Diciembre 1998


Scripts.

1. Construir un script para crear usuarios. Deber leer un archivo nuevos.txt con los campos
nombre login, uid, grupo, comentario, directorio propio, separados por ":". Se dispone del comando
de sistema useradd, con sintaxis
useradd [-u uid] [-g grupo] [-c comentario] [-d dir_propio]
nombre_login
Ejemplo de archivo nuevos.txt:
nombre1:2001:prueba:Usuario_1:/home/prueba/nombre1
nombre2:2002:prueba:Usuario_2:/home/prueba/nombre2
nombre3:2003:prueba:Usuario_3:/home/prueba/nombre3

2. a) Escribir un script para mostrar los nombres de login de usuarios y sus directorios propios para
aquellos usuarios con grupo primario GID 201.
b) Escribir un script que reciba como parmetro un nombre de login de usario, extraiga su
directorio propio y verifique si tiene all un subdirectorio de nombre ".netscape". De no ser as,
copiar hacia el directorio propio del usuario el directorio modelo /etc/skel/docentes/netscape y
todos sus archivos.
c) reunir ambos scripts en uno solo que agregue la configuracin personal modelo ".netscape" a
todos los usuarios que an no lo tengan.

3. a) Construir un script conec.cmd para establecer conexin discada a una red de datos. Se
dispone de los siguientes scripts:
urugnet.dip para conectar a UruguayNet;
urupac.dip para conectar a URUPAC;
iie.dip para acceder al Instituto de Ingeniera Elctrica;
adinet.dip para conectar a Adinet.
Estos scripts se invocan con el comando dip; por ejemplo:
dip urugnet.dip
El script recibir uno de los nombres (urugnet, urupac, iie, adinet) e invocara el script
correspondiente al discado. Por ejemplo,
conec urupac
invocar el script de conexin a URUPAC.
b) Agregar al script un control de xito, mostrando un mensaje "Conexin establecida" o "No se
pudo establecer conexin". Cuando se ha establecido un enlace PPP, el comando
/sbin/ifconfig da una salida de varias lneas, una de las cuales contiene la cadena "ppp0". El
establecimiento de la conexin debe esperarse 40 segundos.

Examen Diciembre 1998


Solucin de scripts.

1. Construir un script para crear usuarios. Deber leer un archivo nuevos.txt con los campos
nombre login, uid, grupo, comentario, directorio propio, separados por ":". Se dispone del comando
de sistema useradd, con sintaxis

useradd [-u uid] [-g grupo] [-c comentario] [-d dir_propio]


nombre_login
Ejemplo de archivo nuevos.txt:
nombre1:2001:prueba:Usuario_1:/home/prueba/nombre1
nombre2:2002:prueba:Usuario_2:/home/prueba/nombre2
nombre3:2003:prueba:Usuario_3:/home/prueba/nombre3
#!/bin/sh
#
#nuevos.cmd:creanuevosusuariosdesdeunarchivodetexto.
#
LISLINEA=`catnuevos.txt`
forLINEAin$LISLINEA
do
NOMBRE=`echo$LINEA|cutf1d:`
NUMERO=`echo$LINEA|cutf2d:`
GRUPO=`echo$LINEA|cutf3d:`
COMENT=`echo$LINEA|cutf4d:`
PROPIO=`echo$LINEA|cutf5d:`
echouseraddu$NUMEROg$GRUPOc$COMENTd$PROPIO$NOMBRE
done

2. a) Escribir un script para mostrar los nombres de login de usuarios y sus directorios propios para
aquellos usuarios con grupo primario GID 201.
b) Escribir un script que reciba como parmetro un nombre de login de usario, extraiga su directorio
propio y verifique si tiene all un subdirectorio de nombre ".netscape". De no ser as, copiar hacia
el directorio propio del usuario el directorio modelo /etc/skel/docentes/netscape y todos sus
archivos.
c) reunir ambos scripts en uno solo que agregue la configuracin personal modelo ".netscape" a
todos los usuarios que an no lo tengan.
#!/bin/sh
#
#netscape.cmd:colocasubdirectorionestcapeendirectorios
propios
#deusuariosdelgrupo201queannolotengan
USU201=`cat/etc/passwd|tr"""_"|\
grep"[azAZ09_]*:[^:]*:[09]*:201:"`
forLINEAin$USU201
do
NOMBRE=`echo$LINEA|cutf1d:`
PROPIO=`echo$LINEA|cutf6d:`
if[d$PROPIO/.netscape]
then
echoElusuario$NOMBREtienedirectorio.netscape
else

echoElusuario$NOMBRENOTIENEdirectorio.netscape
cppr/etc/skel/netscape$PROPIO/.netscape
chownR$NOMBRE$PROPIO/.netscape
chgrpR201$PROPIO/.netscape
fi
done

3. a) Construir un script conec.cmd para establecer conexin discada a una red de datos. Se
dispone de los siguientes scripts:
urugnet.dip para conectar a UruguayNet;
urupac.dip para conectar a URUPAC;
iie.dip para acceder al Instituto de Ingeniera Elctrica;
adinet.dip para conectar a Adinet.
Estos scripts se invocan con el comando dip; por ejemplo:
dip urugnet.dip
El script recibir uno de los nombres (urugnet, urupac, iie, adinet) e invocara el script
correspondiente al discado. Por ejemplo,
conec urupac
invocar el script de conexin a URUPAC.
b) Agregar al script un control de xito, mostrando un mensaje "Conexin establecida" o "No se
pudo establecer conexin". Cuando se ha establecido un enlace PPP, el comando
/sbin/ifconfig da una salida de varias lneas, una de las cuales contiene la cadena "ppp0". El
establecimiento de la conexin debe esperarse 40 segundos.
#!/bin/bash
#conec:discaproveedorparaenlacePPPpordip
#ajustarlosparmetrossiguientessegnserequiera
ESPERA=40#tiempodeesperaporconexin
#eleccindeproveedoraconectar
case$1in
urupac)
echoConectandoaURUPAC...
dipurupac.dip;;
adinet)
echoConectandoaAdinet...
dipadinet.dip;;
iie)
echoConectandoaIIE...
dipiie.dip;;
urugnet)
echoConectandoaUruguayNet...
dipurugnet.dip;;
*)
echodipconec:uso:
echo"dipconecurupac|adinet|iie|urugnet"
exit1;;
esac

#esperaporconexin
sleep$ESPERA
#detectaconexinporpresenciadeinterfazppp0
CONEC=`/sbin/ifconfig|grepppp0`
if[!z"$CONEC"]
then
echoe"\007"
echoConexinestablecida.
exit0
else
echoNosepudoestablecerconexin.
exit2
fi

Examen Febrero 1999.


Scripts.

1. Construir un script que


a) indique los nombres de los diferentes shells asignados a las cuentas de usuario en el archivo
/etc/passwd y la cantidad de cuentas de cada uno de esos shells;
b) muestre los nombres de cuentas sin shell asignado.

2. Construir un script que a partir de una lista de nombres de usuario contenida en el archivo
alumnos.txt, uno por lnea, determine si el usuario existe o no. El script emitir un listado con
los usuarios que figuren en el archivo alumnos.txt pero no existan en el sistema.
Ayuda: el comando id usuario devuelve cdigo de retorno 1 cuando el usuario no existe, 0 si
existe. Redireccionar las salidas de id para no confundir el despliegue.

3. Un administrador de sistema quiere saber si hay accesos a su servidor Web desde mquinas
desconocidas. Para ello dispone de un archivo de log accesos.log cuyo primer campo, separado
por blancos, es el nombre de una mquina o su nmero IP, indistintamente; luego otros dos campos,
luego fecha y pgina solicitada. La lista de mquinas de su propio dominio se encuentran en el
archivo /etc/hosts. Escribir un script que muestre los nombres o nmeros IP de mquinas que
accedieron el Web y la fecha, omitiendo las mquinas del propio dominio. Recordar que el archivo
/etc/hosts puede tener comentarios, y que accesos.log tiene varios campos.

Examen Febrero 1999.


Solucin de Scripts.

1. Construir un script que


a) indique los nombres de los diferentes shells asignados a las cuentas de usuario en el archivo
/etc/passwd y la cantidad de cuentas de cada uno de esos shells;
b) muestre los nombres de cuentas sin shell asignado.
# prob1.cmd: shells de usuarios, cantidad de usuarios por shell
#
echo; echo
echo Examen Feb. 1999
echo
echo "Shells y cantidad de usuarios:"
cat /etc/passwd | cut -d: -f7 | sort | uniq -c
echo
echo "Usuarios que no tienen shell asignado:"
cat /etc/passwd | grep ".*:.*:.*:.*:.*:.*:$" | cut -f1 -d:
echo

2. Construir un script que a partir de una lista de nombres de usuario contenida en el archivo
alumnos.txt, uno por lnea, determine si el usuario existe o no. El script emitir un listado con
los usuarios que figuren en el archivo alumnos.txt pero no existan en el sistema.

Ayuda: el comando id usuario devuelve cdigo de retorno 1 cuando el usuario no existe, 0 si


existe. Redireccionar las salidas de id para no confundir el despliegue.
# prob2.cmd: verificar si nombres de una lista son usuarios del
sistema
#
clear
echo "Alumnos que no existen en el sistema:"
LISTA=`cat alumnos.txt`
for I in $LISTA
do
id $I 1>/dev/null 2>&1
if [ $? -ne 0 ]
then
echo $I
fi
done

3. Un administrador de sistema quiere saber si hay accesos a su servidor Web desde mquinas
desconocidas. Para ello dispone de un archivo de log accesos.log cuyo primer campo, separado
por blancos, es el nombre de una mquina o su nmero IP, indistintamente; luego otros dos campos,
luego fecha y pgina solicitada. La lista de mquinas de su propio dominio se encuentran en el
archivo /etc/hosts. Escribir un script que muestre los nombres o nmeros IP de mquinas que
accedieron el Web y la fecha, omitiendo las mquinas del propio dominio. Recordar que el archivo
/etc/hosts puede tener comentarios, y que accesos.log tiene varios campos.
# prob3.cmd: extraer de una lista de accesos los nombres de
mquinas
# que no figuren en /etc/hosts
#
clear
echo "Accesos desde mquinas ajenas:"
LISTA=`cat accesos.log | cut -f1 -d" "`
for I in $LISTA
do
MAQUINA=`cat /etc/hosts | grep -v "#" | grep $I`
if [ -z "$MAQUINA" ]
then
cat accesos.log | grep $I | cut -d" " -f1,4,5,6
fi
done

Pruebaparcial2/2.
Nombre: ______________________________________ Nota: ___________
Con libre consulta de material.
Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
Estructura del archivo /etc/hosts:
#nmero_IP nombre_mquina alias
10.137.137.250
liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (lneas comenzadas por #).
En los sistemas con NIS, para passwd y group usar el comanto ypcat en lugar de cat para listar
estos archivos, o el comando ypmatch para extraer una lnea sola de alguno de ellos. Ejemplos:
ypcat passwd
ypcat group
ypmatch jperez passwd

1. Escribir un script admaq para agregar una mquina al archivo /etc/hosts. Solicitar al
usuario un nmero IP y luego un nombre de mquina. El ingreso del nombre de mquina se
reiterar hasta que el usuario ingrese un nombre de mquina vaco (tecla Enter sin escribir nada). El
script armar la lnea en el formato del archivo hosts y la presentar al usuario pidiendo
confirmacin. Si la obtiene, adjuntar la lnea al final del archivo /etc/hosts. (15 puntos)

2. Escribir un script sumadora para hacer sumas y restas de enteros. Presentar al usuario una
interfaz similar a sta:
SUMADORA: suma y resta enteros.
Los smbolos aceptados son: + y Debe haber espacio entre todos los operandos y operadores.
Ejemplo: 5 + 3 - 20 + 35
Ingrese operaciones:
3 * 2 + 10
Resultado:
16
Si la expresin ingresada es correcta, el script realizar el clculo y presentar el resultado; si no lo
es, emitir en lugar del resultado el mensaje "Expresin incorrecta. Debe comenzar de nuevo" y
saldr.
Qu dificultas se presentara al inclur otras operaciones?
Sugerencia: para controlar la validez de la expresin, capturar el valor de retorno del comando que
realiza la operacin. (10 puntos)

3. Un administrador de una mquina UNIX debe revisar da a da si hay conexin hacia todas las
mquinas contenidas en el archivo /etc/hosts. Para ello dispone del comando
ping -c1 <nombre de la mquina destino>

Como ejemplo, el comando


ping -c1 nutria
enva y recibe un paquete hacia la mquina nutria. El valor de retorno del comando ping es el
siguiente:
0 La mquina destino est viva, contesta normalmente.
1 La mquina destino no contesta.
2 Hubo algn error.
Construir un script vivas que pruebe conectividad a todas las mquinas contenidas en el archivo
/etc/hosts, y muestre el nombre de las mquinas indicando su estado, as:
RESPUESTA de mquinas en /etc/hosts:
nutria: est viva.
gaviota: no contesta.
coati: error en ping
Sugerencias. Recordar que el archivo /etc/hosts puede tener comentarios. Redireccionar salida y
error de ping para no confundir la salida del script. (15 puntos)

4. El comando df muestra el espacio disponible en los sistemas de archivos montados. Su salida


tiene esta forma:
Filesystem 1024-blocks
Used Available Capacity Mounted on
/dev/hda2
1484386 433463
974213
31%
/
/dev/hda1
1228736 524576
704160
31%
/dosc
/dev/hda3
68263
63484
4779
93%
/tmp
Los campos estn separados por espacios. El campo Capacity indica el porcentaje ocupado. Escribir
un script espacio que invoque el comando df y muestre en su salida el nombre del sistema de
archivo y su capacidad ocupada para los sistemas de archivos con 90% o ms espacio ocupado. (10
puntos)

Pruebaparcial2/2.
Solucin de Scripts
Con libre consulta de material.
Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
Estructura del archivo /etc/hosts:
#nmero_IP nombre_mquina alias
10.137.137.250
liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (lneas comenzadas por #).
En los sistemas con NIS, para passwd y group usar el comanto ypcat en lugar de cat para listar
estos archivos, o el comando ypmatch para extraer una lnea sola de alguno de ellos. Ejemplos:
ypcat passwd
ypcat group
ypmatch jperez passwd

1. Escribir un script admaq para agregar una mquina al archivo /etc/hosts. Solicitar al
usuario un nmero IP y luego un nombre de mquina. El ingreso del nombre de mquina se
reiterar hasta que el usuario ingrese un nombre de mquina vaco (tecla Enter sin escribir nada). El
script armar la lnea en el formato del archivo hosts y la presentar al usuario pidiendo
confirmacin. Si la obtiene, adjuntar la lnea al final del archivo /etc/hosts.
#!/bin/bash
#
# admaq: agrega mquina al archivo /etc/hosts
#
echo
echo "AGREGAR MAQUINA."
echo -n "Nombre de mquina: "
read NVAMAQ
while [ $NVAMAQ ]
do
echo -n "Numero IP: "
read NROIP
LINEA="$NROIP $NVAMAQ"
echo Se agregar la siguiente lnea:
echo $LINEA
echo -n "Est de acuerdo?(sN): "
read RESP
if [ $RESP = "s" -o $RESP = "S" ]
then
echo -n Agregando nueva mquina...
echo $LINEA >> hosts
echo hecho.
else
echo No se agreg esta mquina.
fi
clear
echo AGREGAR MAQUINA.
echo -n "Nombre de mquina: "
read NVAMAQ
done

2. Escribir un script sumadora para hacer sumas y restas de enteros. Presentar al usuario una
interfaz similar a sta:
SUMADORA: suma y resta enteros.
Los smbolos aceptados son: + y Debe haber espacio entre todos los operandos y operadores.
Ejemplo: 5 + 3 - 20 + 35
Ingrese operaciones:
3 * 2 + 10
Resultado:
16

Si la expresin ingresada es correcta, el script realizar el clculo y presentar el resultado; si no lo


es, emitir en lugar del resultado el mensaje "Expresin incorrecta. Debe comenzar de nuevo" y
saldr.
Qu dificultas se presentara al inclur otras operaciones?
Sugerencia: para controlar la validez de la expresin, capturar el valor de retorno del comando que
realiza la operacin.
#!/bin/bash
#
# sumadora: interfaz para suma y resta
#
clear
echo
echo "SUMADORA: suma y resta enteros."
echo "Los smbolos aceptados son + y -"
echo "Debe dejar espacio entre operandos y operadores."
echo "Ejemplo: 5 + 3 - 20 + 13"
echo "Ingrese operaciones:"
read CALCULO
echo Resultado:
RESULTADO=`expr $CALCULO 2>/dev/null`
if [ $? != "0" ]
then
echo "Expresin incorrecta. Debe comenzar de nuevo."
else
echo $RESULTADO
fi

3. Un administrador de una mquina UNIX debe revisar da a da si hay conexin hacia todas las
mquinas contenidas en el archivo /etc/hosts. Para ello dispone del comando
ping -c1 <nombre de la mquina destino>
Como ejemplo, el comando
ping -c1 nutria
enva y recibe un paquete hacia la mquina nutria. El valor de retorno del comando ping es el
siguiente:
0 La mquina destino est viva, contesta normalmente.
1 La mquina destino no contesta.
2 Hubo algn error.
Construir un script vivas que pruebe conectividad a todas las mquinas contenidas en el archivo
/etc/hosts, y muestre el nombre de las mquinas indicando su estado, as:
RESPUESTA de mquinas en /etc/hosts:
nutria: est viva.
gaviota: no contesta.
coati: error en ping
Sugerencias. Recordar que el archivo /etc/hosts puede tener comentarios. Redireccionar salida y
error de ping para no confundir la salida del script.
#!/bin/bash
#
# vivas: verifica si las mquinas estn vivas
#

clear
echo
echo "RESPUESTA de mquinas en /etc/hosts:"
LISTA=`cat hosts | grep -v "#" | cut -f2 `
for MAQ in $LISTA
do
ping -c1 $MAQ >>/dev/null 2>&1
case $? in
0)
echo $MAQ: est viva;;
1)
echo $MAQ: no contesta;;
2)
echo $MAQ: error en ping;;
esac
done

4. El comando df muestra el espacio disponible en los sistemas de archivos montados. Su salida


tiene esta forma:
Filesystem 1024-blocks
Used Available Capacity Mounted on
/dev/hda2
1484386 433463
974213
31%
/
/dev/hda1
1228736 524576
704160
31%
/dosc
/dev/hda3
68263
63484
4779
93%
/tmp
Los campos estn separados por espacios. El campo Capacity indica el porcentaje ocupado. Escribir
un script espacio que invoque el comando df y muestre en su salida el nombre del sistema de
archivo y su capacidad ocupada para los sistemas de archivos con 90% o ms espacio ocupado.
#!/bin/bash
# espacio: muestra sistemas de archivo con 90% o ms de ocupacin.
df | tr -s " " | cut -f1,5 -d" " | grep 9[0-9]%

S-ar putea să vă placă și