Unix

Sistemas Operativos. Sistema ficheros. Lenguaje. Shell. Órdenes

  • Enviado por: Kbza
  • Idioma: castellano
  • País: España España
  • 16 páginas
publicidad
publicidad

1. Sistemas Operativos

Un Sistema Operativo es una parte importante de cualquier sistema de computación. Un sistema de computación puede dividirse en cuatro componentes: el hardware, el Sistema Operativo, los programas de aplicación y los usuarios.

El hardware (Unidad Central de Procesamiento (UCP), memoria y dispositivos de entrada/salida (E/S)) proporciona los recursos de computación básicos. Los programas de aplicación (compiladores, sistemas de bases de datos, juegos de video y programas para negocios) definen la forma en que estos recursos se emplean para resolver los problemas de computación de los usuarios.

1.1. Concepto y definición de Sistema Operativo

Existen diversas definiciones de lo que es un Sistema Operativo, pero no hay una definición exacta, estándar; a continuación se presentan algunas:

1.- Se pueden imaginar un Sistema Operativo como los programas, instalados en el software o firmware, que hacen utilizable el hardware.

2.- Los Sistemas Operativos son ante todo administradores de recursos; el principal recurso que administran es el hardware del computador; además de los procesadores, los medios de almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicación y los datos.

3.- Un Sistema Operativo es un programa que actúa como intermediario entre el usuario y el hardware del computador y su propósito es proporcionar el entorno en el cual el usuario pueda ejecutar programas.

4.- Un Sistema Operativo es un conjunto de programas que controla la ejecución de programas de aplicación y actúa como una interfaz entre el usuario y el hardware de una computadora, esto es, un Sistema Operativo explota y administra los recursos de hardware de la computadora con el objeto de proporcionar un conjunto de servicios a los usuarios del Sistema.

En resumen, se podría decir que los Sistemas Operativos son un conjunto de programas que crean la interfaz del hardware con el usuario.

1.2. Características comunes de los Sistemas Operativos

En general, se puede decir que un Sistema Operativo tiene las siguientes características:

• Conveniencia. Un Sistema Operativo hace más conveniente el uso de una computadora.

• Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera más eficiente posible.

• Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.

• Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.

• Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.

• Organizar datos para acceso rápido y seguro.

• Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.

• Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de entrada/salida de la computadora.

• Técnicas de recuperación de errores.

• Generación de estadísticas.

• Permite que se puedan compartir el hardware y los datos entre los usuarios.

1.3. Características identificativas de los distintos Sistemas Operativos

Los Sistemas Operativos son varios ya que cada uno tiene características diferentes entre estos están DOS, MS-DOS ó MS/DOS, UNIX y CP/M

He aquí la explicación de cada tipo de Sistema Operativo:

DOS: Sistema operativo en disco. Un Sistema Operativo, generalmente pequeño para miniordenadores.

MS-DOS: Sistema Operativo para microordenadores de utilización muy extendida

CP/M: Es un programa de control para microordenadores. Sistema Operativo utilizado en microordenadores. CP/M es una marca registrada.

Linux: Es un UNIX libre, es decir, un Sistema Operativo, como el Windows o el MS-DOS (sin embargo, a diferencia de estos y otros Sistemas Operativos, ha sido desarrollado por miles de usuarios de computadoras a través del mundo, y la desventaja de estos es que lo que te dan es lo que tu obtienes, dicho de otra forma no existe posibilidad de realizar modificaciones ni de saber como se realizó dicho Sistema), que fue creado inicialmente como un hobbie por un estudiante joven, Linus Torvalds, en la universidad de Helsinki en Finlandia, con asistencia por un grupo de hackers a través de Internet. Linus tenía un interés en Minix, un sistema pequeño o abreviado del UNIX (desarrollado por Andy Tanenbaum); y decidido a desarrollar un sistema que excedió los estándares de Minix.

El Sistema Operativo UNIX será tratado con mayor detenimiento más adelante ya que es el objetivo a tratar en este documento.

1.4. Principales funciones de los Sistemas Operativos

Además de saber cuales son los diferentes tipos de sistemas operativos debemos saber cuáles son las funciones que realizan y entre ellas están:

