Curso Basico de UNIX

Share Embed Donate


Short Description

Introducción a los comandos basico, sobre el shell de unix, con algunos ejemplos...

Description

Curso Básico de UNIX (Ultima revisión: Mayo 2002) Sistemas Operativos Introducción a UNIX Tutorial ejercicios ejercicios complementarios complementarios GNU info Introducción al Shell ejercicios ejercicios complementarios complementarios UNIX y C Sistema de archivos ejercicios Manejo de archivos ejercicios ejercicios complementarios complementarios Editor vi ejercicios Expresiones regulares ejercicios Filtros ejercicios Programación del Shell problemas soluciones Reseña de comandos básicos Reseña de comandos de filtro Bibliografía

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 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. programar. Microprogramación: Microprogramación: control directo de dispositivos. En memoria de sólo lectura, o a veces en el propio hardware; interpreta i nterpreta 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 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 Programación en lenguaje de máquina absoluto, o realizando directamente las conexiones eléctricas. Alrededor 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 buscando minimizar los tiempos muertos. Tercera generación (1965-1980): circuitos integrados y multiprogramación. multiprogramación. El sistema 360 de IBM unifica computadoras comerciales 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, 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. 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), ( 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, eliminar, leer y escribir archivos. Los archivos se agrupan en directorios, y existen llamadas ll amadas 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 l a sucesión de directorios que permiten alcanzar el archivo a partir del directorio raíz. Cada proceso activo tiene un directorio de tr abajo 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. 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, 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 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 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.

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. Esctrictamente, UNIX designa el núcleo de un sistema operativo multiusuario y multitarea. En un sentido más amplio, comprende el núcleo del sistema operativo más un conjunto de programas que permiten compilar lenguajes de programación, editar texto, interpretar comandos, manejar archivos y discos, acceder a otras máquinas, establecer comunicaciones comunicaciones telefónicas, enviar y recibir correo electrónico, manejar las colas de impresión y un sinfín de tareas más. Algunos de estos programas pueden haber sido desarrollados por los propios usuarios. UNIX designa al mismo tiempo un cierto "ambiente de trabajo", un conjunto de circunstancias que encuentra el usuario de la computadora donde corre UNIX, tales como la presentación en pantalla, los programas disponibles y la forma de trabajo que impone o permite. Cuando hablemos de UNIX nos estaremos refiriendo al sentido amplio y, conjuntamente, conjuntamente, a su ambiente de trabajo.

Características: muchas herramientas de software (compiladores, editores, utilitarios para muchas tareas). reutiliza el software, a través de la combinación de comandos simples en aplicaciones complejas. portable: el mismo sistema operativo corre en un espectro de máquinas que van desde notebooks a supercomputadoras. Es el único sistema operativo con estas características. flexible: se adapta a muchas aplicaciones aplicaciones diferentes. potente: dispone de muchos comandos y servicios ya incorporados. multiusuario: atiende a muchas personas simultáneamente. multitarea: hace muchas cosas a la vez. elegante: sus comandos son breves, coherentes, específicos específicos para cada tarea y muy eficientes. orientado a redes desde el comienzo.



• • • • •



• •









• •







• •





dispone de un estándar (POSIX) que debe cumplir todo sistema operativo que pretenda ser UNIX, lo que asegura una evolución predecible.

Historia de UNIX Antecedentes: las computadoras ejecutan un trabajo por vez (años '40 y '50). los trabajos se agrupan y ejecutan "por lotes" (años '60). CTSS, un sistema operativo de propósito general y tiempo compartido, logra enorme éxito. MULTICS, MULTICS, un ambicioso proyecto de sistema operativo para cientos de usuarios fracasa y no llega a terminarse. UNIX. Ken Thomson, desarrollador de MULTICS, con ideas y apoyo de algunos compañeros, escribe un nuevo MULTICS más modesto en una máquina PDP-7 desechada (1969). Brian Kernighan, compañero de Thomson, lo llama irónicamente UNICS. UNIX pasa a una máquina PDP-11 (1970). Ritchie diseñó y escribió un compilador para lenguaje C. Thomson y Ritchie reescriben UNIX en C, rompiendo la tradición de sistemas operativos escritos en lenguaje ensamblador (1973). Esto aumenta la portabilidad del sistema hacia otras máquinas. Thomson y Ritchie reciben el premio Turing Turing por un memorable artículo sobre UNIX escrito en 1974. UNIX es adoptado en las universidades, por tratarse tr atarse de un "sistema abierto" que proporciona todo el código fuente (1974). BSD y System V; el estándar de POSIX. El desmembramiento de AT&T (1984) permite a esta empresa ingresar en el mercado de computadoras, y produce la primera versión comercial de UNIX, el Sistema III, que pronto es sustituído por el Sistema V versiones 2, 3 y 4. La Universidad de Berkeley produjo una versión mejorada para la l a PDP-11, llamada 1BSD; luego fueron la 3BSD y luego 4BSD, que incorporó el protocolo de redes TCP/IP. El grupo POSIX estudió y propuso un estándar para UNIX, llamado 1003.1, que define un conjunto de procedimientos de biblioteca que cualquier sistema conforme con UNIX debe proporcionar. Esto resolvió la controversia entre Sistema V y BSD. Se forma OSF, Open Software Foundation, integrada por IBM, DEC, HP y otros para enfrentar a AT&T. Crea un UNIX con más prestaciones que el estándar de POSIX. Versiones actuales de UNIX. AT&T, para enfrentar a OSF, crea UI, UNIX International, junto con otras empresas; crea otro UNIX ampliado de POSIX. IBM crea su propia variante de UNIX, llamada AIX. La confusión de versiones continúa. surgen las versiones UNIX de dominio público FreeBSD y Linux, que se distribuyen sin costo. Linux es desarrollado por una multitud de personas y equipos de trabajo a través de Internet. FreeBSD es desarrollado por un grupo de trabajo cerrado.



• • •

• •

• • •



• •











UNIX hacia el usuario final: distribuciones fáciles de instalar (SuSE, Redhat, Mandrake, Corel), aplicaciones de escritorio (Applixware, StarOffice), programas asistentes de administración para estaciones de trabajo o servidores.

Objetivos de UNIX. UNIX fue diseñado teniendo en mente los siguientes objetivos: crear un sistema interactivo de tiempo ti empo compartido diseñado por programadores y para programadores, programadores, destinado a usuarios calificados. que fuera sencillo, elegante, escueto y consistente. que permitiera resolver problemas complejos combinando un número r educido de comandos básicos.

Filosofía del sistema UNIX. Los objetivos con que se creó determinaron una "filosofía" "fi losofía" de UNIX caracterizada por: comandos cortos, simples, simples, específicos y muy eficientes, que "hacen una sola cosa pero la hacen muy bien". entrada y salida estandarizadas que permiten la interconexión i nterconexión de comandos. comandos. Esto se llama entubamiento ("pipelining"): la salida de un comando es tomada por el siguiente como entrada.

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

Referencias: Kernighan-Pike[1987], Coffin[1989], Tanenbaum[1992]

Tutorial • • • • • • • • • • • • • •



Emulador de Terminal Ingreso al sistema (login) Directorios Listado de archivos Manual de UNIX Contenido de un archivo Crear y borrar un archivo Correo 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.



Para ingresar a un sistema UNIX remoto desde un PC se usa habitualmente un "emulador de terminal". Este programa permite al PC comportarse como una terminal (teclado y pantalla, sin procesador) conectada directamente a la máquina UNIX. En el emulador de terminal se deben fijar los siguientes parámetros: Nombre descriptivo de la conexión a establecer (arbitrario). Nombre en la red de la máquina a la que se quiere conectar. Tipo de terminal que se emulará (VT100 es el más conocido). Conexión vía TCP/IP, protocolo de comunicación en la red.



Ingreso al sistema (login).



• • •

• • •

login: id-usuario password: id-usuario es el nombre identificador del usuario para ingreso al sistema, proceso que se denomina "login". Este nombre de usuario suele tener hasta 8 caracteres (letras, números y algunos símbolos), debe comenzar con minúscula. UNIX distingue entre mayúsculas y minúsculas. En el ingreso al sistema, no se permiten correcciones.

• • •

se despliega siempre después del login, es puesto por el administrador del sistema para información o bienvenida.

• • •

aviso de noticias nuevas. Las noticias se usan para informaciones generales de mayor tiempo de validez. Las noticias no aparecen más después de haber sido leídas. Para news. leer las noticias debe digitarse el comando news.

• •

You have mail



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

• • •

$ es el indicador de comandos del sistema; indica que el sistema está listo y aguarda una orden del operador, que debe ser escrita a continuación de $ y finalizada con la tecla .





En los siguientes ejemplos debe escribirse el comando tal cual se muestra, digitando la tecla al final. date comando que muestra la fecha y hora. who muestra los nombres de usuarios conectados al sistema en este momento. hostname muestra el nombre de la máquina UNIX.



Directorios.



• • • • •



• • • • • •

• • • • • •

• •

• • • •

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

Listado de archivos. Ensayemos el comando ls: ls lista archivos del directorio actual. ls -l /bin lista archivos en el directorio /bin; aquí se encuentran los archivos de comandos ejecutables del sistema. No cambia de directorio; el directorio actual sigue siendo el mismo. ls -l lista archivos en formato largo, dando detalles. El -l se llama opción o bandera; se lee "menos ele". La salida obtenida consta de renglones parecidos a -rw-rw-rw- 1 esteban users 138 Apr 5 19:34 leame y se interpretan así:

• • • • •

indica el tipo de archivo de que se trata, con esta convención: - archivo común, d directorio, l enlace o referencia a otro archivo.

• • • • • •



• •

rw-rw-rw son los permisos del archivo; r (read) permiso para leer el archivo w (write) permiso para modificar o eliminar el archivo x (execute) si se trata de un archivo, permiso para ejecutarlo como programa; si se trata de un directorio, permiso para ingresar en él y recorrerlo. Los tres grupos de 3 caracteres indican permisos para el dueño del archivo (esteban), su grupo (users) y el resto del mundo.

• • •

• • • • • •

1 cantidad de enlaces, referencias a este archivo desde otros archivos ubicados en diferentes lugares. esteban nombre del usuario dueño del archivo. users nombre del grupo al que pertenece el archivo 138 tamaño en bytes del archivo. Si se trata de un directorio, este número es de control del sistema, sin interpretación inmediata para el usuario.

• • •

Apr 5 19:34 fecha y hora de última modificación. Si no aparece el año, se asume el año corriente.

• • •

leame nombre del archivo. Notar que el nombre del archivo está siempre al final.

• • •

• • • •

ls -a muestra también archivos ocultos, normalmente normalmente no visibles en el listado. Los archivos cuyo nombre empieza con un punto son ocultos, en este sentido. Las entradas . y .. representan el directorio actual y el directorio padre, respectivamente. ls -la formato largo y archivos ocultos. ls -la /var listado de archivos visibles y ocultos en formato largo del directorio /var. /var.

• •

• •

• • • •



Manual de UNIX. UNIX dispone de un manual en línea l ínea o "páginas man" con información sobre comandos, archivos y otros elementos del sistema operativo. Aunque muy técnicas y a veces difíciles de comprender, son una referencia obligada para operar con solvencia. man ls ls , paginada para poder leer una pantalla por vez. muestra la página man del comando ls, Para salir antes de terminar, terminar, digitar 'q'. man man man. muestra la página man del propio comando man. man man > man.txt redirecciona la salida y graba el contenido de la página man en el archivo man.txt, lo que se puede verificar con ls. ls .

Contenido de un archivo.



cat man.txt muestra el contenido del archivo. El archivo man.txt, por provenir de una página man, contiene muchos caracteres de control para regular su despliegue en pantalla. El comando cat no intrepreta estos caracteres de control. El comando cat permite también concatenar archivos, según se verá. head man.txt muestra las primeras 10 líneas de un archivo. tail man.txt muestra las 10 líneas finales de un archivo. cat man.txt | more more, que presenta la lee una nota larga paginando; la salida de cat es tomada por more, more, digitar 'q'. La información página por página. Para interrumpir el paginado de more, tecla espaciadora avanza una pantalla, la combinación de teclas Ctrl-B retrocede una pantalla. more man.txt presenta la información de man.txt ya paginada. ls -l /etc | more muestra el extenso contenido del directorio /etc paginando la salida.



Crear y borrar un archivo.

• •

• • • • • •

• • •

• • • • • •

touch nota.vacia crea el archivo nota.vacia, nota.vacia, sin contenido alguno. ls -l nota.vacia muestra datos del archivo creado. cat nota.vacia no muestra nada, el archivo está vacío.

• • • •

touch .archivo_oculto .archivo_oculto crea un archivo vacío y oculto. ls

• • • • •

no muestra el archivo oculto creado, pero ls -a sí lo muestra. ls -la muestra datos en formato largo del archivo oculto.

• • •

rm nota.vacia nota.vacia. Como muchos comandos de UNIX, su nombre deriva de borra el archivo nota.vacia. palabras inglesas: rm proviene de "remove", eliminar o borrar. borrar.

• • •

rm -i man.txt borrado interactivo, pide confirmación antes de actuar.

• • • •

rm .archivo_oculto .archivo_oculto ls -la borra el archivo oculto y verifica listando los archivos del directorio.

• • • • • • • • • • • •

• • • •

• • • • • • • •

echo Mensaje en pantalla muestra en la pantalla la leyenda indicada. echo Este es el archivo mensaje1 > mensaje1 direcciona la salida del comando echo y graba la leyenda en el archivo mensaje1. ls -l mensaje1 cat mensaje1 muestra datos del archivo y verifica su contenido. echo Esta 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 mensaje1. Verifica el contenido con cat. cat. existente mensaje1.

Correo electrónico de UNIX. Para leer el correo, digitar mail Este comando ingresa al usuario en el sistema de correo electrónico de UNIX. Revisa la casilla de entrada de mensajes mostrando la lista de recibidos. De ahora en adelante, sólo se aceptan los comandos propios de mail. El indicador de comandos de mail es & Comandos disponibles dentro del sistema de correo: d borra mensaje corriente, marcado con '>' ? muestra lista de comandos para manejo de mensajes 5 muestra el mensaje 5 h muestra la lista de mensajes h 3 muestra la lista de mensajes comenzando en el 3 q sale del programa de correo

• • •

• •



Para enviar un correo al usuario juan, desde la línea de comando de UNIX digitar mail juan Escribir entonces el texto del mensaje. Antes de llegar al fin de la pantalla, digitar para que cambie al otro renglón. El comando mail no es un editor: no arregla las líneas ni permite corregir líneas anteriores. Al finalizar de escribir el mensaje, digitar .

(un punto solo en una línea) y dar . Un punto solo en la l a 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.

• • • • •

mail juan esteban envía mensaje al usuario juan y al usuario esteban. mail -s "Mensaje de prueba" juan envía un mensaje de prueba al usuario juan con el título "Mensaje de prueba". Es de cortesía indicar siempre el tema del mensaje, para que el destinatario sepa inmediatamente inmediatamente de qué se trata.

• •

• • •

• •

• • • •

• • • •

• •

Existen en UNIX muchos programas para manejo de correo, más potentes y sofisticados; aquí nos limitamos a mail como ejemplo de un comando de UNIX más bien artesanal, pero siempre presente y útil para mensajería sencilla.

Usuarios en el sistema. who muestra los usuarios que están actualmente en el sistema. Indica identificador de usuario, terminal en que está conectado, fecha y hora de ingreso al sistema. who am i da información sobre el usuario que está trabajando, indicando su máquina y nombre de usuario, terminal, fecha y hora. whoami presenta sólo el nombre del usuario que está operando. id proporciona la identificación del usuario invocante, dando el nombre de usuario y su número (UID), nombre de grupo primario y su número (GID), nombres de otros grupos a los cuales pertenece (si los hay) y sus números. id jperez proporciona datos de identificación del usuario indicado (jperez). finger proporciona nombre del usuario en el sistema, nombre nombre en la vida real y otros datos del usuario invocante, indicando si está en este momento en el sistema, y si tiene correo por leer. finger jperez proporciona información información sobre sobre el usuario indicado. indicado.

• •

• •

• •

• • • • • •



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

Cambio de contraseña.



passwd pide la vieja contraseña y luego la nueva; la nueva contraseña deberá ingresarse dos veces, para evitar posibles errores de digitación. En sistemas con servicio de información de red (NIS), el comando es yppasswd El administrador del sistema indicará cuál de estos comandos debe usar.



Fin de sesión.

• •



• • • •

• •



exit termina la sesión con UNIX, vuelve a presentar el mensaje inicial login: habilitando a un nuevo usuario a ingresar al sistema. Las teclas también t ambién terminan la sesión.

Otros. Las teclas Ctrl-C interrumpen la ejecución de un comando. Las teclas Ctrl-D indican un fin de ingreso; si se dan en el indicador de comandos, termina la sesión UNIX. En UNIX no hay un caracter reservado para fin de archivo; Ctrl-D simplemente indica la terminación de un flujo de datos. En UNIX, la tecla t ecla coloca un caracter nueva línea, que en ASCII es ; con la tecla DOS o MS-Windows MS-Windows colocan dos caracteres al final de una línea: un nueva línea y un retorno . Al mirar un archivo creado en DOS o

• • • •

MS-Windows MS-Windows con algunos programas UNIX se pueden llegar a ver caracteres '^M' al final por esta razón. Algunas terminales adminten un control instantáneo de la salida, con las teclas detiene despliegue. continúa despliegue. En las máquinas UNIX, el terminal de la propia máquina UNIX se denomina "consola"; se usa preferentemente para administración del sistema. Todas Todas las teclas de control funcionan bien en la consola; el funcionamiento en los emuladores de terminal depende de la construcción del programa de emulación.



Preguntas y Ejercicios.



Ejercicios Complementarios Complementarios



Bibliografía y Referencias.



Comandos:





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

Preguntas y Ejercicios. Ficha referencia: Tutorial Los ejercicios propuestos referencian comandos vistos en esta ficha y anteriores. No obstante, algunas de las tareas pedidas exigen conocer opciones no mencionadas. mencionadas. Las mismas pueden encontrarse en la "Reseña de Comandos".

1. LISTADO DE ARCHIVOS (teórico). Estudiar el formato largo de salida del comando ls. ls. Interpretar las siguientes líneas de salida: drwxr-xr-x 5 pedroso prod 512 Sep 11 15:09 articulos -rw-r--r-- 1 pedroso prod 1430 Ago 10 07:56 docum1.prod -rwxr-xr-x 3 admin1 adminfo 2330 Jan 7 09:34 rv lrwxr--r-- 1 nicasio almacen 9500 Sep 11 10:56 listado.partes

2. LISTADO DE ARCHIVOS. ls . Estudiar el comando ls. a) Listar recursivamente todos los archivos bajo el directorio /etc deteniendo el despliegue en cada pantalla. /bin. b) Probar otras opciones del comando ls usando el directorio /etc o /bin. c) Listar archivos visibles e invisibles bajo el directorio corriente, en formato largo.

