Unix

La filosofía de Unix es: Cada programa debe hacer un solo trabajo y hacerlo bien, esta filosofía y la habilidad de interconectar programas lo hacen un sistema operativo modular. Es un sistema de tiempo compartido. Existen veriones multiusuario y monousuario. Unix se divide en dos partes: el kernel y las utilidades.

Fechas importantes

1969 Versión original en PDP-7 (fork primitiva), escrita por Ken Thompson y Dennis Ritchie.
1970 Versión para 2 usuarios en PDP-7, ya se le había bautizado UNIX.
1971 Primera edición para PDP-11, incluye el sistema de archivos.
1972 Segunda edición para PDP-11, incluye pipes.
1973 Se reescribe en C.
1975 La sexta edición se facilita a las universidades.
1977-78 Unix se porta a la Interdata 8/32.
1979 Se libera la séptima edición.
1980 Se libera la 32V (para Vax) por AT&T, no usaba paginación por lo que no fué popular.
1980 Se libera la 3.2bsd (para Vax) por Berkeley.
1981 Sistema III de AT&T.
1983 Sistema V.1 de AT6T.
1984 Versión 4.2bsd de Berkeley.
1985 Sistema V.2 de AT&T.
1985 AT&T intenta estandarizar al Unix publicando el SVID.
1986 Versión 4.3bsd de Berkeley.
1986 Sistema V.3 de AT&T.
1987 AT&T publica la segunda edición del SVID.
1989 SunOs versión 4.0.3 ofrece compatibilidad con las versiones de AT&T y Berkeley.
1989 DEC libera Ultrix versión 3.0 para Vax, ofrece la misma compatibilidad que SunOs.
Dec, Sun y AT&T proponen un estándar, el X/Open.
La IEEE propone el estándar Posix.
IBM funda el OSF (Open Software Foundation).
AT&T y Sun proponen el Unix International: Con mejoras sobre el sistema de Berkeley, compatible con Xenix, con V.3 y sistemas anteriores.
Contribuciones de Berkeley: Vi, C-Shell y sockets.

Contribuciones de AT&T: memoria compartida, streams (mecanismos IPC que reemplazan a los sockets) y RFC (remote file sharing).

Sabores de Unix

Versiones de Unix: Unix Versión 7, Unix System III, Unix System V, Berkeley Unix, SunOs, Xenix, Omnix y Uniflex_Zeus.
Unix re-escritos: Idris, Minix, Mach y Gnu.

Emulaciones de Unix: UTS (corre en VM470), Eunice y Unity (corren en VMS de las Vax de Dec).

Shells

La interacción del Unix con el usuario se da a través de shells. El más popular es el Bourne-Shell (sh). Se reconoce que el sh está esperando un comando porque aparece un prompt llamado primario "$"; asi mismo si al comando entrado le hacen falta parámetros aparecerá el prompt secudario ">". Estos prompts se pueden modificar ya que son variables de shell (PS1 y PS2). Para visualizar el valor actual de este tipo de variables se usa el comando: echo $variable. Para modificar este tipo de variables se usa el comando: variable=valor.

Otro shell popular es el C-Shell (csh). El csh utiliza como prompt primario el "%".

Los shells de Unix abren dos flujos de datos cada vez que se ejecuta un nuevo proceso. El mismo shell es un proceso. Son flujos de caracteres y están conectados por defecto a la terminal (pantalla y teclado son la salida y entrada estándar) Ambos flujos se pueden redireccionar con < para modificar la entrada y > para modificar la salida. El >> se puede usar para agregar a un archivo ya existente la nueva salida.

Comandos

Los comandos en Unix siguen esta convención: comando -opciones parámetros. Las opciones siempre deberán estar entre el comando y los parámetros, suelen ser letras. Los parámetros suelen ser archivos. Si se necesita hacer uso de un metacarater al escribir un comando se puede agregar un "\" para "desactivarlo"; si está contenido en una cadena entonces se deberá de encerrar en comillas.

Para la edición de comandos

return, enter, CR, carriage return: Hace que Unix procese el comando teclado.
Rubout, delete, backspace: Borra el último caracter tecleado.
Ctrl-X, Ctrl-U: Borra la línea entera.
Ctrl-W: Borra la última palabra escrita.
Ctrl-Z, Ctrl-D: Fin de archivo o de shell (excepto en c-shell).
Ctrl-C, delete, break: Aborta el proceso en ejecución.
Ctrl-\: Aborta el proceso en ejecución y produce un dump core.
espacio, tab: Separa campos. Si se requiere hacer uso de espacios como identificador de algo (archivos, valores) se deberá encerrar con comillas.
Ctrl-S: Suspende la salida en pantalla.