• Interfaz con el usuario.

• Compartir información con el usuario.

• Compartir el hardware.

• Recuperarse ante errores.

• Gestionar el hardware.

• Facilitar el trabajo al usuario.

2. Sistema Operativo UNIX

2.1. Introducción al Sistema Operativo UNIX

Se trata de un Sistema Operativo de los mas utilizados y con mas futuro debido a que son muchos organismos oficiales y particulares los que defienden su utilización, así como muchas firmas de fabricación y comercialización de computadoras que lo incorporan en sus productos. Podemos citar el ejemplo de la Comunidad Económica Europea, que impone el Sistema Operativo UNIX en todas las aplicaciones que se desarrollan bajo sus auspicios.

2.2. Historia del Sistema Operativo UNIX

La historia del Sistema Operativo UNIX es la que se describe a continuación, en orden cronológico para que podamos observar como ha sido su evolución a lo largo del tiempo:

• 1965: Las empresas Bell Telephone Laboratories y General Electric Company intervienen en el proyecto MAC del Massachusets Institute Tecnology (MIT) para desarrollar un nuevo sistema operativo denominado MULTICS, cuyo objetivo fue el ofrecer un sistema multiusuario (acceso simultaneo de gran numero de usuarios) de gran potencia de proceso, gran capacidad de almacenamiento y con grandes facilidades para compartir datos entre procesos.

• 1969: Vistos los resultados poco satisfactorios del MULTICS, la Bell Telephone Laboratories se retira del proyecto y desarrolla un sistema de tiempo compartido con pagina por demanda para uso interno de la empresa sobre la computadora PDP - 7 de Digital, siendo los artífices del mismo un equipo encabezado por Ken Thompson y Denis Ritchie. Este sistema operativo constituyó la primera versión del UNIX, que solo permitía la explotación en monoprogramación. El resultado del sistema anterior tuvo tanto éxito que la compañía puso a disposición de Thompson y Ritchie una computadora más potente, que fue la PDP - 11 de Digital. En ella, Thompson desarrolló el lenguaje de programación B inspirándose en BCPL y en el FORTRAN y a continuación Ritchie creo el lenguaje C, con el que consiguió la generación de código de maquina, descripción de tipos de datos y de estructuras de datos.

• 1970: Versión de 2 usuarios sobre DEC PDP-11.

• 1971: Versión multiusuario sobre PDP-11/40,45,70.

• 1973: Se reescribe en C la versión de UNIX desarrollada en ensamblador y que prácticamente es la que se ha mantenido hasta hoy. Aparece una versión de UNIX conocida como Programmer's Workbench (PWB).

• 1974: Se introduce el Sistema Operativo UNIX en las universidades norteamericanas con fines educativos.

• 1975: Versión 6 de UNIX y cesión a Universidades para su enseñanza.

• 1977: Se construye la primera versión comercial de UNIX, conocida como la versión 6, implantándose por primera vez en una computadora distinta de la PDP, que fue la INTERDATA 8/32.

• 1979: Aparece la versión 7 de UNIX para PDP y una versión para la computadora VAX de Digital (32 bits), conocida como 32V.

• 1981: Nace la primera versión de UNIX para computadoras personales con el nombre de XENIX.

• 1982: Para la distribución externa, los laboratorios Bell desarrollan el UNIX System III, que no es mas que el original con algunas pequeñas variantes. Por otra parte, la Universidad de Berkeley desarrolla una variante del UNIX, el 32V para computadoras VAX con mejoras en cuanto a comandos y gestión de la memoria virtual paginada, denominada 4.1 BSD.

• 1983: La empresa AT&T anuncia una nueva versión denominada UNIX System V, que es el sistema actual y que presenta importantes mejoras de rendimiento, comunicaciones, etc.

• 1984: La Universidad de Berkeley presenta la versión 4.2 BSD para computadoras VAX, que también se aplica en estaciones de trabajo SUN 2/3 de SUN MICROSYSTEMS.

• 1989: UNIX System V, R4 con soporte para RFS, Streams, Redes y Tiempo Real.

