Nociones de UNIX

La ventana presenta los principales comandos utilizados en UNIX, problemas y mensajes de error encontrados durante su utilización.

 

Consulte también:
Soporte al SPRING
Acerca las interfaces
Instalación del SPRING
Configuraciones del SPRING
Copias de respaldo - backups


 



Introducción y Comandos UNIX

Un computador esta conformado por dos partes, el "hardware" y el "software". El hardware representa el equipo físico: monitor, teclado, discos, procesador, memoria y otros dispositivos. El software representa el conjunto de programas que el hardware ejecuta con un fin determinado.

El software de un computador puede ser de dos tipos:


El sistema operativo es un programa fundamental, debido a que él controla todos los recursos del computador y da la base sobre la cual los programas de aplicación pueden ser ejecutados. El sistema operativo es una capa de software colocada arriba del hardware de manera de ocultar las complejidades inherentes a este mismo hardware, como se observa en la figura siguiente.

 

unix_01.gif - 5709 Bytes


Las principales tareas de un sistema operativo son:

Estas tareas son realizadas a través de un conjunto de instrucciones provistas por el sistema operativo. Estas instrucciones son llamadas "system calls" (llamadas al sistema) las cuales son responsables de la interfaz con el programa del usuario y forman lo que es conocido como el "kernel" del sistema operativo.

 

Seta_a3.gif - 268 BytesNociones de UNIX

 

 


El Interpretador de Comandos shell

Un sistema operativo como el UNIX es el responsable de la implementación de las llamadas al sistema. Los editores, compiladores, assemblers, linkers e interpretadores de comando no son parte del sistema operativo. El intérprete de comandos denominado shell, si bien no es parte del sistema operativo, utiliza con mucha frecuencia sus características y sirve como un buen ejemplo de como las llamadas del sistema pueden ser usadas. El shell es la interfaz principal entre un usuario en el terminal y el sistema operativo.

El shell es el primer programa a ser ejecutado cuando se hace el login (ingreso en el sistema).

Existen varios shells del UNIX, los más populares están en dos grupos: el Bourne Shell (o Korn) y el C Shell.

Para saber que tipo de shell se está usando, observe si el UNIX exhibe una señal de $ después de hecho el login, en este caso se estará usando el Bourne Shell; si el UNIX exhibe una señal de %, entonces se estará usando el C Shell. Tradicionalmente el System V usa el Bourne Shell (ejecutable de nombre "sh") y el BSD usa el C Shell (ejecutable de nombre "csh").

Los shells normalmente usan caracteres especiales para evitar la escritura de comandos largos.

ej:     !! significa repetir el último comando digitado (sólo funciona en el C Shell)
        ! c significa repetir el último comando iniciado por el carácter "c"


Descendientes del BSQ (Berkeley Software Distribution)

 

Versiones del sistema operativo UNIX

Existen varias versiones del UNIX. Predominan cuatro, de las cuales las principales son BSD y System V.

1- Berkeley Software Distribution (BSD)

Esta versión del UNIX fue desarrollada por la Universidad de Berkeley, siendo la primera que presentó la versión comercial 4.2 en 1982/1983 para el soporte de los protocolos de red Internet (TCP/IP). Fue lanzada también en 1986 la versión 4.3. El SunOS es derivado de estas versiones 4.x.

2- AT&T UNIX System V

Varias facilidades de comunicación entre procesos fueron dadas por el System V: mensaje queues, semáforos y memoria compartida. Las versiones del System V son las siguientes:

* Para SUN que utiliza Solaris 1.0 el UNIX es del tipo BSD y en Solaris 2.0 es SVR4

3- Microsoft Xenix, System V

Xenix es similar al AT&T System V Release 2.0. El Sistema Xenix fue llevado para varios ambientes de hardware, usualmente corriendo en CPUs INTEL 286 y 386 (computadores compatibles con IBM-PC).
La mayor distribuidora del Xenix es Santa Cruz Organization (SCO), asociada a Microsoft. Es un sistema obsoleto, sin embargo ocupa mucho menos espacio de disco y es más rápido.

4- OSF/1

Open Software Foundation produjo otro tipo de UNIX: OSF/1. Se basa en el BSD, pero con características del System V. Es suministrado principalmente por Digital Equipment Corporation.

 

5- Linux