3. REDIRECCION E/S. a) Crear el archivo cap1 con el contenido "Este es el capítulo 1". Repetir con cap2 y cap3. cap3. Verificar mostrando cada uno con cat. cat. b) Mostrar en pantalla uno tras otro, de una sola vez, los archivos cap1, cap1, cap2 y cap3 creados. c) Grabar en un único archivo, llamado libro, libro, los archivos cap1, cap1, cap2 y cap3. cap3.

4. EDITOR ae. vi , presente en todas las variedades de UNIX, usado El editor por excelencia de UNIX es vi, preferentemente para administración del sistema. La distribución Linux Debian/GNU ae . Invocarlo escribiendo ae. Interpretar la contiene un editor sencillo y pequeño llamado ae. ayuda y experimentar con él creando y modificando textos breves.

5. SISTEMA DE ARCHIVOS. doc, debajo del directorio usr, usr, debajo del directorio raíz. a) Trasladarse al directorio doc, Mostrar el directorio actual. usr, debajo del directorio raíz. b) Trasladarse Trasladarse al directorio local, debajo del directorio usr, Mostrar el directorio actual; mostrar los archivos contenidos en él. c) Trasladarse Trasladarse al directorio propio del usuario desde cualquier otro directorio.

6. USUARIOS. a) Mostrar información relativa al usuario en la sesión actual. b) Mostrar qué usuarios hay en el sistema en el momento actual. c) Mostrar el nombre de la máquina.

7. MANUAL. a) Desplegar en pantalla la página del manual para el comando que muestra en pantalla las páginas del manual. b) Guardar en el archivo pwd.man del directorio actual, la página del manual pwd. pwd. c) Mostrar el archivo pwd.man con el comandos more; more; luego visualizarlo con ae. ¿Puede explicar las diferencias?

8. FIL F ILTROS. TROS. echo.man. Verifi a) Grabar la salida de la página man del comando echo en el archivo echo.man. Verificar car more. mostrando echo.man con more. echo.man. Mostrar las últimas 20 líneas del b) Mostrar las 15 primeras líneas del archivo echo.man. archivo echo.man. echo.man. c) Capturar las 15 primeras líneas del archivo echo.man en el extracto.echo.man.. archivo extracto.echo.man d) Agregar al archivo extracto.echo.man las últimas 20 líneas del echo.man. archivo echo.man.

9. MAIL (teórico). mail. Asegurarse Estudiar el comando mail. Asegurarse de ser capaz de invocar el programa de correo para leer mensajes recibidos, y luego emitir comandos internos del programa de correo para - mostrar la lista de mensajes recibidos; - mostrar la lista de mensajes recibidos comenzando en el 21; - leer el mensaje 5; - borrar los mensajes 5, 7, 9 al 23; - salir del correo actualizando la casilla.

10. MAIL. a) Envíese usted mismo un mensaje mensaje de correo con el título "Mensaje 1" y el siguiente contenido: Este es el mensaje 1. Va dirigido a mí mismo. Saludos, Yo. Repita con textos similares para los mensajes de título "Mensaje 2" y "Mensaje 3". mail, y salga b) Lea el primero, y sólo el primero, de todos estos mensajes con el comando mail, mail. Vuelva a digitar mail. ¿Cuántos mensajes tiene? ¿Cuáles han quedado? Confirme de mail. leyendo el mensaje 2, y sólo éste. c) Digite ahora el comando mail -f mbox ¿Cuál es su contenido? ¿Para qué servirá el archivo mbox? d) Pruebe borrar algún mensaje del archivo mbox, salga de mail y vuelva a leer los mbox . ¿Qué ha pasado? mensajes de mbox con mail -f mbox. mail. e) Repita estas pruebas hasta asegurarse de comprender bien el funcionamiento de mail.

11. SISTEMA DE ARCHIVOS. touch. ¿Qué hará el comando touch archref si este archivo no Estudie el comando touch. existe? ¿Y si ya existe? Verificar en máquina.

12. SEGURIDAD. a) El usuario jperez desea cambiar su contraseña. ¿Cómo hace? ¿Qué ayuda debe pedir al supervisor? b) El usuario jperez olvidó su contraseña. ¿Qué puede hacer por sí mismo? ¿Necesita ayuda del supervisor? c) Un usuario informa al supervisor que olvidó su contraseña. ¿Cómo puede el supervisor averiguar la contraseña que el usuario olvidó? jperez? d) ¿Cómo hace el supervisor para cambiar la contraseña del usuario jperez?

13. DOCUMENTACION. a) Estudiar las opciones del comando man y probarlas. apropos. ¿Qué diferencia hay entre uno y b) Estudiar y probar los comandos whatis y apropos. otro? c) Debian y otras otr as variedades de Linux traen un programa de documentación en línea más sofisticado llamado info. info. ¿Cómo podría obtenerse información sobre este comando? Tratar de determinar cuáles son sus capacidades y compararlo con man. man.

14. DOCUMENTACION. Estudiar en la Reseña de Comandos los comandos mencionados mencionados en la ficha correspondiente a estos ejercicios. Interpretar, hasta donde sea posible con los conocimientos actuales, las opciones ofrecidas. Diseñar ejemplos para probarlas. Volver a revisar estas descripciones breves al reencontrar los comandos a lo largo del curso.

15. DOCUMENTACION. Las páginas man pueden ser difíciles de interpretar i nterpretar.. No obstantes, son la referencia obligada para conocer el sistema, y la autoridad última en cuanto a su funcionamiento. En el trabajo con UNIX es muy frecuente, fr ecuente, aún para usuarios experimentados, consultar consultar estas páginas, debido la enorme cantidad de opciones ofrecidas y el control fino que permite el sistema. bash, el intérprete de comandos. Revisar el contenido de la página man correspondiente a bash, Observar su extensión, contenido general y forma de redacción.

Tutorial Ejercicios complementarios Fichas referencia: Tutorial, Reseña de Comandos. · ·

Agrega Agregarr al final final del del archiv archivo o libro libro en el el directo directorio rio /hom /home/a e/auto utorr el archiv archivo o capitu capitulo. lo.1 11 del directorio actual. Averigu veriguar ar si hay hay algún algún com comand ando o que refe referen rencie cie la la palabr palabraa "sound "sound"" en su des descri cripci pción ón de primera línea en las páginas man.

·

Desple Desplegar gar en en forma forma suces sucesiva iva y pag pagina inada, da, las prim primera erass 3 linea lineass de los los arch archivo ivoss de nombre empezado con "aba" y terminado con ".log" del directorio /var/log/otros.

·

Enviar Enviar un corr correo eo al usua usuario rio carl carlett etto o del dom domini inio o nsk.co nsk.com.u m.uy y, con títu título lo "Desa "Desayun yuno o de trabajo". El texto del mensaje está en el archivo invitacion.txt.

·

Enviar Enviar un un corre correo o a los los usuar usuarios ios carl carlett etto o del del domini dominio o nsk.c nsk.com om.uy .uy,, y a los los usuar usuario io fermin y aparicio del dominio toros.edu.uy, toros.edu.uy, todo en un solo comando. El título es "Saludos matinales" y el texto del mensaje se encuentra en salusmat.txt. Escribir un comando para cambiar la contraseña propia. Escribir un comando para cambiar la contraseña del usuario pocholo (¿es posible? ¿en qué caso?).

·

·

Escrib Escribir ir un com comand ando o que que mues muestre tre los los grup grupos os a los los que que pert pertene enece ce el el usuar usuario io jpere jperez. z.

·

Grabar Grabar en el el archiv archivo o contr contra.s a.seni eniaa la pág página ina man del comand comando o que que camb cambia ia la contraseña del usuario. Visualizar Visualizar con more. ¿Por qué se ven caracteres extraños?

·

Listar Listar archiv archivos os visibl visibles es e invis invisibl ibles es bajo bajo el el direc director torio io corr corrien iente te

·

Listar archivos visibles y ocultos, en formato largo, en el directorio actual.

·

Listar Listar arch archivo ivoss visibl visibles es y ocult ocultos, os, en en format formato o largo, largo, en en el subdi subdirec rector torio io HOWT HOWTO O del subdirectorio doc del directorio usr que está colgado del raíz.

·

Listar Listar recurs recursiva ivame mente nte todos todos los archiv archivos os bajo bajo el direct directori orio o /var /var..

·

Listar Listar recu recursi rsivam vament entee todos todos los los direct directori orios, os, subd subdire irecto ctorio rioss y archiv archivos os visib visibles les e invisibles bajo el directorio /etc deteniendo el despliegue en cada pantalla.

·

Listar recursivamente y en formato largo todos los archivos visibles e invisibles bajo el directorio /var deteniendo el despliegue en cada pantalla.

·

Mos Mostra trar el dire irector ctorio io actu actual al..

·

Mostra Mostrarr infor informa mació ción n rela relativ tivaa al al usua usuario rio en la sesión sesión actual actual..

·

Mostra Mostrarr los archi archivos vos del del direct directori orio o /usr/d /usr/doc/ oc/HOW HOWTO TO a) a) en listad listado o breve; breve; b) b) en listad listado o largo; c) incluyendo archivos ocultos; d) en listado largo e incluyendo archivos ocultos.

·

Obte Obtene nerr info inform rmac ació ión n del del coma comand ndo o pas passw swd. d.

·

Obtene Obtenerr nombre nombress de comand comandos os relac relacion ionado adoss con la cont contras raseña eña,, en inglés inglés,, "passw "password ord". ".

·

¿Para qué sirve el comando apropos? Dar un ejemplo de uso.

·

Pedir Pedir al sist sistem emaa inform informaci ación ón sobr sobree el usu usuari ario o root. root. Si con conoce oce más más de de un com comand ando, o, indicarlos todos.

·

¿Qué es es el el UID UID?? ¿Q ¿Qué es es el el GI GID?

·

Tras Traslad ladars arse, e, desd desdee cualqu cualquier ier lugar lugar,, hacia hacia el direct directori orio o propio propio del del usuari usuario. o. Luego Luego,, escribir un comando para indicar el directorio actual.

GNU info info es un programa del proyecto GNU para leer o imprimir información. Sustituye a las páginas man, forma tradicional de mantener información acerca del sistema UNIX. Para obtener información sobre info, escribir info info info se basa en hipertexto; la información se organiza en "nodos" hacia los cuales es posible desplazarse. Un nodo es el texto que describe una unidad temática. Los nodos se organizan  jerárquicamente. El encabezado de cada nodo muestra el archivo donde se encuentra la información, el nombre del nodo actual, el nodo siguiente en la organización temática, el nombre del nodo previo en la organización temática, y el nodo superior en la jerarquía de información. El tema del nodo aparece en doble subrayado. Ejemplo de pantalla de info:

File: info-stnd.info, info-stnd.info, Node: Top, Next: What is Info, Up: (dir) File: info-stnd.info, info-stnd.info, Node: Top, Next: What is Info, Up: (dir)The GNU Info Program ******************** This file documents GNU Info, a program for viewing the on-line formatted versions of Texinfo Texinfo files, version 2.11. 2.11. This documentation is different from the documentation for the Info reader that is part of GNU Emacs. * Menu: * What is Info:: * Options:: Options you can pass on the command line. * Cursor Commands:: Commands:: Commands which move the cursor within a node. * Scrolling Commands:: Commands:: Commands for moving the node around in a window. * Node Commands:: Commands:: Commands for selecting a new node. * Searching Commands:: Commands:: Commands Commands for searching an Info file. * Xref Commands:: Commands:: Commands Commands for selecting cross references. * Window Commands:: Commands which manipulate manipulat e multiple multipl e windows. * Printing Nodes:: How to print out the contents of a node. --zz-Info: (info-stnd.info.gz)Top, (info-stnd.info.gz)Top, 28 lines l ines --Top-----------------------------Pantalla: `--All----' abajo a la derecha: todo el texto cabe en una pantalla; `--Top----' `--Top----' abajo a la derecha: hay más texto en pantallas siguientes. Menúes: Los menúes tienen esta estructura: * Menu: * Item1: Título-item1 Descripción título item 1 * Item2: Título-item2 Descripción título item 2