En la actualidad se utilizan fundamentalmente dos versiones del Sistema Operativo:

• UNIX System V.

• XENIX System V.

En la mayoría de los casos, cada fabricante tiene su propia versión de UNIX, entre ellas citaremos:

• Digital Equipment Corporation ULTRIX

• IBM

• AIX

• Data General DG / UX

• National Semiconductor GENIX

• Gould Concept 32 / 6750 UTX

• Hewlett Packard HP - UX

A partir de la 7ª edición de UNIX, AT&T que había adquirido los laboratorios BELL decidió hacerlo comerciable no distribuyendo el código fuente de las siguientes variaciones dándole el nombre de UNIX System V.

A partir de ahí, evolucionó como cualquier otro Sistema y ahora pertenece a SANTA CRUZ que es de AT&T.

2.3. Características de UNIX

• Es un Sistema Operativo multiusuario, con capacidad de simular multiprocesamiento y procesamiento no interactivo.

• Está escrito en un lenguaje de alto nivel: C.

• Dispone de un lenguaje de control programable llamado SHELL.

• Ofrece facilidades para la creación de programas y sistemas y el ambiente adecuado para las tareas de diseños de software.

• Emplea manejo dinámico de memoria por intercambio o paginación.

• Tiene capacidad de interconexión de procesos.

• Permite comunicación entre procesos.

• Emplea un sistema jerárquico de archivos, con facilidades de protección de archivos, cuentas y procesos.

• Tiene facilidad para redireccionamiento de Entradas/Salidas.

• Garantiza un alto grado de portabilidad.

2.4. Principios de diseño de UNIX

UNIX fue diseñado para ser un Sistema Operativo interactivo, multiusuario y multitarea:

Interactivo porque el sistema acepta ordenes, las ejecuta y se dispone a esperar otras nuevas.

Multitarea, que significa que puede realizar varios trabajos, denominados procesos, al mismo tiempo.

Multiusuario significa que más de una persona puede usar el sistema al mismo tiempo.

UNIX fue diseñado por programadores para ser usado por programadores en un entorno en que los usuarios son relativamente expertos y participan en el desarrollo de proyectos software.

Es común que varios programadores cooperen activamente para realizar un producto software, por lo que UNIX ofrece facilidades que permiten a los usuarios trabajar en equipo y compartir información de forma controlada. Este enfoque es muy distinto al de un Sistema Operativo de un ordenador personal, en el que un usuario no necesariamente experto en informática trabaja con un procesador de textos. Así, existen herramientas para el desarrollo de programas como MAKE, que permite sacar partido de las posibilidades que ofrece la compilación separada, y el sistema de control de código fuente, que se usa para el mantenimiento de las diferentes versiones de los programas durante el desarrollo de los mismos.

Para un programador experto, un Sistema Operativo debe ser, como mínimo, simple y consistente. Además debe ser flexible y potente, lo que quiere decir que el sistema debe de ofrecer un conjunto pequeño de elementos básicos que se puedan combinar de muchas maneras para construir una aplicación más compleja (una de las líneas básicas de diseño de UNIX es que todo programa debe hacer únicamente una cosa y hacerla bien). Por ultimo, a los programadores no les gusta escribir mas de lo necesario, por lo que las ordenes del Sistema son muy simples.

2.5. Estructura de UNIX

La estructura de UNIX se amolda a un típico modelo en capas, de forma que cada capa únicamente puede comunicarse con las capas que se hallan en los niveles inmediatamente inferior y superior.

El núcleo (kernel) del sistema interactúa directamente con el hardware y proporciona una serie de servicios comunes a los programas de las capas superiores, de forma que las peculiaridades del hardware permanecen ocultas. Como los programas son independientes del hardware, es fácil (en teoría) mover programas entre sistemas UNIX que se ejecutan en hardware diferente. Programas como el intérprete de comandos (shell) sh y el editor vi interactúan con el kernel a través de llamadas al sistema, que permiten el intercambio de información entre el kernel y los programas.

2.6. UNIX desde el punto de vista del usuario

UNIX se compone de tres partes principales: el núcleo (kernel), el sistema de ficheros y el intérprete de comandos (shell). Estas dos últimas son visibles al usuario, mientras que el kernel permanece oculto.