Sistema operacional libre inicialmente desarrollado por Linus Torvalds. Actualmente tiene varias distribuciones del sistema, para diversas plataformas, desde mainframes hasta un reloj de pulso, pasando por varias arquitecturas: Intel , StrongARM , PowerPC , Alpha etc., con gran penetración también en dispositivos embarcados , como handheld , PVR, vídeo-juegos y centrales de entretenimiento etc.

 

 

Popularidad del UNIX

Una de las grandes razones del uso del UNIX es la capacidad de utilización en redes. Otros sistemas operativos necesitan de un software adicional. En el UNIX esta capacidad es parte del sistema operativo y es ideal para e-mail, www y conexión con la Internet.

UNIX fue basado en la filosofía "small is good" en el proyecto de un sistema. La idea de que cada programa ejecute bien una única tarea. Así el UNIX es un sistema operativo flexible y de fácil adaptación a las necesidades específicas.

El sistema operativo UNIX fue escrito en un lenguaje (C) independiente del código de máquina. Así el UNIX fue llevado a una gran variedad de plataformas, debido a su característica de sistema operativo abierto.

 

Ventajas del UNIX

 

Seta_a3.gif - 268 BytesNociones de UNIX

 

 


Sesión de Trabajo

Login

Todo usuario de UNIX tiene un nombre de usuario y una contraseña. El administrador del sistema le da un nombre de usuario y una contraseña.

UNIX siempre considera como letras diferentes las letras en mayúsculas y en minúsculas, para cualquier comando, nombre de archivo o nombre de usuario, por lo tanto, escriba su nombre en el "login" exactamente como fue creado.

Los nombres de usuarios del UNIX, casi siempre son escritos en minúsculas.

Si hay algún error en la escritura del nombre, es posible usar las teclas Backspace (Retroceso) o Delete (Borrar) para corregir el carácter equivocado, o utilizar la tecla @ o Crtl-U para deshacer todo lo escrito.


En caso que no se acuerde de la contraseña, solamente el administrador del sistema (root) podrá darle otra para que entre en el sistema. El nombre de la contraseña no tiene límite de caracteres, pero casi siempre sólo importan los ocho primeros.

 

 
ejemplo: cosmus login: curso1
         Password: _______

 

Contraseña (password)

Se puede ser cambiar la contraseña siempre que se haga el login usando el programa "passwd". El programa solicita que se coloque la antigua contraseña para comprobar que es la misma persona que hizo el login. Luego, se debe escribir 2 veces la misma contraseña para estar seguro que se la escribió correctamente.

 
ejemplo: cosmus - /home/usuario/mario>passwd
         Old passwd: xxxxxx
         New passwd: ________
         Retype new passwd: _______

 

Logout

Hacer un logout significa cerrar una sesión de trabajo. Utilice el comando "logout" o "exit".

 
ej:      cosmus - /home/usuario/mario>logout

 

Seta_a3.gif - 268 BytesNociones de UNIX

 

 


Conceptos sobre archivos

Archivos

El archivo es la unidad básica de un sistema operativo. Los archivos en UNIX pueden ser de los siguientes tipos:

 

Directorios

El directorio es un archivo que contiene otros archivos. Un directorio puede contener otros directorios.

 
ejemplo: /usr/games/chess
        - games contiene al archivo chess y es hijo de usr
        - el directorio usr contiene al subdirectorio games y es su padre

 

Sistema de archivos

Todo sistema operativo UNIX es organizado en una serie de sistema de archivos jerárquicos. El sistema de archivo root es el que está localizado en lo alto de la jerarquía del árbol de sistema de archivos. Normalmente se tienen los siguientes archivos y directorios.

 
/bin           /dev           /etc           /tmp           /usr
/boot          /export        /home          /mnt           /var

En donde:

Permisos de archivos

Todo lo que se hace en UNIX depende de los permisos dados a los archivos. El concepto de permisos de archivos determina quiénes son los usuarios que pueden manipular un determinado archivo o directorio. Los siguientes permisos están asociados con un archivo y directorio:

a) Permiso de lectura (r):

b) Permiso de escritura (w):

c) Permiso de ejecución (x) (solamente para archivos)

d) Permisos de "search" (directorio solamente)