Ctrl-Q, Ctrl-S: Reestablece la salida en pantalla.

Archivos

El Unix es un sistema operativo que trabaja sobre archivos, un archivo posee ciertos atributos: nombre, tamaño y localización entre otros. Unix observa cada archivo como una cadena de bytes. Sin embargo la mayor parte de los programas de utilidad (editores de texto y compiladores) imponen cierto formato básico a los archivos que crean. El nombre del archivo puede ser de 1 a 14 o 255 caracteres, depende del sistema con el que se trabaje. Puede incluir puntos pero no metacaracteres. Los puntos se suelen usar para delimitar campos (extensiones).

Unix trata a los periféricos como archivos (localizados en /dev). Asi mismo los directorios también son vistos como archivos. Cada archivo tiene un dueño único, regularmente el que creó el archivo. Los archivos del sistema operativo y los periféricos pertenecen a "root" (administrador del sistema). La terminal (otro archivo) pertenece al usuario que la usa. Cada usuario tiene un directorio de acceso nombrado "HOME" (variable de shell), ahí puede crear sus archivos.

Los archivos pueden ser referenciados en los comandos haciendo uso de comodines: * empareja con cualquier cadena, ? empareja con un caracter cualquiera y [] empareja con cualquier caracter de los ahí contenidos (puede ser un intervalo de caracteres).

No existe un estándar respecto a la localización de los archivos de un sistema Unix, pero se siguen estas normas:

bin : Para programas que implementan comandos del sistema.
dev : Archivos que representan dispositivos, se accesan via programas monitores.
etc : Otros programas del sistema.
lib : Archivos de bibliotecas usados por los comandos.
tmp : Área para archivos temporales.

usr : Archivos y directorios de los usuarios del sistema.

A menos que un archivo tenga el atributo x activado para el tipo de usuario adecuado, el shell rechazará cualquier intento de ejecución de ese archivo. Existen dos tipos de archivos ejecutables: programas compilados y encadenados (.out) o archivos de texto con comandos shell.

Si al final de la línea de comando se pone un & antes de dar el "Enter", el shell pondrá en ejecución el proceso, nos dará el valor de identificación del proceso y un nuevo prompt sin esperar a que el proceso termine.

Comandos útiles

man x comando : Visualiza el manual (si lo hay) del comando, x es el número del volumen (1 para resumen y k (keyword) para opciones o comandos relacionados).

passwd : Modifica el password de entrada a la cuenta.

who : Lista a los usarios que tienen una sesión abierta.

date : Da la fecha y la hora del sistema.

echo cadena : Visualiza la cadena en la pantalla, si empieza con $ entonces visualiza el contenido de esa variable de shell.

more, pg : Programa que "visualiza" su entrada en la salida pero con "cortes" o pausas en la pantalla.

cat archivo : Copia el contenido de uno o más archivos a la pantalla.

ls : Lista el contenido del directorio en curso, o el especificado. Los directorios aparecen listados con la propiedad "d".

rm archivo : Borra los archivos listados como parámetros.

mv : Mueve un archivo de un directorio a otro o le cambia el nombre.

cp : Copia archivos.

grep cadena archivo : Busca en el archivo la cadena dada.

cmp archivo1 archivo2 : Compara dos archivos y visualiza las diferencias.

mkdir directorio : Crea el directorio dado en el directorio actual.

cd directorio : Cambia el directorio actual al especificado. Para ir al directorio "padre" del actual se usan los dos puntos (..) .

pwd : Visualiza la ruta del directorio actual.

rmdir directorio : Borra el directorio especificado siempre y cuando esté vació.

chmod usuario[signo atributo] archivo : Modifica los atributos de protección del archivo:

Signo: + añade - eliminia
Usuarios: u: Usuario		r: Permite leer el archivo o directorio
	g: Grupo		w: Permite escribir el archivo o direc.
	o: Otros usuarios	x: Permite ejecutar el archivo o entrar al dir.
	a: Todos los usuario	s: Pone el privilegio de user_id.
				t: Pone el privilegio de texto.

split : Divide un archivo en un conjunto de archivos de longitud dada.

tail : Extrae las n últimas líneas de un archivo.

tr, dd : Intercambia caracteres dentro de un archivo.

crypt : Encripta y desencripta archivos empleando una clave.

spell : Explora a través de un archivo de texto y contrasta cada palabra con su diccionario visualizando las palabras que no ha podido reconocer. spelling permite a un usuario privilegiado la introducción de nuevas palabras.

pubindex : Toma un conjunto de referencias bibliográficas y hace un archivo índice.

