Está en la página 1de 95

http://iie.fing.edu.uy/~vagonbar/unixbas/index.

htm

Conceptos de Sistemas Operativos


Hardware Qu es un Sistema Operativo Historia de los Sistemas Operativos Conceptos de Sistemas Operativos Procesos Archivos Llamadas al Sistema El intrprete de comandos ("shell") Ejemplos de comandos Referencias

Una computadora sin software no presta ninguna utilidad. El software puede clasificarse en dos grandes grupos:

programas de sistema (software de base, software de sistema): controlan la operacin de la computadora. programas de aplicacin (software de aplicacin): resuelven problemas para los usuarios.

El Sistema Operativo es el programa fundamental entre los programas de sistemas; controla todos los recursos de la computadora y proporciona la base sobre la que pueden escribirse los programas de aplicacin. Es un nivel de software por encima del hardware que controla todas las partes del sistema y presenta al usuario una interfaz o mquina virtual. En un sistema de computacin se reconocen los siguientes niveles, yendo desde el usuario hacia la mquina fsica:

Programas de aplicacin: Sistema bancario, Reservaciones areas, Juegos. Compiladores, Editores, Intrprete de comandos. Sistema operativo.

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

Como mquina extendida. El sistema operativo presenta al usuario una mquina extendida o mquina virtual ms fcil de programar que accionar en forma directa sobre el hardware subyacente. En este sentido se dice que el sistema operativo "define un ambiente de trabajo". Como controlador de recursos. Permite la asignacin ordenada de procesadores, memoria y dispositivos de entrada/salida para los varios programas que compiten por el uso de estos recursos. Historia de los Sistemas Operativos. Primera generacin (1945-1955): bulbos y conexiones. Programacin en lenguaje de mquina absoluto, o realizando directamente las conexiones elctricas. Alrededor de 1950 se introducen las tarjetas perforadas. Segunda generacin (1955-1965): transistores y sistemas de procesamiento por lotes. Los programas y datos se entregaban en tarjetas, se acumulaban y luego eran procesados todos juntos por la mquina, buscando minimizar los tiempos muertos. Tercera generacin (1965-1980): circuitos integrados y multiprogramacin. El sistema 360 de IBM unifica computadoras comerciales y cientficas en una sola lnea de mquinas con software compatible. Se introduce la multiprogramacin, que divide la memoria en partes y ejecuta un programa distinto en cada una. El spooling permite la operacin simultnea y en lnea de perifricos. El tiempo compartido es una variante de multiprogramacin que habilita a cada usuario una terminal en lnea. MULTICS, un gigantesco sistema operativo, fracasa en su construccin pero aporta muchas ideas que hacen surgir UNIX. Cuarta generacin (1980-1990): estaciones de trabajo y computadoras personales. Sistemas operativos DOS y UNIX. Software "amigable con el usuario". Sistemas operativos de red, con varias computadoras interconectadas que pueden ser accedidas por un mismo usuario. Sistemas operativos distribudos, compuestos por varios procesadores que se presentan al usuario como un sistema nico. Conceptos de Sistemas Operativos. La interfaz entre los programas de usuario y el sistema operativo est formada por llamadas al sistema capaces de crear, utilizar y eliminar procesos y archivos. Procesos. Un proceso es bsicamente un programa en ejecucin. Consta del programa ejecutable, datos, pilas, registros y toda la informacin necesaria para ejecutar. Un intrprete de comandos (shell) es un proceso que lee los comandos de usuario desde una terminal y crea procesos hijo para ejecutar ese comando. Se crea as un rbol de procesos en ejecucin. Los procesos se manejan mediante seales que los obligan a suspender, reiniciar o terminar su accin. Las seales se utilizan tambin para comunicacin entre procesos. Cada usuario tiene asignado un identificador de usuario (uid), y grupos de usuarios tienen un identificador de grupo (gid). Un proceso tiene asignado el uid y gid del usuario que lo inici. Ambos identificadores se utilizan para proteger la informacin manejada por el proceso. Archivos. Existen llamadas al sistema para crear, eliminar, leer y escribir archivos. Los archivos se agrupan en directorios, y existen llamadas al sistema para crear y eliminar directorios, y para colocar y quitar archivos de ellos. Esto crea una jerarqua de directorios y archivos llamada sistema de archivos. Un archivo se reconoce unvocamente dando la ruta de acceso, que es la