Los permisos de archivos son presentados cuando se utiliza el comando "ls -l" y son presentados como muestra el ejemplo a continuación.

 
ej: drwxr-xr-x   2   mario   users   1024   Oct  14  18:33   archivo1

En donde:

drwxr-xr-x = permisos para usuario (dueño del archivo o directorio), grupo y mundo respectivamente.
2 = número de links del archivo.
mario = nombre del usuario (propietario) que creó el archivo.
users = nombre del grupo al cual pertenece el archivo.
1024 = tamaño del archivo en bytes.
Oct 14 18:33 = mes, día y hora de creación del archivo.
archivo1 = nombre del archivo.


Vea como cambiar los permisos de archivos más adelante.

 

Seta_a3.gif - 268 BytesNociones de UNIX

 

 


Manipulación de Archivos (principales comandos)

cd

Muchas veces para manipular un archivo es necesario estar en el directorio en donde él está localizado. El comando "cd" (change directory) permite desplazarse de un directorio hacia otro.

 
cd <directorio>
 
ejemplo:
  cd datos               = cambia al directorio "datos" a partir del actual
  cd ..                  = se mueve un directorio hacia arriba
  cd                     = retorna al directorio de login (home directory)
  cd /home/usuario/jose  = cambia al directorio absoluto (a partir de la raíz)

NOTA: El directorio home (directorio actual, cuando se inicia una sesión de trabajo) puede ser abreviado con el carácter (~) , y (..) Hace referencia siempre a un directorio superior del cual se está.

 
ejemplo:
  ~/file          = se refiere a un archivo en el directorio home.
  ~user          = se refiere al directorio home de otro usuario.
  ~user/file     = se refiere a un archivo localizado en el directorio home del usuario.

 

pwd

El comando "pwd" (print working directory) informa donde se está dentro de la jerarquía de los sistemas de archivos.

 

mkdir

El comando "mkdir" crea un directorio a partir del directorio actual.

 
mkdir <directorio>
 

 

rmdir

El comando "rmdir" borra directorios existentes. Un directorio debe estar vacío antes de borrarlo, o sea, no debe contener archivos ni otros directorios.

 
rmdir <directorio>
 
ejemplo:
rmdir datos      = borra el directorio datos vacío.
rmdir -r datos   = borra el directorio datos y su contenido en el caso que exista.
rmdir -i datos   = pide la confirmación antes de borrar.

 

ls

El comando "ls" lista cuales son los archivos y directorios que están en un determinado directorio.

 
ejemplo:
  ls             = muestra el contenido del directorio actual.
  ls datos       = muestra el contenido del directorio indicado.
  ls -a          = muestra los archivos que se inician con un punto (.), los 
                 cuales son archivos ocultos.
  ls -l          = muestra la información completa de los archivos del directorio actual.
  ls - F         = presenta qué tipo de archivos están en el directorio (directorios, ejecutables, archivos simples o links simbólicos).

NOTA: UNIX permite trabajar con más de un archivo a la vez, a través de los caracteres (*) y (?). (*) representa cualquier número de caracteres en el nombre del archivo. (?) Representa un único carácter en el nombre del archivo.

 

more

El comando "more" muestra el contenido de un archivo, una página por vez, basta con pulsar la tecla Space para continuar viendo el resto del contenido del archivo.

 
more <archivo>
 

 

cat

El comando "cat" muestra el contenido de un archivo, pero no del modo página a página. Sirve también para concatenar (agrupar) archivos.

 
cat <archivo>
 
ejemplo:
  cat arch1              = muestra el contenido del archivo arch1.
  cat arch1 arch2 arch3 > arch123 = concatena archivos arch1, arch2 y arch3 en el archivo arch123.
  cat arch1 >> arch2     = agrega el contenido de arch1 al final de arch2.

 

cp

El comando "cp" copia archivos de un lugar hacia otro en la misma máquina o entre máquinas diferentes en el caso que el sistema identifique otro disco en otra máquina.

 
cp <arch fuente> <arch destino>
 
ejemplo:
  cp arch1 arch2 = copia archivo arch1 hacia arch2, substituyendo el contenido 
                                del arch2 en el caso que este ya exista.
  cp -i arch1 arch2      = copia archivo arch1 hacia arch2, pero será pedida la confirmación para crear nuevamente el arch2 en el caso que este ya exista.
  cp arch1 datos = copia archivo arch1 hacia el directorio datos.
  cp -r datos archivos   = copia el directorio datos entero y sus subdirectorios hacia el directorio archivos.
  cp /usr/games/chess .  = copia archivo del camino indicado hacia el directorio actual.

 

