UNIVERSIDADE DA CORUÑA
El entorno de programación Unix
Fernando Bellas Permuy
Departamento de Tecnologías de la Información y las Comunicaciones (TIC)
Universidad de A Coruña
http://www.tic.udc.es/~fbellas
[email protected]
Contenidos
• El modelo Unix.
• Comandos más usuales.
• La shell.
• Caracteres especiales en Bourne Shell.
• Redireccionamientos de entrada/salida y pipes en Bourne
shell.
• Expresiones regulares.
• Programación de scripts en Bourne shell.
• Acceso remoto.
• Arquitectura X Window.
• Arquitectura típica de una red heterogénea Unix/MS-Win-
dows.
• Creación de Makefiles (pendiente para el curso de C++ ...).
• Bibliografía.
1
El modelo Unix
• Proceso
Programa en ejecución.
• Thread
Flujo de ejecución dentro de un proceso.
• Multitarea
Una misma máquina ejecuta varios procesos simultáneamente.
• Multiusuario
En una misma máquina se ejecutan los procesos de distintos usuarios.
• El sistema operativo ofrece sus servicios a través de un con-
junto de llamadas al sistema
Gestión de ficheros y directorios, creación de procesos, gestión de señales, etc.
Aplicaciones
(espacio de usuario)
API
Kernel
• Distintas versiones de Unix
Solaris (Sun), HP-Unix, AIX (IBM), Linux, etc.
2
Comandos más usuales (1)
• ls (listar)
ls -al .
d rwx --- --x 20 fer senior 1536 Oct 19 12:11 .
d r-x r-x r-x 2 root root 3 Oct 19 13:07 ..
- rwx --- --- 1 fer senior 171 Jul 28 1997 .cshrc
- rwx --- --- 1 fer senior 6842 Jul 24 1997 .cshrc.old
d rwx --- --- 2 fer senior 512 Mar 30 1998 Direcciones
d rwx --- --- 2 fer senior 512 Sep 5 12:27 Personal
d rwx --- --- 15 fer senior 512 Oct 16 16:55 Trabajos
d rwx --- --- 2 fer senior 512 Jul 31 22:04 bin
d rwx --- --- 2 fer senior 512 Oct 16 14:39 dead_letter
- rwx --- --- 1 fer senior 7487 Sep 1 18:48 fmdictionary
- rw- --- --- 1 fer senior 257 Oct 19 12:11 fmfilesvisited
d rwx --- --- 8 fer senior 512 Oct 6 1997 login
d rwx --- --- 2 fer senior 512 Dec 22 1997 nsmail
d rwx r-x r-x 3 fer senior 512 Oct 16 17:42 public_html
d rwx --- --- 5 fer senior 1024 Oct 19 12:24 tmp
Otra opción típica: -R (recursivo).
• chmod (cambiar modo), chown (cambiar propietario),
chgrp (cambiar grupo)
chmod 744 p.cc
chmod u=rwx,go=r p.cc
chmod ugo+r p.cc
chmod a+r p.cc
chmod a-r p.cc
chown fer p.cc g.cc
chgrp senior p.cc g.cc
Todos admiten la opción -R (recursivo).
3
Comandos más usuales (2)
• cd (cambiar directorio), pwd (imprimir directorio de trabajo)
cd /home/fer/Trabajos/GRACE
pwd
cd Trabajos/GRACE
cd
• cp (copiar)
cp nombreFichero1 nombreFichero2
cp nombreFichero nombreDirectorio
cp nombreFichero1 .. nombreFicheroN NombreDirectorio
cp -r nombreDirectorio1 nombreDirectorio2
cp -r nombreDirectorio1/* nombreDirectorio2
cp nombreDirectorio1/* nombreDirectorio2
• mv (mover)
mv nombreFichero1 nombreFichero2
mv nombreFichero nombreDirectorio
mv nombreFichero1 .. nombreFicheroN NombreDirectorio
mv nombreDirectorio1 nombreDirectorio2
• mkdir (crear directorio)
mkdir nombreDirectorio
• rm (borrar)
rm nombreFichero1 .. nombreFichero2
rm -r nombreDirectorio
rm -rf nombreDirectorio
• rmdir (borrar directorio)
rmdir nombreDirectorio
• cat (listar fichero), more (listar fichero con pausas), head
(primeras líneas de un fichero), tail (últimas líneas de un
fichero).
cat nombreFichero
more nombreFichero
head nombreFichero
tail nombreFichero
4
Comandos más usuales (3)
• diff (comparación de ficheros de texto), cmp (comparación
de ficheros binarios)
diff ficheroDeTexto1 ficheroDeTexto2
cmp ficheroBinario1 ficheroBinario2
• lpr (imprimir fichero), lpq (comprobar la cola de
impresión)
(fecha y hora), uname (información sobre el sistema)
lpr ficheroDeTexto1 ... ficheroDeTextoN
lpr -P nombreImpresora ficheroDeTexto1 ... ficheroDeTextoN
lpq -P nombreImpresora
• who (ver usuarios activos en una máquina), whoami, date
• su (acceder como otro usuario)
su - fbellas
• passwd (cambiar password)
• file (determinar el tipo de fichero)
• ps (consultar la tabla de procesos)
ps
ps -fea
• kill (enviar una señal a un proceso)
kill -<número de señal> <número de proceso>
kill -9 123
• man (consultar el manual), xman (versión X Window de man)
man nombreComando
man -s <número de sección> nombreComamdo
man kill
man -s 2 kill
• df (listar espacio en sistemas de ficheros)
df -k
5
Comandos más usuales (y 4)
• ln (establecer links)
ln nombreFichero nombreLink (hard link)
ln -s nombreFichero nombreLink (symbolik link)
ln -s NombreDirectorio nombreLink (symbolik link)
• wc (cuenta de líneas, caracteres y palabras)
wc fichero
wc -l fichero
wc -l -w fichero
wc -lw fichero
wc fichero1 fichero2 ... ficheroN
Opciones: -l y -w.
• vi (edición de ficheros)
• gzip, gunzip (compresión y descompresión de ficheros -
GNU)
gzip nombreFichero1 ... nombreFicheroN
gunzip nombreFichero1 ... nombreFicheroN
Otra opción -9 para gzip.
• tar (empaquetamiento de ficheros)
cd
tar cvf tmp.tar /home/fer/tmp
tar tvf tmp.tar
tar cvf tmp.tar tmp
tar tvf tmp.tar
tar xvf tmp.tar
6
La shell (1)
• Concepto
Lee una línea de comandos por la entrada estándar (hasta fin de línea), la analiza, y ejecuta los
comandos correspondientes (lanzando procesos hijo).
• Distintos tipos de shell
• /bin/sh (Bourne Shell), /bin/ksh (Korn Shell), /bin/csh (C Shell), bash
(versión interactiva de sh), tcsh (versión interactiva de csh).
• Cada usuario tiene asociado un tipo de shell.
• Variables de entorno
• Todo proceso tiene asociadas variables de entorno. Una variable de entorno
asocia un nombre (HOME) con un valor (/home/fer).
• Si el proceso padre lo desea, el proceso hijo hereda todas las variables de
• Especificación de variables de entorno.
entorno del padre.
• sh, ksh, bash.
• NOMBRE_VARIABLE=valor
• Para exportarla => export NOMBRE_VARIABLE
• setenv NOMBRE_VARIABLE valor
• csh, tcsh.
• Ficheros de inicialización/finalización
• sh, ksh, bash:
• csh, tcsh:
• /etc/profile (la primera vez que un usuario entra en su cuenta).
• $HOME/.profile (la primera vez que un usuario entra en su cuenta).
• /etc/.login (la primera vez que un usuario entra en su cuenta).
• $HOME/.login (la primera vez que un usuario entra en su cuenta).
• $HOME/.logout (se ejecuta al terminar la sesión).
• $HOME/.cshrc (cada vez que se ejecuta un shell).
• Los ficheros de inicialización/finalización son scripts.
7
La shell (2)
• Ficheros de inicialización/finalización (continuación)
• Un .profile típico
# ----------------------------------------------------------------------------
# Variables de entorno
# ----------------------------------------------------------------------------
# Variables de entorno generales.
OPENWINHOME=/usr/openwin
export OPENWINHOME
PATH=.:$OPENWINHOME/bin/xview:$OPENWINHOME/bin:/usr/ucb:/bin:/usr/bin:/usr/
sbin:/usr/ccs/bin:/usr/lib/nis:/opt/frame/bin:/usr/local/bin
export PATH
MANPATH=$OPENWINHOME/man:/usr/man
export MANPATH
LD_LIBRARY_PATH=/usr/lib:$OPENWINHOME/lib:/usr/dt/lib
export LD_LIBRARY_PATH
# ----------------------------------------------------------------------------
# Comandos a ejecutar por defecto.
# ----------------------------------------------------------------------------
# Definir máscara por defecto.
umask 077
# Tecla de borrado.
stty erase '^H'
# Definir un prompt (en bash).
export PS1="\h \w"
8
La shell (3)
• Un .profile típico (continuación)
# Inicialización de X Window.
# ----------------------------------------------------------------------------
# Arrancar el servidor de X Window si es necesario.
# ----------------------------------------------------------------------------
#
# If possible, start the windows system
#
if [ `tty` = "/dev/console" ] ; then
if [ "$TERM" = "sun" -o "$TERM" = "AT386" ] ; then
if [ ${OPENWINHOME:-""} = "" ] ; then
OPENWINHOME=/usr/openwin
export OPENWINHOME
fi
echo ""
echo "Starting OpenWindows in 5 seconds (type Control-C to interrupt)"
sleep 5
echo ""
$OPENWINHOME/bin/openwin
clear # get rid of annoying cursor rectangle
exit # logout after leaving windows system
fi
fi
• Ficheros de inicialización/finalización (continuación)
• Un .login típico.
• Idem pero sin las variables de entorno.
• Un ejemplo de prompt: set prompt = "`uname -n`%~> "
• También varía la parte de inicialización del servidor de X Window, y se suelen esta-
blecer alias (alias l ls -al).
• Un .cshrc típico.
• Suele dar valor a las variables de entorno (con setenv y sin export).
• El path también se puede especificar como set path = ( dir1 dir2 ...
• También se podría haber hecho en el .login, pero tiene alguna ventaja hacerlo en
dirN).
.cshrc.
• Un .logout típico.
• Lo que interese antes de que se termine la sesión (ej.: clear).
9
La shell (y 4)
• Ejecución de scripts dentro de la propia shell
• sh, ksh, bash
• csh, tcsh
• . nombreScript
• source nombreScript
• Utilidad típica
• Cuando se hace un cambio a una variable de entorno de algún fichero de inicialización.
• sh, ksh, bash => . $HOME/.profile
• csh, tcsh => source ~/.login, source ~/.cshrc
10
Caracteres especiales en Bourne shell (1)
• Concepto
mkdir tmp
cd tmp
echo > f1
echo > f2
echo > f3
set -x
ls *
+ ls f1 f2 f3
f1 f2 f3
set +x
• Algunos caracteres especiales
El shell expande (interpreta) el caracter *,
y posteriormente ejecuta el comando ls con
los parámetros f1 f2 f3
Carácter
*
?
[ccc]
$var
${var}
"..."
'...'
`...`
Significado
Reconoce cualquier cadena (que no empiece por .), incluso la nula.
Reconoce cualquier carácter individual.
Reconoce cualquier carácter en ccc. Se admiten rang
Comentarios de: El entorno de programación Unix (0)
No hay comentarios