You are on page 1of 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 intérprete 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 operación de la computadora. programas de aplicación (software de aplicación): 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 aplicación. Es un nivel de software por encima del hardware que controla todas las partes del sistema y presenta al usuario una interfaz o máquina virtual. En un sistema de computación se reconocen los siguientes niveles, yendo desde el usuario hacia la máquina física:
• • •

Programas de aplicación: Sistema bancario, Reservaciones aéreas, Juegos. Compiladores, Editores, Intérprete de comandos. Sistema operativo.

Hardware: Lenguaje de máquina: instrucciones directas a la máquina. Tiene de 50 a 300 instrucciones y es muy difícil de programar. Microprogramación: control directo de dispositivos. En memoria de sólo lectura, o a veces en el propio hardware; interpreta el lenguaje de máquina. Dispositivos físicos: 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 podría escribir su propio editor, compilador u otro utilitario. Los programas de aplicación son escritos por los usuarios para resolver problemas particulares. Qué es un sistema operativo.

Como máquina extendida. El sistema operativo presenta al usuario una máquina extendida o máquina virtual más fácil 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 asignación 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 generación (1945-1955): bulbos y conexiones. Programación en lenguaje de máquina absoluto, o realizando directamente las conexiones eléctricas. Alrededor de 1950 se introducen las tarjetas perforadas. Segunda generación (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 máquina, buscando minimizar los tiempos muertos. Tercera generación (1965-1980): circuitos integrados y multiprogramación. El sistema 360 de IBM unifica computadoras comerciales y científicas en una sola línea de máquinas con software compatible. Se introduce la multiprogramación, que divide la memoria en partes y ejecuta un programa distinto en cada una. El spooling permite la operación simultánea y en línea de periféricos. El tiempo compartido es una variante de multiprogramación que habilita a cada usuario una terminal en línea. MULTICS, un gigantesco sistema operativo, fracasa en su construcción pero aporta muchas ideas que hacen surgir UNIX. Cuarta generación (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 distribuídos, 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 básicamente un programa en ejecución. Consta del programa ejecutable, datos, pilas, registros y toda la información necesaria para ejecutar. Un intérprete 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 ejecución. Los procesos se manejan mediante señales que los obligan a suspender, reiniciar o terminar su acción. Las señales se utilizan también para comunicación 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 información 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 jerarquía de directorios y archivos llamada sistema de archivos. Un archivo se reconoce unívocamente dando la ruta de acceso, que es la

sucesión de directorios que permiten alcanzar el archivo a partir del directorio raíz. Cada proceso activo tiene un directorio de trabajo en el que se buscan primariamente los archivos cuando se indica sólo 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 código de 9 bits en 3 grupos de 3 bits. Estos grupos correspondientes al dueño, el grupo y el resto del mundo. Cada conjunto de 3 bits corresponde a permiso de lectura, escritura y ejecución. 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 número entero que se utiliza en todas las operaciones subsiguientes. Al cerrarse el archivo, el descriptor es desasignado y el número 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 tamaño 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 estándar para recibir datos desde el teclado y el descriptor de archivo 1 como salida estándar para presentar información en la pantalla. El descriptor de archivo 2 es el de error estándar; se usa para mensajes de error y se asigna normalmente a la pantalla. La interconexión de procesos se realiza a través de una tubería, 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 leída 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 parámetros. El intérprete de comandos (shell). El intérprete 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 intérprete lo valida, y si es correcto crea un proceso hijo que realiza la acción encomendada. Al terminar el proceso hijo, exhibe nuevamente el indicador de comando e intenta leer una nueva línea 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 líneas 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 líneas de los tres archivos juntos y las envía al dispositivo de impresión /dev/lp.

UNIX designa el núcleo de un sistema operativo multiusuario y multitarea. un sistema operativo de propósito general y tiempo compartido. Cuando hablemos de UNIX nos estaremos refiriendo al sentido amplio y. UNIX designa al mismo tiempo un cierto "ambiente de trabajo". logra enorme éxito. orientado a redes desde el comienzo. multitarea: hace muchas cosas a la vez. comprende el núcleo del sistema operativo más un conjunto de programas que permiten compilar lenguajes de programación. MULTICS. enviar y recibir correo electrónico. editar texto. un conjunto de circunstancias que encuentra el usuario de la computadora donde corre UNIX. Esctrictamente. En un sentido más amplio. Historia de UNIX Antecedentes: • • • • las computadoras ejecutan un trabajo por vez (años '40 y '50). CTSS. Características: • • • • • • • • • • muchas herramientas de software (compiladores. portable: el mismo sistema operativo corre en un espectro de máquinas que van desde notebooks a supercomputadoras. a través de la combinación de comandos simples en aplicaciones complejas. manejar archivos y discos. multiusuario: atiende a muchas personas simultáneamente. específicos para cada tarea y muy eficientes. flexible: se adapta a muchas aplicaciones diferentes. lo que asegura una evolución predecible. editores. tales como la presentación en pantalla. los programas disponibles y la forma de trabajo que impone o permite. Algunos de estos programas pueden haber sido desarrollados por los propios usuarios. manejar las colas de impresión y un sinfín de tareas más. coherentes. dispone de un estándar (POSIX) que debe cumplir todo sistema operativo que pretenda ser UNIX. a su ambiente de trabajo. potente: dispone de muchos comandos y servicios ya incorporados. elegante: sus comandos son breves. . un ambicioso proyecto de sistema operativo para cientos de usuarios fracasa y no llega a terminarse. los trabajos se agrupan y ejecutan "por lotes" (años '60). conjuntamente. Es el único sistema operativo con estas características. reutiliza el software. utilitarios para muchas tareas). acceder a otras máquinas.Introducción a UNIX Qué es UNIX Características Historia de UNIX Antecedentes UNIX Versiones actuales de UNIX Objetivos de UNIX Filosofía del sistema UNIX El UNIX moderno Referencias Qué es UNIX. establecer comunicaciones telefónicas. interpretar comandos.

que fuera sencillo. llamada 1BSD. Versiones actuales de UNIX. Redhat. • • • • • • • • • • Ken Thomson. aplicaciones de escritorio (Applixware. Mandrake. UNIX fue diseñado teniendo en mente los siguientes objetivos: • • • crear un sistema interactivo de tiempo compartido diseñado por programadores y para programadores. llamada AIX. entrada y salida estandarizadas que permiten la interconexión de comandos. UNIX hacia el usuario final: distribuciones fáciles de instalar (SuSE. . El grupo POSIX estudió y propuso un estándar para UNIX. el estándar de POSIX. con ideas y apoyo de algunos compañeros. que define un conjunto de procedimientos de biblioteca que cualquier sistema conforme con UNIX debe proporcionar. surgen las versiones UNIX de dominio público FreeBSD y Linux. rompiendo la tradición de sistemas operativos escritos en lenguaje ensamblador (1973). Thomson y Ritchie reescriben UNIX en C. destinado a usuarios calificados. BSD y System V. Corel). Filosofía del sistema UNIX. Esto aumenta la portabilidad del sistema hacia otras máquinas. FreeBSD es desarrollado por un grupo de trabajo cerrado. • • • • AT&T. StarOffice). para enfrentar a OSF. que permitiera resolver problemas complejos combinando un número reducido de comandos básicos. Brian Kernighan. Linux es desarrollado por una multitud de personas y equipos de trabajo a través de Internet. el Sistema III. y produce la primera versión comercial de UNIX. junto con otras empresas. Esto se llama entubamiento ("pipelining"): la salida de un comando es tomada por el siguiente como entrada. UNIX International. UNIX pasa a una máquina PDP-11 (1970). Los objetivos con que se creó determinaron una "filosofía" de UNIX caracterizada por: • • comandos cortos. escribe un nuevo MULTICS más modesto en una máquina PDP-7 desechada (1969). Se forma OSF. luego fueron la 3BSD y luego 4BSD. crea UI. crea otro UNIX ampliado de POSIX. integrada por IBM.1. por tratarse de un "sistema abierto" que proporciona todo el código fuente (1974). Open Software Foundation. Crea un UNIX con más prestaciones que el estándar de POSIX. HP y otros para enfrentar a AT&T. que "hacen una sola cosa pero la hacen muy bien". elegante. IBM crea su propia variante de UNIX. Objetivos de UNIX. 3 y 4. que incorporó el protocolo de redes TCP/IP. que pronto es sustituído por el Sistema V versiones 2. DEC. compañero de Thomson. llamado 1003. que se distribuyen sin costo. El desmembramiento de AT&T (1984) permite a esta empresa ingresar en el mercado de computadoras. específicos y muy eficientes. simples. lo llama irónicamente UNICS. desarrollador de MULTICS. La confusión de versiones continúa. Ritchie diseñó y escribió un compilador para lenguaje C. La Universidad de Berkeley produjo una versión mejorada para la PDP-11. UNIX es adoptado en las universidades. Thomson y Ritchie reciben el premio Turing por un memorable artículo sobre UNIX escrito en 1974. Esto resolvió la controversia entre Sistema V y BSD. programas asistentes de administración para estaciones de trabajo o servidores. escueto y consistente.UNIX.

También fue adoptado para la creación de Internet. y Windows NT. Orientado en primera instancia a terminales de caracteres. terminales o computadores personales baratas en los puestos de trabajo. Es ideal para trabajar como servidor: una máquina potente como servidor. Se orienta en la dirección contraria a la tendencia de hacer invisible al usuario el sistema operativo. está especialmente preparado para su ampliación y desarrollo en 64 bits y el multiprocesamiento en varias CPUs. llamadas al sistema y herramientas internas. Por sus características de diseño. Esto ha simplificado mucho el uso para los no especialistas. mayoritariamente soportada por UNIX. actualmente dispone de la interface gráfica X-Windows. permitiendo el uso de todas las bibliotecas. Windows 95. Es posible compilar un núcleo específicamente adaptado a las necesidades particulares de una empresa o grupo de trabajo.11. . Las máquinas RISC de los '80 y '90 adoptaron UNIX como sistema operativo. es por lejos el sistema predominante en las estaciones de trabajo orientadas a cálculos e investigación. El paquete de libre uso Samba permite que una máquina UNIX actúe como servidor de puestos de trabajo Windows 3. reduciendo el uso de recursos y aumentando la rapidez.El UNIX moderno. aunque su uso requiere un alto nivel de especialización.

Las noticias no aparecen más después de haber sido leídas. digitando la tecla <Enter> al final. <mensaje del día> se despliega siempre después del login. indica que el sistema está listo y aguarda una orden del operador. números y algunos símbolos). Para ingresar a un sistema UNIX remoto desde un PC se usa habitualmente un "emulador de terminal". You have mail indica que hay mensajes de otros usuarios. o del sistema. sin procesador) conectada directamente a la máquina UNIX. En el ingreso al sistema. es puesto por el administrador del sistema para información o bienvenida. debe comenzar con minúscula. UNIX distingue entre mayúsculas y minúsculas. Este programa permite al PC comportarse como una terminal (teclado y pantalla. proceso que se denomina "login". Las noticias se usan para informaciones generales de mayor tiempo de validez. no se permiten correcciones. En el emulador de terminal se deben fijar los siguientes parámetros: • • • • Nombre descriptivo de la conexión a establecer (arbitrario). Este nombre de usuario suele tener hasta 8 caracteres (letras. <noticias> aviso de noticias nuevas. date . que debe ser escrita a continuación de $ y finalizada con la tecla <Enter>. Tipo de terminal que se emulará (VT100 es el más conocido). login: id-usuario password: id-usuario es el nombre identificador del usuario para ingreso al sistema. En los siguientes ejemplos debe escribirse el comando tal cual se muestra.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 electrónico de UNIX Usuarios en el sistema Talk Cambio de contraseña Fin de Sesión Otros Bibliografía y Referencias Emulador de Terminal. Conexión vía TCP/IP. Para leer las noticias debe digitarse el comando news. $ es el indicador de comandos del sistema. Nombre en la red de la máquina a la que se quiere conectar. Ingreso al sistema (login). protocolo de comunicación en la red. El correo electrónico permite a cualquier usuario enviar y recibir mensajes.

desde cualquier lugar donde esté. referencias a este archivo desde otros archivos ubicados en diferentes lugares. La salida obtenida consta de renglones parecidos a -rw-rw-rw. Si se trata de un directorio. ls -l lista archivos en formato largo. 1 cantidad de enlaces. Este comando es útil cuando se han hecho varios cambios de directorio y se quiere retornar a una situación conocida. users nombre del grupo al que pertenece el archivo 138 tamaño en bytes del archivo. Listado de archivos. d directorio. Los tres grupos de 3 caracteres indican permisos para el dueño del archivo (esteban).1 esteban users 138 Apr 5 19:34 leame y se interpretan así: - indica el tipo de archivo de que se trata. El -l se llama opción o bandera. el directorio actual sigue siendo el mismo. su grupo (users) y el resto del mundo. dando detalles. Apr 5 19:34 . who muestra los nombres de usuarios conectados al sistema en este momento.comando que muestra la fecha y hora. r (read) permiso para leer el archivo w (write) permiso para modificar o eliminar el archivo x (execute) si se trata de un archivo. rw-rw-rw son los permisos del archivo. se lee "menos ele". con esta convención: . sin interpretación inmediata para el usuario. Ensayemos el comando ls: ls lista archivos del directorio actual. sin parámetros devuelve al usuario a su directorio propio. cd /home cd cambia hacia el directorio /home. permiso para ingresar en él y recorrerlo. esteban nombre del usuario dueño del archivo.archivo común. Directorios. Cuando el usuario ingresa al sistema ya está ubicado en su directorio propio. este número es de control del sistema. ubicándose en el directorio propio. lo que puede verificarse con el comando pwd. Cada usuario tiene un directorio propio. aquí se encuentran los archivos de comandos ejecutables del sistema. El comando pwd muestra el directorio actual. si se trata de un directorio. No cambia de directorio. hostname muestra el nombre de la máquina UNIX. l enlace o referencia a otro archivo. permiso para ejecutarlo como programa. ls -l /bin lista archivos en el directorio /bin. llamado a veces "directorio home".

Los archivos cuyo nombre empieza con un punto son ocultos. El comando cat permite también concatenar archivos.vacia crea el archivo nota. touch . sin contenido alguno. La tecla espaciadora avanza una pantalla.txt presenta la información de man. man man muestra la página man del propio comando man. Contenido de un archivo. Las entradas. Crear y borrar un archivo.vacia cat nota. Notar que el nombre del archivo está siempre al final. Manual de UNIX.txt ya paginada. respectivamente. touch nota. ls -la formato largo y archivos ocultos. representan el directorio actual y el directorio padre. Para interrumpir el paginado de more.txt muestra las 10 líneas finales de un archivo.txt muestra el contenido del archivo. digitar 'q'. Para salir antes de terminar.vacia muestra datos del archivo creado. normalmente no visibles en el listado. en este sentido. cat man. ls -l /etc | more muestra el extenso contenido del directorio /etc paginando la salida. more man. contiene muchos caracteres de control para regular su despliegue en pantalla.fecha y hora de última modificación. leame nombre del archivo. lo que se puede verificar con ls. man man > man.archivo_oculto crea un archivo vacío y oculto. la combinación de teclas Ctrl-B retrocede una pantalla.txt redirecciona la salida y graba el contenido de la página man en el archivo man. la salida de cat es tomada por more. no muestra nada. ls -la /var listado de archivos visibles y ocultos en formato largo del directorio /var. según se verá.txt muestra las primeras 10 líneas de un archivo. ls -l nota. y . son una referencia obligada para operar con solvencia.. digitar 'q'. . que presenta la información página por página. paginada para poder leer una pantalla por vez. man ls muestra la página man del comando ls.txt.vacia. el archivo está vacío. Si no aparece el año. ls -a muestra también archivos ocultos. tail man. Aunque muy técnicas y a veces difíciles de comprender. El comando cat no intrepreta estos caracteres de control. se asume el año corriente. archivos y otros elementos del sistema operativo. head man. cat man.txt. El archivo man.txt | more lee una nota larga paginando. por provenir de una página man. UNIX dispone de un manual en línea o "páginas man" con información sobre comandos.

De ahora en adelante. echo Mensaje en pantalla muestra en la pantalla la leyenda indicada. rm -i man. digitar <Enter> para que cambie al otro renglón. 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. digitar .txt borrado interactivo. Revisa la casilla de entrada de mensajes mostrando la lista de recibidos. ls -la muestra datos en formato largo del archivo oculto. Un punto solo en la línea termina el mensaje y devuelve al usuario a la línea de comandos de UNIX. El usuario puede probar el correo enviándose un mensaje a sí mismo y luego leyéndolo.vacia.archivo_oculto ls -la borra el archivo oculto y verifica listando los archivos del directorio. Al finalizar de escribir el mensaje. sólo se aceptan los comandos propios de mail. Para leer el correo. su nombre deriva de palabras inglesas: rm proviene de "remove". rm . El indicador de comandos de mail es & Comandos disponibles dentro del sistema de correo: d ? 5 h h q borra mensaje corriente. desde la línea de comando de UNIX digitar mail juan Escribir entonces el texto del mensaje. mail -s "Mensaje de prueba" juan .vacia borra el archivo nota. eliminar o borrar. Correo electrónico de UNIX.ls no muestra el archivo oculto creado. Antes de llegar al fin de la pantalla. El comando mail no es un editor: no arregla las líneas ni permite corregir líneas anteriores. Como muchos comandos de UNIX. 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. Verifica el contenido con cat. pide confirmación antes de actuar. rm nota. (un punto solo en una línea) y dar <Enter>. echo Esta línea es agregada >> mensaje1 echo Esta es otra línea agregada >> mensaje1 cat mensaje1 redirecciona la salida de echo para agregar dos líneas más al archivo ya existente mensaje1. digitar mail Este comando ingresa al usuario en el sistema de correo electrónico de UNIX. muestra datos del archivo y verifica su contenido. mail juan esteban envía mensaje al usuario juan y al usuario esteban. pero ls -a sí lo muestra.

indicando si está en este momento en el sistema. la nueva contraseña deberá ingresarse dos veces. finger jperez proporciona información sobre el usuario indicado. que debe responder con otro comando similar cuando recibe el pedido. Indica identificador de usuario. y si tiene correo por leer. pero siempre presente y útil para mensajería sencilla. Usuarios en el sistema. Al invocar talk la pantalla se divide en dos partes. para evitar posibles errores de digitación. whoami presenta sólo el nombre del usuario que está operando. Para terminar la sesión de talk. who muestra los usuarios que están actualmente en el sistema. dando el nombre de usuario y su número (UID). Existen en UNIX muchos programas para manejo de correo. nombre en la vida real y otros datos del usuario invocante.envía un mensaje de prueba al usuario juan con el título "Mensaje de prueba". id proporciona la identificación del usuario invocante. mesg muestra el estado: si responde "y" está habilitada la recepción. terminal en que está conectado. cada una correspondiente a uno de los usuarios. indicando su máquina y nombre de usuario. Talk. En sistemas con servicio de información de red (NIS). para que el destinatario sepa inmediatamente de qué se trata. quienes intenten iniciar una sesión recibirán un mensaje indicando que la terminal destino no está habilitada para recibir mensajes. talk usuario1 solicita apertura de una sesión de talk al usuario1. id jperez finger proporciona datos de identificación del usuario indicado (jperez). mesg y habilita recepción de mensajes. . si responde "n" se rechazan los pedidos de conexión. nombre de grupo primario y su número (GID). aquí nos limitamos a mail como ejemplo de un comando de UNIX más bien artesanal. y ambos ven la salida en su parte correspondiente de la pantalla. cualquiera de los usuarios puede digitar Ctrl-C. El comando mesg permite regular si se desea recibir mensajes o no. terminal. mesg n deshabilita recepción de mensajes. Para evitar recibir mensajes de talk es posible bloquear a otros usuarios el acceso a la terminal donde uno está trabajando. passwd pide la vieja contraseña y luego la nueva. fecha y hora. who am i da información sobre el usuario que está trabajando. Talk es un programa que permite a dos usuarios en el sistema comunicarse escribiendo en el teclado. fecha y hora de ingreso al sistema. nombres de otros grupos a los cuales pertenece (si los hay) y sus números. Es de cortesía indicar siempre el tema del mensaje. el comando es yppasswd El administrador del sistema indicará cuál de estos comandos debe usar. Cambio de contraseña. proporciona nombre del usuario en el sistema. Ambos pueden escribir simultáneamente. más potentes y sofisticados.

En las máquinas UNIX. la tecla <Enter> coloca un caracter nueva línea. continúa despliegue. 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 razón. vuelve a presentar el mensaje inicial login: habilitando a un nuevo usuario a ingresar al sistema. el funcionamiento en los emuladores de terminal depende de la construcción del programa de emulación. En UNIX. Las teclas Ctrl-D indican un fin de ingreso. el terminal de la propia máquina UNIX se denomina "consola". En UNIX no hay un caracter reservado para fin de archivo. . CtrlD simplemente indica la terminación de un flujo de datos. con la tecla <Enter> DOS o MSWindows colocan dos caracteres al final de una línea: un nueva línea <Ctrl-J> y un retorno <Ctrl-M>. si se dan en el indicador de comandos. Las teclas <Ctrl-D> también terminan la sesión. que en ASCII es <Ctrl-J>. Otros. con las teclas <Ctrl-S> <Ctrl-Q> detiene despliegue. Todas las teclas de control funcionan bien en la consola. Algunas terminales adminten un control instantáneo de la salida. termina la sesión UNIX.Fin de sesión. exit termina la sesión con UNIX. Las teclas Ctrl-C interrumpen la ejecución de un comando. se usa preferentemente para administración del sistema.

This documentation is different from the documentation for the Info reader that is part of GNU Emacs. Commands which move the cursor within a node. El encabezado de cada nodo muestra el archivo donde se encuentra la información. el nombre del nodo previo en la organización temática. forma tradicional de mantener información acerca del sistema UNIX. El tema del nodo aparece en doble subrayado. el nombre del nodo actual. . * Xref Commands:: Commands for selecting cross references. escribir info info info se basa en hipertexto. a program for viewing the on-line formatted versions of Texinfo files. * Searching Commands:: Commands for searching an Info file.11. Para obtener información sobre info. 28 lines --Top------------------------------ Pantalla: `--All----' abajo a la derecha: todo el texto cabe en una pantalla. --zz-Info: (info-stnd. Sustituye a las páginas man. ******************** Node: Top. Up: (dir) Up: (dir)The GNU Info Program This file documents GNU Info. Node: Top. `--Top----' abajo a la derecha: hay más texto en pantallas siguientes. * Node Commands:: Commands for selecting a new node. * Menu: * * * * What is Info:: Options:: Cursor Commands:: Scrolling Commands:: Options you can pass on the command line. File: info-stnd. Commands for moving the node around in a window. Los nodos se organizan jerárquicamente. la información se organiza en "nodos" hacia los cuales es posible desplazarse. y el nodo superior en la jerarquía de información. version 2.info.info. info Ejemplo de pantalla de info: File: info-stnd. Un nodo es el texto que describe una unidad temática. * Window Commands:: Commands which manipulate multiple windows. el nodo siguiente en la organización temática.info.GNU info es un programa del proyecto GNU para leer o imprimir información. * Printing Nodes:: How to print out the contents of a node. Next: What is Info. Next: What is Info.gz)Top.

Para terminar. 5 del menú de nodo mover a un nodo indicando su nombre.Menúes: Los menúes tienen esta estructura: * Menu: * Item1: Título-item1 * Item2: Título-item2 Descripción título item 1 Descripción título item 2 Para ir hacia un item de menú: colocar el cursor y dar Enter.5 g invoca tutorial de info lista de comandos de info. Teclas: h ? Ctrl-g Ctrl-L ESPACIO BS o Del b n p m f u l d q 1.. Elegir un item de menú "baja" a ese nodo. con u se "sube" de regreso a él. * Item3:: A este nodo (con ::) se llega sólo con dar Enter con el cursor sobre él. luego 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 ordenación temática nodo previo en la ordenación temática elegir item de menú. así (nombre-archivo)nombre-nodo s buscar una cadena de caracteres. Ctrl-g cancela. ir hacia ese nodo seguir una referencia cruzada a nodo superior nodo anterior visitado (last) a nodo directorio salir de info elegir item 1 . Otra forma: m. Con f? se muestra la lista de referencias cruzadas en el nodo actual. elegir el nodo de la siguiente ocurrencia . puede darse el nombre de archivo. * Note Cross: Ref-Cruzada Referencia cruzada Para ir a una referencia cruzada. m. f. TAB puede completar cuando las letras son suficientes Para volver al nodo superior. Ctrl-g para arrepentirse (antes de dar el Enter). Para volver a la información de info. q. luego el nombre del item o las primeras letras. u..

cat nota . Es también un lenguaje de programación. terminando cada línea dando <Enter>.Introducción al "shell" Crear dos archivos de prueba Comandos en el sistema UNIX Estructura de Comandos Expansiones de la línea de comandos Variables de ambiente Entrecomillado de argumentos PS1 Entrada estándar y salida estándar Fin de flujo Agregar la salida estándar a un archivo Error estándar Interconexión de comandos (entubamiento) Filtros Campos y delimitadores Valores de retorno de los comandos El operador grave Secuencias de comandos Redirección del shell Fin Bibliografía y Referencias El intérprete de comandos o "shell" actúa entre el sistema operativo y el operador. Con el comando cat puede crearse un archivo aceptando el teclado como entrada estándar y direccionando la salida estándar hacia un archivo: cat >nota digitar las siguientes líneas. Los programas escritos con el shell se llaman scripts. no puede volverse atrás para corregir. tal cual están. Crear dos archivos de prueba. Digitar <Ctrl-D> para finalizar el ingreso. que las ejecuta sobre la máquina. El shell es un intérprete de comandos. El usuario dialoga con el intérprete de comandos. finalizar con <CtrlD>. Digitar con cuidado: una vez pasados al renglón siguiente. Provee al usuario una interfaz hacia el sistema operativo. y éste transfiere las órdenes al sistema operativo.

los comandos son programas ejecutables separados.(menos). El archivo LEAME tendrá este contenido. Crear del mismo modo el archivo LEAME. Estructura de comandos. van precedidas por el signo . pr -l23 nota LEAME | more . La estructura general de un comando es la siguiente: nombre opciones argumentos es el nombre del comando. El shell es un intérprete de comandos: puede expandir y cambiar la manera en que actúan los comandos. En UNIX.muestra el contenido digitado. Losargumentos son comúnmente nombres de archivos o nombres de login de usuarios. pr -d -o15 -l23 LEAME doble espacio. largo de página 23. Las opciones o banderas controlan la forma en que actúa el comando. Comandos en el sistema UNIX. margen izquierdo de 15 espacios. pr -d -l23 LEAME muestra el archivo LEAME a doble espacio. nombre pr -l23 nota pr -l23 LEAME da formato y muestra el archivo indicado en páginas de 23 líneas de largo para que quepa en la pantalla. Recuerde que UNIX diferencia entre mayúsculas y minúsculas. cat LEAME para verificar el contenido. admite el uso de comodines y la interconexión o entubamiento de comandos. largo de página 23. haciendo cat > LEAME con este contenido: Este es el archivo LEAME.

Variables de ambiente. MUESTRA="hola chicos" asigna "hola chicos" a la variable MUESTRA. debe aparear un caracter. se escribe $nombre-variable. cat nota LEAME | pr -l23 concatena los archivos y luego les da formato a los dos juntos. Expansiones de la línea de comando. la opción -a no es lo mismo que -A.muestra los dos archivos uno tras otro. XYZ="cat nota" .. Las variables de ambiente son cadenas de caracteres de la forma nombre=valor es cualquier cadena de caracteres que no incluya $ ni espacio (\b). Las variables de ambiente pueden ser usadas como nombres de comando o como argumentos de un comando. los presenta uno tras otro. caracter cualquiera. para hacer uso del contenido de una variable. Para exhibir el contenido de una variable de ambiente se escribe echo $nombre-variable. [. Los comodines son caracteres que sustituyen cadenas de caracteres.] sustituye los caracteres indicados individualmente. Es una costumbre muy arraigada en UNIX usar mayúsculas para los nombres de variable. uno y uno sólo. Las opciones pueden ser mayúsculas y minúsculas. así como es una regla usar minúsculas para los comandos. En general. pero los pagina separados. 0 o más. cat nota LEAME concatena los archivos.. * ? secuencia de caracteres cualesquiera. puede incluir el espacio si el valor está entre comillas. nombre valor es cualquier cadena. echo $MUESTRA muestra en pantalla el contenido de la variable MUESTRA.

El entrecomillado obliga a tratar una cadena con espacios como si fuera un solo argumento. las llaves delimitan el nombre de la variable. el comando es ejecutado. echo hola${MUESTRA}chicos la variable puede embeberse en una cadena. 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. y otras son propias del shell (variables del shell).$XYZ la variable XYZ contiene un comando. . echo $HOSTNAME muestra el nombre de la máquina. Cuando se usan comillas dobles (" ") el shell interpreta las variables de ambiente incluídas. actuando según su contenido: MUESTRA="Mi nombre de login es $LOGNAME" echo $MUESTRA Cuando se usan comillas simples (' ') el shell no interpreta las variables de ambiente. env muestra las variables de ambiente definidas. echo hola $MUESTRA chicos la variable puede usarse en la formación de cadenas. echo $NOEXISTE Las variables no definidas no muestran nada cuando son referenciadas. echo $LOGNAME muestra el nombre de login del usuario. Los espacios separan argumentos. y al ser invocado su contenido. Entrecomillado de argumentos en la línea de comandos. Muchas son fijadas en el ingreso del usuario al sistema (variables de login).

hola:. $.Aunque generalmente los omitimos. y se les llama entrada estándar y salida estándar. Los comandos leen como entrada una secuencia de caracteres (flujo de entrada o "input stream").nota el archivo nota es la entrada. el sistema responde con el nuevo indicador de comandos. 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ó. y escriben a la salida otra secuencia de caracteres (flujo de salida o "output stream"). en vez de a la pantalla. mail juan < nota toma la entrada estándar de un archivo en vez del teclado. Estas secuencias no tienen estructura interna alguna. $ PS1=hola: hola: carga un nuevo indicador de comandos. el archivo nueva. pr < nota > nueva. cat nota > nota2 redirige la salida estándar a un archivo que crea o sobreescribe.nota es la salida. ingrese comando: PS1='$' $ repone el indicador de comandos. Entrada estándar y salida estándar. . La variable símbolo 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. en los ejemplos de esta sección mostraremos el indicador de comandos y la salida de ejecución.

. El signo menos (-) aislado equivale a tomar en ese punto la entrada estándar. el sistema sabe cuando termina un archivo por medio de contadores. se reúnen tres fuentes distintas en una única salida. Este símbolo no forma parte del ingreso.salida.cat nueva. En muchos comandos se puede intercambiar teclado por archivos o dispositivos de hardware. una serie de caracteres uno tras otro. que ya no se escribirá más.nota muestra el archivo donde se grabó la salida con formato.nota < LEAME son comandos equivalentes. Para indicar en el teclado el fin de un flujo de caracteres se usa Ctrl-D.usuarios Los comandos y los archivos tienen una estructura orientada a caracter. procesa nueva. cat nota cat < nota son comandos equivalentes porque cat opera sobre un archivo y también sobre la entrada estándar. Fin de flujo.usuarios more lista. así como el despliegue en pantalla. lee lo que se digite en el teclado hasta recibir un Ctrl-D.nueva. El ingreso de datos desde el teclado. se manejan en UNIX como "flujos de caracteres". simplemente indica el final del ingreso.nueva. Los símbolos < y > redirigen entrada y salida estándar: < nombre_entrada > nombre_salida redirige la entrada estándar redirige la salida estándar MUESTRA=/etc/passwd pr < $MUESTRA > lista. cat nota LEAME nueva.copia y escribe todo en el archivo arch.salida procesa el archivo nota. En UNIX no hay un caracter especial para indicar fin de archivo.nota cat nota .nota > arch. cat nota . que usualmente está asignada al teclado.

error cat salida.error cat salida.salida muestra todo lo reunido. pero mediante 2> o 2>> se redirige el error estándar hacia un archivo de errores.error cat noexiste 2>>salida. ls noexiste 2>>salida. cat < nota > nota. Los flujos estándar se reconocen por los siguientes números: 0 1 2 la entrada estándar.error reúne los mensajes de error en el archivo salida.cat arch. usualmente la pantalla.nota contiene nota dos veces.error contiene el mensaje inicial y el de error. . existe un tercer flujo de caracteres. echo Archivo de errores > salida.copia cat nota nota.nota rm nota. la salida estándar. Interconexión de comandos (entubamiento).nota cat nota >> dup.copia doble. Además de los flujos de entrada y salida estándar. Se logra lo mismo con cat nota > dup. usualmente el teclado. El error estándar está dirigido habitualmente a la pantalla.copia > doble.nota El símbolo >> redirige la salida estándar a un archivo.error rm noexiste 2>>salida. el error estándar. el error estándar.error . usualmente la pantalla. pero agregando al final del mismo en lugar de reemplazar su contenido. Agregar la salida estándar a un archivo. Error estándar. hacia donde se dirigen los mensajes de error.error el archivo salida.

por lo que se les llama habitualmente filtros. echo 'hola chicos' | tr lo pa produce 'hapa chicas'. pasando simplemente la entrada hacia la salida. Muchos comandos están pensados para ser interconectados. ls -l | cut -c56- corta el listado de archivos desde donde empieza el nombre al final.5 -d: < /etc/passwd muestra los campos pedidos usando el delimitador : (dos puntos). more /etc/passwd muestra el contenido de /etc/passwd. sort < /etc/passwd | cut -f1 -d: | more . creando un entubamiento o interconexión de comandos. Filtros. cut -c1-8 < /etc/passwd muestra columnas 1 a 8. cut -f1 -d: < /etc/passwd cut -f1. Notar la posicion de redireccion <. cat . echo 'hola chicos' | tr l p tr traduce caracteres y produce 'hopa chicos'. El archivo /etc/passwd tiene en cada línea una serie de campos separados por dos puntos (:) . | conecta comandos. cuya salida está redirigida a un archivo. Los operadores < y > redirigen. cat nota LEAME | pr > salida hace que la concatenacion de los archivos nota y LEAME sea servida al comando pr. Un campo es una cadena de caracteres separada por un caracter delimitador.LEAME < nota | pr > salida tiene el mismo efecto.El operador | hace que la salida del comando precedente sea la entrada del comando siguiente. Campos y delimitadores.3.

Los comandos devuelven un código de retorno 0 si el comando termina correctamente. palabras y caracteres. pero en ERROR quedó el número de error de la operación fallida. wc /etc/passw cuenta líneas. Otras variables de shell son: # $ número de argumentos en el comando para la shell actual número de proceso para el shell actual Estas variables se interrogan como $# y El operador grave. -w para palabras y -c para caracteres. pero usualmente > 5120 en SVR4. $? es una 'variable de shell' mantenida internamente por el propio intérprete. El largo de la variable es limitado. corta el primer campo y presenta los nombres de usuarios habilitados en el sistema. el separador es =. . $$. El código de retorno del último comando queda en una variable llamada '?'. la asignación termina bien. cat noexiste ERROR=$? echo $? echo $ERROR guarda el código de error. env | cut -f1 -d= | sort muestra nombres de variables de ambiente ordenadas.ordena las líneas. o un número entre 1 y 255 según la razón de falla. que se interroga como $?. El acento grave (`) asigna a una variable de ambiente la salida estándar de un comando. MUESTRA=`echo $LOGNAME` echo $MUESTRA escribe el nombre de login del usuario. por lo que en $? queda 0. El comando wc (word count) acepta opciones -l para líneas. Valores de retorno de los comandos.

echo $MUESTRA Redirección del shell. Los comandos ingresados en el archivo pueden ejecutarse con . Escribir sh como comando invoca una segunda instancia del shell. echo Hola . Secuencias de comandos. El shell es también un lenguaje de programación.usuario y escribiendo las siguientes líneas. que puede terminarse con el comando exit o con <Ctrl-D>. date . echo $LOGNAME`. arranca cuando el usuario ingresa al sistema y termina cuando sale. Pueden omitirse los comentarios (de # en adelante) echo Salida del comando datos. Puede crearse un archivo de comandos haciendo cat > datos. Pueden escribirse varios comandos en una misma línea separándolos con . echo $LOGNAME MUESTRA=`date . También echo `cat * | wc -w` echo Total de palabras en el directorio: `cat * | wc -w` El acento grave permite ejecutar un comando dentro de otro.TOTALPALABRAS=`cat * | wc -w` echo $TOTALPALABRAS cuenta las palabras en todos los archivos del directorio. El shell que atiende los comandos del usuario es el login shell. (punto y coma). Los # indican comentario. hacer chmod u+x datos.usuario Verificar con ls -l. Para convertir el archivo en ejecutable para el usuario. encerrando el comando anidado entre acentos graves.usuario echo Fecha: `date ` echo Usuario: $LOGNAME ps echo Shell actual: $$ # fecha y hora # nombre de login del usuario # procesos corriendo del usuario # número de proceso para el shell actual finalizar con <Ctrl-D>. echo Hola .

usuario Fin. redirige la salida estándar al archivo salida. masdatos.usuario en la entrada estándar.usuario y escribiendo cat noexiste # intenta mostrar un archivo inexistente Finalizar con <Ctrl-D>.usuario Este comando invoca una nueva instancia de shell que no es la del ingreso al sistema. Como ejemplo. cat errores. cat salida. Agregar una línea más haciendo cat datos.usuario verifica su contenido.usuario . sh <masdatos. o el comando cat si se tiene fé en la propia digitación.usuario 2>>errores.usuario coloca una línea descriptiva en el archivo errores. Borrar con el comando rm los archivos auxiliares. puede crearse el siguiente archivo. conservar para referencia los archivos nota.usuario. datos.sh datos.>> masdatos. UNIX y C El sistema operativo UNIX suele venir acompañado de un compilador para lenguaje C.usuario y redirige la salida del error estándar al archivo errores.usuario y eventualmente otros que le interesen.usuario >salida. Contenido del archivo hola.usuario . echo "Archivo de errores del usuario" > errores. usando un editor de texto sencillo como el ae. Escribiendo programas en lenguaje C es posible crear comandos indistinguibles de los propios de UNIX. LEAME.usuario cat errores.usuario lee los comandos del archivo masdatos.usuario.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 más interesante, con uso de llamadas a la biblioteca del sistema, es el ejemplo siguiente, una versión muy mínima del comando cat, que llamaremoscati.

Contenido del archivo cati.c:

/* cati: cat versión mínima */ # define LARGO 1024 /* define valor de variable LARGO */ main() { char bufer[LARGO]; int n;

/* declara un arreglo de caracteres */ /* para contar caracteres leídos */

/* llamada al sistema para leer caracteres desde la entrada estándar (0), hacia el arreglo bufer, en cantidad igual al tamaño del arreglo bufer */ n = read(0, bufer, sizeof bufer); /* primera lectura */ /* repite mientras haya caracteres leídos, es decir, n>0 */ while (n > 0) { /* llamada al sistema para escribir caracteres en salida estándar (1), en cantidad n, extrayendo desde arreglo bufer */ write(1, bufer, n);

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

/* siguientes lecturas */

/* sale devolviendo c¢digo 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 versión mínima sólo funciona redireccionando la entrada estándar. 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 programación algo más complejo asimilar un nombre de archivo como parámetro y hacer que el programa despliegue el contenido de este archivo.

La razón por la que estos programa se invocan como ./hola y no simplemente hola es que el directorio actual no está habitualmente en la vía de búsqueda de ejecutables (variable PATH). Colocando las versiones ejecutables de los programas hola o cati en un directorio como /bin los haría ejecutables directamente como cualquier comando de UNIX.

Estos ejemplos muestran la versatilidad de UNIX como sistema operativo: puede uno ampliarlo con comandos construídos por uno mismo que se integran perfectamente a los comandos propios del sistema. En las distribuciones de UNIX de dominio público 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 Bibliografía

El sistema UNIX funciona totalmente en base a archivos. Los programas, los datos, los directorios y aún los controladores de dispositivos tales como discos, modems e impresoras, son archivos. El sistema de archivos de UNIX se organiza en una jerarquía de directorios que resulta en una estructura arborescente. Archivos. Cada archivo tiene asociado un nombre, un contenido, un lugar de ubicación e información de tipo administrativo, tal como dueño y tamaño. El contenido de un archivo puede ser texto, programas fuente, programas ejecutables, imágenes, sonidos y otros. Estructuralmente un archivo es una secuencia de bytes de datos que reside en forma semipermanente en algún medio estable, como ser una cinta magnética o un disco.

txt. Un directorio es un archivo que contiene una lista de nombres de archivo e información acerca de los mismos. Los caracteres $ . punto.txt es un nombre de archivo válido. pero sí rm . yLCK. UNIX diferencia mayúsculas y minúsculas: el archivo NOTA. Los archivos se agrupan en directorios. lo borra como a cualquier archivo.Directorios. la salida son los nombres de archivos y subdirectorios en ese directorio. Se aconseja usar solamente letras.modem también. un directorio es una localización capaz de contener otros directorios o archivos. Nombres de archivos. ls nota el argumento es un archivo. Dos archivos que se encuentren en distinto directorio pueden tener el mismo nombre sin confundirse. Dentro del sistema de archivos. No se distingue entre nombre de archivo y extensión: nota..noseve ls ls -a ls no lo muestra. guión y subraya. El comando ls permite listar el contenido de un directorio: ls /var el argumento es un directorio. . Para el nombre de archivo se puede usar prácticamente cualquier caracter.nueva. ls -l /var muestra los archivos y subdirectorios contenidos en /var en formato largo.txt y también de Nota.noseve ls -a. \ & ! * | causan confusión y no conviene usarlos. números. Un archivo que comienza por un punto no es visible: touch .TXT es distinto del archivo nota. la salida es el nombre del archivo. incluso caracteres no visibles. ls -ld /var muestra características del directorio /var en lugar de los archivos y subdirectorios contenidos en él.

cd /usr/bin pwd cambia al directorio /usr/bin. echo $HOME nuestra el nombre del directorio propio. que es ahora el directorio actual. cd vuelve al directorio propio del usuario. se asume que el archivo se encuentra en el directorio actual. cd $HOME tiene el mismo efecto que cd. Un nombre tal como indica que su ruta comienza a partir del directorio actual. Si se omite la ruta. HOME es una variable de ambiente que contiene el nombre del directorio propio del usuario.Directorio propio.1 ya que el punto designa el directorio actual. Directorio actual. Nombres de directorios. cd / pwd el directorio actual es el directorio raíz. Dos puntos seguidos designan el directorio de nivel superior al actual. Al ingresar al sistema cada usuario entra en su directorio propio.1 . el directorio actual es /usr/bin. El directorio superior o directorio raíz se denomina /. nota es el nombre del archivo. Un directorio puede contener otros directorios así como archivos ordinarios. lo que genera una jerarquía o árbol de directorios. un directorio privado que no es tocado por el sistema ni por los otros usuarios. cd pwd devuelve al usuario a su directorio propio. Si el directorio actual es /home/usuario1 textos/libro/capitulo. El caracter / se usa también para separar los componentes de un nombre de archivo completo: /export/home/usuario1/nota./textos/libro/capitulo. Sería lo mismo escribir . La porción /export/home/usuario es la ruta. El directorio en el cual se encuentra posicionado el usuario en un momento dado se denomina su directorio actual.

Pueden usarse comodines para referenciar directorios y archivos: cat /home/esteban/*/* Cambios en la jerarquía de directorios. Estructura interna de los archivos. mkdir nuevo. Un archivo es una secuencia de bytes. mkdir dir1 mkdir dir1/dir2 touch dir1/dir2/arch2 dir1/arch1 ls -lR muestra todos los archivos y directorios creados.dir borra un directorio existente.dir crea un nuevo directorio. rm -r dir1 borra el directorio y todos los archivos y subdirectorios que pueda contener. actúa sólo sobre directorios vacíos. El . el significado de los bytes depende totalmente de los programas que interpretan el archivo.. ls /home/esteban/dir1 es un direccionamiento absoluto. Un byte es equivalente a un caracter. El sistema no impone estructura alguna a los archivos ni asigna significado a su contenido.ls . El núcleo del sistema UNIX se mantiene al tanto del tamaño de los archivos sin introducir ningún caracter especial. No hay caracter de fin de archivo. ls dir1 es un direccionamiento relativo./usuario2 muestra el contenido de los archivos en /home/usuario2 El caracter / separa directorios incluídos como parte de un nombre de archivo o directorio. En ningún caso hay ningún byte que no haya sido colocado por el usuario o un programa. rmdir nuevo.

pero en un archivo se guarda sólo LF. ¿Qué hay dentro de un archivo? El núcleo no puede decirnos nada del tipo de archivo: no lo conoce. carriage-return y linefeed). Cada archivo tienen un conjunto de permisos asociados con él que determinan qué puede hacerse con el archivo y quién puede hacerlo. y puede compartir archivos con los usuarios de ese grupo. Los permisos de un archivo se indican con 10 caracteres: 1 caracter para tipo de archivo. hasta que los borre o los ceda a otro usuario. Todos los archivos tienen la misma estructura interna. Lo único que se requiere para accederlo es su nombre. necesario para desplegar correctamente los renglones en la terminal. Caracter para tipo de archivo: d l b c directorio enlace simbólico 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 ejecución (execute) . 3 caracteres [rwx] para permisos del grupo. Tipo y permisos de archivos. En los sistemas UNIX hay sólo una clase de archivo. al cual debe pertenecer su dueño. 3 caracteres [rwx] para permisos del dueño. Al apretar la tecla Enter el núcleo transmite a la terminal CR LF. 3 caracteres [rwx] para permisos de otros. El comando ls -l muestra dueño y grupo de los archivos listados. Cada usuario es dueño de los archivos creados por él. El comando file hace una conjetura: lee algunos bytes y busca indicios sobre el tipo de contenido. Cada archivo está asignado a un grupo de usuarios. Propiedad de los archivos. Cada usuario pertenece a un grupo.caracter nuevalínea es interpretado por las terminales como nueva línea y retorno de carro (CR LF.

. la red se configura con un conjunto de máquinas heterogéneas. Una instalación normal puede insumir un 25% en herramientas de administración. o accesibles a casi cualquier tipo de máquina en la red. Ejemplos de permisos de archivo: rwxr--r-rw-rw-r-rw------- El sistema de archivos en UNIX. y un 10 % en herramientas de desarrollo. Como referencia. En un lugar grande. dependiendo de la distribución y de lo que se haya instalado. Los requerimientos de las redes cambiaron la organización funcional del sistema de archivos. Enlaces simbólicos hacia la anterior localización de los archivos ayudan al acceso. cientos de directorios y cientos de enlaces simbólicos. Se ejecuta dando su nombre. Los archivos pueden ser específicos para cierta máquina.1 viene con cerca de 2500 paquetes para instalar. $ ls -F / es útil para recorrer el sistema de archivos. cada una responsable del mantenimento y uso de cada archivo. Borrar. Un sistema de archivos en UNIX puede contener miles de archivos. alterar o cambiar permisos de archivos puede conducir a resultados impredecibles. usar /bin/pwd para si se ha llegado al directorio directamente o a través de un enlace simbólico. o trasladarse a ese directorio. bajando luego a los subdirectorios. la distribución Debian/GNU 2. Un directorio puede ser real o un enlace simbólico a otro.cuyo significado varía según 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 w x - ingresar a un directorio sin derechos El ingreso a un directorio (permiso x) permite ejecutar un archivo contenido dentro de él. compartidos por varias máquinas del mismo tipo. para estas operaciones no es necesario poder ver los nombres de los archivos contenidos (permiso r). Los comandos de UNIX son archivos ejecutables. Un archivo se declara ejecutable dándole permiso de ejecución.

/skel /export /floppy /home /lib /lost+found /mnt /proc /root /sbin /tmp archivos de inicialización 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 administración archivos temporales .d dispositivos de disco dispositivos descriptores de archivo dispositivos de teclado y despliegue memoria dispositivo para descarte de salidas mensajes de error del núcleo pseudo ttys. /bin /boot /cdrom /dev archivos ejecutables./xt /dosc /etc ./dsk . igual que /dev/pts* dispositivos crudos de disco terminales./null .Convenciones en nombres de archivos y directorios. comandos de usuario archivos de arranque punto de montaje para la uniad de CD-ROM archivos especiales de dispositivos [subdirectorios propios de System V] ./kd . configuración de sistema scripts de arranque y detención de programas enlaces a scripts./term ./init./pts ./rdsk . igual que /dev/tty* pseudo ttys./rc?.d . y número de secuencia para controlar el arranque . para capas DMD punto de montaje para la partición DOS configuración de paquetes./kmem ./osm ./fd . con K o S (Kill o Start).

intermedios de correo y otros ./man ./info . auxiliares./run información de procesos (PIDs) Preguntas y Ejercicios./backup .h de bibliotecas en C archivos de info. archivos que crecen respaldo de algunos archivos del sistema páginas man ya formateadas información propia de programas control de bloqueos archivos de registro de mensajes (log) del sistema colas de impresión./bin ./lib . Bibliografía./local ./doc . información de UNIX (GNU) más bibliotecas en C ejecutables instalados por el administrador subdirectorios de páginas del manual más archivos ejecutables de administración compartidos (source) código fuente del kernel archivos de log./catman ./log ./lock . Comandos: ls cat cd echo file mkdir pwd rm rmdir touch ./X11R6 ./share . referencia sistema X-Windows más ejecutables documentos de paquetes de software encabezados ./src /var ./usr . documentación./include ./lib ./sbin ./spool ejecutables.

ls.copia copia el archivo nota en nota. cambiar de nombre Enlaces "hard" Enlaces simbólicos Opciones del comando ls Cambio de dueño y grupo Modos de permisos Listado de permisos de los directorios Cambio de permisos basename. Si el directorio propio del usuario es /home/usuario1.copia. El resultado de cada ejemplo debe comprobarse mediante comandos tales como pwd. dirname Archivos de dispositivos El comando "mesg" Otros dispositivos Preguntas y Ejercicios Bibliografía y Referencias En los ejemplos siguientes se asume al usuario ubicado en su directorio personal. cat o more. .Manejo de Archivos Copia de Archivos Mover. cp nota nota. Copia de archivos. el cual contiene los archivos nota y LEAME.

cp nota LEAME dir1 pueden copiarse varios archivos hacia un directorio. el archivo se copia en ese directorio. Para copiar un directorio es preciso usar la opción -r. copia todos los archivos en dir2 hacia el directorio actual. "recursivo"./nota /home/usuario1/nota. mkdir dir1 cp nota dir1 si el destino es un directorio. rmdir dir3 fracasa porque dir3 no está vacío.copia hace lo mismo indicando las rutas. sean estos archivos o subdirectorios. rm -r dir1/* dir2 borra todos los archivos bajo dir1 y dir2. rm -r dir3 con la opción -r. Si el archivo destino existe lo sobreescribe y realiza la copia sin comentario ni advertencia. mkdir dir2 touch dir2/arch2 dir2/arch3 ls dir2 cp dir2/* . de "recursivo": cp -r dir1 dir3 ls -l dir3 copia el directorio dir1 y todo el contenido en el dir3. se puede borrar completamente un directorio y todo su contenido.cp . borra también el directorio dir2 pero no el dir1. .

echo 'Hola todos de nuevo!' > adios ln adios adios. eventualmente con diferentes nombres. no se hace copia. .rm arch? nota.. cambiar de nombre. y nota. Verificar que ls -l adios* .1 mueve hacia otro directorio cambiando el nombre.copia borra del directorio actual los archivos arch1.. El contenido se encuentra en un solo lado.ln0 ln crea un segundo nombre referido al mismo archivo. crea un enlace (link). Enlaces "hard". Mover. Un enlace "hard" (hard link) es una nueva referencia a un mismo archivo. pero el archivo puede ser accedido desde varios lugares. echo "Hola todos" > hola cat hola mv hola saludo cat saludo mv cambia el nombre del archivo hola por el de saludo. arch2. consiste en una nueva entrada de directorio que apunta a un archivo ya existente y apuntado desde otra entrada de directorio.copia. mv dir1 dirnuevo cambia de nombre archivos o directorios. mv saludo dir1/saludo. rm -r dirnuevo elimina dirnuevo y todos sus archivos.

El archivo de enlace simbólico contiene solamente la ruta del otro archivo o directorio.ls0 como enlace simbólico. Enlaces simbólicos.ln2 ls -l adios* muestra el conteo de enlaces hard en estos archivos.ls0 crea nota. ls dir2 . luego uno o más nombres de enlaces a crear. no está repetido. ln dir2 dir2ln da error. Un enlace hard puede hacer aparecer un mismo archivo en más de un directorio. el contenido está en un solo lado. ls -l muestra la letra l en el tipo de archivo para indicar que es un enlace simbólico. Un enlace simbólico (symbolic link) es un archivo que apunta a otro archivo o directorio. mkdir dir2 ln adios dir2/adios hace aparecer en dir2 un enlace llamado adios hacia el archivo adios del directorio actual. Al crear el enlace con el comando ln. no se puede crear un enlace hard para un directorio. ln -s dir2 dir2ls crea dir2ls como enlace simbólico hacia un directorio. ln -s nota nota. ln adios adios.muestra un conteo de 2 en la columna de enlaces. con igual o distinto nombre. rm adios* ls -l dir2/adios Cuando se borra un archivo con varios enlaces. El archivo es realmente borrado sólo cuando desaparece el último enlace.ln1 ln adios adios. observar que el archivo existente va en primer lugar. sólo se borra el enlace.

ls -l dir2ls muestra que es un enlace simbólico e indica hacia donde apunta. y no el objeto real. El comando pwd es interno del shell. mv dir2 DIR2 cambia el nombre del directorio real.. pwd indica el directorio con nombre del enlace. puesto que el enlace simbólico es un archivo y no un directorio. no el enlace simbólico. /bin/pwd indica la ruta de acceso al verdadero directorio. cd dir2ls ls -l muestra el contenido de dir2. rmdir dir2ls da error porque no es un directorio sino un enlace. aún cuando sea un enlace simbólico hacia un directorio. cd .ls dir2ls muestran el mismo contenido de archivos. rm dir2ls borra el enlace. Un enlace simbólico se borra con rm. el enlace simbólico sigue apuntando a cd dir2ls dir2. ya que no existe el objeto real. mv DIR2 dir2 repone el nombre original al que apunta el enlace. y no con rmdir. ls dir2 cuando se borra un enlace simbólico. enlazado desde dir2ls. pero /bin/pwd muestra el directorio verdadero. /bin/pwd es un programa aparte. por lo que da error. Conviene usar /bin/pwd para evitar ser engañado por enlaces simbólicos a directorios. . sólo se borra un archivo puntero. pwd indica la ruta por la que se llegó al directorio.

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

El cambio de dueño no está permitido a usuarios comunes. es posible copiarlo para disponer de una copia propia.][[+-=][rwxstugo. cambia el dueño de la lista de archivos indicada. chgrp tecnicos arch1 arch2 cambia el grupo de la lista de archivos. En la forma simbólica.. adjudicándoselo al grupo tecnicos. o acceso si es directorio usa el id del dueño o grupo del archivo al ejecutar fijar "sticky bit" a un directorio: sólo dueños pueden borrar usuario (dueño) grupo otros .cambia el dueño del archivo nota adjudicándoselo a chown usuario1 arch1 arch2 usuario1. Los permisos de archivos y directorios se cambian con el comando chmod. Modos de permisos. Si el archivo tiene permiso de lectura. No puede revertirse. ya que el usuario actual dejó de ser dueño de esos archivos..] + = 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 ejecución. chgrp tecnicos nota cambia de grupo el archivo notas.. El dueño debe pertenecer al grupo tecnicos. sino reservado al supervisor para evitar que a un usuario se le adjudiquen archivos sin su consentimiento.. se usa la siguiente sintaxis: [ugoa. Pueden expresarse de dos maneras: simbólica y absoluta.

En modo absoluto se usa un código de 4 dígitos octales 0. Listado de permisos de los directorios.a todos (dueño.7. o acceso si es directorio Ejemplos de permisos en notación absoluta: 0777 0755 0764 0640 0710 chmod 0764 arch1 cambia los permisos como en el ejemplo anterior.o-rwx chmod u+rwx.g=rw. con el código 4 lectura 2 escritura 1 ejecución.g+rw-x..g+r-wx.o=r arch1 cambian los permisos de los archivos indicados. 3 dígitos: permisos del usuario. . en la forma Nnnn.o+r-wx arch1 chmod u=rwx. grupo y otros) Ejemplos de permisos en notación simbólica: u+r g+w-r ug+r ugo+w-rx u+rwx. ls -l muestra los permisos y otros atributos. N. grupo y otros. primer dígito: 4 fijar ID del dueño al ejecutar 2 fijar ID del grupo al ejecutar 1 fijar "sticky bit" a un directorio nnn.

El comando chmod admite las opciones -v verboso. chmod u-w+x nota chmod u-wx+r nota cambian varios permisos del dueño al mismo tiempo. chmod u+rw-x. ls -l lista todos los archivos. describe los permisos cambiados . chmod u-w nota quita permisos de escritura al dueño. chmod u+w nota chmod g+w nota chmod o+w nota concede permiso de escritura solo al usuario.Para obtener información del directorio dir1 ubicado en el directorio actual. al grupo o a otros. y dando sus atributos como directorio. entre los que aparece dir1. muestra atributos del directorio actual. chmod 0644 nota realiza lo mismo en notación absoluta. sin listar su contenido. Los permisos que no se mencionen quedan como estén. Cambio de permisos. ls -ld .g+r-wx.o+r-wx nota fija todos los permisos en una sola operación. chmod u+w nota concede permisos de escritura al dueño. ls -ld dir1 trata la entrada dir1 como archivo. ls -l dir1 lista el contenido del directorio dir1.

-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 dueño 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, sólo 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 dueño o del grupo dueño 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 operación de borrado al dueño 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 vía hacia el editor vi.
EDITOR=/usr/bin/vi echo $EDITOR

muestra el nombre del editor a usar por defecto.

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

muestra el nombre del 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 estándar entre los dispositivos de hardware y el sistema operativo que actúa igual que un archivo común: todas las operaciones de entrada y salida se hacen escribiendo y leyendo sobre un archivo. No se trata de un archivo común en disco; actúa 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 también hacia un disco, una cinta o un módem con sólo 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 sesión de terminal; escribir varias líneas 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, también pueden ver lo que se está haciendo o aún 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 recepción 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.

esto lo hace difícil de usar hasta que uno se acostumbra. fáciles de usar y con múltiples capacidades. también versiones fáciles de manejar como jove o pico. lo que allí se envíe se pierde para siempre. para programar y en situaciones de emergencia. Existen en UNIX otros editores más potentes y versátiles. Todos los dispositivos de hardware del sistema tienen una representación en el directorio /dev. Uso básico de vi Modos de vi Guía de Supervivencia Uso avanzado de vi Modo Comando Modo Texto Modo "ex" o última línea Tipos de Terminal Preguntas y Ejercicios Bibliografía y Referencias Uso básico de vi. Existe un editor vi ampliado llamado vim que contiene facilidades adicionales. No guarda nada. el conjunto de comandos básicos es el mismo. como emacs. o aún mínimas e inmediatas como ae. En ambiente X-Windows hay muchos editores amigables. así como diversas versiones del vi original. requiere pocos recursos. corrupción de sistemas de archivos. No obstante.cat /etc/passwd cat /etc/passwd > /dev/null El dispositivo /dev/null actúa como una papelera de tamaño ilimitado que recibe la salida a descartar. se usa mucho en administración. Es el editor clásico de UNIX. vi está en todos los UNIX. . que provee un ambiente de trabajo completo. Editor vi. En casos de roturas de discos. puede ser el único editor disponible. errores en el arranque y otras catástrofes. está en todas las versiones. El editor vi es un editor de texto de pantalla completa que maneja en memoria el texto entero de un archivo. En todos los casos. Puede usarse en cualquier tipo de terminal con un mínimo de teclas.

vi +$ arch1 edita el archivo arch1 posicionando el cursor al final del archivo. vi arch1 edita el archivo arch1 si existe. disponer de esta capacidad es esencial en la administración de un sistema. vi +45 arch1 edita el archivo arch1 posicionando el cursor en la línea 45. Es el modo inicial de vi.Como la mayoría de las configuraciones en UNIX se manejan editando archivos. abre la ventana de edición sin abrir ningún archivo. Existen tres modos o estados en vi: • • • modo comando: las teclas ejecutan acciones que permiten desplazar el cursor. Guía de supervivencia. ejecutar comandos de manejo del texto y salir del editor. Modos de vi. modo texto o modo inserción: las teclas ingresan caracteres en el texto. lo crea. si no. vi arch1 arch2 edita sucesivamente los archivos arch1 y luego arch2. . Con unos pocos comandos básicos 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 línea h o flecha izquierda mueve el cursor un caracter a la izquierda j o flecha abajo mueve el cursor una línea hacia abajo k o flecha arriba mueve el cursor una línea 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 Invocación de vi. recorrer el archivo. modo última línea o ex: las teclas se usan para escribir comandos en la última línea al final de la pantalla. vi vi.

El editor vi. Cambio de modo. 5Y . Confundir un comando en minúscula digitando uno en mayúscula suele tener consecuencias catastróficas. Muchos comandos aceptan un número multiplicador antes del comando. o tecla ESC (interrumpe el comando). comando a última línea: teclas : / ? última línea a comando: tecla ENTER (al finalizar el comando). comando a texto: teclas de inserción i I a A o O. mantener el teclado en minúsculas.vi +/Habia arch1 edita el archivo arch1 en la primera ocurrencia de la palabra "Habia". Ejemplos: 10j en modo comando avanza 10 líneas. o tecla de sobreescritura R. Se aconseja evitar sistemáticamente el uso de la traba de mayúsculas. al igual que todo UNIX. Confundir un modo con otro la de mayor dificultades para el manejo de vi. diferencia mayúsculas y minúsculas. La acción es idéntica a invocar el comando tantas veces como indica el multiplicador. Números multiplicadores. texto a comando: tecla ESC. Puede activarse un indicador de modo escribiendo :set showmode Esto hace aparecer una leyenda que indica si se está en modo comando o inserción. 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 línea borra las 3 líneas siguientes deshace último cambio graba cambios y sale de vi sale de vi sin grabar cambios busca la expresión indicada /expresiónENTER 3Y :6r arch3 copia 3 líneas para luego pegar inserta debajo de la líne 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 posición hacia la izquierda una posición hacia la derecha una línea hacia arriba una línea hacia abajo fin de línea principio de línea comienzo del archivo fin del archivo línea número 18 mostrar número de línea 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 línea hasta el paréntesis que aparea parte superior de la pantalla parte inferior de la pantalla al medio de la pantalla cursor a la columna 23 . Los siguientes ejemplos de manejo asumen que el editor se encuentra en modo comando. Ejemplos de manejo.copia 5 líneas y las retiene para luego pegar.

queda guardada borrar desde cursor a fin de línea borrar desde cursor a fin de palabra borrar desde cursor a fin de línea borrar desde cursor a principio de línea Copiar y pegar Y o yy copiar línea P p yw y$ "ayy o "aY 'a' "ayw "ap "aP "bdd "bdw pegar antes del cursor pegar después del cursor copiar palabra copiar de cursor a fin de línea copiar línea en buffer llamado 'a' copiar palabra en buffer llamado pegar desde buffer 'a'. a la derecha del cursor pegar desde buffer 'a'.Control de pantalla. a la izquierda del cursor borrar línea y guardar en buffer 'b' borrar palabra y guardar en buffer 'b' . Ctrl-f una pantalla adelante Ctrl-b Ctrl-l Ctrl-d Ctrl-u una pantalla atrás redibujar la pantalla media pantalla adelante media pantalla atrás Ingreso en modo texto: i I a A o O R insertar antes del cursor insertar al principio de la línea insertar después del cursor insertar al final de la línea abrir línea debajo de la actual abrir línea encima de la actual sobreescribir (cambiar) texto Borrar x borrar caracter bajo el cursor dd D dw d$ d0 borrar línea.

buscar hacia atrás cadena de caracteres 'str' repetir último comando / o ? repetir último comando / o ? para el otro lado buscar el siguiente caracter 'c' en la línea buscar el anterior caracter 'c' en la línea ir al caracter anterior al siguiente 'c' ir al caracter posterior al precedente 'c' repetir el último comando f. y sale con ESC. o T último comando f. Al dar un comando de reemplazo el editor coloca un símbolo $ en donde termina el pedido de reemplazo.Búsqueda /str buscar hacia adelante cadena de caracteres 'str' ?str n N fc Fc tc Tc . BS borrar caracter hacia la izquierda ESC pasar a modo comando Modo ex o última línea. F. . c cw C o c$ c0 reemplaza caracteres reemplaza palabras reemplaza hasta el fin de línea reemplaza desde el comienzo de línea Otros J unir dos líneas en una ZZ u U grabar cambios si los hubo y salir deshacer última acción deshacer todos los cambios en una línea Modo Texto. F. o T para el otro ladoLa cadena a buscar en / o ? puede ser una expresión regular. El usuario escribe normalmente. t. t y T alcanza sólo a la línea actual. . t. si el caracter buscado no está en esa línea el cursor no se mueve. sobreescribiendo. Reemplazo Estos comandos admiten multiplicadores: un número delante del comando. F. Estos comandos admiten multiplicadores: 3cw abre un área de reemplazo para 3 palabras. hasta donde necesite. La acción de f.

s (sustituir) y g(global) son letras de comando para el manejo de expresiones regulares. <hasta> indican líneas en el archivo.5s/ayuda/&ndo/g cambia ayuda por ayudando desde línea actual hasta la 5a. digitar vi TERM=ansi. En estos casos.: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 línea 1 mueve a línea 15 mueve a última línea Opciones :set :set :set :set :set nu nonu showmode noshowmode cambio de opciones mostrar números de línea no mostrar números de línea mostrar modo actual de vi no mostrar modo actual de vi Reemplazo La sintaxis del comando de búsqueda y reemplazo es la siguiente: :<desde>. puede usarse Ctrl-L para refrescar la pantalla.. :1. pueden no responder bien en la terminal o el emulador que se está usando. en la mayoría de los terminales remotos el tipo ansi da buenos resultados.$s/Martes/martes/g cambia Martes por martes en todo el archivo.<hasta>s/<buscar>/<reemplazar>/g <desde>. es independiente del tipo de terminal. Tipo de terminal. / es un separador. Si no se conoce o no existe el tipo exacto de terminal.export TERM Algunos comandos. <buscar> y <reemplazar> son cadenas de caracteres o expresiones regulares. especialmente more y a veces vi. línea. :. pero la variable de ambiente TERM debe estar fijada correctamente. . Para fijar el terminal en tipo ansi.

Las expresiones regulares son aceptadas en otros editores y en muchos comandos. Las búsquedas en el editor vi con los comandos / y ? aceptan expresiones regulares. luego un punto. el patrón aba*. si bien con algunas diferencias de sintaxis. Una expresión regular es un patrón que describe un conjunto de cadenas de caracteres.txt describe el conjunto de cadenas de caracteres que comienzan con aba. y finalmente la . esto hace las búsquedas mucho más potentes y flexibles. La expresiones regulares (ER) son una forma de describir cadenas de caracteres. Las expresiones regulares permiten realizar búsquedas o sustituciones de gran complejidad. contienen cualquier otro grupo de caracteres.Expresiones Regulares Expresiones Regulares Metacaracteres Expresiones regulares básicas Expresiones regulares de un sólo caracter Construcción de expresiones regulares Ejemplos de expresiones regulares básicas Expresiones regulares extendidas Ejemplos de expresiones regulares extendidas Expresiones Regulares en GNU Preguntas y Ejercicios Bibliografía y Referencias Expresiones Regulares. Por ejemplo. Se usan en operaciones de apareamiento o comparación.

como el caracter asterisco. si escribimos \?. El conjunto de metacaracteres para expresiones regulares es el siguiente: \ ^ $ . usando operadores para combinar expresiones más pequeñas. b o c [0-9][a-z][A. son interpretados en su significado especial y no como los caracteres que normalmente representan. ERs de un sólo caracter. Metacaracteres. Una búsqueda que implique alguno de estos caracteres obligará a "escaparlo" de la interpretación mediante \. Las expresiones regulares se componen de expresiones regulares elementales que aparean con un único caracter: Exp.indica . Las expresiones regulares se construyen como las expresiones aritméticas.txt el caracter * no vale por sí mismo. En una expresión regular. El signo . La construcción de expresiones regulares depende de la asignación de significado especial a algunos caracteres. el caracter ? no se interpreta como el signo de interrogación sino que representa "un caracter cualquiera y uno solo". [abc] [^abc] aparea con ER que aparea con el caracter ordinario c (punto) ER que aparea con un caracter cualquiera excepto nueva línea ER de un caracter que aparea con a. c . estamos representando el caracter ? tal cual.ERs de un caracter que aparean con cualquier caracter en el intervalo indicado. En el patrón aba*.cadena txt. Una expresión regular determina un conjunto de cadenas de caracteres. equipara o satisface la expresión regular. 1 o más caracteres cualesquiera". atendiendo siempre al conjunto de cadenas que representa cada patrón. en una expresión regular. como se hace para evitar la interpretación por el shell de los metacaracteres del shell. Analizaremos esos operadores y las reglas de construcción de expresiones regulares. Asimismo. sino que indica un "conjunto de caracteres cualesquiera".Reg. b o c ER de un caracter que no sea a. El símbolo * se interpreta como "0. el caracter ? representa "un caracter cualquiera". sin significado adicional. [ ] { } | ( ) * + ? Estos caracteres. Estos caracteres a los que se asigna significado especial se denominan "metacaracteres". Expresiones Regulares Básicas. Un miembro de este conjunto de cadenas se dice que aparea.

Dentro de los conjuntos de caracteres individuales. cada uno. ER que aparea con alguno de estos caracteres (en lugar de la e): . * [ \ cuando no están dentro de [ ] al principio de la ER. para incluir un . pero esta última expresión depende de la secuencia de codificación ASCII. para incluir un ^ colocarlo en cualquier lugar menos al principio. el \ escapa el significado especial indica ubicado al comienzo de la línea (cadena nula al principio de línea) . [[:alnum:]] significa [0-9A-Za-z]. Una Expresión Regular se contruye con uno o más operadores que indican. los paréntesis rectos forman parte del nombre de la categoría. en cambio la primera es portable. el caracter a buscar. no pueden ser omitidos. colocarlo al principio. Para incluir un caracter ] en una lista. Los operadores más comunes y aceptados son los siguientes: Operador c \c ^ Significado un caracter no especial concuerda consigo mismo elimina significado especial de un caracter c. Muchos metacaracteres pierden su significado si están dentro de listas: los caracteres especiales. o al principio dentro de [ ] al final de una ER \e ^ $ / usado para delimitar una ER Los paréntesis rectos [] delimitan listas de caracteres individuales.Z] un intervalo de caracteres consecutivos. Construcción de Expresiones Regulares. En los nombres de categorías. no pierde su significado bajo distintas codificaciones.colocarlo al final. se reconocen las siguientes categorías: [:alnum:] [:alpha:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] alfanuméricos alfabéticos de control dígitos gráficos minúsculas imprimibles de puntuación espacios mayúsculas dígitos hexadecimales Por ejemplo. * [ \ valen por sí dentro de [].

.b [abc] [aA] [aA][bB] [0123456789] [0-9] [A-Za-z] [0-9][0-9][0-9] [0-9]* [0-9][0-9]* ^.. ..] [^. 0-9.. Las expresiones regulares se aprenden mejor con los ejemplos y el uso....... 0 1 9 00 99 123 456 999 9999 99999 99999999 .. 019 100 .] r* r1r2 indica ubicado al final de la línea (cadena nula al final de línea) (punto) un caracter individual cualquiera uno cualquiera de los caracteres .. 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 .. Exp. a..*$ aparea con axb aab abb aSb a#b .. z 000 001 .$ .. acepta intervalos del tipo a-z.. A-Z (lista) un caracter distinto de .. acepta intervalos del tipo a-z.. axxb aaab abbb a4$b ...Reg. 999 cadena_vacía 0 1 9 00 99 123 456 999 9999 .b a. [. 009 010 .. 0-9. cualquier línea completa En el editor /^Desde vi. las expresiones regulares permiten realizar búsquedas tales como: busca líneas que empiecen con la cadena Desde ... A-Z 0.. 1 o más ocurrencias de la ER r (repetición) la ER r1 seguida de la ER r2 (concatenación) Ejemplos de Expresiones Regulares Básicas. Z a b c .

Algunos comandos...m} r1|r2 (r) "r" Significado 1 o más ocurrencias de la ER r 0 o una ocurrencia de la ER r. que comprenden las Expresiones Regulares Básicas más algunos operadores que permiten construcciones más complejas.Ext. la concatenación tiene precedencia sobre la alternativa. b 0b 1b 2b . y no más n ocurrencias de la ER r n o más ocurrencias de la ER r 0 o a lo sumo m ocurrencias de la ER r n o más ocurrencias de la ER r.. 9b cadena_vacía 1234ab 9ab9ab9ab 9876543210ab 99ab99ab . cadena_vacía 0 1 2 . aceptan Expresiones Regulares Extendidas.m} r{n..} r{. como egrep o grep -E. 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 repetición tiene precedencia sobre la concatenación../final$ busca líneas que termine con la cadena /\$25 final busca líneas que contengan $25. \ escapa el $ Expresiones Regulares Extendidas... Ejemplos de Expresiones Regulares Extendidas: Exp. . Una expresión puede encerrarse entre paréntesis para ser evaluada primero. 9 a b cadena_vacía ab abab ababab . [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 . Los operadores incorporados son los siguientes: Operador r+ r? r{n} r{n.Reg.

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

sort grep find fgrep y egrep tr uniq dd Preguntas y Ejercicios Bibliografía y Referencias Se da el nombe de filtros a un grupo de comandos que leen alguna entrada. y cut. los caracteres idiomáticos (vocales acentuadas. sort -n arch2. sort arch1 ordena según el código ASCII. en ordenamiento ASCII sería al revés.Filtros. Además de los que veremos aquí. tail.3 arch1.num ordena numéricamente. incluye comandos tales como head. Si no se indican campos de ordenación. En la ordenación numérica se respeta la ordenación por valor numérico de la cadena de caracteres: 101 va después de 21. la comparación se hace sobre toda la línea. realizan una transformación y escriben una salida. ñ) no se encuentran en el orden alfabético tradicional.txt . sort La comparación u ordenación puede ser por caracteres ASCII o por valor numérico. sort -t: -k1. En este ordenamiento. sigue el orden del juego de caracteres ASCII. wc. Si se indican campos. La ordenación ASCII es la más parecida a la alfabética. la comparación se hace considerando la cadena de caracteres iniciada en el primer caracter del primer campo hasta el último caracter del último campo.

son de cierto tipo (regular. find puede realizar diversas acciones sobre ellos: • • • • • ver o editar.txt ordena por campos tomando en cuenta desde el 3er. En los argumentos numéricos. etc.3. los campos se definen por blancos (espacio o tabulador). cambiar sus permisos de acceso.txt ordena alfabéticamente. contienen texto que aparea con cierto patrón. imprime sus nombres en la salida. tomando en cuenta para la comparación los caracteres desde el primero del campo 1 hasta el último del campo 3.ordena por campos separados por ":". tienen un tamaño comprendido dentro de cierto intervalo. Como no se indica separador. find /var/spool/mail -atime +30 -print . find /var -name *. -N es menor que N. Una vez ubicados los archivos. tienen ciertos permisos de acceso. caracter del campo 1 hasta el 5to. caracter del campo 3.num ordena en orden numérico descendente.3.). sort -t: -k1. fueron usados por última vez en un cierto período de tiempo. eliminarlos o renombrarlos. permitiendo criterios de búsqueda tales como: • • • • • • • • el nombre contiene cierta cadena de caracteres o aparea con algún patrón: son enlaces a ciertos archivos. N es exactamente igual a N. guardar sus nombres en otro archivo. directorio. pertenecen a cierto usuario o grupo. El comando find en GNU es extremadamente potente. enlace simbólico. +N es mayor que N.5 arch1. usando como cadena de comparación la comprendida desde el primer caracter del 3er. find El comando find explora una rama de directorios buscando archivos que cumplan determinados criterios.log -print busca en el directorio /var los archivos terminados en .log. sort -nr arch2. sort -k3 arch3. clasificarlos por grupos. find /tmp -size +200k -print busca archivos mayores de 200k. campo hasta el fin de lína.

La opción -atime se refiere a tiempo transcurrido desde última lectura. grep unix01 /etc/passwd grep unix0[1-9] /etc/passwd ls -l /usr | grep '^d' lista sólo los subdirectorios del directorio /usr (la línea empieza con "d").. find /home -nouser -ls busca archivos en los cuales en lugar del nombre de usuario dueño aparece un número (UID). Esta situación 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 líneas que contienen una cadena de caracteres especificada mediante una expresión regular. uno por línea.busca archivos no accedidos hace más de 30 días. -ctime de contenido. find /var/tmp -empty -exec rm {} \. grep martes dias grep tes dias muestra las líneas del archivo dias que contienen la cadena "tes". La sintaxis es grep patrón archivos donde el patrón a buscar es una expresión regular. -mtime desde última modificación de estado o permisos. grep '^[^:]*::' /etc/passwd . ls -l / | grep '.rw' lista sólo los archivos que otros pueden leer y escribir en el directorio principal... llamarle dias. busca archivos vacíos y los borra.. Crear un archivo con los días de la semana.. Lee la entrada estándar o una lista de archivos y muestra en la salida sólo aquellas líneas que contienen la expresión indicada.

busca usuarios sin contraseña. separadas por nueva línea. caracteres al principio de línea que no sean ":". -n para mostrar el número de línea y -v para buscar líneas que no contengan la expresión regular indicada. fgrep egrep fgrep (extended grep). tienen un * en el lugar de la contraseña. donde buscar. y no una expresión regular. . \ escapa el significado del segundo *. pero puede buscar muy eficientemente muchas palabras en paralelo.egrep acepta expresiones más complejas.fgrep dias extrae del archivo dias las líneas que contienen estas cadenas. fgrep martes dias busca la cadena martes en el archivo dias.exp es un archivo que contiene la expresión a buscar: cadenas simples para fgrep.exp. una por línea. que es el de la contraseña. y luego "::" (el segundo lugar.fgrep con las cadenas "tes" y "jue". fgrep y egrep Hay dos versiones de grep que optimizan la búsqueda en casos particulares: (fixed grep. que vale como caracter a buscar. Entre las opciones de grep se cuentan -i para evitar distinguir entre mayúsculas de minúsculas. que acepta expresiones regulares extendidas con los operadores + ? | y paréntesis. por lo que se usa mucho en búsquedas bibliográficas. Crear un archivo buscar. está vacío). es decir que la salida serán todas las líneas que contengan una cualquiera de las expresiones a buscar. no interpreta metacaracteres. aunque permite buscar varias de estas cadenas simultáneamente. El comando fgrep -f buscar. expresiones regulares para egrep. las expresiones se aplican individualmente a cada línea. las expresiones se buscan en paralelo. grep es un buen compromiso entre ambos. En fgrep y egrep puede indicarse la opción -f buscar. o fast grep) acepta solamente una cadena de caracteres. pero es más lento. Ninguna expresión regular de grep aparea con un caracter nueva línea. grep '^[^:]*:\*:' /etc/passwd busca usuarios que no pueden entrar al sistema.

-c para sustituir complemento de los caracteres indicados. aunque no idéntico. intercaladas entre los nombres de los días. y -s para comprimir caracteres repetidos en uno solo.fgrep dias egrep "tes|jue" dias grep -E "tes|jue" dias obtienen el mismo efecto del comando anterior. grep -F -f buscar.El comando grep soporta fgrep y egrep como opciones -F y -E. que no sean ésos. cat dias | tr a-z A-Z convierte todo a mayúsculas. . fgrep es idéntico a grep -F. Entre sus opciones se encuentran -d para borrar caracteres. egrep es compatible con el comando histórico egrep. elimina renglones en blanco. cat nota | tr -c "[a-zA-Z0-9]" "_" transforma todos los caracteres que no sean letras o números en subrayas. egrep "([0-9]+ab)*1234" archivo busca cadenas comenzadas opcionalmente por un dígito y los caracteres ab. y hasta encontrar la cadena 1234. cat dias cat dias | tr -s "\n*" convierte varios caracteres nueva línea seguidos en una solo. cat dias | tr -d aeiou borra todas las vocales del archivo dias. grep -E acepta expresiones regulares extendidas y es la versión moderna del comando en GNU. varias seguidas. Escribir grep -E es similar a egrep. La sustitución es caracter a caracter. todo el paréntesis 0 o más veces. tr El comando tr translitera los caracteres de la entrada: sustituye unos caracteres por otros. respectivamente. Agregar al archivo dias líneas en blanco. es decir.

sort -n ordena por cantidad de ocurrencias y tail muestra las 5 ocurrencias más frecuentes.txt | tr -sc A-Za-z '\012' | \ sort | uniq -c | sort -n | tail 5 lista todos los archivos. sort los ordena. El siguiente ejemplo muestra las 5 palabras más frecuentes en el conjunto de archivos: cat *.4 comprime los blancos en la salida para poder cortar campos. . como en los respaldos en cinta. ls -l /usr | tr -s " " | cut -f3. La opción -c escribe el número de ocurrencias al comienzo del renglón. es decir. deja cada palabra sola en un renglón. hace ajuste de blancos y otras transformaciones usuales cuando se manejan transferencias entre sistemas operativos distintos o datos en bruto. elimina renglones repetidos consecutivos. cat dd El comando dd es un convertidor de datos: convierte de ASCII a EBCDIC y a la inversa. tr comprime el renglón eliminando blancos. cambia los tamaños de los bloques de registros.cat nota | tr -cs "[a-zA-Z0-9]" "[\n*]" transforma todos los caracteres que no sean letras o números en nuevalínea. uniq El comando uniq excluye todos los renglones adyacentes duplicados menos uno. sin formato. uniq cuenta las ocurrencias y elimina repetidos. y comprime las nuevalíneas repetidas en una sola.

Una línea de comando termina con un caracter nuevalínea." echo $LOGNAME. date Si un comando no cabe en una línea. Varios comandos pueden escribirse en una misma línea usando el separador ".Programación del Shell Comandos multilínea El archivo de comandos (script) Comentarios en los scripts Comandos de programación true false if for case while until exit expr test read Parámetros Depuración Preguntas y Ejercicios Bibliografía y Referencias El intérprete de comandos o "shell" de UNIX es también un lenguage de programación completo. ésta es la denominación aplicada a los programas escritos en el lenguaje del shell. C en el caso de UNIX. la mayoría de los intérpretes continúan la digitación en la línea siguiente. Sin embargo. Para establecer específicamente que un comando continúa en la línea siguiente. pwd. Los diseñadores de sistemas suelen escribir aplicaciones en el lenguaje de base del sistema operativo. pero no ambas al mismo tiempo): . La programación de shell se usa mucho para realizar tareas repetidas con frecuencia. por razones de rapidez y eficiencia. el shell de UNIX tiene un excelente rendimiento en la ejecución de "scripts" (guiones). El caracter nuevalínea se ingresa digitando la tecla ENTER. hay dos formas. Comandos multilínea. Se han creado aplicaciones completas usando solamente scripts. mutuamente excluyentes (se usa una u otra.

sh misdatos. En los ejemplos anteriores hemos escrito los indicadores de comando.sh si el directorio actual no está contenido en la variable PATH. Al continuar el comando en la segunda línea.. El archivo de comandos (script). y ejecutarlos todos de una sola vez sólo invocando el nombre del archivo. pues el símbolo # convierte toda la línea en comentario. Se colocan comentarios de documentación en diferentes partes del script para mejorar la comprensión y facilitar el mantenimiento. no ejecuta nada. el indicador de comandos cambia de $ a >. puede interrumpirse el ingreso con Ctrl-C.sh El símbolo # indica comentario.sh # muestra datos relativos al usuario que lo invoca # echo "MIS DATOS.terminar la primera línea con \ : $ echo $LOGNAME \ > $HOME que muestra algo como jperez /home/jperez $ echo "$LOGNAME > $HOME" .sh bash misdatos. volviendo el indicador de comando a PS1 inmediatamente. del indicador de comando de primer nivel PS1 al indicador de comando de segundo nivel PS2.sh La invocación (ejecución) del archivo puede realizarse dando el nombre de archivo como argumento a bash o invocándolo directamente como un comando Puede requerirse indicar una vía absoluta o relativa. En un script todo lo que venga después del símbolo # y hasta el próximo caracter nuevalínea se toma como comentario y no se ejecuta. echo Hola todos # cat /etc/passwd # comentario hasta fin de línea sólo imprime "Hola todos". es preciso dar al mismo permisos de ejecución: chmod ug+x misdatos. Para poder ejecutar los comandos contenidos en este archivo." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date echo # fin misdatos. o referirse al directorio actual. Comentarios en los scripts. Los scripts suelen encabezarse con comentarios que indican el nombre de archivo y lo que hace el script. Es cómodo poder retener una lista larga de comandos en un archivo.dejar una comilla sin cerrar: que produce el mismo resultado. Si no se quiere terminar el comando multilínea. . Un caso especial es el uso de # en la primera línea para indicar el intérprete con que se ejecutará el script. El script anterior con comentarios quedaría así: .sh con las siguientes líneas: # misdatos. Crear el archivomisdatos. es decir./misdatos.

Esta escritura informal se denomina "pseudocódigo". pelarla. fin caso Funciones: una tarea que se realiza repetidamente dentro del mismo programa puede escribirse aparte e invocarse como una "función". Esta indicación debe ser siempre la primera línea del script y no puede tener blancos. pero detrás de cualquiera de ellas.#!/bin/bash # misdatos. divorciado) escribir "Sólo será feliz si se vuelve a casar". en otro caso. función area_cuadrado (lado) devolver lado * lado.sh La primera línea indica que el script será ejecutado con el intérprete de comandos bash. para usarla basta escribir su nombre y colocar el valor del parámetro entre paréntesis. Las estructuras básicas de programación son sólo dos: la estructura repetitiva y la estructura alternativa. comerla. por contraposición al término "código". dia_semana(i) sería una función que devuelve el nombre del día de la semana cuando se le da su número ordinal. Estructura repetitiva: se realiza una acción un cierto número de veces.sh # # muestra datos propios del usuario que lo invoca # echo "MIS DATOS. En el segundo ejemplo. # oráculo caso $estado en soltero) escribir "El casamiento será su felicidad". o mientras dure una condición. mientras haya manzanas." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date # muestra fecha y hora echo # línea en blanco para presentación # fin misdatos. desde i = 1 hasta i = 7 escribir dia_semana(i). se decide una acción diferente para cada caso. que sería la escritura formal en un lenguaje de programación. se encuentran siempre repeticiones o alternativas. Definida así la función. Para definir una función es preciso elegir un nombre y escribir un trozo de código asociado a ese nombre. . por compleja que parezca. pelarlas. Cada forma tiene sus variaciones. casado) escribir "El divorcio le devolverá la felicidad". La función suele recibir algún valor como "parámetro" en base al cual realiza su tarea. Estructuras básicas de programación. Estructura alternativa: en base a la comprobación de una condición. si manzana está pelada. y la combinación de todas ellas generan múltples posibilidades.

y falso es distinto de 0. cualquier valor diferente de 0 se toma como falso. sólo devuelve siempre 0... fin caso. 2) devolver "Martes". su significado es propio de cada comando. 6) devolver "Sábado".función dia_semana(día_hoy) caso $dia_hoy en 1) devolver "Lunes". La ejecución correcta de un comando cualquiera devuelve 0. false echo $? muestra el valor 1. Las diversas condiciones de error de ejecución de los comandos devuelven valores diferentes de 0. la variable $? retiene el valor de retorno del último comando ejecutado... se usan en algunas situaciones de programación para fijar una condición. 5) devolver "Viernes. then comandos1 . Comandos de programación. El shell adopta esta convención porque los comandos retornan 0 cuando no hubo error. el valor verdadero. true Este comando no hace nada. que retornan siempre estos valores. [else comandos2 . true echo $? muestra el valor 0. false Este comando tampoco hace nada sólo devuelve siempre 1. if El comando if implementa una estructura alternativa.. Su sintaxis es if expresión . Veremos dos comandos. 3) devolver "Miércoles". 7) devolver "Domingo".: 4) devolver "Jueves".. el indicador cambia a > hasta que termina el .] fi o también if expresión then comandos1 [else comandos2] fi Si se usa la forma multilínea cuando se trabaja en la línea de comandos. true y false. Obsérvese que el shell toma la convención inversa de C para cierto y falso: cierto es 0. En esta sección veremos los comandos típicos de programación del shell.

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. Crear y probar el siguiente script. si el valor retornado es 0 (cierto) los comandos1 se ejecutan. La expresión puede ser cualquier expresión lógica o comando que retorne un valor. Crear y ejecutar el siguiente script: # trabajo. do comandos . if true. 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. else echo Falso . 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.sh: dice si se trabaja según el día # invocar con parámetros: # domingo. en la cual una secuencia de comandos se ejecuta una y otra vez. done Se puede probar en la línea de comandos: for NUMERO in 1 2 3 4 ./ciertofalso. if false. Invocar este script con . fi siempre imprime Falso.sh N donde N es un número entero 0.sh: escribe cierto o falso según parámetro numérico # if [ $1 = "0" ] then echo "Cierto: el parámetro es 0. no entra nunca en else.comando. do echo $NOMBRE . fi siempre imprime Cierto. Su sintaxis es for variable in lista . done for NOMBRE in alfa beta gamma . then echo Cierto . no entra nunca en then.sh: lista de palabras . 1. do echo $NUMERO . then echo Cierto . feriado. # listapal. Escribir en un archivo las líneas que siguen # ciertofalso." else echo "Falso: el parámetro no es 0. Verificar el resultado. else echo Falso . etc. 2." fi Convertir el script en ejecutable. Construcciones más complejas pueden hacerse usando elif para anidar alternativas. done for ARCH in * . La variable $1 hace referencia a este parámetro de invocación.

# muestra palabras de una lista interna # LISTA="silla mesa banco cuadro armario" for I in $LISTA do echo $I done # fin listapal. La elección se realiza encontrando el primer patrón con el que aparea una cadena de caracteres. *) echo Debe indicar un número de 0 a 6. esac El patrón * se coloca al final.. 4) echo Jueves. 1) echo Lunes. Su sintaxis es case $CADENA in patrón1) comandos1.sh N donde N es cualquier número de 0 a 6.... otro número.. o una cadena cualquiera.. 5) echo Viernes. Crear el siguiente script: # diasemana. Verificar el comportamiento. el comando expr calcula expresiones aritméticas.sh # indica la estación del año aproximada según el mes . 3) echo Miércoles. y permite ejecutar comandosN cuando ninguna de las opciones anteriores fue satisfecha.sh con estas líneas: # estacion.. .. *) comandosN. Crear el archivo estacion. 6) echo Sábado.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... elige entre múltiples secuencias de comandos la secuencia a ejecutar.sh: nombres de los días de la semana # invocar con número del 0 al 6. patrón2) comandos2.. esac Invocarlo como diasemana.sh En el siguiente script.sh case Este comando implementa alternativas o "casos". notar su sintaxis. aparea cualquier cadena. # contarch. 0 es domingo case $1 in 0) echo Domingo... 2) echo Martes.

Su sintaxis es while condición . marzo|abril|mayo) echo Otoño. # crear1. significa "menor que".arch9. es útil para dar instrucciones sobre el uso del comando. "lower than". done Usando until.sh El valor $1 es el parámetro recibido en la línea de comando. | actúa como OR. Notar la diferencia con while. do comandos . La condición se examina al principio y luego cada vez que se completa la secuencia de comandos.. que realiza una prueba devolviendo cierto o falso. junio|julio|agosto) echo Invierno.sh # crea archivos arch1. En cuanto la condición se cumple.# case $1 in diciembre|enero|febrero) echo Verano. esac # fin estacion. setiembre|octubre |noviembre) echo Primavera.. do comandos . dejan de ejecutarse los comandos. los comandos no se ejecutan nunca.sh mes echo con el nombre del mes en minúscula. por lo que actúa como "en otro caso". sobre todo la posición de los espacios en blanco. Si la condición es falsa desde la primera vez. pueden usarse también comodines * y ?.sh until Este comando implementa una estructura repetitiva en la cual el conjunto de comando se ejecuta hasta que se cumpla una condición.sh ¿Cómo podría modificarse el script anterior para que aceptara el mes en cualquier combinación de mayúsculas y minúsculas? while Este comando implementa una estructura repetitiva en la cual el conjunto de comandos se ejecuta mientras se mantenga válida una condición (while = mientras). 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. Su sintaxis es until condición .. Invocar el script: bash estacion.sh: debe invocarse como echo estacion. done En el guión que sigue la expresión entre paréntesis rectos es una forma de invocar el comando test. La condición se examina al principio. obligatorios. Observar su sintaxis. En las opciones. los comandos no se ejecutan. *) echo estacion. El operador-lt.... La opción *) aparea con cualquier cadena.sh octubre bash estacion. el script anterior se escribiría .. si es verdadera..

exit en un script. *) echo " -> Terminación con error 3. El siguiente script ofrece un ejemplo de uso.. esac expr Este comando recibe números y operadores aritméticos como argumentos..arch9. termina inmediatamente el script. lo que puede usarse para determinar condiciones de error. exit 0 termina el script devolviendo 0. para indicar la finalización exitosa de tareas. error1.sh: prueba valores de retorno de exit # clear echo "Prueba de valores de retorno" echo " Invocar con parámetros " echo " bien.sh exit Este comando se utiliza en programación de shell para terminar inmediatamente un script y volver al shell original. Cada argumento debe estar separado por blancos. en la línea de comando. exit 6 termina el script devolviendo el número indicado. error1) echo " -> Terminación con error 1. termina la ejecución del shell actual. resto de división entera (%). al igual que los paréntesis. exit 1. 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. y por lo tanto la sesión de UNIX. exit 2.. Los símbolos * y / deben ser escapados escribiendo \* y \/. Escribir sólo exit también devuelve código de error 0. multiplicación (*)." . efectúa los cálculos indicados y devuelve el resultado." exit 3. #!/bin/bash # exitar. Opera sólo con números enteros y realiza las operaciones suma (+). división entera (/).. error2) echo " -> Terminación con error 2.. .. cualquier cosa o nada" echo " Verificar valor de retorno con" echo ' echo $?' echo VALOR=$1 case $VALOR in bien) echo " -> Terminación sin error. resta (-).# crear2..sh # crea archivos arch1. error2." exit 0." ." echo " (invocado con parámetro no previsto o sin parámetro. que deben escribirse \( y \).

. el ! se usa para negar. esto lo hace apto para usar en la condición de if. else echo Falso. "no igual". expr 3 \* 4 + 6 \/2 devuelve 15 ( 3 * 4 + 6 /2 = 15 ). -le (menor o igual). else echo Falso . >= y <=. La condición [ "$VAR1" ] devuelve falso si la variable no está definida. fi [ cadena ] . y falso ante una cadena vacía: test "cadena" . desigualdad). else echo Falso. -r comprueba si es legible. \ else echo "No existe archivo". test if if if if test devuelve cierto ante una cadena no vacía. y distinto de 0 es cierto. >. = para igualdad y != para desigualdad. fi prueba una cantidad de condiciones y situaciones: if [ -f archivo ]. echo `expr 6 \> 10` devuelve 0. -w si puede escribirse. cierto para expr.El comando expr usa la convención de C para cierto y falso: 0 es falso. La condición [ expnum1 -eq expnum2 ] compara igualdad de expresiones que resultan en un número. -d si es un directorio. -lt (menor). else echo Falso . -s si tiene tamaño mayor que 0. then echo Cierto . then echo Cierto . test Este comando prueba condiciones y devuelve valor cierto (0) o falso (distinto de 0) según el criterio de cierto y falso del shell. echo `expr abc \< abd` devuelve 1. sin comillas no habría cadena y daría error de sintaxis. cierto para expr. análogamente. ya que éstas también resultan en números. fi [ ] . -ge (mayor o igual). -neq (no igual. expr 3 \* \( 4 + 3 \) \/2 devuelve 10 ( 3 * (4 + 3) / 2 = 10 ). expr 4 + 5 devuelve 9 ( 4 + 5 = 9 ). El comando test se usa mucho para determinar si un comando se completó con éxito. then echo "Existe archivo". -x si es ejecutable. en cuyo caso el valor de retorno es 0. aceptando los operadores =. then echo Cierto . fi test "" . -gt (mayor). Las condiciones [ $DIR = $HOME ] [ $LOGNAME = "usuario1" ] [ $RESULTADO != "error" ] comparan cadenas de caracteres. Estos caracteres también requieren ser escapados. then echo Cierto . No confundir con la convención que toma el shell en sus valores true y false. Las comillas dan la cadena nula cuando VAR1 no está definida. Pueden ser expresiones numéricas o lógicas. también realiza operaciones lógicas de comparación. fi La condición [ -f archivo ] es cierta si archivo existe y es un archivo normal. El operador != es devuelve 1. El siguiente script crea un archivo si no existe. expr echo `expr 6 \< 10` !=. falso para expr. y son -eq (igualdad). <. Tiene dos formas equivalentes test expresión [ expresión ] Los blancos entre la expresión y los paréntesis rectos son necesarios. Los operadores numéricos derivan sus letras del inglés. que es la contraria.

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 algún permiso fi ls -l $ARCH # fin rwsi.sh: captura datos del usuario # clear echo "Datos del usuario. # yo.sh crea un archivo de ese nombre. # rwsi." fi Parámetros. . Otros operadores aceptados por test son -a (AND) y -o (OR). hasta obtener un caracter nueva línea (techa Enter)." echo -n "Nombre y apellido: ".# nvoarch. bash nvoarch. read CEDULA echo echo "Ha ingresado los siguientes datos:" echo " Nombre y apellido: $NOMBRE" echo " Cédula de Identidad: $CEDULA" echo -n "¿Es correcto?(sN):". El ejemplo siguiente obtiene datos del usuario. un mensaje ya existe archivo $1 Para comprobar su acción." else echo "Debe ingresar sus datos nuevamente.sh read Este comando tiene como propósito solicitar información al usuario. los repite en pantalla. ls comprueba que existe. bash nvoarch. read RESP if [ "$RESP" = "s" -o $RESP = "S" ] then echo "Fin de ingreso.sh nuevo1 da mensaje indicando que el archivo ya existe. Su ejecución captura las digitaciones del usuario.sh nuevo1 ls -l nuevo1 crea el archivo. read NOMBRE echo -n "Cédula de identidad: ". solicita confirmación y emite un mensaje en consecuencia.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.

Se llama depuración ("debug") de un programa al proceso de verificar su funcionamiento en todos los casos posibles y corregir sus errores ("bugs". del inglés. Dentro del script.El siguiente programa muestra los parámetros que recibe al ser invocado: # ecopars. puede convenir invocarlo de forma especial para generar información de comandos ejecutados y errores.sh # se invoca con 3 parámetros y los muestra echo nombre del programa: $0 echo parámetros recibidos: echo $1.sh # muestra los parámetros recibidos echo Cantidad de parámetros: $# for VAR in $* do echo $VAR done # fin ecopars. echo $3 echo # fin mostrar3. bash -x ecopars. los parámetros recibidos pueden referenciarse con $1. $2.. invoca el script obteniendo una salida verbosa con información sobre cada comando ejecutado.sh bash -v ecopars. $3. literalmente. $9. y emitir un mensaje de error en caso contrario (cuando el usuario ingresa menos de 3 parámetros)? Depuración..sh ¿Cómo se podría verificar la invocación con 3 parámetros. . por extensión. para ayudar en la depuración. y $# la cantidad. "pulgas". La variable $* contiene la lista de parámetros. bash -xv ecopars. "chinche".. El siguiente programa se invoca con tres parámetros y muestra sus valores: # mostrar3. .sh imprime cada comando en la salida. Cuando se está escribiendo un script.sh ecopars.sh 2>ecopars. Debido a que se los reconoce por su ubicación. Las salidas se imprimen en el error estándar. echo $2.sh Enero Febrero Marzo muestra la cantidad y los parámetros recibidos. por lo que pueden direccionarse a un archivo sin mezclarse con la salida del comando. siendo $0 el nombre del propio programa. se llaman parámetros posicionales. insecto pequeño).err reúne las dos fuentes de información y direcciona el error estándar a un archivo.

opciones más frecuentes y ejemplos de uso de los comandos UNIX de más uso en la práctica. [] {A|B} TAB LF CR blanco UID GID (su) repetición del último item item opcional. los items en MAYUSCULAS deben ser sustituídos por valores del usuario. Esta guía no puede ni pretende sustituir la consulta de las páginas man. delimita palabras identificador de usuario (número) identificador de grupo (número) requiere permiso de supervisor ESPACIO caracter o tecla de barra espaciadora Los items en minúsculas van tal cual. opciones más usuales. acción principal. debe tomarse A o B tecla o caracter tabulador caracter nueva línea caracter retorno de carro caracter TAB o ESPACIO.Comandos de Usuario Ultima revisión: Set 2001 Propósito 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 Propósito: Esta guía resume la sintaxis. Metalenguaje y convenciones: . sintaxis resumida. ejemplos y observaciones. En descripción se presenta nombre del comando. apropos .. puede estar o no item opcional obligatorio.. si las hay.

-wN en un ancho de N columnas banner -w 40 Hola! banner a cal cal [OPCIONES] [[MES]AÑO] Sin parámetros. el año debe indicarse con centuria. hace perder los datos originales en arch1. -r interpreta cada nombre como una expresión 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°. cap2 y cap3 en el archivo libro.apropos [OPCIONES] PALABRA-CLAVE . cap2 y cap3.. Sin argumentos. para imprimir carteles. el mes en número 1 a 12.. contado desde el 1 de enero calendario del año en curso cal cal 1998 cal 11 1997 cal 9 1752 muestra el mes del año en que se saltearon 11 días para compensar años bisiestos.] Concatena los archivos indicados y los muestra en la salida estándar. -j -y día juliano. busca entre las descripciones cortas de las páginas del manual la presencia de la palabra clave. muestra calendario del mes actual. 1-1999. cd cd [DIRECTORIO] . cat cap1 cap2 cap3 > libro cat arch1 arch2 > arch1 reúne los archivos cap1... -A -b -E -n -s -t -v -T equivalente a -vET numera las líneas que no están en blanco muestra $ al final de cada línea numera las líneas reemplaza varias líneas 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. recibe de la entrada estándar (-). cat cat [OPCIONES] [ARCHIVO .

cp cp [OPCIONES] ARCH_ORIGEN ARCH_DESTINO cp [OPCIONES] ARCHIVO .. DIRECTORIO copia ARCH_ORIGEN hacia ARCH_DESTINO. Los valores decimales SALTEAR1 y SALTEAR2 indican la posición de byte donde comienza la comparación en ARCH1 y ARCH2. copia directorios y sus archivos verboso.. si difieren. Por defecto no copia directorios. cambia al directorio propio del usuario como aparece en $HOME. cmp cmp [OPCIONES] ARCH1 ARCH2 [SALTEAR1 [SALTEAR2]] compara dos archivos.o+r-wx cap*. . -l -s número de byte (decimal) y bytes diferentes (octal) para cada diferencia. ver bash(1). Los valores de retorno son 0 si los archivos son iguales. devueve solamente un valor de retorno. cambia permisos de subdirectorios y sus contenidos chmod -R 0755 documentos/visibles chmod ug+rw-x. Si son iguales. No cambia los permisos de los enlaces simbólicos. marca el byte y el número de línea de la primera diferencia. cd /etc cd chmod chmod [OPCION] MODO ARCHIVO . sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes crea enlaces hard en lugar de copiar los archivos preserva dueño. conservando permisos y manteniendo enlaces simbólicos.txt clear clear borra la pantalla del terminal. -v -R verboso. copia los archivos indicados hacia DIRECTORIO. grupo. 1 si diferen. sin parámetros.cambia directorio de trabajo. o en octal precediendo con 0. recursivo. >1 si hubo un error.. En Linux. cambia los permisos de acceso a los archivos indicados. permiso y fecha crea enlaces simbólicos en lugar de copiar los archivos recursivo. puede expresarse en hexadecimal precediento el número con 0x. 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. es un comando interno del shell.. no dice nada. sin escribir nada. -d -f -i -l -p -s -R -v copia enlaces simbólicos como tales forzoso. describe acción sobre cada archivo. verboso puede omitirse. recursivamente.

Con +FORMATO la presenta según el patrón indicado.. -f -c -d -s campos numerados.es m hasta el último campo o columna... -u --utc --universal hora universal (GMT) Formato para fijar la hora: MM DD HH mm CC YY SS mes (01-12) día (01-31) hora (00-23) mminuto (00-59) centuria año 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 representación local (%H:%M:S) '%a' nombre local abreviado del día '%A' nombre local completo del día '%b' nombre local abreviado del mes '%B' nombre local completo del mes '%c' fecha y hora locales '%d' día del mes (01-31) '%m' mes (01-12) '%w' día de la semana (0-6). ubicación posicional de caracteres en la línea fija el caracter delimitador de campos. por defecto separados por TAB columnas.3.SS] ] fija (su) fecha y hora. date date [OPCION] [+FORMATO] muestra fecha y hora. Intervalos incompletos: -n es 1-n.5-6 cat /etc/passwd | cut -c1-15 ls -l | cut -c57- corta sólo el nombre del archivo.] extrae partes de cada línea de los archivos indicados o de la entrada estándar. m...cut cut -f CAMPOS [-d DELIM][ARCHIVO .) diff diff ARCHIVO1 ARCHIVO2 muestra las diferencias existentes entre dos archivos.. date [-u|--utc|--universal] [ MMDDHHmm [[CC]YY][. o con intervalos n-m. Los campos y columnas se indican con números 1.. diff nota1 nota2 . 2. 0 es Domingo '%x' fecha local '%y' 2 dígitos del año (00-99) '%Y' 4 dígitos del año (1970... al final (puede requerir ajuste en el valor de columna). TAB por defecto con -f para no imprimir líneas que no contengan el delimitador cat /etc/passwd | cut -d: -f1.] cut -c COLUMNAS [ARCHIVO ..

file file OPCIONES ARCHIVO intenta determinar el tipo de archivo de que se trata: texto ASCII.. echo Directorio $HOME ls -l $HOME dir1. dentro de " " \a campana \b retroceso \c suprime LF al final \f cambio de página \n nueva línea (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. guardado en la variable de ambiente HOME. ignorando el actual env env DIR=/etc listadir1 lista el contenido del directorio /etc. debe invocarse como /bin/echo. éste.. para listar contenido del muestra el directorio propio del usuario.echo echo [OPCIONES] MENSAJE .. escribe en la salida estándar los mensajes. script en diversos lenguajes. que es 101 en octal. con argumentos. binario. listadir es un archivo ejecutable que contiene la línea ls directorio dir1.. corre el comando indicado con las variables de ambiente modificadas según se indique.]] Sin argumentos. si no se indica retorna con 0. separados con un espacio y con LF al final. código C. fuera del shell. env env [OPCIONES][NOMBRE=VALOR]. exit exit [N] produce la salida del shell con estado de terminación N (número).[COMANDO [ARGUMENTO .. otros. -n -e suprime LF al final interpreta estos caracteres especiales. Muchos shells tienen un comando interno del mismo nombre. muestra valores de variables de ambiente.. -z examina archivos comprimidos . -i comenzar con un ambiente virgen.

conf hostname hostname [NOMBRE] sin argumentos. o -G real en lugar de efectivo. imprime encabezamiento con nombre del archivo silencioso. Muestra nombre. por defecto 10 imprime primeras N líneas head -24 /etc/inetd. no imprime encabezado con nombre del archivo imprime primeras N líneas.file cati. info info [NOMBRE] sistema de información de GNU sobre UNIX. con dominio DNS --domain nombre de dominio DNS --ip-address dirección (número IP) --alias nombres de alias verboso id id [OPCIONES] [NOMBRE_USUARIO] muestra información sobre un usuario. por defecto 10 líneas. Si el id real y el efectivo no corresponden muestra ambos. info info . -g -G -n -r -u sólo el grupo primario grupos suplementarios nombre en lugar de número. muestra la primera parte de un archivo.c este archivo contiene código C. con NOMBRE. head head [OPCIONES] ARCHIVO . GID y grupos suplementarios. fija el nombre de la máquina (su). grupo. -h -f -d -i -a -v ayuda --fqdn nombre de máquina completo. -g o -G sólo el número de usuario (UID) id id webmaster muestra datos del usuario webmaster.. UID. -v -q -N -n N verboso. requiere -u. Si son varios archivos muestra un encabezado con el nombre de cada archivo.. requiere -u. da el nombre de la máquina. file adduser este archivo es un script en Perl. Las opciones limitan el despliegue. file /bin/cat es un ejecutable binario. -g.

vdir ls [OPCIONES] [NOMBRE] Para cada nombre de directorio. ln crea en ese directorio enlaces a todos los archivos origen con el mismo nombre.. pide confirmación para eliminar archivos simbólico. crea un enlace con el primer nombre (archivo real) hacia el segundo (enlace). dir. con más opciones y comandos. pero no lee todo el archivo al principio. Por defecto. * ejecutable.usuario datos. nombre. separados por espacios. con tutorial para aprender a manejar info.muestra información sobre info. número de índice de cada archivo tamaños en KB listado en formato largo invertir ordenamiento listar recursivamente subdirectorios tamaño en bloques de 1024 bytes ordenar por fecha de última modificación (mtime en inodo) ordenar por fecha de último acceso (atime en inodo) no ordenar salida en columnas con ordenamiento por filas dir . crea enlaces simbólicos en lugar de hard verboso. elimina archivos destino existentes interactivo. cantidad de enlaces hard. Sin nombre.ln -s /etc/passwd -s datos. por lo que es más rápido. indica su nombre y datos. los campos tipo archivo y permisos. La opción -l muestra. DIRECTORIO si el último argumento es un directorio.usuario LEAME dir2 ls. lista contenido de directorio. si se indican dos archivos. no su contenido indica tipo: / directorio.. -f -i -s -v ln ln ln ln forzoso. mes. less less [OPCIONES] [ARCHIVO] programa de paginado y búsqueda similar a more. -1 -a -c -C -d -F -i -k -l -r -R -s -t -u -U -x un nombre de archivo por línea todos los archivos. grupo. da el nombre de cada enlace creado nota nota. incluso no visibles comenzados por . --help -? muestra ayuda sobre comandos internos ln ln [OPCIONES] ORIGEN [DESTINO] ln [OPCIONES] ORIGEN . día. La salida está ordenada alfabéticamente por defecto. tamaño. Sus comandos están tomados de more y vi (ver more). lista el directorio corriente. crea enlaces hard y no elimina archivos existentes.usu. para cada nombre de archivo.ln -sv datos. si sólo se indica un nombre de archivo. ordenar por fecha de estado de último cambio (ctime en inodo) salida en columnas con ordenamiento por columnas lista directorios como archivos. dueño. @ enlace simbólico inodo. hora o año. Permite movimiento hacia adelante y atrás. crea un enlace hacia ese archivo en el directorio actual.

uy juan envía un mensaje al usuario juan. Las páginas están organizadas en secciones.. Da formato y muestra las páginas del manual en línea. -a -d -f -h -k -w muestra páginas en todas las secciones muestra información de depuración propia de man equivalente a whatis muestra ayuda para man equivalente a apropos no imprime las páginas. Sin argumentos. -v -s -c -b -f -u verboso. con copia a usuarios pedro y mateo. reconocidas por un dígito. muestra detalles de entrega TEMA especifica el tema (subject) del mensaje LISTA envía copias a LISTA de usuarios.mateo@nsk. marcado con '>' muestra el mensaje número N sale del programa de correo mail -s "Saludos para todos " -c pedro. muestra sólo la primera que encuentre.com.] procesador de correo electrónico de UNIX. Si hay un destino. Si no se indica sección. -l. tema "Saludos para todos"." aislado en una línea y envía lo leído como mensaje a destino. sino las ubicaciones Secciones del manual: 1 programas ejecutables y guiones (scripts) 2 llamadas al sistema (funciones del núcleo) 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 administración (su) man -h man man man -a man mesg mesg [y|n] ..equivale al ls vdir -C.. equivale a ls mail mail [OPCIONES] [DESTINO . si se indica sección como número 1-9. muestra lista de mensajes en la casilla de entrada y permite manipularlos. man man [OPCIONES] [SECCION] NOMBRE . muestra la página que haya en la sección indicada. y eventualmente subsecciones indicadas por una o más letras.. separados por coma LISTA envía 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. lee de la entrada estándar hasta un ".

-p crea primero todos los directorios padre inexistentes. con el modo de umask modificado con u+wx --verbose informa sobre la creación 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 . también ^B (Ctrl-L) redibuja la pantalla muestra número de línea actual busca hacia adelante la expresión regular PATRON busca hacia atrás la expresión regular PATRON repetir última búsqueda repetir el comando anterior ir a lugar de comienzo de última búsqueda sale mv mv [OPCIONES] ARCH_ORIGNEN ARCH_DESTINO mv [OPCIONES] ARCHIVO .. crea los directorios indicados.controla acceso de escritura a la terminal propia por otros usuarios. el modo es 0777 menos los bits de umask. ^F retrocede una pantalla...] pagina el texto dividiéndolo en pantallas. algunos de los cuales pueden ir precedidos de un número multiplicador: h ESPACIO ENTER f b ^L = /PATRON ?/PATRON n . Sin parámetros. ´ q.. -m MODO permite fijar el modo para el nuevo directorio. presentando una por vez. DIRECTORIO . Q muestra resumen de estos comandos avanza una pantalla muestra siguiente línea avanza una pantalla.. reconoce los comandos siguientes.. Por defecto. 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 . típicamente con programas tales como talk y write. el modo es simbólico y usa el modo por defecto como partida. is n si no está habilitada escritura. -N fija tamaño de pantalla en N líneas -d muestra mensajes de ayuda -s comprime en una varias líneas en blanco seguidas -u suprime subrayados +/cadena busca la cadena antes de mostrar +N comienza a mostrar a partir de la línea N Durante el despliegue. muestra el estado: is ysi está habilitada escritura.

o mueve hacia ARCH_DESTINO si el archivo destino invoca otro directorio. escribe en salida estándar un texto con formato. pr pr [OPCIONES] ARCHIVO . .cambia de nombre ARCH_ORIGEN. por defecto 66 -m escribir archivos en paralelo uno en cada columna -o margen izquierdo. dígitos 0 a 9 o signos de puntuación. -x M -n M -n M máximo número de días de validez.. sobreescribe archivos destino si existen avisa antes de sobreescribir archivos existentes verboso. Si el superusuario asigna contraseñas poco seguras no hay advertencia. minúsculas. se suma al ancho indicado por -w -w ancho de página en columnas. contener mayúsculas. paginado y opcionalmente en varias columnas. El superusuario puede cambiar las contraseñas de otros usuarios. Entre sistemas de archivos sólo puede mover archivos normales. no se admiten contraseñas simples ni parecidas al nombre del usuario. mueve ARCHIVO y los siguientes archivos haciaDIRECTORIO. +P1[:P2] de página P1 a página P2 -C en C columnas -a escribe las columnas a través y no hacia abajo -d a doble espacio -f separar páginas con salto de página -h reemplazar encabezado con el indicado -l largo de página en líneas. En general. -f -i -v -u forzoso.. 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] . las contraseñas deben tener entre 6 y 8 caracteres. luego pide cambiar mínimo número de días antes de poder cambiar número de días de advertencia antes de expirar passwd permite cambiar la contraseña del usuario invocante passwd jperez (su) cambia la contraseña del usuario jperez.. escribe el nombre de cada archivo que mueve no mover si existe archivo destino más 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 contraseña del usuario..

todos los componentes mostrados serán los directorios reales. aún los sin terminal. elimina los archivos indicados.. Para las opciones. borra directorios y su contenido verboso. -f -i -r. . /bin/pwd versión externa.. informa sobre procesos en ejecución.. muestra nombre. muestra /var/mail. es preciso escribir ls -l /var/spool/mail muestra /var/spool/mail como enlace simbólico a /var/mail (Debian). cd /var/spool/mail pwd versión interna del shell.. -R -v ignora archivos inexistentes y nunca pide confirmación interactivo. pwd pwd imprime toda la ruta del directorio corriente. hora inicio. el enlace simbólico. en formato usuario. printenv TERM ps ps [OPCIONES] [PID] . aunque es aceptado. el directorio real. agregar una w para cada línea más sin encabezado sólo procesos en ejecución ps auxwww | more muestra todos los procesos en ejecución. muestra PGID y SID formato señales mostrar también procesos de otros usuarios. que es externa. recursivo. estado formato trabajos. puestra el valor de esa variable. admitiendo hasta 4 líneas por comando. muestra nombre de cada archivo eliminado rm arch1 arch2 dir1/arch3 rm -riv dir1/subdir1 rm -r * elimina TODOS los archivos y subdirectorios. si se indica un nombre de variable. muestra /var/spool/mail. por lo que para ejecutar ésta.. El shell tiene una versión interna de pwd. ¡Cuidado! rmdir rmdir [OPCIONES] DIRECTORIO .muestra el valor de todas las variables de ambiente. pregunta antes de eliminar cada archivo. no debe usarse -. no avisa. mostrar también procesos sin terminal de control no truncar líneas para caber en un ancho de página. por defecto no elimina directorios.. no enlaces simbólicos. rm rm [OPCIONES] NOMBRE . l u j s a x w h r formato largo formto usuario. PID.

0777 menos los bits de máscara. no imprime encabezado con nombre del archivo imprime últimas N líneas idem talk talk USUARIO [TTY] conversar con otro usuario. La máscara vigente es la fijada por defecto o la que se fije con este comando. hora de acceso y/o modificación de los archivos indicados. para directorios.arch arch1 arch2 umask umask [-S] [MODO] fija la máscara para permisos de creación según modo. umask muestra la máscara vigente.. Si modo se indica con número. cambia fecha.elimina directorios vacíos.arc touch -r antes. para archivos 0666 menos los bits de máscara. los permisos de creación serán.. -p elimina directorios padre si quedan vacíos rmdir dir2 rmdir -p dir1/subdir11/subdir111 tail tail [OPCIONES] ARCHIVO . por defecto 10 líneas. es preciso usar la formausuario@maquina. Si está en la misma máquina. muestra la última parte de un archivo. alcanza con el nombre de login del usuario. es en modo simbólico. si está en otra máquina. puede agregarse también centuria CC y año YY y segundos ss. día DD.ss] fija la fecha indicando mes MM. -f -v -q -N -n N continúa tratando de leer.. touch touch [OPCIONES] ARCHIVO . sin fijarla (por defecto. sin parámetros) . imprime encabezamiento con nombre del archivo silencioso. Si el usuario tiene varias sesiones a la vez. Sin parámetros. Si son varios archivos muestra un encabezado con el nombre de cada archivo. -a cambia sólo fecha de acceso -c no crea el archivo si no existe -m cambiar sólo fecha de modificación -r arch_ref fija la fecha según fecha del archivo arch_ref -t MMDDhhmm[[CC]YY][. La máscara indica los permisos que se quitan al permiso fijado. touch 01011200 dia1enero.. para archivos en crecimiento verboso. puede indicarse la terminal. si no. En general. usualmente en la forma ttyXX. -S muestra la máscara. les pone la fecha y hora actuales. es en octal. hora hh y minuto mm.h1 touch ahora. Si los archivos no existen los crea vacíos.

-r interpreta cada nombre como una expresión regular -w interpreta cada nombre como conteniendo caracteres comodines whatis man whatis -w man* which which PROGRAMA .. nombre de máquina remota o display X. . Muestra nombre de login. si éste está accesible a través de la variable PATH. uname uname [OPCIONES] muestra información de la máquina y del sistema operativo: -a -m -n -p -r -s -v toda la información máquina. es decir.. los de directorios en 2777 . 2755 (Debian). es decir.. 0644.umask muestra la máscara vigente. umask 022 fija los permisos de creación de archivos en 0666 . imprime una línea por cada uno y un total. muestra una descripción corta de los comandos similares a nombre. línea de terminal. -c -w -l sólo caracteres sólo palabras sólo líneas man pwd | wc -l wc /etc/passwd /etc/group whatis whatis [OPCIONES] NOMBRE . tipo de hardware nombre de máquina en la red tipo de procesador edición (release) del sistema operativo nombre del sistema operativo versión del sistema operativo wc wc [OPCIONES] ARCHIVO . who who [OPCIONES] [am i] Quién está en el sistema.. indica la ruta completa de PROGRAMA. hora de ingreso.022.022.. palabras y caracteres de los archivos indicados o de la entrada estándar.. cuenta líneas.. Si son varios los archivos.

whoami muestra el nombre asociado con el usuario adoptado. ebcdic convierte ASCII a EBCDIC. reemplaza nueva línea por espacio. ".. notrunc no truncar el archivo de salida. bs=BYTES leer y grabar entrada y salida en bloques.. copia un archivo. fgrep. de entrada estándar a salida estándar por defecto.] [EXPRESION] . Comandos de Filtro Referencias dd find grep." activo reciente si el usuario recibe (+) o no (-) mensajes igual que 'who am i' whoami whoami Muestra identificador del usuario efectivo actual. incluyen: ascii convierte EBCDIC a ASCII. block embloca cada línea de entrada en 'cbs' bytes.. unblock reemplaza espacios finales de cada bloque con nueva línea... ibs=BYTES leer la entrada en bloques de BYTES bytes. ibm convierte ASCII a EBCDIC alternativo.CONVERSION]. Si se ha usado su para adoptar otro usuario. egrep sort tr uniq dd dd OPCION . opcionalmente cambiando tamaño de bloques de entrada salida y realizando diversas conversiones. lcase convierte mayúsculas a minúsculas ucase convierte minúsculas a mayúsculas. find find [DIRECTORIO. Las opciones numéricas admiten los multiplicadores b para 512. of=ARCHIVO dirigir la salida al archivo indicado. conv=CONVERSION[. Los argumentos de conversión se separan por comas sin espacios. k para 1024.am i -H -u -w -m máquina y nombre de login del usuario invocante muestra encabezado de columnas tiempo inactivo. "old" es >24 horas. convertir según argumentos. if=ARCHIVO leer la entrada del archivo indicado. obs=BYTES grabar la salida en bloques de BYTES bytes.. rellena con espacios.

nombre aparea con expresión regular EXP idem. grep. -name '*. idem. caracteres. egrep. find /u/bill -amin +2 -amin -6 archivos que fueron leídos entre 2 y 6 minutos atrás.c' -size +100k -print muestra nombres de archivos terminados en .Recorre una jerarquía de directorios buscando archivos seleccionados según cierta expresión y muestra información sobre los encontrados. find / -empty -exec rm -rf '{}' '. regular o directorio archivo del usuario UNAME archivo del grupo GNAME archivo del usuario de número N archivo del grupo de número N archivo sin dueño asignado archivo sin grupo asignado Acciones: -print imprime la ruta completa de los archivos encontrados. find ~ -daystart -type f -mtime 1 archivos que fueron modificados ayer. idem. insensible a mayústulas. idem. La medición de tiempos se hace desde 24 horas atrás (1 día atrás). insensible a mayúsculas.c' busca enlaces simbólicos del nombre indicado. find /usr/src -name '*. para medir tiempos desde las 0 horas del día de hoy. usar la opción -daystart.texi' busca en el directorio indicado los archivos de nombre indicado.' busca archivos o directorios vacíos y los elimina. insensible a mayúsculas. -lname '*sysdep. ejecuta COMANDO sobre los archivos encontrados find /usr/local/doc -name '*. -ls lista los archivos encontrados en formato ls -dils -exec COMANDO {} \. fgrep . compara archivos de "header" (*. Criterios de búsqueda: -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.c con tamaño mayor de 100 K. find .' find . archivo es un enlace simbólico. último acceso N*24 horas atrás último cambio de estado N*24 horas atrás última modificación N*24 horas atrás último acceso N minutos atrás último cambio de estado N minutos horas atrás última modificación N minutos atrás mide tiempos desde las 0 horas de hoy tamaño de N bloques. Argumentos numéricos: +N -N N mayor que N menor que N exactamente N. KB o palabras (2 bytes) archivo vacío.insensible a mayúculas.h) del directorio corriente contra el archivo /tmp/master.h' -exec diff -u '{}' /tmp/master '. nombre con vía completa.

. mezclar archivos. similar a grep -E. útil cuando el patrón empieza con -f ARCHIVO obtiene los patrones del archivo.grep [ -e PATRON | -f ARCHIVO | PATRON ] OPCIONES ARCHIVO . Tiene 3 modos de operación: ordenar. POS1 hasta POS2 inclusive. recorre los archivos indicados extrayendo las líneas que aparean con un patrón de cadena de caracteres. y fgrep. uno por línea -h suprime indicación de archivo cuando se busca en varios archivos -i ignora mayúsculas y minúsculas en el patrón y en los archivos -n indicar número de línea -v muestra las líneas que no aparean con el patrón -w aparea el patrón como una palabra -x el patrón aparea con toda la línea sort sort [OPCIONES] [ARCHIVO. 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. CONJ1 [CONJ2] copia entrada en salida traduciendo. ordenado -b ignora blancos adelante en la ordenación -d ordena considerando sólo letras. números y blancos -f ordena como si todas fueran mayúsculas -i ignora caracteres no imprimibles (fuera de 040-0176 octal) -n ordena como valores numéricos y no como ASCII -r invertir el sentido de la ordenación -o arch archivo de salida. -c -m verifica si los archivos ya están ordenados mezcla archivos ordenados en uno solo.5 tr tr [OPCION]. CONJ1 y CONJ2 definen un conjunto ordenado de caracteres a transformar. comprimiendo o borrando caracteres.. o hasta el final si no hay POS2 Las posiciones POS1 y POS2 son de la forma F... mezcla o compara todas las líneas de los archivos indicados o de la entrada estándar. verificar orden. La opción -c reemplaza CONJ1 por su complemento. .] ordena. -c sólo muestra la cantidad de líneas -e PATRON usa el patrón indicado. los caracteres no especificados en el conjunto..C donde F es el número del campo y C es el primer caracter desde el comienzo del campo (para POS1) o desde el final del campo (para POS2). comprime caracteres repetidos en CONJ1 en una sola ocurrencia.. puede ser el de entrada -t usar el caracter indicado como separador de campos -k POS1[. -G -E -F el patrón es una expresión regular básica.5 | cut -d: -f4.POS2] campos de ordenación. si se omite C se ordena tomando en cuenta el primer caracter del campo. -d -s elimina los caracteres de CONJ1. opción por defecto el patrón es una expresión regular extendida el patrón es una cadena fija Existen dos variantes: egrep. igual a grep -F.

puede usars sort -u para lograr un efecto similar. saltear N caracteres antes de verificar unicidad. . incluído el espacio.. M-N 0-9 intervalo de caracteres desde el M al N (M anterior al N) equivale a 0123456789 La notación [:CLASE:] expande a los caracteres predefinidos en las clases: alnum alpha blank cntrl digit graph lower print punct space upper xdigit letras y números. -f N -s N saltear N campos antes de verificar unicidad. si no lo está. espacio. dígitos hexadecimales.-ds primero borra según CONJ1 y después comprime según CONJ2. tr -cs '[a-zA-Z0-9]' '[\n*]' separa las palabras una por línea. \r Control-M. tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]' convierten minúsculas en mayúsculas. pero existen las siguientes abreviaturas: \a Control-G. etc. Los caracteres no indicados en CONJ1 pasan incambiados. \' Control-J. La traducción se realiza cambiando el primer caracter de CONJ1 por el primer caracter de CONJ2. puede mostrar solo líneas que aparecen una vez. eliminando líneas repetidas sucesivas. caracteres de control. La mayoría de los caracteres se representan a sí mismos. uniq uniq [OPCION]. caracteres imprimibles. o sólo líneas que aparecen varias veces. espacio mayúsculas. signos de puntuación. tr -s '\n' comprime caracteres nueva línea en uno solo (elimina líneas en blanco). de CON1 por el 2o. el 2o. tr -d '\000' elimina caracteres nulos (octal 000). El formato de CONJ1 y CONJ2 se parece al de las expresiones regulares. \b Control-H. minúsculas caracteres imprimibles. \t Control-I. Opcionalmente. \OOO caracter representado por dígitos octales \\ barra inversa. números.. pero son sólo listas de caracteres. La entrada debe estar ya ordenada. [ENTRADA [SALIDA]] muestra una única línea para una entrada ordenada. excluído el espacio. \f Control-L. \v Control-K. de CONJ2. letras.

Si se indican saltear campos y caracteres. los campos se saltean primero. mayúsculas y minúsculas al comparar. sólo líneas repetidas. . sólo líneas únicas. Los campos son cadenas de caracteres separadas por uno o más blancos (espacios o tabuladores).-c -i -d -u indicar ignorar mostrar mostrar junto a cada línea el número de veces que aparece.