• El kernel es la parte del sistema que gestiona los recursos del computador (el hardware).

• El sistema de ficheros organiza la información en disco y es de tipo jerárquico.

• El shell es un programa de utilidad que permite al usuario comunicarse con el sistema.

2.6.1. Conexión y desconexión al sistema

Para acceder a un Sistema UNIX un usuario debe disponer de un identificador de usuario y una palabra de paso (password), que son leídos y comprobados por un programa llamado login. De esta forma se proporciona seguridad, ya que UNIX conoce qué usuario es dueño de cada fichero. Un fichero únicamente puede ser accedido por usuarios autorizados.

Los identificadores y las palabras de paso se almacenan en un fichero que contiene una línea por cada usuario.

Cada línea contiene, entre otras cosas, el identificador del usuario y la palabra de paso, que está encriptada. Cuando un usuario intenta conectarse al sistema, el programa login encripta la palabra de paso leída y la compara con la que existe en el fichero de palabras de paso. Si coinciden, el usuario es autorizado para iniciar una sesión. El fichero de palabras de paso es visible por cualquier usuario. Una vez que el usuario se ha conectado al sistema, el programa login ejecuta el shell que se halla especificado en la línea correspondiente en el fichero de palabras de paso y termina.

Para terminar una sesión se puede usar exit, logout o la combinación de teclas CTRL-D.

2.6.2. El shell

Un shell es un programa de usuario más cuyas únicas habilidades son leer del teclado, escribir en la pantalla y poder ejecutar otros programas. Constituye el interfaz entre el usuario y el sistema operativo.

Existen tres shells que son los más usados:

Bourne shell: es el shell tradicional de UNIX y existe en todas los sistemas.

C shell: posterior al Bourne shell, fue diseñado para que los programas escritos en el lenguaje del shell (shell scripts) tengan la apariencia de programas escritos en C.

Korn shell: es un superconjunto del Bourne shell e incorpora algunas de las funciones más útiles del C shell.

Un shell muestra un indicador (prompt) para indicar al usuario que está preparado para aceptar una orden o instrucción. Para introducir una orden desde el teclado, se escribe el nombre de la orden junto con la información que ésta requiera y se pulsa la tecla retorno de carro. Esta línea tecleada se denomina línea de comandos u órdenes.

El formato de las órdenes es el siguiente:

sort -r titulos (ejemplo)

Las ordenes están formadas por:

- Nombre de la orden.

- Opción/es.

- Parámetro/s.

Cuando el shell lee una línea de comandos, extrae la primera palabra, asume que ésta es el nombre de un programa ejecutable, lo busca y lo ejecuta. El shell suspende su ejecución hasta que el programa termina, tras lo cual intenta leer la siguiente línea de órdenes.

Las opciones modifican el comportamiento normal de la orden y se suelen indicar justo después del nombre de la orden y con el prefijo -. Si existen varias opciones se pueden agrupar. Por ejemplo, las orden ls -a -l -s es equivalente a ls -als. Se pueden escribir varias órdenes en una misma línea escribiendo un punto y coma entre ellas.

Los parámetros aportan información adicional que será usada por la orden. Los más habituales son nombres de ficheros y nombres de directorios, pero no tiene por qué ser siempre así.

La mayoría de las órdenes aceptan múltiples opciones y argumentos. Por ejemplo, la orden ls a.c b.pas a.out mostrará los tres ficheros que han pasado como parámetros (si existen). Esto ha de ser tenido en cuenta en algunas ocasiones, ya que de lo contrario pueden aparecer comportamientos inesperados.