refer : Usa como archivo fuente el archivo índice de pubindex, examina un documento reemplazando las referencias abreviadas por su forma completa.

lookbib : Busca una base bibliogáfica de datos creados por el usuario para que empareje las palabras claves que se dan como entrada, y produce una lista de referencias como salida.

roff, nroff, troff : Procesadores de texto. Preprocesadores que pueden usar: tbl (permite diseñar un formato de tabla) y negn (formatea expresiones matemáticas).

write : Permite mandar mensajes a los usuarios con sesión abierta.

mesg y/n: Activa/Desactiva la visualización de mensajes.

mail : Permite mandar correo electrónico a los usuarios del sistema.

df : Da la cantidad de espacio libre que queda en un disco.

du : Da la cantidad de espacio usado por el directorio en curso y sus subdirectorios.

ac : Controla la cantidad de tiempo acceso utilizado.

dump : Obtiene copias de archivos de tipo backup para cintas, se recuperan con restore.

tar : Copia archivos a cinta.

dc : Calculadora de notación polaca inversa, necesita un programa como: 12
25
+
?
pq

37

bc : Es un preprocesador tipo c para dc.

lex : Analizador de léxico.

yacc : Compilador de compiladores.

od : Muestra un archivo en los soguientes formatos: b (octal) c (ascii) d (decimal) o (octal) x (hexadecimal).

mount : Monta un dispositivo tipo quita-pon

ps : Informa el estado de todos los procesos que en ese momento se están ejecutando.

wait : Mantiene en suspenso la termninal hasta que todos los procesos terminen.

tee : Se emplea en pipes (|), hace una copia de la entrada estándar a la salida estándar, así como a otro archivo.

awk : Un lenguaje para emparejar cadenas con un modelo dado.

sort : Ordena un archivo.

at : Difiere la ejecución de un proceso hasta la hora especificada.

sleep : Difiere la ejecución de un proceso para un periodo determinado.

expr : Manipula variables shell para operaciones aritméticas.

test : Comprueba el estado o la existencia de un archivo, compara cadenas de caracteres o compara valores numéricos.

time : Da el lapso transcurrido así como la proporción de su uso por la CPU al ejecutar un comando dado.

Programación del Shell

Se le pueden pasar hasta n parámetros a los programas shell:

$1, $2, $3... Con $* se pueden leer todos los parámetros, $# número de parámetros.

Los parámetros son variables tipo shell dentro del programa, para referirnos a ellos se pueden usar comodines: *, ?, [].

Lenguajes

C

lint : Comprueba a fondo la sintáxis del códigofuente.
cc : Compilador C estándar.
pcc : Compilador portable C, sirve para realizar compilaciones cruzadas.

Fortran

f77 : Compilador ANSI fortran 1977.
ratfor : Preprocesador, acepta fortran estructurado y genera fortran IV.

Encadenador

ld : Es llamado automáticamente por cc y f77 a menos que se indique lo contrario (-c).

Utilerías

nn : Produce una tabla de símbolos a partir de un archivo objeto (.o o .out).
size : Nos da el número de bytes usados por el código ejecutable, los datos y la pila.
ar : Construye librerías .a para /lib o /usr/lib
adb : Controla la ejecución de un proceso y permite examinar el archivo core (imagen de memoria y registros del CPU) equivale al debug de MS-DOS
m4 : Programa preprocesador de propósito general (intercambia valores constantes por sus identificadores dentro del archivo fuente). Expansión de macros.
make : Emplea una estructura de archivos de comandos como una ayuda a la construcción del programa. El archivo de programas se llamará makefile. Está constituido por llamadas a compilación que dependen de la modificación de los archivos fuentes.

SCCS Source Code Control System

Sistema de control de código fuente: Mantiene archivos almacenando una versión base de cada archivo y grabando todas las modificaciones subsiguientes como una serie de deltas. Se aplica exclusivamente a archivos de texto, verifica el que el usuario pueda o no acceder y modificar las versiones que se van generando.

vi

Manipulación de archivos

:w Escribe el archivo
:wq Escribe el archivo y sal
:q Sal de vi
:q! Sal de vi y olvida los cambios
:e name Edita el archivo name
:e # Edita el archivo alterno
:n # Edita el archivo alterno
:e +n Edita a partir de la línea n
:w name Escribe el archivo name
:w! name Sobreescribe el archivo name
:sh Corre el shell y luego regresa
:! cmd Corre el comando y luego regresa
:n Edita el siguiente archivo en la lista de argumentos
:n args Especifica nueva lista de argumentos
:f Muestra el nombre del archivo y línea ajustando la palabra

Ajustando la pantalla