Para ir hacia un item de menú: colocar el cursor y dar Enter; Ctrl-g para arrepentirse (antes de dar el Enter). Otra forma: m, luego el nombre del item o las primeras letras, TAB TAB puede completar cuando las letras son suficientes Para volver al nodo superior, u. Elegir un item de menú "baja" a ese nodo; con u se "sube" de regreso a él. * Item3:: A este nodo (con ::) se llega sólo con dar Enter con el cursor sobre él. * Note Cross: Ref-Cruzada Referencia cruzada Para ir a una referencia cruzada, f. Con f? se muestra la l ista de referencias cruzadas en el nodo actual. Ctrl-g cancela. Para terminar, q. Para volver a la información de info, m, luego Info. Teclas: h invoca tutorial de info ? lista de comandos de info, l para salir Ctrl-g aborta lo que se esté haciendo Ctrl-L refresco de pantalla ESPACIO ESPACIO avanzar en el texto BS o Del retroceder en el texto b comienzo del nodo n p m f u l d

nodo siguiente en la ordenación temática nodo previo en la ordenación temática elegir item de menú, ir hacia ese nodo seguir una referencia cruzada a nodo superior nodo anterior visitado (last) a nodo directorio

q

salir de info

1..5 g

elegir item 1 .. 5 del menú de nodo mover a un nodo indicando su nombre; puede darse el nombre de archivo, así (nombre-archivo)nombre-nodo buscar una cadena de caracteres, elegir el nodo de la siguiente ocurrencia

s

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 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. Provee al usuario una interfaz hacia el sistema operativo. El usuario dialoga con el intérprete de comandos, y éste transfiere las órdenes al sistema operativo, que las ejecuta sobre la máquina.

Crear dos archivos de prueba. 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, tal cual están, terminando cada línea dando ; finalizar con . Digitar con cuidado: una vez pasados al renglón siguiente, no puede volverse atrás para corregir. El shell es un intérprete de comandos. Es también un lenguaje de programación. Los programas escritos con el shell se llaman scripts. • • • • • • •

Digitar para finalizar el ingreso. cat nota muestra el contenido digitado.

• •

Crear del mismo modo el archivo LEAME, haciendo cat > LEAME con este contenido: •



• •



Este es el archivo LEAME. Recuerde que UNIX diferencia entre mayúsculas y minúsculas. El archivo LEAME tendrá este contenido.

• • •

• •

• • • •

cat LEAME para verificar el contenido.

Comandos en el sistema UNIX. En UNIX, los comandos son programas ejecutables separados. El shell es un intérprete de comandos: puede expandir y cambiar la manera en que actúan los comandos, admite el uso de comodines y la interconexión o entubamiento de comandos.

Estructura de comandos. La estructura general de un comando es la siguiente: nombre opciones argumentos nombre es el nombre del comando. Las opciones o banderas controlan la forma

en que actúa el comando; van precedidas por el signo - (menos). Los argumentos son comúnmente nombres de archivos o nombres de login de usuarios. • • • •

• • • • • • • • • •

• • • •



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. pr -d -l23 LEAME muestra el archivo LEAME a doble espacio, largo de página 23. pr -d -o15 -l23 LEAME doble espacio, margen izquierdo de 15 espacios, largo de página 23. pr -l23 nota LEAME | more muestra los dos archivos uno tras otro, pero los pagina separados. cat nota LEAME concatena los archivos; los presenta uno tras otro. cat nota LEAME | pr -l23 concatena los archivos y luego les da formato a los dos juntos.

Expansiones de la línea de comando. Los comodines son caracteres que sustituyen cadenas de caracteres. * secuencia de caracteres cualesquiera, 0 o más. ? caracter cualquiera, uno y uno sólo; debe aparear un caracter. [...] sustituye los caracteres indicados individualmente.

• • • •

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

• • • • •

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

• •

Es una costumbre muy arraigada en UNIX usar mayúsculas para los nombres de variable, así como es una regla usar minúsculas para los comandos. Las opciones pueden ser mayúsculas y minúsculas; la opción -a no es lo mismo que -A.

• •

• • •

Las variables de ambiente pueden ser usadas como nombres de comando o como argumentos de un comando. XYZ="cat nota" $XYZ la variable XYZ contiene un comando, y al ser invocado i nvocado su contenido, el comando es ejecutado.





echo hola $MUESTRA chicos la variable puede usarse en la formación de cadenas. echo hola${MUESTRA}chicos hola${MUESTRA}chicos la variable puede embeberse en una cadena; las llaves ll aves delimitan el nombre de la variable. env muestra las variables de ambiente definidas. Muchas son fijadas en el ingreso del usuario al sistema (variables de login); y otras son propias del shell (variables del shell). echo $LOGNAME muestra el nombre de login del usuario. echo $HOSTNAME muestra el nombre de la máquina. echo $NOEXISTE Las variables no definidas no muestran nada cuando son referenciadas.



Entrecomillado de argumentos en la línea de comandos.

• • • •

• •

• • • • •





Los espacios separan argumentos. argumentos. El entrecomillado obliga a tratar una cadena con espacios como si fuera un solo argumento. Cuando se usan comillas dobles (" ") el shell interpreta las variables de ambiente 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, tratando sus nombres como cadenas: MUESTRA='La variable $LOGNAME contiene su nombre de login' echo $MUESTRA





Las comillas simples permiten usar comillas dobles: echo '"hola chicos"'



PS1.







• • • • • •

• • • • • • • • •

Aunque generalmente los omitimos, en los ejemplos de esta sección mostraremos el indicador de comandos y la salida de ejecución. 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, $. $ PS1=hola: hola:

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

la variable MUESTRA cambió pero el indicador no cambió; ingrese comando: PS1='$' $



repone el indicador de comandos.



Entrada estándar y salida estándar.



• • • • •

Los comandos leen como entrada una secuencia de caracteres (flujo de entrada o "input stream"), y escriben a la salida otra secuencia de caracteres (flujo de salida o "output stream"). Estas secuencias no tienen estructura interna alguna, y se les llama entrada estándar y salida estándar. cat nota > nota2 redirige la salida estándar a un archivo que crea o sobreescribe, en vez de a la pantalla. mail juan < nota toma la entrada estándar de un archivo en vez del teclado. pr < nota > nueva.nota

• • •

el archivo nota es la entrada, el archivo nueva.nota es la salida. cat nueva.nota muestra el archivo donde se grabó la salida con formato.

• • • •

Los símbolos < y > redirigen entrada y salida estándar: redirige la entrada estándar < nombre_entrada nombre_entrada redirige la salida estándar > nombre_salida

• • • •

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

• •

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

• • • •

• • •

• •

cat nota cat < nota son comandos equivalentes porque cat opera sobre un archivo y también sobre la entrada estándar. cat nota LEAME nueva.nota cat nota - nueva.nota < LEAME son comandos equivalentes. equivalentes. El signo menos (-) aislado equivale a tomar en ese punto la entrada estándar, que usualmente está asignada al teclado.

Fin de flujo. El ingreso de datos desde el teclado, así como el despliegue en pantalla, se manejan en UNIX como "flujos de caracteres", una serie de caracteres uno tras otro. Para indicar en el teclado el fin de un flujo de caracteres se usa Ctrl-D. Este símbolo no forma parte del ingreso; simplemente indica el final del ingreso, que ya no se escribirá más. En UNIX no hay un caracter especial para indicar fin de archivo; el sistema sabe cuando termina un archivo por medio de contadores.





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



Agregar la salida estándar a un archivo.

• •



• • • •

cat < nota > nota.copia cat nota nota.copia > doble.nota rm nota.copia doble.nota contiene nota dos veces. Se logra lo mismo con

• • •

• •

• • •

cat nota > dup.nota cat nota >> dup.nota El símbolo >> redirige la salida estándar a un archivo, pero agregando al final del mismo en lugar de reemplazar su contenido.

Error estándar. Además de los flujos de entrada y salida estándar, estándar, existe un tercer flujo de caracteres, el error estándar, hacia donde se dirigen los mensajes de error. El error estándar está dirigido habitualmente a la pantalla, pero mediante 2> o 2>> se redirige el error estándar hacia un archivo de errores. Los flujos estándar se reconocen por los siguientes números: 0 la entrada estándar, usualmente el teclado; 1 la salida estándar, usualmente la pantalla; 2 el error estándar, usualmente la pantalla.

• • • • • • • • •

• •

• •

• •

echo Archivo de errores > salida.error cat noexiste 2>>salida.error 2>>salida.error cat salida.error el archivo salida.error contiene el mensaje inicial y el de error. ls noexiste 2>>salida.error 2>>salida.error rm noexiste 2>>salida.error 2>>salida.error cat salida.error reúne los mensajes de error en el archivo salida.error .

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



Filtros.



• • •

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



produce 'hapa chicas'.



Campos y delimitadores.



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



Valores de retorno de los comandos.



• • • • • • • • • • •





• • • • •

Los comandos devuelven un código de retorno 0 si el comando termina correctamente, o un número entre 1 y 255 según la razón de falla. El código de retorno del último comando queda en una variable llamada '?', que se interroga como $?. cat noexiste ERROR=$? echo $? echo $ERROR guarda el código de error; la asignación termina bien, por lo que en $? queda 0, pero en ERROR quedó el número de error de la operación fallida. $? es una 'variable de shell' mantenida internamente por el propio intérprete. Otras variables de shell son:

• • •

# $

número de argumentos en el comando para para la shell actual actual número de proceso para el shell actual

• •



• • • •

$$. Estas variables se interrogan como $# y $$. El operador grave.El acento grave (` ( ` ) asigna a una variable de ambiente la salida estándar de un comando. El largo de la l a variable es limitado, pero usualmente > 5120 en SVR4. MUESTRA=`echo MUESTRA=`echo $LOGNAME` echo $MUESTRA escribe el nombre de login del usuario. wc /etc/passw



cuenta líneas, palabras y caracteres.

• •

• • • • •

El comando wc (word count) acepta opciones -l para líneas, -w para palabras y -c para caracteres. TOTALPALABRAS=`cat TOTALPALABRAS=`cat * | wc -w` echo $TOTALPALABRAS $TOTALPALABRAS cuenta las palabras en todos los archivos del directorio. También También echo `cat * | wc -w` echo Total de palabras en el directorio: `cat * | wc -w`

• •



El acento grave permite ejecutar ejecutar un comando dentro de otro, otro, encerrando el comando comando anidado entre acentos graves.

Secuencias de comandos.



El shell es también un lenguaje de programación. Pueden escribirse varios comandos comandos en una misma línea separándolos con ; (punto y coma). date ; echo Hola ; echo $LOGNAME MUESTRA=`date MUESTRA=`date ; echo Hola ; echo $LOGNAME`;echo $MUESTRA



Redirección del shell.







• • • • • • • •

• • • • • •

El shell que atiende los comandos del usuario es el login shell; arranca cuando el usuario ingresa al sistema y termina cuando sale. Escribir sh como comando invoca una segunda instancia del shell, que puede terminarse con el comando exit o con . Puede crearse un archivo de comandos haciendo cat > datos.usuario y escribiendo las siguientes líneas. Pueden omitirse los comentarios (de # en adelante) echo Salida del comando datos.usuario echo Fecha: `date ` # fecha y hora echo Usuario: $LOGNAME # nombre de login del usuario ps # procesos corriendo del usuario echo Shell actual: $$ # número de proceso para el shell actual finalizar con . Los # indican comentario. Para convertir el archivo en ejecutable para el usuario, hacer chmod u+x datos.usuario datos.usuario -l. Los comandos ingresados en el archivo pueden ejecutarse con Verificar con ls -l. sh datos.usuario Este comando invoca una nueva instancia de shell que no es la del ingreso i ngreso al sistema.

• • • •

Agregar una línea más haciendo cat datos.usuario - >> masdatos.usuario y escribiendo

• •

cat noexiste # intenta mostrar un archivo inexistente Finalizar con .

• • • • •

echo "Archivo de errores del usuario" > errores.usuario coloca una línea descriptiva en el archivo errores.usuario. cat errores.usuario errores.usuario verifica su contenido.





sh salida.usuario 2>>errores.usuario 2>>errores.usuario lee los comandos del archivo masdatos.usuario en la entrada estándar, redirige la salida estándar al archivo salida.usuario y redirige la salida del error estándar al archivo errores.usuario. cat salida.usuario salida.usuario cat errores.usuario errores.usuario



Fin.

• •





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



Preguntas y Ejercicios



Ejercicios Complementarios Complementarios



Bibliografía y Referencias:

• • • •

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

Preguntas y Ejercicios. Ficha Referencia: Introducción al Shell Estructura de archivos. Estructura del archivo /etc/passwd: #nombre:contraseña:UID:GID: #nombre:contraseña:UID:GID:comentarios:d comentarios:dir_propio:she ir_propio:shell ll jperez:Xdio0IKLLP:1130:103: jperez:Xdio0IKLLP:1130:103:Juan Juan Pérez:/home/jperez:/bin/b Pérez:/home/jperez:/bin/bash ash Estructura del archivo /etc/group: #grupo:GID:lista_usuarios docentes:103:victor,german,fernando Estructura del archivo /etc/hosts: #número_IP nombre_máquina alias 10.137.137.250 10.137.137.250 liebre.cdi.edu.uy liebre.cdi.edu.uy liebre localhost mailhost Todos los archivos anteriores pueden tener comentarios (líneas comenzadas por #).

·

·

·

·

·

·

·

·

/etc, verificar que se está allí mostrando COMANDOS. Cambiar hacia el directorio /etc, el nombre del directorio actual, desplegar la lista de archivos en ese directorio, volver al directorio propio, verificar. COMANDOS. Estudiar en la reseña de comandos el comando more, more, asegurándose asegurándose de conocer la forma de avanzar una página, retroceder una página, avanzar y more. Sugerencia: usar el comando man ls para retroceder una línea, y salir de more. mostrar la página man del comando ls ; las páginas man se paginan less, anotando las diferencias. con more automáticamente. automáticamente. Repetir con less, hosts.txt con las 10 primeras líneas del archivo / FILTROS. Crear el archivo hosts.txt etc/hosts; etc/hosts; crear el archivo group.txt con las 10 últimas líneas del archivo / etc/group . Verificar su contenido. Concatenar ambos archivos presentándolos  juntos en pantalla. FILTROS. Presentar el archivo largo /etc/inetd.conf con formato de impresión fijando el largo de página en 23; paginar la presentación en pantalla para poder examinarlo. REDIRECCION. Crear el archivo lineas con el texto "Archivo lineas" como contenido. Verificar Verificar con listado l istado largo sus características de creación, explicando la salida del comando ls -l. -l. Agregar al archivo creado una línea de texto, por ejemplo "Esta es la línea 1", y mostrar su contenido. contenido. Repetir agregando otra línea similar, similar, y mostrar el contenido del archivo. COMANDOS. Analizar la salida de los siguientes comandos: who, who am i, whoami e indicar las direrencias. Analizar la salida de los comandos hostname, id. id. COMANDOS. Analizar la salida del comando finger nombre-usuario . Use primero su propio nombre de usuario, luego el de otro usuario del sistema. ¿Qué información brinda? /bin, mostrar todos los nombres de archivo que COMANDOS. Usando el directorio /bin, empiecen con c; mostrar luego todos losnombres de archivo que terminen con t; mostrar finalmente los nombres de archivo que empiecen con c y terminen con t.

·

VARIABLES. a) Asignar Asignar el valor "Lunes" a la variable DIA1, el valor "Martes" a la variable DIA2, hasta asignar "Domingo" a la variable DIA7. b) mostrar el valor de todas para verificar. c) Usando estas variables, obtener la salida Semana: Lunes Martes Miércoles Jueves Viernes Sábado Domingo d) Usando sólo las variables definidas, cargar en la l a variable SEMANA la lista de días, separados por espacios. Mostrar el contenido de SEMANA para verificar.

·

VARIABLES. Usando variables del ambiente del usuario (variables de login), mostrar a) vía del directorio propio del usuario; b) nombre de login del usuario; c) nombre de la terminal en uso en la sesión actual; d) nombre del intérprete de comandos actual. e) vía de búsqueda de ejecutables. f) Mostrar todas las variables de ambiente. ¿Cuáles puede reconocer?