Por ejemplo, en la orden head -20 hola.c, la opción -20 indica a la orden head que imprima las primeras 20 líneas de hola.c, en lugar del número por defecto que es 10. Sin embargo, si se omite el guión ( head 20 hola.c) la orden es válida e intenta imprimir las diez primeras líneas de un fichero llamado 20 y las 10 primeras líneas del fichero llamado fichero hola.c. Si bien en este caso la situación no es grave, en otros casos puede dar lugar a sucesos más graves. Supongamos que queremos borrar todos los ficheros cuya extensión es .c mediante la orden rm *.c. Si nos equivocamos y escribimos por error rm * .c (nótese el espacio en blanco entre el * y el punto), la orden rm borrará todos los ficheros y después dará un mensaje de error indicando que el fichero cuyo nombre es .c no existe. UNIX es un Sistema multitarea, por lo que un usuario puede ejecutar más de un programa a la vez. Si al final de un orden se escribe el símbolo &, se le indica al shell que la orden se ejecute en segundo plano (background). Una vez introducida la línea de órdenes, el shell muestra el prompt para recibir una nueva orden. Por ejemplo, ls -al > listado & almacenará en el fichero listado el contenido del directorio actual, pero lo hará en segundo plano, por lo que podremos lanzar nuevas órdenes mientras ésta se ejecuta. El shell, como la mayoría de las órdenes de UNIX, emplean tres ficheros denominados “estándar”.

Cuando un programa inicia su ejecución tiene acceso de forma automática a tres ficheros llamados entrada estándar, salida estándar y error estándar (salida de errores). En UNIX los dispositivos se tratan como ficheros, por lo que estos tres ficheros, si no se indica lo contrario, son dispositivos. Concretamente, la entrada estándar es el teclado, mientras que la salida y error estándar es el monitor. Por ejemplo, la orden sort, sin parámetros, lee líneas del terminal hasta que el usuario pulsa CTRL-D para indicar fin de fichero, las ordena alfabéticamente y escribe el resultado por pantalla.UNIX proporciona un mecanismo sencillo para cambiar la entrada y salida estándar.

Este mecanismo se denomina redirección de E/S. También es posible encadenar varias órdenes de forma que la salida estándar de una orden se dirija hacia la entrada estándar de la siguiente. Esta característica se denomina interconexión por tubería (pipeline).

2.6.2.1. El lenguaje del shell

Es posible incluir una lista de órdenes del shell en un fichero y entonces ejecutar un nuevo shell utilizando este fichero como entrada estándar. Este segundo shell leerá las líneas del fichero en orden y las ejecutará de una en una. Los ficheros que contienen órdenes del shell se llaman shell scripts. Los shell scripts pueden asignar valores a variables shell para poder leerlas posteriormente. También pueden tener parámetros y tienen sentencias if, for, while y case. En realidad, un shell script es un programa escrito en el lenguaje del shell.

2.6.3. Procesos

UNIX es un Sistema Operativo multitarea y multiusuario, lo que implica que puede atender más de un trabajo a la vez, para cualquier usuario. Cada uno de estos trabajos se denomina proceso. Un proceso se puede definir como un programa en ejecución. Los procesos son las únicas entidades activas en UNIX. Ejecutan un único programa y tienen un único flujo o hebra (thread) de control (otros Sistemas Operativos tienen un modelo de proceso según el cual pueden existir varios flujos de control por proceso).

Los procesos se pueden ejecutar en primer plano (foreground), bajo el control de usuario, o en segundo plano (background). Los procesos interactivos se han de ejecutar forzosamente en primer plano, ya que los que se ejecutan en background no tienen como entrada estándar el teclado. Cuando se ejecuta un proceso en background el sistema devuelve un número. Este número es el identificador de proceso o PID (process-ID) que UNIX asigna al proceso. No existen PIDs iguales.

Cuando un usuario inicia una sesión mediante el programa login, el kernel crea un proceso shell para que uso. Este proceso estará activo hasta que el usuario cierre su sesión. Desde el shell el usuario comenzará la ejecución de un número indeterminado de órdenes, que se traducen en procesos. Los procesos que lanza el usuario suelen tener un tiempo de vida relativamente corto, que se corresponde con la duración de la orden. Otros procesos, sin embargo, están siempre en ejecución. Por ejemplo, existen unos procesos llamados daemons que son ejecutados de forma automática cuando el Sistema Operativo inicia su ejecución.