sucesin de directorios que permiten alcanzar el archivo a partir del directorio raz. Cada proceso activo tiene un directorio de trabajo en el que se buscan primariamente los archivos cuando se indica slo el nombre y no la ruta de acceso. En un sistema multiusuario, es preciso dar privacidad a los archivos de cada persona. UNIX utiliza un cdigo de 9 bits en 3 grupos de 3 bits. Estos grupos correspondientes al dueo, el grupo y el resto del mundo. Cada conjunto de 3 bits corresponde a permiso de lectura, escritura y ejecucin. Se presentan como rwx (Read, Write, eXecute); cuando uno de estos permisos est denegado se sustituye la letra por -, como en r-- o en rw-. Para acceder a un archivo, se verifican primero sus permisos; si son correctos, el sistema devuelve un descriptor de archivo o "entrada de manejo", un nmero entero que se utiliza en todas las operaciones subsiguientes. Al cerrarse el archivo, el descriptor es desasignado y el nmero entero queda disponible para otro acceso. UNIX maneja los dispositivos de entrada y salida con un artificio que los presenta como archivos especiales, lo que permite escribir y leer en ellos con las mismas llamadas al sistema que se usan para los archivos. Los archivos especiales de bloque se usan para dispositivos que organizan los datos en bloques de tamao fijo y acceso aleatorio, como los discos. Los archivos especiales de caracteres modelan los dispositivos formados con flujos de caracteres como las terminales, impresoras e interfaces de red. En UNIX y DOS, al iniciar un proceso se establece el descriptor de archivo 0 como entrada estndar para recibir datos desde el teclado y el descriptor de archivo 1 como salida estndar para presentar informacin en la pantalla. El descriptor de archivo 2 es el de error estndar; se usa para mensajes de error y se asigna normalmente a la pantalla. La interconexin de procesos se realiza a travs de una tubera, entubamiento, tubo o secuencia de comandos, indicado por el caracter | (barra vertical). Un tubo es un seudoarchivo en el cual un primer proceso escribe su salida para ser leda por un segundo proceso; la salida del primero es la entrada del segundo. Llamadas al sistema. Los programas de usuario se comunican con el sistema operativo mediante llamadas al sistema. Para cada llamada existe un procedimiento de biblioteca que puede ser invocado desde un programa de usuario mediante un nombre y parmetros. El intrprete de comandos (shell). El intrprete de comandos de UNIX, o shell, es un proceso que muestra un indicador de comandos ($, %, o #) y aguarda que el usuario digite un comando. Toda vez que el usuario digita un comando, el intrprete lo valida, y si es correcto crea un proceso hijo que realiza la accin encomendada. Al terminar el proceso hijo, exhibe nuevamente el indicador de comando e intenta leer una nueva lnea de la entrada. Ejemplos de comandos (UNIX):
date

imprime la fecha.
date >archivo1

imprime la fecha pero la redirecciona hacia el archivo1.


sort <archivo1 >archivo2

lee archivo1, reordena sus lneas y las graba en archivo2.


cat arch1 arch2 arch3 | sort >/dev/lp

concatena los archivos arch1, arch2 y arch3, dirige su salida hacia el comando sort que ordena las lneas de los tres archivos juntos y las enva al dispositivo de impresin /dev/lp.

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

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

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

Historia de UNIX Antecedentes:


las computadoras ejecutan un trabajo por vez (aos '40 y '50). los trabajos se agrupan y ejecutan "por lotes" (aos '60). CTSS, un sistema operativo de propsito general y tiempo compartido, logra enorme xito. MULTICS, un ambicioso proyecto de sistema operativo para cientos de usuarios fracasa y no llega a terminarse.

UNIX.

Ken Thomson, desarrollador de MULTICS, con ideas y apoyo de algunos compaeros, escribe un nuevo MULTICS ms modesto en una mquina PDP-7 desechada (1969). Brian Kernighan, compaero de Thomson, lo llama irnicamente UNICS. UNIX pasa a una mquina PDP-11 (1970). Ritchie dise y escribi un compilador para lenguaje C. Thomson y Ritchie reescriben UNIX en C, rompiendo la tradicin de sistemas operativos escritos en lenguaje ensamblador (1973). Esto aumenta la portabilidad del sistema hacia otras mquinas. Thomson y Ritchie reciben el premio Turing por un memorable artculo sobre UNIX escrito en 1974. UNIX es adoptado en las universidades, por tratarse de un "sistema abierto" que proporciona todo el cdigo fuente (1974). BSD y System V; el estndar de POSIX. El desmembramiento de AT&T (1984) permite a esta empresa ingresar en el mercado de computadoras, y produce la primera versin comercial de UNIX, el Sistema III, que pronto es sustitudo por el Sistema V versiones 2, 3 y 4. La Universidad de Berkeley produjo una versin mejorada para la PDP-11, llamada 1BSD; luego fueron la 3BSD y luego 4BSD, que incorpor el protocolo de redes TCP/IP. El grupo POSIX estudi y propuso un estndar para UNIX, llamado 1003.1, que define un conjunto de procedimientos de biblioteca que cualquier sistema conforme con UNIX debe proporcionar. Esto resolvi la controversia entre Sistema V y BSD. Se forma OSF, Open Software Foundation, integrada por IBM, DEC, HP y otros para enfrentar a AT&T. Crea un UNIX con ms prestaciones que el estndar de POSIX.

Versiones actuales de UNIX.


AT&T, para enfrentar a OSF, crea UI, UNIX International, junto con otras empresas; crea otro UNIX ampliado de POSIX. IBM crea su propia variante de UNIX, llamada AIX. La confusin de versiones contina. surgen las versiones UNIX de dominio pblico FreeBSD y Linux, que se distribuyen sin costo. Linux es desarrollado por una multitud de personas y equipos de trabajo a travs de Internet. FreeBSD es desarrollado por un grupo de trabajo cerrado. UNIX hacia el usuario final: distribuciones fciles de instalar (SuSE, Redhat, Mandrake, Corel), aplicaciones de escritorio (Applixware, StarOffice), programas asistentes de administracin para estaciones de trabajo o servidores.

Objetivos de UNIX. UNIX fue diseado teniendo en mente los siguientes objetivos:

crear un sistema interactivo de tiempo compartido diseado por programadores y para programadores, destinado a usuarios calificados. que fuera sencillo, elegante, escueto y consistente. que permitiera resolver problemas complejos combinando un nmero reducido de comandos bsicos.

Filosofa del sistema UNIX. Los objetivos con que se cre determinaron una "filosofa" de UNIX caracterizada por:

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

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

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

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

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

Ingreso al sistema (login).


login: id-usuario password:

id-usuario es el nombre identificador del usuario para ingreso al sistema, proceso que se denomina "login". Este nombre de usuario suele tener hasta 8 caracteres (letras, nmeros y algunos smbolos), debe comenzar con minscula. UNIX distingue entre maysculas y minsculas. En el ingreso al sistema, no se permiten correcciones.
<mensaje del da>

se despliega siempre despus del login, es puesto por el administrador del sistema para informacin o bienvenida.
<noticias>

aviso de noticias nuevas. Las noticias se usan para informaciones generales de mayor tiempo de validez. Las noticias no aparecen ms despus de haber sido ledas. Para leer las noticias debe digitarse el comando news.
You have mail

indica que hay mensajes de otros usuarios, o del sistema. El correo electrnico permite a cualquier usuario enviar y recibir mensajes.
$

es el indicador de comandos del sistema; indica que el sistema est listo y aguarda una orden del operador, que debe ser escrita a continuacin de $ y finalizada con la tecla <Enter>. En los siguientes ejemplos debe escribirse el comando tal cual se muestra, digitando la tecla <Enter> al final.
date

comando que muestra la fecha y hora.


who

muestra los nombres de usuarios conectados al sistema en este momento.


hostname

muestra el nombre de la mquina UNIX. Directorios. Cada usuario tiene un directorio propio, llamado a veces "directorio home". Cuando el usuario ingresa al sistema ya est ubicado en su directorio propio. El comando
pwd

muestra el directorio actual.


cd /home cd

cambia hacia el directorio /home, lo que puede verificarse con el comando pwd. 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 cat nota.vacia

muestra datos del archivo creado. 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.


ls -l mensaje1 cat mensaje1

echo Este es el archivo mensaje1 > mensaje1

direcciona la salida del comando echo y graba la leyenda en el archivo 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 ? 5 h h q borra mensaje corriente, marcado con '>' muestra lista de comandos para manejo de mensajes muestra el mensaje 5 muestra la lista de mensajes 3 muestra la lista de mensajes comenzando en el 3 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 finger

proporciona datos de identificacin del usuario indicado (jperez). 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; CtrlD 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 MSWindows 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> <Ctrl-Q> detiene despliegue. 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.

GNU info
es un programa del proyecto GNU para leer o imprimir informacin. Sustituye a las pginas man, forma tradicional de mantener informacin acerca del sistema UNIX. Para obtener informacin sobre info, escribir
info

info info

se basa en hipertexto; la informacin se organiza en "nodos" hacia los cuales es posible desplazarse. Un nodo es el texto que describe una unidad temtica. Los nodos se organizan jerrquicamente. El encabezado de cada nodo muestra el archivo donde se encuentra la informacin, el nombre del nodo actual, el nodo siguiente en la organizacin temtica, el nombre del nodo previo en la organizacin temtica, y el nodo superior en la jerarqua de informacin. El tema del nodo aparece en doble subrayado.
info

Ejemplo de pantalla de info:

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

Node: Top, Node: Top,

Next: What is Info, Next: What is Info,

Up: (dir) 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:: Cursor Commands:: Scrolling Commands::

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

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

Menes: Los menes tienen esta estructura: * Menu: * Item1: Ttulo-item1 * Item2: Ttulo-item2 Descripcin ttulo item 1 Descripcin ttulo item 2

Para ir hacia un item de men: colocar el cursor y dar Enter; Ctrl-g para arrepentirse (antes de dar el Enter). Otra forma: m, luego el nombre del item o las primeras letras, TAB puede completar cuando las letras son suficientes Para volver al nodo superior, u. Elegir un item de men "baja" a ese nodo; con u se "sube" de regreso a l.
* Item3::

A este nodo (con ::) se llega slo con dar Enter con el cursor sobre l.
* Note Cross: Ref-Cruzada Referencia cruzada

Para ir a una referencia cruzada, f. Con f? se muestra la lista de referencias cruzadas en el nodo actual. Ctrl-g cancela. Para terminar, q. Para volver a la informacin de info, m, luego Info. Teclas:
h ? Ctrl-g Ctrl-L ESPACIO BS o Del b n p m f u l d q 1..5 g invoca tutorial de info lista de comandos de info, l para salir aborta lo que se est haciendo refresco de pantalla avanzar en el texto retroceder en el texto comienzo del nodo nodo siguiente en la ordenacin temtica nodo previo en la ordenacin temtica elegir item de men, ir hacia ese nodo seguir una referencia cruzada a nodo superior nodo anterior visitado (last) a nodo directorio salir de info elegir item 1 .. 5 del men de nodo mover a un nodo indicando su nombre; puede darse el nombre de archivo, as (nombre-archivo)nombre-nodo s buscar una cadena de caracteres, elegir el nodo de la siguiente ocurrencia

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

digitar las siguientes lneas, tal cual estn, terminando cada lnea dando <Enter>; finalizar con <CtrlD>. Digitar con cuidado: una vez pasados al rengln siguiente, no puede volverse atrs para corregir.
El shell es un intrprete de comandos. Es tambin un lenguaje de programacin. Los programas escritos con el shell se llaman scripts.

Digitar <Ctrl-D> para finalizar el ingreso.


cat nota

muestra el contenido digitado.

Crear del mismo modo el archivo LEAME, haciendo


cat > LEAME

con este contenido:


Este es el archivo LEAME. Recuerde que UNIX diferencia entre maysculas y minsculas. El archivo LEAME tendr este contenido.

cat LEAME

para verificar el contenido. Comandos en el sistema UNIX. En UNIX, los comandos son programas ejecutables separados. El shell es un intrprete de comandos: puede expandir y cambiar la manera en que actan los comandos, admite el uso de comodines y la interconexin o entubamiento de comandos. Estructura de comandos. La estructura general de un comando es la siguiente:
nombre opciones argumentos

es el nombre del comando. Las opciones o banderas controlan la forma en que acta el comando; van precedidas por el signo - (menos). Losargumentos son comnmente nombres de archivos o nombres de login de usuarios.
nombre pr -l23 nota pr -l23 LEAME

da formato y muestra el archivo indicado en pginas de 23 lneas de largo para que quepa en la pantalla.
pr -d -l23 LEAME

muestra el archivo LEAME a doble espacio, largo de pgina 23.


pr -d -o15 -l23 LEAME

doble espacio, margen izquierdo de 15 espacios, largo de pgina 23.


pr -l23 nota LEAME | more

muestra los dos archivos uno tras otro, pero los pagina separados.
cat nota LEAME

concatena los archivos; los presenta uno tras otro.


cat nota LEAME | pr -l23

concatena los archivos y luego les da formato a los dos juntos. Expansiones de la lnea de comando. Los comodines son caracteres que sustituyen cadenas de caracteres.
* ? secuencia de caracteres cualesquiera, 0 o ms. caracter cualquiera, uno y uno slo; debe aparear un caracter.

[...] sustituye los caracteres indicados individualmente.

Variables de ambiente. Las variables de ambiente son cadenas de caracteres de la forma


nombre=valor

es cualquier cadena de caracteres que no incluya $ ni espacio (\b); puede incluir el espacio si el valor est entre comillas.
nombre

valor

es cualquier cadena;

MUESTRA="hola chicos"

asigna "hola

chicos"

a la variable MUESTRA.

echo $MUESTRA

muestra en pantalla el contenido de la variable MUESTRA. Para exhibir el contenido de una variable de ambiente se escribe echo $nombre-variable. En general, para hacer uso del contenido de una variable, se escribe $nombre-variable.

Es una costumbre muy arraigada en UNIX usar maysculas para los nombres de variable, as como es una regla usar minsculas para los comandos. Las opciones pueden ser maysculas y minsculas; la opcin -a no es lo mismo que -A.

Las variables de ambiente pueden ser usadas como nombres de comando o como argumentos de un comando.
XYZ="cat nota"

$XYZ

la variable XYZ contiene un comando, y al ser invocado su contenido, el comando es ejecutado.

echo hola $MUESTRA chicos

la variable puede usarse en la formacin de cadenas.


echo hola${MUESTRA}chicos

la variable puede embeberse en una cadena; las llaves delimitan el nombre de la variable.
env

muestra las variables de ambiente definidas. Muchas son fijadas en el ingreso del usuario al sistema (variables de login); y otras son propias del shell (variables del shell).
echo $LOGNAME

muestra el nombre de login del usuario.


echo $HOSTNAME

muestra el nombre de la mquina.


echo $NOEXISTE

Las variables no definidas no muestran nada cuando son referenciadas. Entrecomillado de argumentos en la lnea de comandos. Los espacios separan argumentos. El entrecomillado obliga a tratar una cadena con espacios como si fuera un solo argumento. Cuando se usan comillas dobles (" ") el shell interpreta las variables de ambiente includas, actuando segn su contenido:
MUESTRA="Mi nombre de login es $LOGNAME" echo $MUESTRA

Cuando se usan comillas simples (' ') el shell no interpreta las variables de ambiente, tratando sus nombres como cadenas:
MUESTRA='La variable $LOGNAME contiene su nombre de login' echo $MUESTRA

Las comillas simples permiten usar comillas dobles:


echo '"hola chicos"'

PS1.

Aunque generalmente los omitimos, en los ejemplos de esta seccin mostraremos el indicador de comandos y la salida de ejecucin. La variable smbolo de indicador de comandos nivel 1 PS1 (Prompt Symbol level 1) es un valor de ambiente que puede no aparecer en la salida de env:
$ echo $PS1 $

responde con el indicador de comandos actual, $.


$ PS1=hola: hola:

carga un nuevo indicador de comandos; el sistema responde con el nuevo indicador de comandos, hola:.
hola: MUESTRA="ingrese comando:" hola: PS1=$MUESTRA ingrese comando: MUESTRA=hola ingrese comando: echo $MUESTRA hola ingrese comando:

la variable MUESTRA cambi pero el indicador no cambi;


ingrese comando: PS1='$' $

repone el indicador de comandos. Entrada estndar y salida estndar. Los comandos leen como entrada una secuencia de caracteres (flujo de entrada o "input stream"), y escriben a la salida otra secuencia de caracteres (flujo de salida o "output stream"). Estas secuencias no tienen estructura interna alguna, y se les llama entrada estndar y salida estndar.
cat nota > nota2

redirige la salida estndar a un archivo que crea o sobreescribe, en vez de a la pantalla.


mail juan < nota

toma la entrada estndar de un archivo en vez del teclado.


pr < nota > nueva.nota

el archivo nota es la entrada, el archivo nueva.nota es la salida.

cat nueva.nota

muestra el archivo donde se grab la salida con formato.

Los smbolos < y > redirigen entrada y salida estndar:


< nombre_entrada > nombre_salida

redirige la entrada estndar redirige la salida estndar

MUESTRA=/etc/passwd pr < $MUESTRA > lista.usuarios more lista.usuarios

Los comandos y los archivos tienen una estructura orientada a caracter. En muchos comandos se puede intercambiar teclado por archivos o dispositivos de hardware.

cat nota cat < nota

son comandos equivalentes porque cat opera sobre un archivo y tambin sobre la entrada estndar.
cat nota LEAME nueva.nota cat nota - nueva.nota < LEAME

son comandos equivalentes. El signo menos (-) aislado equivale a tomar en ese punto la entrada estndar, que usualmente est asignada al teclado. Fin de flujo. El ingreso de datos desde el teclado, as como el despliegue en pantalla, se manejan en UNIX como "flujos de caracteres", una serie de caracteres uno tras otro. Para indicar en el teclado el fin de un flujo de caracteres se usa Ctrl-D. Este smbolo no forma parte del ingreso; simplemente indica el final del ingreso, que ya no se escribir ms. En UNIX no hay un caracter especial para indicar fin de archivo; el sistema sabe cuando termina un archivo por medio de contadores.

cat nota - nueva.nota > arch.salida

procesa el archivo nota, lee lo que se digite en el teclado hasta recibir un Ctrl-D, procesa nueva.copia y escribe todo en el archivo arch.salida; se renen tres fuentes distintas en una nica salida.

cat arch.salida

muestra todo lo reunido. Agregar la salida estndar a un archivo.


cat < nota > nota.copia cat nota nota.copia > doble.nota rm nota.copia doble.nota

contiene nota dos veces. Se logra lo mismo con

cat nota > dup.nota cat nota >> dup.nota

El smbolo >> redirige la salida estndar a un archivo, pero agregando al final del mismo en lugar de reemplazar su contenido. Error estndar. Adems de los flujos de entrada y salida estndar, existe un tercer flujo de caracteres, el error estndar, hacia donde se dirigen los mensajes de error. El error estndar est dirigido habitualmente a la pantalla, pero mediante 2> o 2>> se redirige el error estndar hacia un archivo de errores. Los flujos estndar se reconocen por los siguientes nmeros:
0 1 2 la entrada estndar, usualmente el teclado; la salida estndar, usualmente la pantalla; el error estndar, usualmente la pantalla.

echo Archivo de errores > salida.error cat noexiste 2>>salida.error cat salida.error

el archivo salida.error contiene el mensaje inicial y el de error.


ls noexiste 2>>salida.error rm noexiste 2>>salida.error cat salida.error

rene los mensajes de error en el archivo salida.error . Interconexin de comandos (entubamiento).

El operador | hace que la salida del comando precedente sea la entrada del comando siguiente, creando un entubamiento o interconexin de comandos.
cat nota LEAME | pr > salida

hace que la concatenacion de los archivos nota y LEAME sea servida al comando pr, cuya salida est redirigida a un archivo.
cat - LEAME < nota | pr > salida

tiene el mismo efecto. Notar la posicion de redireccion <.

Los operadores < y > redirigen, | conecta comandos. Filtros. Muchos comandos estn pensados para ser interconectados, pasando simplemente la entrada hacia la salida, por lo que se les llama habitualmente filtros.
echo 'hola chicos' | tr l p tr

traduce caracteres y produce 'hopa chicos'.


echo 'hola chicos' | tr lo pa

produce 'hapa chicas'. Campos y delimitadores. Un campo es una cadena de caracteres separada por un caracter delimitador. El archivo /etc/passwd tiene en cada lnea una serie de campos separados por dos puntos (:) .
more /etc/passwd

muestra el contenido de /etc/passwd.


cut -f1 -d: < /etc/passwd cut -f1,3,5 -d: < /etc/passwd

muestra los campos pedidos usando el delimitador : (dos puntos).


cut -c1-8 < /etc/passwd

muestra columnas 1 a 8.
ls -l | cut -c56-

corta el listado de archivos desde donde empieza el nombre al final.


sort < /etc/passwd | cut -f1 -d: | more

ordena las lneas, corta el primer campo y presenta los nombres de usuarios habilitados en el sistema.
env | cut -f1 -d= | sort

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

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

# $

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

Estas variables se interrogan como $# y El operador grave.

$$.

El acento grave (`) asigna a una variable de ambiente la salida estndar de un comando. El largo de la variable es limitado, pero usualmente > 5120 en SVR4.
MUESTRA=`echo $LOGNAME` echo $MUESTRA

escribe el nombre de login del usuario.


wc /etc/passw

cuenta lneas, palabras y caracteres.

El comando wc (word count) acepta opciones -l para lneas, -w para palabras y -c para caracteres.

TOTALPALABRAS=`cat * | wc -w` echo $TOTALPALABRAS

cuenta las palabras en todos los archivos del directorio. Tambin


echo `cat * | wc -w` echo Total de palabras en el directorio: `cat * | wc -w`

El acento grave permite ejecutar un comando dentro de otro, encerrando el comando anidado entre acentos graves. Secuencias de comandos. El shell es tambin un lenguaje de programacin. Pueden escribirse varios comandos en una misma lnea separndolos con ; (punto y coma).
date ; echo Hola ; echo $LOGNAME MUESTRA=`date ; echo Hola ; echo $LOGNAME`;echo $MUESTRA

Redireccin del shell. El shell que atiende los comandos del usuario es el login shell; arranca cuando el usuario ingresa al sistema y termina cuando sale. Escribir sh como comando invoca una segunda instancia del shell, que puede terminarse con el comando exit o con <Ctrl-D>. Puede crearse un archivo de comandos haciendo
cat > datos.usuario

y escribiendo las siguientes lneas. Pueden omitirse los comentarios (de # en adelante)
echo Salida del comando datos.usuario echo Fecha: `date ` echo Usuario: $LOGNAME ps echo Shell actual: $$ # fecha y hora # nombre de login del usuario # procesos corriendo del usuario # nmero de proceso para el shell actual

finalizar con <Ctrl-D>. Los # indican comentario. Para convertir el archivo en ejecutable para el usuario, hacer
chmod u+x datos.usuario

Verificar con ls

-l.

Los comandos ingresados en el archivo pueden ejecutarse con

sh datos.usuario

Este comando invoca una nueva instancia de shell que no es la del ingreso al sistema.

Agregar una lnea ms haciendo


cat datos.usuario - >> masdatos.usuario

y escribiendo
cat noexiste # intenta mostrar un archivo inexistente

Finalizar con <Ctrl-D>.

echo "Archivo de errores del usuario" > errores.usuario

coloca una lnea descriptiva en el archivo errores.usuario.


cat errores.usuario

verifica su contenido.

sh <masdatos.usuario >salida.usuario 2>>errores.usuario

lee los comandos del archivo masdatos.usuario en la entrada estndar, redirige la salida estndar al archivo salida.usuario y redirige la salida del error estndar al archivo errores.usuario.
cat salida.usuario cat errores.usuario

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

UNIX y C El sistema operativo UNIX suele venir acompaado de un compilador para lenguaje C. Escribiendo programas en lenguaje C es posible crear comandos indistinguibles de los propios de UNIX. Como ejemplo, puede crearse el siguiente archivo, usando un editor de texto sencillo como el ae, o el comando cat si se tiene f en la propia digitacin.

Contenido del archivo hola.c:

/* hola.c: programa de saludo */

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

Compilar el contenido de este archivo con el comando


cc hola.c -o hola

Esto crea el archivo de salida hola, ejecutable en UNIX mediante el comando


./hola

Imprime, como es de suponer, la frase "Hola mundo". Un ejemplo ms interesante, con uso de llamadas a la biblioteca del sistema, es el ejemplo siguiente, una versin muy mnima del comando cat, que llamaremoscati.

Contenido del archivo cati.c:

/* cati: cat versin mnima */ # define LARGO 1024 /* define valor de variable LARGO */ main() { char bufer[LARGO]; int n;

/* declara un arreglo de caracteres */ /* para contar caracteres ledos */

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

n = read(0, bufer, sizeof bufer); } exit(0); }

/* siguientes lecturas */

/* sale devolviendo cdigo de retorno 0 */

Los extensos comentarios explican el funcionamiento. Compilar este programa con el comando
cc cati.c -o cati

Esto crea el archivo de salida cati, ejecutable en UNIX. El comando


./cati <hola.c

muestra el contenido del programa hola.c. Esta versin mnima slo funciona redireccionando la entrada estndar. Puede probarse su funcionamiento ingresando datos desde el teclado, finalizando con Ctrl-D. El programa puede interrumpirse con Ctrl-C. Qu diferencia hay? Es un problema de programacin algo ms complejo asimilar un nombre de archivo como parmetro y hacer que el programa despliegue el contenido de este archivo.

La razn por la que estos programa se invocan como ./hola y no simplemente hola es que el directorio actual no est habitualmente en la va de bsqueda de ejecutables (variable PATH). Colocando las versiones ejecutables de los programas hola o cati en un directorio como /bin los hara ejecutables directamente como cualquier comando de UNIX.

Estos ejemplos muestran la versatilidad de UNIX como sistema operativo: puede uno ampliarlo con comandos construdos por uno mismo que se integran perfectamente a los comandos propios del sistema. En las distribuciones de UNIX de dominio pblico suelen venir los fuentes en C de todos los comandos, lo cual permite, al usuario con conocimento suficiente, modificar o corregir estos programas.

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

El sistema UNIX funciona totalmente en base a archivos. Los programas, los datos, los directorios y an los controladores de dispositivos tales como discos, modems e impresoras, son archivos. El sistema de archivos de UNIX se organiza en una jerarqua de directorios que resulta en una estructura arborescente. Archivos. Cada archivo tiene asociado un nombre, un contenido, un lugar de ubicacin e informacin de tipo administrativo, tal como dueo y tamao. El contenido de un archivo puede ser texto, programas fuente, programas ejecutables, imgenes, sonidos y otros. Estructuralmente un archivo es una secuencia de bytes de datos que reside en forma semipermanente en algn medio estable, como ser una cinta magntica o un disco.

Directorios. Los archivos se agrupan en directorios. Un directorio es un archivo que contiene una lista de nombres de archivo e informacin acerca de los mismos. Dentro del sistema de archivos, un directorio es una localizacin capaz de contener otros directorios o archivos. Dos archivos que se encuentren en distinto directorio pueden tener el mismo nombre sin confundirse. El comando ls permite listar el contenido de un directorio:
ls /var

el argumento es un directorio; la salida son los nombres de archivos y subdirectorios en ese directorio.
ls nota

el argumento es un archivo, la salida es el nombre del archivo.


ls -l /var

muestra los archivos y subdirectorios contenidos en /var en formato largo.


ls -ld /var

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

no lo muestra, pero s
rm .noseve

ls -a.

lo borra como a cualquier archivo.

Directorio propio. Directorio actual. Al ingresar al sistema cada usuario entra en su directorio propio, un directorio privado que no es tocado por el sistema ni por los otros usuarios. El directorio en el cual se encuentra posicionado el usuario en un momento dado se denomina su directorio actual.
cd /usr/bin pwd

cambia al directorio /usr/bin; el directorio actual es /usr/bin.


cd pwd

devuelve al usuario a su directorio propio, que es ahora el directorio actual.


echo $HOME

nuestra el nombre del directorio propio. HOME es una variable de ambiente que contiene el nombre del directorio propio del usuario.
cd $HOME

tiene el mismo efecto que cd. Nombres de directorios. Un directorio puede contener otros directorios as como archivos ordinarios, lo que genera una jerarqua o rbol de directorios. El directorio superior o directorio raz se denomina /.
cd / pwd

el directorio actual es el directorio raz.


cd

vuelve al directorio propio del usuario.

El caracter / se usa tambin para separar los componentes de un nombre de archivo completo: /export/home/usuario1/nota. La porcin /export/home/usuario es la ruta, nota es el nombre del archivo. Si se omite la ruta, se asume que el archivo se encuentra en el directorio actual. Un nombre tal como indica que su ruta comienza a partir del directorio actual. Sera lo mismo escribir ./textos/libro/capitulo.1 ya que el punto designa el directorio actual. Dos puntos seguidos designan el directorio de nivel superior al actual. Si el directorio actual es /home/usuario1
textos/libro/capitulo.1

ls ../usuario2

muestra el contenido de los archivos en /home/usuario2

El caracter / separa directorios includos como parte de un nombre de archivo o directorio.


ls dir1

es un direccionamiento relativo;
ls /home/esteban/dir1

es un direccionamiento absoluto.

Pueden usarse comodines para referenciar directorios y archivos:


cat /home/esteban/*/*

Cambios en la jerarqua de directorios.


mkdir nuevo.dir

crea un nuevo directorio.


rmdir nuevo.dir

borra un directorio existente; acta slo sobre directorios vacos.


mkdir dir1 mkdir dir1/dir2 touch dir1/dir2/arch2 dir1/arch1 ls -lR

muestra todos los archivos y directorios creados;


rm -r dir1

borra el directorio y todos los archivos y subdirectorios que pueda contener. Estructura interna de los archivos. Un archivo es una secuencia de bytes. Un byte es equivalente a un caracter. El sistema no impone estructura alguna a los archivos ni asigna significado a su contenido; el significado de los bytes depende totalmente de los programas que interpretan el archivo. En ningn caso hay ningn byte que no haya sido colocado por el usuario o un programa. No hay caracter de fin de archivo. El ncleo del sistema UNIX se mantiene al tanto del tamao de los archivos sin introducir ningn caracter especial. El

caracter nuevalnea es interpretado por las terminales como nueva lnea y retorno de carro (CR LF, carriage-return y linefeed), necesario para desplegar correctamente los renglones en la terminal. Al apretar la tecla Enter el ncleo transmite a la terminal CR LF, pero en un archivo se guarda slo LF. Qu hay dentro de un archivo? El ncleo no puede decirnos nada del tipo de archivo: no lo conoce. Todos los archivos tienen la misma estructura interna. El comando file hace una conjetura: lee algunos bytes y busca indicios sobre el tipo de contenido. En los sistemas UNIX hay slo una clase de archivo. Lo nico que se requiere para accederlo es su nombre. Propiedad de los archivos. Cada usuario es dueo de los archivos creados por l, hasta que los borre o los ceda a otro usuario. Cada usuario pertenece a un grupo, y puede compartir archivos con los usuarios de ese grupo. Cada archivo est asignado a un grupo de usuarios, al cual debe pertenecer su dueo. El comando ls -l muestra dueo y grupo de los archivos listados. Tipo y permisos de archivos. Cada archivo tienen un conjunto de permisos asociados con l que determinan qu puede hacerse con el archivo y quin puede hacerlo. Los permisos de un archivo se indican con 10 caracteres: 1 caracter para tipo de archivo, 3 caracteres [rwx] para permisos del dueo, 3 caracteres [rwx] para permisos del grupo, 3 caracteres [rwx] para permisos de otros. Caracter para tipo de archivo:
d l b c

directorio enlace simblico archivo normal archivo controlador de dispositivo orientado a bloques archivo control de dispositivo orientado a caracteres

Caracteres de permisos:
r w x

acceso de lectura (read) acceso de escritura (write) acceso de ejecucin (execute)

cuyo significado vara segn se trate de archivos o directorios:

Permi Archivos so r leer archivos grabar en un archivo ejecutar como programa sin derechos

Directorios ver contenido de directorios crear y borrar archivos

x -

ingresar a un directorio sin derechos

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

El sistema de archivos en UNIX. Un sistema de archivos en UNIX puede contener miles de archivos, cientos de directorios y cientos de enlaces simblicos, dependiendo de la distribucin y de lo que se haya instalado. Como referencia, la distribucin Debian/GNU 2.1 viene con cerca de 2500 paquetes para instalar. Una instalacin normal puede insumir un 25% en herramientas de administracin, y un 10 % en herramientas de desarrollo. Borrar, alterar o cambiar permisos de archivos puede conducir a resultados impredecibles.
$ ls -F /

es til para recorrer el sistema de archivos, bajando luego a los subdirectorios. Los requerimientos de las redes cambiaron la organizacin funcional del sistema de archivos. En un lugar grande, la red se configura con un conjunto de mquinas heterogneas, cada una responsable del mantenimento y uso de cada archivo. Los archivos pueden ser especficos para cierta mquina, compartidos por varias mquinas del mismo tipo, o accesibles a casi cualquier tipo de mquina en la red. Enlaces simblicos hacia la anterior localizacin de los archivos ayudan al acceso. Un directorio puede ser real o un enlace simblico a otro; usar /bin/pwd para si se ha llegado al directorio directamente o a travs de un enlace simblico.

Convenciones en nombres de archivos y directorios.


/bin /boot /cdrom /dev archivos ejecutables, comandos de usuario archivos de arranque punto de montaje para la uniad de CD-ROM archivos especiales de dispositivos [subdirectorios propios de System V] ./dsk ./fd ./kd ./kmem ./null ./osm ./pts ./rdsk ./term ./xt /dosc /etc ./init.d ./rc?.d dispositivos de disco dispositivos descriptores de archivo dispositivos de teclado y despliegue memoria dispositivo para descarte de salidas mensajes de error del ncleo pseudo ttys; igual que /dev/pts* dispositivos crudos de disco terminales; igual que /dev/tty* pseudo ttys; para capas DMD punto de montaje para la particin DOS configuracin de paquetes, configuracin de sistema scripts de arranque y detencin de programas enlaces a scripts, con K o S (Kill o Start), y nmero de secuencia para controlar el arranque ./skel /export /floppy /home /lib /lost+found /mnt /proc /root /sbin /tmp archivos de inicializacin para nuevos usuarios directorios de usuarios en sistemas grandes para montar una unidad de disquete objetos relacionados con los usuarios bibliotecas de desarrollo y material de apoyo archivos perdidos punto de montaje de dispositivos externos archivos de control de procesos directorio propio para el supervisor (root) archivos ejecutables de administracin archivos temporales

/usr ./X11R6 ./bin ./doc ./include ./info ./lib ./local ./man ./sbin ./share ./src /var ./backup ./catman ./lib ./lock ./log ./spool

ejecutables, documentacin, referencia sistema X-Windows ms ejecutables documentos de paquetes de software encabezados .h de bibliotecas en C archivos de info, informacin de UNIX (GNU) ms bibliotecas en C ejecutables instalados por el administrador subdirectorios de pginas del manual ms archivos ejecutables de administracin compartidos (source) cdigo fuente del kernel archivos de log, auxiliares, archivos que crecen respaldo de algunos archivos del sistema pginas man ya formateadas informacin propia de programas control de bloqueos archivos de registro de mensajes (log) del sistema colas de impresin, intermedios de correo y otros ./run informacin de procesos (PIDs)

Preguntas y Ejercicios. Bibliografa. Comandos:


ls cat cd echo file mkdir pwd rm rmdir touch

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

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

copia el archivo nota en nota.copia. Si el directorio propio del usuario es /home/usuario1,

cp ./nota /home/usuario1/nota.copia

hace lo mismo indicando las rutas. Si el archivo destino existe lo sobreescribe y realiza la copia sin comentario ni advertencia.

mkdir dir1 cp nota dir1

si el destino es un directorio, el archivo se copia en ese directorio.

cp nota LEAME dir1

pueden copiarse varios archivos hacia un directorio.

mkdir dir2 touch dir2/arch2 dir2/arch3 ls dir2 cp dir2/* .

copia todos los archivos en dir2 hacia el directorio actual.

Para copiar un directorio es preciso usar la opcin -r, de "recursivo":


cp -r dir1 dir3 ls -l dir3

copia el directorio dir1 y todo el contenido en el

dir3.

rmdir dir3

fracasa porque dir3 no est vaco.


rm -r dir3

con la opcin -r, "recursivo", se puede borrar completamente un directorio y todo su contenido, sean estos archivos o subdirectorios.

rm -r dir1/* dir2

borra todos los archivos bajo dir1 y

dir2;

borra tambin el directorio dir2 pero no el

dir1.

rm arch? nota.copia

borra del directorio actual los archivos arch1,

arch2,

.., y

nota.copia.

Mover, cambiar de nombre.


echo "Hola todos" > hola cat hola mv hola saludo cat saludo mv

cambia el nombre del archivo hola por el de saludo.

mv saludo dir1/saludo.1

mueve hacia otro directorio cambiando el nombre.

mv dir1 dirnuevo

cambia de nombre archivos o directorios.

rm -r dirnuevo

elimina dirnuevo y todos sus archivos. Enlaces "hard". Un enlace "hard" (hard link) es una nueva referencia a un mismo archivo; consiste en una nueva entrada de directorio que apunta a un archivo ya existente y apuntado desde otra entrada de directorio. El contenido se encuentra en un solo lado, pero el archivo puede ser accedido desde varios lugares, eventualmente con diferentes nombres.
echo 'Hola todos de nuevo!' > adios ln adios adios.ln0

ln crea un segundo nombre referido al mismo archivo; no se hace copia, crea un enlace (link). Verificar que
ls -l adios*

muestra un conteo de 2 en la columna de enlaces. Al crear el enlace con el comando ln, observar que el archivo existente va en primer lugar, luego uno o ms nombres de enlaces a crear.

ln adios adios.ln1 ln adios adios.ln2 ls -l adios*

muestra el conteo de enlaces hard en estos archivos.

mkdir dir2 ln adios dir2/adios

hace aparecer en dir2 un enlace llamado adios hacia el archivo adios del directorio actual. Un enlace hard puede hacer aparecer un mismo archivo en ms de un directorio, con igual o distinto nombre; el contenido est en un solo lado, no est repetido.

rm adios* ls -l dir2/adios

Cuando se borra un archivo con varios enlaces, slo se borra el enlace. El archivo es realmente borrado slo cuando desaparece el ltimo enlace.
ln dir2 dir2ln

da error; no se puede crear un enlace hard para un directorio. Enlaces simblicos. Un enlace simblico (symbolic link) es un archivo que apunta a otro archivo o directorio. El archivo de enlace simblico contiene solamente la ruta del otro archivo o directorio.
ln -s nota nota.ls0

crea nota.ls0 como enlace simblico.

ln -s dir2 dir2ls

crea dir2ls como enlace simblico hacia un directorio.


ls -l

muestra la letra l en el tipo de archivo para indicar que es un enlace simblico.


ls dir2

ls dir2ls

muestran el mismo contenido de archivos.


ls -l dir2ls

muestra que es un enlace simblico e indica hacia donde apunta.

cd dir2ls ls -l

muestra el contenido de dir2, enlazado desde dir2ls.


pwd

indica el directorio con nombre del enlace, pero


/bin/pwd

muestra el directorio verdadero, no el enlace simblico; pwd indica la ruta por la que se lleg al directorio, /bin/pwd indica la ruta de acceso al verdadero directorio. Conviene usar /bin/pwd para evitar ser engaado por enlaces simblicos a directorios. El comando pwd es interno del shell, /bin/pwd es un programa aparte.

cd .. mv dir2 DIR2

cambia el nombre del directorio real; el enlace simblico sigue apuntando a


cd dir2ls

dir2,

por lo que

da error, ya que no existe el objeto real.


mv DIR2 dir2

repone el nombre original al que apunta el enlace.


rmdir dir2ls

da error porque no es un directorio sino un enlace.


rm dir2ls

borra el enlace. Un enlace simblico se borra con rm, y no con rmdir, puesto que el enlace simblico es un archivo y no un directorio, an cuando sea un enlace simblico hacia un directorio.
ls dir2

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

Opciones del comando ls.


ls -1

muestra un item por lnea. Cuando ls se usa en interconexiones, la salida de lnea por defecto.
ls -C

ls

presenta un item por

fuerza el despliegue encolumnado.


ls -a

muestra todos los archivos, incluyendo los que comienzan con punto, normalmente no mostrados. El directorio corriente . y el directorio padre .. son entidades reales.

ls -F /bin ls -F

agrega sufijo que indica el tipo de archivo: / directorio, * ejecutable, @ enlace simblico.

ls -R

muestra recursivamente todos los archivos, subdirectorios y archivos dentro de subdirectorios. Para ver un listado ms largo,
ls -CR /etc | more

ln -s dir2 dir2ls ln nota nota.ln0 ls -l

listado largo, muestra atributos de los archivos: tipo de archivo (primer caracter), permisos (9 caracteres), enlaces hard (en archivos), dueo, grupo, tamao en bytes, fecha y hora, nombre.
-rw-r--r-- 1 esteban other 138 Apr 5 19:34 LEAME drwxr-xr-x 2 esteban other 138 Apr 5 19:34 dir2 lrw-r--r-- 1 esteban other 138 Apr 5 19:34 dir2ls ->./dir2 -rw-rw-rw- 1 esteban other 138 Apr 5 19:34 nota

El smbolo -> indica "apunta hacia" para enlaces simblicos. Cambio de dueo y grupo.
chown usuario1 nota

cambia el dueo del archivo nota adjudicndoselo a


chown usuario1 arch1 arch2

usuario1.

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

chgrp tecnicos nota

cambia de grupo el archivo notas, adjudicndoselo al grupo tecnicos. El dueo debe pertenecer al grupo tecnicos.
chgrp tecnicos arch1 arch2

cambia el grupo de la lista de archivos. Modos de permisos. Los permisos de archivos y directorios se cambian con el comando chmod. Pueden expresarse de dos maneras: simblica y absoluta. En la forma simblica, se usa la siguiente sintaxis:

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

+ = r w x s t u g o

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

todos (dueo, grupo y otros)

Ejemplos de permisos en notacin simblica:


u+r g+w-r ug+r ugo+w-rx u+rwx,g+r-wx,o-rwx

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

cambian los permisos de los archivos indicados.

En modo absoluto se usa un cdigo de 4 dgitos octales 0..7, en la forma Nnnn.


N,

primer dgito:

4 fijar ID del dueo al ejecutar 2 fijar ID del grupo al ejecutar 1 fijar "sticky bit" a un directorio nnn,

3 dgitos: permisos del usuario, grupo y otros, con el cdigo

4 lectura

2 escritura 1 ejecucin, o acceso si es directorio

Ejemplos de permisos en notacin absoluta:


0777 0755 0764 0640 0710

chmod 0764 arch1

cambia los permisos como en el ejemplo anterior. Listado de permisos de los directorios.
ls -l

muestra los permisos y otros atributos.

Para obtener informacin del directorio dir1 ubicado en el directorio actual,


ls -l

lista todos los archivos, entre los que aparece dir1;


ls -l dir1

lista el contenido del directorio dir1.


ls -ld dir1

trata la entrada dir1 como archivo, sin listar su contenido, y dando sus atributos como directorio.
ls -ld .

muestra atributos del directorio actual. Cambio de permisos.


chmod u-w nota

quita permisos de escritura al dueo.


chmod u+w nota

concede permisos de escritura al dueo.


chmod u-w+x nota chmod u-wx+r nota

cambian varios permisos del dueo al mismo tiempo.


chmod u+w nota chmod g+w nota chmod o+w nota

concede permiso de escritura solo al usuario, al grupo o a otros.


chmod u+rw-x,g+r-wx,o+r-wx nota

fija todos los permisos en una sola operacin. Los permisos que no se mencionen quedan como estn.
chmod 0644 nota

realiza lo mismo en notacin absoluta.

El comando chmod admite las opciones


-v verboso, describe los permisos cambiados

-f no da error sobre permisos que no pueden cambiarse -R recursivo, cambia permisos de directorios y sus archivos

chmod -v u+rwx,g+rw-x,o+r-wx arch1 chmod -v 764 arch1 chmod -v 444 arch1 chmod u=rw,go=r arch1

fija permisos en rw-r--r--.


chmod u=rwx,u+s arch1 ejecutar

arch1 con permiso del dueo de arch1.

chmod -vR a+r dir1

da permiso de lectura a todos los directorios bajo dir1, anunciando en forma verbosa lo hecho.

chmod ugo+rwx dirtodos chmod a+t dirtodos

fija "sticky bit": a pesar de tener el directorio permisos totales para todos, slo pueden borrarse los archivos propios del usuario, no los ajenos.
chmod 1777 dirtodos

realiza lo mismo.

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

muestra la variable de ambiente que contiene el nombre del editor por defecto. Si no aparece nada, inicializarla:

which vi

para obtener la va hacia el editor vi.


EDITOR=/usr/bin/vi echo $EDITOR

muestra el nombre del editor a usar por defecto.

MIEDITOR=`basename $EDITOR` echo "Mi editor es $MIEDITOR"

muestra el nombre del archivo sin ruta; basename quita la ruta a un nombre de archivo calificado con ruta.
DIREDITOR=`dirname $EDITOR` dirname

separa la ruta del nombre completo.

echo "Mi editor es $MIEDITOR en el directorio $DIREDITOR"

muestra el uso en comandos de variables de ambiente.


echo "Mi editor es "`basename $EDITOR`" en "`dirname $EDITOR`

muestra el uso del operador grave para ejecutar comandos dentro de otros comandos. Archivos de dispositivos. El sistema de archivos de UNIX provee una interface estndar entre los dispositivos de hardware y el sistema operativo que acta igual que un archivo comn: todas las operaciones de entrada y salida se hacen escribiendo y leyendo sobre un archivo. No se trata de un archivo comn en disco; acta como una ruta hacia un canal de entrada/salida del hardware. As como se redirige la salida de un comando hacia un archivo, puede redirigirse tambin hacia un disco, una cinta o un mdem con slo mencionar el nombre del dispositivo correspondiente.
tty

devuelve el nombre del dispositivo asociado al terminal, por ejemplo /dev/tty1. Tomando ese mismo nombre
ls -l /dev/tty1

obtenemos un listado de atributos del "archivo" controlador de este dispositivo, algo as como
crw-rw-rw- 1 usuario1 otros .... /dev/tty1

El primer caracter indica el tipo de dispositivo: c si es orientado a caracteres, b si es orientado a

bloques. Terminales, impresoras y modems son orientados a caracter, discos y cintas son orientados a bloque.

cat - < /dev/tty1

para escuchar en la propia sesin de terminal; escribir varias lneas y finalizar con Ctrl-D.
cat - < `tty`

produce el mismo efecto. Luego probar


$ cat - > `tty`

puede explicarse el comportamiento? El comando mesg.


ls -l `tty`

Si otros usuarios pueden leer y escribir en este dispositivo, tambin pueden ver lo que se est haciendo o an escribir directamente en el terminal redirigiendo su salida. Esto se usa en los comandos wall (write all, escribir a todos) y write (escribir mensajes entre usuarios).

mesg

muestra si est habilitada o no la recepcin de mensajes.


mesg y

cambia permisos de grupo y otros en el dispositivo, aceptando mensajes.


mesg n

rechaza mensajes. Verificar con


ls -l `tty`

que muestra los permisos que regulan la terminal del usuario.

ls -l /dev/tty?

muestra los permisos de las terminales principales;


ls -l /dev/tty??

muestra una cantidad de tipos de terminal disponibles. Otros dispositivos.

cat /etc/passwd cat /etc/passwd > /dev/null

El dispositivo /dev/null acta como una papelera de tamao ilimitado que recibe la salida a descartar. No guarda nada; lo que all se enve se pierde para siempre.

Todos los dispositivos de hardware del sistema tienen una representacin en el directorio /dev.

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

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

Como la mayora de las configuraciones en UNIX se manejan editando archivos, disponer de esta capacidad es esencial en la administracin de un sistema. Modos de vi. Existen tres modos o estados en vi:

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

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

Uso avanzado de Invocacin de vi.


vi

vi.

abre la ventana de edicin sin abrir ningn archivo.


vi arch1

edita el archivo arch1 si existe; si no, lo crea.


vi arch1 arch2

edita sucesivamente los archivos arch1 y luego arch2.


vi +45 arch1

edita el archivo arch1 posicionando el cursor en la lnea 45.


vi +$ arch1

edita el archivo arch1 posicionando el cursor al final del archivo.

vi +/Habia arch1

edita el archivo arch1 en la primera ocurrencia de la palabra "Habia". Cambio de modo.


comando a texto: teclas de insercin i I a A o O, o

tecla de sobreescritura R. texto a comando: tecla ESC. comando a ltima lnea: teclas : / ? ltima lnea a comando: tecla ENTER (al finalizar el comando), o tecla ESC (interrumpe el comando).

Confundir un modo con otro la de mayor dificultades para el manejo de vi. Puede activarse un indicador de modo escribiendo
:set showmode

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

en modo comando avanza 10 lneas;


5Y

copia 5 lneas y las retiene para luego pegar. Ejemplos de manejo. Los siguientes ejemplos de manejo asumen que el editor se encuentra en modo comando.
flechas mueven el cursor (si el terminal lo permite)

h j k l itextoESC x dw dd 3dd u ZZ :q!ENTER

mueven el cursor (igual que las flechas) inserta la palabra "texto" y vuelve a comando borra el caracter sobre el cursor borra una palabra borra una lnea borra las 3 lneas siguientes deshace ltimo cambio graba cambios y sale de vi sale de vi sin grabar cambios busca la expresin indicada

/expresinENTER 3Y :6r arch3

copia 3 lneas para luego pegar inserta debajo de la lne 6 el archivo arch3

Movimiento del cursor:


flechas mover en distintas direcciones

h o BS l o SP k o j o + $ 0 1G G 18G Ctrl-G w e E b ^ % H L M 23|

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

Control de pantalla.
Ctrl-f una pantalla adelante

Ctrl-b Ctrl-l Ctrl-d Ctrl-u

una pantalla atrs redibujar la pantalla media pantalla adelante media pantalla atrs

Ingreso en modo texto:


i I a A o O R insertar antes del cursor insertar al principio de la lnea insertar despus del cursor insertar al final de la lnea abrir lnea debajo de la actual abrir lnea encima de la actual sobreescribir (cambiar) texto

Borrar
x borrar caracter bajo el cursor

dd D dw d$ d0

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

Copiar y pegar
Y o yy copiar lnea

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

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

Bsqueda
/str buscar hacia adelante cadena de caracteres 'str'

?str n N fc Fc tc Tc ; ,

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

ltimo comando f, F, t, o T para el otro ladoLa cadena a buscar en / o ? puede ser una expresin regular. La accin de f, F, t y T alcanza slo a la lnea actual; si el caracter buscado no est en esa lnea el cursor no se mueve.

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

Otros
J unir dos lneas en una

ZZ u U

grabar cambios si los hubo y salir deshacer ltima accin 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 :q! :w :w arch1 :wq :r arch2 :e arch2 :e! arch2 :r! comando :shell

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

Mover
:1 :15 :$ mueve a lnea 1 mueve a lnea 15 mueve a ltima lnea

Opciones
:set :set :set :set :set nu nonu showmode noshowmode cambio de opciones mostrar nmeros de lnea no mostrar nmeros de lnea mostrar modo actual de vi no mostrar modo actual de vi

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


:<desde>,<hasta>s/<buscar>/<reemplazar>/g <desde>, <hasta>

indican lneas en el archivo; <buscar> y <reemplazar> son cadenas de caracteres o expresiones regulares; / es un separador, s (sustituir) y g(global) son letras de comando para el manejo de expresiones regulares.

:1,$s/Martes/martes/g

cambia Martes por martes en todo el archivo.


:.,5s/ayuda/&ndo/g

cambia ayuda por ayudando desde lnea actual hasta la 5a. lnea. Tipo de terminal. es independiente del tipo de terminal, pero la variable de ambiente TERM debe estar fijada correctamente. Si no se conoce o no existe el tipo exacto de terminal, en la mayora de los terminales remotos el tipo ansi da buenos resultados. Para fijar el terminal en tipo ansi, digitar
vi TERM=ansi;export TERM

Algunos comandos, especialmente more y a veces vi, pueden no responder bien en la terminal o el emulador que se est usando. En estos casos, puede usarse Ctrl-L para refrescar la pantalla.

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

Expresiones Regulares. La expresiones regulares (ER) son una forma de describir cadenas de caracteres. Se usan en operaciones de apareamiento o comparacin. Las expresiones regulares permiten realizar bsquedas o sustituciones de gran complejidad. Las bsquedas en el editor vi con los comandos / y ? aceptan expresiones regulares; esto hace las bsquedas mucho ms potentes y flexibles. Las expresiones regulares son aceptadas en otros editores y en muchos comandos, si bien con algunas diferencias de sintaxis. Una expresin regular es un patrn que describe un conjunto de cadenas de caracteres. Por ejemplo, el patrn aba*.txt describe el conjunto de cadenas de caracteres que comienzan con aba, contienen cualquier otro grupo de caracteres, luego un punto, y finalmente la

cadena txt. El smbolo * se interpreta como "0, 1 o ms caracteres cualesquiera". Las expresiones regulares se construyen como las expresiones aritmticas, usando operadores para combinar expresiones ms pequeas. Analizaremos esos operadores y las reglas de construccin de expresiones regulares, atendiendo siempre al conjunto de cadenas que representa cada patrn. Metacaracteres. La construccin de expresiones regulares depende de la asignacin de significado especial a algunos caracteres. En el patrn aba*.txt el caracter * no vale por s mismo, como el caracter asterisco, sino que indica un "conjunto de caracteres cualesquiera". Asimismo, el caracter ? no se interpreta como el signo de interrogacin sino que representa "un caracter cualquiera y uno solo". Estos caracteres a los que se asigna significado especial se denominan "metacaracteres". El conjunto de metacaracteres para expresiones regulares es el siguiente:
\ ^ $ . [ ] { } | ( ) * + ?

Estos caracteres, en una expresin regular, son interpretados en su significado especial y no como los caracteres que normalmente representan. Una bsqueda que implique alguno de estos caracteres obligar a "escaparlo" de la interpretacin mediante \, como se hace para evitar la interpretacin por el shell de los metacaracteres del shell. En una expresin regular, el caracter ? representa "un caracter cualquiera"; si escribimos \?, estamos representando el caracter ? tal cual, sin significado adicional. Expresiones Regulares Bsicas. Una expresin regular determina un conjunto de cadenas de caracteres. Un miembro de este conjunto de cadenas se dice que aparea, equipara o satisface la expresin regular. ERs de un slo caracter. Las expresiones regulares se componen de expresiones regulares elementales que aparean con un nico caracter:
Exp.Reg. c . [abc] [^abc]

aparea con ER que aparea con el caracter ordinario c (punto) ER que aparea con un caracter cualquiera excepto nueva lnea ER de un caracter que aparea con a, b o c ER de un caracter que no sea a, b o c

[0-9][a-z][A- ERs de un caracter que aparean con cualquier caracter en el intervalo indicado. El signo - indica

Z]

un intervalo de caracteres consecutivos. ER que aparea con alguno de estos caracteres (en lugar de la e):
. * [ \

cuando no estn dentro de [ ] al principio de la ER, o al principio dentro de [ ] al final de una ER

\e

^ $

usado para delimitar una ER

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

Por ejemplo, [[:alnum:]] significa [0-9A-Za-z], pero esta ltima expresin depende de la secuencia de codificacin ASCII, en cambio la primera es portable, no pierde su significado bajo distintas codificaciones. En los nombres de categoras, los parntesis rectos forman parte del nombre de la categora, no pueden ser omitidos. Construccin de Expresiones Regulares. Una Expresin Regular se contruye con uno o ms operadores que indican, cada uno, el caracter a buscar. Los operadores ms comunes y aceptados son los siguientes:
Operador
c \c ^

Significado un caracter no especial concuerda consigo mismo elimina significado especial de un caracter c; el \ escapa el significado especial indica ubicado al comienzo de la lnea (cadena nula al principio de lnea)

$ . [...] [^...] r* r1r2

indica ubicado al final de la lnea (cadena nula al final de lnea) (punto) un caracter individual cualquiera uno cualquiera de los caracteres ...; acepta intervalos del tipo a-z, 0-9, A-Z (lista) un caracter distinto de ... ; acepta intervalos del tipo a-z, 0-9, A-Z 0, 1 o ms ocurrencias de la ER r (repeticin) la ER r1 seguida de la ER r2 (concatenacin)

Ejemplos de Expresiones Regulares Bsicas. Las expresiones regulares se aprenden mejor con los ejemplos y el uso.
Exp.Reg.
a.b a..b [abc] [aA] [aA][bB] [0123456789] [0-9] [A-Za-z] [0-9][0-9][0-9] [0-9]* [0-9][0-9]* ^.*$

aparea con axb aab abb aSb a#b ... axxb aaab abbb a4$b ... a b c (cadenas de un caracter) a A (cadenas de un caracter) ab Ab aB AB (cadenas de dos caracteres) 0123456789 0123456789 A B C ... Z a b c ... z 000 001 .. 009 010 .. 019 100 .. 999
cadena_vaca 0 1 9 00 99 123 456 999 9999 ...

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

En el editor
/^Desde

vi,

las expresiones regulares permiten realizar bsquedas tales como:

busca lneas que empiecen con la cadena

Desde

/final$

busca lneas que termine con la cadena


/\$25

final

busca lneas que contengan

$25;

\ escapa el $

Expresiones Regulares Extendidas. Algunos comandos, como egrep o grep -E, aceptan Expresiones Regulares Extendidas, que comprenden las Expresiones Regulares Bsicas ms algunos operadores que permiten construcciones ms complejas. Los operadores incorporados son los siguientes:
Operador
r+ r? r{n} r{n,} r{,m} r{n,m} r1|r2 (r) "r"

Significado 1 o ms ocurrencias de la ER r 0 o una ocurrencia de la ER r, y no ms n ocurrencias de la ER r n o ms ocurrencias de la ER r 0 o a lo sumo m ocurrencias de la ER r n o ms ocurrencias de la ER r, pero a lo sumo m la ER r1 o la ER r2 (alternativa) ER anidada evita que los caracteres de la ER r sean interpretados por el shell

La repeticin tiene precedencia sobre la concatenacin; la concatenacin tiene precedencia sobre la alternativa. Una expresin puede encerrarse entre parntesis para ser evaluada primero. Ejemplos de Expresiones Regulares Extendidas:
Exp.Reg.Ext.
[0-9]+ [0-9]? ^a|b (ab)* ^[0-9]?b ([0-9]+ab)*

aparea con
0 1 9 00 99 123 456 999 9999 99999 99999999 .. cadena_vaca 0 1 2 .. 9 a b cadena_vaca ab abab ababab ... b 0b 1b 2b .. 9b cadena_vaca 1234ab 9ab9ab9ab 9876543210ab 99ab99ab ...

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

Filtros.
sort grep find fgrep y egrep tr uniq dd Preguntas y Ejercicios Bibliografa y Referencias

Se da el nombe de filtros a un grupo de comandos que leen alguna entrada, realizan una transformacin y escriben una salida. Adems de los que veremos aqu, incluye comandos tales como head, tail, wc, y cut. sort La comparacin u ordenacin puede ser por caracteres ASCII o por valor numrico. La ordenacin ASCII es la ms parecida a la alfabtica; sigue el orden del juego de caracteres ASCII. En este ordenamiento, los caracteres idiomticos (vocales acentuadas, ) no se encuentran en el orden alfabtico tradicional. En la ordenacin numrica se respeta la ordenacin por valor numrico de la cadena de caracteres: 101 va despus de 21; en ordenamiento ASCII sera al revs.
sort arch1

ordena segn el cdigo ASCII.


sort -n arch2.num

ordena numricamente.

Si no se indican campos de ordenacin, la comparacin se hace sobre toda la lnea. Si se indican campos, la comparacin se hace considerando la cadena de caracteres iniciada en el primer caracter del primer campo hasta el ltimo caracter del ltimo campo.
sort -t: -k1,3 arch1.txt

ordena por campos separados por ":", tomando en cuenta para la comparacin los caracteres desde el primero del campo 1 hasta el ltimo del campo 3.
sort -t: -k1.3,3.5 arch1.txt

ordena por campos tomando en cuenta desde el 3er. caracter del campo 1 hasta el 5to. caracter del campo 3.
sort -nr arch2.num

ordena en orden numrico descendente.


sort -k3 arch3.txt

ordena alfabticamente, usando como cadena de comparacin la comprendida desde el primer caracter del 3er. campo hasta el fin de lna. Como no se indica separador, los campos se definen por blancos (espacio o tabulador). find El comando find explora una rama de directorios buscando archivos que cumplan determinados criterios. El comando find en GNU es extremadamente potente, permitiendo criterios de bsqueda tales como:

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

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

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

find /var -name *.log -print

busca en el directorio /var los archivos terminados en .log, imprime sus nombres en la salida.
find /tmp -size +200k -print

busca archivos mayores de 200k. En los argumentos numricos, +N es mayor que N, -N es menor que N, N es exactamente igual a N.
find /var/spool/mail -atime +30 -print

busca archivos no accedidos hace ms de 30 das. La opcin -atime se refiere a tiempo transcurrido desde ltima lectura, -mtime desde ltima modificacin de estado o permisos, -ctime de contenido.
find /var/tmp -empty -exec rm {} \;

busca archivos vacos y los borra.


find /home -nouser -ls

busca archivos en los cuales en lugar del nombre de usuario dueo aparece un nmero (UID). Esta situacin se da cuando la cuenta de usuario ha sido borrada pero han permanecido los archivos creados por ese usuario. grep El comando grep (Global Regular Expression and Print) permite buscar las lneas que contienen una cadena de caracteres especificada mediante una expresin regular. Lee la entrada estndar o una lista de archivos y muestra en la salida slo aquellas lneas que contienen la expresin indicada. La sintaxis es
grep patrn archivos

donde el patrn a buscar es una expresin regular. Crear un archivo con los das de la semana, uno por lnea; llamarle dias.
grep martes dias grep tes dias

muestra las lneas del archivo dias que contienen la cadena "tes".

grep unix01 /etc/passwd grep unix0[1-9] /etc/passwd

ls -l /usr | grep '^d'

lista slo los subdirectorios del directorio /usr (la lnea empieza con "d").

ls -l / | grep '.......rw'

lista slo los archivos que otros pueden leer y escribir en el directorio principal.

grep '^[^:]*::' /etc/passwd

busca usuarios sin contrasea; caracteres al principio de lnea que no sean ":", y luego "::" (el segundo lugar, que es el de la contrasea, est vaco).

grep '^[^:]*:\*:' /etc/passwd

busca usuarios que no pueden entrar al sistema; tienen un * en el lugar de la contrasea; \ escapa el significado del segundo *, que vale como caracter a buscar.

Ninguna expresin regular de grep aparea con un caracter nueva lnea; las expresiones se aplican individualmente a cada lnea. Entre las opciones de grep se cuentan -i para evitar distinguir entre maysculas de minsculas, -n para mostrar el nmero de lnea y -v para buscar lneas que no contengan la expresin regular indicada. fgrep y egrep Hay dos versiones de grep que optimizan la bsqueda en casos particulares: (fixed grep, o fast grep) acepta solamente una cadena de caracteres, y no una expresin regular, aunque permite buscar varias de estas cadenas simultneamente;
fgrep egrep fgrep

(extended grep), que acepta expresiones regulares extendidas con los operadores + ? | y parntesis.

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

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

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.

Programacin del Shell


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

El intrprete de comandos o "shell" de UNIX es tambin un lenguage de programacin completo. La programacin de shell se usa mucho para realizar tareas repetidas con frecuencia. Los diseadores de sistemas suelen escribir aplicaciones en el lenguaje de base del sistema operativo, C en el caso de UNIX, por razones de rapidez y eficiencia. Sin embargo, el shell de UNIX tiene un excelente rendimiento en la ejecucin de "scripts" (guiones); sta es la denominacin aplicada a los programas escritos en el lenguaje del shell. Se han creado aplicaciones completas usando solamente scripts. Comandos multilnea. Una lnea de comando termina con un caracter nuevalnea. El caracter nuevalnea se ingresa digitando la tecla ENTER. Varios comandos pueden escribirse en una misma lnea usando el separador ";"
echo $LOGNAME; pwd; date

Si un comando no cabe en una lnea, la mayora de los intrpretes continan la digitacin en la lnea siguiente. Para establecer especficamente que un comando contina en la lnea siguiente, hay dos formas, mutuamente excluyentes (se usa una u otra, pero no ambas al mismo tiempo):

- terminar la primera lnea con \ :


$ echo $LOGNAME \ > $HOME

que muestra algo como


jperez /home/jperez $ echo "$LOGNAME > $HOME"

- dejar una comilla sin cerrar: que produce el mismo resultado. En los ejemplos anteriores hemos escrito los indicadores de comando. Al continuar el comando en la segunda lnea, el indicador de comandos cambia de $ a >, es decir, del indicador de comando de primer nivel PS1 al indicador de comando de segundo nivel PS2. Si no se quiere terminar el comando multilnea, puede interrumpirse el ingreso con Ctrl-C, volviendo el indicador de comando a PS1 inmediatamente. El archivo de comandos (script). Es cmodo poder retener una lista larga de comandos en un archivo, y ejecutarlos todos de una sola vez slo invocando el nombre del archivo. Crear el archivomisdatos.sh con las siguientes lneas:
# misdatos.sh # muestra datos relativos al usuario que lo invoca # echo "MIS DATOS." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date echo # fin misdatos.sh

El smbolo # indica comentario. Para poder ejecutar los comandos contenidos en este archivo, es preciso dar al mismo permisos de ejecucin:
chmod ug+x misdatos.sh bash misdatos.sh misdatos.sh

La invocacin (ejecucin) del archivo puede realizarse dando el nombre de archivo como argumento a bash o invocndolo directamente como un comando Puede requerirse indicar una va absoluta o relativa, o referirse al directorio actual,
./misdatos.sh

si el directorio actual no est contenido en la variable PATH. Comentarios en los scripts. En un script todo lo que venga despus del smbolo # y hasta el prximo caracter nuevalnea se toma como comentario y no se ejecuta.
echo Hola todos # cat /etc/passwd # comentario hasta fin de lnea

slo imprime "Hola todos". no ejecuta nada, pues el smbolo # convierte toda la lnea en comentario. Los scripts suelen encabezarse con comentarios que indican el nombre de archivo y lo que hace el script. Se colocan comentarios de documentacin en diferentes partes del script para mejorar la comprensin y facilitar el mantenimiento. Un caso especial es el uso de # en la primera lnea para indicar el intrprete con que se ejecutar el script. El script anterior con comentarios quedara as:

#!/bin/bash # misdatos.sh # # muestra datos propios del usuario que lo invoca # echo "MIS DATOS." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date # muestra fecha y hora echo # lnea en blanco para presentacin # fin misdatos.sh

La primera lnea indica que el script ser ejecutado con el intrprete de comandos bash. Esta indicacin debe ser siempre la primera lnea del script y no puede tener blancos. Estructuras bsicas de programacin. Las estructuras bsicas de programacin son slo dos: la estructura repetitiva y la estructura alternativa. Cada forma tiene sus variaciones, y la combinacin de todas ellas generan mltples posibilidades, pero detrs de cualquiera de ellas, por compleja que parezca, se encuentran siempre repeticiones o alternativas. Estructura repetitiva: se realiza una accin un cierto nmero de veces, o mientras dure una condicin.
mientras haya manzanas, pelarlas; desde i = 1 hasta i = 7 escribir dia_semana(i);

Esta escritura informal se denomina "pseudocdigo", por contraposicin al trmino "cdigo", que sera la escritura formal en un lenguaje de programacin. En el segundo ejemplo, dia_semana(i) sera una funcin que devuelve el nombre del da de la semana cuando se le da su nmero ordinal. Estructura alternativa: en base a la comprobacin de una condicin, se decide una accin diferente para cada caso.
si manzana est pelada, comerla, en otro caso, pelarla; # orculo caso $estado en soltero) escribir "El casamiento ser su felicidad"; casado) escribir "El divorcio le devolver la felicidad"; divorciado) escribir "Slo ser feliz si se vuelve a casar"; fin caso

Funciones: una tarea que se realiza repetidamente dentro del mismo programa puede escribirse aparte e invocarse como una "funcin". Para definir una funcin es preciso elegir un nombre y escribir un trozo de cdigo asociado a ese nombre. La funcin suele recibir algn valor como "parmetro" en base al cual realiza su tarea. Definida as la funcin, para usarla basta escribir su nombre y colocar el valor del parmetro entre parntesis.
funcin area_cuadrado (lado) devolver lado * lado;

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

Comandos de programacin. En esta seccin veremos los comandos tpicos de programacin del shell. Obsrvese que el shell toma la convencin inversa de C para cierto y falso: cierto es 0, y falso es distinto de 0. El shell adopta esta convencin porque los comandos retornan 0 cuando no hubo error. Veremos dos comandos, true y false, que retornan siempre estos valores; se usan en algunas situaciones de programacin para fijar una condicin. true Este comando no hace nada, slo devuelve siempre 0, el valor verdadero. La ejecucin correcta de un comando cualquiera devuelve 0.
true echo $?

muestra el valor 0; la variable $? retiene el valor de retorno del ltimo comando ejecutado. false Este comando tampoco hace nada slo devuelve siempre 1; cualquier valor diferente de 0 se toma como falso. Las diversas condiciones de error de ejecucin de los comandos devuelven valores diferentes de 0; su significado es propio de cada comando.
false echo $?

muestra el valor 1. if El comando if implementa una estructura alternativa. Su sintaxis es


if expresin ; then comandos1 ; [else comandos2 ;] fi

o tambin

if expresin then comandos1 [else comandos2] fi

Si se usa la forma multilnea cuando se trabaja en la lnea de comandos, el indicador cambia a > hasta que termina el

comando. La expresin puede ser cualquier expresin lgica o comando que retorne un valor; si el valor retornado es 0 (cierto) los comandos1 se ejecutan; si el valor retornado es distinto de 0 (falso) los comandos1 no se ejecutan. Si se us la forma opcional con else se ejecutan los comandos2.
if true; then echo Cierto ; else echo Falso ; fi

siempre imprime Cierto; no entra nunca en else.


if false; then echo Cierto ; else echo Falso ; fi

siempre imprime Falso, no entra nunca en then. Construcciones ms complejas pueden hacerse usando elif para anidar alternativas. Escribir en un archivo las lneas que siguen
# ciertofalso.sh: escribe cierto o falso segn parmetro numrico # if [ $1 = "0" ] then echo "Cierto: el parmetro es 0." else echo "Falso: el parmetro no es 0." fi

Convertir el script en ejecutable. Invocar este script con


./ciertofalso.sh N

donde N es un nmero entero 0, 1, 2, etc. La variable $1 hace referencia a este parmetro de invocacin. Verificar el resultado. Crear y ejecutar el siguiente script:
# trabajo.sh: dice si se trabaja segn el da # invocar con parmetros: # domingo, feriado, u otro nombre cualquiera # if [ $1 = "domingo" ] then echo "no se trabaja" elif [ $1 = "feriado" ] then echo "en algunos se trabaja" else echo "se trabaja" fi

for Este comando implementa una estructura repetitiva, en la cual una secuencia de comandos se ejecuta una y otra vez. Su sintaxis es
for variable in lista ; do comandos ; done

Se puede probar en la lnea de comandos:

for NUMERO in 1 2 3 4 ; do echo $NUMERO ; done for NOMBRE in alfa beta gamma ; do echo $NOMBRE ; done for ARCH in * ; do echo Nombre archivo $ARCH ; done

El caracter * es expandido por el shell colocando en su lugar todos los nombres de archivo del directorio actual. Crear y probar el siguiente script.
# listapal.sh: lista de palabras

# muestra palabras de una lista interna # LISTA="silla mesa banco cuadro armario" for I in $LISTA do echo $I done # fin listapal.sh

En el siguiente script, el comando expr calcula expresiones aritmticas; notar su sintaxis.


# contarch.sh # muestra nombres y cuenta archivos en el directorio actual # CUENTA=0 for ARCH in * do echo $ARCH CUENTA=`expr $CUENTA + 1` # agrega 1 a CUENTA done echo Hay $CUENTA archivos en el directorio `pwd` # fin contarch.sh

case Este comando implementa alternativas o "casos"; elige entre mltiples secuencias de comandos la secuencia a ejecutar. La eleccin se realiza encontrando el primer patrn con el que aparea una cadena de caracteres. Su sintaxis es
case $CADENA in patrn1) comandos1;; patrn2) comandos2;; ... *) comandosN;; esac

El patrn * se coloca al final; aparea cualquier cadena, y permite ejecutar comandosN cuando ninguna de las opciones anteriores fue satisfecha. Crear el siguiente script:
# diasemana.sh: nombres de los das de la semana # invocar con nmero del 0 al 6; 0 es domingo case $1 in 0) echo Domingo;; 1) echo Lunes;; 2) echo Martes;; 3) echo Mircoles;; 4) echo Jueves;; 5) echo Viernes;; 6) echo Sbado;; *) echo Debe indicar un nmero de 0 a 6;; esac

Invocarlo como
diasemana.sh N

donde N es cualquier nmero de 0 a 6, otro nmero, o una cadena cualquiera. Verificar el comportamiento. Crear el archivo estacion.sh con estas lneas:
# estacion.sh # indica la estacin del ao aproximada segn el mes

# case $1 in diciembre|enero|febrero) echo Verano;; marzo|abril|mayo) echo Otoo;; junio|julio|agosto) echo Invierno;; setiembre|octubre |noviembre) echo Primavera;; *) echo estacion.sh: debe invocarse como echo estacion.sh mes echo con el nombre del mes en minscula;; esac # fin estacion.sh

El valor $1 es el parmetro recibido en la lnea de comando. La opcin *) aparea con cualquier cadena, por lo que acta como "en otro caso"; es til para dar instrucciones sobre el uso del comando. En las opciones, | acta como OR; pueden usarse tambin comodines * y ?. Invocar el script:
bash estacion.sh octubre bash estacion.sh

Cmo podra modificarse el script anterior para que aceptara el mes en cualquier combinacin de maysculas y minsculas? while Este comando implementa una estructura repetitiva en la cual el conjunto de comandos se ejecuta mientras se mantenga vlida una condicin (while = mientras). La condicin se examina al principio y luego cada vez que se completa la secuencia de comandos. Si la condicin es falsa desde la primera vez, los comandos no se ejecutan nunca. Su sintaxis es
while condicin ; do comandos ; done

En el guin que sigue la expresin entre parntesis rectos es una forma de invocar el comando test, que realiza una prueba devolviendo cierto o falso. El operador-lt, "lower than", significa "menor que". Observar su sintaxis, sobre todo la posicin de los espacios en blanco, obligatorios.
# crear1.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 while [ $VAL -lt 10 ] # mientras $VAL < 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done ls -l arch[0-9] rm arch[0-9] # fin crear1.sh

until Este comando implementa una estructura repetitiva en la cual el conjunto de comando se ejecuta hasta que se cumpla una condicin. En cuanto la condicin se cumple, dejan de ejecutarse los comandos. La condicin se examina al principio; si es verdadera, los comandos no se ejecutan. Notar la diferencia con while. Su sintaxis es
until condicin ; do comandos ; done

Usando until, el script anterior se escribira

# crear2.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 until [ $VAL -eq 10 ] # hasta que $VAL = 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done ls -l arch[0-9] rm arch[0-9] # fin crear2.sh

exit Este comando se utiliza en programacin de shell para terminar inmediatamente un script y volver al shell original.
exit

en un script, termina inmediatamente el script; en la lnea de comando, termina la ejecucin del shell actual, y por lo tanto la sesin de UNIX.
exit 6

termina el script devolviendo el nmero indicado, lo que puede usarse para determinar condiciones de error.
exit 0

termina el script devolviendo 0, para indicar la finalizacin exitosa de tareas. Escribir slo exit tambin devuelve cdigo de error 0. El siguiente script ofrece un ejemplo de uso.
#!/bin/bash # exitar.sh: prueba valores de retorno de exit # clear echo "Prueba de valores de retorno" echo " Invocar con parmetros " echo " bien, error1, error2, cualquier cosa o nada" echo " Verificar valor de retorno con" echo ' echo $?' echo VALOR=$1 case $VALOR in bien) echo " -> Terminacin sin error." exit 0;; error1) echo " -> Terminacin con error 1." ; exit 1;; error2) echo " -> Terminacin con error 2." ; exit 2;; *) echo " -> Terminacin con error 3." echo " (invocado con parmetro no previsto o sin parmetro." exit 3;; esac

expr Este comando recibe nmeros y operadores aritmticos como argumentos, efecta los clculos indicados y devuelve el resultado. Cada argumento debe estar separado por blancos. Opera slo con nmeros enteros y realiza las operaciones suma (+), resta (-), multiplicacin (*), divisin entera (/), resto de divisin entera (%). Los smbolos * y / deben ser escapados escribiendo \* y \/, al igual que los parntesis, que deben escribirse \( y \).

El comando expr usa la convencin de C para cierto y falso: 0 es falso, y distinto de 0 es cierto. No confundir con la convencin que toma el shell en sus valores true y false, que es la contraria.
expr 4 + 5

devuelve 9 ( 4 + 5 = 9 ).
expr 3 \* 4 + 6 \/2

devuelve 15 ( 3 * 4 + 6 /2 = 15 ).
expr 3 \* \( 4 + 3 \) \/2

devuelve 10 ( 3 * (4 + 3) / 2 = 10 ). tambin realiza operaciones lgicas de comparacin, aceptando los operadores =, "no igual"; el ! se usa para negar. Estos caracteres tambin requieren ser escapados.
expr echo `expr 6 \< 10` !=, >, <, >= y <=.

El operador != es

devuelve 1, cierto para expr.


echo `expr 6 \> 10`

devuelve 0, falso para expr.


echo `expr abc \< abd`

devuelve 1, cierto para expr. test Este comando prueba condiciones y devuelve valor cierto (0) o falso (distinto de 0) segn el criterio de cierto y falso del shell; esto lo hace apto para usar en la condicin de if. Tiene dos formas equivalentes
test expresin [ expresin ]

Los blancos entre la expresin y los parntesis rectos son necesarios.


test if if if if test

devuelve cierto ante una cadena no vaca, y falso ante una cadena vaca:
test "cadena" ; then echo Cierto ; else echo Falso; fi test "" ; then echo Cierto ; else echo Falso ; fi [ cadena ] ; then echo Cierto ; else echo Falso; fi [ ] ; then echo Cierto ; else echo Falso ; fi

prueba una cantidad de condiciones y situaciones:

if [ -f archivo ]; then echo "Existe archivo"; \ else echo "No existe archivo"; fi

La condicin [ -f archivo ] es cierta si archivo existe y es un archivo normal; anlogamente, -r comprueba si es legible, -w si puede escribirse, -x si es ejecutable, -d si es un directorio, -s si tiene tamao mayor que 0. Las condiciones
[ $DIR = $HOME ] [ $LOGNAME = "usuario1" ] [ $RESULTADO != "error" ]

comparan cadenas de caracteres; = para igualdad y != para desigualdad. La condicin


[ "$VAR1" ]

devuelve falso si la variable no est definida. Las comillas dan la cadena nula cuando VAR1 no est definida; sin comillas no habra cadena y dara error de sintaxis. La condicin
[ expnum1 -eq expnum2 ]

compara igualdad de expresiones que resultan en un nmero. Pueden ser expresiones numricas o lgicas, ya que stas tambin resultan en nmeros. Los operadores numricos derivan sus letras del ingls, y son -eq (igualdad), -neq (no igual, desigualdad), -lt (menor), -gt (mayor), -le (menor o igual), -ge (mayor o igual). El comando test se usa mucho para determinar si un comando se complet con xito, en cuyo caso el valor de retorno es 0. El siguiente script crea un archivo si no existe.

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

crea un archivo de ese nombre; un mensaje ya existe archivo $1

Para comprobar su accin,


bash nvoarch.sh nuevo1 ls -l nuevo1

crea el archivo; ls comprueba que existe;


bash nvoarch.sh nuevo1

da mensaje indicando que el archivo ya existe. Otros operadores aceptados por test son -a (AND) y -o (OR).
# rwsi.sh # indica si un archivo tiene permiso de lectura y escritura ARCH=$1 if [ -r $ARCH -a -w $ARCH ] then echo El archivo $ARCH se puede leer y escribir else echo Al archivo $ARCH le falta algn permiso fi ls -l $ARCH # fin rwsi.sh

read Este comando tiene como propsito solicitar informacin al usuario. Su ejecucin captura las digitaciones del usuario, hasta obtener un caracter nueva lnea (techa Enter). El ejemplo siguiente obtiene datos del usuario, los repite en pantalla, solicita confirmacin y emite un mensaje en consecuencia.
# yo.sh: captura datos del usuario # clear echo "Datos del usuario." echo -n "Nombre y apellido: "; read NOMBRE echo -n "Cdula de identidad: "; read CEDULA echo echo "Ha ingresado los siguientes datos:" echo " Nombre y apellido: $NOMBRE" echo " Cdula de Identidad: $CEDULA" echo -n "Es correcto?(sN):"; read RESP if [ "$RESP" = "s" -o $RESP = "S" ] then echo "Fin de ingreso." else echo "Debe ingresar sus datos nuevamente." fi

Parmetros.

El siguiente programa muestra los parmetros que recibe al ser invocado:


# ecopars.sh # muestra los parmetros recibidos echo Cantidad de parmetros: $# for VAR in $* do echo $VAR done # fin ecopars.sh ecopars.sh Enero Febrero Marzo

muestra la cantidad y los parmetros recibidos. La variable $* contiene la lista de parmetros, y $# la cantidad. Dentro del script, los parmetros recibidos pueden referenciarse con $1, $2, $3, ..., $9, siendo $0 el nombre del propio programa. Debido a que se los reconoce por su ubicacin, se llaman parmetros posicionales. El siguiente programa se invoca con tres parmetros y muestra sus valores:
# mostrar3.sh # se invoca con 3 parmetros y los muestra echo nombre del programa: $0 echo parmetros recibidos: echo $1; echo $2; echo $3 echo # fin mostrar3.sh

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

imprime cada comando en la salida; 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.

Comandos de Usuario
Ultima revisin: Set 2001
Propsito Metalenguaje y convenciones Referencias

Comandos:
apropos banner cal cat cd chmod clear cmp cp cut date diff echo env exit file head hostname id info less ln ls dir vdir mail man mesg mkdir more mv passwd pr printenv ps pwd rm rmdir tail talk touch umask wc whatis which who whoami

Propsito: Esta gua resume la sintaxis, opciones ms frecuentes y ejemplos de uso de los comandos UNIX de ms uso en la prctica. En descripcin se presenta nombre del comando, sintaxis resumida, accin principal, opciones ms usuales, ejemplos y observaciones, si las hay. Esta gua no puede ni pretende sustituir la consulta de las pginas man. Metalenguaje y convenciones:
... [] {A|B} TAB LF CR blanco UID GID (su) repeticin del ltimo item item opcional, puede estar o no item opcional obligatorio, debe tomarse A o B tecla o caracter tabulador caracter nueva lnea caracter retorno de carro caracter TAB o ESPACIO, delimita palabras identificador de usuario (nmero) identificador de grupo (nmero) requiere permiso de supervisor

ESPACIO caracter o tecla de barra espaciadora

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

apropos [OPCIONES] PALABRA-CLAVE ...

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

banner
banner MENSAJE

Muestra el mensaje (cadena de caracteres) en letras grandes y girado 90; para imprimir carteles.
-wN en un ancho de N columnas banner -w 40 Hola! banner a

cal
cal [OPCIONES] [[MES]AO]

Sin parmetros, muestra calendario del mes actual; el ao debe indicarse con centuria, 1-1999; el mes en nmero 1 a 12.
-j -y da juliano, contado desde el 1 de enero calendario del ao en curso cal cal 1998 cal 11 1997 cal 9 1752

muestra el mes del ao en que se saltearon 11 das para compensar aos bisiestos. cat
cat [OPCIONES] [ARCHIVO ...]

Concatena los archivos indicados y los muestra en la salida estndar. Sin argumentos, recibe de la entrada estndar (-).
-A -b -E -n -s -t -v -T equivalente a -vET numera las lneas que no estn en blanco muestra $ al final de cada lnea numera las lneas reemplaza varias lneas en blanco por una sola equivale a -vT muestra caracteres no imprimibles excepto LF y TAB muestra TAB como ^I cat /etc/group cat cap1 cap2 cap3

muestra sucesivamente los archivos cap1, cap2 y cap3.


cat cap1 cap2 cap3 > libro cat arch1 arch2 > arch1

rene los archivos cap1, cap2 y cap3 en el archivo libro. hace perder los datos originales en arch1. cd
cd [DIRECTORIO]

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

chmod
chmod [OPCION] MODO ARCHIVO ...

cambia los permisos de acceso a los archivos indicados. No cambia los permisos de los enlaces simblicos.
-v -R verboso, describe accin sobre cada archivo. recursivo, cambia permisos de subdirectorios y sus contenidos chmod -R 0755 documentos/visibles chmod ug+rw-x,o+r-wx cap*.txt

clear
clear

borra la pantalla del terminal. cmp


cmp [OPCIONES] ARCH1 ARCH2 [SALTEAR1 [SALTEAR2]]

compara dos archivos. Si son iguales, no dice nada; si difieren, marca el byte y el nmero de lnea de la primera diferencia.
-l -s nmero de byte (decimal) y bytes diferentes (octal) para cada diferencia. devueve solamente un valor de retorno, sin escribir nada.

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

copia ARCH_ORIGEN hacia ARCH_DESTINO; copia los archivos indicados hacia DIRECTORIO. Por defecto no copia directorios.
-d -f -i -l -p -s -R -v copia enlaces simblicos como tales forzoso, sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes crea enlaces hard en lugar de copiar los archivos preserva dueo, grupo, permiso y fecha crea enlaces simblicos en lugar de copiar los archivos recursivo, copia directorios y sus archivos verboso, escribe el nombre de cada archivo que copia cp arch1 /dir1/arch1 cp -vi arch1 arch2 cp -dpRv dir1 /dir2/subdir2 dirtodo

mejor forma de copiar exactamente una estructura de directorios, recursivamente, conservando permisos y manteniendo enlaces simblicos; verboso puede omitirse.

cut
cut -f CAMPOS [-d DELIM][ARCHIVO ...] cut -c COLUMNAS [ARCHIVO ...]

extrae partes de cada lnea de los archivos indicados o de la entrada estndar. Los campos y columnas se indican con nmeros 1, 2,... o con intervalos n-m. Intervalos incompletos: -n es 1-n, m- es m hasta el ltimo campo o columna.
-f -c -d -s campos numerados, por defecto separados por TAB columnas, ubicacin posicional de caracteres en la lnea fija el caracter delimitador de campos, TAB por defecto con -f para no imprimir lneas que no contengan el delimitador cat /etc/passwd | cut -d: -f1,3,5-6 cat /etc/passwd | cut -c1-15 ls -l | cut -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 DD HH mm CC YY SS mes (01-12) da (01-31) hora (00-23) mminuto (00-59) centuria ao segundos (00-59)

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

diff
diff ARCHIVO1 ARCHIVO2

muestra las diferencias existentes entre dos archivos.


diff nota1 nota2

echo
echo [OPCIONES] MENSAJE ...

escribe en la salida estndar los mensajes, separados con un espacio y con LF al final. Muchos shells tienen un comando interno del mismo nombre; ste, fuera del shell, debe invocarse como /bin/echo.
-n -e suprime LF al final 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 echo echo echo Hola Todos! -n Hola Todos! -e "\a" -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 directorio dir1.
echo Directorio $HOME ls -l $HOME

dir1,

para listar contenido del

muestra el directorio propio del usuario, guardado en la variable de ambiente HOME. exit
exit [N]

produce la salida del shell con estado de terminacin N (nmero); si no se indica retorna con 0. file
file OPCIONES ARCHIVO

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

file cati.c

este archivo contiene cdigo C.


file adduser

este archivo es un script en Perl.


file /bin/cat

es un ejecutable binario. head


head [OPCIONES] ARCHIVO ...

muestra la primera parte de un archivo, por defecto 10 lneas. Si son varios archivos muestra un encabezado con el nombre de cada archivo.
-v -q -N -n N verboso, imprime encabezamiento con nombre del archivo silencioso, no imprime encabezado con nombre del archivo imprime primeras N lneas, por defecto 10 imprime primeras N lneas

head -24 /etc/inetd.conf

hostname
hostname [NOMBRE]

sin argumentos, da el nombre de la mquina; con NOMBRE, fija el nombre de la mquina (su).
-h -f -d -i -a -v ayuda --fqdn nombre de mquina completo, con dominio DNS --domain nombre de dominio DNS --ip-address direccin (nmero IP) --alias nombres de alias verboso

id
id [OPCIONES] [NOMBRE_USUARIO]

muestra informacin sobre un usuario. Muestra nombre, UID, grupo, GID y grupos suplementarios. Si el id real y el efectivo no corresponden muestra ambos. Las opciones limitan el despliegue.
-g -G -n -r -u slo el grupo primario grupos suplementarios nombre en lugar de nmero; requiere -u, -g, o -G real en lugar de efectivo; requiere -u, -g o -G slo el nmero de usuario (UID) id id webmaster

muestra datos del usuario webmaster. info


info [NOMBRE]

sistema de informacin de GNU sobre UNIX.


info info

muestra informacin sobre info, con tutorial para aprender a manejar info. less
less [OPCIONES] [ARCHIVO]

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

ln
ln [OPCIONES] ORIGEN [DESTINO] ln [OPCIONES] ORIGEN ... DIRECTORIO

si el ltimo argumento es un directorio, ln crea en ese directorio enlaces a todos los archivos origen con el mismo nombre; si slo se indica un nombre de archivo, crea un enlace hacia ese archivo en el directorio actual; si se indican dos archivos, crea un enlace con el primer nombre (archivo real) hacia el segundo (enlace). Por defecto, crea enlaces hard y no elimina archivos existentes.
-f -i -s -v ln ln ln ln forzoso, elimina archivos destino existentes interactivo, pide confirmacin para eliminar archivos simblico, crea enlaces simblicos en lugar de hard verboso, da el nombre de cada enlace creado nota nota.ln -s /etc/passwd -s datos.usuario datos.usu.ln -sv datos.usuario LEAME dir2

ls, dir, vdir


ls [OPCIONES] [NOMBRE]

Para cada nombre de directorio, lista contenido de directorio; para cada nombre de archivo, indica su nombre y datos. La salida est ordenada alfabticamente por defecto. Sin nombre, lista el directorio corriente. La opcin -l muestra, separados por espacios, los campos tipo archivo y permisos, cantidad de enlaces hard, dueo, grupo, tamao, mes, da, hora o ao, nombre.
-1 -a -c -C -d -F -i -k -l -r -R -s -t -u -U -x un nombre de archivo por lnea todos los archivos, incluso no visibles comenzados por . ordenar por fecha de estado de ltimo cambio (ctime en inodo) salida en columnas con ordenamiento por columnas lista directorios como archivos, no su contenido indica tipo: / directorio, * ejecutable, @ enlace simblico inodo, nmero de ndice de cada archivo tamaos en KB listado en formato largo invertir ordenamiento listar recursivamente subdirectorios tamao en bloques de 1024 bytes ordenar por fecha de ltima modificacin (mtime en inodo) ordenar por fecha de ltimo acceso (atime en inodo) no ordenar salida en columnas con ordenamiento por filas

dir

equivale al ls
vdir

-C. -l.

equivale a ls mail

mail [OPCIONES] [DESTINO ...]

procesador de correo electrnico de UNIX. Sin argumentos, muestra lista de mensajes en la casilla de entrada y permite manipularlos. Si hay un destino, lee de la entrada estndar hasta un "." aislado en una lnea y enva lo ledo como mensaje a destino.
-v -s -c -b -f -u verboso, muestra detalles de entrega TEMA especifica el tema (subject) del mensaje LISTA enva copias a LISTA de usuarios, separados por coma LISTA enva copia ciega a LISTA de usuarios [ARCH] lee contenido de archivo propio mbox o el indicado USUARIO equivale a mail -f /var/spool/mail/USUARIO

Comandos internos de mail:


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

enva un mensaje al usuario juan, tema "Saludos para todos", con copia a usuarios pedro y mateo. man
man [OPCIONES] [SECCION] NOMBRE ...

Da formato y muestra las pginas del manual en lnea. Si no se indica seccin, muestra slo la primera que encuentre; si se indica seccin como nmero 1-9, muestra la pgina que haya en la seccin indicada. Las pginas estn organizadas en secciones, reconocidas por un dgito, y eventualmente subsecciones indicadas por una o ms letras.
-a -d -f -h -k -w muestra pginas en todas las secciones muestra informacin de depuracin propia de man equivalente a whatis muestra ayuda para man equivalente a apropos no imprime las pginas, sino las ubicaciones

Secciones del manual: 1 programas ejecutables y guiones (scripts) 2 llamadas al sistema (funciones del ncleo) 3 llamadas a biblioteca (funciones de biblioteca) 4 archivos especiales (generalmente en /dev) 5 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 n permite a otros escribir mensajes en la terminal no permite a otros escribir mensajes en la terminal mesg mesg y mesg n

mkdir
mkdir [OPCIONES] [-m MODO] DIRECTORIO ...

crea los directorios indicados. Por defecto, el modo es 0777 menos los bits de umask.
-m MODO permite fijar el modo para el nuevo directorio; el modo es simblico y usa el modo por defecto como partida. -p crea primero todos los directorios padre inexistentes, con el modo de umask modificado con u+wx --verbose informa sobre la creacin de directorios mkdir dir1 dir2 mkdir -p ltr/jd/jan

crea la estructura de directorios ltr/jd/jan. more


more [OPCIONES][-N][+/CADENA[-N] [ARCHIVO ...]

pagina el texto dividindolo en pantallas, presentando una por vez.


-N 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 ESPACIO ENTER f b ^L = /PATRON ?/PATRON n . q, Q muestra resumen de estos comandos avanza una pantalla muestra siguiente lnea avanza una pantalla; ^F retrocede una pantalla; tambin ^B (Ctrl-L) redibuja la pantalla muestra nmero de lnea actual busca hacia adelante la expresin regular PATRON busca hacia atrs la expresin regular PATRON repetir ltima bsqueda repetir el comando anterior ir a lugar de comienzo de ltima bsqueda 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 -i -v -u forzoso, sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes verboso, escribe el nombre de cada archivo que mueve no mover si existe archivo destino ms nuevo o de igual fecha mv nota notanueva mv -vi LEAME LEAME2 mv -v arch1 notanueva LEAME /dir2/subdir2

passwd
passwd [OPCIONES] [NOMBRE]

cambia la contrasea del usuario. El superusuario puede cambiar las contraseas de otros usuarios. En general, las contraseas deben tener entre 6 y 8 caracteres, contener maysculas, minsculas, dgitos 0 a 9 o signos de puntuacin; no se admiten contraseas simples ni parecidas al nombre del usuario. Si el superusuario asigna contraseas poco seguras no hay advertencia.
-x M -n M -n M mximo nmero de das de validez; luego pide cambiar mnimo nmero de das antes de poder cambiar nmero de das de advertencia antes de expirar

passwd

permite cambiar la contrasea del usuario invocante


passwd jperez

(su) cambia la contrasea del usuario jperez. pr


pr [OPCIONES] ARCHIVO ...

escribe en salida estndar un texto con formato, paginado y opcionalmente en varias columnas.
+P1[:P2] de pgina P1 a pgina P2 -C en C columnas -a escribe las columnas a travs y no hacia abajo -d a doble espacio -f separar pginas con salto de pgina -h reemplazar encabezado con el indicado -l largo de pgina en lneas; por defecto 66 -m escribir archivos en paralelo uno en cada columna -o margen izquierdo; se suma al ancho indicado por -w -w ancho de pgina en columnas; por defecto 72 pr pr ls ls -o8 -l23 -h "Lista de usuarios" /etc/passwd -o2 -l22 -h "Lista de servicios" /etc/services | more /etc | pr -2 -b -l23 | more /etc | pr -3 -b -l23 -a | more

printenv
printenv [VARIABLE] ...

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

ps
ps [OPCIONES] [PID] ...

informa sobre procesos en ejecucin. Para las opciones, no debe usarse -, aunque es aceptado.
l u j s a x w h r formato largo formto usuario, muestra nombre, PID, hora inicio, estado formato trabajos, muestra PGID y SID formato seales mostrar tambin procesos de otros usuarios. mostrar tambin procesos sin terminal de control no truncar lneas para caber en un ancho de pgina; agregar una w para cada lnea ms sin encabezado slo procesos en ejecucin ps auxwww | more

muestra todos los procesos en ejecucin, en formato usuario, an los sin terminal, admitiendo hasta 4 lneas por comando. pwd
pwd

imprime toda la ruta del directorio corriente; todos los componentes mostrados sern los directorios reales, no enlaces simblicos. El shell tiene una versin interna de pwd, por lo que para ejecutar sta, que es externa, es preciso escribir
ls -l /var/spool/mail

muestra /var/spool/mail como enlace simblico a /var/mail (Debian).


cd /var/spool/mail pwd

versin interna del shell, muestra /var/spool/mail, el enlace simblico.


/bin/pwd

versin externa, muestra /var/mail, el directorio real. rm


rm [OPCIONES] NOMBRE ...

elimina los archivos indicados; por defecto no elimina directorios.


-f -i -r, -R -v ignora archivos inexistentes y nunca pide confirmacin interactivo, pregunta antes de eliminar cada archivo. recursivo, borra directorios y su contenido verboso, muestra nombre de cada archivo eliminado

rm arch1 arch2 dir1/arch3 rm -riv dir1/subdir1 rm -r *

elimina TODOS los archivos y subdirectorios; no avisa. Cuidado! rmdir


rmdir [OPCIONES] DIRECTORIO ...

elimina directorios vacos.


-p elimina directorios padre si quedan vacos rmdir dir2 rmdir -p dir1/subdir11/subdir111

tail
tail [OPCIONES] ARCHIVO ...

muestra la ltima parte de un archivo, por defecto 10 lneas. Si son varios archivos muestra un encabezado con el nombre de cada archivo.
-f -v -q -N -n N contina tratando de leer; para archivos en crecimiento verboso, imprime encabezamiento con nombre del archivo silencioso, no imprime encabezado con nombre del archivo imprime ltimas N lneas idem

talk
talk USUARIO [TTY]

conversar con otro usuario. Si est en la misma mquina, alcanza con el nombre de login del usuario; si est en otra mquina, es preciso usar la 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 -m -n -p -r -s -v toda la informacin mquina, tipo de hardware nombre de mquina en la red tipo de procesador edicin (release) del sistema operativo nombre del sistema operativo versin del sistema operativo

wc
wc [OPCIONES] ARCHIVO ...

cuenta lneas, palabras y caracteres de los archivos indicados o de la entrada estndar. Si son varios los archivos, imprime una lnea por cada uno y un total.
-c -w -l slo caracteres slo palabras slo lneas man pwd | wc -l wc /etc/passwd /etc/group

whatis
whatis [OPCIONES] NOMBRE ...

muestra una descripcin corta de los comandos similares a nombre.


-r interpreta cada nombre como una expresin regular -w interpreta cada nombre como conteniendo caracteres comodines whatis man whatis -w man*

which
which PROGRAMA ...

indica la ruta completa de PROGRAMA, si ste est accesible a travs de la variable PATH.. who
who [OPCIONES] [am i]

Quin est en el sistema. Muestra nombre de login, lnea de terminal, hora de ingreso, nombre de mquina remota o display X.

am i -H -u -w -m

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

whoami
whoami

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

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

dd
dd OPCION ...

copia un archivo, de entrada estndar a salida estndar por defecto, opcionalmente cambiando tamao de bloques de entrada salida y realizando diversas conversiones.
if=ARCHIVO leer la entrada del archivo indicado. of=ARCHIVO dirigir la salida al archivo indicado. ibs=BYTES leer la entrada en bloques de BYTES bytes. obs=BYTES grabar la salida en bloques de BYTES bytes. bs=BYTES leer y grabar entrada y salida en bloques. conv=CONVERSION[,CONVERSION]... convertir segn argumentos.

Las opciones numricas admiten los multiplicadores b para 512, k para 1024. Los argumentos de conversin se separan por comas sin espacios; incluyen:
ascii convierte EBCDIC a ASCII. ebcdic convierte ASCII a EBCDIC. ibm convierte ASCII a EBCDIC alternativo. block embloca cada lnea de entrada en 'cbs' bytes, reemplaza nueva lnea por espacio, rellena con espacios. unblock reemplaza espacios finales de cada bloque con nueva lnea. lcase convierte maysculas a minsculas ucase convierte minsculas a maysculas. notrunc no truncar el archivo de salida.

find
find [DIRECTORIO...] [EXPRESION]

Recorre una jerarqua de directorios buscando archivos seleccionados segn cierta expresin y muestra informacin sobre los encontrados. Argumentos numricos:
+N -N N mayor que N menor que N exactamente N.

Criterios de bsqueda:
-name PATRON -iname PATRON -path PATRON -ipath PATRON -regexp EXP -iregexp EXP -lname PATRON -ilname PATRON -atime N -ctime N -mtime N -amin N -cmin N -mmin N -daystart -size N[bckw] -empty -user UNAME -group GNAME -uid N -gid N -nouser -nogroup el nombre aparea con PATRON; idem,insensible a mayculas; nombre con va completa; idem, insensible a maystulas; nombre aparea con expresin regular EXP idem, insensible a maysculas; archivo es un enlace simblico; idem, insensible a maysculas; ltimo acceso N*24 horas atrs ltimo cambio de estado N*24 horas atrs ltima modificacin N*24 horas atrs ltimo acceso N minutos atrs ltimo cambio de estado N minutos horas atrs ltima modificacin N minutos atrs mide tiempos desde las 0 horas de hoy tamao de N bloques, caracteres, KB o palabras (2 bytes) archivo vaco, regular o directorio archivo del usuario UNAME archivo del grupo GNAME archivo del usuario de nmero N archivo del grupo de nmero N archivo sin dueo asignado 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 '{}' ';' find . -name '*.h' -exec diff -u '{}' /tmp/master ';'

busca archivos o directorios vacos y los elimina.

compara archivos de "header" (*.h) del directorio corriente contra el archivo /tmp/master. grep, egrep, fgrep

grep [ -e PATRON | -f ARCHIVO | PATRON ] OPCIONES ARCHIVO ...

recorre los archivos indicados extrayendo las lneas que aparean con un patrn de cadena de caracteres.
-G -E -F el patrn es una expresin regular bsica; opcin por defecto el patrn es una expresin regular extendida el patrn es una cadena fija

Existen dos variantes: egrep, similar a grep

-E,

y fgrep, igual a grep

-F.

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

sort
sort [OPCIONES] [ARCHIVO...]

ordena, mezcla o compara todas las lneas de los archivos indicados o de la entrada estndar. Tiene 3 modos de operacin: ordenar, verificar orden, mezclar archivos.
-c -m verifica si los archivos ya estn ordenados mezcla archivos ordenados en uno solo, ordenado

-b ignora blancos adelante en la ordenacin -d ordena considerando slo letras, nmeros y blancos -f ordena como si todas fueran maysculas -i ignora caracteres no imprimibles (fuera de 040-0176 octal) -n ordena como valores numricos y no como ASCII -r invertir el sentido de la ordenacin -o arch archivo de salida; puede ser el de entrada -t usar el caracter indicado como separador de campos -k POS1[,POS2] campos de ordenacin, POS1 hasta POS2 inclusive; o hasta el final si no hay POS2

Las posiciones POS1 y POS2 son de la forma F.C donde F es el nmero del campo y C es el primer caracter desde el comienzo del campo (para POS1) o desde el final del campo (para POS2); si se omite C se ordena tomando en cuenta el primer caracter del campo.
cat cat cat cat /etc/passwd /etc/passwd /etc/passwd /etc/passwd | | | | sort sort sort sort -t: -t: +4 -f | cut -d: -f5 -t: +5 | cut -d: -f6 -t: -n -k3,5 | cut -d: -f4,5

tr
tr [OPCION]... CONJ1 [CONJ2]

copia entrada en salida traduciendo, comprimiendo o borrando caracteres. CONJ1 y CONJ2 definen un conjunto ordenado de caracteres a transformar. La opcin -c reemplaza CONJ1 por su complemento, los caracteres no especificados en el conjunto.
-d -s elimina los caracteres de CONJ1. comprime caracteres repetidos en CONJ1 en una sola ocurrencia.

-ds primero borra segn CONJ1 y despus comprime segn CONJ2.

El formato de CONJ1 y CONJ2 se parece al de las expresiones regulares, pero son slo listas de caracteres. La mayora de los caracteres se representan a s mismos, pero existen las siguientes abreviaturas:
\a Control-G, \b Control-H, \f Control-L, \' Control-J, \r Control-M, \t Control-I, \v Control-K, \OOO caracter representado por dgitos octales \\ barra inversa. M-N 0-9 intervalo de caracteres desde el M al N (M anterior al N) equivale a 0123456789

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


alnum alpha blank cntrl digit graph lower print punct space upper xdigit letras y nmeros. letras. espacio. caracteres de control. nmeros. caracteres imprimibles, excludo el espacio. minsculas caracteres imprimibles, includo el espacio. signos de puntuacin. espacio maysculas. dgitos hexadecimales.

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

convierten minsculas en maysculas.


tr -d '\000'

elimina caracteres nulos (octal 000).


tr -cs '[a-zA-Z0-9]' '[\n*]'

separa las palabras una por lnea.


tr -s '\n'

comprime caracteres nueva lnea en uno solo (elimina lneas en blanco). uniq
uniq [OPCION]... [ENTRADA [SALIDA]]

muestra una nica lnea para una entrada ordenada, eliminando lneas repetidas sucesivas. Opcionalmente, puede mostrar solo lneas que aparecen una vez, o slo lneas que aparecen varias veces. La entrada debe estar ya ordenada; si no lo est, puede usars sort -u para lograr un efecto similar.
-f N -s N saltear N campos antes de verificar unicidad. saltear N caracteres antes de verificar unicidad.

-c -i -d -u

indicar ignorar mostrar mostrar

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

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