^L Redibuja la pantalla
^R Redibújala sin líneas arroba
ZCR Redibuja la línea actual hasta arriba
Z-CR Redibuja la línea actual hasta abajo
Z.CR Redibuja la línea actual enmedio de la pantalla
^E Sube una línea
^Y Baja una línea

Posicionamiento de caracter

^ Primer no blanco
0 Principio de línea
$ Fin de línea
l, espacio Adelante un caracter
h, ^H Atrás un caracter
fx Encuentra el caracter x, adelante
Fx Encuentra el caracter x, atrás
tx Sube x, adelante
Tx Sube x, atrás
; Repite último f, F, t o T
% Encuentra concoordancia (,),{0}

Posicionamiento dentro del archivo

^F Avanza una página
^B Retrocede una página
^D Baja media pantalla
^U Sube media pantalla
G Ve a la linea
/path Busca path hacia adelante
?path Busca path hacia atrás
n Repite último / o ?
N Retrocede último / o ?
/path/+n Neava concordancia de path hacia adelante
?path?-n Neava concordancia de path hacia atrás
]] Siguiente sección o función
[[ Previa sección o función
% Encuentra correspondencia (,),{0}

Posicionamiento dentro de la linea

H Primera línea de la ventana
L Última línea de la ventana
M Media línea de la ventana
+,CR,Return Siguiente línea primera columna
- Previa línea no primera columna
j Siguiente línea misma columna
k Previa línea misma columna

Palabras, sentencias, párrafos

w Mueve cursor a la siguiente palabra
b Mueve cursor a la palabra anterior
e Mueve cursor al final de la palabra
) Mueve a la siguiente oración
( Mueve a la oración anterior
} Mueve al siguiente párrafo
{ Mueve al párrafo anterior
W Mueve a la siguiente palabra, delimitada por blancos
B Mueve a la palabra anterior, delimitada por blancos
E Mueve al final de la siguinte palabra delimitada por blancos

Inserciones y reemplazos

a Agrega después del cursor
i Inserta antes del cursor
A Agrega al final de la línea
I Inserta al principio de la línea
o Abre línea antes del cursor
O Abre línea después del cursor
rx Reemplaza un caracter con x
R Reemplaza caracteres con x

Correcciones durante la inserción

^H Borra último caracter
^w Borra última palabra
^U,^X Borra línea actual
/ Caracter de escape y edición
ESC Termina modo de inserción
^C Interrumpe, termina inserción
^D Backspace sobre autoindent
^V Entrecomilla, caracter no imprimible

Yank y Put

P Paste y no mueve el cursor
p Paste y avanza el cursor
"xp Paste del buffer x
"xy Copia al buffer x
"xd Corta al buffer x
y Yank líneas la búffer

Operadores (doblar para operar sobre líneas)

d Borra
c Cambia
> Mueve a la izquierda
< Mueve a la derecha
! Filtra a través de un comando

Marcando y regresando

mx Marca línea con letra x
'x Ve a marca x
'x Ve a marca x, primer no blanco
'' Previo contexto
'' Previo contxto, primer no blanco

Misceláneos

u Deshaz último cambio
U Restaura línea en curso
C Cambia resto de línea en curso
D Borra resto de la línea en curso
s Substituye caracteres
S Substituye líneas
X Borra el caracter anterior al cursor
. Repite última edición
"dp Carga d'ava delete
J Une líneas
x Borra el caracter sobre el que está el cursor
Y Copia líneas

Linux

Comandos útiles

Configuracion de XWindows: XF86Config

Inicio de sesion en XWindows: startx -- -bpp 16

Fondo Terraqueo: xearth

Descomprimir archivos .Z: zcat Archivo.z|tar -xf -

Descomprimr archivos .tar: tar xvf Archivo.tar

Instalar: rpm -ivh archivo.rpm

Reconstruye base: rpm -QA

Ambiente de programacion: xwpe

Para cambiar entorno grafico: switchdesk

Gnome

glib
glib10

gtk+10
gtk+
gtk-engines

Orbit
audiofile
utempter
libguile

redhat-logos

libghttp
libgtop
libgtop-examples

cpp
PropList
WindowMaker
wmakerconf

imlib
initscripts
pam

gnome-audio-extra
gnome-audio
gnome-libs
gnome-utils

Fnlib
libttf
enlightenment

libgtkxmhtml
libgtop_common
libgtop_sysdeps

gnome-core

gdm
gnome-media

KDE

qt
kdesupport
kdelibs
kdebase
kdetoys
kdegames
kdeadmin
switchdesk-kde
kdeutils
kdegraphics
kdemultimedia
korganizer
kdenetwork
kppload
Valida la página