Un proceso sólo puede iniciar su ejecución (nacer) si es creado por otro proceso. El proceso más antiguo se denomina padre y el creado, hijo. Todo proceso hijo conoce el PID de su proceso padre, denominado PPID (parent-process-ID). Un proceso padre puede engendrar varios hijos, pero un hijo únicamente puede tener un padre. De esta forma se crea una estructura de procesos en árbol. Cuando un proceso padre acaba su ejecución (muere), generalmente mueren con él todos sus hijos. Sin embargo, esto no tiene por qué ser así. Para evitar que existan procesos que no tengan padre (procesos huérfanos), cuando un proceso padre muere, el PPID de sus procesos hijos toma el valor 1, que es el PID del un proceso especial llamado init. De esta forma, cada proceso tiene siempre un padre.

Para interconectar los procesos existen mecanismos como los pipes o tuberías (también named pipes), que hacen que un proceso lea, y otro escriba; y los sockets, que permiten comunicaciones entre procesos aunque sean en maquinas distintas.

También existen otros mecanismos que avisan de posibles errores en los procesos (como divisiones por cero), llamados señales.

2.6.4. El sistema de ficheros

Un fichero UNIX es una secuencia de 0 o más bytes. El Sistema no distingue entre ficheros ASCII, binarios, o cualquier otro tipo. La interpretación del contenido de los ficheros se deja a los programas que los utilizan.

La longitud de los nombres de los ficheros estaba limitada originariamente a 14 caracteres arbitrarios, pero BSD UNIX la incrementó hasta 255. Las mayúsculas y las minúsculas son significativas, lo que significa que RESUMEN, resumen, y ResumeN serían nombres diferentes.

Normalmente, muchos programas asumen que los nombres de los ficheros consistan en un nombre seguido por una extensión, separados por un punto. De esta forma, hola.c es normalmente un programa en C, hola.p un programa en Pascal, etc. Sin embargo, estas convenciones no son impuestas por el Sistema Operativo.

UNIX distingue tres tipos de ficheros:

Ficheros ordinarios o regulares: Son secuencias de bytes agrupadas bajo un nombre, como se vio anteriormente.

Directorios: Son ficheros que contienen listas de otros ficheros y directorios, lo que permite que el sistema de ficheros sea jerárquico. A un directorio contenido dentro de otro directorio se le denomina subdirectorio y el directorio que lo contiene se llama directorio padre.

Ficheros especiales o de dispositivo: UNIX trata los dispositivos como si fuesen ficheros. Esta característica es una peculiaridad que distingue a UNIX de otros Sistemas Operativos. De esta forma, cuando un programa quiere, por ejemplo, mostrar información por pantalla, lo que tiene que hacer es realizar una operación de escritura en el fichero que representa el dispositivo de pantalla.

El directorio que es la cima de la estructura de directorios se denomina directorio raíz (root) y se representa con el carácter barra inclinada (/). A partir de él se pueden encontrar todos los ficheros y directorios del sistema de ficheros.

Para localizar un fichero en el árbol de directorios es necesario incluir el directorio en el que se encuentra como parte de su nombre. Si existen varios subdirectorios se utiliza el carácter / como separador.

Esta secuencia de directorios se denomina camino (path). El nombre de camino completo, partiendo del directorio raíz, es una especificación exacta de dónde está un fichero en el sistema de ficheros. El directorio en el que nos encontramos en un momento dado se llama directorio de trabajo o directorio actual, que en UNIX se especifica mediante el carácter punto (.). Los dos puntos (..) hacen referencia al directorio padre del directorio actual.

Existen dos formas de referirse a un fichero dentro el sistema de directorios. Si se emplea el nombre de camino completo se habla de direccionamiento absoluto, mientras que si el nombre de camino parte del directorio actual se habla de direccionamiento relativo.

Con frecuencia aparecen situaciones en las que un usuario necesita usar continuamente un fichero que se encuentra en un directorio diferente al de su directorio de trabajo, por lo que tendrá que hacer uso de direccionamiento absoluto o relativo. Para evitar que la necesidad de usar continuamente nombres de camino largos, UNIX permite que un usuario cree una entrada en su directorio de trabajo que apunte al fichero requerido. Esta entrada se denomina enlace. De esta forma el árbol de directorios se transforma en un grafo.