rcp

El comando "rcp" permite la copia de archivos o directorios entre máquinas diferentes.

 
ejemplo:
  rcp apolo:/home/usuario/arch1 . = copia archivo arch1 de otra máquina hacia
la que se está, con el mismo nombre en el directorio actual.
  rcp arch1 mercury:/home/usuario/ = copia archivo arch1 hacia otra máquina.

 

mv

El comando "mv" sirve para mover archivos de un lugar para otro o renombrar un archivo. Si no se usa el parámetro (-i) será substituido el contenido del archivo destino en el caso que este exista.

 
mv <archivo fuente> <archivo destino>
 
ejemplo:
  mv -i texto1 documento1.txt = renombra archivo texto1 en documento1.txt 
pidiendo la confirmación en el caso que el archivo destino ya exista.
  mv ~mario/datos/documento1.txt . = copia archivo documento1.txt a partir del 
camino indicado para el directorio actual.

 

rm

El comando "rm" borra los archivos o directorios. Se recomienda siempre usar el parámetro (-i) para no borrar otros archivos accidentalmente.

 
rm <archivo>
 
ejemplo:
  rm -i texto1   = borra archivo text1 pidiendo su confirmación.
  rm test*       = borra todos los archivos que comienzan con test sin pedir confirmación.
  rm -r datos    = borra directorio datos y todo su contenido.

 

Creación de archivos

Existen varias formas de crear archivos como ser:

Cuando se desea crear un archivo texto que no es muy grande, el comando "cat" puede ser bastante útil y simple. La sintaxis es

 
cat > archivo
 
en donde: archivo será creado después de escribir el comando y después de escribir el contenido use las teclas Ctrl+D para cerrar el archivo.


chmod

El comando "chmod" permite el cambio de permisos de archivos. Se puede utilizar el modo simbólico o numérico para alterar los permisos.

Modo simbólico.

 
chmod who op permiso <archivo>
 
en donde: who
         u  = da permisos para el propietario (usuario);
         g = da permisos para el grupo
         o = da permisos para el mundo (demás usuarios);
         a = da permisos para el usuario, grupo y mundo al mismo tiempo.
 
en donde: op
         + = dar permiso
         - = quitar permiso
 
y en donde: permiso
         r = permiso para lectura
         w = permiso para escritura
         x = permiso para ejecución
 
ejemplo:
-rw-r--r--   mario  users  845 Oct 14 12:40   texto.txt
  después el comando: chmod a+rw texto.txt   se cambia para
-rw-rw-rw-   mario  users  845 Oct 14 12:40   texto.txt

NOTA: Cuando se crea un archivo o directorio nuevo, el sistema da permisos por default para los archivos (-rw-rw-r--) y directorios (drwxrwxr-x).

Modo numérico.

 
chmod nnn <archivo>
 
donde: nnn
400              Permiso de lectura para el usuario
200              Permiso de escritura para el usuario
100              Permiso de ejecución para el usuario
040              Permiso de lectura para el grupo
020              Permiso de escritura para el grupo
010              Permiso de ejecución para el grupo
004              Permiso de escritura para el mundo
002              Permiso de lectura para el mundo
001              Permiso de ejecución para el mundo

 

La suma de los valores en la columna anterior indica cuales son los permisos que están siendo atribuidos o retirados.

 
ejemplo:
El comando   "chmod 735 texto.txt"   hará que el archivo quede con los siguientes permisos:
-rwx-wxr-x   mario  users  845 Oct 14 12:40   texto.txt

 

chown

la propiedad de un archivo puede ser cambiada con el comando "chown".

 
chown <nuevo usuario> <archivo>
 
ejemplo:
chown mario texto1.txt          = cambia la propiedad del archivo text1.txt del usuario actual a mario.

OBS: Por razones de seguridad solamente el superusuario (root) puede cambiar las propiedades de archivos.

 

ln

El comando "ln" sirve para definir links en el sistema, de manera de no necesitar duplicar archivos y directorios. La sintaxis es:

 
ln <archivo antiguo> <archivo nuevo>
 

