Linux Como estación de trabajo (2da. Edicion)
Clase 2
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
Directorios del Sistema
|
Directorio |
Que se encuentra dentro |
|
/boot |
Imagenes del kernel y archivos de booteo |
|
/root |
archivos personales del administrador |
|
/etc |
archivos de configuracion |
|
/bin |
archivos executables del sistema |
|
/sbin |
archivos executables usados para configurar el sistema |
|
/usr |
archivos de usuarios/programas |
|
/home |
archivos personales de usuarios |
|
/var |
archivos de trabajo de programas(http, proxy, mail, spool de impresoras, etc) |
|
/tmp |
archivos temporales de trabajo. Todos pueden escribir aqui |
|
/dev |
archivos de dispositivos(ide, scsi, puertos seriales, etc) |
|
/proc |
directorio en memoria. Acceso a informacion de procesos, informacion de hardware y configuracion en tiempo de ejecucion del kernel y dispositivos |
|
/opt |
programas que contienen todo lo que necesitan en un solo directorio (Ej. Star Office) |
Aplicaciones de texto vs aplicaciones gráficas
Linux no necesita un entorno de ventanas para funcionar. Las aplicaciones que funcionan bajo terminales o consolas las llamaremos aplicaciones de texto o aplicaciones de consola.
Se portó un sistema de ventanas llamado X/Window, muy popular en el mundo Unix.
Las aplicaciones que funcionan bajo X/Window las llamaremos aplicaciones gráficas o aplicaciones para X/Window.
Uso del interprete de comandos BASH
bash es un shell o interprete de comandos. En donde interactuamos con el sistema operativo. Donde ejecutamos programas y le pedimos al sistema operativo que realize tareas.
Como ejecutar comandos
Un comando se ejecuta asi:
PATH/EJECUTABLE PARM1 PARM2
PATH puede set el path completo(/bin) o el directorio actual(.).
EJECUTABLE es un nombre valido de programa
PARM[1,2,...] pueden ser parametros o opciones.
Las opciones empiesan con '-' o '--'. Los parametros que llevan espacios se debe colocar entre comillas dobles(").
Variables del sistema
Las variables del sistema se crean con el comando 'export' y con convencion debe estar en mayusculas.
Para refererirse a una variable, se debe colocar el caracter de peso($) al comienzo del nombre de la misma.
Ejemplo:
export HELLO="hello world"
echo "hey, $HELLO"
Archivos de inicializacion
Los archivos de inicializacion del bash se separan en dos grupos: globales y de usuario.
Las configuraciones globales son para todos los usuarios y nadie se escapa. Estos son:
/etc/bashrc : usado para aliases
/etc/profile : usado para configurar variables del sistema
/etc/profile.d/ : script que son llamados desde /etc/profile
Las configuracion de usuario son:
~/.bashrc : equivalente a /etc/bashrc, siempre se ejcuta
~/.bash_profile : equivalente a /etc/profile, solo se ejecuta en un shell de login
~/.bash_logout : se ejecuta siempre antes de salir del shell actual
El simbolo '~' se reemplaza siempre por el directorio home del usuario.
Por ejemplo: si mi login es user1, '~' es el equivalente a /home/user1/ y puedo usarlo en el bash.
$ echo ~
$ cd ~
$ ls -l ~/.bashrc
Administracion de procesos
Un proceso es un progrma que se esta ejecutando.
Para ejecutar un proceso en background, se debe colocar el caracter '&' al final del comando.
El comando 'jobs' lista los procesos que estan en background solo en el shell actual
Los comandos 'fg' y 'bg' se usan para traer y llevar un proceso a foreground y background respectivamente.
Foreground significa que el programa tiene conectado el STDIN al teclado, y STDOUT y STDERR a la pantalla.
Para leer mas, ejecutar 'help fg'.
El comando help nos da ayuda sobre los comandos incorporados del bash. jobs, fg y bg son comandos del bash y no programas ejecutables.
Redireccionamiento
Redireccionar significa conectar un file descriptor a un archivo u otro file descriptor.
Para direccionar el STDOUT a un archivo se usa el caracter reservado '>'. Con este caracter sobreescribimos el archivos
de destino, con '>>' contatenamos.
Ejemplo:
$ ls -1 ~ > /tmp/mi_home.txt
$ echo "---------------------" >> /tmp/mi_home.txt
$ date >>/tmp/mi_home.txt
Para redireccionar STDIN(teclado) se usa '< nombre_archivo'.
Para redireccionar selectivamente STDOUT y STDERR usar 1 y 2 para STDOUT y STDERR respectivamente.
Ejemplo:
$ make ejecutable 1>compilacion.log 2>error.log
Para redireccionar el STDOUT de una comando al STDIN de otro comando se usa el caracter pipe '|'.
Ejemplo:
$ ps aux | grep bash
El sigte es un ejemplo un poco mas divertido, muesta la fecha de inicio de todo los procesos iniciados por root:
$ ps waux | grep root | tr -s "[:blank:]" | cut -d" " -f2,9
|
carácter |
que hace |
|
; |
delimita un comando de otro |
|
& |
pasa el comando a background |
|
\ |
continua el comando en una nueva linea |
|
| |
pipe, direccionar STDOUT a otro comando |
|
>, >> |
direccionarmiento a archivo |
|
< |
direccionamiento de archivo a STDIN |
|
" |
comilla doble, usado para delimitar un parametro con espacio |
|
$ |
usado para ver el contenido de una variable |
|
~ |
sinonimo del directorio home del usuario actual |
Shorcuts de teclado
|
Combinacion de teclas |
que hace |
|
Ctrl+A |
ir al comienzo de la linea de edicion |
|
Ctrl+E |
ir al final de la linea de edicion |
|
Ctrl+U |
borra todo desde el cursor al comienzo de la linea de edicion |
|
Ctrl+R |
busca una cadena en el historial de comandos(salir con Ctrl+A o Ctrl+E) |
|
Ctrl+C |
enviar la senhal de ICP, llamada SIGINT, al comando actual |
|
Ctrl+Z |
enviar la senhal de ICP, llamada STOP, al comando actual |
|
Ctrl+S |
scroll lock ON |
|
Ctrl+Q |
scroll lock OFF |
|
Ctrl+M |
igual que oprimir ENTER |
|
Ctrl+L |
refresh screen |
|
Ctrl+H |
igual que BACKSPACE |
|
Ctrl+P,flecha arriba |
comando anterior |
|
Ctrl+N, flecha abajo |
comando sigte |
|
Ctrl+I, TAB |
completa el comando/parametro que mas se le parece a lo ya escrito |
|
|
|