Runlevels
Cmo arranca Linux?
Al prender la PC, lo primero que inicia es el BIOS. Todo lo que tiene que ver con reconocimiento de hardware.
En el setup (BIOS), el sistema lee cual es el dispositivo o el orden de dispositivos donde va a buscar el
arranque. Por ejemplo: cdrom, floppy, hard disk. Si arranca el disco duro, lo primero que lee es el MBR (master
record) que es la primera porcin del disco que contiene informacin. En el MBR va a estar el programa LILO
o GRUB, que son boot loader, programas arrancadores o booteadores.
Lo enunciado anteriormente es, si en la instalacin de Linux, elegimos la opcin de instalar LILO o GRUB en
el MBR. Recuerde que tenamos una segunda opcin de instalar LILO en una particin del disco. Al elegir esta
opcin, para arrancar nuestro Linux, necesitamos un disco de booteo. Una vez iniciado LILO, vemos los
sistemas operativos que podemos arrancar. Seleccionamos Linux. Ahora, entonces comienza la carga del kernel
en memoria.
El kernel se debe cargar entero en el primer megabyte de la RAM disponible. Por esto, el kernel se comprime.
Podemos decir que el kernel es un archivo. La cabecera del archivo contiene el cdigo necesario para llevar a la
CPU a modo protegido (as se elimina la restriccin de memoria) y entonces, se descomprime el resto del
kernel. Con el kernel en memoria, entonces puede empezar la ejecucin. Ac es donde se construyen todas las
funcionalidades, por ejemplo, algunos mdulos del kernel no son accesibles en este punto. Luego debern
levantar a mano los mdulos deseados. Como mnimo, el kernel debe tener el cdigo para configurar el sistema
de archivos raz o una imagen initrd. Una imagen initrd es, como lo es el kernel, un archivo. La particularidad
de este archivo es que es un pseudo filesystem root pequeo que es montado en lugar del verdadero filesystem
root y que contiene lo mnimo indispensable para que luego de ser montado por el kernel tenga las herramientas
bsicas para poder cargar ms mdulos, que son necesarios para dar soporte al verdadero filesystem root. Esto
se suele usar, por ejemplo, cuando queremos tener un root en un dispositivo raid, lvm o usb.
Como ya dijimos, el otro filesystem primordial para arrancar nuestro sistema es el raz, el /. Una vez iniciado el
kernel, vemos en la pantalla una sucesin de lneas donde va reconociendo y chequeando el hardware y
determina qu controladores de dispositivos se deben inicializar. Luego de este paso, el kernel monta el sistema
de archivos raz en read only. Y ahora s, se inicia un programa llamado init.
El programa init tiene la funcin de iniciar todos los procesos que necesita el sistema. Los ms importantes
entre stos son los programas que permiten que los usuarios puedan iniciar una sesin. Estos programas se
denominan getty. Normalmente funcionar una copia de getty por cada consola virtual que tengamos
habilitada y por cada terminal que est conectada al sistema.
El init es el primer proceso no kernel que se inicia y siempre tiene el nmero de proceso 1 (pid=1). init para
comenzar lee su archivo de configuracin, /etc/inittab, y determina el nivel de ejecucin donde debe iniciar.
Veamos qu es el nivel de ejecucin, o runlevel , como generalmente se lo llama. Esencialmente un nivel de
ejecucin dice como se va a comportar el sistema, describe un modo de operacin. Cada nivel (designado por
un nmero entre 0 y 6) especifica un comportamiento distinto. El init busca en este archivo el runlevel
indicado para arrancar. Si no hay un nivel de arranque por defecto lo pide por pantalla sino no sabe en qu
runlevel arrancar, por lo tanto no arrancar. Los runlevels son los siguientes:
1
Detiene el sistema (halt)
2
3
4
5
6
7
Monousuario(no est disponible la red).
Multiusuario, pero sin NFS.
Multiusuario completo (modo de operacin normal).
Sin uso.
Multiusuario completo con entorno grfico (modo de operacin normal).
Reinicia el sistema.
Nota: Los runlevels del 2 al 5 son todos multiusuario y Debian , por default utiliza el runlevel 2.
Cuando sabe el nivel de ejecucin, init ejecuta el script que se le indica en el archivo /etc/inittab. El nivel
de ejecucin por defecto depende de lo que le haya indicado al sistema durante la fase de instalacin.
Vamos a ver ahora como es el archivo /etc/inittab:
#
/etc/inittab: init(8) configuration.
$Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
The default runlevel.
id:2:initdefault:
Boot-time system configuration/initialization script.
This is run first except when booting in emergency (-b)
mode. si::sysinit:/etc/init.d/rcS
What to do in single-user
mode.
~~:S:wait:/sbin/sulogin
/etc/init.d executes the S and K scripts upon change
#
#
#
#
#
of runlevel.
#
Runlevel 0 is
Runlevel 1 is
Runlevels 2-5
Runlevel 6 is
halt.
single-user.
are multi-user.
reboot.
l0:0:wait:/etc/init.d/rc
l1:1:wait:/etc/init.d/rc
l2:2:wait:/etc/init.d/rc
l3:3:wait:/etc/init.d/rc
l4:4:wait:/etc/init.d/rc
l5:5:wait:/etc/init.d/rc
l6:6:wait:/etc/init.d/rc 6
#
#
0
1
2
3
4
5
Normally not reached, but fallthrough
emergency. z6:6:respawn:/sbin/sulogin
in
case
of
What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a
-r now
Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
#
What
to
do
when
the
power
fails/returns.
pf::powerwait:/etc/init.d/powerfail
start
pn::powerfailnow:/etc/init.d/powerfail
now
po::powerokwait:/etc/init.d/powerfail stop
/sbin/getty invocations for the runlevels.
#
#
The "id" field MUST be the same as the last
characters of the device (after "tty").
#
#
Format:
#
<id>:<runlevels>:<action>:<process>
#
Note that on most Debian systems tty7 is used by the X Window System,
so if you want to add more getty's go ahead but skip tty7 if you run X.
1:2345:respawn:/sbin/getty
-f
/etc/issue.linuxlogo
tty1 2:23:respawn:/sbin/getty 38400 tty2
38400
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
Comentarios
Como ya habr visto el archivo /etc/inittab est organizado en lneas. Cada lnea tiene el siguiente
formato: identificador:niveles_de_ejecucin:accin:programa
El identificador puede ser un nmero o una letra, o una combinacin de ambos.
Ejemplo:
id:2:initdefault:
Esta lnea es muy importante, es
la que setea el runlevel por
defecto. El identificador es id, el
runlevel es el 2 y la accin es el
arranque por defecto. No tiene
un programa asociado porque
debe fijarse en los scripts de
arranque que corresponden al
runlevel 2. Ms adelante
respawn
wait
once
hablaremos de los scripts de
boot
bootwait
arranque en cada nivel. Para
ondemand
cambiar el runlevel por defecto
sysinit
solo se debe cambiar el nmero
powerwait
que aparece en esta lnea por el
powerfail
powerokwait
nivel que se desee.
ctraltdel
Si tiene instalado LILO en el
sistema puede iniciar en el modo
que desea al momento de elegir
el Sistema Operativo que
iniciar, agregando el nmero
del runlevel que desea precedido
por el nombre con que identifica
LILO a Linux. Por ejemplo:
Linux 1 o Linux s o Linux
single.
Si tiene instalado GRUB, debe
editar el arranque con la letra
e, y, en la lnea que empieza
con la palabra kernel, al final
escriba single.
Vamos a comentar algunas
acciones.
el proceso
reinicia si
termina
el proceso
se inicia
una vez que
el runlevel
se
introduce, e
init espera
a su
terminacin
el proceso
se ejecuta
una sola
vez. Sin
embargo,
init no
espera que
termine
antes de
ejecutar
otros
programas
en el
runlevel
particular
el proceso
se ejecuta
en el
arranque
del sistema.
En este
caso, el
campo
runlevel se
ignora el
proceso se
ejecuta al
arrancar el
sistema, e
init espera
su
terminacin
antes de
continuar
con el
proceso
siguiente
el proceso
se ejecuta
cuando
ocurre una
peticin de
un nivel de
ejecucin
determinad
o.
No
ocurre un
cambio de
nivel
de
ejecucin
el proceso
se ejecuta
durante el
arranque
del sistema,
antes
de
cualquier
entrada
boot
o
bootwait
si
init
recibe una
seal
de
otro
proceso que
tiene
problemas
con
la
alimentaci
n,
se
ejecutar
este
proceso.
Antes
de
continuar,
init espera
que
este
proceso
termine
Igual que
powerwait,
excepto que
init no
espera que
el proceso
acabe
si init recibe
el
mismo
tipo
de
seal que en
powerwait,
y existe un
archivo
llamado
/etc/powe
rstatus
con
la
cadena OK
en l, este
proceso se
ejecuta
e
init espera
a
su
terminacin
el programa
se ejecuta
cuando
init recibe
la
seal
indicando
que
el
usuario ha
pulsado la
combinaci
n de teclas
CTR-ALTDEL. Tenga
en cuenta
que muchos
servidores
X-Windows
capturan
esta
combinaci
n de teclas,
y as init
no
recibe
esta seal si
esta activo
X-Windows
Una aclaracion final, en RedHat
hay al final del archivo inittab
una lnea como la siguiente:
x:5:respawn:/etc/X11/pre
fdm -nodaemon
Esta lnea lo que hace es que en
el runlevel 5 arranque el modo
grfico. Es decir, RedHat define
al runlevel 5 exclusivamente
para iniciar el modo grfico.
Esto en Debian no sucede, en
Debian el runlevel 1 es single
user,
el
runlevel
2
es
multiusuario. Para que arranque
el modo grfico, simplemente
hay que configurar el modo
grfico en el runlevel 2 como
cualquier otro servicio. La
ventaja de esto es que si el modo
grfico no est bien configurado,
no va a estar eternamente
intentando arrancar como en
RedHat con la opcin respawn.
De esta forma, si falla,
simplemente tirar el error y el
equipo seguir funcionando
como corresponde.
Sripts de arranque rc
El
archivo
/etc/inittab
especifica qu scripts ejecutar en
cada nivel de ejecucin. Estos
scripts son los responsables de
arrancar o parar los servicios
particulares de ese nivel de
ejecucin. Como los servicios a
manejar en cada nivel son
numerosos, se usan los scripts
rc.
El
principal,
/etc/init.d/rc, es el que
llama a los scripts apropiados en
el orden adecuado para cada
nivel de ejecucin. Para cada
nivel de ejecucin, existe un
subdirectorio en el directorio
/etc/rcN.d. Donde N es el
numero de runlevel de 0 a 6 y un
S para single user en modo
mantenimiento.
Entonces
podemos encontrar algo como lo
siguiente:
alexa:/etc/default#
cd /etc
alexa:/etc# ls -ld rc*
drwxr-xr-x
2 root
drwxr-xr-x
2 root
drwxr-xr-x
2 root
drwxr-xr-x
2 root
drwxr-xr-x
2 root
drwxr-xr-x
2 root
drwxr-xr-x
2 root
drwxr-xr-x
2 root
root
root
root
root
root
root
root
root
4096 Mar
4096 Mar
4096 Mar
4096 Mar
4096 Mar
4096 Mar
4096 Mar
4096 Feb
8
8
8
8
8
8
8
5
03:58
03:58
03:58
03:58
03:58
03:58
03:58
14:37
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d
alexa:/etc#
Este es el formato estandar que
se usa en un sistema System V.
Otras distribuciones, usan un
directorio en /etc/rc.d y ah
dentro guardan estos archivos.
Pero el estandar sigue siendo el
que usa Debian, de hecho es muy
comn
que
hagan
links
simblicos al estandar o del
formato de ellos al estandar.
Hay varios directorios que se
llaman rcN.d, donde N es un
nmero de 0 a 6. Son los
runlevels. En cada uno de ellos,
estn los procesos que se van a
ejecutar
en
el
runlevel
correspondiente. Por ejemplo,
todos los scripts del nivel de
ejecucin
2
estn
en
/etc/rc2.d.
Ahora veamos que hay dentro de
uno de estos directorios a modo
de ejemplo:
alexa:/etc/rc2.d# ls -l
total 0
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
lrwxrwxrwx
1 root
root
18 Feb 22 23:50 S10sysklogd -> ../init.d/sysklogd
17 Feb 22 23:50 S11hotplug -> ../init.d/hotplug
22 Feb 22 23:50 S20bootclean.sh ->
../init.d/bootclean.sh
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
../init.d/bootsplash.sh
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
lrwxrwxrwx
1 root
root
root
root
root
root
root
root
root
root
14
17
13
13
16
13
14
18
23
root
root
root
root
13
19
19
23
bootlogd
En este directorio de nivel de
ejecucin 3, hay links, enlaces
simblicos a los scripts del
directorio /etc/rc.d/init.d.
Los enlaces simblicos tienen el
prefijo S que sirven para arrancar
los servicios (viene de Start) o el
prefijo K que sirven para parar un
servicio (viene de Kill). En
muchos casos, el orden en que
estos scripts se ejecutan es
importante (no puede usar DNS
para
resolver
nombres
de
mquinas si no ha configurado
primero la red). Para cumplir el
orden, hay un nmero de dos
dgitos como sufijo de la S o de la
K. Los nmeros ms bajos se
ejecutan antes que los nmeros
ms
altos.
Por
ejemplo:
/etc/rc3.d/S10network
se
ejecuta
antes
que
/etc/rc3.d/S80postfix.
Es
lgico, para arrancar los servicios
que usan la red, primero debe
levantar la red. Primero ejecuta los
scripts que empiezan por K y
despus los scripts que empiezan
con S. Para los scripts que
empiezan con K, se les pasa un
parmetro stop y a los que
empiezan con S, se les pasa un
parmetro de start.
Cuando se invoca K15httpd,
realmente esta haciendo:
/etc/init.d/httpd
stop
Y cuando se invoca
S10network, realmente esta
haciendo:
/
etc/init.d/network
start
Si quieren simplificarse la vida
Feb 22
Feb 22
Feb 22
Feb 22
Feb 22
Feb 22
Feb 22
Feb 22
Feb 22
ojo
Mar 8
Feb 22
Feb 22
Feb 22
23:50 S45alsa -> ../init.d/alsa
23:50 S45makedev -> ../init.d/makedev
23:50 S45ssh -> ../init.d/ssh
23:50 S45xfs -> ../init.d/xfs
23:50 S45xinetd -> ../init.d/xinetd
23:50 S55atd -> ../init.d/atd
23:50 S89cron -> ../init.d/cron
23:50 S90vmware -> /etc/init.d/vmware
23:50 S99bootsplash.sh ->
aca, un enter faltaba-------------02:37 S99kdm -> ../init.d/kdm
23:50 S99linuxlogo -> ../init.d/linuxlogo
23:50 S99rmnologin -> ../init.d/rmnologin
23:50 S99stop-bootlogd -> ../init.d/stop-
con respecto a la creacin de
los links simblicos para
agregar o sacar servicios del
arranque, pueden usar una
aplicacin propia de Debian
que se llama rcconf.
Ahora veamos el directorio
/etc/init.d. Ac es donde
estn todos los servicios,
tambin llamados demonios.
Aqu es donde estn apuntando
los links. Los links se crearon
para no tener que copiar cada
script en cada directorio de
runlevel. (esta muestra es
parcial y a modo de ejemplo)
alexa:/etc/init.d# ls -l
total 384
-rw-r--r-1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwx-----1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
-rwxr-xr-x
1 root
root
853
4687
1074
988
2136
1558
1242
652
894
4791
4939
1086
1172
749
1346
837
4665
1959
641
1573
2960
165
-rwxr-xr-x
1602 Feb
1 root
Para poder arrancar un servicio
por ejemplo samba, realizamos
lo siguiente:
# /etc/init.d/smb
start
Para poder parar un servicio por
ejemplo samba, realizamos lo
siguiente:
# /etc/init.d/smb
stop
Para poder ver si esta corriendo
el proceso por ejemplo samba,
realizamos lo siguiente:
root
Nov
Mar
Jan
Dec
Nov
Jan
Nov
Jan
Oct
Dec
Feb
Jan
Nov
Oct
Oct
Nov
Feb
Aug
Dec
Sep
Jan
Feb
3 13:36
5 16:40
18 2002
11 2002
4 11:49
27 01:38
2 09:32
27 02:04
5 2001
20 21:22
26 08:34
18 18:23
28 2002
26 23:09
1 2002
17 08:53
25 21:29
22 2003
20 21:24
21 09:04
30 15:15
26 2001
README
alsa
atd
binfmt-support
bootclean.sh
bootlogd
bootmisc.sh
bootsplash.sh
checkfs.sh
checkroot.sh
console-screen.sh
cron
devfsd
devpts.sh
etc-setserial
fam
fetchmail
gdm
halt
hddtemp
hdparm
hostname.sh
6 12:54 hotplug
# /etc/init.d/smb
status
Para poder restaurar el proceso
por ejemplo samba, realizamos
lo siguiente:
# /etc/init.d/smb
restart
La opcin restart ejecuta un
stop primero y luego un start.
Como cambiar de runlevel
Si mi archivo /etc/initttab
tiene seteado el initdefault,
por ejemplo en runlevel 2 y
quisiera cambiar al modo S para
realizar tareas de mantenimiento
de hardware se puede usar el
mismo init de la siguiente forma:
# init S
Se suele recomendar usar el
telinit para esta tarea, pero no
hace falta dado que es un link
simblico al init. Con lo cual
funciona exactamente igual y si
nos acostumbramos a usar el init
en lugar del telinit vamos a
seguir usando una herramienta
que est en todos los unix en
lugar del telinit que es exclusiva
de Linux y nuevamente, no es
mas que un link simblico.
Este comando lo que hace es
cambiar el runlevel. Pasa al
modo S, y para ello se fija en su
script rcS.d qu servicios debe
detener y qu servicios debe
iniciar. Ud. Ver en la pantalla
algunos mensajes del estilo de
los que aparecen cuando arranca
el sistema. En el caso particular
del runlevel S finalmente les va a
solicitar el password de root
como nica posiblidad, dado que
es un runlevel single user (S) y
todo lo que hagamos solo
debera poder hacerlo root.
Conociendo init, alcanza con
saber que queremos hacer y solo
escribir init runlevel (donde
runlevel es uno de los nmeros
del 0 al 6 o la S) y de esta forma,
reiniciar el equipo, apagarlo,
entrar en modo mantenimiento,
etc.
Comandos de Linux
(continuacin)
Bsqueda de archivos:
find directorio [opciones]
Cuando necesitamos buscar un
archivo, usamos el comando
find. Este comando permite
hacer bsquedas por varios
criterios, por nombre, por tipo de
archivo,
por
fecha
de
modificacin,
etc.
Donde
directorio es el directorio
desde el cual empieza la
bsqueda. Ud. pensar qu
directorio elegir para comenzar
la bsqueda. Si uno ya sabe que
busca
un
archivo
de
configuracin, directorio puede
ser /etc, que es donde est todo
lo relativo a configuracin del
sistema o de usuarios.
Las opciones pueden ser:
-name nombre
-print
-perm modo
-atime n
-ctime n
-amin n
-cmin n
-empty
-mmin n
-mtime n
-size n [bloque]
Para buscar un archivo que se llame nombre.
Imprime los archivos que encuentra.
Los permisos del archivo son exactamente iguales a los indicados por modo.
Archivos accedidos en las ultimas n*24 horas.
Archivos cambiados en las ultimas n*24 horas.
Archivos accedidos en los ltimos n minutos.
Archivos cambiados en los ltimos n minutos.
Archivos vacos.
Archivos modificados en los ltimos n minutos.
Archivos modificados en las ultimas n*24 horas.
Archivo que tiene al menos n bloques/caracteres/kilobytes. Un bloque
equivale a 512 bytes.
-exec comando \;
Por cada archivo que encuentra, ejecuta comando.
Ejemplos:
Esto lo que hace es buscar archivo2 en el directorio / y todos los
directorios que pertenecen a / (/boot, /root, /etc, /usr, etc), y
muestra los archivos encontrados que coincidan con archivo2.
. -name archivo2 print
dem al
ejemplo anterior pero esta vez busca en el
directorio en que me encuentro, esto es lo que indica el punto ( .),
y tambin lo imprime.
/ -name *.conf
En este caso, buscaremos todos los archivos que terminen en .conf
/usr/src -name core exec rm {} \;
Este ejemplo lo que hace es buscar los
archivos de nombre core en el directorio /usr/src y todos los
directorios que pertenezcan a este, y ejecuta el comando rm por
cada archivo que encuentra.
/home -iname *.jpg size 100k
Este ejemplo busca cualquier archivo que termine
con extensin .jpg en el directorio /home y sus directorios con
# find / -name archivo2
# find
# find
# find
# find
un tamao inferior a 100k.
N
ot
a:
R
e
c
u
er
d
e
q
u
e
e
n
L
in
u
x
to
d
o
es
u
n
ar
c
hi
v
o,
p
or
ej
e
m
pl
o,
lo
s
c
o
m
a
n
d
o
s
s
o
n
ar
c
hi
v
o
s
ej
e
c
ut
a
bl
es
.
Quines estn en el sistema?
Una vez que algn usuario se
encuentra dentro de un sistema
Linux/UNIX, puede saber quien
ms est usando el sistema con
uno de los siguientes comandos:
who [opciones]
Este comando, utilizado sin
opciones, lista el nombre del
usuario, la terminal que est
usando, y la hora en que el
usuario entr. Las diferentes
opciones de este comando
despliegan ms informacin
acerca de los usuarios que estn
actualmente dentro del sistema.
Alguna informacin disponible
mediante opciones es, por
ejemplo, la cantidad de tiempo
que ha pasado desde que esa
terminal ha tenido actividad, el
identificador de procesos (PID)
del proceso de login,
comentarios e informacin de
salida. Ejemplo:
# who
root
root
tty1
tty2
May 20 19:54
May 20 19:53
root
tty3
May 20 19:56
Nos muestra que el
administrador (root) est
conectado en las terminales
tty1, tty2 y tty3 el 20 de
Mayo a las 19:54, 19:53 y
19:56.
El comando w nos muestra todos
los usuarios que estn
conectados, a diferencia del
comando who este da mucha
ms informacin como por
ejemplo: en que consola est
logueado, a que hora entr, que
est ejecutando, etc. Ejemplo:
# w
9:53am
USER
alexa
up 3 days, 16:17, 2 users, load average: 0.00, 0.00, 0.00
TTY
FROM
LOGIN@
IDLE
JCPU
PCPU WHAT
tty2
- 9:24am
0.00s
0.11s
0.05s
w
root
Quin soy?
E
s
t
e
c
o
m
a
n
d
o
m
u
e
s
t
r
a
q
u
i
e
n
e
s
s
o
m
o
s
(
c
o
n
q
u
u
s
u
a
r
i
o
e
s
t
tty3
9:25am
26.11
0.06s
0.06s
-bash
a
m
o
s
l
o
g
u
e
a
d
o
s
)
.
E
j
e
m
p
l
o
:
#
w
h
o
a
m
i
r
o
o
t
Enlace de archivos
El comando ln nos permite
establecer enlaces duros y
enlaces dbiles o simblicos. El
formato general de ln es el
siguiente:
# ln
archivo_original
archivo_nuevo
Con la opcin s, crea un enlace
simblico en lugar de un enlace
duro.
Ejemplo:
# ln s /home/pepe
pepe
# ls l pepe
lrwxrwxrwx
1
pepe
pepe
9
May 11 2oo3 18:16
pepe -> /home/pepe
N
ot
a:
R
e
c
u
er
d
e
q
u
e
e
n
es
te
c
a
p
tu
lo
y
a
vi
m
o
s
la
di
fe
re
n
ci
a
e
nt
re
h
a
r
d
li
n
k
s
y
s
y
m
b
ol
ic
li
n
k
s.
Espacio en disco:
df [opciones]
El comando df se utiliza para
ver el espacio libre y ocupado
que tengo en el/los disco(s), pero
slo en las unidades mapeadas,
es decir en cada particin que
tengo, y a su vez, est montada.
Este comando permite utilizar
opciones, entre ellas tenemos:
Muestra la
salida en bytes, como
bloques de 1024.
-k
M
u
e
s
t
r
a
l
a
s
a
l
i
d
a
e
n
m
e
g
a
b
y
t
e
s
c
o
m
o
b
l
o
q
u
e
s
d
e
1
0
4
8
5
7
6
.
i
M
u
e
s
t
r
a
l
a
i
n
f
o
r
m
a
c
i
n
d
e
i
n
o
d
o
s
e
n
l
u
g
a
r
d
e
b
l
o
q
u
e
s
.
Imprime los
tamaos en formato
legible (ej.: 1K 234M
2G)
-h
Ejemplos:
# df
Filesystem
/dev/md7
/dev/md6
/dev/md1
none
/dev/md4
/dev/md0
/dev/md2
/dev/md3
1k-blocks
9732968
29621
4031616
127920
2015440
7055096
3023504
3023504
Used
Available
2122856
7115696
10579
17513
42064
784756
0
127920
34032
1879028
3334440
3362268
340376
2529544
199608
2670312
# df -h
Filesystem
/dev/md7
/dev/md6
/dev/md1
none
/dev/md4
Size
9.3G
29M
3.8G
125M
1.9G
Used
2.1G
11M
42M
0
34M
Avail
6.7G
17M
3.6G
124M
1.7G
Use%
23%
38%
2%
0%
2%
/dev/md0
6.7G
3.2G
3.2G
50%
Premiere IT S.R.L.
Pgina 61
Use% Mounted on
23%
/
38%
/boot
2%
/home
0%
/dev/shm
2%
/tmp
50%
/usr
12%
/var
7%
/www
Mounted on
/
/boot
/home
/dev/shm
/tmp
/usr
LOC: Linux Original Courseware
/dev/md2
/dev/md3
Espacio en disco (disk usage):
Este comando informa la
-k
-b
-m
-h
-s
cantidad de espacio que ocupa el
directorio especificado, con los
subdirectorios, si los tuviera, y
los archivos contenidos.
Si uso du sin
argumentos muestra el
espacio ocupado por el
directorio actual, o sea
donde estoy parado.
Las opciones pueden
ser:
M
u
e
s
t
r
a
l
a
s
a
l
i
d
a
e
n
k
b
y
t
e
s
,
c
o
m
o
2.9G
2.9G
333M
195M
2.4G
2.5G
12%
7%
du [opciones] [ficheros | directorios]
/var
/www
b
l
o
q
u
e
s
d
e
1
0
2
4
.
M
u
e
s
t
r
a
l
a
s
a
l
i
d
a
e
n
b
y
t
e
s
M
u
e
s
t
r
a
l
a
s
a
l
i
d
a
e
n
m
e
g
a
b
y
t
e
s
c
o
m
o
b
l
o
q
u
e
s
d
e
1
0
4
8
5
7
6
.
I
m
p
r
i
m
e
l
o
s
t
a
m
a
o
s
e
n
f
o
r
m
a
t
o
l
e
g
i
b
l
e
(
e
j
.
:
1
K
2
3
4
M
2
G
)
M
u
e
s
t
r
a
s
o
l
o
p
a
r
a
e
l
a
r
g
u
m
e
n
t
o
d
a
d
o
,
n
o
p
a
r
a
s
u
s
s
u
b
d
i
r
e
c
t
o
r
i
o
s
.
Ejemplo:
#
du
s
b
/
h
o
m
e
/
j
o
s
e
1
6
3
8
4
/
h
o
m
e
/
j
o
s
e
#
du
s
b
/
h
o
m
e
/
m
a
r
i
a
3
6
8
6
4
/
h
o
m
e
/
m
a
r
i
a
Procesos
Un proceso es una instancia de
un programa en ejecucin y
tambin la unidad bsica de
planificacin en Linux/UNIX.
Lo consideraremos como un
programa en ejecucin. Tanto
bajo GNU/Linux como en Unix
en general, cada programa en
ejecucin se compone de al
menos, un proceso. Desde el
punto de vista del sistema
operativo, cada proceso es
independiente del resto. Al
menos
que
se
le
diga
especficamente que comparta
recursos con otros procesos, un
proceso est confinado a la
asignacin de memoria y CPU
que se le ha hecho. Los procesos
que se exceden en su asignacin
de
memoria
(que
podra
corromper a otros programas en
ejecucin y hacer el sistema
inestable)
mueren
inmediatamente.
Las
aplicaciones de usuarios no
pueden
corromper
otros
programas de usuarios o de
sistema operativo.
Listar procesos:
ps [opciones]
Este comando lista todos los
procesos del sistema, su estado,
tamao, nombre, propietario,
tiempo de CPU, tiempo de reloj
y otros. Sin argumentos muestra
el identificador de proceso (PID)
de la shell sobre la que se est
ejecutando, y tambin el propio
PID del comando ps lanzado.
$ ps
PID TTY TIME CMD
45 pts/0 00:00:00
bash
84 pts/0 00:00:00
ps
Tiene mltiples opciones, las
ms usadas son:
-a Muestra todos
los procesos con
consola
controlada,
excepto el proceso
de usuario actual.
-r Muestra solo
los procesos en
ejecucin.
x
M
u
e
s
t
r
a
l
o
s
p
r
o
c
e
s
o
s
q
u
e
n
o
t
i
e
n
e
n
u
n
a
t
e
r
m
i
n
a
l
c
o
n
t
r
o
l
a
d
a
.
u
M
u
e
s
t
r
a
l
o
s
p
r
o
p
i
e
t
a
r
i
o
s
d
e
l
o
s
p
r
o
c
e
s
o
s
.
f
V
i
s
u
a
l
i
z
a
l
a
s
r
e
l
a
c
i
o
n
e
s
p
a
d
r
e
/
h
i
j
o
e
n
t
r
e
l
o
s
p
r
o
c
e
s
o
s
.
l
P
r
o
d
u
c
e
u
n
l
i
s
t
a
d
o
e
n
f
o
r
m
a
t
o
l
a
r
g
o
.
Muestra los
parmetros de la lnea de
comandos de los procesos
(hasta media lnea).
-w
-ww Muestra todos los
parmetros de la
lnea de
comandos de los
procesos,
independientem
ente de su
longitud.
Ejemplo:
# ps aux | more
%MEM
VSZ
RSS TTY STAT START TIME COMMAND
USER
PID %CPU
root
1
0.5
0.3
1368 476
?
S
19:43 0:0
init
root
2
0.0
0.0
0
0
?
SW
19:43 0:00 [keventd]
root
3
0.0
0.0
0
0
?
SW
19:43 0:00 [kapmd]
root
root
root
root
root
root
root
root
root
root
root
root
root
named
named
named
named
named
root
root
4
5
6
7
8
12
91
186
187
188
563
568
624
678
680
681
682
683
703
723
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.4
0.3
0.3
1.8
1.8
1.8
1.8
1.8
0.7
0.8
0
0
0
0
0
0
0
0
0
0
1428
1364
1360
10400
10400
10400
10400
10400
2212
2400
0
0
0
0
0
0
0
0
0
0
560
444
480
2368
2368
2368
2368
2368
924
1124
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
SWN
SW
SW
SW
SW
SW
SW
SW
SW
SW
S
S
S
S
S
S
S
S
S
Ss+
19:43
19:43
19:43
19:4
19:43
19:43
19:43
19:44
19:44
19:44
19:44
19:44
19:44
19:44
19:44
19:44
19:44
19:44
19:44
19:44
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
[ksoftirqd_CPU0]
[kswapd]
[bdflush]
[kupdated]
[mdrecoveryd]
[kjournald]
[khubd]
[kjournald]
[kjournald]
[kjournald]
syslogd m 0
klogd -x
usr/sbin/apmd -p
named -u named
named -u named
named -u named
named -u named
named -u named
xinetd -stayalive
/bin/sh /usr/bin/
root
760
0.0
0.3
1400
452
19:44
0:00 gpm -t ps/2 -m /d
Veamos la primera lnea de la
salida que nos muestra los
ttulos de las columnas del
listado. Su significado es el
siguiente:
USER
El propietario de cada proceso.
PID
El numero de identificacin del proceso.
%CPU
Porcentaje de CPU ocupado por el proceso. Aclaracin: Para un sistema con varios
procesadores, esta columna puede tener un valor mayor del 100%.
%MEM
Porcentaje de memoria ocupada por el proceso.
VSZ
Cantidad de memoria virtual ocupada por el proceso.
RSS
Cantidad de memoria residente ocupada por el proceso.
TTY
La consola controlada por el proceso. Un signo de interrogacin en esta columna significa
que no est conectada a ninguna terminal.
STAT
El estado del proceso. Y pueden ser:
S
El
pr
oc
es
o
est
do
rm
id
o.
To
do
s
los
pr
oc
es
os
pr
ep
ara
do
s
pa
ra
eje
cut
ars
e.
El
pr
oc
es
o
est
act
ual
me
nte
en
CP
U.
El
pr
oc
es
o
est
ha
cie
nd
o
tra
za
s
po
r
un
de
pu
ra
do
r o
de
bu
gg
er,
o
ha
sid
o
p
ar
a
d
o.
El
pr
oc
es
o
est
z
o
m
bi
e.
Es
to
sig
nif
ica
un
a
de
las
sig
uie
nte
s:
1.
E
l
p
r
o
c
e
s
o
h
ij
o
m
u
ri
y
e
l
p
r
o
c
e
s
o
p
a
d
r
e
n
o
ti
e
n
e
c
o
n
o
c
i
m
i
e
n
t
o
d
e
l
a
m
u
e
rt
e
d
e
s
u
h
ij
o
.
U
s
a
l
a
ll
a
m
a
d
a
a
l
s
i
s
t
e
m
a
w
a
it
.
2.
E
l
p
a
d
r
e
f
u
e
m
u
e
rt
o
i
n
a
p
r
o
p
i
a
d
a
m
e
n
t
e
,
y
h
a
s
t
a
q
u
e
e
l
p
a
d
r
e
n
o
e
s
t
m
u
e
rt
o
c
o
m
p
l
e
t
a
m
e
n
t
e
,
e
l
p
r
o
c
e
s
o
i
n
i
t
n
o
p
u
e
d
e
li
b
e
r
a
r
a
l
p
r
o
p
i
o
hijo. Un
proceso
zombie
indica
normalme
nte un
software
mal
escrito.
La
e
n
t
r
a
d
a
S
T
A
T
p
u
e
d
e
t
o
m
a
r
p
a
r
a
c
a
d
a
p
r
o
c
e
s
o
u
n
o
d
e
l
o
s
s
i
g
u
i
e
n
t
e
s
m
o
d
i
f
i
c
a
d
o
r
e
s
:
W
N
o
r
e
s
i
d
e
n
p
g
i
n
a
s
e
n
l
a
m
e
m
o
r
i
a
.
<
P
r
o
c
e
s
o
d
e
p
r
i
o
r
i
d
a
d
a
l
t
a
.
N
P
r
o
c
e
s
o
d
e
p
r
i
o
r
i
d
a
d
b
a
j
a
.
L
Pgina
s en
memor
ia
bloque
adas
(norm
alment
e
signifi
ca la
necesi
dad de
funcio
nalida
d en
tiempo
real).
s
proces
o en la
consol
a
actual
+
pr
oc
es
o
en
for
eg
ro
un
d
Fecha en
que el proceso arranc.
TIME
Cantidad de
tiempo que el proceso
ha gastado de CPU.
COMMAND Nombre del
comando y sus
parmetros.
START
Mostrar una lista interactiva
de procesos:
top
E
l
p
r
o
g
r
a
m
a
p
s
e
s
e
s
t
t
i
c
o
,
n
o
s
m
u
e
s
t
r
a
e
l
l
i
s
t
a
d
o
d
e
l
o
s
p
r
o
c
e
s
o
s
e
n
e
l
m
o
m
e
n
t
o
p
e
d
i
d
o
.
E
n
c
a
m
b
i
o
,
t
o
p
e
s
d
i
n
m
i
c
o
,
v
a
r
e
f
r
e
s
c
a
n
d
o
e
l
l
i
s
t
a
d
o
c
a
d
a
u
n
a
c
i
e
r
t
a
c
a
n
t
i
d
a
d
s
e
g
u
n
d
o
s
.
E
l
c
o
m
a
n
d
o
t
o
p
e
s
u
n
a
v
e
r
s
i
n
i
n
t
e
r
a
c
t
i
v
a
d
e
l
p
s
.
# top
E
s
t
o
e
s
l
o
q
u
e
m
u
e
s
t
r
a
e
n
p
a
n
t
a
l
l
a
N
ot
a:
E
s
c
o
n
v
e
ni
e
nt
e
q
u
e
s
ol
o
r
o
o
t
te
n
g
a
p
er
m
is
o
p
ar
a
la
ut
ili
z
a
ci
n
d
e
es
te
c
o
m
a
n
d
o,
y
a
q
u
e
si
v
ar
io
s
u
s
u
ar
io
s
lo
c
or
re
n,
se
ra
le
nt
iz
a
el
si
st
e
m
a.
R
e
c
u
er
d
e
c
o
m
o
q
ui
ta
r
p
er
m
is
o
s.
# chmod
0700
/usr/bin
/top
Unos prrafos arriba, cuando
explicamos los procesos
zombies hablamos de
seales. Ahora vamos a
tratar de que se entienda
mejor. Tenemos que ver las
formas de comunicacin
entre procesos.
Pueden ser varias, entre ellas
tenemos:
A travs de variables de
entorno: solo es posible
de padres a hijos.
Mediante una seal:
solo indica que algo ha
ocurrido y solo lleva
como informacin un
nmero de seal.
Mediante
entrada
salida: es la forma ms
corriente a nivel de
shell.
Ya
hemos
comentado el operador
pipe '|' que conecta dos
procesos.
Mediante tcnicas IPC u
otras: Semforos,
Memoria compartida, Colas
de mensajes.
Mediante sockets: este
sistema
tiene
la
peculiaridad de que
permite
comunicar
procesos que estn
funcionando en
mquinas distintas.
No profundizamos sobre esto
porque ahora no estamos
interesados en la programacin.
Ms adelante si comentaremos
bastante sobre variables y
entrada salida porque daremos
nociones de programacin en
shell-script.
Envo de una seal a un
proceso
Al comando kill se le
pasa un nmero de
seal. Si no se
hace, la seal por
defecto es TERM, la
nmero 15. kill
[n] nro_pid
Donde n representa un nmero
de seal y nro_ pid es el
nmero del proceso al que quiero
mandarle la seal. La seal
Hang-Up, que es la nmero 1, se
utiliza para decirle a algunos
servidores de aplicaciones que
relean
sus
archivos
de
configuracin. Con la opcin l
en el comando kill nos muestra
todas las seales que hay con
una breve descripcin y el
nmero de seal. Para ver las
seales de las que disponemos,
hacemos:
# kill -l
1)
5)
9)
13)
SIGHUP
SIGTRAP
SIGKILL
SIGPIPE
2) SIGINT
6) SIGABRT
10) SIGUSR1
14) SIGALRM
3)
7)
11)
15)
SIGQUIT
SIGBUS
SIGSEGV
SIGTERM
4)
8)
12)
17)
SIGILL
SIGFPE
SIGUSR2
SIGCHLD
18)
22)
26)
30)
34)
38)
42)
46)
SIGCONT
SIGTTOU
SIGVTALRM
SIGPWR
SIGRTMIN+2
SIGRTMIN+6
SIGRTMIN+10
SIGRTMIN+14
19) SIGSTOP
23) SIGURG
27) SIGPROF
31) SIGSYS
35) SIGRTMIN+3
39) SIGRTMIN+7
43) SIGRTMIN+11
47) SIGRTMIN+15
20)
24)
28)
32)
36)
40)
44)
48)
SIGTSTP
SIGXCPU
SIGWINCH
SIGRTMIN
SIGRTMIN+4
SIGRTMIN+8
SIGRTMIN+12
SIGRTMAX-15
21) SIGTTIN
25) SIGXFSZ
29) SIGIO
33)SIGRTMIN+1
37)SIGRTMIN+5
41)SIGRTMIN+9
45)SIGRTMIN+13
49)SIGRTMAX-14
50) SIGRTMAX-13
54) SIGRTMAX-9
58) SIGRTMAX-5
51) SIGRTMAX-12
55) SIGRTMAX-8
59) SIGRTMAX-4
52) SIGRTMAX-11
56) SIGRTMAX-7
60) SIGRTMAX-3
53)SIGRTMAX-10
57) SIGRTMAX-6
61) SIGRTMAX-2
62) SIGRTMAX-1
63) SIGRTMAX
Generalmente usamos la palabra
kill para decir que vamos a
matar procesos. En realidad, lo
que hacemos es mandarle
seales al proceso. Un tipo de
seal s mata procesos, es decir,
los termina. La seal 9, es la
forma brutal de parar un proceso,
en lugar de pedirle que se pare,
el sistema operativo mata el
proceso.
Ejemplo:
# kill -9 PID
Esto lo que hace es terminar
completamente con la ejecucin
de un proceso. Como ya dijimos,
el comando no mata procesos,
sino que enva seales a los
procesos en ejecucin.
El sistema operativo, por
defecto, proporciona a cada
proceso un conjunto estndar de
manejadores de seales para la
gestin de las seales entrantes.
Desde el punto de vista del
administrador, el manejador ms
importante es para las seales
nmero 9 y 15.
El comando kill requiere al
menos un parmetro, el nmero
de identificacin de proceso
(PID) que se muestra en el
comando ps. Cuando se pasa al
comando kill solamente el
PID, kill enva la seal 15.
Ejemplos:
# ps f
UID
PID
root
1736
root
1796
# kill 1736
PPID
1733
1736
E
n
C
0
0
STIME
19:48
19:50
TTY
pts/0
pts/0
TIME
CMD
00:00:00 bash
00:00:00 ps -f
es
te
ej
e
m
pl
o
m
a
n
d
a
la
se
al
1
5
al
P
I
D
1
7
3
6.
# kill -15 1736
d
e
m
al
a
nt
er
io
r.
# kill -15 `cat
/var/run/named.pid
`
d
e
m
a
la
e
x
pl
ic
a
ci
n
a
nt
er
io
r,
e
n
el
di
re
ct
or
io
/
v
a
r
/
r
u
n
es
t
n
lo
s
n
o
m
br
es
d
e
lo
s
d
e
m
o
ni
o
s
q
u
e
es
t
n
c
or
ri
e
n
d
o
c
o
n
s
u
n
m
er
o.
Control de Procesos
Control de procesos se refiere a
la habilidad de poner procesos en
background (segundo plano) y
traerlos de vuelta al foreground
(primer plano). Esto es como
decir, que se quiere ser capaz de
ejecutar algo mientras se hacen
otras cosas, pero que estn ah
otra vez cuando se les quiera
decir algo o pararlos. En
Linux/Unix,
la
principal
herramienta para el control de
procesos es la shell, seguir la
pista de los procesos por Ud., si
se aprende como hablar su
lenguaje.
Las
dos
palabras
ms
importantes en ese lenguaje son
fg, para primer plano, y bg, para
segundo plano. Para entender
como funcionan, usaremos como
ejemplo el comando yes en el
indicador del sistema.
$ yes
Esto produce el maravilloso
efecto de desplazar una larga
columna de yes por la parte
izquierda de la pantalla, tan
rpido que no se pueden seguir.
Hay buenas razones para que
este extrao comando exista.
Ciertos comandos esperan una
confirmacin, un "si" ([y]es en
ingls) a una pregunta. El
comando yes permite al
programador automatizar la
respuesta a esas preguntas. Para
pararlo, se podra pulsar
Control+C y matarlo, pero esta
vez Ud. oprimir Control+Z.
Parece haberse detenido, pero
habr un mensaje antes del
indicador de sistema, ms o
menos parecido a este:
[1]+ Stopped yes
Significa que la tarea yes se ha
suspendido en el segundo plano.
Se puede hacer que siga
ejecutndose tipeando fg en el
indicador de sistema, que lo
pondr en primer plano otra vez.
Si se desea, se pueden hacer otras
cosas
antes, mientras est
suspendido. Pruebe unos cuantos
ls o algo antes de ponerlo en
primer plano nuevamente. Una vez
que ha vuelto al primer plano, las
yes empezarn a salir otra vez, tan
rpido como antes.
No hay que preocuparse de que
si mientras ha estado suspendido
ha "almacenado" ms yes para
enviarlas a la pantalla, cuando un
trabajo se suspende, el programa
entero no se ejecuta hasta que se
lo vuelva de vuelta a la vida.
Ahora pulse Control-C para
matarlo de verdad.
Pongamos aparte el mensaje que
obtuvimos del shell:
[1]+ Stopped yes
El nmero entre corchetes es el
nmero de trabajo de este
proceso, y se usar cuando se
necesite
referenciarlo
especficamente. (Naturalmente,
desde el momento que tengamos
en ejecucin mltiples trabajos,
se necesita un
modo de acceder a cada uno). El
"+" siguiente indica que se es
el "trabajo actual", esto es, el
proceso ms reciente que se ha
movido del primer plano al
segundo.
Si tipeara fg, se pondra el
trabajo con el "+" en primer
plano otra vez. La palabra
Stopped significa que el
trabajo est parado. El trabajo
no
est
muerto,
pero
actualmente no se ejecuta. Linux
lo ha guardado en un estado
especial de suspendido, listo
para saltar a la accin cuando
alguien lo solicite. Finalmente,
el yes es el nombre del trabajo
que se ha detenido. Antes de
seguir adelante, matemos este
trabajo y lo arrancamos otra vez
de forma diferente.
$ kill %1
[1]+ Stopped yes
Ese mensaje sobre el proceso
que indica "parado" otra vez
induce a error. Para saber si an
est vivo (eso es, tanto en
ejecucin como congelado en un
estado suspendido), tipee jobs:
$ jobs
[1]+ Terminated
yes
Ahora ya lo sabe: el trabajo ha
terminado!
N
ot
a:
E
s
p
os
ib
le
q
ue
el
co
m
an
d
o
j
o
b
s
n
o
m
ue
st
re
na
da
,
lo
q
ue
si
m
pl
e
m
en
te
si
g
ni
fi
ca
q
ue
n
o
ha
y
tr
ab
aj
os
ej
ec
ut
n
d
os
e
en
se
g
u
n
d
o
pl
an
o.
Si
se
ac
ab
a
de
m
at
ar
u
n
tr
ab
aj
o,
y
al
ti
pe
ar
j
o
b
s
n
o
m
ue
st
ra
na
da
,
se
ti
en
e
la
se
g
ur
id
ad
de
q
ue
el
co
m
an
d
o
k
i
l
l
se
ha
ej
ec
ut
ad
o
co
rr
ec
ta
m
en
te.
N
or
m
al
m
en
te
in
di
ca
r
q
ue
el
tr
ab
aj
o
ha
te
r
m
in
ad
o.
Ahora,
e
j
e
c
u
t
e
y
e
s
e
n
u
e
v
o
,
d
e
e
s
t
a
f
o
r
m
a
:
$
y
e
s
>
/
d
e
v
/
n
u
l
l
Si lee la seccin sobre la
redireccin de entrada y salida,
sabr que se est enviando la
salida de yes a un archivo
especial llamado /dev/null.
/dev/null es un agujero negro
que come cualquier salida que
se le enve, es como un
recolector de basura, es como la
nada, como mandarlo a ningn
lado.
Despus de tipear esto, no se
recuperar el indicador de
sistema, pero tampoco saldr esa
columna de yes. Sin embargo la
salida se est enviando a
/dev/null, el trabajo an se
ejecuta en primer plano. Como
siempre, se puede suspender
pulsando Control-Z. Hgalo
ahora para volver al indicador
del sistema.
$ yes > /dev/null
[
A
q
u
y
e
s
se
es
t
ej
ec
ut
an
d
o,
y
al
p
ul
sa
r
C
o
nt
r
ol
Z
ve
r
lo
si
g
ui
en
te
]
[1]+ Stopped yes
>/dev/null
$
Hmm... Hay alguna forma de
ponerlo en ejecucin en segundo
plano, mientras deja el indicador
del sistema para trabajar de
forma interactiva? El comando
para hacer eso es bg:
$ bg
[1]+ yes
>/dev/null &
$
Ahora, despus de tipear bg, la
tarea yes > /dev/null habr
continuado con su ejecucin
otra vez, pero esta vez en
segundo plano. De hecho, si
hace alguna cosa en el prompt,
como ls u otros, se dar cuenta
que su mquina se ha
ralentizado un poco (Generar y
descargar continuamente una
cadena preparada de yes lleva
algo de tiempo, al fin y al cabo!)
Aparte de esto, no hay ningn
otro efecto. Se puede hacer lo
que se desee en el indicador del
sistema, y yes continuar
felizmente enviando su salida al
agujero negro.
Ahora hay dos formas diferentes
de matarlo: con el comando
kill que ya se explic, o
poniendo el trabajo en primer
plano de nuevo e interrumpirlo
con una interrupcin, ControlC. Probemos la segunda forma,
slo para entender la relacin
entre fg y bg un poco mejor;
$ fg
yes >/dev/null
Ahora
est
en
primer
plano.
Pulsan
do
Contr
ol-C
para
termin
arlo:
Se
acab.
Ahora, ejecute el siguiente
comando:
$ yes > /dev/null &
[1] 1024
(& = ampersand)
Nota: Poner un & despus del comando indica al shell que el trabajo se
ejecute en segundo plano desde el momento en que se inicia. (Es una forma
de evitarse tener que ejecutar el programa, pulsar Control-Z, y luego teclear bg.)
Tabla Resumen
Comando
fg %n_trabajo
&
bg %n_trabajo
kill %n_trabajo PID
jobs
Control-C
Control-Z
Explicacin
Comando del shell que devuelve un trabajo al primer plano. Para saber cul es
ste por defecto, se tipea jobs y se busca el que tiene el +.
Parmetros: nmero de trabajo opcional. El trabajo por defecto se identifica
con el +.
Cuando se aade un & al final de la lnea de comandos, indica al comando que
se ejecute en segundo plano automticamente. Este trabajo est entonces sujeto
a todos los mtodos usuales para el control de tareas aqu detallados.
Este es un comando del shell que manda a un trabajo suspendido ejecutarse en
segundo plano. Para saber cual es ste por defecto, se tipea jobs y se busca el
que tiene el +.
Parmetros: nmero de trabajo opcional. El trabajo por defecto se identifica
con el +.
Comando del shell que obliga a un trabajo en segundo plano, ya sea suspendido
o en ejecucin, a terminar. Se debe siempre especificar el nmero de trabajo o
PID, y si se estn usando nmeros de trabajo, no hay que olvidar poner el %.
Parmetros: El nmero de trabajo (a continuacin del %) o el PID (no es
necesario el %). Se puede especificar ms de un proceso o trabajo en una lnea.
Este comando del shell lista informacin sobre los trabajos que estn en ese
momento en ejecucin o suspendidos. A veces tambin dice cules son los que
acaban de salir o han terminado.
Este es el carcter genrico de interrupcin. Normalmente, si se pulsa mientras
un programa se est ejecutando en primer plano, matar al programa (puede
que haya que hacerlo varias veces). Sin embargo, no todos los programas
respondern a este mtodo de terminacin.
Esta combinacin de teclas normalmente suspende un programa, puede que
algunos programas lo ignoren. Una vez suspendido, el trabajo se puede
reiniciar en el segundo plano o se puede matar.
Nota: Es importante entender que el control de procesos lo hace el shell. No hay ningn programa en el
sistema llamado fg; por eso, fg, bg, & y jobs son internos al shell. Esto es una forma lgica de hacerlo: ya que cada
usuario quiere su propio espacio de control de tareas, y cada usuario ya tiene su propio shell, es ms fcil que el
shell siga la pista de los trabajos usuario. Por otro lado, cada nmero de trabajo de usuario slo tiene significado
para ese usuario: mi trabajo nmero [1] y su trabajo nmero [1] son probablemente dos procesos totalmente
diferentes. De hecho, si se est conectado ms de una vez, cada uno de los shells tendr datos nicos sobre el
control de trabajos, as como tambin un usuario puede tener dos trabajos diferentes con el mismo nmero
ejecutndose en dos shells diferentes.