Si el link es aplicado en archivos localizados en sistemas de archivos diferentes, será enviado un mensaje de error (Cross-device link) por el sistema. En este caso, utilice un link simbólico para el archivo.

 
ln -s <archivo antiguo> <archivo nuevo>
 

 

Seta_a3.gif - 268 BytesNociones de UNIX

 

 


Otros Comandos

A continuación se presentan otros comandos y algunos argumentos normalmente utilizados en C shell.

Normalmente, los comandos muestran sus resultados en la pantalla, o sea, el terminal es conocido como la salida predeterminada de los comandos (standard output). De la misma forma, usualmente los comandos operan sobre los datos que están siendo introducidos por el teclado, o sea, el terminal es la entrada predeterminada del comando (standard input).

Redireccionamiento de la salida predeterminada

UNIX permite direccionar la salida de un comando hacia cualquier otro archivo.

 
ejemplo: 
ls > list.txt    = la lista de los archivos en el directorio actual es almacenada en list.txt.

 

Redireccionamiento de la entrada predeterminada

Un archivo puede ser indicado como entrada para un comando.

 
ejemplo:
cat < list.txt   = el contenido del archivo list.txt es usado como 
                         entrada para el comando cat.

 

Pipes y pipelines

 

Un pipe ocurre cuando la salida de un comando es direccionada como entrada para otro. Un pipeline es una secuencia de pipes.

 
ejemplo:
ls /etc | wc   = en donde wc muestra el número de líneas, palabras y caracteres del directorio /etc.

 

Redireccionamiento del error predeterminado

Cuando un comando es ejecutado sin problemas, produce resultados en la salida predeterminada, pero cuando el comando encuentra problemas en su ejecución, utiliza un canal diferente para enviar mensajes de error hacia el terminal. Este segundo canal, llamado de error estándar (standard error), puede también ser redireccionado.

Para redireccionar el error predeterminada hacia el mismo destino que el de la salida predeterminada, basta con adicionar un (&) en el símbolo de redirección de salida, o sea: >&

Para que un comando sea ejecutado sin presentar ningún mensaje de error, utilice la siguiente sintaxis:

 
comando >& /dev/null
 

Para separar el error estándar de la salida predeterminada, utilice la siguiente sintaxis:

 
(comando > archivo) >& errorfile
 

Cuando se quiere forzar a que la salida aparezca en el terminal, la salida puede ser redireccionada hacia /dev/tty

 
comando >& /dev/tty
 

 

Procesos, PIDs y Daemons

Después de que cada comando es interpretado por el C Shell un proceso independiente, con un número de identificación (PID) es creado para ejecutarlo. El sistema usa el PID para acompañar el status de cada proceso.


ps

Para verificar los procesos que se están ejecutando es utilizado el comando "ps". Este comando muestra:

Un proceso es denominado "daemon" cuando está continuamente en ejecución.


kill

El comando "kill" puede ser utilizado para forzar a terminar un proceso.

 
kill -9 <numero proceso-PID>
 

Alias

La utilización de aliases permite sustituir un comando largo por uno corto, o de más fácil sintaxis. Se puede también sustituir una secuencia de comandos.

 
alias <nombre del alias> '<comandos>'
 

Para que un alias sea global y permanente debe ser declarado en el archivo ".cshrc" que está en el directorio de login (directory home) del usuario.

 
ejemplo:
  alias                  = muestra todos los alias declarados
  alias rm 'rm -i'       = permite que para cualquier eliminación de archivos sea pedida una confirmación.
  unalias rm             = borra el alias declarado del ejemplo anterior.

 

Ejecución en background

Todo UNIX permite ejecutar varios comandos de una vez colocándolos en background. Ejecutar un comando en background significa que otros comandos pueden ser introducidos mientras el otro se está ejecutando. Para ejecutar en background, la línea de comando debe ser terminada con un (&).

 
ejemplo:
  nroff -ms text.file &

 

grep

El comando "grep" debe ser utilizado para buscar por un string de caracteres en un archivo específico.

 
grep <string> <file>
 

El comando "grep" puede también ser utilizado con redirección de salida, siendo frecuentemente usado como filtro con otros comandos.

 
ls -l | grep .cshrc      = la salida del comando ls permite al grep 
                         verificar la existencia del archivo .cshrc.

 

 