·

VARIABLES. a) Fijar el valor de la l a variable VIAS en "/usr/doc:/var/lib/dpkg"; mostrar su contenido. b) agregar a la variable VIAS el directorio /usr/doc/HOWTO al final, y /usr/ doc/FAQ al principio.

·

ERROR. a) ¿Qué muestra el shell para la variable NOEXISTO ? ¿Qué código de error devuelve? b) Asignar a la variable NULA la cadena nula. ¿Qué muestra el shell para esta variable? ¿Qué codigo de error devuelve? Repetir asignando blancos. c) Asignar a la variable BLANCOS una cadena con blancos embebidos, por ejemplo "Esta cadena contiene blancos". blancos". ¿Qué pasa pasa si no se usan comillas al asignar? asignar? Explicar el comportamiento. Mostrar el código de error devuelto en cada caso. d) Mostrar el contenido del archivo /etc/group. /etc/group. ¿Qué código de error devuelve el comando? noexiste. ¿Qué código de error devuelve el e) Mostrar el contenido del archivo noexiste. comando

·

REDIRECCION.

cat, mostrar en pantalla el archivo /etc/services. a) Con el comando cat, b) Escribir el comando cat de modo redireccionando la entrada estándar desde el archivo /etc/services y la salida estándar hacia el archivo servicios.txt. Visualizar Visualizar servicios.txt. c) Usando echo, crear un archivo errores.txt con contenido "Archivo de Errores". d) Con el comando cat, cat, intentar mostrar el archivo noexiste.xxx sin redireccionar entrada estándar, estándar, pero redireccionando la salida estándar hacia noexiste.txt y el error estándar para agregar al archivo errores.txt. Visualizar Visualizar errores.txt. ·

REDIRECCION (teórico). a) Haciendo uso del shell bash invocar el script comotodo para que lea desde el larguisimo, no muestre ni grabe su salida y grabe los errores en el archivo larguisimo, errores. archivo errores. b) Repetir para que no muestre ni grabe los errores.

·

VARIABLES. Predecir y explicar la salida de los siguientes comandos:

·

echo $LOGNAME echo "$LOGNAME" echo '$LOGNAME' echo \"$LOGNAME\" echo "Mi login es $LOGNAME" echo 'Mi login es $LOGNAME'

·

EXPANSIONES DEL SHELL (teórico). Escribir expresiones para englobar todos los nombres de archivos que a) comiencen con un dígito. b) terminen con una vocal. c) terminen con una letra mayúscula. d) de 6 caracteres terminados en dos dígitos. e) formados por tres letras: una minúscula, una mayúscula o minúscula, una vocal minúscula. Ejemplos: sTa, bta, mbu, tTo. f) empezados con letra minúscula, terminados con un punto y tres dígitos.

·

VARIABLES DE AMBIENTE. a) visualizar el contenido de la variable que guarda el indicador de comandos; copiar en un papel su valor actual. b) Cambiar el indicador de comandos para que se muestre así: UNIX listo> Recordar que > es un caracter de redirección del shell; es interpretado por el shell. c) Inicializar la variable VAR1 con la cadena "shell bash 1". Mostrar su contenido. csh. Mostrar contenido de la variable VAR1. VAR1. Explique. Invocar ahora el shell csh. csh. ¿Qué valor tiene VAR1 ? Explique. d) Salga de csh. e) En el primer shell (shell de login), ejecute el comando export VAR1

·y repita el paso anterior. ¿Qué ha pasado? bash, ¿ocurrirá lo mismo? f) Si en lugar de csh invocamos una nueva instancia de bash, ·

FILTROS. a) Obtener una lista de los usuarios habilitados en el sistema, usando el archivo / etc/passwd. etc/passwd. Sugerencia: filtrar las líneas de comentario conectando la salida del "^#", que elimina las líneas empezadas listado con el comando de filtro grep -v "^#", con "#". b) Repetir, pero mostrando sólo nombre de login y nombre en la vida real. c) Repetir, ordenando alfabéticamente. d) Crear el archivo usuarios.txt con la lista, con un encabezado similar a éste:

·

========================= =================================== ========== Usuarios en el Sistema. Lunes 23 de Agosto de 1999, 20:45 ================================== e) Presentar el contenido del archivo en formato de impresión, con encabezado en cada página diciendo "Lista de Usuarios", longitud de página 23 y margen izquierdo

12.

FILTROS. · ·a) Contar la cantidad de líneas, palabras y caracteres en el archivo historia.txt. historia.txt. b) Contar la cantidad de usuarios habilitados en el sistema. c) Contar la cantidad de archivos en el directorio /bin usando el comando ls. ls . d) Repetir usando el comando ls -l. -l. Explicar la diferencia. · FILTROS. ·a) Mostrar el archivo historia.txt todo en mayúsculas. Resolver Resolver bien la ñ y las vocales acentuadas. b) Repetir, pero dejando las vocales acentuadas minúsculas como vocales no acentuadas mayúsculas. c) Transformar Transformar todos los espacios en subrayas (_). Contar ahora las palabras. ¿Cuántas había en el archivo sin transformar? t ransformar? · OPERADOR GRAVE. GRAVE. ·a) Escribir comandos para cargar la variable LISTA con los nombres de los archivos del directorio actual. b) Crear el archivo usuarios.txt con 4 o 5 nombre propios, uno en cada línea. usuarios.txt. Mostrar Cargar en la variable USUARIOS el contenido del archivo usuarios.txt. contenido de USUARIOS usuarios.txt, agregar al final del mismo la fecha y hora c) Sin editar el archivo usuarios.txt, del día. d) ¿Cómo haría para agregar la fecha y hora del día al principio del archivo? · PROCESOS. ·a) Mostrar los procesos propios corriendo en el sistema. auxw. b) Explicar la salida del comando ps auxw. ajxw . c) Idem para ps ajxw. d) Si estamos corriendo varias instancias de bash, ¿cómo sabemos sabemos cuál es el shell de login?

Nota. Para estos ejercicios, el archivo historia.txt puede ser sustituído por cualquier archivo de texto en español.

Introducción al Shell Ejercicios complementarios Fichas referencia: Introducción al Shell, Reseña de Comandos. ·

Agrega Agregarr a la varia variable ble PA PATH el dire directo ctorio rio /usr/ /usr/loc local/ al/bin bin de de modo modo que que los com comand andos os sean buscados en ese directorio antes que en cualquier otro.

·

Agregar a la variable PATH los nombres de directorio /var/lib/dpkg y /usr/doc/HTML.

·

Al escri escribir bir com coman andos dos,, ¿qué ¿qué dife diferen rencia cia hay hay entre entre usar usar comil comillas las dobl dobles es y simp simples les??

·

Al ing ingre resa sarr coma comand ndos os,, para para qué qué sir sirve ven n los los símb símbol olos os ";" ";" y "|"? "|"?

·

Asig Asigna narr a la varia variabl blee DIA DIA el val valor or "Lu "Lune nes" s" y mo most stra rarl rla. a.

·

Asignar Asignar a la variable variable PATH el contenido contenido de la propia propia variable variable PATH más más el el directorio /opt/Office52.

·

Borrar Borrar del del direc director torio io actu actual al los los archi archivos vos carta_ carta_10 10 a carta_ carta_30 30 incl inclusi usive. ve.

·

Desple Desplegar gar en en panta pantalla lla uno uno tras tras otro otro los los arch archivo ivoss cap1, cap1, cap2 cap2 ... cap9 cap9 del del direct directori orio o actual deteniendo el despliegue a cada pantalla.

·

Difere Diferenci nciar ar los los carac caracter teres es "|", "|", "\", "\", "/" "/" y ";" en en el shel shell, l, indic indicand ando o para para qué qué se usa usa cad cadaa uno.

·

Ejecut Ejecutar ar el com comand ando o nodig nodigo o de modo modo que no prod produzc uzcaa ningun ningunaa salid salidaa ni mues muestre tre ningún error.

·

Ejecut Ejecutar ar el coma comando ndo nsk nsk del del directo directorio rio /usr/ /usr/loc local/ al/bin bin de de modo modo que que tome tome su entra entrada da del del archivo datos del directorio del usuario jperez en /home, grabe su salida en el archivo  jperez.dts del directorio actual y los errores en jperez.errs del directorio actual.

·

Ejec Ejecut utar ar el el coma comand ndo o (hip (hipot otét étic ico) o) llam llamad ado o nsk ubicado en el directorio /usr/local/ bin de modo que tome su entrada del archivo datos del directorio del usuario jperez en /home, grabe su salida en el archivo jperez.dts del directorio actual y los errores en  jperez.errs del directorio actual.

·

Escrib Escribir ir un scri script pt que que reciba reciba un un nomb nombre re de archiv archivo o como como pará paráme metro tro y agre agregue gue,, al principio del archivo, las leyendas MEMORANDUM | Montevideo, URUGUAY | (fecha del día) | (renglón en blanco) | , donde la barra vertical indica cambio de línea. Si se usan archivos temporales, eliminarlos al terminar. Sugerencia: el nombre de archivo pasado como parámetro está disponible, dentro del script, en la variable llamada $1.

·

Fijar Fijar en la varia variable ble TRAB TRABAJ AJO O el nombre nombre /grup /grupos os/do /doce cente ntes/e s/exam xamene enes/d s/dic1 ic1999 999.. Usar Usar la variable para trasladarse rápidamente a ese directorio.

·

Los parént paréntesi esiss y otros otros símb símbolo oloss son son "inter "interpre pretad tados os por por el el shell" shell".. ¿Cóm ¿Cómo o puede puede escaparse esta intepretación y mostrar los paréntesis? Escribir un comando que muestre en pantalla la leyenda "(aquí se ven los paréntesis)" de todas t odas las formas que sepa hacerlo.

·

Most Mostra rarr el cód códig igo o de erro errorr del del últim último o coma comand ndo o ejec ejecut utad ado. o.

·

Mostra Mostrarr la pági página na del del manu manual al del del com comand ando o que que da forma formato to para para imprim imprimir ir..

·

Mostra Mostrarr las prime primeras ras dos dos línea líneass de los los archiv archivos os cap01 cap01.tx .txtt a cap99. cap99.txt txt del del direc director torio io novela bajo el directorio actual. Mostrar la salida paginada.

·

Mostra Mostrarr las últi últimas mas 20 línea líneass del del archiv archivo o lista. lista.001 001 del dire directo ctorio rio padr padree del del actual actual..

·

Most Mostra rarr toda todass las las vari variab able less de de amb ambie ient nte. e.

·

¿Par ¿Paraa qué qué sirv sirvee el el ope opera rado dorr gra grave ve?? Dar Dar un ejem ejempl plo. o.

·

¿Qué ¿Qué cont contie iene ne la vari variab able le PATH? TH?

UNIX y C El sistema operativo UNIX suele venir acompañado de un compilador para lenguaje C. Escribiendo programas en lenguaje C es posible crear comandos indistinguibles de los propios de UNIX. Como ejemplo, puede crearse el siguiente archivo, usando un editor de ae, o el comando cat si se tiene fé en la propia digitación. texto sencillo como el ae, Contenido del archivo hola.c: /* hola.c: programa de saludo */ #include main() { printf("Hola, mundo\n"); } Compilar el contenido de este archivo con el comando cc hola.c -o hola hola, ejecutable en UNIX mediante el comando Esto crea el archivo de salida hola, ./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 cat, que llamaremos cati. cati . siguiente, una versión muy mínima del comando cat, cati.c : Contenido del archivo cati.c: /* cati: cat versión mínima */ # define LARGO 1024 /* define valor de variable LARGO */ main() { char bufer[LARGO]; /* declara un arreglo de caracteres */ int n; /* 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. funcionamiento. Compilar este programa con el comando cc cati.c -o cati cati, ejecutable en UNIX. El comando Esto crea el archivo de salida cati, ./cati hola cat hola mv hola saludo cat saludo mv cambia el nombre del archivo hola por el de saludo. saludo .

• • •

mv saludo dir1/saludo.1 mueve hacia otro directorio cambiando el nombre.

• • •

mv dir1 dirnuevo cambia de nombre archivos o directorios.





rm -r dirnuevo elimina dirnuevo y todos sus archivos.



Enlaces "hard".





• • •



Un enlace "hard" (hard link) li nk) es una nueva referencia a un mismo archivo; consiste en una nueva entrada de directorio que apunta a un archivo ya existente y apuntado desde otra entrada de directorio. El contenido se encuentra en un solo lado, pero el archivo puede ser accedido desde varios lugares, eventualmente con diferentes nombres. echo 'Hola todos de nuevo!' > adios ln adios adios.ln0 ln crea un segundo nombre referido al mismo archivo; no se hace copia, crea un enlace (link). Verificar que ls -l adios*



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

• • • • •

ln adios adios.ln1 ln adios adios.ln2 ls -l adios* muestra el conteo de enlaces hard en estos archivos.

• • • •

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





rm adios* ls -l dir2/adios Cuando se borra un archivo con varios enlaces, sólo se borra el enlace. El archivo es realmente borrado sólo cuando desaparece el último enlace. ln dir2 dir2ln da error; no se puede crear un enlace hard para un directorio.



Enlaces simbólicos.

• • •





• •

Un enlace simbólico (symbolic link) es un archivo que apunta a otro archivo o directorio. El archivo de enlace simbólico contiene solamente solamente la ruta del otro archivo o directorio. ln -s nota nota.ls0 crea nota.ls0 como enlace simbólico.

• • • • • • • • • •

ln -s dir2 dir2ls crea dir2ls como enlace simbólico hacia un directorio. ls -l muestra la letra l en el tipo de archivo para indicar que es un enlace simbólico. ls dir2 ls dir2ls muestran el mismo contenido de archivos. ls -l dir2ls muestra que es un enlace simbólico e indica hacia donde apunta.

• • • • • •

cd dir2ls ls -l muestra el contenido de dir2, dir2, enlazado desde dir2ls. dir2ls. pwd indica el directorio con nombre del enlace, pero

• •

/bin/pwd muestra el directorio verdadero, no el enlace simbólico; pwd indica la ruta por la que se llegó al directorio, /bin/pwd indica la ruta de acceso al verdadero directorio. Conviene usar /bin/pwd para evitar ser engañado por enlaces simbólicos a directorios. El comando pwd es interno del shell, /bin/pwd es un programa aparte.

• • • •

• • • • • • • •

• •

• • •

• • • •

cd .. mv dir2 DIR2 dir2, por lo cambia el nombre del directorio real; el enlace simbólico sigue apuntando a dir2, que cd dir2ls da error, ya que no existe el objeto real. mv DIR2 dir2 repone el nombre original al que apunta el enlace. rmdir dir2ls da error porque no es un directorio sino un enlace. rm dir2ls borra el enlace. Un enlace simbólico se borra con rm, rm, y no con rmdir, rmdir, puesto que el enlace simbólico es un archivo y no un directorio, aún cuando sea un enlace simbólico hacia un directorio. ls dir2 cuando se borra un enlace simbólico, sólo se borra un archivo puntero, y no el objeto real.

Opciones del comando ls. ls -1 muestra un item por línea. Cuando ls se usa en interconexiones, la salida de ls presenta un item por línea por defecto. ls -C fuerza el despliegue encolumnado. ls -a muestra todos los archivos, incluyendo los que comienzan con punto, normalmente no mostrados. El directorio corriente . y el directorio padre .. son entidades reales.

• • • •

ls -F /bin ls -F agrega sufijo que indica el tipo de archivo: / directorio, * ejecutable, @ enlace simbólico.

• • •



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

• • •

ln -s dir2 dir2ls ln nota nota.ln0



