You are on page 1of 70

Conceptos de Sistemas Operativos

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.

Introduccin a UNIX
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.
Tutorial
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.
Ficha referencia: Tutorial

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 hiperteto! la informacin se organi"a en #nodos# hacia los
cuales es posible despla"arse. Un nodo es el teto $ue describe una unidad
temtica. %os nodos se organi"an &err$uicamente. 'l encabe"ado de cada
nodo muestra el archi(o donde se encuentra la informacin, el nombre del
nodo actual, el nodo siguiente en la organi"acin temtica, el nombre del
nodo pre(io en la organi"acin temtica, y el nodo superior en la &erar$u)a de
informacin.
'l 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, Node: Top, Next: What is Info, Up: (dir)The
GNU Info Program
********************
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:: Options you can pass on the command
line.
* Cursor Commands:: Commands which move the cursor within
a node.
* Scrolling Commands:: 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 Descripcin ttulo item 1
* Item2: Ttulo-item2 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 invoca tutorial de info
? lista de comandos de info, l para salir
Ctrl-g aborta lo que se est haciendo
Ctrl-L refresco de pantalla
ESPACIO avanzar en el texto
BS o Del retroceder en el texto
b comienzo del nodo
n nodo siguiente en la ordenacin temtica
p nodo previo en la ordenacin temtica
m elegir item de men, ir hacia ese nodo
f seguir una referencia cruzada
u a nodo superior
l nodo anterior visitado (last)
d a nodo directorio
q salir de info
1..5 elegir item 1 .. 5 del men de nodo
g mover a un nodo indicando su nombre;
puede darse el nombre de archivo, as
(nombre-archivo)nombre-nodo
s buscar una cadena de caracteres, elegir el nodo
de la siguiente ocurrencia
Introduccin al "shell"

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.
*on el comando cat puede crearse un archi(o aceptando el teclado como
entrada estndar y direccionando la salida estndar hacia un archi(o+
cat >nota
digitar las siguientes l)neas, tal cual estn, terminando cada l)nea dando
,'nter-! finali"ar con ,*trl./-. /igitar con cuidado+ una (e" pasados al
rengln siguiente, no puede (ol(erse 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.

/igitar ,*trl./- para finali"ar el ingreso.
cat nota
muestra el contenido digitado.

*rear del mismo modo el archi(o %'01', 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 (erificar el contenido.
Comandos en el sistema UNIX.
'n UNIX, los comandos son programas e&ecutables separados. 'l shell es un
int2rprete de comandos+ puede epandir y cambiar la manera en $ue act3an
los comandos, admite el uso de comodines y la interconein o
entubamiento de comandos.
Estructura de comandos.
%a estructura general de un comando es la siguiente+
nombre opciones argumentos
nombre es el nombre del comando. %as opciones o banderas controlan la
forma en $ue act3a el comando! (an precedidas por el signo - 4menos5.
%osargumentos son com3nmente nombres de archi(os o nombres de login de
usuarios.

pr -l23 nota
pr -l23 LEAME
da formato y muestra el archi(o indicado en pginas de 67 l)neas de largo
para $ue $uepa en la pantalla.
pr -d -l23 LEAME
muestra el archi(o LEAME a doble espacio, largo de pgina 67.
pr -d -o15 -l23 LEAME
doble espacio, margen i"$uierdo de 89 espacios, largo de pgina 67.
pr -l23 nota LEAME | more
muestra los dos archi(os uno tras otro, pero los pagina separados.
cat nota LEAME
concatena los archi(os! los presenta uno tras otro.
cat nota LEAME | pr -l23
concatena los archi(os y luego les da formato a los dos &untos.
Expansiones de la lnea de comando.
%os comodines son caracteres $ue 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.
%as (ariables de ambiente son cadenas de caracteres de la forma
nombre=valor
nombre es cual$uier cadena de caracteres $ue no incluya : ni espacio
4;b5! valor es cual$uier cadena! puede incluir el espacio si el (alor est entre
comillas.

MUESTRA="hola chicos"
asigna "hola chicos" a la (ariable MUESTRA.
echo $MUESTRA
muestra en pantalla el contenido de la (ariable MUESTRA. Para ehibir el
contenido de una (ariable de ambiente se escribe echo $nombre-variable. 'n
general, para hacer uso del contenido de una (ariable, se escribe $nombre-
variable.

's una costumbre muy arraigada en UNIX usar may3sculas para los nombres
de (ariable, as) como es una regla usar min3sculas para los comandos. %as
opciones pueden ser may3sculas y min3sculas! la opcin .a no es lo mismo
$ue .0.

%as (ariables de ambiente pueden ser usadas como nombres de comando o
como argumentos de un comando.
XYZ="cat nota"
$XYZ
la (ariable X<= contiene un comando, y al ser in(ocado su contenido, el
comando es e&ecutado.

echo hola $MUESTRA chicos
la (ariable puede usarse en la formacin de cadenas.
echo hola${MUESTRA}chicos
la (ariable puede embeberse en una cadena! las lla(es delimitan el nombre
de la (ariable.
env
muestra las (ariables de ambiente definidas. 1uchas son fi&adas en el ingreso
del usuario al sistema 4(ariables de login5! y otras son propias del shell
4(ariables del shell5.
echo $LOGNAME
muestra el nombre de login del usuario.
echo $HOSTNAME
muestra el nombre de la m$uina.
echo $NOEXISTE
%as (ariables no definidas no muestran nada cuando son referenciadas.
Entrecomillado de argumentos en la lnea de comandos.
%os espacios separan argumentos. 'l entrecomillado obliga a tratar una
cadena con espacios como si fuera un solo argumento. *uando se usan
comillas dobles 4# #5 el shell interpreta las (ariables de ambiente inclu)das,
actuando seg3n 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

%as comillas simples permiten usar comillas dobles+
echo '"hola chicos"'
PS1.
0un$ue generalmente los omitimos, en los e&emplos de esta seccin
mostraremos el indicador de comandos y la salida de e&ecucin.
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 nue(o indicador de comandos! el sistema responde con el nue(o
indicador de comandos, hola+.
hola: MUESTRA="ingrese comando:"
hola: PS1=$MUESTRA
ingrese comando: MUESTRA=hola
ingrese comando: echo $MUESTRA
hola
ingrese comando:
la (ariable 1U'S>?0 cambi pero el indicador no cambi!
ingrese comando: PS1='$'
$
repone el indicador de comandos.
Entrada estndar y salida estndar.
%os comandos leen como entrada una secuencia de caracteres 4flu&o de
entrada o #input stream#5, y escriben a la salida otra secuencia de caracteres
4flu&o de salida o #output stream#5. 'stas secuencias no tienen estructura
interna alguna, y se les llama entrada estndar y salida estndar.
cat nota > nota2
redirige la salida estndar a un archi(o $ue crea o sobreescribe, en (e" de a
la pantalla.
mail juan < nota
toma la entrada estndar de un archi(o en (e" del teclado.
pr < nota > nueva.nota
el archi(o nota es la entrada, el archi(o nue(a.nota es la salida.
cat nueva.nota
muestra el archi(o donde se grab la salida con formato.

%os s)mbolos , 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

%os comandos y los archi(os tienen una estructura orientada a caracter. 'n
muchos comandos se puede intercambiar teclado por archi(os o dispositi(os
de hard@are.

cat nota
cat < nota
son comandos e$ui(alentes por$ue cat opera sobre un archi(o y tambi2n
sobre la entrada estndar.
cat nota LEAME nueva.nota
cat nota - nueva.nota < LEAME
son comandos e$ui(alentes. 'l signo menos 4.5 aislado e$ui(ale a tomar en
ese punto la entrada estndar, $ue usualmente est asignada al teclado.
Fin de flujo.
'l ingreso de datos desde el teclado, as) como el despliegue en pantalla, se
mane&an en UNIX como #flu&os de caracteres#, una serie de caracteres uno
tras otro. Para indicar en el teclado el fin de un flu&o de caracteres se usa *trl.
/. 'ste s)mbolo no forma parte del ingreso! simplemente indica el final del
ingreso, $ue ya no se escribir ms. 'n UNIX no hay un caracter especial para
indicar fin de archi(o! el sistema sabe cuando termina un archi(o por medio
de contadores.

cat nota - nueva.nota > arch.salida
procesa el archi(o nota, lee lo $ue se digite en el teclado hasta recibir un
*trl./, procesa nue(a.copia y escribe todo en el archi(o arch.salida! se
re3nen tres fuentes distintas en una 3nica 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 (eces. Se logra lo mismo con
cat nota > dup.nota
cat nota >> dup.nota
'l s)mbolo -- redirige la salida estndar a un archi(o, pero agregando al final
del mismo en lugar de reempla"ar su contenido.
Error estndar.
0dems de los flu&os de entrada y salida estndar, eiste un tercer flu&o de
caracteres, el error estndar, hacia donde se dirigen los mensa&es de error. 'l
error estndar est dirigido habitualmente a la pantalla, pero mediante 6- o
6-- se redirige el error estndar hacia un archi(o de errores. %os flu&os
estndar se reconocen por los siguientes n3meros+
0 la entrada estndar, usualmente el teclado;
1 la salida estndar, usualmente la pantalla;
2 el error estndar, usualmente la pantalla.

echo Archivo de errores > salida.error
cat noexiste 2>>salida.error
cat salida.error
el archi(o salida.error contiene el mensa&e inicial y el de error.
ls noexiste 2>>salida.error
rm noexiste 2>>salida.error
cat salida.error
re3ne los mensa&es de error en el archi(o salida.error .
Interconexin de comandos (entubamiento).
'l operador A hace $ue la salida del comando precedente sea la entrada del
comando siguiente, creando un entubamiento o interconein de
comandos.

cat nota LEAME | pr > salida
hace $ue la concatenacion de los archi(os nota y %'01' sea ser(ida al
comando pr, cuya salida est redirigida a un archi(o.
cat - LEAME < nota | pr > salida
tiene el mismo efecto. Notar la posicion de redireccion ,.

%os operadores , y - redirigen, A conecta comandos.
Filtros.
1uchos comandos estn pensados para ser interconectados, pasando
simplemente la entrada hacia la salida, por lo $ue se les llama habitualmente
filtros.
echo 'hola chicos' | tr l p
tr traduce caracteres y produce Bhopa chicosB.
echo 'hola chicos' | tr lo pa
produce Bhapa chicasB.
Campos y delimitadores.
Un campo es una cadena de caracteres separada por un caracter delimitador.
'l archi(o CetcCpass@d tiene en cada l)nea una serie de campos separados
por dos puntos 4+5 .
more /etc/passwd
muestra el contenido de CetcCpass@d.
cut -f1 -d: < /etc/passwd
cut -f1,3,5 -d: < /etc/passwd
muestra los campos pedidos usando el delimitador + 4dos puntos5.
cut -c1-8 < /etc/passwd
muestra columnas 8 a D.
ls -l | cut -c56-
corta el listado de archi(os desde donde empie"a el nombre al final.
sort < /etc/passwd | cut -f1 -d: | more
ordena las l)neas, corta el primer campo y presenta los nombres de usuarios
habilitados en el sistema.
env | cut -f1 -d= | sort
muestra nombres de (ariables de ambiente ordenadas! el separador es E.
Valores de retorno de los comandos.
%os comandos de(uel(en un cdigo de retorno F si el comando termina
correctamente, o un n3mero entre 8 y 699 seg3n la ra"n de falla. 'l cdigo
de retorno del 3ltimo comando $ueda en una (ariable llamada BGB, $ue se
interroga como :G.
cat noexiste
ERROR=$?
echo $?
echo $ERROR
guarda el cdigo de error! la asignacin termina bien, por lo $ue en :G $ueda
F, pero en ERROR $ued el n3mero de error de la operacin fallida. :G es una
B(ariable de shellB mantenida internamente por el propio int2rprete. Htras
(ariables de shell son+

# nmero de argumentos en el comando para la shell actual
$ nmero de proceso para el shell actual

'stas (ariables se interrogan como $# y $$.
El operador grave.
'l acento gra(e 4`5 asigna a una (ariable de ambiente la salida estndar de un
comando. 'l largo de la (ariable es limitado, pero usualmente - 986F en
SI?J.
MUESTRA=`echo $LOGNAME`
echo $MUESTRA
escribe el nombre de login del usuario.
wc /etc/passw
cuenta l)neas, palabras y caracteres.

'l comando wc 4@ord count5 acepta opciones .l para l)neas, .@ para palabras
y .c para caracteres.
TOTALPALABRAS=`cat * | wc -w`
echo $TOTALPALABRAS
cuenta las palabras en todos los archi(os del directorio. >ambi2n
echo `cat * | wc -w`
echo Total de palabras en el directorio: `cat * | wc -w`

'l acento gra(e permite e&ecutar un comando dentro de otro, encerrando el
comando anidado entre acentos gra(es.
Secuencias de comandos.
'l shell es tambi2n un lengua&e de programacin. Pueden escribirse (arios
comandos en una misma l)nea separndolos con ! 4punto y coma5.
date ; echo Hola ; echo $LOGNAME
MUESTRA=`date ; echo Hola ; echo $LOGNAME`;echo $MUESTRA
Redireccin del shell.
'l shell $ue atiende los comandos del usuario es el login shell! arranca
cuando el usuario ingresa al sistema y termina cuando sale. 'scribir sh como
comando in(oca una segunda instancia del shell, $ue puede terminarse con
el comando exit o con ,*trl./-.

Puede crearse un archi(o de comandos haciendo
cat > datos.usuario
y escribiendo las siguientes l)neas. Pueden omitirse los comentarios 4de K en
adelante5
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
finali"ar con ,*trl./-. %os K indican comentario.
Para con(ertir el archi(o en e&ecutable para el usuario, hacer
chmod u+x datos.usuario
Ierificar con ls -l. %os comandos ingresados en el archi(o pueden
e&ecutarse con
sh datos.usuario
'ste comando in(oca una nue(a instancia de shell $ue no es la del ingreso al
sistema.

0gregar una l)nea ms haciendo
cat datos.usuario - >> masdatos.usuario
y escribiendo
cat noexiste # intenta mostrar un archivo inexistente
Linali"ar con ,*trl./-.

echo "Archivo de errores del usuario" > errores.usuario
coloca una l)nea descripti(a en el archi(o errores.usuario.
cat errores.usuario
(erifica su contenido.

sh <masdatos.usuario >salida.usuario 2>>errores.usuario
lee los comandos del archi(o masdatos.usuario en la entrada estndar,
redirige la salida estndar al archi(o salida.usuario y redirige la salida del
error estndar al archi(o errores.usuario.
cat salida.usuario
cat errores.usuario
Fin.
Morrar con el comando rm los archi(os auiliares! conser(ar para referencia
los archi(os nota, LEAME, datos.usuario , masdatos.usuario y e(entualmente
otros $ue le interesen.
Preguntas y Ejercicios.
Ficha Referencia: Introduccin al Shell

UNIX y
'l sistema operati(o UNIX suele (enir acompaNado de un compilador para
lengua&e *. 'scribiendo programas en lengua&e * es posible crear comandos
indistinguibles de los propios de UNIX. *omo e&emplo, puede crearse el
siguiente archi(o, usando un editor de teto sencillo como el ae, o el
comando cat si se tiene f2 en la propia digitacin.

*ontenido del archi(o hola.c+

/* hola.c: programa de saludo */

#include <stdio.h>
main()
{
printf("Hola, mundo\n");
}

*ompilar el contenido de este archi(o con el comando
cc hola.c -o hola
'sto crea el archi(o de salida hola, e&ecutable en UNIX mediante el comando
./hola
Imprime, como es de suponer, la frase #Oola mundo#.
Un e&emplo ms interesante, con uso de llamadas a la biblioteca del sistema,
es el e&emplo siguiente, una (ersin muy m)nima del comando cat, $ue
llamaremoscati.

*ontenido del archi(o cati.c+


/* cati: cat versin mnima */
# define LARGO 1024 /* define valor de variable LARGO */
main()
{
char bufer[LARGO]; /* declara un arreglo de caracteres */
int n; /* 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 */
}

%os etensos comentarios eplican el funcionamiento. *ompilar este
programa con el comando
cc cati.c -o cati
'sto crea el archi(o de salida cati, e&ecutable en UNIX. 'l comando
./cati <hola.c
muestra el contenido del programa hola.c. 'sta (ersin m)nima slo funciona
redireccionando la entrada estndar. Puede probarse su funcionamiento
ingresando datos desde el teclado, finali"ando con *trl./. 'l programa puede
interrumpirse con *trl.*. PQu2 diferencia hayG
's un problema de programacin algo ms comple&o asimilar un nombre de
archi(o como parmetro y hacer $ue el programa despliegue el contenido de
este archi(o.

%a ra"n por la $ue estos programa se in(ocan como ./hola y no
simplemente hola es $ue el directorio actual no est habitualmente en la ()a
de b3s$ueda de e&ecutables 4(ariable P0>O5. *olocando las (ersiones
e&ecutables de los programas hola o cati en un directorio como /bin los har)a
e&ecutables directamente como cual$uier comando de UNIX.
'stos e&emplos muestran la (ersatilidad de UNIX como sistema operati(o+
puede uno ampliarlo con comandos constru)dos por uno mismo $ue se
integran perfectamente a los comandos propios del sistema. 'n las
distribuciones de UNIX de dominio p3blico suelen (enir los fuentes en * de
todos los comandos, lo cual permite, al usuario con conocimento suficiente,
modificar o corregir estos programas.
Sistema de Archivos
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.
*ada archi(o tiene asociado un nombre, un contenido, un lugar de ubicacin
e informacin de tipo administrati(o, tal como dueNo y tamaNo. 'l contenido
de un archi(o puede ser teto, programas fuente, programas e&ecutables,
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.
%os archi(os se agrupan en directorios. Un directorio es un archi(o $ue
contiene una lista de nombres de archi(o e informacin acerca de los
mismos. /entro del sistema de archi(os, un directorio es una locali"acin
capa" de contener otros directorios o archi(os. /os archi(os $ue se
encuentren en distinto directorio pueden tener el mismo nombre sin
confundirse.
'l comando ls permite listar el contenido de un directorio+
ls /var
el argumento es un directorio! la salida son los nombres de archi(os y
subdirectorios en ese directorio.
ls nota
el argumento es un archi(o, la salida es el nombre del archi(o.
ls -l /var
muestra los archi(os y subdirectorios contenidos en /var en formato largo.
ls -ld /var
muestra caracter)sticas del directorio /var en lugar de los archi(os y
subdirectorios contenidos en 2l.
Nombres de archivos.
Para el nombre de archi(o se puede usar prcticamente cual$uier caracter,
incluso caracteres no (isibles. %os caracteres $ ; \ & ! * | causan confusin
y no con(iene usarlos. Se aconse&a usar solamente letras, n3meros, punto,
guin y subraya. UNIX diferencia may3sculas y min3sculas+ el
archi(o NOTA.TXT es distinto del archi(o nota.txt y tambi2n de Nota.txt. No
se distingue entre nombre de archi(o y etensin+ nota.nueva.txt es un
nombre de archi(o (lido, yLCK..modem tambi2n.
Un archi(o $ue comien"a por un punto no es (isible+
touch .noseve
ls
ls -a
ls no lo muestra, pero s) ls -a.
rm .noseve
lo borra como a cual$uier archi(o.
Directorio propio. Directorio actual.
0l ingresar al sistema cada usuario entra en su directorio propio, un
directorio pri(ado $ue no es tocado por el sistema ni por los otros usuarios.
'l 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 CusrCbin! el directorio actual es CusrCbin.
cd
pwd
de(uel(e al usuario a su directorio propio, $ue es ahora el directorio actual.
echo $HOME
nuestra el nombre del directorio propio. OH1' es una (ariable de ambiente
$ue contiene el nombre del directorio propio del usuario.
cd $HOME
tiene el mismo efecto $ue cd.
Nombres de directorios.
Un directorio puede contener otros directorios as) como archi(os ordinarios,
lo $ue genera una &erar$u)a o rbol de directorios. 'l directorio superior o
directorio ra)" se denomina C.
cd /
pwd
el directorio actual es el directorio ra)".
cd
(uel(e al directorio propio del usuario.

'l caracter C se usa tambi2n para separar los componentes de un nombre de
archi(o completo+ /export/home/usuario1/nota.
%a porcin /export/home/usuario es la ruta, nota es el nombre del archi(o. Si
se omite la ruta, se asume $ue el archi(o se encuentra en el directorio actual.
Un nombre tal como
textos/libro/capitulo.1 indica $ue su ruta comien"a a partir del directorio
actual. Ser)a lo mismo escribir ./textos/libro/capitulo.1 ya $ue el punto
designa el directorio actual. /os puntos seguidos designan el directorio de
ni(el superior al actual. Si el directorio actual es /home/usuario1
ls ../usuario2
muestra el contenido de los archi(os en /home/usuario2

'l caracter C separa directorios inclu)dos como parte de un nombre de
archi(o o directorio.
ls dir1
es un direccionamiento relati(o!
ls /home/esteban/dir1
es un direccionamiento absoluto.

Pueden usarse comodines para referenciar directorios y archi(os+
cat /home/esteban/*/*
Cambios en la jerarqua de directorios.
mkdir nuevo.dir
crea un nue(o directorio.
rmdir nuevo.dir
borra un directorio eistente! act3a slo sobre directorios (ac)os.
mkdir dir1
mkdir dir1/dir2
touch dir1/dir2/arch2 dir1/arch1
ls -lR
muestra todos los archi(os y directorios creados!
rm -r dir1
borra el directorio y todos los archi(os y subdirectorios $ue pueda contener.
Estructura interna de los archivos.
Un archi(o es una secuencia de bytes. Un byte es e$ui(alente a un caracter.
'l sistema no impone estructura alguna a los archi(os ni asigna significado a
su contenido! el significado de los bytes depende totalmente de los
programas $ue interpretan el archi(o.
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.
*ada usuario es dueNo de los archi(os creados por 2l, hasta $ue los borre o
los ceda a otro usuario. *ada usuario pertenece a un grupo, y puede
compartir archi(os con los usuarios de ese grupo. *ada archi(o est asignado
a un grupo de usuarios, al cual debe pertenecer su dueNo. 'l comando ls -
l muestra dueNo y grupo de los archi(os listados.
Tipo y permisos de archivos.
*ada archi(o tienen un con&unto de permisos asociados con 2l $ue
determinan $u2 puede hacerse con el archi(o y $ui2n puede hacerlo.
%os permisos de un archi(o se indican con 8F caracteres+
8 caracter para tipo de archi(o,
7 caracteres Rr@S para permisos del dueNo,
7 caracteres Rr@S para permisos del grupo,
7 caracteres Rr@S para permisos de otros.
*aracter para tipo de archi(o+
d directorio
l enlace simblico
- archi(o normal
b archi(o controlador de dispositi(o orientado a blo$ues
c archi(o control de dispositi(o orientado a caracteres
*aracteres de permisos+
r acceso de lectura 4read5
w acceso de escritura 4@rite5
x acceso de e&ecucin 4eecute5
cuyo significado (ar)a seg3n se trate de archi(os o directorios+

Permiso Archivos Directorios
r leer archi(os (er contenido de directorios
@ grabar en un archi(o crear y borrar archi(os
e&ecutar 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.
'&emplos de permisos de archi(o+
rwxr--r--
rw-rw-r--
rw-------
El sistema de archivos en UNIX.
Un sistema de archi(os en UNIX puede contener miles de archi(os, cientos de
directorios y cientos de enlaces simblicos, dependiendo de la distribucin y
de lo $ue se haya instalado. *omo referencia, la distribucin /ebianCGNU 6.8
(iene con cerca de 69FF pa$uetes para instalar. Una instalacin normal
puede insumir un 69T en herramientas de administracin, y un 8F T en
herramientas de desarrollo. Morrar, alterar o cambiar permisos de archi(os
puede conducir a resultados impredecibles.
$ ls -F /
es 3til para recorrer el sistema de archi(os, ba&ando luego a los
subdirectorios.
%os re$uerimientos de las redes cambiaron la organi"acin funcional del
sistema de archi(os. 'n un lugar grande, la red se configura con un con&unto
de m$uinas heterog2neas, cada una responsable del mantenimento y uso
de cada archi(o. %os archi(os pueden ser espec)ficos para cierta m$uina,
compartidos por (arias m$uinas del mismo tipo, o accesibles a casi
cual$uier tipo de m$uina en la red. 'nlaces simblicos hacia la anterior
locali"acin de los archi(os 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 tra(2s de un enlace simblico.
Convenciones en nombres de archivos y directorios.
/bin archivos ejecutables, comandos de usuario
/boot archivos de arranque
/cdrom punto de montaje para la uniad de CD-ROM
/dev archivos especiales de dispositivos
[subdirectorios propios de System V]
./dsk dispositivos de disco
./fd dispositivos descriptores de archivo
./kd dispositivos de teclado y despliegue
./kmem memoria
./null dispositivo para descarte de salidas
./osm mensajes de error del ncleo
./pts pseudo ttys; igual que /dev/pts*
./rdsk dispositivos crudos de disco
./term terminales; igual que /dev/tty*
./xt pseudo ttys; para capas DMD
/dosc punto de montaje para la particin DOS
/etc configuracin de paquetes, configuracin de sistema
./init.d scripts de arranque y detencin de programas
./rc?.d enlaces a scripts, con K o S (Kill o Start), y nmero
de
secuencia para controlar el arranque
./skel archivos de inicializacin para nuevos usuarios
/export directorios de usuarios en sistemas grandes
/floppy para montar una unidad de disquete
/home objetos relacionados con los usuarios
/lib bibliotecas de desarrollo y material de apoyo
/lost+found archivos perdidos
/mnt punto de montaje de dispositivos externos
/proc archivos de control de procesos
/root directorio propio para el supervisor (root)
/sbin archivos ejecutables de administracin
/tmp archivos temporales
/usr ejecutables, documentacin, referencia
./X11R6 sistema X-Windows
./bin ms ejecutables
./doc documentos de paquetes de software
./include encabezados .h de bibliotecas en C
./info archivos de info, informacin de UNIX (GNU)
./lib ms bibliotecas en C
./local ejecutables instalados por el administrador
./man subdirectorios de pginas del manual
./sbin ms archivos ejecutables de administracin
./share compartidos
./src (source) cdigo fuente del kernel
/var archivos de log, auxiliares, archivos que crecen
./backup respaldo de algunos archivos del sistema
./catman pginas man ya formateadas
./lib informacin propia de programas
./lock control de bloqueos
./log archivos de registro de mensajes (log) del sistema
./spool colas de impresin, intermedios de correo y
otros ./run informacin de procesos (PIDs)
Preguntas y Ejercicios.
Ficha Referencia: Siste!a de "rchi#os

Manejo de Archivos
'n los e&emplos siguientes se asume al usuario ubicado en su directorio
personal, el cual contiene los archi(os nota y LEAME. 'l resultado de cada
e&emplo debe comprobarse mediante comandos tales
como pwd,ls, cat o more.
Copia de archivos.
cp nota nota.copia
copia el archi(o 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 archi(o destino eiste lo sobreescribe
y reali"a la copia sin comentario ni ad(ertencia.

mkdir dir1
cp nota dir1
si el destino es un directorio, el archi(o se copia en ese directorio.

cp nota LEAME dir1
pueden copiarse (arios archi(os hacia un directorio.

mkdir dir2
touch dir2/arch2 dir2/arch3
ls dir2
cp dir2/* .
copia todos los archi(os en dir2 hacia el directorio actual.

Para copiar un directorio es preciso usar la opcin .r, de #recursi(o#+
cp -r dir1 dir3
ls -l dir3
copia el directorio dir1 y todo el contenido en el dir3.

rmdir dir3
fracasa por$ue dir3 no est (ac)o.
rm -r dir3
con la opcin -r, #recursi(o#, se puede borrar completamente un directorio y
todo su contenido, sean estos archi(os o subdirectorios.

rm -r dir1/* dir2
borra todos los archi(os ba&o dir1 y dir2! borra tambi2n el
directorio dir2 pero no el dir1.

rm arch? nota.copia
borra del directorio actual los archi(os 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 archi(o hola por el de saludo.

mv saludo dir1/saludo.1
mue(e hacia otro directorio cambiando el nombre.

mv dir1 dirnuevo
cambia de nombre archi(os o directorios.

rm -r dirnuevo
elimina dirnuevo y todos sus archi(os.
Enlaces "hard".
Un enlace #hard# 4hard linU5 es una nue(a referencia a un mismo archi(o!
consiste en una nue(a entrada de directorio $ue apunta a un archi(o ya
eistente y apuntado desde otra entrada de directorio. 'l contenido se
encuentra en un solo lado, pero el archi(o puede ser accedido desde (arios
lugares, e(entualmente con diferentes nombres.
echo 'Hola todos de nuevo!' > adios
ln adios adios.ln0
ln crea un segundo nombre referido al mismo archi(o! no se hace copia, crea
un enlace 4linU5. Ierificar $ue
ls -l adios*
muestra un conteo de 6 en la columna de enlaces. 0l crear el enlace con el
comando ln, obser(ar $ue el archi(o eistente (a 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 archi(os.

mkdir dir2
ln adios dir2/adios
hace aparecer en dir2 un enlace llamado adios hacia el archi(o adios del
directorio actual. Un enlace hard puede hacer aparecer un mismo archi(o 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
*uando se borra un archi(o con (arios enlaces, slo se borra el enlace. 'l
archi(o es realmente borrado slo cuando desaparece el 3ltimo enlace.
ln dir2 dir2ln
da error! no se puede crear un enlace hard para un directorio.
Enlaces simblicos.
Un enlace simblico 4symbolic linU5 es un archi(o $ue apunta a otro archi(o o
directorio. 'l archi(o de enlace simblico contiene solamente la ruta del otro
archi(o 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 archi(o para indicar $ue es un enlace
simblico.
ls dir2
ls dir2ls
muestran el mismo contenido de archi(os.
ls -l dir2ls
muestra $ue es un enlace simblico e indica hacia donde apunta.

cd dir2ls
ls -l
muestra el contenido de dir2, enla"ado desde dir2ls.
pwd
indica el directorio con nombre del enlace, pero
/bin/pwd
muestra el directorio (erdadero, no el enlace simblico! pwd indica la ruta por
la $ue se lleg al directorio, /bin/pwd indica la ruta de acceso al (erdadero
directorio. *on(iene usar /bin/pwd para e(itar ser engaNado por enlaces
simblicos a directorios. 'l 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 $ue
cd dir2ls
da error, ya $ue no eiste el ob&eto real.
mv DIR2 dir2
repone el nombre original al $ue apunta el enlace.
rmdir dir2ls
da error por$ue no es un directorio sino un enlace.
rm dir2ls
borra el enlace. Un enlace simblico se borra con rm, y no con rmdir, puesto
$ue el enlace simblico es un archi(o y no un directorio, a3n cuando sea un
enlace simblico hacia un directorio.
ls dir2
cuando se borra un enlace simblico, slo se borra un archi(o puntero, y no
el ob&eto real.
Opciones del comando ls.
ls -1
muestra un item por l)nea. *uando ls se usa en interconeiones, la salida
de ls presenta un item por l)nea por defecto.
ls -C
fuer"a el despliegue encolumnado.
ls -a
muestra todos los archi(os, incluyendo los $ue comien"an con punto,
normalmente no mostrados. 'l directorio corriente . y el directorio
padre .. son entidades reales.

ls -F /bin
ls -F
agrega sufi&o $ue indica el tipo de archi(o+ C directorio, V e&ecutable, W
enlace simblico.

ls -R
muestra recursi(amente todos los archi(os, subdirectorios y archi(os dentro
de subdirectorios. Para (er un listado ms largo,
ls -CR /etc | more

ln -s dir2 dir2ls
ln nota nota.ln0
ls -l
listado largo, muestra atributos de los archi(os+ tipo de archi(o 4primer
caracter5, permisos 4X caracteres5, enlaces hard 4en archi(os5, dueNo, grupo,
tamaNo 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
'l s)mbolo -> indica #apunta hacia# para enlaces simblicos.
Cambio de dueo y grupo.
chown usuario1 nota
cambia el dueNo del archi(o nota ad&udicndoselo a usuario1.
chown usuario1 arch1 arch2
cambia el dueNo de la lista de archi(os indicada. No puede re(ertirse, ya $ue
el usuario actual de& de ser dueNo de esos archi(os. Si el archi(o tiene
permiso de lectura, es posible copiarlo para disponer de una copia propia. 'l
cambio de dueNo no est permitido a usuarios comunes, sino reser(ado al
super(isor para e(itar $ue a un usuario se le ad&udi$uen archi(os sin su
consentimiento.

chgrp tecnicos nota
cambia de grupo el archi(o notas, ad&udicndoselo al grupo tecnicos. 'l
dueNo debe pertenecer al grupo tecnicos.
chgrp tecnicos arch1 arch2
cambia el grupo de la lista de archi(os.
Modos de permisos.
%os permisos de archi(os y directorios se cambian con el comando chmod.
Pueden epresarse de dos maneras+ simblica y absoluta.
'n la forma simblica, se usa la siguiente sintais+


[ugoa...][[+-=][rwxstugo...]


+ agrega permiso a los existentes
- quita permiso de los existentes
= nicos permisos asignados al archivo
r lectura
w escritura
x ejecucin, o acceso si es directorio
s usa el id del dueo o grupo del archivo al ejecutar
t fijar "sticky bit" a un directorio: slo dueos pueden borrar
u usuario (dueo)
g grupo
o otros
a todos (dueo, grupo y otros)

'&emplos 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 archi(os indicados.

'n modo absoluto se usa un cdigo de J d)gitos octales F..Y, en la forma
Nnnn.
N, primer d)gito+

4 fijar ID del dueo al ejecutar
2 fijar ID del grupo al ejecutar
1 fijar "sticky bit" a un directorio
nnn, 7 d)gitos+ permisos del usuario, grupo y otros, con el cdigo
4 lectura

2 escritura
1 ejecucin, o acceso si es directorio

'&emplos de permisos en notacin absoluta+
0777 0755 0764 0640 0710

chmod 0764 arch1
cambia los permisos como en el e&emplo 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 archi(os, entre los $ue aparece dir1!
ls -l dir1
lista el contenido del directorio dir1.
ls -ld dir1
trata la entrada dir1 como archi(o, sin listar su contenido, y dando sus
atributos como directorio.
ls -ld .
muestra atributos del directorio actual.
Cambio de permisos.
chmod u-w nota
$uita permisos de escritura al dueNo.
chmod u+w nota
concede permisos de escritura al dueNo.
chmod u-w+x nota
chmod u-wx+r nota
cambian (arios permisos del dueNo 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
fi&a todos los permisos en una sola operacin. %os permisos $ue no se
mencionen $uedan como est2n.
chmod 0644 nota
reali"a lo mismo en notacin absoluta.

'l 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
fi&a permisos en r@.r..r...
chmod u=rwx,u+s arch1
e&ecutar arch8 con permiso del dueNo de arch8.
chmod -vR a+r dir1
da permiso de lectura a todos los directorios ba&o dir8, anunciando en forma
(erbosa lo hecho.

chmod ugo+rwx dirtodos
chmod a+t dirtodos
fi&a #sticUy bit#+ a pesar de tener el directorio permisos totales para todos,
slo pueden borrarse los archi(os propios del usuario, no los a&enos.
chmod 1777 dirtodos
reali"a lo mismo.

%os permisos s 4setuid, setgid5 hacen $ue un archi(o e&ecutable e&ecute con
permisos del usuario dueNo o del grupo dueNo del archi(o, cual$uiera sea el
usuario y grupo de $uien lo in(oca. 'l permiso setgid sobre un directorio
hace $ue los archi(os y subdirectorios creados en 2l pertene"can al grupo del
directorio, y no al grupo primario del usuario, como es normal! esto es 3til
para los grupos de traba&o. 'l permiso t 4sticUy bit5 se aplica a directorios con
permisos totales! limita la operacin de borrado al dueNo del archi(o o
subdirectorio. %os modos S y >, $ue pueden aparecer en ls -l, indican
modos sin sentido+ setuid o setgid sobre archi(os no e&ecutables, sticUy bit
sobre directorio sin permisos para todos.
basename, dirname
echo $EDITOR
muestra la (ariable de ambiente $ue contiene el nombre del editor por
defecto. Si no aparece nada, iniciali"arla+
which vi
para obtener la ()a 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 archi(o sin ruta! basename $uita la ruta a un nombre
de archi(o 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 (ariables de ambiente.
echo "Mi editor es "`basename $EDITOR`" en "`dirname $EDITOR`
muestra el uso del operador gra(e para e&ecutar comandos dentro de otros
comandos.
Archivos de dispositivos.
'l sistema de archi(os de UNIX pro(ee una interface estndar entre los
dispositi(os de hard@are y el sistema operati(o $ue act3a igual $ue un
archi(o com3n+ todas las operaciones de entrada y salida se hacen
escribiendo y leyendo sobre un archi(o. No se trata de un archi(o com3n en
disco! act3a como una ruta hacia un canal de entradaCsalida del hard@are.
0s) como se redirige la salida de un comando hacia un archi(o, puede
redirigirse tambi2n hacia un disco, una cinta o un mdem con slo
mencionar el nombre del dispositi(o correspondiente.

tty
de(uel(e el nombre del dispositi(o asociado al terminal, por
e&emplo /dev/tty1. >omando ese mismo nombre
ls -l /dev/tty1
obtenemos un listado de atributos del #archi(o# controlador de este
dispositi(o, algo as) como
crw-rw-rw- 1 usuario1 otros .... /dev/tty1

'l primer caracter indica el tipo de dispositi(o+ c si es orientado a caracteres,
b si es orientado a blo$ues. >erminales, impresoras y modems son
orientados a caracter, discos y cintas son orientados a blo$ue.

cat - < /dev/tty1
para escuchar en la propia sesin de terminal! escribir (arias l)neas y finali"ar
con *trl./.
cat - < `tty`
produce el mismo efecto. %uego probar
$ cat - > `tty`
Ppuede eplicarse el comportamientoG
El comando mesg.
ls -l `tty`
Si otros usuarios pueden leer y escribir en este dispositi(o, tambi2n pueden
(er lo $ue se est haciendo o a3n escribir directamente en el terminal
redirigiendo su salida. 'sto se usa en los comandos wall 4@rite all, escribir a
todos5 y write 4escribir mensa&es entre usuarios5.

mesg
muestra si est habilitada o no la recepcin de mensa&es.
mesg y
cambia permisos de grupo y otros en el dispositi(o, aceptando mensa&es.
mesg n
recha"a mensa&es. Ierificar con
ls -l `tty`
$ue muestra los permisos $ue 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
'l dispositi(o /dev/null act3a como una papelera de tamaNo ilimitado $ue
recibe la salida a descartar. No guarda nada! lo $ue all) se en()e se pierde
para siempre.

>odos los dispositi(os de hard@are del sistema tienen una representacin en
el directorio /dev.
Preguntas y Ejercicios.
Ficha Referencia: $anejo de "rchi#os

Editor vi.
Uso %&sico de vi.
'l editor (i es un editor de teto de pantalla completa $ue mane&a en
memoria el teto entero de un archi(o. 's el editor clsico de UNIX! est en
todas las (ersiones. Puede usarse en cual$uier tipo de terminal con un
m)nimo de teclas! esto lo hace dif)cil de usar hasta $ue 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.
'isten tres modos o estados en vi+
modo comando+ las teclas e&ecutan acciones $ue permiten despla"ar
el cursor, recorrer el archi(o, e&ecutar comandos de mane&o del teto y
salir del editor. 's el modo inicial de (i.
modo teto o modo insercin+ las teclas ingresan caracteres en el
teto.
modo 3ltima l)nea o e+ las teclas se usan para escribir comandos en la
3ltima l)nea al final de la pantalla.
Gua de supervivencia.
*on unos pocos comandos bsicos se puede ya traba&ar en (i editando y
sal(ando un teto+
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 a#an'ado de vi.
Invocacin de vi.
vi
abre la (entana de edicin sin abrir ning3n archi(o.
vi arch1
edita el archi(o arch8 si eiste! si no, lo crea.
vi arch1 arch2
edita sucesi(amente los archi(os arch8 y luego arch6.
vi +45 arch1
edita el archi(o arch8 posicionando el cursor en la l)nea J9.
vi +$ arch1
edita el archi(o arch8 posicionando el cursor al final del archi(o.
vi +/Habia arch1
edita el archi(o arch8 en la primera ocurrencia de la palabra #Oabia#.
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).


*onfundir un modo con otro la de mayor dificultades para el mane&o de (i.
Puede acti(arse un indicador de modo escribiendo
:set showmode
'sto hace aparecer una leyenda $ue indica si se est en modo comando o
insercin.
Modo Comando.
'l editor vi, al igual $ue todo UNIX, diferencia may3sculas y
min3sculas. Confundir un comando en minscula digitando uno en mayscula
suele tener consecuencias catastrficas. Se aconse&a evitar sistemticamente
el uso de la traba de maysculas! mantener el teclado en min3sculas.
Nmeros multiplicadores.
1uchos comandos aceptan un n3mero multiplicador antes del comando. %a
accin es id2ntica a in(ocar el comando tantas (eces como indica el
multiplicador. '&emplos+
10j
en modo comando a(an"a 8F l)neas!
5Y
copia 9 l)neas y las retiene para luego pegar.
Ejemplos de manejo.
%os siguientes e&emplos de mane&o asumen $ue 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 mover en distintas direcciones

h o BS una posicin hacia la izquierda
l o SP una posicin hacia la derecha
k o - una lnea hacia arriba
j o + una lnea hacia abajo
$ fin de lnea
0 principio de lnea
1G comienzo del archivo
G fin del archivo
18G lnea nmero 18
Ctrl-G mostrar nmero de lnea actual
w comienzo de la palabra siguiente
e fin de la palabra siguiente
E fin de la palabra siguiente antes de espacio
b principio de la palabra anterior
^ primera palabra de la lnea
% hasta el parntesis que aparea
H parte superior de la pantalla
L parte inferior de la pantalla
M al medio de la pantalla
23| cursor a la columna 23
Control de pantalla.
Ctrl-f una pantalla adelante

Ctrl-b una pantalla atrs
Ctrl-l redibujar la pantalla
Ctrl-d media pantalla adelante
Ctrl-u media pantalla atrs
Ingreso en modo texto:
i insertar antes del cursor
I insertar al principio de la lnea
a insertar despus del cursor
A insertar al final de la lnea
o abrir lnea debajo de la actual
O abrir lnea encima de la actual
R sobreescribir (cambiar) texto
Borrar
x borrar caracter bajo el cursor

dd borrar lnea, queda guardada
D borrar desde cursor a fin de lnea
dw borrar desde cursor a fin de palabra
d$ borrar desde cursor a fin de lnea
d0 borrar desde cursor a principio de lnea
Copiar y pegar
Y o yy copiar lnea

P pegar antes del cursor
p pegar despus del cursor
yw copiar palabra
y$ copiar de cursor a fin de lnea
"ayy o "aY copiar lnea en buffer llamado 'a'
'a' "ayw copiar palabra en buffer llamado
"ap pegar desde buffer 'a', a la derecha del cursor
"aP pegar desde buffer 'a', a la izquierda del cursor
"bdd borrar lnea y guardar en buffer 'b'
"bdw borrar palabra y guardar en buffer 'b'
Bsqueda
/str buscar hacia adelante cadena de caracteres 'str'

?str buscar hacia atrs cadena de caracteres 'str'
n repetir ltimo comando / o ?
N repetir ltimo comando / o ? para el otro lado
fc buscar el siguiente caracter 'c' en la lnea
Fc buscar el anterior caracter 'c' en la lnea
tc ir al caracter anterior al siguiente 'c'
Tc 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%a cadena a buscar
en C o G puede ser una epresin regular.
%a accin de f, L, t y > alcan"a slo a la l)nea actual! si el caracter buscado no
est en esa l)nea el cursor no se mue(e.
Reemplazo
'stos comandos admiten multiplicadores+ un n3mero delante del comando.
0l dar un comando de reempla"o el editor coloca un s)mbolo : en donde
termina el pedido de reempla"o. 'l usuario escribe normalmente,
sobreescribiendo, hasta donde necesite, y sale con 'S*. 'stos comandos
admiten multiplicadores+ 7c@ abre un rea de reempla"o para 7 palabras.
c reemplaza caracteres
cw reemplaza palabras
C o c$ reemplaza hasta el fin de lnea
c0 reemplaza desde el comienzo de lnea
Otros
J unir dos lneas en una

ZZ grabar cambios si los hubo y salir
u deshacer ltima accin
U deshacer todos los cambios en una lnea
Modo Texto.
BS borrar caracter hacia la izquierda

ESC pasar a modo comando
Modo ex o ltima lnea.
:q salir si no hubo cambios
:q! salir sin guardar cambios
:w guardar cambios
:w arch1 guardar cambios en archivo arch1
:wq guardar cambios y salir
:r arch2 insertar un archivo
:e arch2 editar un nuevo archivo
:e! arch2 idem sin salvar anterior
:r! comando insertar salida de comando
:shell salir al shell (vuelve con exit)
Mover
:1 mueve a lnea 1
:15 mueve a lnea 15
:$ mueve a ltima lnea
Opciones
:set cambio de opciones
:set nu mostrar nmeros de lnea
:set nonu no mostrar nmeros de lnea
:set showmode mostrar modo actual de vi
:set noshowmode no mostrar modo actual de vi
Reemplazo
%a sintais del comando de b3s$ueda y reempla"o es la siguiente+
:<desde>,<hasta>s/<buscar>/<reemplazar>/g
<desde>, <hasta> indican l)neas en el archi(o! <buscar> y <reemplazar> son
cadenas de caracteres o epresiones regulares! / es un
separador, s 4sustituir5 y g4global5 son letras de comando para el mane&o de
epresiones regulares.


:1,$s/Martes/martes/g
cambia 1artes por martes en todo el archi(o.
:.,5s/ayuda/&ndo/g
cambia ayuda por ayudando desde l)nea actual hasta la 9a. l)nea.
Tipo de terminal.
vi es independiente del tipo de terminal, pero la (ariable de ambiente >'?1
debe estar fi&ada correctamente. Si no se conoce o no eiste el tipo eacto de
terminal, en la mayor)a de los terminales remotos el tipo ansi da buenos
resultados. Para fi&ar el terminal en tipo ansi, digitar
TERM=ansi;export TERM
0lgunos comandos, especialmente more y a (eces vi, pueden no responder
bien en la terminal o el emulador $ue se est usando. 'n estos casos, puede
usarse *trl.% para refrescar la pantalla.
Preguntas y Ejercicios.
Ficha Referencia: Editor #i

Expresiones Regulares
E()resiones Regulares.
%a epresiones regulares 4'?5 son una forma de describir cadenas de
caracteres. Se usan en operaciones de apareamiento o comparacin. %as
epresiones regulares permiten reali"ar b3s$uedas o sustituciones de gran
comple&idad.
%as b3s$uedas en el editor (i con los comandos C y G aceptan epresiones
regulares! esto hace las b3s$uedas mucho ms potentes y fleibles. %as
epresiones regulares son aceptadas en otros editores y en muchos
comandos, si bien con algunas diferencias de sintais.
Una epresin regular es un patrn $ue describe un con&unto de cadenas de
caracteres. Por e&emplo, el patrn aba*.txt describe el con&unto de cadenas
de caracteres $ue comien"an con aba, contienen cual$uier otro grupo de
caracteres, luego un punto, y finalmente la cadena txt. 'l s)mbolo V se
interpreta como #F, 8 o ms caracteres cuales$uiera#.
%as epresiones regulares se construyen como las epresiones aritm2ticas,
usando operadores para combinar epresiones ms pe$ueNas. 0nali"aremos
esos operadores y las reglas de construccin de epresiones regulares,
atendiendo siempre al con&unto de cadenas $ue representa cada patrn.
Metacaracteres.
%a construccin de epresiones regulares depende de la asignacin de
significado especial a algunos caracteres. 'n el patrn aba*.txt el caracter V
no (ale por s) mismo, como el caracter asterisco, sino $ue indica un
#con&unto de caracteres cuales$uiera#. 0simismo, el caracter G no se
interpreta como el signo de interrogacin sino $ue representa #un caracter
cual$uiera y uno solo#. 'stos caracteres a los $ue 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.
E()resiones Regulares *&sicas.
Una epresin regular determina un con&unto de cadenas de caracteres. Un
miembro de este con&unto de cadenas se dice $ue aparea, e$uipara o
satisface la epresin regular.
ERs de un slo caracter.
%as epresiones regulares se componen de epresiones regulares
elementales $ue aparean con un 3nico caracter+

Exp.Reg. aparea con
c '? $ue aparea con el caracter ordinario c
. 4punto5 '? $ue aparea con un caracter cual$uiera ecepto nue(a l)nea
[abc] '? de un caracter $ue aparea con a, b o c
[^abc] '? de un caracter $ue no sea a, b o c
R0-9][a-
z][A-Z]
'?s de un caracter $ue aparean con cual$uier caracter en el inter(alo indicado.
'l signo . indica un inter(alo de caracteres consecuti(os.
\e
'? $ue aparea con alguno de estos caracteres 4en lugar de la e5+
. * [ \ cuando no estn dentro de R S
^ al principio de la '?, o al principio dentro de R S
$ al final de una '?

/ usado para delimitar una '?
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:] alfanumricos
[:alpha:] alfabticos
[:cntrl:] de control
[:digit:] dgitos
[:graph:] grficos
[:lower:] minsculas
[:print:] imprimibles
[:punct:] de puntuacin
[:space:] espacios
[:upper:] maysculas
[:xdigit:] 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 'presin ?egular se contruye con uno o ms operadores $ue indican,
cada uno, el caracter a buscar. %os 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 comien"o de la l)nea 4cadena nula al principio de l)nea5
$ indica ubicado al final de la l)nea 4cadena nula al final de l)nea5
. 4punto5 un caracter indi(idual cual$uiera
[...] uno cual$uiera de los caracteres ...! acepta inter(alos del tipo a.", F.X, 0.= 4lista5
[^...] un caracter distinto de ... ! acepta inter(alos del tipo a.", F.X, 0.=
r* F, 8 o ms ocurrencias de la '? r 4repeticin5
r1r2 la '? r1 seguida de la '? r2 4concatenacin5
Ejemplos de Expresiones Regulares Bsicas.
%as epresiones regulares se aprenden me&or con los e&emplos y el uso.

Exp.Reg. aparea con
a.b ab aab abb aSb aKb ...
a..b ab aaab abbb aJ:b ...
[abc] a b c 4cadenas de un caracter5
[aA] a 0 4cadenas de un caracter5
[aA][bB] ab 0b aM 0M 4cadenas de dos caracteres5
[0123456789] F 8 6 7 J 9 Z Y D X
[0-9] F 8 6 7 J 9 Z Y D X
[A-Za-z] 0 M * ... = a b c ... "
[0-9][0-9][0-9] FFF FF8 .. FFX F8F .. F8X 8FF .. XXX
[0-9]* cadena[(ac)a F 8 X FF XX 867 J9Z XXX XXXX ...
[0-9][0-9]* F 8 X FF XX 867 J9Z XXX XXXX XXXXX XXXXXXXX ...
^.*$ cual$uier l)nea completa


'n el editor vi, las epresiones regulares permiten reali"ar b3s$uedas tales
como+
/^Desde
busca l)neas $ue empiecen con la cadena Desde
/final$
busca l)neas $ue termine con la cadena final
/\$25
busca l)neas $ue contengan $25! ; escapa el :
E()resiones Regulares E(tendidas.
0lgunos comandos, como egrep o grep -E, aceptan 'presiones ?egulares
'tendidas, $ue comprenden las 'presiones ?egulares Msicas ms algunos
operadores $ue permiten construcciones ms comple&as. %os operadores
incorporados son los siguientes+

Operador Significado
r+ 8 o ms ocurrencias de la '? r
r? F o una ocurrencia de la '? r, y no ms
r{n} n ocurrencias de la '? r
r{n,} n o ms ocurrencias de la '? r
r{,m} F o a lo sumo m ocurrencias de la '? r
r{n,m} n o ms ocurrencias de la '? r, pero a lo sumo m
r1|r2 la '? r8 o la '? r6 4alternati(a5
(r) '? anidada
"r" e(ita $ue los caracteres de la '? 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 ...
E()resiones regulares en +NU.
'n GNU, no se distinguen epresiones regulares bsicas de etendidas! los
comandos aceptan todas las epresiones regulares. 'n ese caso, como
siempre se estn usando etendidas, los metacaracteres G, \, ], A, 4, y 5 deben
ser escapados cuando se $uieren usar como caracteres normales,
escribiendo ;G, ;\, ;], ;A, ;4, y ;5.
Preguntas y Ejercicios.
Ficha Referencia: E()resiones Regulares
Filtros.
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.
Ficha Referencia: Filtros


Programacin del Shell
'l int2rprete de comandos o #shell# de UNIX es tambi2n un lenguage de
programacin completo. %a programacin de shell se usa mucho para reali"ar
tareas repetidas con frecuencia. %os diseNadores de sistemas suelen escribir
aplicaciones en el lengua&e de base del sistema operati(o, * en el caso de
UNIX, por ra"ones de rapide" y eficiencia. Sin embargo, el shell de UNIX tiene
un ecelente rendimiento en la e&ecucin de #scripts# 4guiones5! 2sta es la
denominacin aplicada a los programas escritos en el lengua&e del shell. Se
han creado aplicaciones completas usando solamente scripts.
Comandos multilnea.
Una l)nea de comando termina con un caracter nue(al)nea. 'l caracter
nue(al)nea se ingresa digitando la tecla 'N>'?. Iarios comandos pueden
escribirse en una misma l)nea usando el separador #!#
echo $LOGNAME; pwd; date

Si un comando no cabe en una l)nea, la mayor)a de los int2rpretes contin3an
la digitacin en la l)nea siguiente. Para establecer espec)ficamente $ue un
comando contin3a en la l)nea siguiente, hay dos formas, mutuamente
ecluyentes 4se usa una u otra, pero no ambas al mismo tiempo5+
. terminar la primera l)nea con ; +
$ echo $LOGNAME \
> $HOME
$ue muestra algo como
jperez /home/jperez
. de&ar una comilla sin cerrar+
$ echo "$LOGNAME
> $HOME"
$ue produce el mismo resultado.

'n los e&emplos anteriores hemos escrito los indicadores de comando. 0l
continuar el comando en la segunda l)nea, el indicador de comandos cambia
de $ a >, es decir, del indicador de comando de primer ni(el PS8 al indicador
de comando de segundo ni(el PS6. Si no se $uiere terminar el comando
multil)nea, puede interrumpirse el ingreso con *trl.*, (ol(iendo el indicador
de comando a PS8 inmediatamente.

El archivo de comandos (script).
's cmodo poder retener una lista larga de comandos en un archi(o, y
e&ecutarlos todos de una sola (e" slo in(ocando el nombre del archi(o.
*rear el archi(omisdatos.sh con las siguientes l)neas+
# 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

'l s)mbolo # indica comentario. Para poder e&ecutar los comandos contenidos
en este archi(o, es preciso dar al mismo permisos de e&ecucin+
chmod ug+x misdatos.sh
%a in(ocacin 4e&ecucin5 del archi(o puede reali"arse dando el nombre de
archi(o como argumento a bash
bash misdatos.sh
o in(ocndolo directamente como un comando
misdatos.sh
Puede re$uerirse indicar una ()a absoluta o relati(a, o referirse al directorio
actual,
./misdatos.sh
si el directorio actual no est contenido en la (ariable P0>O.

Comentarios en los scripts.
'n un script todo lo $ue (enga despu2s del s)mbolo K y hasta el primo
caracter nue(al)nea se toma como comentario y no se e&ecuta.
echo Hola todos # comentario hasta fin de lnea
slo imprime #Oola todos#.
# cat /etc/passwd
no e&ecuta nada, pues el s)mbolo # con(ierte toda la l)nea en comentario.

%os scripts suelen encabe"arse con comentarios $ue indican el nombre de
archi(o y lo $ue hace el script. Se colocan comentarios de documentacin en
diferentes partes del script para me&orar la comprensin y facilitar el
mantenimiento. Un caso especial es el uso de # en la primera l)nea para
indicar el int2rprete con $ue se e&ecutar el script. 'l script anterior con
comentarios $uedar)a 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

%a primera l)nea indica $ue el script ser e&ecutado con el int2rprete de
comandos bash. 'sta indicacin debe ser siempre la primera l)nea del script y
no puede tener blancos.

Estructuras bsicas de programacin.
%as estructuras bsicas de programacin son slo dos+ la estructura repetiti(a
y la estructura alternati(a. *ada forma tiene sus (ariaciones, y la
combinacin de todas ellas generan m3ltples posibilidades, pero detrs de
cual$uiera de ellas, por comple&a $ue pare"ca, se encuentran siempre
repeticiones o alternati(as.
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.
'n esta seccin (eremos los comandos t)picos de programacin del shell.
Hbs2r(ese $ue el shell toma la con(encin in(ersa de * para cierto y falso+
cierto es F, y falso es distinto de F. 'l shell adopta esta con(encin por$ue los
comandos retornan F cuando no hubo error. Ieremos dos
comandos, true y false, $ue retornan siempre estos (alores! se usan en
algunas situaciones de programacin para fi&ar una condicin.
true
'ste comando no hace nada, slo de(uel(e siempre F, el (alor (erdadero. %a
e&ecucin correcta de un comando cual$uiera de(uel(e F.
true
echo $?
muestra el (alor F! la (ariable :G retiene el (alor de retorno del 3ltimo
comando e&ecutado.

false
'ste comando tampoco hace nada slo de(uel(e siempre 8! cual$uier (alor
diferente de F se toma como falso. %as di(ersas condiciones de error de
e&ecucin de los comandos de(uel(en (alores diferentes de F! su significado
es propio de cada comando.
false
echo $?
muestra el (alor 8.

if
'l comando if implementa una estructura alternati(a. Su sintais es
if expresin ; then comandos1 ; [else comandos2 ;] fi
o tambi2n
if expresin
then
comandos1
[else
comandos2]
fi

Si se usa la forma multil)nea cuando se traba&a en la l)nea de comandos, el
indicador cambia a - hasta $ue termina el comando.

%a epresin puede ser cual$uier epresin lgica o comando $ue retorne un
(alor! si el (alor retornado es F 4cierto5 los comandos1 se e&ecutan! si el (alor
retornado es distinto de F 4falso5 los comandos1 no se e&ecutan. Si se us la
forma opcional con else se e&ecutan los comandos2.
if true; then echo Cierto ; else echo Falso ; fi
siempre imprime *ierto! no entra nunca en else.
if false; then echo Cierto ; else echo Falso ; fi
siempre imprime Lalso, no entra nunca en then.

*onstrucciones ms comple&as pueden hacerse usando elif para anidar
alternati(as. 'scribir en un archi(o las l)neas $ue 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

*on(ertir el script en e&ecutable. In(ocar este script con
./ciertofalso.sh N
donde N es un n3mero entero F, 8, 6, etc. %a (ariable :8 hace referencia a
este parmetro de in(ocacin. Ierificar el resultado.

*rear y e&ecutar 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
'ste comando implementa una estructura repetiti(a, en la cual una
secuencia de comandos se e&ecuta una y otra (e". Su sintais es
for variable in lista ; do comandos ; done

Se puede probar en la l)nea 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
'l caracter V es epandido por el shell colocando en su lugar todos los
nombres de archi(o del directorio actual.

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

'n el siguiente script, el comando expr calcula epresiones aritm2ticas! notar
su sintais.

# 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
'ste comando implementa alternati(as o #casos#! elige entre m3ltiples
secuencias de comandos la secuencia a e&ecutar. %a eleccin se reali"a
encontrando el primer patrn con el $ue aparea una cadena de caracteres.
Su sintais es

case $CADENA in
patrn1)
comandos1;;
patrn2)
comandos2;;
...
*)
comandosN;;
esac

'l patrn V se coloca al final! aparea cual$uier cadena, y permite
e&ecutar comandosN cuando ninguna de las opciones anteriores fue satisfecha.
*rear 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

In(ocarlo como
diasemana.sh N
donde N es cual$uier n3mero de F a Z, otro n3mero, o una cadena
cual$uiera. Ierificar el comportamiento.

*rear el archi(o estacion.sh con estas l)neas+

# 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

'l (alor :8 es el parmetro recibido en la l)nea de comando. %a opcin V5
aparea con cual$uier cadena, por lo $ue act3a como #en otro caso#! es 3til
para dar instrucciones sobre el uso del comando. 'n las opciones, A act3a
como H?! pueden usarse tambi2n comodines V y G. In(ocar el script+
bash estacion.sh octubre
bash estacion.sh

P*mo podr)a modificarse el script anterior para $ue aceptara el mes en
cual$uier combinacin de may3sculas y min3sculasG

while
'ste comando implementa una estructura repetiti(a en la cual el con&unto de
comandos se e&ecuta mientras se mantenga (lida una condicin 4@hile E
mientras5. %a condicin se eamina al principio y luego cada (e" $ue se
completa la secuencia de comandos. Si la condicin es falsa desde la primera
(e", los comandos no se e&ecutan nunca. Su sintais es
while condicin ; do comandos ; done

'n el guin $ue sigue la epresin entre par2ntesis rectos es una forma de
in(ocar el comando test, $ue reali"a una prueba de(ol(iendo cierto o falso.
'l operador-lt, #lo@er than#, significa #menor $ue#. Hbser(ar su sintais,
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
'ste comando implementa una estructura repetiti(a en la cual el con&unto de
comando se e&ecuta hasta $ue se cumpla una condicin. 'n cuanto la
condicin se cumple, de&an de e&ecutarse los comandos. %a condicin se
eamina al principio! si es (erdadera, los comandos no se e&ecutan. Notar la
diferencia con while. Su sintais es
until condicin ; do comandos ; done

Usando until, el script anterior se escribir)a

# 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
'ste comando se utili"a en programacin de shell para terminar
inmediatamente un script y (ol(er al shell original.

exit
en un script, termina inmediatamente el script! en la l)nea de comando,
termina la e&ecucin del shell actual, y por lo tanto la sesin de UNIX.
exit 6
termina el script de(ol(iendo el n3mero indicado, lo $ue puede usarse para
determinar condiciones de error.
exit 0
termina el script de(ol(iendo F, para indicar la finali"acin eitosa de tareas.
'scribir slo exit tambi2n de(uel(e cdigo de error F.
'l siguiente script ofrece un e&emplo 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
'ste comando recibe n3meros y operadores aritm2ticos como argumentos,
efect3a los clculos indicados y de(uel(e el resultado. *ada argumento debe
estar separado por blancos. Hpera slo con n3meros enteros y reali"a las
operaciones suma 4\5, resta 4.5, multiplicacin 4V5, di(isin entera 4C5, resto de
di(isin entera 4T5. %os s)mbolos V y C deben ser escapados escribiendo ;V y
;C, al igual $ue los par2ntesis, $ue deben escribirse ;4 y ;5.
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
'ste comando prueba condiciones y de(uel(e (alor cierto 4F5 o falso 4distinto
de F5 seg3n el criterio de cierto y falso del shell! esto lo hace apto para usar
en la condicin de if. >iene dos formas e$ui(alentes
test expresin
[ expresin ]

%os blancos entre la epresin y los par2ntesis rectos son necesarios.

test de(uel(e cierto ante una cadena no (ac)a, y falso ante una cadena (ac)a+
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
%a condicin [ -f archivo ] es cierta si archi(o eiste y es un archi(o
normal! anlogamente, .r comprueba si es legible, .@ si puede escribirse, . si
es e&ecutable, .d si es un directorio, .s si tiene tamaNo mayor $ue F.

%as condiciones
[ $DIR = $HOME ]
[ $LOGNAME = "usuario1" ]
[ $RESULTADO != "error" ]
comparan cadenas de caracteres! E para igualdad y ^E para desigualdad.
%a condicin
[ "$VAR1" ]
de(uel(e falso si la (ariable no est definida. %as comillas dan la cadena nula
cuando VAR1 no est definida! sin comillas no habr)a cadena y dar)a error de
sintais.
%a condicin
[ expnum1 -eq expnum2 ]
compara igualdad de epresiones $ue resultan en un n3mero. Pueden ser
epresiones num2ricas o lgicas, ya $ue 2stas tambi2n resultan en n3meros.
%os operadores num2ricos deri(an sus letras del ingl2s, y son .e$ 4igualdad5, .
ne$ 4no igual, desigualdad5, .lt 4menor5, .gt 4mayor5, .le 4menor o igual5, .ge
4mayor o igual5.

'l comando test se usa mucho para determinar si un comando se complet
con 2ito, en cuyo caso el (alor de retorno es F. 'l siguiente script crea un
archi(o si no eiste.

# nvoarch.sh
# recibe un nombre y crea un archivo de ese nombre;
# si ya existe emite un mensaje
if [ -f $1 ]
then
echo El archivo $1 ya existe
else
touch $1
echo Fue creado el archivo $1
fi
echo
# fin nvoarch.sh

Para comprobar su accin,
bash nvoarch.sh nuevo1
ls -l nuevo1
crea el archi(o! ls comprueba $ue eiste!
bash nvoarch.sh nuevo1
da mensa&e indicando $ue el archi(o ya eiste.

Htros operadores aceptados por test son -a 40N/5 y -o 4H?5.
# 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
'ste comando tiene como propsito solicitar informacin al usuario. Su
e&ecucin captura las digitaciones del usuario, hasta obtener un caracter
nue(a l)nea 4techa 'nter5. 'l e&emplo siguiente obtiene datos del usuario, los
repite en pantalla, solicita confirmacin y emite un mensa&e 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.
'l siguiente programa muestra los parmetros $ue recibe al ser in(ocado+

# 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. %a (ariable :V contiene la
lista de parmetros, y :K la cantidad.

/entro del script, los parmetros recibidos pueden referenciarse con :8, :6,
:7, ..., :X, siendo :F el nombre del propio programa. /ebido a $ue se los
reconoce por su ubicacin, se llaman parmetros posicionales. 'l siguiente
programa se in(oca con tres parmetros y muestra sus (alores+

# 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

P*mo se podr)a (erificar la in(ocacin con 7 parmetros, y emitir un
mensa&e de error en caso contrario 4cuando el usuario ingresa menos de 7
parmetros5G

Depuracin.
Se llama depuracin 4#debug#5 de un programa al proceso de (erificar su
funcionamiento en todos los casos posibles y corregir sus errores 4#bugs#,
#pulgas#! del ingl2s, literalmente, #chinche#! por etensin, insecto
pe$ueNo5.
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.
Ejercicios Progra!acin del Shell


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.
!. "esplegar en forma sucesiva y paginada# las primeras ! lineas de los
archivos de nombre empe$ado con "aba" y terminado con ".log" del
directorio /var/log/otros.
%. &nviar un correo al usuario carletto del dominio ns'.com.uy# con ttulo
""esayuno de traba(o". &l te)to del mensa(e est en el archivo
invitacion.t)t.
*. &nviar un correo a los usuarios carletto del dominio ns'.com.uy# y a los
usuario fermin y aparicio del dominio toros.edu.uy# todo en un solo
comando. &l ttulo es "+aludos matinales" y el te)to del mensa(e se
encuentra en salusmat.t)t.
,. &scribir un comando para cambiar la contrase-a propia. &scribir un
comando para cambiar la contrase-a del usuario pocholo ./es posible0
/en qu1 caso02.
3. &scribir un comando que muestre los grupos a los que pertenece el
usuario (pere$.
4. 5rabar en el archivo contra.senia la pgina man del comando que
cambia la contrase-a del usuario. 6isuali$ar con more. /7or qu1 se ven
caracteres e)tra-os0
8. 9istar archivos visibles e invisibles ba(o el directorio corriente
1:. 9istar archivos visibles y ocultos# en formato largo# en el directorio
actual.
11. 9istar archivos visibles y ocultos# en formato largo# en el subdirectorio
;<=>< del subdirectorio doc del directorio usr que est colgado del
ra$.
12. 9istar recursivamente todos los archivos ba(o el directorio /var.
1!. 9istar recursivamente todos los directorios# subdirectorios y archivos
visibles e invisibles ba(o el directorio /etc deteniendo el despliegue en
cada pantalla.
1%. 9istar recursivamente y en formato largo todos los archivos visibles e
invisibles ba(o el directorio /var deteniendo el despliegue en cada
pantalla.
1*. ?ostrar el directorio actual.
1,. ?ostrar informacin relativa al usuario en la sesin actual.
13. ?ostrar los archivos del directorio /usr/doc/;<=>< a2 en listado
breve@ b2 en listado largo@ c2 incluyendo archivos ocultos@ d2 en listado
largo e incluyendo archivos ocultos.
14. <btener informacin del comando passAd.
18. <btener nombres de comandos relacionados con la contrase-a# en
ingl1s# "passAord".
2:. /7ara qu1 sirve el comando apropos0 "ar un e(emplo de uso.
21. 7edir al sistema informacin sobre el usuario root. +i conoce ms de
un comando# indicarlos todos.
22. /Bu1 es el CD"0 /Bu1 es el 5D"0
2!. >rasladarse# desde cualquier lugar# hacia el directorio propio del
usuario. 9uego# escribir un comando para indicar el directorio actual.
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
comandoshostname, 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?
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?
Preguntas y Ejercicios.
Ficha Referencia: Sistema de Archivos

1. >D7<+ "& AEF;D6<. a2 con el comando which determinar la ubicacin de
los archivos bash# vi# adduser . +i alguno de estos archivos no se lograra
ubicar# /cul puede ser la ra$n0 /+e puede corregir0
b2 con el comando file deducir el tipo de cada uno de estos archivos.
c2 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.
c2 repetir con los archivos hola.c# cati.c. /7or qu1 da distinto si ambos son
programas en F0

2. +D+>&?A "& AEF;D6<+. Fon el comando ls -F e)plorar los dos primeros
niveles del sistema de archivos. "eterminar cules directorios y
subdirectorios puede reconocer en cuanto a contenido. Fomparar con el
esquema de referencia. Anotar diferencias@ esto es til a la hora de buscar
ubicaciones.

!. +D+>&?A "& AEF;D6<+. "iferencie las dos acepciones habituales de
"sistema de archivos"# e)plicando cada una. 9iste todos los tipos de sistema
de archivos que cono$ca# indicando qu1 sistema operativo los usa.
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 directorioexport .
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. Actualizar la fecha del archivo /tmp/control.tmp.
2. Borrar el enlace simblico liga1.
3. Borrar el enlace simblido nota1.txt que apunta al archivo ../carta.txt.
4. Cambiar de nombre el directorio sumarios.textos por el de resumenes.
5. 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-----.
Preguntas y Ejercicios.
Ficha Referencia: Editor vi


1. /7or qu1 el editor vi es tan complicado de mane(ar0 +ugerenciaG recordar
que no usa teclas de funcin ni teclas compuestas# ni tampoco requiere de
las flechas.

2. "efinir brevemente los modos del editor vi# indicando para qu1 sirven las
teclas en cada caso.

3. Frear un archivo de te)to breve. Eeali$ar agregados y correcciones
elementales usando los comandos de la 5ua de +upervivencia. 5rabar y
volver a editar ese archivo. ?emori$ar estos comandos.

4. Frear un archivo de te)to breve o usar el anterior. 7robar los comandos
descritos. ?arcar los comandos que se consideren de uso ms frecuente
dentro de cada categora de uso.
Preguntas y Ejercicios.
Ficha Referencia: Expresiones Regulares


&n algunos de los e(ercicios que siguen se pide usar el archivo uy_hist1.txt.
Fopiarlo en el directorio de traba(o antes de comen$ar. 9os
comandos grep y grep -E buscan lneas que contengan e)presiones
regulares bsicas y e)tendidas# 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.
Preguntas y Ejercicios.
Ficha Referencia: Filtros

Estructura de archivos.
&structura del archivo /etc/passAdG
#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
&structura del archivo /etc/groupG
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
&structura del archivo /etc/hostsG
#nmero_IP nombre_mquina alias
10.137.137.250 liebre.cdi.edu.uy liebre localhost mailhost
>odos los archivos anteriores pueden tener comentarios .lneas comen$adas
por H2.

1.
Iuscar a partir del directorio /var todos los archivos de nombre core y
mostrar a2 sus nombre@ b2 sus nombres en listado largo@ c2 eliminarlos.

2.
Cn archivo acceso.log de registro de accesos de usuarios a un sistema CJDK#
genera un rengln por acceso# el primer campo es el nombre del usuario# y
los campos estn separados por ":".
a2 &scribir comandos que muestren el nombre de cada usuario y la cantidad
de accesos registrados# en orden alfab1tico.
b2 &)traer del archivo acceso.log las lneas correspondientes al
usuario jperez del mes de mayo del a-o 1883. 9a fecha figura en el formato
"1!:: 1* ?ayo 1883"@ el primer nmero es la hora.
c2 &)traer del archivo acceso.log las lneas que correspondan al
usuario jperez o al usuario elopez.

3.
&n el archivo NoMBreS.tXT un mismo nombre puede estar en maysculas y
minsculas# me$cladas de diferentes maneras. 5enerar una lista de nombres
en minscula con los 3 nombres que aparecen menos veces# sin importar
como est1n escritos.

4.
Cn archivo palabras.txt contiene palabras distintas una por lnea. &)trar
todas las palabras que empiecen y terminen con vocal# en minscula o
mayscula.

5.
Csar el archivo /etc/passwd o el comando ypcat passwd si el sistema usa JD+#
para resolver las siguientes preguntas. &n estos archivos pueden haber
comentarios# lneas empe$adas por H# que deben eliminarse de la bsqueda.
Eecordar que el caracter H es interpretado por el shell.

a2 eliminar los comentarios.
b2 e)traer una lnea que muestre directorio propio y shell del usuario elopez.
c2 listar los usuarios que usan el shell /bin/bash.
d2 listar los usuarios que no usan el shell /bin/bash.
e2 contar la cantidad de usuarios.


6.
Eeali$ar las tareas indicadas# si es posible@ si no lo es# indicar los motivos.
7resentar el archivo /etc/passwd ordenado segn los siguientes criteriosG
a2 ordenado por nombre de login de usuario.
b2 ordenado por nmero de usuario.
c2 ordenado por nmero de grupo y dentro de cada grupo por nmero de
usuario.
d2 ordenado por nmero de grupo y dentro de cada grupo por campo de
comentario.
7.
&ncontrar las * palabras ms frecuentes en el te)to historia1.txt# e indicar
la cantidad de veces que fue usada cada una. DndicacinG transformar
primero todas las palabras a minscula.
Programacin del Shell

Estructura de archivos.
&structura del archivo /etc/passAdG

#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
&structura del archivo /etc/groupG

#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
&structura del archivo /etc/hostsG

#nmero_IP nombre_mquina alias
10.137.137.250 liebre.cdi.edu.uy liebre localhost mailhost
>odos los archivos anteriores pueden tener comentarios .lneas comen$adas
por H2.
&n los sistemas con JD+# para passwd y group usar el comanto ypcat en lugar
de cat para listar estos archivos# o el comando ypmatch para e)traer una lnea
sola de alguno de ellos. &(emplosG
ypcat passwd
ypcat group
ypmatch jperez passwd

Nota.
&n la construccin de los siguientes programas o LscriptsL se valorar la
presentacin interna y e)terna. &n 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
LautodocumentadoL. &n la presentacin e)terna# importan las leyendas
aclaratorias# ayudas# y avisos de e(ecucin que favore$can al usuario
ocasional. +e aconse(a 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. Eecibir un nombre de archivo como parmetro e indicar# imprimiendo
todas las leyendas que correspondan# si el archivo es legible# modificable y
e(ecutable por el usuario.

2. Eecibir varios nombres de archivo como parmetros# y para cada uno
validar si el nombre corresponde a un archivo comn e)istente# y si es as
mostrarlo en pantalla paginando.

3. Eecibir un nombre de directorio# validar e)istencia y condicin de
directorio y mostrar nombres de todos los directorios y subdirectorios ba(o
1l# en formato de pgina largo 2!.

4. &scribir un programa seaejec que reciba un nombre de archivo# verifique
que e)iste y que es un archivo comn# lo convierta en e(ecutable para el
due-o y el grupo y muestre el modo final.

5. &scribir un programa copiabin.sh que mueva todos los programas del
directorio actual .archivos e(ecutables2 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. +i el directorio bin
no e)iste# deber ser creado.

6. Csando el archivo /etc/passAd escribir el programa usuarios que lista los
nombres de login# el directorio propio del usuario y el int1rprete invocado
por defecto de todos los usuarios# ordenados alfab1ticamente por nombre
de login.

7. Csando solamente el archivo /etc/group# escribir los siguientes programasG
a2 Lgrupo1LG listar los nombres y nmeros de grupo y la lista de usuarios de
cada uno# ordenados por nombre.
b2 Lgrupo2LG igual# ordenados por nmero de grupo.
c2 Lgrupo!LG rene las dos salidas anteriores# con leyendas e)plicativas
adecuadas para cada parte y para cada columna# as como nombre de la
mquina y fecha del da.

8. &scribir un programa usugrup que dado un nombre de login de usuario
determine si e)iste en el sistema# y si es as# presente su nombre de usuario# #
nmero de usuario .CD"2# grupo primario y grupos secundarios si los tiene#
con leyendas adecuadas.

9. &scribir un programa grupusu que dado un nombre de grupo determine si
e)iste en el sistema# y si es as# presente su nombre# nmero de grupo .5D"2#
y lista de usuarios que pertene$can a 1l# ya sea como grupo primario .en
/etc/passAd2 o como grupo secundario .lista en /etc/group2.

10. &scribir los siguientes programasG
a2 ligassG muestra los nombres de archivo que son enlaces simblicos.
b2 ligashG 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. &scribir un programa saludo que# segn la hora# escriba el saludo
correspondiente al nombre de pila del usuario. &n el archivo /etc/passAd los
usuarios deben estar ingresados con nombre y apellido separados por
blanco. 9os saludos corresponden a las siguientes horasG Iuenos das# de
:*G:: hasta 12G*8@ Iuenas tardes# de 1!G:: hasta 18G*8@ Iuenas noches
2:G:: hasta :%G*8. &(emplo de mensa(eG Iuenos das# Muan.
A efectos de pruebas# se recibirn la hora y el nombre de login como
parmetros# de(ando comentados los comandos donde se e)trae la hora real
y se toma el usuario real.

12. Cn script de respaldo produce# entre otros mensa(es# lneas del tipo
"Total bytes written 18804023"
5uarda su salida en el archivo respaldo.error. &scribir un
script total.cinta que sume los bytes grabados e indique el total en bytes#
?b y 5b.
Frear un archivo respaldo.error de prueba# con un contenido tal como
Programacin del Shell
Ejercicios resueltos

Estructura de archivos.
&structura del archivo /etc/passAdG

#nombre:contrasea:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Prez:/home/jperez:/bin/bash
&structura del archivo /etc/groupG

#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
&structura del archivo /etc/hostsG

#nmero_IP nombre_mquina alias
10.137.137.250 liebre.cdi.edu.uy liebre localhost mailhost
>odos los archivos anteriores pueden tener comentarios .lneas comen$adas
por H2.
&n los sistemas con JD+# para passwd y group usar el comanto ypcat en lugar
de cat para listar estos archivos# o el comando ypmatch para e)traer una lnea
sola de alguno de ellos. &(emplosG
ypcat passwd
ypcat group
ypmatch jperez passwd

Nota.
&n la construccin de los siguientes programas o LscriptsL se valorar la
presentacin interna y e)terna. &n 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
LautodocumentadoL. &n la presentacin e)terna# importan las leyendas
aclaratorias# ayudas# y avisos de e(ecucin que favore$can al usuario
ocasional. +e aconse(a 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. Eecibir un nombre de archivo como parmetro e indicar# imprimiendo
todas las leyendas que correspondan# si el archivo es legible# modificable y
e(ecutable 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. Eecibir varios nombres de archivo como parmetros# y para cada uno
validar si el nombre corresponde a un archivo comn e)istente# 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. Eecibir un nombre de directorio# validar e)istencia y condicin de
directorio y mostrar nombres de todos los directorios y subdirectorios ba(o
1l# en formato de pgina largo 2!.

#!/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. &scribir un programa seaejec que reciba un nombre de archivo# verifique
que e)iste y que es un archivo comn# lo convierta en e(ecutable para el
due-o 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. &scribir un programa copiabin.sh que mueva todos los programas del
directorio actual .archivos e(ecutables2 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. +i el directorio bin
no e)iste# 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. Csando el archivo /etc/passAd escribir el programa usuarios que lista los
nombres de login# el directorio propio del usuario y el int1rprete invocado
por defecto de todos los usuarios# ordenados alfab1ticamente 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. Csando solamente el archivo /etc/group# escribir los siguientes programasG
a2 Lgrupo1LG listar los nombres y nmeros de grupo y la lista de usuarios de
cada uno# ordenados por nombre.
b2 Lgrupo2LG igual# ordenados por nmero de grupo.
c2 Lgrupo!LG rene las dos salidas anteriores# con leyendas e)plicativas
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. &scribir un programa usugrup que dado un nombre de login de usuario
determine si e)iste en el sistema# y si es as# presente su nombre de usuario# #
nmero de usuario .CD"2# 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. &scribir un programa grupusu que dado un nombre de grupo determine si
e)iste en el sistema# y si es as# presente su nombre# nmero de grupo .5D"2#
y lista de usuarios que pertene$can a 1l# ya sea como grupo primario .en
/etc/passAd2 o como grupo secundario .lista en /etc/group2.

#!/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. &scribir los siguientes programasG
a2 ligassG muestra los nombres de archivo que son enlaces simblicos.
b2 ligashG 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. &scribir un programa saludo que# segn la hora# escriba el saludo
correspondiente al nombre de pila del usuario. &n el archivo /etc/passAd los
usuarios deben estar ingresados con nombre y apellido separados por
blanco. 9os saludos corresponden a las siguientes horasG Iuenos das# de
:*G:: hasta 12G*8@ Iuenas tardes# de 1!G:: hasta 18G*8@ Iuenas noches
2:G:: hasta :%G*8. &(emplo de mensa(eG Iuenos das# Muan.
A efectos de pruebas# se recibirn la hora y el nombre de login como
parmetros# de(ando comentados los comandos donde se e)trae 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. Cn script de respaldo produce# entre otros mensa(es# lneas del tipo
"Total bytes written 18804023"
5uarda su salida en el archivo respaldo.error. &scribir un
script total.cinta que sume los bytes grabados e indique el total en bytes#
?b y 5b.
Frear 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
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:
... repeticin del ltimo item
[] item opcional, puede estar o no
{A|B} item opcional obligatorio, debe tomarse A o B
TAB tecla o caracter tabulador
LF caracter nueva lnea
CR caracter retorno de carro
ESPACIO caracter o tecla de barra espaciadora
blanco caracter TAB o ESPACIO, delimita palabras
UID identificador de usuario (nmero)
GID identificador de grupo (nmero)
(su) 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 da juliano, contado desde el 1 de enero
-y 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 equivalente a -vET
-b numera las lneas que no estn en blanco
-E muestra $ al final de cada lnea
-n numera las lneas
-s reemplaza varias lneas en blanco por una sola
-t equivale a -vT
-v muestra caracteres no imprimibles excepto LF y TAB
-T 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 verboso, describe accin sobre cada archivo.
-R 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 nmero de byte (decimal) y bytes diferentes (octal) para cada
diferencia.
-s 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 copia enlaces simblicos como tales
-f forzoso, sobreescribe archivos destino si existen
-i avisa antes de sobreescribir archivos existentes
-l crea enlaces hard en lugar de copiar los archivos
-p preserva dueo, grupo, permiso y fecha
-s crea enlaces simblicos en lugar de copiar los archivos
-R recursivo, copia directorios y sus archivos
-v 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, m- es m hasta el ltimo campo o columna.

-f campos numerados, por defecto separados por TAB
-c columnas, ubicacin posicional de caracteres en la lnea
-d fija el caracter delimitador de campos, TAB por defecto
-s 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 -c57-
corta 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 hora universal (GMT)

Formato para fijar la hora:
MM mes (01-12)
DD da (01-31)
HH hora (00-23)
mm mminuto (00-59)
CC centuria
YY ao
SS 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 verboso, imprime encabezamiento con nombre del archivo
-q silencioso, no imprime encabezado con nombre del archivo
-N imprime primeras N lneas, por defecto 10
-n N 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 ayuda
-f --fqdn nombre de mquina completo, con dominio DNS
-d --domain nombre de dominio DNS
-i --ip-address direccin (nmero IP)
-a --alias nombres de alias
-v 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 slo el grupo primario
-G grupos suplementarios
-n nombre en lugar de nmero; requiere -u, -g, o -G
-r real en lugar de efectivo; requiere -u, -g o -G
-u 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 forzoso, elimina archivos destino existentes
-i interactivo, pide confirmacin para eliminar archivos
-s simblico, crea enlaces simblicos en lugar de hard
-v verboso, da el nombre de cada enlace creado

ln nota nota.ln
ln -s /etc/passwd
ln -s datos.usuario datos.usu.ln
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 un nombre de archivo por lnea
-a todos los archivos, incluso no visibles comenzados por .
-c ordenar por fecha de estado de ltimo cambio (ctime en inodo)
-C salida en columnas con ordenamiento por columnas
-d lista directorios como archivos, no su contenido
-F indica tipo: / directorio, * ejecutable, @ enlace simblico
-i inodo, nmero de ndice de cada archivo
-k tamaos en KB
-l listado en formato largo
-r invertir ordenamiento
-R listar recursivamente subdirectorios
-s tamao en bloques de 1024 bytes
-t ordenar por fecha de ltima modificacin (mtime en inodo)
-u ordenar por fecha de ltimo acceso (atime en inodo)
-U no ordenar
-x 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 verboso, muestra detalles de entrega
-s TEMA especifica el tema (subject) del mensaje
-c LISTA enva copias a LISTA de usuarios, separados por coma
-b LISTA enva copia ciega a LISTA de usuarios
-f [ARCH] lee contenido de archivo propio mbox o el indicado
-u 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 muestra pginas en todas las secciones
-d muestra informacin de depuracin propia de man
-f equivalente a whatis
-h muestra ayuda para man
-k equivalente a apropos
-w 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 formatos de archivos
6 juegos
7 paquetes de macros
8 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 ysi est habilitada escritura, is n si no est habilitada escritura.

y permite a otros escribir mensajes en la terminal
n 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 fija tamao de pantalla en N lneas
-d muestra mensajes de ayuda
-s 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
haciaDIRECTORIO. Entre sistemas de archivos slo puede mover archivos
normales.

-f forzoso, sobreescribe archivos destino si existen
-i avisa antes de sobreescribir archivos existentes
-v verboso, escribe el nombre de cada archivo que mueve
-u 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 mximo nmero de das de validez; luego pide cambiar
-n M mnimo nmero de das antes de poder cambiar
-n M 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 -o8 -l23 -h "Lista de usuarios" /etc/passwd
pr -o2 -l22 -h "Lista de servicios" /etc/services | more
ls /etc | pr -2 -b -l23 | more
ls /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 formato largo
u formto usuario, muestra nombre, PID, hora inicio, estado
j formato trabajos, muestra PGID y SID
s formato seales
a mostrar tambin procesos de otros usuarios.
x mostrar tambin procesos sin terminal de control
w no truncar lneas para caber en un ancho de pgina;
agregar una w para cada lnea ms
h sin encabezado
r 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 ignora archivos inexistentes y nunca pide confirmacin
-i interactivo, pregunta antes de eliminar cada archivo.
-r, -R recursivo, borra directorios y su contenido
-v 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 contina tratando de leer; para archivos en crecimiento
-v verboso, imprime encabezamiento con nombre del archivo
-q silencioso, no imprime encabezado con nombre del archivo
-N imprime ltimas N lneas
-n N 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
formausuario@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 toda la informacin
-m mquina, tipo de hardware
-n nombre de mquina en la red
-p tipo de procesador
-r edicin (release) del sistema operativo
-s nombre del sistema operativo
-v 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 slo caracteres
-w slo palabras
-l 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 mquina y nombre de login del usuario invocante
-H muestra encabezado de columnas
-u tiempo inactivo; "old" es >24 horas; "." activo reciente
-w si el usuario recibe (+) o no (-) mensajes
-m 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.

Comandos de Filtro
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 mayor que N
-N menor que N
N exactamente N.

Criterios de bsqueda:
-name PATRON el nombre aparea con PATRON;
-iname PATRON idem,insensible a mayculas;
-path PATRON nombre con va completa;
-ipath PATRON idem, insensible a maystulas;
-regexp EXP nombre aparea con expresin regular EXP
-iregexp EXP idem, insensible a maysculas;
-lname PATRON archivo es un enlace simblico;
-ilname PATRON idem, insensible a maysculas;
-atime N ltimo acceso N*24 horas atrs
-ctime N ltimo cambio de estado N*24 horas atrs
-mtime N ltima modificacin N*24 horas atrs
-amin N ltimo acceso N minutos atrs
-cmin N ltimo cambio de estado N minutos horas atrs
-mmin N ltima modificacin N minutos atrs
-daystart mide tiempos desde las 0 horas de hoy
-size N[bckw] tamao de N bloques, caracteres, KB o palabras (2
bytes)
-empty archivo vaco, regular o directorio
-user UNAME archivo del usuario UNAME
-group GNAME archivo del grupo GNAME
-uid N archivo del usuario de nmero N
-gid N archivo del grupo de nmero N
-nouser archivo sin dueo asignado
-nogroup archivo 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 el patrn es una expresin regular bsica; opcin por defecto
-E el patrn es una expresin regular extendida
-F 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 verifica si los archivos ya estn ordenados
-m 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 /etc/passwd | sort -t:
cat /etc/passwd | sort -t: +4 -f | cut -d: -f5
cat /etc/passwd | sort -t: +5 | cut -d: -f6
cat /etc/passwd | sort -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 intervalo de caracteres desde el M al N (M anterior al N)
0-9 equivale a 0123456789

La notacin [:CLASE:] expande a los caracteres predefinidos en las clases:
alnum letras y nmeros.
alpha letras.
blank espacio.
cntrl caracteres de control.
digit nmeros.
graph caracteres imprimibles, excludo el espacio.
lower minsculas
print caracteres imprimibles, includo el espacio.
punct signos de puntuacin.
space espacio
upper maysculas.
xdigit 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 saltear N campos antes de verificar unicidad.
-s N saltear N caracteres antes de verificar unicidad.
-c indicar junto a cada lnea el nmero de veces que aparece.
-i ignorar maysculas y minsculas al comparar.
-d mostrar slo lneas repetidas.
-u mostrar 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.

You might also like