Seta_a3.gif - 268 BytesNociones de UNIX

 

 


Mensajes de error del UNIX

Arg List too long

La lista de argumentos (lo que está escrito en la línea de comando después del nombre del comando) es muy larga. Revise los argumentos pasados y escriba nuevamente.


Broken pipe

Cuando se están ejecutando dos comandos vinculados por una tubería (|) y el programa en el lado de recepción del cerró antes de recibir todos los datos. No es propiamente un error.


Device or resource busy

Un dispositivo como un terminal o impresora, está siendo usado por otro programa. Espere hasta que el otro programa termine de usar el dispositivo.


Different file system

Cuando se usa el comando "ln" (para link simbólico) para crear una conexión para un archivo en un sistema de archivos diferente (un disco diferente o un computador diferente). Esto ocurre si el sistema no puede hacer una conexión soft de un sistema de archivos para otro. Use el comando df para descubrir qué discos tiene el computador y qué directorios están en cada disco. Si la versión del UNIX no puede hacer conexiones soft, la única solución será copiar el archivo en vez de crear la conexión para él.


File exists

Ya existe un archivo con este nombre. Este mensaje, es raro, porque la mayoría de los comandos del UNIX borra un archivo existente cuando quiere crear uno nuevo, a menos que se especifique un argumento al comando.


File table overflow

El sistema está demasiado ocupado y no puede manipular, simultáneamente, todos los archivos que los usuarios pidieron.


File too large

Cuando se intenta crear un archivo demasiado grande, debido a las limitaciones impuestas a cada usuario, establecido por el administrador del sistema. Verifique el espacio reservado para el usuario y solicite más espacio, en caso que sea necesario.


Illegal option

Cuando se digita una opción que no funciona con este comando. Revise lo que fue escrito y repita el comando. Vea también los argumentos del comando con "man <comando>".


Insufficient arguments

Fue omitido algún argumento en el comando. Revise lo que escribió y repita el comando. Vea también los argumentos del comando con "man <comando>".


I/O error

Fue escrito el nombre de un directorio, cuando UNIX solicitaba un nombre de archivo. Controle que fue escrito un nombre de archivo.


Login incorrect

Se está intentando hacer el login y no se introdujo el nombre del usuario correcto o la contraseña no corresponde. En el caso que se haya olvidado de la contraseña, solamente el administrador del sistema (root) podrá crear una nueva.


No such file or directory

Unix no puede encontrar un archivo o directorio con el nombre escrito. No hay que olvidar que el sistema hace distinción entre mayúscula y minúscula. Revise la grafía de los archivos y directorios con el comando "ls -s". Para nombres del camino, verifique si comienzan con una barra (camino absoluto) o no (camino relativo).


No such process

UNIX no puede encontrar el proceso al que se está haciendo referencia, normalmente relacionado al comando "kill". Verifique el número del proceso con el comando "ps".


No more processes

El sistema no puede crear más ningún proceso nuevo. Probablemente el sistema no tiene ningún espacio para este tipo de operación. Muchos procesos en background pueden causar este error.


No space left on device

El disco está lleno. Borre algo para liberar espacio o vea con el administrador del sistema quien se está excediendo en el disco donde apareció el error.


Not a diretory

UNIX necesitaba un nombre de directorio, pero en su lugar fue escrito un nombre de archivo. Corrija el nombre del directorio o créelo antes.


Not enough space

El sistema se quedó sin espacio en la memoria (no en el disco). Otros procesos demorados deben estar ejecutándose. Intente ejecutar nuevamente el proceso más tarde.


Permission denied

No hay permiso para hacer algo de lo que intentó hacer a través del último comando que fue ingresado. Use el comando "ls -l" para ver los permisos de archivos y directorios e inclusive para saber quién es el dueño.


Read-only file system

Se está intentando cambiar un archivo que el UNIX no está autorizado a cambiar. Pida al responsable del archivo que haga una copia del archivo que desea cambiar e indique los permisos que desee.


Too many links

Se está intentando crear tantas conexiones para un archivo que excedió el número máximo de conexiones por archivo.


Usage ...

UNIX no aceptó el número o el tipo de argumentos que fueron digitados después del comando. E indica la sintaxis correcta del comando.

 

Seta_a3.gif - 268 BytesNociones de UNIX