ls -l listado largo, muestra atributos de los archivos: tipo de archivo (primer caracter), permisos (9 caracteres), enlaces hard (en archivos), dueño, grupo, tamaño en bytes, fecha y hora, nombre. -rw-r--r-- 1 esteban other 138 Apr 5 19:34 LEAME drwxr-xr-x 2 esteban other 138 Apr 5 19:34 dir2 lrw-r--r-- 1 esteban other 138 Apr 5 19:34 dir2ls ->./dir2 -rw-rw-rw- 1 esteban other 138 Apr 5 19:34 nota El símbolo -> indica "apunta hacia" para enlaces simbólicos.



Cambio de dueño y grupo.

• •

• • • •

• • • •

chown usuario1 nota cambia el dueño del archivo nota adjudicándoselo adjudicándoselo a usuario1. usuario1. chown usuario1 arch1 arch2 cambia el dueño de la lista de archivos indicada. No puede revertirse, ya que el usuario actual dejó de ser dueño de esos archivos. Si el archivo tiene permiso de lectura, es posible copiarlo para disponer de una copia propia. El cambio de dueño no está permitido a usuarios comunes, sino reservado al supervisor para evitar que a un usuario se le adjudiquen archivos sin su consentimiento. consentimiento.





chgrp tecnicos nota tecnicos. El dueño debe cambia de grupo el archivo notas, adjudicándoselo al grupo tecnicos. tecnicos. pertenecer al grupo tecnicos. chgrp tecnicos arch1 arch2 cambia el grupo de la lista de archivos.



Modos de permisos.

• •







chmod. Pueden Los permisos de archivos y directorios se cambian con el comando chmod. expresarse de dos maneras: simbólica y absoluta. En la forma simbólica, se usa la siguiente sintaxis:

• •

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

• • • • • • • • •

• •

+ = r w x s t

agrega permiso a los existentes quita permiso de los existentes únicos permisos asignados al archivo lectura escritura ejecución, o acceso si es directorio usa el id del dueño o grupo del archivo al ejecutar ejecutar fijar "sticky "sticky bit" a un directorio: directorio: sólo dueños dueños pueden pueden borrar u usuario (dueño) g grupo

• •

o a

otros todos (dueño, grupo y otros)

• • •

Ejemplos de permisos en notación simbólica: u+r g+w-r ug+r ugo+w-rx

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

• • • •

chmod u+rwx,g+rw-x,o+r-wx arch1 chmod u=rwx,g=rw,o=r arch1 cambian los permisos de los archivos indicados.

• • • •

• • • •

En modo absoluto se usa un código de 4 dígitos octales 0..7, en la forma Nnnn. N, 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, nnn, 3 dígitos: permisos del usuario, grupo y otros, con el código 4 lectura 2 escritura 1 ejecución, 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.



Listado de permisos de los directorios.



• •

ls -l muestra los permisos y otros atributos.





Para obtener información del directorio dir1 ubicado en el directorio actual, ls -l lista todos los archivos, entre los que aparece dir1; dir1; ls -l dir1 dir1. lista el contenido del directorio dir1. ls -ld dir1 trata la entrada dir1 como archivo, sin listar su contenido, y dando sus atributos como directorio. ls -ld . muestra atributos del directorio actual.



Cambio de permisos.

• • • • • • •





chmod u-w nota

• • • • • • • • • • • •

• •

quita permisos de escritura al dueño. chmod u+w nota concede permisos de escritura al dueño. chmod u-w+x nota chmod u-wx+r nota cambian varios permisos del dueño al mismo tiempo. chmod u+w nota chmod g+w nota chmod o+w nota concede permiso de escritura solo al usuario, al grupo o a otros. chmod u+rw-x,g+r-wx,o+r-wx nota fija todos los permisos en una sola operación. Los permisos que no se mencionen quedan como estén. chmod 0644 nota realiza lo mismo en notación absoluta.

• • • • •

El comando chmod admite las opciones -v verboso, describe los permisos cambiados -f no da error sobre permisos que no pueden cambiarse -R recursivo, cambia permisos de directorios y sus archivos

• • • • • • • • • •