2.7. Ordenes de UNIX

A continuación se enumeran algunas de las órdenes más empleadas de UNIX. Los formatos de las órdenes se corresponden con la versión de UNIX SunOS.

2.7.1. Ordenes para el manejo de directorios

pwd

Muestra por pantalla el nombre de camino completo del directorio actual.

cd [directorio]

Cambia el directorio de trabajo. Si no especifica ningún parámetro, establece como directorio de trabajo el directorio de conexión (directorio home) del usuario.

ls [-aAcCdfFgilLqrRstu1] [fichero(s)]

Muestra el contenido de un directorio. Algunas de las opciones más comunes son:

F: Si el fichero es ejecutable o un directorio muestra un asterisco(") o una barra (/) detrás del nombre, respectivamente.

R: Listado recursivo. Lista ficheros y subdirectorios.

A: Lista todas las entradas. Normalmente, los ficheros que empiezan por punto (.) no se muestran.

L: Listado en formato largo. Muestra el modo, número de enlaces, propietario, tamaño en bytes y tiempo de última modificación de cada fichero.

mkdir [-p] directorio

Crea un directorio. La opción -p permite que los directorios padres que falten sean creados. Por ejemplo:

mkdir -p source/code/practicas creará los subdirectorios source y code, si no existen, y tras ellos creará el subdirectorio practicas.

rmdir directorio

Borra un directorio, siempre y cuando esté vacío.

2.7.2. Ordenes para el manejo de ficheros

cat [-benstuv] [fichero(s)]

Lee cada fichero especificado como parámetro y muestra sus contenidos por pantalla. Si no se introduce ningún fichero como parámetro, lee de la entrada estándar.

cp [-ip] fichero1 fichero2

cp -rR [-ip] directorio1 directorio2

cp [-iprR] fichero(s) directorio

Copia el contenido de fichero1 en fichero2. El segundo modo permite copiar recursivamente.

directorio1, junto con sus ficheros y subdirectorios, a directorio2. Si éste último no existe, se crea. Si existe, se realiza una copia de directorio1 dentro de directorio2 (será un subdirectorio).

Con el tercer modo, cada fichero se copia en el directorio indicado. Las opciones - r y - R indican comportamiento recursivo.

rm [-fir] fichero(s)

Borra ficheros y directorios. La opción -r indica comportamiento recursivo y se emplea para borrar directorios.

mv [-fi] fichero1 fichero2

mv [-fi] directorio1 directorio2

mv [-fi] fichero(s) directorio

Mueve ficheros y directorios dentro del sistema de ficheros. Equivale a renombrar un fichero o directorio.

ln [-fs] fichero [enlace]

ln [-fs] camino directorio

Crea una nombre adicional, llamado enlace, a un fichero. Un fichero puede tener varios enlaces.

find lista_de_directorios expresion_de_busqueda

Busca ficheros recursivamente a partir de los directorios señalados en lista_de_caminos, buscando aquellos ficheros que safisfacen una expresión_de_búsqueda. No se siguen los enlaces simbólicos hacia otros ficheros o directorios.

La expresión de búsqueda consta de una o más expresiones primarias, cada una de las cuales describe una propiedad de un fichero, aunque algunas indican una acción a tomar. Las expresiones primarias se pueden combinar mediante los operadores lógicos ! (NOT), -a (AND, que se asume por defecto) y -o (OR).

Algunas expresiones primarias son:

Expresión Acción

-name fichero Verdadero si fichero coincide con el nombre del fichero actual. Pueden usarse metacaracteres, pero en este caso fichero debe de ir entre comillas.

-user nombre Verdadero si el fichero pertenece al usuario nombre.

-size n Verdadero si el fichero tiene una longitud de mayor de n bloques (512 bytes por

bloque) si n es positivo, y menor que n bloques si n es negativo.

-mtime n Verdadero si el fichero ha sido modificado en n dias.

-atime n Verdadero si el fichero ha sido accedido en n dias.

-print Siempre verdadero. Imprime el camino completo del fichero.

-exec orden Ejecuta la orden sobre el fichero actual. Al final de orden es necesario introducir los caracteres de escape y punto y coma (\;). Si la orden es sequida de {}, el nombre del fichero actual es pasado como argumento a orden.

-newer fichero Verdadero si el fichero actual ha sido modificado más recientemente que fichero.

Ejemplos:

qqBuscar todos los ficheros cuyo nombre termine en .c a partir del directorio actual:

find . -name “*.c” -print

qqBuscar todos los ficheros del sistema cuyo tamaño sea mayor de 100 bloques:

find / -size +100 -print

qqBorrar todos los ficheros cuyo nombre es core a partir del directorio home:

find ~ -name core -exec rm {} \

qqImprimir, a partir del directorio actual, todos los ficheros cuyo nombre termine en .c% o .bak y no hayan sido modificados en 20 días:

find . \(-name “*.c%” -o -name “*bak” \) -mtime +20 -print

file [-f ffich] [-cL] [-m mfile] fichero ...

Determina el tipo de un fichero examinando su contenido.

du [-s] [-a] fichero ...

Muestra el número de bloques de disco usados por un conjunto de ficheros y directorios

df [-a] [-i] [-t type] [filesystem ...] [fichero ...]

Muestra el espacio libre en el sistema de ficheros

2.7.3. Ordenes para el control de procesos

ps [-acCegklnrStuvwxU]

Muestra el estado de los procesos del sistema. Sin argumentos, muestra información sobre los procesos asociados a la sesión del usuario.

kill [-señal] pid ...

Envía una señal a un proceso. Por defecto, se envía la señal de terminación del proceso (SIGTERM). Esta señal puede ser ignorada por el proceso, por lo que para eliminar de forma segura un proceso es necesario enviarle la señal de terminación incondicional (señal 9).

nice [-numero] orden [argumentos]

Permite modificar la prioridad con la que se ejecutará un proceso. La prioridad del proceso se aumentará en la cantidad señalada por numero. A mayor valor de numero, menor prioridad. Por defecto, numero toma el valor de 10. Es posible aumentar la prioridad de un proceso si numero es un valor negativo, pero en esta posibilidad únicamente puede ser usada por el superusuario.

2.7.4. Ordenes para seguridad y protección

chmod [-fR] modo fichero ...

Cambia los permisos (modo) de uno o varios ficheros o directorios. Unicamente puede ser usado por el propietario del fichero (o el superusuario). El modo del fichero se puede especificar de forma absoluta o de forma simbólica. El modo absoluto es un número octal que indica los permisos del fichero (ej.: chmod 444 datos). El modo simbólico es una cadena que tiene la forma [quien] operador permiso [operador permiso] donde quien es una combinación de las letras u (usuario), g (grupo) y o (otros) ó a (que equivale a ugo), operador es + (añade un permiso), - (elimina un permiso) ó = (establece un permiso); y permiso es una combinación de r, w o x.

Ejemplos:

qqRetirar el permiso de escritura, para el propietario, del fichero datos:

chmod u-w datos

qqEstablecer el permiso de lectura al fichero datos:

chmod ugo=r datos

qqRetirar el permiso de lectura de datos a todos menos al propietario:

chmod go-r datos

qqAsignar permisos de lectura a todos los usuarios y de escritura para el propietario:

chmod a=r, u+w datos

chown propietario fichero ...

Cambia el propietario de un fichero. Sólo puede ser empleada por el propietario del fichero o por el superusuario. En la versión de UNIX SunOS, únicamente puede ser empleada por el superusuario. Permite cambiar la palabra de paso del usuario.

2.7.5. Ordenes varias

diff

Muestra las diferencias, línea por línea, entre dos ficheros.

grep

Busca las líneas de un fichero que contienen una determinada cadena o expresión regular.

head

Muestra las primeras líneas de un fichero.

tail

Muestra las últimas líneas de un fichero.

wc

Cuenta las líneas, palabras y caracteres de un fichero.

who

Muestra los usuarios que se encuentran conectados al sistema.

whoami

Muestra el nombre del usuario de la sesión activa.

man

Muestra las páginas del manual de referencia. Por ejemplo, man ls muestra las páginas del manual referentes a la orden ls.

17