Indice
Inicio del sistema
Aqui vimos como se inicia Linux y que archivos se leen al iniciar el sistema.
Linux utiliza el esquema SysV(System Five) de arranque del sistema. En
este esquema, se tiene un script para cada programa o servicio que se debe
ejecutar al iniciar el sistema y un archivo principal que se encarga de
llamar a estos script.
Tambien existe el concepto de runlevel. Un runlevel viene a ser una
configuracion de ejecucion del sistema. Asi, se pueden configurar varias
configuraciones y pasar de una configuracion a otra.
Estos runlevel o configuraciones son a nivel de programas. Es decir,
se definen que programas deben
estar corriendo y cuales no en un cierto runlevel.
Secuencia de booteo
Aqui se presenta un resumen de que pasa cuando Linux bootea.
- Se carga el kernel en memoria
- El kernel se carga por medio del lilo u otro boot
manager. La mayor parte del kernel esta comprimido y la parte que no esta
comprima se carga primero y luego descomprime la parte comprimida.
- Le llama a /sbin/init
- El init es el primer proceso que se ejecuta y
es llamado directo desde el kernel.
- El init se configura con el archivo /etc/inittab.
El init puede ejecutar tambien programas, por ejemplo los prompt de login
de las terminales virtuales las levanta el y se especifica en el archivo
/etc/inittab
- El init se queda corriendo todo el tiempo.
- Se leen archivos de configuracion
- El init lee el archivo /etc/inittab y luego llama
al programa /etc/rc.d/rc para que levante los servicios del runlevel por
defecto. El runlevel por defecto tambien se configura en /etc/inittab
- El /etc/rc.d/rc tambien ejecuta los script de
inicializacion que estan en: /etc/rc.d/rc.*
- Estos son: el primero es rc.sysinit y el ultimo
rc.local. Pueden haber otros como rc.serial que se ejecuta entre los dos
anteriormente citados
- Se ejecutan los programas del runlevel por defecto
- Como habiamos visto, el int le llama a /etc/rc.d/rc
y le pasa como parametro el runlevel al cual se quiere pasar.
- Asi, el rc ejecuta los scripts que estan en el directorio
/etc/rc.d/rcx.d, donde x es el numero de runlevel
Introduccion a los runlevels
Como habiamos visto los runlevels son configuraciones de programas daemon
o servicios. Los runlevels van de 0 a 6.
Los runlevel 0,1 y 6 estan reservados, los demas pueden ser usados por
el usuario para configuraciones a medida.
Para saber que servicios ejecutar y cuales no, existen los directorios
/etc/rc.d/rcx.d/
Existe un directorio para cada runlevel y dentro del mismo esta la configuracion
del runlevel.
Por ejemplo el runlevel 3 esta configurado en: /etc/rc.d/rc3.d/
La forma de configurar un runlevel es a traves de links o enlaces simbolicos
a servicios. Los servicios se levantan o bajan por medio de scripts, los
cuales estan en el directorio /etc/rc.d/init.d/
Entonces, si uno quiere que se ejecute un determinado servicio, crea
un link de la forma: [S,K][00-99]nombre
Donde 'nombre' es el nombre del script que se encuentra en /etc/rc.d/init.d/
La S significa Start y la K Kill. Los numeros del 00 al 99 son el orden
de ejecucion del script.
Asi, si queremos que el runlevel 3 se ejecute el servicio apache y no
se ejecute el servicio sendmail, tendriamos
en el directorio /etc/rc.d/rc3.d/ lo sigte:
K30sendmail -> ../init.d/sendmail
S85apache -> ../init.d/apache
Los links con menor numero se ejcutan primero. Los links que empiesan
con K se ejecutan primero que los que empiesan con S. Lo que hace el /etc/rc.d/rc
es leer los links del directorio y si empiesa con una K, llama al script
pasando como parametro la palabra stop. Si empieza con una S, le pasa el
parametro start
Generalmente los numeros de K y S de un mismo servicio si se suman
dan 100. Asi, si el apache se inicio con el numero de secuencia 85(esto
es casi al final) al cerrar el sistema se tendria que bajar dentro de los
primeros numeros, osea 15(casi uno de los primeros).
Introduccion a servicios
Los servicios ejecutan daemons o programas que corren todo el tiempo.
Ejemplos de esto son: servidor web apache, servidor de email sendmail,
etc.
Los servicios son scripts y se encuentran en el directorio: /etc/rc.d/init.d/
Para levantar un servicio, se ejecuta el script y se le pasa el parametro
start. Para bajarlo, se le pasa el parametro stop.
Si no se le pasa ningun parametro, el script imprime las opciones de
parametros validos.
Por ejemplo si modificamos el archivos de configuracion del apache y
queremos bajar y luego levantar el servicio
para que los cambios tengan efecto, podemos hacer esto:
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/httpd start
Otra opcion es pasarle el parametro restart que hace lo mismo:
/etc/rc.d/init.d/httpd restart
Manejo de
archivos
Por manejo de archivos entendemos todo lo que podemos hacer con un
archivo, o al menos las funciones basicas. Estas son: copiar, mover, borrar,
hacer un enlace simbolico, crear directorios y archivos.
Para realizar estas operaciones, existen los sigtes comandos:
Comando
|
Descripcion
|
cp
|
Copiar archivos
|
mv
|
Mover, renombrar archivos
|
rm
|
Borrar archivos
|
ln
|
Crear enlaces simbolicos
o symbolic link s
|
touch
|
Crear archivos vacios
|
mkdir
|
Crear directorios
|
Opciones communes a los comandos: cp, mv, rm
-i
|
pregunta si se desea sobreescribir
un archivo
|
-f
|
sobreescribe arhchivos sin preguntar
|
-v
|
muestra mas mensajes de las operacion
realizadas
|
Por defecto, los comandos nunca preguntan si se desea sobreescribir un
archivo, por eso siempre se recomienda usar la opcion -i. O crear un alias
para ello, ej:
$ alias rm="rm -i"
A continuacion veremos una descripcion de la syntaxis de cada comando.
cp
cp se usa para copiar archivos, directorios y cualquier tipo especial
de archivo.
Se recomienda usar siempre la opcion:
| cp [opciones] archivo1 directorio1 |
Copia el archivo1 a directorio1
|
cp [opciones] archivo1 archivo2
directorio1
|
Copia los archivos archivo1 y
archivo2 a directorio1
|
cp [opciones] archivo1 archivo2
|
Copia el archivo1 a archivo2
|
cp [opciones] directorio1 directorio2
|
Copia el directorio1 al directorio2.
Si directorio2 no existe, lo crea
|
Las opciones mas usadas son:
-R
|
copiar recursivamente los directorio
|
-p
|
preservar atributos(duenho, fecha,
etc)
|
-d
|
preservar los enlaces simbolicos(no
copiar el archivo a donde apunta el enlace)
|
-a
|
equivalente a -dpR
|
-l
|
crear enlaces simbolicos, no
copiar
|
Se recomienda usar siempre las opciones:
-ai
mv
mv se usa para mover archivos. Tambien para renombrarlos.
Syntaxis de uso mas comunes:
mv [opciones] arrchivo1 directorio
1
|
Mueve el archivo1 a directorio1
|
mv [opciones] archivo1 archivo2
|
Renombra el archivo1 a archivo2
|
mv [opciones] directorio1 directorio2
|
Mueve el directorio1 a directorio2.
Si directorio2 no existe, lo crea
|
Se recomienda usar siempre la opcion:
-i
rm
El comando rm se usa para borrar archivos o directorios.
Syntaxis de uso mas comunes:
rm [opciones] archivo1 archivo2
|
borra los archivo1 y archivo2
|
rm -r direcorio1
|
borra el directorio1 y todo su
contenido
|
Para el comando rm se recomienda fuertemente usar la opcion -i y solamente
usar la opcion -f si se completa y absolutamente seguro de lo que se esta
haciendo. Esto es debido a que el comando rm nunca pregunta si se quiere
borrar un archivo.
Tambien es bueno borrar los direcotios con el comando rmdir, el cual solo
borra un directorio solo si este esta vacio.
mkdir
Se usa para crear directorios.
El comando recive como parametro el nombre del directorio a crear.
Una opcion util es la '-p' que crea todos los directorios padres al directorio
que queremos crear.
mkdir [-p] directorio1
|
Crea el directorio1
|
ln
Se usa para crear enlaces simbolicos(link) a un archivo o directorio.
Es como crear un acceso directo a un archivo.
Se pueden crear enlaces de tipo: soft y hard.
Si un enlace es de tipo soft, no se incrementa el contador de uso del
archivo al cual apunta. Asi, si se borra o mueve el archivo al cual apunta,
el enlace deja de ser valido.
Si un enlace es de tipo hard, se incrementa en 1 el contador de uso del
archivo al cual apunta. Asi, si se borra o mueve el archivo al cual apunta,
este en realidad no se borra porque aun esta siendo apuntado por el link.
En este caso, si se desea borrar el archivo apuntado, se debe borrar el
archivo apuntado y el link.
ln [opciones] archivo_original
nuevo_link
|
crea el link nuevo_link el cual
apunta a archivo_original
|
touch
Se usa para crear un archivo vacio con la fecha actual o para cambiar
la fecha de modificacion de un archivo existente a la fecha actual.
touch archivo1
|
Cambia la fecha de modificacion
del archivo1, si este no existe, lo crea con tamanho 0.
|
touch se puede usar por ejemplo para crear banderas en script de bash.
Por ejemplo, al comienzo de nuestro script creamos un archivo para indicar
que el script s esta ejecutando. Luego, antes de salir del script borramos
el archivo.
Usando wildcards (cartas salvajes)
Los wildcards son comodines para seleccionar varios archivos a la vez.
Un wildcard se denota usando el caracter '*' (asterisco).
Por ejemplo, si tenemos un directorio en donde todos los archivos teminan
en .mpg, y se desea moverlos a otro directorio se puede seleccionar todos
los archivos .mpg con: '*mpg'.
No hace falta colocar un punto entre el asterisco y la extension porque
en Unix la extencion no proporciona ninguna informacion al sistema operativo.
Estos dos wildcards con equivalentes:
'*mpg'
'*.mpg'
Para continuar con el ejemplo de mover todos los archivos .mpg a otro
directorio, damos la sigte situacion:
- En el directorio /tmp existe varios archivos con extension .mpg
- Queremos crear un directorio llamado /tmp/videos y mover todos esos
archivos ahi.
Solucion:
$ cd /tmp
$ mkdir videos
$ mv -i *mpg videos
No hace falta ir al directorio /tmp para ejecutar el comando, aqui hacemos
lo mismo:
$ cd /etc
$ mkdir /tmp/videos
$ mv /tmp/*mpg /tmp/videos
Hay que tener mucho cuidado al usar los wildcards con el comando rm
Ejemplos:
Copiar un archivo a nuestro directorio personal y cambiarlo de nombre
$ cd
$ cp /usr/include/stdio.h .
$ cd /tmp
$ mv /home/yo/stdio.h /home/yo/stdio.h.original
Crear un directorio con basura y luego borrarlo
$ cd /etc
$ mkdir /tmp/basura
$ cp -a /usr/X11R6/bin/x*d /tmp/basura
$ cp -a /tmp/basura /tmp/basura2
$ rm -fr /tmp/basura
$ rm -f /tmp/basura2/*
$ rmdir /tmp/basura2
Usar una bandera en un script para que se ejecute solo una instancia:
--------------------------
#!/bin/sh
# script que corre una sola instancia
BANDERA=/tmp/bandera.lock
if [ -f ${BANDERA} ] ; then
echo "Ya existe una instancia de $0 corriendo. Saliendo ..."
exit 1
fi
# crear la bandera
touch $BANDERA
# ejectar aqui el proceso preferido
# estamos por salir
rm -f ${BANDERA}
exit 0
--------------------------
Arriba
Volver
|