chmod -v u+rwx,g+rw-x,o+r-wx 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 e jecutará 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 t ener 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 -l, indican modos sin sentido: setuid o setgid sobre archivos no aparecer en ls -l, 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 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 MIEDITOR=`basename $EDITOR` echo "Mi editor es $MIEDITOR" muestra el nombre del archivo sin ruta; r uta; basename quita la ruta a un nombre de archivo calificado con ruta. DIREDITOR=`dirname 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 /dev/tty1. 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? 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.

• • •

• • •



cat /etc/passwd cat /etc/passwd > /dev/null El dispositivo /dev/null actúa como una papelera de tamaño ilimitado que recibe r ecibe la salida a descartar. No guarda nada; lo que allí se envíe se pierde para siempre. Todos los dispositivos de hardware del sistema tienen una representación en el /dev . directorio /dev.



Preguntas y Ejercicios.



Bibliografía.

• •

Comandos: chgrp chmod chown ln ls mesg tty Referencias: Kernighan-Pike[1987], Kernighan-Pike[1987], Coffin[1989]

Preguntas y Ejercicios. Ficha Referencia: Manejo de Archivos Archivos ·

·

ARCHIVOS. Sea la siguiente salida del comando ls -l:

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

d) directorios recorribles por todo el mundo; e) directorios donde el grupo puede borrar archivos; g) archivos que son enlaces simbólicos. f) archivos ejecutables con permisos de root; ·

CREAR Y BORRAR ARCHIVOS Y DIRECTORIOS. a) Crear los archivos abaco, abajo, arriba, abalorio, balero, manejo. manejo. Verificar. b) Crear bajo el directorio actual los directorios ./varios, ./varios/ subdir1, ./varios/subdir2, ./varios/subdir2, ./varios/subdir1/subdir11 ./varios/subdir1/subdir11.. Copiar o crear en todos t odos estos directorios los archivos de a). Verificar Verificar con listado recursivo. c) Borrar del directorio actual todos los archivos cuyo nombre empiece con "aba". Verificar el borrado, y la permanencia de estos archivos bajo el directorio varios y sus subdirectorios. d) Borrar del subdirectorio varios/subdir2 el archivo de nombre "balero". e) Borrar todos los archivos y subdirectorios bajo varios/subdir1 , incluído el propio subdir1. subdir1. f) Borrar todos los archivos y subdirectorios bajo varios , dejando este directorio vacío. g) Borrar el directorio varios.

·

·

·

·

MOVER, CAMBIAR NOMBRE (teórico). Escriba comandos para: a) mostrar nombre, dueño y grupo del archivo arch1 que está en el subdirectorio textos del subdirectorio usuario7 del subdirectorio home del directorio export . b) mover archivos cap1, cap2 ... cap9 desde el libro, ambos subdirectorios dentro subdirectorio borrador hacia el subdirectorio libro, del directorio propio del usuario; usar la variable HOME para escribir las vías. c) concatenar los archivos cap1, cap2 .... cap9 del subdirectorio / export/home/usuario7/capitulos en un único archivo sandokan ubicado en el directorio /export/home/libros /export/home/libros.. ENLACES. En su directorio de trabajo, cree un archivo arch1 con el contenido "Este es arch1". a) Cree un enlace simbólico liga1 hacia el archivo arch1; arch1; verifique tipo de archivo, conteo de enlaces y contenido de ambos archivos. b) Cree un enlace hardware liga0 hacia el archivo arch1 ; verifique tipo de archivo, conteo de enlaces y contenido de ambos archivos. ENLACES. Marque todos los tipos de enlace que pueden establecerse en los siguientes casos. a) enlace hacia un archivo en el mismo directorio: _____ hardware _____ simbólico b) enlace hacia un archivo en el mismo sistema de archivos: _____ hardware _____ simbólico c) enlace hacia un archivo en otro sistema de archivos: _____ hardware _____ simbólico d) enlace hacia un directorio en el mismo sistema de archivos: _____ hardware _____ simbólico e) enlace hacia un directorio en otro sistema de archivos: _____ hardware _____ simbólico

·

·

·

·

·

ENLACES. Copiar el archivo nota en el archivo nota.texto . Crear los enlaces mensaje, misiva, misiva, esquela y carta hacia el archivo nota. nota. Crear simbólicos mensaje, mensaje0, misiva0, misiva0, esquela0 y carta0 hacia el los enlaces hard mensaje0, nota.texto. En ambos casos, verificar conteo de enlaces, tipos de archivo archivo nota.texto. y contenidos. Borrar nota.texto ; analizar la situación estudiando conteo de enlaces y contenidos. ENLACES. Crear en el directorio propio los enlaces public , docums y textos hacia el directorio /usr/doc . ¿Qué tipo de enlace debe emplearse? ¿Por qué? DUEÑOS Y GRUPOS (teórico). Cambiar de dueño y grupo todos los archivos del directorio /export/trabajos que terminan con la palabra "obra", asignándolos al dueño jperez , grupo obras. obras. DUEÑOS Y GRUPOS (teórico). Asignar al grupo mant el directorio /export/ home/mantdir y todos sus archivos y subdirectorios. Cambiar el dueño de estos jefemant. mismos archivos para el usuario jefemant.

PERMISOS. a) Transformar los siguientes permisos simbólicos en absolutos: rwxr-xr-x r-xr--r-rw-r----r-x--x--x b) Transformar los siguientes permisos absolutos en simbólicos: 644 755 610 631 c) Fijar, en modo simbólico, los permisos de arch1 en modo 754. 754. rwxr-x--x. d) Fijar, en modo absoluto, los permisos de arch1 en modo rwxr-x--x.

·

PERMISOS. a) Fijar los permisos del directorio dir1 de modo que todos lo puedan leer y recorrer, pero sólo el dueño pueda modificar sus archivos: 1) en modo simbólico; 2) en modo absoluto. b) Modificar para que el grupo también pueda modificar archivos

·

·

·

PERMISOS. a) Fijar en modo simbólico los permisos del archivo ejecutable exec.tar para que sea ejecutable por todos, legible por el dueño y el grupo y modificable solo por el dueño. Repetir en modo absoluto. b) Fijar en modo absoluto los permisos del directorio dir1 de modo que sólo el dueño y el grupo lo puedan recorrer y leer, y sólo el dueño pueda grabar y borrar en él. Repetir en modo simbólico. PERMISOS. Crear la siguiente estructura de directorios y archivos: dir1 arch1-1 dir2 arch2-1 Investigar el significado de los permisos r, w, w, x sobre directorios variando los permisos de los directorio dir1 y dir2 como sea necesario y verificando qué operaciones pueden realizarse sobre los archivos contenidos en él. Expresar los resultados en una tabla.

Manejo de d e Archivos Archivos Ejercicios complementarios Fichas referencia: Manejo de Archivos, Reseña de Comandos. · · · · · · ·

· · · · ·

· ·

· · · ·

·

·

Actu Actual aliz izar ar la la ffec echa ha del del arc archi hivo vo /tmp/ /tmp/co cont ntro rol. l.tm tmp. p. Borra orrarr el el en enlace lace simb imbólic ólico o lig liga1 a1.. Borrar Borrar el el enlac enlacee simb simbóli ólido do nota nota1.t 1.txt xt que que apun apunta ta al al archi archivo vo ../c ../carta arta.tx .txt. t. Cambiar de nombre el directorio sumarios.textos por el de resumenes. Cambia Cambiarr de nomb nombre re el archi archivo vo /expo /export/t rt/trab rabajo ajos/n s/nota ota.tx .txtt por el de de carta. carta.txt txt en en el mism mismo o directorio. Mover Mover el arch archivo ivo nota nota.tx .txtt del subd subdire irecto ctorio rio trab trabajo ajoss del dire directo ctorio rio padr padree del actu actual al hacia el directorio actual. ¿Con ¿Con qué qué com comand ando o se borr borraa un arch archivo ivo?? ¿Y un dire directo ctorio rio?? ¿Con ¿Con qué qué com comand ando o se borra un enlace hard? ¿Y un enlace simbólico? ¿Con qué comando se borra un enlace simbólico a un directorio? Copiar Copiar,, desde desde el dire directo ctorio rio /part /parte2/ e2/apl aplics ics1/c 1/conf onf el el archivo archivo .exr .exrcc hacia hacia el direc directori torio o actual. Actualizar su fecha. Copiar, desde el directorio /usr/local/conf todos los archivos de nombre terminados en ".cnf" hacia el directorio /grupos/admin/config. /grupos/admin/config. Crear Crear en el subd subdirec irector torio io bin bin del del direct directori orio o propio propio,, un enla enlace ce hard hard hac hacia ia el scri script pt may2min ubicado bajo utils en el directorio propio. Crear Crear,, en el subd subdire irecto ctorio rio bin bin del del directo directorio rio prop propio, io, un un enlace enlace simb simbóli ólico co al scri script pt /usr/ /usr/ local/bin/conectar con nombre conec. Crear Crear los los siguie siguiente ntess enlace enlaces, s, o indic indicar ar si no no es posib posible: le: 1) 1) lnarch lnarch3, 3, enlac enlacee simból simbólico ico hacia el archivo arch3; 2) lharch3, enlace hard hacia el archivo arch3; 3) lndir3, enlace simbólico hacia el directorio dir3; 4) lhdir3, enlace hard hacia el directorio dir3. Crear un enlace del directorio /var/admin (a crear) hacia el directorio / var/log (existente). Crear Crear un enlace enlace hard hard de nom nombre bre cart carta.h a.hard ard en en el subd subdire irecto ctorio rio cart cartas as.va .varia riass del del directorio actual, hacia el archivo carta.txt del directorio actual. Crear un enlace simbólico carta.sim en el directorio /grupos/cartas/pedroso hacia el archivo carta.txt del directorio actual. Crear Crear un archiv archivo o vacío vacío arch arch1 1 en el el direct directori orio o actua actual. l. Crear Crear un un enlace enlace hard hard liga0 liga0 hacia hacia el archivo arch1. ¿Cómo sé que esos archivos tienen enlaces hard? Crear Crear un enla enlace ce simb simbóli ólico co liga1 liga1 hacia hacia el el archiv archivo o arch1 arch1 del del directo directorio rio actu actual. al. ¿Cóm ¿Cómo o sé que el archivo liga1 es un enlace simbólico? xeyes. Determinar la vía completa del comando xeyes. Dete Determ rmin inar ar la vía vía com compl plet etaa del del coma comand ndo o vim (es una versión del editor vi ampliado en sus capacidades). Sin ejecutarlo, determinar si es posible escribir solamente vim para invocarlo, o será necesario indicar su ruta completa. El archivo ejecutable idprint es ejecutable para todos. Fijar sus permisos para que corra con los permisos del dueño del archivo y del grupo al que pertenece el archivo, y no con los permisos de quien lo invoca. Elimin Eliminar ar el el directo directorio rio prop propio io y todos todos los archiv archivos os y subd subdire irecto ctorio rioss del del usuari usuario o pedrogom, ubicados bajo el directorio /home.

· ·

·

·

·

·

·

·

·

· ·

Elimin Eliminar ar el subd subdire irecto ctorio rio basur basuraa que está está bajo bajo el el subdir subdirect ectori orio o home home del dire directo ctorio rio export: a) si está vacío, b) si tiene archivos, c) si tiene archivos ocultos. Elimin Eliminar ar recur recursiv sivam ament entee todos todos los los arch archivo ivoss y subdi subdirec rector torios ios bajo bajo el dire directo ctorio rio hardware ubicado bajo el directorio material del directorio export: a) incluído el propio directorio hardware; b) dejando el directorio hardware vacío. En el el direct directori orio o /expor /export/n t/nove ovela la se se encue encuentr ntran an los los archiv archivos os indi indice ce.tx .txt, t, cap1 cap1.tx .txtt a cap33.txt y biblio.txt. Copiar hacia el directorio actual los archivos cap1.txt a cap33.txt. Usar un solo comando. Escrib Escribir ir coman comandos dos para para borra borrar: r: 1) arch arch1, 1, un un archiv archivo; o; 2) lhar lharch2 ch2,, un enla enlace ce hard hard al al archivo arch2; 3) lnarch2, un enlace simbólico al archivo arch1; 4) dir 1, un directorio vacío; 5) dir2, un directorio lleno, junto con todos sus archivos; 6) lndir3, enlace al directorio dir3. Escrib Escribir ir un com comand ando o (uno (uno solo) solo) para para ejec ejecuta utarr cada cada una una de las las tare tareas as sigu siguien ientes tes en los los directorios trab1, trab2 y trab3 del directorio actual, en forma simultánea: 1) crear en los tres directorios archivos resumen.txt; 2) crear en los tres directorios enlaces simbólicos tmp hacia el directorio /tmp; 3) crear en los tres directorios archivos 00indice con fecha y hora actuales; 4) agregar a los tres archivos 00indice la leyenda "Montevideo, URUGUAY"; URUGUAY"; 5) eliminar en los tres directorios los subdirectorios basura y todos los archivos y subdirectorios bajo basura. Escrib Escribir ir un com comand ando o y uno uno solo solo para para ejecu ejecutar tar cada cada una de las las tarea tareass siguie siguiente ntes: s: a) fijar, en modo absoluto, el archivo arch1 en modo rwxr-x--x. b) fijar, en modo simbólico, el arch1 en modo 754. Fijar Fijar,, en en modo modo simból simbólico ico y abso absolut luto, o, los siguie siguiente ntess perm permiso isos: s: a) del archivo /usr/local/bin/conectar de modo que todos lo puedan ejecutar, el usuario lo pueda leer y escribir, y el grupo lo pueda leer. leer. b) del archivo resumen.txt para que el dueño pueda leer y escribir, el grupo pueda leer y el resto no pueda nada. d) del directorio varios para que el dueño pueda ver, recorrer y borrar archivos, el grupo pueda ver y recorrer, y el resto sólo pueda recorrer r ecorrer.. Usar modo absoluto y modo simbólico. e) del directorio yugo de modo que todos puedan ejecutar los programas contenidos en él, pero sólo pueda verlos y modificarlos el dueño del directorio. f) del archivo vlub, ejecución para todos, lectura y modificación para el dueño, lectura para el grupo, en el archivo vlub. del directorio /grupos/digrafico para permitir a todos ver la lista de archivos contenidos e ingresar al directorio, pero modificar permisos o borrar archivos contenidos solamente al dueño y al grupo. En modo simbóico y absoluto. Fijar Fijar en mo modo do simbó simbólico lico y abso absolut luto o los los siguie siguiente ntess perm permiso isos: s: a) totales para todos en el directorio /temporal, pero de modo que un usuario pueda borrar solamente sus propios archivos. b) del archivo hagoalgo de modo que sea ejecutable por todos y corra con los permisos del dueño del archivo y no de quien lo invoca. Listar Listar las las caract caracterí erísti sticas cas del del direc director torio io /var/ /var/spo spool/ ol/ma mail il (no su su conten contenido ido)) y agregar agregar esta línea al final del archivo logdirs.txt. Marque Marque todo todoss los tipo tiposs de enlac enlacee (hard, (hard, simb simbóli ólico co o ningu ninguno) no) que que puede pueden n estab establec lecers ersee en los siguientes casos: a) enlace hacia un archivo en el mismo directorio; b) enlace hacia un archivo en el mismo sistema de archivos; c) enlace hacia un archivo en otro sistema de archivos; d) enlace hacia un directorio en el mismo sistema de archivos; e) enlace hacia un directorio en otro sistema de archivos.

· ·

· · ·

Mostra Mostrar, r, uno tras otro, otro, el cont conten enido ido de de los archiv archivo o arch1 arch1 y arch arch2, 2, con con toda todass sus sus letras letras en mayúsculas, paginando la salida. No hay vocales acentuadas ni ñ. ¿Qué ¿Qué es es el "sti "sticky cky bit? ¿Para ¿Para qué sirve? sirve? ¿Se ¿Se aplic aplicaa a dire directo ctorio rios, s, a archiv archivos os o a ambos? ¿Qué permisos debe tener un archivo o directorio para que tenga sentido colocar un "sticky bit"? ¿Qué ¿Qué sign signific ificaa el perm permiso iso "s" para para el el dueño dueño de de un arch archivo ivo?? ¿Y para para el grup grupo? o? Si se se trata de un directorio, ¿cómo se responden las preguntas anteriores? ¿Qué ¿Qué signif significa ica el perm permiso iso "x" en un archiv archivo? o? ¿Y ¿Y en un direct directori orio? o? Trans ransfo form rmar ar los los ssig igui uien ente tess per permi miso sos: s: a) absolutos en simbólicos: 644, 610. b) simbólicos en absolutos: rwxr-xr-x, rw-r-----.

Editor vi. 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. El editor vi es un editor de texto de pantalla completa que maneja en memoria el texto entero de un archivo. Es el editor clásico de UNIX; está en todas las versiones. Puede usarse usarse en cualquier tipo de terminal con un mínimo de teclas; esto lo hace difícil de usar hasta que uno se acostumbra. Existe un editor vi ampliado llamado vim que contiene facilidades adicionales, así como diversas versiones del vi original. En todos los casos, el conjunto de comandos básicos es el mismo. Existen en UNIX otros editores más potentes y versátiles, como emacs, que provee un ambiente de trabajo completo; también versiones fáciles de manejar como jove o pico, o aún mínimas e inmediatas como ae. En ambiente X-Windows hay muchos editores amigables, fáciles de usar y con múltiples capacidades. No obstante, vi está en todos los UNIX, requiere pocos recursos, se usa mucho en administración, para programar y en situaciones de emergencia. emergencia. En casos de roturas de discos, corrupción de sistemas de archivos, errores en el arranque y otras catástrofes, puede ser el único editor disponible. Como la mayoría de las configuraciones en UNIX se manejan editando archivos, disponer de esta capacidad es esencial en la administración de un sistema.

Modos de vi. vi: Existen tres modos o estados en vi: modo comando: las teclas ejecutan acciones que permiten desplazar el cursor, recorrer el archivo, ejecutar comandos de manejo del texto y salir del editor. Es el modo inicial de vi. modo texto o modo inserción: las teclas t eclas ingresan caracteres en el texto. modo última línea o ex: las teclas se usan para escribir comandos en la última línea al final de la pantalla. •

• •

• •



Guía de supervivencia. Con unos pocos comandos básicos se puede ya trabajar en vi editando y salvando un texto: vi arch1 arch1 arranca en modo comando editando el archivo archivo arch1 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 vi.



Invocación de vi.



vi abre la ventana de edición sin abrir ningún archivo. vi arch1 edita el archivo arch1 si existe; si no, lo crea. vi arch1 arch2 edita sucesivamente los archivos arch1 y luego arch2. vi +45 arch1 edita el archivo arch1 posicionando el cursor en la línea 45. vi +$ arch1 edita el archivo arch1 posicionando el cursor al final del archivo. vi +/Habia arch1 edita el archivo arch1 en la primera ocurrencia de la palabra "Habia".



Cambio de modo.



comando a texto:

• • • • • • • • • • •

• •

teclas de inserción i I a A o O, o tecla de sobreescritura R.



texto a comando:



tecla ESC.

• • • • •

comando a última línea:

teclas : / ? última línea a comando:

tecla ENTER (al finalizar el comando), o tecla ESC (interrumpe el comando).

• •



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



Esto hace aparecer una leyenda que indica si se está en modo comando o inserción.



Modo Comando.



• •

• • • • • • •



• • •

vi , al igual El editor vi, i gual que todo UNIX, diferencia mayúsculas y minúsculas. Confundir un comando en minúscula digitando uno en mayúscula suele tener consecuencias consecuencias catastróficas. Se aconseja evitar sistemáticamente el uso de la traba de mayúsculas ; mantener el teclado en minúsculas. Números multiplicadores. Muchos comandos aceptan un número multiplicador antes del comando. La acción es idéntica a invocar el comando tantas veces como indica el multiplicador. Ejemplos: 10j en modo comando avanza 10 líneas; 5Y copia 5 líneas y las retiene para luego pegar. Ejemplos de manejo. Los siguientes ejemplos de manejo asumen que el editor se encuentra en modo comando. flechas mueven el cursor (si el terminal lo permite) h j k l mueven el cursor (igual que las flechas) itextoESC inserta la palabra "texto" y vuelve a comando x borra el caracter sobre el cursor dw borra una palabra dd borra una línea 3dd borra las 3 líneas siguientes u deshace último cambio ZZ graba cambios y sale de vi :q!ENTER sale de vi sin grabar cambios /expresiónENTER busca la expresión indicada 3Y copia 3 líneas para luego pegar :6r arch3 inserta debajo de la líne 6 el archivo arch3 Movimiento del cursor: flechas mover en distintas direcciones h o BS una posición hacia la izquierda l o SP una posición hacia la derecha k o una línea hacia arriba j o + una línea hacia abajo $ fin de línea 0 principio de línea 1G comienzo del archivo G fin del archivo 18G línea número 18 Ctrl-G mostrar número de línea actual w comienzo de la palabra siguiente e fin de la palabra siguiente E fin de la palabra siguiente antes de espacio

• • •

• • •

• • •

• • • • •

• • •

b principio de la palabra anterior ^ primera palabra de la línea % hasta el paréntesis que aparea H parte superior de la pantalla L parte inferior de la pantalla M al medio de la pantalla 23| cursor a la columna 23 Control de pantalla. Ctrl-f una pantalla adelante Ctrl-b una pantalla atrás Ctrl-l redibujar la pantalla Ctrl-d media pantalla adelante Ctrl-u media pantalla atrás Ingreso en modo texto: i insertar antes del cursor I insertar al principio de la línea a insertar después del cursor A insertar al final de la línea o abrir línea debajo de la actual O abrir línea encima de la actual R sobreescribir sobreescribir (cambiar) texto Borrar x borrar caracter bajo el cursor dd borrar línea, queda guardada D borrar desde cursor a fin de línea dw borrar desde cursor a fin de palabra d$ borrar desde cursor a fin de línea d0 borrar desde cursor a principio de línea Copiar y pegar Y o yy copiar línea P pegar antes del cursor p pegar después del cursor yw copiar palabra y$ copiar de cursor a fin de línea "ayy o "aY "aY copiar línea en buffer llamado 'a' 'a' "ayw copiar palabra en buffer llamado "ap pegar desde buffer 'a', a la derecha del cursor "aP pegar desde buffer 'a', a la izquierda del cursor "bdd borrar línea y guardar en buffer 'b' "bdw borrar palabra y guardar en buffer 'b' Búsqueda /str buscar hacia adelante cadena de caracteres 'str' ?str buscar hacia atrás cadena de caracteres 'str' n repetir último comando / o ? N repetir último comando / o ? para el otro lado

• •

• • • • • • •



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

Modo Texto.



BS ESC



Modo ex o última línea.



:q



• •



borrar caracter hacia la izquierda pasar a modo comando

salir si no hubo cambios :q! salir sin guardar cambios :w guardar cambios :w arch1 guardar cambios en archivo arch1 :wq guardar cambios y salir :r arch2 insertar un archivo :e arch2 editar un nuevo archivo :e! arch2 idem sin salvar anterior :r! comando insertar salida de comando :shell salir al shell (vuelve con exit) Mover :1 mueve a línea 1 :15 mueve a línea 15 :$ mueve a última línea Opciones



• • • •

:set cambio de opciones :set nu mostrar números de línea :set nonu no mostrar números de línea :set showmode mostrar modo actual de vi :set noshowmode no mostrar modo actual de vi Reemplazo La sintaxis del comando de búsqueda y reemplazo es la siguiente: :,s///g /g , , indican líneas en el archivo; y son cadenas de caracteres o expresiones regulares; / es un separador, s (sustituir) y g (global) son letras de comando para el manejo de expresiones regulares.





:1,$s/Martes/martes/g cambia Martes por martes en todo el archivo. :.,5s/ayuda/&ndo/g cambia ayuda por ayudando desde línea actual hasta la 5a. línea.



Tipo de terminal.

• • •



• •



• • • • • •

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

Preguntas y Ejercicios. Bibliografía y Referencias. Comandos: vi, ed, vim Referencias: Coffin[1989], Coffin[1989], Greenfield[]. Páginas man/info de Linux vi y ed; ed; en ed se definen y explican expresiones regulares. vim, un vi extendido), y Documentación Documentación en línea de Linux, /usr/doc/vim (editor vim, vim. página man/info de vim.

Preguntas y Ejercicios. Ficha Referencia: Editor vi 1. ¿Por qué el editor vi es tan complicado de manejar? Sugerencia: recordar que no usa teclas de función ni teclas t eclas compuestas, compuestas, ni tampoco t ampoco requiere de las flechas. vi, indicando para qué sirven las teclas en cada 2. Definir brevemente los modos del editor vi, caso.

3. Crear un archivo de texto breve. Realizar agregados y correcciones elementales usando los comandos de la Guía de Supervivencia. Grabar y volver a editar ese archivo. Memorizar estos comandos.

4. Crear un archivo de texto breve o usar el anterior. Probar los comandos descritos. Marcar los comandos que se consideren de uso más frecuente dentro de cada categoría de uso.

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. La expresiones regulares (ER) son una forma de describir cadenas de caracteres. Se usan en operaciones de apareamiento o comparación. Las expresiones regulares permiten realizar búsquedas o sustituciones de gran complejidad. Las búsquedas en el editor vi con los comandos / y ? aceptan expresiones regulares; esto hace las búsquedas mucho más potentes y flexibles. Las expresiones regulares son aceptadas en otros editores y en muchos comandos, comandos, si bien con algunas diferencias de sintaxis. Una expresión regular es un patrón que describe un conjunto de cadenas de caracteres. Por ejemplo, el patrón aba*.txt describe el conjunto de cadenas de caracteres que comienzan con aba, aba, contienen cualquier otro grupo de caracteres, luego un punto, y finalmente la cadena txt. cualesquiera". txt. El símbolo * se interpreta como "0, 1 o más caracteres cualesquiera". Las expresiones regulares se construyen como las expresiones aritméticas, usando operadores para combinar expresiones más pequeñas. Analizaremos Analizaremos esos operadores y las reglas de construcción de expresiones regulares, atendiendo siempre al conjunto de cadenas que representa cada patrón.

Metacaracteres. La construcción de expresiones regulares depende de la asignación de significado especial a algunos caracteres. En el patrón aba*.txt el caracter * no vale por sí mismo, como el caracter asterisco, sino que indica un "conjunto de caracteres cualesquiera". Asimismo, Asimismo, el caracter ? no se interpreta como el signo de interrogación sino que representa "un caracter cualquiera y uno solo". Estos caracteres a los que se asigna significado especial se denominan "metacaracteres". El conjunto de metacaracteres para expresiones regulares es el siguiente: \ ^ $ . [ ] { } | ( ) * + ? Estos caracteres, en una expresión regular, son interpretados en su significado especial y no como los caracteres que normalmente representan. Una búsqueda que implique alguno de estos caracteres obligará a "escaparlo" de la interpretación mediante \, como se hace para evitar la interpretación por el shell de los metacaracteres metacaracteres del shell. En una expresión regular, regular,

el caracter ? representa "un caracter cualquiera"; si escribimos \?, estamos representando representando el caracter ? tal cual, sin significado adicional.

Expresiones Regulares Básicas. Una expresión regular determina un conjunto de cadenas de caracteres. Un miembro de este conjunto de cadenas se dice que aparea, equipara o satisface la expresión regular.

ERs de un sólo caracter. Las expresiones regulares se componen de expresiones regulares elementales que aparean con un único caracter: Exp.Reg. c . [abc] [^abc] [0-9][a-z][A-Z]

\e

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, b o c ER de un caracter que no sea a, b o c ERs de un caracter que aparean con cualquier caracter en el intervalo indicado. El signo indica un intervalo de caracteres consecutivos. ER que aparea con alguno de estos caracteres (en lugar de la e): . * [ \ cuando no están están dentro de [ ] ^ al principio de la ER, o al principio dentro de [ ] $ al final de una ER / usado para delimitar una ER

Los paréntesis rectos [] delimitan listas de caracteres individuales. Muchos metacaracteres pierden su significado si están dentro de listas: los caracteres especiales . * [ \ valen por sí dentro de []. []. Para incluir un caracter ] en una lista, colocarlo al principio; para incluir un ^ colocarlo en cualquier lugar menos al principio; para incluir un - colocarlo al final. Dentro de los conjuntos de caracteres individuales, se reconocen r econocen las siguientes categorías: [:alnum:] alfanuméricos [:alpha:] alfabéticos [:cntrl:] de control [:digit:] dígitos [:graph:] gráficos [:lower:] minúsculas [:print:] imprimibles [:punct:] de puntuación [:space:] espacios [:upper:] mayúsculas [:xdigit:] dígitos hexadecimales hexadecimales [0-9A-Za-z], pero esta última expresión depende Por ejemplo, [[:alnum:]] significa [0-9A-Za-z], de la secuencia de codificación ASCII, en cambio la primera es portable, no pierde su

significado bajo distintas codificaciones. En los nombres de categorías, los paréntesis rectos forman parte del nombre de la categoría, no pueden ser omitidos.

Construcción de Expresiones Regulares. Una Expresión Regular se contruye con uno o más operadores que indican, cada uno, el caracter a buscar. 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; el \ escapa el significado especial indica ubicado al comienzo de la línea (cadena nula al principio de línea) 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 ...; acepta intervalos del tipo a-z, 0-9, A-Z (lista) un caracter distinto de ... ; acepta intervalos del tipo a-z, 0-9, A-Z 0, 1 o más ocurrencias de la ER r (repetición) la ER r1 seguida de la ER r2 (concatenación)

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

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

En el editor vi, vi, las expresiones regulares permiten realizar búsquedas tales como: /^Desde busca líneas que empiecen con la cadena Desde /final$ busca líneas que termine con la cadena final

/\$25 busca líneas que contengan $25; $25; \ escapa el $

Expresiones Regulares Extendidas. -E , aceptan Expresiones Regulares Extendidas, Algunos comandos, como egrep o grep -E, que comprenden las Expresiones Regulares Básicas más algunos operadores que permiten construcciones más complejas. Los operadores incorporados son los siguientes: Operador r+ r? r{n} r{n,} r{,m} r{n,m}

Significado 1 o más ocurrencias de la ER r 0 o una ocurrencia de la ER r, 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, pero a lo sumo m r1|r2 la ER r1 o la ER r2 (alternativa) (r) ER anidada "r" evita que los caracteres de la ER r sean interpretados por el shell La repetición tiene precedencia sobre la concatenación; la concatenación tiene precedencia sobre la alternativa. Una expresión puede encerrarse entre paréntesis para ser evaluada primero.

Ejemplos de Expresiones Regulares Extendidas: Exp.Reg.Ext. [0-9]+ [0-9]? ^a|b (ab)* ^[0-9]?b ([0-9]+ab)*

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

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

Preguntas y Ejercicios. Bibliografía y Referencias. Kernighan-Pike[1987], Coffin[1989] Referencias: Kernighan-Pike[1987],

Preguntas y Ejercicios. Ficha Referencia: Expresiones Regulares En algunos de los ejercicios que siguen se pide usar el archivo uy_hist1.txt. uy_hist1.txt. Copiarlo en el directorio de trabajo antes de comenzar. comenzar. Los comandos grep y grep -E buscan líneas que contengan expresiones regulares básicas y extendidas, respectivamente. respectivamente. 1. El archivo uy_hist1.txt fue obtenido de Internet con un navegador en DOS. Usar el editor vi en sólo lectura, para verificar la presencia del caracter visualizado como "^M", correspondiente a retorno de carro (CR). Crear el archivo historia1.txt, historia1.txt, eliminando el caracter CR. Verificar con vi. 2. Abrir el archivo historia1.txt con el editor vi, en sólo lectura. Buscar hacia adelante (comando /), la palabra "Uruguay". Reiterar la búsqueda (comando n) hasta verificar que recomienza al principio del archivo. Repetir hacia atrás (comando ?). grep, extraer del archivo historia1.txt líneas que empiecen con la 3. Con el comando grep, cadena "es". Buscar luego líneas que terminen con la cadena "del". 4. Crear el archivo palabras.txt, palabras.txt, que contiene todas las palabras del archivo historia1.txt, l as vocales historia1.txt, una por línea. Recordar que en español existen la ñ y las acentuadas. Verificar con vi -R o more. more. 5. Una misma palabra puede a veces contener una mayúscula, o estar escrita totalmente en mayúsculas, lo que la hará hará aparecer como palabras palabras distintas. Crear el archivo palabras.min con todas las palabras del archivo palabras.txt en minúsculas. 6. En el archivo historia1.txt mostrar a) líneas que empiecen con "a"; b) líneas que terminen con "l"; c) líneas que empiecen con "e" y terminen con "l". 7. En el archivo historia1.txt mostrar a) líneas que contengan la palabra "ganado"; b) líneas que contengan la palabra "gaucho" y "ganado"; c) líneas que contengan la palabra "ganado" pero no la palabra "vacuno". 8. En un archivo de texto se debe determinar a) cantidad de líneas que contengan la cadena "se". b) cantidad de líneas que contengan la palabra "se". c) cantidad de líneas que contengan "se" dentro de una palabra. d) líneas que contengan al mismo tiempo la palabra "se" separada y la cadena "se" como parte de palabra. Construir primero un "juego de prueba" (un archivo de texto) contemplando todas las posiblidades de ubicación de los caracteres "se" como palabra y como cadena, en el medio y a los extremos de palabra, al principio de línea o al final de línea, etc. Verificar Verificar la correcta detección en todos los casos pedidos. Verificar Verificar finalmente que la suma "cierra". 9. Crear el archivo histo1.txt con las primeras 5 líneas del archivo historia1.txt que contengan sólo minúsculas y eliminando las líneas en blanco. Eliminar la primera línea en blanco parece difícil. ¿Puede hacerse? 10. Sin considerar vocales acentuadas, mostrar el archivo histo1.txt a) con las vocales en mayúsculas y las consonantes en minúsculas; b) con las vocales en minúscula y las consonantes en mayúscula. 11. 11. Mostrar el archivo historia1.txt eliminando todas las vocales, sean éstas mayúsculas o minúsculas y estén acentuadas o no. ¿Puede leerse el texto tal como queda? 12. Un diptongo está formado por dos vocales, vocales, una fuerte y una débil, o dos débiles. Las Las vocales fuertes son a, e, o; las vocales débiles son i, u. La acentuación de u o i destruye el

diptongo. En el archivo historia1.txt a) mostrar todas las palabras con diptongo formado por dos vocales débiles, ordenadas y sin repetir; b) mostrar del mismo modo todos los diptongos con a; c) buscar una expresión regular mínima que despliegue todos los diptongos. 13. Usando el archivo /etc/passwd, y el listado de usuarios con ypcat passwd si el sistema usa NIS, extraer los siguientes registros: a) usuarios con la palabra "Unix" al principio del campo de comentario. b) usuarios del grupo 101. c) usuarios de los grupos 100, 101 o 105. d) usuarios con directorio propio de la forma "/home/un*". e) usando /etc/passwd, listar usuarios con UID de 1 digitos. f) usando /etc/passwd, listar usuarios con UID de 1 o 2 digitos g) usuarios con nombre de exactamente 4 caracteres. h) usuarios con nombre de 4 caracteres empezando empezando con r.

Filtros. 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 alguna entrada, realizan una transformación y escriben una salida. Además Además de los que veremos aquí, incluye comandos tales como head, head, tail, tail, wc, wc, y cut. cut.

sort La comparación u ordenación puede ser por caracteres ASCII o por valor numérico. La ordenación ASCII es la más parecida a la alfabética; sigue el orden del juego de caracteres ASCII. En este ordenamiento, los caracteres idiomáticos (vocales acentuadas, ñ) no se encuentran en el orden alfabético tradicional. 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; en ordenamiento ASCII sería al revés. sort arch1 ordena según el código ASCII. sort -n arch2.num ordena numéricamente. numéricamente. Si no se indican campos de ordenación, la comparación se hace sobre toda la línea. Si se indican campos, 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. sort -t: -k1,3 arch1.txt ordena por campos separados por ":", tomando en cuenta para la comparación los caracteres desde el primero del campo 1 hasta el último del campo 3. sort -t: -k1.3,3.5 arch1.txt ordena por campos tomando en cuenta desde el 3er. caracter del campo 1 hasta el 5to. caracter del campo 3. sort -nr arch2.num ordena en orden numérico descendente. sort -k3 arch3.txt ordena alfabéticamente, usando como cadena de comparación la comprendida desde el primer caracter del 3er. campo hasta el fin de lína. Como no se indica separador, los campos se definen por blancos (espacio o tabulador).

find El comando find explora una rama de directorios buscando archivos que cumplan determinados criterios. El comando find en GNU es extremadamente extremadamente potente, 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; fueron usados por última vez en un cierto período de tiempo; t iempo; tienen un tamaño comprendido dentro de cierto intervalo; son de cierto tipo (regular, directorio, enlace simbólico, etc.); pertenecen a cierto usuario o grupo; tienen ciertos permisos de acceso; contienen texto que aparea con cierto patrón. Una vez ubicados los archivos, find puede realizar diversas acciones sobre ellos: ver o editar; guardar sus nombres en otro archivo; eliminarlos o renombrarlos; cambiar sus permisos de acceso; clasificarlos por grupos. find /var -name *.log -print busca en el directorio /var los archivos terminados en .log, imprime sus nombres en la salida. find /tmp -size +200k -print busca archivos mayores de 200k. En los argumentos numéricos, +N es mayor que N, -N -N es menor que N, N es exactamente igual a N. find /var/spool/mail -atime +30 -print busca archivos no accedidos hace más de 30 días. La opción -atime se refiere a tiempo transcurrido desde última lectura, -mtime desde última modificación de estado o permisos, -ctime de contenido. find /var/tmp -empty -exec rm {} \; busca archivos vacíos y los borra. 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. 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. La sintaxis es grep patrón archivos donde el patrón a buscar es una expresión regular. Crear un archivo con los días de la semana, uno por línea; llamarle dias. grep martes dias grep tes dias



muestra las líneas del archivo dias que contienen la cadena "tes".

• • •

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

• • •

ls -l / | grep '.......rw' lista sólo los archivos que otros pueden leer y escribir en el directorio principal.

• • •

grep '^[^:]*::' /etc/passwd busca usuarios sin contraseña; contraseña; caracteres al principio de línea que no sean ":", y luego "::" (el segundo lugar, lugar, que es el de la contraseña, está vacío).

• • •

grep '^[^:]*:\*:' /etc/passwd busca usuarios que no pueden entrar al sistema; tienen un * en el lugar de la contraseña; \ escapa el significado del segundo *, que vale como caracter a buscar.



Ninguna expresión regular de grep aparea con un caracter nueva línea; las expresiones se aplican individualmente a cada línea. Entre las opciones de grep se cuentan -i para evitar distinguir entre mayúsculas de minúsculas, -n para mostrar el número de línea y -v para buscar líneas que no contengan la expresión regular indicada. • • •





• •

fgrep y egrep Hay dos versiones de grep que optimizan la búsqueda en casos particulares: fgrep (fixed grep, o fast grep) acepta solamente una cadena de caracteres, y no una expresión regular, aunque permite buscar varias de estas cadenas simultáneamente; egrep (extended grep), que acepta expresiones regulares extendidas con los operadores + ? | y paréntesis. fgrep no interpreta metacaracteres, pero puede buscar muy eficientemente muchas palabras en paralelo, por lo que se usa mucho en búsquedas bibliográficas; egrep acepta expresiones más complejas, pero es más lento; grep es un buen compromiso entre ambos. fgrep martes dias dias. busca la cadena martes en el archivo dias.

• •



buscar.exp, En fgrep y egrep puede indicarse la opción -f buscar.exp, donde buscar.exp es un archivo que contiene la expresión a buscar: cadenas simples para fgrep, fgrep, expresiones regulares para egrep, egrep, separadas por nueva línea; las expresiones se buscan en paralelo, es decir que la salida serán todas las l as líneas que contengan una cualquiera de las expresiones a buscar. Crear un archivo buscar.fgrep con las cadenas "tes" y "jue", una por línea. El comando

fgrep -f buscar.fgrep dias extrae del archivo dias las líneas que contienen estas cadenas.

• • •

El comando grep soporta fgrep y egrep como opciones -F y -E, respectivamente. respectivamente. grep -F -f buscar.fgrep dias egrep "tes|jue" dias grep -E "tes|jue" dias obtienen el mismo efecto del comando anterior. egrep "([0-9]+ab)*1234" archivo busca cadenas comenzadas comenzadas opcionalmente por un dígito y los caracteres ab, todo el paréntesis 0 o más veces, y hasta encontrar la cadena 1234.

• • • • • • •



Escribir grep -E es similar a egrep, egrep, aunque no idéntico; egrep es compatible egrep; grep -E acepta expresiones regulares extendidas con el comando histórico egrep; -F. y es la versión moderna del comando en GNU. fgrep es idéntico a grep -F.



• •

• • • •

tr El comando tr translitera los caracteres de la entrada: sustituye unos caracteres por otros. La sustitución es caracter a caracter. caracter. Entre sus opciones se encuentran -d para borrar caracteres; -c para sustituir complemento de los caracteres indicados, es decir, que no sean ésos; y -s para comprimir caracteres repetidos en uno solo. cat dias | tr a-z A-Z convierte todo a mayúsculas. cat dias | tr -d aeiou borra todas las vocales del archivo dias.

• •

• • •

Agregar al archivo dias líneas en blanco, varias seguidas, intercaladas entre los nombres de los días. cat dias cat dias | tr -s "\n*" convierte varios caracteres nueva línea seguidos en una solo; eli mina renglones en blanco.

• • • • •

cat nota | tr -c "[a-zA-Z0-9]" "_" transforma todos los caracteres que no sean letras o números en subrayas. cat nota | tr -cs "[a-zA-Z0-9]" "[\n*]" transforma todos los caracteres que no sean letras o números en nuevalínea, y comprime las nuevalíneas repetidas en una sola; deja cada palabra sola en un renglón.

• • •

ls -l /usr | tr -s " " | cut -f3,4 comprime los blancos en la salida para poder cortar campos.

uniq

• •

• • • •

• •

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

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



Preguntas y Ejercicios.



Bibliografía y Referencias.

• •

Comandos: sort, find, grep, fgrep, egrep, tr, uniq, dd Referencias: páginas man, nodos info, Kernighan-Pike[1987], Coffin[1989].

Preguntas y Ejercicios. Ficha Referencia: Filtros Estructura de archivos. Estructura del archivo /etc/passwd: #nombre:contraseña:UID:GID #nombre:contraseña:UID:GID:comentarios:d :comentarios:dir_propio:she ir_propio:shell ll jperez:Xdio0IKLLP:1130:103 jperez:Xdio0IKLLP:1130:103:Juan :Juan Pérez:/home/jperez:/bin/b Pérez:/home/jperez:/bin/bash ash Estructura del archivo /etc/group: #grupo:GID:lista_usuarios docentes:103:victor,german,fernando Estructura del archivo /etc/hosts: #número_IP nombre_máquina alias 10.137.137.250 10.137.137.250 liebre.cdi.edu.uy liebre.cdi.edu.uy liebre localhost mailhost Todos los archivos anteriores pueden tener comentarios (líneas comenzadas por #).

1. Buscar a partir del directorio /var todos los archivos de nombre core y mostrar a) sus nombre; b) sus nombres en listado largo; c) eliminarlos.

2. Un archivo acceso.log de registro de accesos de usuarios a un sistema UNIX, genera un renglón por acceso, el primer campo es el nombre del usuario, y los campos están separados por ":". ":". a) Escribir comandos que muestren el nombre de cada usuario y la cantidad de accesos registrados, en orden alfabético. b) Extraer del archivo acceso.log las líneas correspondientes al usuario jperez del mes de mayo del año 1997. La fecha figura en el formato "1300 15 Mayo 1997"; el primer número es la hora. c) Extraer del archivo acceso.log las líneas que correspondan al usuario jperez o al elopez. usuario elopez.

3. En el archivo NoMBreS.tXT un mismo nombre puede estar en mayúsculas y minúsculas, mezcladas de diferentes maneras. Generar una lista de nombres en minúscula con los 7 nombres que aparecen menos veces, sin importar i mportar como estén escritos.

4. Un archivo palabras.txt contiene palabras distintas una por línea. Extrar todas las palabras que empiecen y terminen con vocal, en minúscula o mayúscula.

5. Usar el archivo /etc/passwd o el comando ypcat passwd si el sistema usa NIS, para resolver las siguientes preguntas. En estos archivos pueden haber comentarios, líneas empezadas por #, que deben eliminarse de la búsqueda. Recordar que el caracter # es interpretado por el shell. a) eliminar los comentarios. elopez. b) extraer una línea que muestre directorio propio y shell del usuario elopez. c) listar los usuarios que usan el shell /bin/bash.

d) listar los usuarios que no usan el shell /bin/bash. e) contar la cantidad de usuarios.

6. Realizar las tareas indicadas, si es posible; si no lo es, indicar los motivos. Presentar el archivo /etc/passwd ordenado según los siguientes criterios: a) ordenado por nombre de login de usuario. b) ordenado por número de usuario. c) ordenado por número de grupo y dentro de cada grupo por número de usuario. d) ordenado por número de grupo y dentro de cada grupo por campo de comentario.

7. historia1.txt, e indicar la cantidad Encontrar las 5 palabras más frecuentes en el texto historia1.txt, de veces que fue usada cada una. Indicación: I ndicación: transformar primero todas las palabras a minúscula. • • • •

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. La programación de shell se usa mucho para realizar tareas repetidas con frecuencia. Los diseñadores de sistemas suelen escribir aplicaciones en el lenguaje de base del sistema operativo, C en el caso de UNIX, por razones de rapidez y eficiencia. Sin embargo, el shell de UNIX tiene un excelente rendimiento en la ejecución de "scripts" (guiones); ésta es la denominación aplicada a los programas escritos en el lenguaje del shell. Se han creado aplicaciones completas usando solamente scripts.

Comandos multilínea. Una línea de comando termina con un caracter nuevalínea. El caracter nuevalínea se ingresa digitando la tecla ENTER. Varios comandos pueden escribirse en una misma línea usando el separador ";" echo $LOGNAME; pwd; date Si un comando no cabe en una línea, la mayoría de los intérpretes continúan la digitación en la línea siguiente. Para establecer específicamente específicamente que un comando continúa en la línea siguiente, hay dos formas, mutuamente excluyentes (se usa una u otra, pero no ambas al mismo tiempo): - terminar la primera línea con \ : $ echo $LOGNAME \ > $HOME que muestra algo como jperez /home/jperez - dejar una comilla sin cerrar:

$ echo "$LOGNAME > $HOME" que produce el mismo resultado. En los ejemplos anteriores hemos escrito los indicadores de comando. Al continuar el comando en la segunda línea, el indicador de comandos cambia cambia de $ a >, es decir, del indicador de comando de primer nivel PS1 al indicador de comando de segundo nivel PS2. Si no se quiere terminar el comando multilínea, puede interrumpirse el ingreso con Ctrl-C, volviendo el indicador de comando a PS1 inmediatame i nmediatamente. nte.

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

Comentarios en los scripts. En un script todo lo que venga después del símbolo # y hasta el próximo caracter nuevalínea se toma como comentario y no se ejecuta. echo Hola todos # comentario hasta fin de línea sólo imprime "Hola todos". # cat /etc/passwd no ejecuta nada, pues el símbolo # convierte toda la línea en comentario. Los scripts suelen encabezarse con comentarios que indican el nombre de archivo y lo que hace el script. Se colocan comentarios de documentación documentación en diferentes partes del script para

mejorar la comprensión y facilitar el mantenimiento. 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í: #!/bin/bash # misdatos.sh # # muestra datos propios del usuario que lo invoca # echo "MIS DATOS." echo " Nombre: "$LOGNAME echo "Directorio: "$HOME echo -n "Fecha: " date # muestra fecha y hora echo # línea en blanco para presentación # fin misdatos.sh La primera línea indica que el script será ejecutado con el intérprete de comandos bash. bash. Esta indicación debe ser siempre la primera línea del script y no puede tener blancos.

Estructuras básicas de programación. Las estructuras básicas de programación son sólo dos: la estructura repetitiva y la estructura alternativa. Cada forma tiene sus variaciones, y la combinación de todas ellas generan múltples posibilidades, pero detrás de cualquiera de ellas, por compleja que parezca, se encuentran siempre repeticiones o alternativas. Estructura repetitiva: se realiza una acción un cierto número de veces, o mientras dure una condición. mientras haya manzanas, pelarlas; desde i = 1 hasta i = 7 escribir dia_semana(i); dia_semana(i); Esta escritura informal se denomina "pseudocódigo", por contraposición al término "código", que sería la escritura formal en un lenguaje de programación. En el segundo ejemplo, 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 alternativa: en base a la comprobación de una condición, se decide una acción diferente para cada caso. si manzana está pelada, comerla, en otro caso, pelarla; # oráculo

caso $estado en soltero) escribir "El casamiento será su felicidad"; casado) escribir "El divorcio le devolverá la felicidad"; divorciado) escribir "Sólo será feliz si se vuelve a casar"; fin caso

Funciones: una tarea que se realiza repetidamente dentro del mismo programa puede escribirse aparte e invocarse como una "función". Para definir una función es preciso elegir un nombre y escribir un trozo de código asociado a ese nombre. La función suele recibir algún valor como "parámetro" en base al cual realiza su tarea. Definida así la función, para usarla basta escribir su nombre y colocar el valor del parámetro entre paréntesis. función area_cuadrado (lado) devolver lado * lado; función dia_semana(día_hoy) dia_semana(día_hoy) caso $dia_hoy en 1) devolver "Lunes";; 2) devolver "Martes";; 3) devolver "Miércoles";: 4) devolver "Jueves";; 5) devolver "Viernes;; 6) devolver "Sábado";; 7) devolver "Domingo";; fin caso;

Comandos de programación. En esta sección veremos los comandos típicos de programación del shell. Obsérvese que el shell toma la convención inversa de C para cierto y falso: cierto es 0, y falso es distinto de 0. El shell adopta esta convención porque los comandos retornan 0 cuando no hubo error. Veremos dos comandos, true y false, false, que retornan siempre estos valores; se usan en algunas situaciones de programación para fijar una condición. true Este comando no hace nada, sólo devuelve siempre 0, el valor verdadero. La ejecución correcta de un comando cualquiera devuelve 0. true echo $?

muestra el valor 0; la variable $? retiene el valor de retorno del último comando ejecutado. false Este comando tampoco hace nada sólo devuelve siempre 1; cualquier valor diferente de 0 se toma como falso. Las diversas condiciones de error de ejecución de los comandos devuelven valores diferentes de 0; su significado es propio de cada comando. false echo $? muestra el valor 1. if El comando if implementa una estructura alternativa. Su sintaxis es if expresión ; then comandos1 ; [else comandos2 ;] 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, el indicador cambia a > hasta que termina el comando. La expresión puede ser cualquier expresión lógica o comando que retorne un valor; si el valor retornado es 0 (cierto) los comandos1 se ejecutan; si el valor retornado es distinto de 0 (falso) los comandos1 no se ejecutan. Si se usó la forma opcional con elsese elsese ejecutan los comandos2. comandos2. if true; then echo Cierto ; else echo Falso ; fi else. siempre imprime Cierto; no entra nunca en else. if false; then echo Cierto ; else echo Falso ; fi siempre imprime Falso, no entra nunca en then. then. Construcciones más complejas pueden hacerse usando elif para anidar alternativas. Escribir en un archivo las líneas que siguen # ciertofalso.sh: escribe cierto o falso según parámetro numérico # if [ $1 = "0" ] then echo "Cierto: el parámetro es 0." else echo "Falso: el parámetro no es 0." fi Convertir el script en ejecutable. Invocar este script con ./ciertofalso.sh N  donde N es un número entero 0, 1, 2, etc. La variable $1 hace referencia a este parámetro de invocación. Verificar el resultado.

Crear y ejecutar el siguiente script: # trabajo.sh: dice si se trabaja según el día # invocar con parámetros: # domingo, feriado, u otro nombre cualquiera # if [ $1 = "domingo" ] then echo "no se trabaja" elif [ $1 = "feriado" ] then echo "en algunos se trabaja" else echo "se trabaja" fi for Este comando implementa una estructura repetitiva, en la cual una secuencia de comandos se ejecuta una y otra vez. Su sintaxis es for variable in lista ; do comandos ; done Se puede probar en la línea de comandos: for NUMERO in 1 2 3 4 ; do echo $NUMERO ; done for NOMBRE in alfa beta gamma ; do echo $NOMBRE ; done for ARCH in * ; do echo Nombre archivo $ARCH ; done El caracter * es expandido por el shell colocando en su lugar todos los nombres de archivo del directorio actual. Crear y probar el siguiente script. # listapal.sh: lista de palabras # muestra palabras de una lista interna # LISTA="silla mesa banco cuadro armario" for I in $LISTA do echo $I done # fin listapal.sh En el siguiente script, el comando expr calcula expresiones aritméticas; notar su sintaxis. # contarch.sh # muestra nombres y cuenta archivos en el directorio actual # CUENTA=0 for ARCH in * do

echo $ARCH CUENTA=`expr $CUENTA + 1` # agrega 1 a CUENTA done echo Hay $CUENTA archivos en el directorio `pwd` # fin contarch.sh case Este comando implementa alternativas o "casos"; elige entre múltiples secuencias de comandos la secuencia a ejecutar. ejecutar. La elección se realiza encontrando el primer patrón con el que aparea una cadena de caracteres. Su sintaxis es case $CADENA in  patrón1) comandos1;; patrón2) comandos2;; ... *) comandosN  ;; ;; esac El patrón * se coloca al final; aparea cualquier cadena, y permite ejecutar comandosN cuando ninguna de las opciones anteriores fue satisfecha. Crear el siguiente script: # diasemana.sh: nombres de los días de la semana # invocar con número del 0 al 6; 0 es domingo case $1 in 0) echo Domingo;; 1) echo Lunes;; 2) echo Martes;; 3) echo Miércoles;; 4) echo Jueves;; 5) echo Viernes;; 6) echo Sábado;; *) echo Debe indicar un número de 0 a 6;; esac Invocarlo como diasemana.sh N  donde N es cualquier número de 0 a 6, otro número, o una cadena cualquiera. Verificar el comportamiento. Crear el archivo estacion.sh con estas líneas: # estacion.sh # indica la estación del año aproximada según el mes # case $1 in diciembre|enero|febrero)

echo Verano;; marzo|abril|mayo) echo Otoño;; junio|julio|agosto) echo Invierno;; setiembre|octubre setiembre|octubre |noviembre) echo Primavera;; *) echo estacion.sh: debe invocarse como echo estacion.sh mes echo con el nombre del mes en minúscula;; esac # fin estacion.sh El valor $1 es el parámetro recibido en la línea de comando. La opción *) aparea con cualquier cadena, por lo que actúa como "en otro caso"; es útil para dar instrucciones sobre el uso del comando. En las opciones, | actúa como OR; pueden usarse también comodines * y ?. Invocar el script: bash estacion.sh octubre bash estacion.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). La condición se examina al principio y luego cada vez que se completa la secuencia de comandos. Si la condición es falsa desde la primera vez, los comandos no se ejecutan nunca. Su sintaxis es while condición ; do comandos ; done En el guión que sigue la expresión entre paréntesis rectos es una forma de invocar el comando test, test, que realiza una prueba devolviendo cierto o falso. El operador -lt, -lt, "lower than", significa "menor que". Observar su sintaxis, sobre todo la posición de los espacios en blanco, obligatorios. # crear1.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 while [ $VAL -lt 10 ] # mientras $VAL < 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done ls -l arch[0-9] rm arch[0-9] # fin crear1.sh

until Este comando implementa una estructura repetitiva en la cual el conjunto de comando se ejecuta hasta que se cumpla una condición. En cuanto la l a condición se cumple, dejan de ejecutarse los comandos. La condición se examina al principio; si es verdadera, los comandos no se ejecutan. Notar la diferencia con while. while. Su sintaxis es until condición ; do comandos ; done until, el script anterior se escribiría Usando until, # crear2.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 until [ $VAL -eq 10 ] # hasta que $VAL = 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done ls -l arch[0-9] rm arch[0-9] # fin crear2.sh exit Este comando se utiliza en programación de shell para terminar inmediatamente un script y volver al shell original. exit en un script, termina inmediatamente inmediatamente el script; en la línea de comando, termina la ejecución del shell actual, y por lo tanto la sesión de UNIX. exit 6 termina el script devolviendo el número indicado, lo que puede usarse para determinar condiciones de error. exit 0 termina el script devolviendo 0, para indicar la finalización exitosa de tareas. Escribir sólo exit también devuelve código de error 0. El siguiente script ofrece un ejemplo de uso. #!/bin/bash # exitar.sh: prueba valores de retorno de exit # clear echo "Prueba de valores de retorno" echo " Invocar con parámetros " echo " bien, error1, error2, cualquier cosa o nada" echo " Verificar valor de retorno con" echo ' echo $?' echo VALOR=$1 case $VALOR in bien)

echo " exit 0;; error1) echo " error2) echo " *) echo " echo " parámetro." exit 3;; esac

-> Terminación sin error."

-> Terminación con error 1." ; exit 1;; -> Terminación con error 2." ; exit 2;; -> Terminación con error 3." (invocado con parámetro no previsto o sin

expr Este comando recibe números y operadores aritméticos como argumentos, efectúa los cálculos indicados y devuelve el resultado. Cada argumento debe estar separado por blancos. Opera sólo con números enteros y realiza r ealiza las operaciones suma (+), resta (-), multiplicación (*), división entera (/), resto de división entera (%). Los símbolos * y / deben ser escapados escribiendo \* y \/, al igual i gual que los paréntesis, que deben escribirse \( y \). El comando expr usa la convención de C para cierto y falso: 0 es falso, y distinto de 0 es cierto. No confundir con la convención que toma el shell en sus valores true y false, que es la contraria. expr 4 + 5 devuelve 9 ( 4 + 5 = 9 ). expr 3 \* 4 + 6 \/2 devuelve 15 ( 3 * 4 + 6 /2 = 15 ). expr 3 \* \( 4 + 3 \) \/2 devuelve 10 ( 3 * (4 + 3) / 2 = 10 ). comparación, aceptando los operadores =, ! expr también realiza operaciones lógicas de comparación, =, >, = y
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF