|
A principios de los años setenta, un equipo de científicos de los Laboratorios Bell, desarrolló un nuevo sistema operativo denominándolo UNIX Timesharing System (Sistema UNIX de tiempo compartido). Los Laboratorios Bell permitieron el reparto de copias de este sistema entre los universitarios para su empleo en la enseñanza y la investigación.
|
UNIX es un sistema operativo de tiempo compartido (la computadora puede ser usada por varios usuarios al mismo tiempo).
Cada usuario de este sistema dispone de una pantalla y de un teclado (terminal), mientras que la información se procesa y almacena en la Unidad Central, que es de uso común a todos. Varios terminales conectados a una Unidad Central constituyen una red. De esta manera nos podremos intercomunicar con el resto de los usuarios.
La persona responsable del control de la red es el Administrador del Sistema. Para poder tener acceso a la red, el Administrador, debe proporcionar a cada usuario un identificador (login) de entrada y una palabra de paso (password) que serán el indicativo de su número de cuenta.
UNIX distingue las letras minúsculas de las mayúsculas; en DOS eran equivalentes. Cuando iniciamos una sesión en UNIX se nos pedirá que introduzcamos nuestro identificador y nuestra palabra de paso. Si los datos son correctos, aparecerá en pantalla un símbolo ($) llamado "prompt" que nos indica que hemos conseguido pasar la identificación y nos encontramos en nuestra cuenta de UNIX.
|
Los programas del sistema UNIX están funcionalmente clasificados de la siguiente forma:
|
La comunicación entre el sistema operativo UNIX y el usuario se realiza fundamentalmente a través de un terminal o consola (entrada-salida)
Caracteres de control: Además de la tecla RETURN, tenemos la tecla CONTROL
<CTRL> d | Indica al proceso que se ha finalizado la entrada de caracteres. No hay más caracteres en la entrada |
<CTRL> h | Efecto de backspace. Se utiliza para la corrección de errores de tecleo |
<CTRL> i | Tabulador. Avanza el cursor de la pantalla hasta el próximo tabulador definido. En UNIX, la distancia entre tabuladores es de 8 espacios |
<DELETE>, <RUBOUT>, <CTRL> c |
En muchos sistemas UNIX este carácter produce la finalización de un proceso sin esperar a su término |
<BREAK> | Esta tecla, dependiendo de cómo esté definido el terminal, produce efectos similares a la DELETE o RUBOUT |
|
$ date | solicita la fecha y la hora |
$ who | quién usa el sistema |
introduciendo RETURN, presenta el siguiente mensaje | |
$ d | se borra el mensaje |
$ mail director Mañana iré a buscar los periódicos del presidente. |
envío del correo al director |
CTRL d | fin de correo al director |
$ CTRL d | salida del sistema |
|
El sistema operativo UNIX provee una forma de correo - comunicación entre usuarios, soportada por el comando mail.
Se obtendrá el correo ejecutando el comando mail.
Después de cada mensaje de correo mostrado por el comando,
éste espera la acción que se va a desarrollar con el mismo.
d | borra el correo visualizado |
INTRO | visualiza el siguiente mensaje pendiente |
Otras posibilidades del comando mail son:
? p | vuelve a visualizar el mensaje anterior |
? s <nombre del fichero> | almacena el mensaje en un fichero cuyo nombre le es dado |
? q | sale del comando mail y retorna a la Shell de UNIX |
En caso de que queramos enviar correo electrónico a otros usuarios, deberemos teclear el comando mail seguido del nombre del usuario al que se desea enviar. El cursor se posicionará al principio de la línea siguiente y ésta estará lista para la escritura del mensaje. El final de una línea se marca con INTRO y el mensaje continúa en la siguiente. Para finalizar el texto del mensaje, pulsaremos INTRO y CTRL-d, retornando a la Shell.
|
A menudo el Manual original de UNIX está almacenado en el propio sistema y puede ser leído bajo el comando man seguido por el nombre del comando cuya sintaxis y descripción se desea.
$ man who
... visualización de la explicación detallada del comando
... who, sirviendo de ayuda al usuario.
El sistema, asimismo, posee un comando que facilita el aprendizaje del sistema operativo, cuyo nombre es learn. Este comando incluye el estudio del sistema de ficheros, comandos básicos, editor ed del sistema, preparación de cartas y documentos e, incluso, lenguaje C.
|
El editor ed es el más sencillo de los editores incorporados por el sistema operativo UNIX. Se trata de un editor de líneas.
Para editar un fichero que se llama nombre
El editor ed se utiliza en UNIX para mantener y modificar ficheros especiales y para modificar ficheros en modo no interactivo.
Para grabar un fichero sencillo, como
main ()
{
printf ("Hola,
mundo\n");
}
procederíamos del siguiente modo:
$
La línea que contiene una "a" corresponde al comando "append" (añadir) del editor, indicando que se va a añadir texto al contenido del fichero "nombre.c". a continuación se introduce el texto hasta la aparición de una línea con un punto "." que indica al editor que finaliza la instrucción de texto y se pasa del "modo texto" al "modo comando", para seguir introduciendo comandos del editor.
Finalmente se utilizan los comandos "w" (write) para grabar en disco el contenido del fichero, y "q" (quit) para finalizar la sesión de edición.
vi es tan sólo un programa editor y no resulta tan completo como pueda ser un tratamiento de textos como Wordstar.
La edición del fichero nombre.c mediante el editor vi sería
|
|
La mejor manera de conocer y profundizar en el sistema de ficheros UNIX es crear uno y efectuar sobre él una serie de procesos.
Para visualizar el contenido del fichero, utilizaremos el comando cat
Mediante la opción -c se interpretan los bytes como si fuesen caracteres.
La opción -x nos mostrará los bytes en números hexadecimales. Al final de cada una de las líneas del fichero "texto", aparece un carácter "\n" que representa el "final de línea" (newline) que el usuario ha definido mediante la tecla <RETURN>
|
La mayoría de los comandos que vamos a explicar incluyen
la posibilidad de especificar unos nombres de ficheros que se le pasan como
argumentos al comando. Estos nombres de ficheros pueden ir explícitos, o sea,
con su nombre completo, o definidos con una serie de caracteres especiales, que
van a obligar a efectuar una búsqueda de ficheros, basándose en unas reglas que
están especificadas en el núcleo del sistema.
? | En cualquier posición indica que es válido cualquier carácter, pero
sólo uno ej. nom.? válidos "nom.<carácter>: "nom.a", "nom.p" no son válidos "nombre", "nom.12" |
* | Indica cualquier cadena de caracteres a partir de esta posición,
incluso la cadena nula ej. pro.* válidos "pro.<cadena>": "pro.c", "pro.programa" no son válidos: "pr.12" |
[abc] | En la posición dada podrán existir los caracteres "a", "b" o "c" y, en general, cualquiera de los caracteres situados dentro de los corchetes. ej. fic.[123] válidos únicamente "fic.1", "fic.2", "fic.3" |
[^123] | Igual que la anterior, pero son válidos todos los caracteres excepto
los contenidos dentro de los corchetes. ej. fic[^123] válidos todos los "fic.<carácter>, excepto los "fic.1", "fic.2", "fic.3" |
[a-b] | En esta posición es válido cualquier carácter que esté alfabéticamente
entre el carácter "a" y el carácter "b" ej. uno[a-d] válidos "unoa", "unob", "unoc" y "unod" |
$ | Fuerza a que los caracteres de la máscara estén al final del nombre del fichero. |
Vamos a crear dos ficheros (siempre dentro del usuario de trabajo "prueba") mediante el comando ed:
El comando ls nos muestra la lista de los nombres de los ficheros que mantienen el usuario o el sistema, no el contenido de los mismos.
La opción -t produce una ordenación de los nombres de ficheros por la hora de la última modificación de los mismos. Los de cambio más reciente son colocados al principio.
La opción -l produce una salida con información mucho más completa sobre los ficheros.
La cadena "-rw-r--r--" nos da la información de los permisos de acceso a los ficheros. En este caso, el propietario del fichero ("prueba") tiene permiso de lectura (r) y escritura (w), pero el resto de usuarios solamente tienen permiso de lectura.
La siguiente información que observamos en la salida "1" es el número de enlaces (links) del fichero.
La cadena "prueba" nos indica el nombre de usuario al que pertenece el fichero, es decir, el usuario que lo creó.
La siguiente cadena de salida ("27" y "24") corresponde al número de caracteres que componen cada fichero (bytes) y que vemos que coincide con el obtenido con el comando ed en la creación de ambos ficheros.
A continuación la fecha y la hora de la última modificación del fichero y, por último, el nombre del mismo.
Las opciones del comando ls (así como las de muchos otros) pueden ir agrupadas, de tal forma que el comando ls -lt produce una salida con información completa de los ficheros y éstos ordenados por fecha-hora de la última modificación.
La opción -u nos da información del momento del último uso del fichero (no cambio); -r produce la inversión del orden de salida de los ficheros procesados por el comando.
Después de las opciones del comando ls podemos incluir uno o varios nombres de fichero, de tal forma que la información visualizada por el comando pertenecerá a la lista de ficheros dada:
| |
-l | lista en formato completo (largo) de información |
-t | lista por orden de fecha-hora de última modificación (primero lo más recientes) |
-a | lista todos los ficheros incluyendo directorios |
-s | visualiza el tamaño de los ficheros en bloques. 1 bloque = 512 caracteres (bytes) |
-d | informa sobre la situación de directorios |
-r | lista en orden inverso al normal |
-u | lista por orden de fecha-hora de última utilización de los ficheros. Primero el más reciente. |
El comando ls no suele responder con mensajes de error, incluso en el caso de una digitación incorrecta de las opciones. Cuando no se le pasan argumentos de nombres de ficheros lista todos los ficheros del directorio actual. En caso de teclear la opción -l del comando, ésta imprime, entre otras informaciones, una lista de 10 caracteres, de los cuales el primero indica el tipo de fichero que se ha listado y los restantes 9 los permisos de acceso al mismo.
Los tipos posibles de ficheros, indicados por el primer
carácter de la cadena, son los siguientes:
d | la entrada es un directorio |
b | la entrada es un fichero especial de tipo bloque |
c | la entrada es un fichero especial de tipo carácter |
- | la entrada es un fichero de tipo ordinario |
|
Existen numerosas formas para obtener o visualizar el contenido de un fichero. Una posibilidad es usar el editor del sistema ed
El comando cat es el más simple de todos los posibles para visualizar información de ficheros. Este comando lista el contenido de todos los ficheros que se le hayan pasado como argumentos.
El comando cat sólo sirve para la visualización del contenido de ficheros que estén compuestos por caracteres ASCII o bien por caracteres que sean imprimibles.
El comando cat puede visualizar un mensaje de error, indicando que no encuentra el fichero solicitado.
En todos los sistema UNIX existe un comando que permite acomodar la salida a las características del terminal, de tal forma que nos permita la visualización del contenido por páginas. El nombre del comando depende del sistema y puede ser page, pg o more.
Existe otro comando, de nombre pr, que lista el contenido de uno o varios ficheros, acomodándose a las características de las impresoras del sistema. Es decir, lista páginas de 66 líneas con la fecha y la hora de la última modificación del fichero, numera las páginas y coloca el nombre del fichero en el principio de cada una. Entre cada uno de los ficheros a listar efectúa un salto de página, de tal forma que cada fichero comienza al principio de una página.
La opción -m asigna la salida en columnas paralelas.
El comando pr no introduce ningún tipo de mensaje de error en caso de
no encontrar los ficheros a imprimir o que se dirigen opciones incorrectas.
| |
Opciones: | |
-<n> | la salida se imprime en formato de "n" columnas |
+<n> | imprime el fichero a partir de la línea "n" especificada, inclusive |
-h <cadena> | indica cambio de la cabecera. La <cadena> es ahora la cabecera de cada página |
-w <n> | la anchura de cada página del listado será de "n" caracteres, en lugar de 72, tomado por defecto |
-l <n> | cambia el número de líneas por página al valor "n", en vez de 66 líneas tomadas por defecto |
-t | el listado evita (salta) las 5 líneas de cabecera y de fin de página |
-s <carácter> | en vez de separar las columnas por el carácter de tabulación, éstas son separadas por el carácter especificado en <carácter> |
-m | imprime todos los ficheros especificados en columnas paralelas y simultáneamente |
|
* Para cambiar el nombre de un determinado fichero, se
utiliza el comando mv y su sintaxis es
|
|
|
|
* El comando empleado para borrar ficheros es rm. Su
sintaxis es:
|
|
| |
-f | serán borrados también aquellos ficheros protegidos contra escritura |
-r | borra recursivamente todos los ficheros de un directorio e incluso el propio directorio |
-y | solicita confirmación para el borrado de cada fichero digitado. |
|
La longitud máxima del nombre de un fichero es de 14 caracteres. Si sobrepasamos esa longitud el sistema trunca el nombre a los catorce primeros caracteres.
Se aconseja además que sólo sean usados caracteres alfabéticos, numéricos y los símbolos "." (punto) y "_" (subrayado) en la composición de los nombres de ficheros.
|
Para la discusión de los mismos, creemos el siguiente fichero:
En caso de que al comando wc se le pase como argumentos una lista de ficheros (más de uno), nos listará la cuenta para cada uno de los ficheros de la lista, así como el número total de caracteres, palabras y líneas en la totalidad de los mismos:
| |
-l | cuenta únicamente las líneas del fichero |
-w | cuenta únicamente las palabras del fichero |
-c | cuenta únicamente los caracteres del fichero |
* El comando grep se encarga de buscar dentro de los ficheros que se le pasan como argumentos las líneas que contengan una cadena determinada que se le da al comando como parámetro.
| |
-v | muestra todas las líneas excepto las que contienen la <cadena> dada |
-c | muestra todas las líneas que contienen la <cadena> digitada |
-l | muestra los nombres de los ficheros que contienen la <cadena> digitada |
-n | aparte de mostrar las líneas visualiza el número de línea |
-h | no visualiza el nombre de los ficheros |
-y | da igual tratamiento a las mayúsculas y a las minúsculas |
-e | permite comenzar la <cadena> por el carácter "-" |
* El comando sort ejecuta una clasificación de las líneas del fichero de entrada por orden semialfabético. Es decir, para clasificar dos líneas, compara el primer carácter de cada una, si son iguales al segundo, y así hasta que exista una diferencia que permita establecer la clasificación entre ambas.
| |
-r | invierte el orden normal de clasificación |
-n | clasifica en orden numérico |
-nr | clasifica en orden numérico inverso |
-f | considera igual las mayúsculas y minúsculas |
+n | comienza a clasificar en el campo n+1 |
* El comando tail visualiza las
últimas diez líneas de un fichero.
| |
+ | indica comienzo de listado a partir de la <n> línea del fichero, inclusive |
- | indica el comienzo de listado a partir de <n> líneas del fin del fichero |
Opciones: | |
l | el número <n> se refiere a líneas. Esta opción es por defecto |
b | el número <n> se refiere a caracteres |
b | el número <n> se refiere a bloques de ficheros (grupos de 512 caracteres) |
* El comando cmp encuentra la primera línea en la que difieren dos ficheros y nos indica la posición primera de diferencia entre ambos:
* El comando diff nos da información de las líneas que son distintas, las que faltan y las que sobran, en la comparación de ambos ficheros.
| |
-f | la salida de las diferencias entre los dos ficheros se efectúa en orden inverso |
-h | localiza pequeñas diferencias, pero actúa de forma mucho más rápida y
es muy conveniente en grandes ficheros. No es compatible con ed |
-b | ignora los tabuladores y blancos de final de líneas, y trata como un solo blanco los repetitivos |
-e | admite las órdenes de añadir, borrar y modificar líneas, con los mismos comandos que el editor ed |
El comando cmp funciona con multitud de tipos de ficheros, mientras que el diff solamente funciona con ficheros del tipo texto. El comando diff se usará cuando se deseen conocer las diferencias exactas entre dos ficheros. Evidentemente, es más rápido el comando cmp, pues sólo busca la primera diferencia.
|
Cada usuario del sistema (definido entre otras cosas por su nombre) tiene un directorio particular, denominado directorio de usuario o directorio corriente. El usuario puede estar trabajando en otro directorio, pero siempre poseerá el suyo propio.
El comando básico de localización del directorio actual en el que el usuario está trabajando se denomina pwd.
Un fichero queda representado por el camino que éste recorre dentro del árbol del sistema, desde la raíz del mismo (root). Este camino se denomina en UNIX pathname y su significado es el recorrido que se debe hacer en el árbol del sistema para localizar el fichero, partiendo desde la base (root) del árbol. Es norma universal de UNIX el poder representar un fichero por su camino o "pathname"
|
Cada uno de los ficheros residentes en el sistema posee un conjunto de permisos de acceso para los usuarios del mismo. El usuario puede cambiar los permisos de acceso a "sus" ficheros, de tal forma que proteja la información de alguna manera.
Existe un súper usuario del sistema, que puede volver a cambiarnos nuestros permisos, de tal forma que desproteja y tenga acceso a nuestra información.
El sistema reconoce a cada usuario por un cierto número
que se le asigna a la hora de su creación. El nombre del usuario no es más que
un identificador para el sistema y una especie de clave de acceso al mismo.
Debido a esto, varios nombres de usuarios distintos pueden tener el mismo número
identificador. Esta situación no es nada segura dentro de un sistema y el
administrador del mismo se encargará de controlarla. Cada usuario, además de su
número de identificación, posee un número identificador del grupo al que
pertenece. En muchos de los sistemas UNIX el grupo de todos los usuarios del
sistema recibe el nombre de other. Toda la información referente a los
parámetros de los grupos y usuarios del sistema se encuentra en un fichero
localizado en el pathname /etc/passwd.
Existen tres tipos de permisos de acceso a un fichero del sistema: | |
read r | lectura |
write w | escritura |
execute x | ejecución |
La opción -l del comando ls nos muestra los permisos de acceso que posee el fichero que se visualiza:
La cadena -rw-r--r-- nos da información acerca de los permisos de los ficheros.
El primer carácter de la cadena (-) indica el tipo de fichero de que se trata; en este caso, un fichero ordinario.
En caso de ser un subdirectorio aparecería el carácter "d".
Los siguientes tres caracteres de la cadena indican los accesos autorizados del fichero para el propio usuario del mismo.
Las tres siguientes son para el grupo de usuarios al que
pertenece el propio usuario creador del fichero y las tres últimas posiciones
corresponden a los accesos para el resto de usuarios del sistema.
- | Indica que NO hay permiso para acceder al fichero |
r | Se permite acceso de lectura al fichero |
w | Se permite acceso de escritura al fichero |
x | se permite la ejecución del fichero. Contiene un proceso ejecutable por el sistema |
Cadena de permisos de acceso "tabcdefghi" (posiciones 1234567890) | |
t (posición 1) | tipo de fichero: - ordinario d directorio |
a (posición 2) | lectura para el usuario: - no permitida r permitida |
b (posición 3) | escritura para el usuario: - no permitida w permitida |
c (posición 4) | ejecución para el usuario: - no permitida x permitida |
d (posición 5) | lectura para el grupo de usuarios |
e (posición 6) | escritura para el grupo de usuarios |
f (posición 7) | ejecución para el grupo de usuarios |
g (posición 8) | lectura para el resto de usuarios |
h (posición 9) | escritura para el resto de usuarios |
i (posición 0) | ejecución para el resto de usuarios. |
Ejemplos:
-rw-r--r-- | Fichero ordinario. Permitida lectura y escritura al usuario del fichero. Permitida lectura al grupo y resto de usuarios No permitida ejecución a ningún usuario del sistema. |
-rwxr-xr-x | Fichero ordinario Permite lectura y ejecución a todos los usuarios, usuario propio, grupo y resto de usuarios. Permitida escritura sólo al usuario del fichero. |
-rwxrwxr-x | Fichero ordinario. Permitida lectura y ejecución a todos los usuarios del sistema. Permitida escritura al usuario y al grupo. No permitida escritura al resto de usuarios. |
* El comando cd posiciona al usuario en el directorio indicado:
cd cambia al directorio normal del usuario:
cd <recorrido> cambia al directorio especificado por <recorrido>, que debe ser un camino (pathname) completo
cd.. sube un nivel en la estructura (jerárquica) del árbol
cd. se mantiene en el directorio actual.
* El comando
mkdir crea los directorios dentro del directorio actual de trabajo del
usuario. Para crear un directorio, se debe poseer permiso de escritura en el
directorio donde se encuentre el usuario, es decir, en el directorio padre del
que se va a crear.
|
|
* El comando
rmdir permite el borrado de directorios. En caso de que un directorio
contenga algún fichero o directorio, el comando rmdir no permitirá su
borrado. La eliminación de un directorio, al igual que de un fichero, es
aceptada por el comando si el usuario posee permiso de escritura en el mismo.
|
|
|
Existe un comando UNIX que permite la búsqueda o
localización de un fichero dentro del árbol de directorios. Su nombre en
find. Las especificaciones que se pueden dar para la búsqueda del fichero
incluyen posibilidades desde el nombre del fichero propietario del mismo, nombre
del grupo de pertenencia, enlaces (links) e, incluso, fecha-día de última
modificación o acceso al mismo.
| |
busca a partir de los directorios especificados los ficheros
que cumplen las condiciones dadas. La lista de directorios debe estar separada por blancos o tabuladores, y efectúa la búsqueda a partir de esos directorios y su subdirectorios. Condiciones: | |
-name <ficheros> | busca los ficheros especificados |
-type [df] | d: fichero tipo directorio f: fichero totalmente lleno |
-links <n> | busca ficheros con <n> enlaces |
-user <usuario> | busca los ficheros correspondientes al <usuario> especificado |
-group <grupo> | busca los ficheros correspondientes al grupo especificado |
-size <n> | busca ficheros con tamaño de <n> bloques (512 bytes) |
-atime <n> | busca ficheros en los cuales hace <n> días que se ha efectuado un acceso |
-mtime <n> | busca ficheros en los que hace <n> días se ha efectuado una modificación |
imprime el camino de recorrido dentro del árbol de directorios del sistema |
|
|
|
|
|
|