a) Breve descripción de Unix / Linux
Unix es un sistema operativo poderoso desarrollado originalmente en los laboratorios Bell de AT&T. Es muy popular debido a sus características de multiusuario y multiprocesamiento, flexible y portable. Listo para operar en red, con apliaciones como el correo electrónico, editores, compiladores, bibliotecas, graficadores, y otras muchas más de uso específico
Actualmente el sistema de mayor uso es Linux, un clon gratuito de Unix, desarrollado desde cero y mantenido por voluntarios en todo el mundo. Existen diversas distribuciones de Linux, las más conocidas son las derivadas de RedHat, Debian, Slackware entre otras. En la red del IRyA se ha optado por las distribuciones Fedora y Centos, derivadas de RedHat, ya que son las más compatibles con los programas que se usan en nuestra red.
Unix está compuesto de capas. La primera es el kernel, la cual corre en la máquina e interactúa y maneja al hardware. Todas las aplicaciones y comandos en Unix interactúan con el kernel en lugar de el hardware directamente, esto hace una segunda capa. En la parte mas alta de las apliaciones y comandos se encuentra el "programa interprete de comandos": el shell, quien es el que maneja las interacciones entre el usuario, sus aplicaciones y los comandos Unix disponibles en el sistema. Una tercera capa, que puede no estar en el sistema, es el ambiente gráfico de ventanas, como el X. El sistema de ventanas usualmente interactúa con el shell, pero puede interactuar directamente con las aplicaciones.
b) Elementos básicos de Unix
Es necesario familiarizarse con los 6 elementos básico de Unix:
- comandos son las instrucciones que les das al sistema para decirle que es lo que quieres hacer.
- archivos son una colección de datos con un nombre dado
- directorios es análogo a un archivero, que contiene muchos archivos o directorios, cada directorio tiene un nombre tambien. Tanto para los archivos como para los directorios, los nombres pueden constar de 1 a 256 caracteres
- tu ambiente es una colección de parámetros que describe o modifica como tu sesión de cómputo va a ser llevada a cabo, contienen cosas tales como donde están los comandos o aplicaciones en la computadora, a que impresora envias a imprimir, etc
- procesos es un comando o apliación que está corriendo en la computadora. La secuencia de instrucciones dadas a la computadora al momento en que iniciaste una tarea en particular y hasta que lo terminas
- trabajos Un trabajo puede contener a uno o mas procesos
c) Acceso al Sistema
Sesiones en Unix
Para poder usar el sistema, se requiere primeramente entrar a una sesión, para lo cual se debe estar dado de alta mediante un nombre de usuario (login) y una contraseña (password").
Cuando se accede desde la consola (esto es en la computadora física) se tien el ambiente gráfico operando, por lo que aparecerá una ventana con la leyenda "login:" en este campo introduzca su nombre de usuario y a continuacion te pide el "Password", esta es la contraseña que solo tu conoces y que no se muestra en la pantalla. Si la clave es correcta se inicia la sesión, en caso contrario hay que intentarlo de nuevo.
Es importante recordar que Unix es un sistema que diferencía entre mayúsculas y minúsculas, tanto el login como el password deben ser escritos respetando el tipo de caracter, de lo contrario no será posible accesar al sistema. Cuando el login o el password no corresponden, el sistema manda el mensaje "Login failed, please try again," y hay que intentarlo de nuevo.
Para cambiar tu password usa el comando "yppasswd" desde alguna terminal (shell de comandos). El sistema solicitará el password actual, luego en nuevo password dos veces. Ninguno de los password será desplegado en pantalla. Es recomendable cambiar el password la primera vez que se entra a sesión y después periódicamente, tratando de usar un password seguro, algunas sugerencias son:
- El password debe ser de 8 o más caracteres
- Usar una combinación de caracteres alfanuméricos (aBz146) y especiales (#%&+\) de tal forma que no sea facilmente "adivinable"
- No usar nombres propios, de mascotas, de lugares o palabras del diccionario
Si el cambio se realizó correctamente el sistema enviará el mensaje:
The login shell has been changed on jurhiata.crya.privado.
Comandos en Unix
Unix tiene una gran variedad de comandos que permite manipular no solo los archivos y datos, sino también el ambiente de trabajo. Un comando en Unix consiste introducir el nombre del comando Unix seguido por sus argumentos (opciones) y <return>.
comando [-opciones] <return>
Reglas para los comandos en Unix
- Los comandos en Unix diferencian mayúsculas de minúsculas (case-sensitive), la mayoria son en letras minúsculas
- Los comandos en Unix pueden ser introducidos en el prompt del shell
- Los comandos en Unix deben terminar con un RETURN
- Las opciones en Unix generalmente inician con "-" (signo de menos)
- Se pueden incluir mas de una opción en la mayoria de los comandos
Redireccionando entrada y salida
En Unix la entrada estándar es el teclado y la salida es la pantalla. Unix es flexible y premite redireccionar tanto la entrada como la salida:
el ">" (redirecciona la salida)
date > salida
direcciona la hora y dia actual a un archivo llamado "salida". Recuerda que casa vez que se usa este comando redireccionadolo, el archivo de salida se sobreescribe, borrando lo anterior existente .
el ">>" (concatena a un archivo)
date >> salida
(direcciona y concatena la salida a un archivo )
el "<" (redirecciona la entrada)
programa < datos
permite introducir los datos requeridos por un programa a través de un archivo de entrada en lugar de introducirlos desde el teclado, es importante darle el formato adecuado.
el "< >" (redireciona la entrada y salida)
programa < datos > salida
el archivo "datos" va a ser usado como entrada para el programa la salida será almacenada en el archivo "salida". Si se deseara acumular datos de diferentes corridas o programas use el ">>" para redireccionar la salida.
procesos
El comando ps muetra los procesos ejecutándose en el sistema, ejemplo:
root# ps -aux
USER PID %CPU %MEM SZ RSS TT S START TIME COMMAND
root 0 0.0 0.0 0 0 ? T Mar 02 0:01 sched
root 1 0.0 0.1 1224 352 ? S Mar 02 0:05 /etc/init -
root 2 0.0 0.0 0 0 ? S Mar 02 0:00 pageout
root 67 0.0 0.4 2296 1584 ? S Mar 02 0:00 /usr/lib/sysevent/
donde
Corriendo procesos en segundo plano (background)
En ocasiones no es necesario estar atendiendo el desarollo de algún comando o programa que se este ejecutando, cuando esto es posible, una forma de mantener corriendo un proceso sin tener que atenderlo es correrlo en "background", esto es, el proceso sigue ejecutandose normalmente sin que produzca alguna salida a pantalla. La forma de hacerlos es poniendo al final de la linea de comando el caracter "&", ejemplo:
comando &
con esto el proceso corre en backgroud, para ver los procesos en background use el comando "jobs" para regresar el proceso a foreground use el comando: fg "job"
Prioridad de procesos
El comando "nice" es usado para determinar la prioridad de un comando. La prioridad de un proceso determina cuanto atención el sistema dara a determinado proceso, a mayor prioridad, un trabajo finalizará antes que otro igual pero con menor prioridad, ejemplo:
nice -19 comando &
La prioridades disponibles para los usuarios va de 1 a 19, 19 corresponde a la prioridad mas baja. En otras palabras, el valor más grande del comando nice corresponde a la prioridad mas baja.
d) Manipulando archivos y directorios
Archivos
Creación de archivos
Se verá ahora un poco más acerca de los archivos, para empezar, todos tienen un nombre, el cual pude estar compuesto por cualquier caracter, con excepción del "/" y tampoco se recomienda usar el "espacio", ya que dificulta su manejo. Se recomienda emplear letras minúsculas y nombres no muy largos, esto con el fin de evitar mayor esfuerzo al teclear. Cuando se pone un solo punto en medio del nombre del archivo, se le conoce a la parte derecha como extensión y con ello es mas facil identificar el tipo de archivo de que se trata. Asi por ejemplo, para los archivos tipo texto, se usa normalmente la extensión "txt". Unix no requiere extensiones, sin embargo su uso es para ayudar a identificar los diferentes tipos de archivos en el sistema. Algunos programas en Unix si requieren extensión (generalmente los compiladores), por ejemplo .h para archivos de cabecera, .c para archivos fuente de C, .f para fortran, .p para pascal y .s para ensamblador.
Algunos archivos empiezan con un punto (.), por ejemplo .cshrc o .login, este tipo de archivos no aparecen normalmente cuando se lista el directorio ya que para Unix son archivos (o directorios) ocultos, generalmente contienen información sobre el ambiente de trabajo y configuraciones.
Un conjunto específico de archivos y directorios es referido como un "sistema de archivos" (particiones), estos a su vez están relacionados con el tamaño y estructura del disco. Generalmente los usuarios tienen sus archivos y directorios en diversos sistemas de archivos.
Muchos archivos son creados usando un editor de texto, el cual permite introducir y guardar el texto, posteriormente podemos hacer correcciones, agregar texto, borrar, manipular el archivo. Los más usados son el vi, textedit, pico, emacs, etc. Sin embargo es posible crear un archivo sin usar un editor de texto. Esto es usando el comando "cat" y el simbolo ">" para redireccionar la salida, ejemplo:
cat > nuevo_archivo
nuevo_archivo es el nombre dado al archivo. El comando cat generalmente lee y despliega de la entrada y salida estandar, mediante el simbolo ">" se redirecciona la salida a un archivo. cat va a leer y escribir cada liena tecleada hasta que encuentre un caracter de fin de archivo. En el ejemplo anterior escriba algunas palabras y la tecla <return>, solamente se puede corregir sobre la misma linea usando la tecla DELETE. AL final de la ultima linea de <return> y luego CTRL-D. Para desplegar el archivo use "cat nuevo_archivo". Para archivos largos, puede usar el comando "more", el cual despliega por pantallas y espera hasta que presione la tecla "barra espaciadora" para avanzar a la siguiente pantalla o <return> para avanzar a la siguiente linea. Presinonado "?" muestra más ayuda.
Listando archivos
El comando "ls" lista los archivos en el directorio actual, que no empiecen con un punto.
El comando "ls" permite combinar las diferentes opciones en una sola cadena. Cuando se tienen muchos archivos en un directorio, es útil el empleo de la barra vertical o pipa ( | ) ya que despliega el contenido del directorio por pantallas, ejemplo:
ls -altF | more
Manipulando archivos
Para copiar un archivo use el comando "cp"
cp fuente destino
donde "fuente" es el archivo que desea copiar y "destino" es el archivo copiado. Si el archivo "destino" ya existiera, el comando "cp" lo sobreescribiria perdiendose el anterior, es recomendable para usuarios con poca experiencia agregar la opción -i para obtener un prompt de confirmación antes de hacer la copia, por ejemplo:
cp -i fuente destino
Para renombrar o mover archivos use el comando "mv"
mv archivo archivo_nuevo
donde "archivo" es el archivo original y "archivo_nuevo" es el nuevo. Si el archivo "archivo_neuvo" ya existiera, "mv" lo reemplazaria, por lo que se recomienda usar este comando con la opción -i como en el caso de "cp".
Para borrar un archivo use el comando "rm"
rm archivo
Importante: "rm" puede ser muy peligroso, una vez borrado un archivo no es posible recuperarlo, usese con cuidado, es fuertemente recomendable usar este comando con la opción -i para obtener el prompt de confirmación.
Creando ligas, comando "ln"
Es posible referirse a un archivo en particular por diferentes nombres en diferentes directorios. El comando "ln" crea una liga que "apunta" al archivo. Nótese que las ligas son simplemente nombres alternativos para un solo archivos, "ln" no renombra el archivo (como "mv"), tampoco hace una copia (como "cp"), solamente permite accesar un archivo desde diferentes directorios o nombres. Cualquier cambio que se haga el el archivo se reflejara en sus ligas, si se borrara la liga, esto no borraria el archivo original. Para crear una "liga simbólica" en un mismo directorio use el comando:
ln -s archivo_original nombre_liga
Para crear una liga en un directorio diferente al del archivo original use:
ln -s archivo_original /otro/directorio/nombre_liga
en este caso es posible que archivo_original y nombre_liga tengan el mismo nombre ya que estan en directorios diferentes. Si alguien hiciera una liga a alguno de tus archivos y posteriormente tu borraras el archivo, esto le afectaria porque ya no podria accesarlo.
Permisos de archivos y directorios
Cada archivo o directorio en Unix tiene tres tipos de permisos (o protecciones), que definen si alguna acción puede ser llevada a cabo, los permisos son:
Para cada archivo o directorio, los permisos de lectura, escritura y ejecución debe ser definido para cada uno de las diferentes clases de usuarios:
A continuación se muestra la salida del comando "ls -lgF":
Como se obsera, la primera columna corresponde a los permisos:
El propietario del archivo puede cambiar los permisos del mismo mediante el comando "chmod", por ejemplo:
chmod ugo+x archivo
igualmente para negar algún permiso use el signo "menos" (-).
Otra forma de dar los permisos es mediante un número en octal de tres digitos, 1 es para dar el permiso y 0 para negarlo, esto da una serie de números binarios como en la siguiente tabla:
Símbolo | Binario | Octal |
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
chmod 644 archivo
ls -l archivo
-rw-r--r-- 1 root 52791 Nov 14 12:13 archivo
Como se observa, es posible dar los permisos en forma numerica o en forma simbólica. Practiquese cualquier combinación deseada.
Caracteres comodines
El uso de caracteres comodines permite copiar, borrar, listar, mover, etc archivos y directorios:
Directorios
Estructura jerárquica de directorios
Los directorios en Unix son similares a los archivos regulares; ambos tienen nombre y contienen información. Los directorios sin embargo contienen otros archivos y directorios. Muchas de las reglas y comandos que se aplican a los archivos se aplican a los directorios.
Todos los archivos y directorios en Unix estan ordenados en una estructura jerárquica arborea.
En la parte más alta se encuentra el directorio raíz, se le identifica con el simbolo "/" (una diagonal). Despues del directorio raíz se tienen los subdirectorios principales del sistema, generalmente: usr, dev, etc, lib, bin, tmp, opt, home. Por ejemplo el directorio /bin es un subdirectorio o "hijo" de "/". En este caso el directorio raíz ( / ) es el directorio "padre" del directorio bin. Cada ruta descendente termina con un archivo o directorio.
Muchos directorios en Unix tienen nombres y contenidos tradicionales. Por ejemplo, el directorio bin contiene archivos binarios, los cuales son archivos ejecutables y de aplicaciones. El directorio lib contiene archivos biblioteca (library), los cuales son una colección de rutinas usadas normalmente en programas por los compiladores. El directorio dev contiene archivos de los dispositivos del sistema (devices), los cuales son componentes de software de terminales, impresoras, discos, etc. El directorio tmp es para almacenamiento temporal, como cuando un programa crea un archivos durante su ejecución y al terminar lo borra. El directorio etc es para archivos de administración y confuguración miscelaneos y comandos. En sistemas grandes, es posible que esta estructura se repita a niveles inferiores, /usr/local es un buen ejemplo.
Directorio "home"
El directorio "home" es el directorio donde se inicia al entrar a una sesión, es el directorio más alto para la cuenta. El directorio "home" es en general del mismo nombre que la cuenta (login) del usuario, esto por razones administrativas/nemotécnicas.
Cada archivo y directorio en el sistema tiene una ruta para ser accesado, a partir del directorio raíz. Es posible referirse a un punto dentro de la estructura jerárquica de dos maneras: usando su ruta completa (o absoluta) o su ruta relativa. La ruta absoluta traza la posición completa del archivo o directorio desde raiz ( / ), usando diagonales ( / ) para conectar cada punto en la ruta. Por ejemplo la ruta completa para un archivo llamado "file2" podria ser /home/usuario/documentos/file2.
Las rutas relativas inician con el directorio actual ( o también llamado directorio de trabajo). Si /home/usuario fuera tu directorio de trabajo actual, entonces la ruta relativa para "file2" sería documentos/file2.
Si se usa el C shell, TC shell o el Bourne shell, Unix provee algunas abreviaciones para algunos directorios especiales. El caracter "~" (tilde) se refiere al directorio home. El directorio home de cualquier usuario puede ser abreviado de /home/usuario a ~usuario. Mas aún, puedes abreviar de /home/usuario/archivo a ~usuario/archivo. El directorio de trabajo actual se abrevia con un punto (.) y el directorio inmediato superior con dos puntos (..).
Al entrar a una sesión, el sistema Unix inicia en el directorio home, el comando "pwd" despliegas la ruta completa del directorio home.
pwd /home/usuario
Como se ha visto, para mostrar el contenido de un directorio se usa el comando "ls", es posible abreviar con la tilde (~) para desplegar el directorio home. Usando las opciones adecuadas podemos obtener mas información, por ejemplo:
ls -F ~
la opción -F agrega una marca para distinguir los diferentes tipos de archivos: sin marca para los archivos regualres: "/" para directorios; "@" para ligas y "*" para ejecutables.
Para cambiarse de directorio se usa el comando "cd", asi por ejemplo cd ~/trabajos es equivalente a cd /home/usuario/trabajos. En el primer caso usamos la abreviación (~) y en el segundo la ruta completa. Es posible abreviar al cambio de directorio home, esto es, si en algún momento dado te encuentras tabajando en algun directorio diferente al de tu home, es suficiente con que des el comando "cd" <return> sin argumentos para llegar a tu home.
Manipulando directorios
Para mover un directorio use el siguiente comando
mv directorio1 [/ruta/]directorio2
mueve a directorio1 a directorio2. Si este directorio1 contuviera archivos y directorios se conservan dentro de directorio2.
Para borrar un directorio, primero hay que situarse fuera de dicho directorio (arriba). Use el comando rmdir y el nombre del directorio para borrarlo. Con rmdir no es posible borrar directorios que no esten vacios, esto para prevenir destruir accidentalmente archivos o directorios útiles. Para borrar el contenido de dicho directorio, usar el comando rm y rmdir para borrar archivos y directorios respectivamente paso a paso. Hay otra forma de hacerlo rapidamente (aunque también peligrosa), el comando "rm -r" (la opción -r es recursiva), ejemplo:
rm -r trabajos
se borrarán el directorio trabajos y su contenido! Usese con moderación :).
e) Manuales en linea y lista de los comandos mas usados
Manuales en linea (man)
Unix tiene disponible manuales en linea conocido como "man pages", para accesarlos use el comando:
man nombre_comando
las páginas del manual contiene información sobre el comando, una descripción, opciones, ejemplos y referencias con otros manuales o documentación adicional. Use la opción -k hacer una busqueda aproximada en los manuales relacionados con algún nombre en común
man -k "cadena"
o use el comando "apropos" para obtener el mismo resultado.
Lista selecta de comandos
Comandos de inicio y estado
Comando
|
propósito
|
exit/logout
|
termina tu sesión de Unix
|
passwd
|
cambia el password, solicitandote el anterior y el nuevo dos veces
|
stty
|
fija las opciones de la terminal
|
date
|
despliega o fija la hora/fecha actual
|
finger
|
despliega información acerca de los usuarios
|
w
|
muestra quienes estan en sesión
|
ps
|
despliega información acerca de los procesos
|
env
|
despliega o cambia el ambiente de trabajo
|
set
|
comando de shell que fija las variables de la sesión
|
alias
|
comando de shell que define abreviaciones de comandos
|
history
|
comando de shell que despliega los últimos comandos ejecutados
|
telnet
|
permite conectarse a un sistema remoto
|
rsh
|
permite ejecutar un shell remoto
|
rlogin
|
permite accesar un sistema remoto
|
ssh
|
permite conectarse a un sistema remoto en forma segura
|
ftp/sftp
|
Transfiere archivos entre sistemas remotos/similar pero en forma segura
|
rehash
|
actualiza la variable de ambiente "path"
|
source
|
actualiza algún archivo, generalmente de configuración
|
which/where
|
muestra la ruta de algún comando o programa que esté en el path
|
xhost
|
permite o inega el acceso al despliegue gráfico
|
sh/csh/tcsh/bash
|
tipos de shell
|
man
|
muestra los manuales en linea
|
Comandos de archivos y directorios
Comando
|
Propósito
|
cat
|
concatena y despliega archivos
|
more
|
muestra un archivo por pantallas, permite navegar a través del archivo de texto
|
touch
|
crea un archivo vacio o actualiza la fecha de uno existente
|
mv
|
mueve o renombra archivos
|
cp
|
copia archivos
|
rm
|
borra archivos. NOTA: una vez borrado algún archivo no es posible recuperarlo, ¡tenga cuidado!
|
ls
|
lista el contenido de un directorio
|
mkdir
|
crea un directorio
|
rmdir
|
borra un directorio (vacio)
|
cd
|
cambia a otro directorio
|
pwd
|
muestra el directorio de trabajo actual
|
du
|
indica el espacio ocupado en disco
|
df
|
muestra el espacio ocupado y disponible del sistema
|
chmod
|
cambia el modo (permisos) de un archivo o directorio
|
file
|
determina el tipo de archivo
|
quota -v
|
despliega el espacio ocupado en disco por esa cuenta
|
Comandos para formateo e impresión
Comando
|
Propósito
|
lpr
|
envia un trabajo a la impresora
|
lpq
|
muestra los trabajos en la cola de la impresora
|
lprm
|
quita los trabajos de la cola de la impresora
|
lpstat
|
muestra información del estado de las impresoras
|
cancel
|
quita un trabajo de la cola de impresión
|
a2ps
|
combierte un archivo asscii en formato postscript
|
mpage
|
envia un archivo a la impresora, permite acomodar varias páginas por hoja impresa
|
Herramientas de edición
Comando
|
Propósito
|
vi
|
editor visual orientado a caracteres
|
pico
|
otro editor de texto de fácil uso
|
textedit
|
editor de texto, requiere ambiente gráfico OpenWindows
|
emacs/xemacs
|
editor de texto bastante poderoso, varias utilerias, requiere ambiente gráfico
|
diff
|
muestra las diferencias entre archivos
|
grep
|
busca una cadena o patrón en un archivo de texto (filtro)
|
sort
|
ordena las lineas en un archivo
|
wc
|
cuenta lineas, palabras y caracteres en un archivo
|
head
|
muestra las 10 primeras lineas de un archivo
|
tail
|
muestra las 10 últimas lineas de un archivo
|
Controles de programa, redireccionamientos y filtros
Comando
|
Propósito
|
CTRL-C
|
interrumpe el proceso o comando actual
|
CTRL-D
|
genera un carácter de fin de archivo o termina una sesión de shell
|
CTRL-S
|
detiene el flujo de salida a la pantalla
|
CTRL-Q
|
continua con el flujo de salida a la pantalla
|
CTRL-Z
|
suspende el proceso o comando actual
|
jobs
|
lista los trabajos en "background"
|
sleep
|
suspende la ejecución por un intervalo de tiempo (en segundos)
|
kill
|
ternima o reinicia un proceso
|
nice
|
corre un programa con baja prioridad
|
renice
|
altera la prioridad de un trabajo que esta corriendo
|
&
|
corre un proceso en "background" cuando se pone al final de la linea de comando
|
>
|
redirecciona la salida a un archivo
|
>>
|
redirecciona la salida al final de un archivo
|
<
|
redirecciona la entrada de un comando o programa
|
|
|
entuba la salida de un comando y la envia como entrada de otro
|
bg
|
corre un trabajo actual o específico en "background"
|
fg
|
regresa un trabajo actual o específico a "foreground"
|
!!
|
repite el último comando ejecutado
|