Вы находитесь на странице: 1из 17

PRÁCTICAS DE REDES DE ÁREA LOCAL

PRÁCTICA 4: ADMINISTRACIÓN DE UN SISTEMA LINUX

OBJETIVOS
Ahora que ya conocéis los comandos básicos de Linux, los comandos para los usuarios normales, es momento de
empezar a trabajar como administradores con el sistema, creando y eliminando usuarios, dándoles permisos y
configurando el sistema para adaptarlo a sus necesidades.
Otro aspecto importante es saber consultar qué procesos hay en el sistema y saberlos eliminar si es necesario.
También veremos cómo acceder a dispositivos de almacenamiento y cómo configurar el gestor de arranque, LILO,
para lograr más opciones o rescatar un sistema que no arranca.

REQUISITOS PREVIOS
Tener un sistema Linux instalado, tener soltura con los comandos más habituales (práctica 2) y no haber perdido la
contraseña de root.
Es importante recordar que con Alt+F1, +F2, etc., disponemos de varias consolas virtuales

ACTIVIDADES DE LA PRÁCTICA

Actividad 1. Creación y eliminación de usuarios


Las medidas de seguridad en Linux, como en la mayoría de SOs, se basan en la definición de usuarios y la
asignación de derechos y restricciones a estos usuarios.
En Linux el fichero /etc/passwd contiene la información de los usuarios del sistema. Está compuesto por líneas
como la siguiente, de forma que cada línea representa a un usuario:
usuario:contraseña:uid:gid:comentario:origen:shell
§ usuario: es el nombre de usuario con el que accederá al sistema y se identificará (el que se pone en el login,
como por ejemplo “root”). Como máximo conviene que tenga 8 caracteres.
§ contraseña: la contraseña del usuario, aunque encriptada, ya que el fichero /etc/passwd lo pueden leer todos
los usuarios.
§ uid: user identifier. Un número que identifica al usuario, y es la forma con que Linux identifica internamente a
un usuario, aunque nosotros no lo podemos utilizar directamente a no ser que el comando nos dé opción a
ello.
§ gid: group identifier. Un número que identifica un grupo (los grupos están definidos en /etc/group, más
adelante hablaremos de ellos) y aquí indica cuál es el grupo primario de un usuario (un usuario puede
pertenecer, de forma secundaria, a otros grupos).
§ comentario: texto libre, que generalmente es el nombre real del usuario o una descripción breve.
§ origen: cuál es el directorio origen del usuario (normalmente /home/usuario).
§ shell: qué shell (intérprete de comandos) utilizará el usuario por defecto. Suele ser /bin/bash.

Hay que tener en cuenta que, además de los usuarios que hayamos definido nosotros, en Linux hay usuarios
predefinidos (que son con los que trabajan algunas aplicaciones o servidores). Los usuarios normales tienen un
uid más alto que los del sistema (típicamente a partir de 500). root siempre es el usuario 0.
Como medida de seguridad, generalmente en /etc/passwd no están las contraseñas encriptadas sino que en su lugar
hay una x; las contraseñas encriptadas están en el fichero /etc/shadow, que es una réplica de /etc/passwd pero
con las contraseñas encriptadas, y además sólo root puede acceder a él (observaréis que en /etc/shadow sólo se
utilizan los campos usuario y contraseña). De esta forma los usuarios normales pueden ver qué usuarios hay en
el sistema pero sólo root puede añadir usuarios.

Práctica 3 de redes de área local: Administración de un sistema Linux 1


adduser (useradd): añadir usuario
El programa real es useradd, pero suele haber un enlace (o sea, una especie de alias) llamado adduser que es más
legible. Ambos están en /usr/bin; conviene ir familiarizándose con la estructura de directorios de Linux. Este
programa permite añadir un usuario al sistema.
Lo que hace es añadir una línea para el usuario en /etc/passwd, otra en /etc/shadow, crear su directorio origen y
copiar en éste una serie de ficheros de configuración básicos. Sólo puede ejecutarlo root.
La sintaxis básica es adduser [opciones] usuario:
adduser pepito # Crea el usuario pepito
adduser -g asi1t manolito # Crea el usuario manolito y lo asigna al
# grupo asi1t

Opción Utilidad
-c comentario Permite indicar el campo comentario*.
-d dirOrigen Indica el directorio origen del usuario (por defecto será /home/usuario).
-e AAAA-MM-DD Fecha en la que se desactivará la cuenta del usuario.
-g grupo Grupo primario del usuario. Podemos indicar el nombre del grupo o su
gid**.
-G Grupos secundarios del usuario, separados por comas. Son grupos a los que
grupo1[,grupo2...] también pertenece y por tanto disfruta de su privilegios.
-m Crea el directorio origen del usuario y recrea en él la estructura de ficheros y
directorios que haya en /etc/skel***.
-M No crea directorio origen aunque tengamos CREATE_HOME yes.
-n No crea un grupo con el mismo nombre del usuario. Si no se especifica
grupo (-g), entonces por defecto el usuario pertenecerá al grupo users.
-r Crea una cuenta del sistema (uid<UID_MIN, otra constante de
/etc/login.defs), o sea, con uid pequeño. Normalmente se reservan para
propósitos especiales. Con esta opción, si no se especifica -m no se creará
directorio origen.
-p contraseña Permite indicar la contraseña del usuario, aunque debe estar ya encriptada
(la función de C crypt() permite crear programas que encripten las
contraseñas). Si no se indica contraseña, la cuenta estará desactivada.
-s shell Qué shell tendrá el usuario. Por defecto suele ser /bin/bash.
-u uid Permite especificar el uid del usuario (si no existe ya). Lo habitual es dejar
que el sistema lo asigne.
-D Muestra qué valores por defecto hay en /etc/default/useradd (fichero que
contiene opciones de configuración de useradd).

* Si queremos escribir un parámetro, nombre de fichero, opción, etc. con espacios enmedio podemos hacerlo
escribiéndolo entre comillas dobles: adduser -c “José Pérez” pepito. Ésta no es una característica exclusiva de
adduser, sino de bash, así que se puede usar con cualquier programa o comando.
** Si no se especifica un grupo primario, se crea un grupo con el nombre del usuario, que será su grupo primario
(si creamos al usuario jvalls, entonces creará un nuevo grupo jvalls, o lo asignará si ya existe).
*** Existe un fichero de configuración, /etc/login.defs, que controla las opciones por defecto en la creación de
usuarios. Por ejemplo, esta opción se rige por la constante CREATE_HOME, que puede valer yes o no y que
determina que esta opción se ejecute por defecto o sea necesario especificarla.

7 Cread el usuario pr3. Cambiad a otra consola e intentad entrar con este usuario. ¿Podéis? ¿Por qué no?
(Cuando creais un usuario no tiene contraseña conocida, así que antes de poder entrar con él hay que dársela,
utilizando el comando passwd que se explica a continuación).

passwd: cambiar contraseña de usuario


Con este comando podemos cambiar la contraseña de un usuario, activarlo cuando lo acabamos de crear y
desactivarlo cuando no queremos que acceda al sistema pero no queremos perder su información. Este
comando lo puede utilizar un usuario para cambiar su contraseña (no la de otros usuarios, claro) y root para
cambiar la de todos los usuarios.

Algunos ejemplos:
passwd # Cambia la contraseña del usuario actual. Pide la
# contraseña actual y dos veces la nueva.

2 Centre d’estudis politècnics 2002-2003


passwd pepito # Cambia la contraseña del usuario pepito (debemos ser root
# o pepito para poder hacer esto).

Observaréis que no acepta bien cualquier tipo de contraseña: debe tener seis caracteres al menos, no ser una
palabra del diccionario, etc. De todas formas, cuando da el mensaje de “Bad password” realmente la acepta,
aunque avisa de que no es una buena contraseña. La sintaxis es passwd [opciones] [usuario].

Opción Utilidad
-d Borra la contraseña del usuario (la deja en blanco).
-l Bloquea el usuario (antepone algún signo a la contraseña).
-u Desbloquea el usuario
-f Aunque se dé una contraseña en blanco o “mala”, esta opción le obliga a
aceptarla.

7 Cambiad la contraseña de vuestro usuario habitual desde root. Entrad con el usuario y volvedle a poner la
contraseña inicial.
7 Si el único que puede escribir en /etc/shadow es root, ¿cómo puede un usuario normal cambiar su propia
contraseña? La respuesta, en la actividad de permisos.

userdel: borra un usuario


Este comando elimina un usuario del sistema (lo borra de los ficheros /etc/passwd y /etc/shadow). Si el usuario
está trabajando actualmente, puede seguir haciéndolo, pero cuando salga no podrá volver a entrar. Sólo tiene
una opción, que se muestra en los ejemplos:
userdel pepe # Borra el usuario pepe
userdel -r pepe # Borra el usuario pepe y su directorio origen

Este comando sólo puede ejecutarlo root.


También podemos eliminar usuarios eliminando manualmente las entradas correspondientes en /etc/passwd y
/etc/shadow y borrando su directorio origen. Si se ha creado un grupo especial para este usuario conviene
borrarlo también, con groupdel.
De ambas formas sólo borramos el directorio origen, pero un usuario puede tener más ficheros en el sistema; el
comando find permite encontrar los ficheros que pertenecen a un usuario o a un grupo, para poder eliminarlos
todos.
Hay que tener en cuenta que lo que realmente identifica a un usuario en el sistema es su UID, y los ficheros que
pertenecen a un usuario llevan su UID (y no su nombre de usuario). Si eliminamos un usuario, sus ficheros
quedan con el UID que tuviera (digamos el 520). Si más adelante se crea otro usuario con UID=520, pasará a
ser propietario de los ficheros del anterior usuario, lo que es un fallo evidente de administración. Por tanto, al
borrar un usuario hay que borrar también sus ficheros o asignarlos a algún usuario especial.

7 Borrad un usuario que no necesitéis (o cread uno expresamente). Comprobad que los ficheros y directorios
que poseía ahora no aparecen con un usuario/grupo, sino que sólo aparece el número. Utilizad la orden find
para encontrar los ficheros y directorios de /home/ que haya en esta situación y borrarlos.

usermod: modifica un usuario


Este comando permite modificar los datos básicos de la cuenta de un usuario, y por tanto tiene las mismas
opciones que useradd, a la que hay que añadir -l usuario para cambiar el nombre del usuario (el uid no se puede
cambiar, ya que es lo que realmente identifica al usuario).

Actividad 2. Gestión de grupos


El fichero /etc/group indica qué grupos hay en el sistema y qué usuarios pertenecen a ellos. Su estructura es muy
parecida a la de /etc/passwd pero tiene menos información:
grupo:contraseña:gid:miembros
§ grupo: nombre del grupo
§ contraseña: este campo no se suele utilizar, permite indicar una contraseña para el grupo de forma que se
pueda entrar en él aun no perteneciendo (usando el comando newgrp). En todo caso la contraseña encriptada
no estaría aquí, sino en el fichero /etc/gshadow, con el mismo objetivo que /etc/shadow. En la práctica estas
contraseñas no se utilizan.

Práctica 3 de redes de área local: Administración de un sistema Linux 3


§ gid: group identifier, número que identifica al grupo, y es el valor que utiliza Linux internamente. Los
gid<500 suelen estar reservados para grupos especiales del sistema (500 es un valor definido en /etc/login.defs
con el nombre de GID_MIN).
§ miembros: aquí se listan los usuarios que tienen este grupo como secundario (no los que lo tienen como
primario, que ya lo tienen apuntado en su fichero /etc/passwd).

Este fichero también es legible por todos los usuarios.

groups: a qué grupos pertenece un usuario


Este comando permite ver a qué grupos pertenecemos o a qué grupos pertenecen otros usuarios. Lo puede lanzar
cualquier usuario, y puede averiguar los grupos de cualquier otro usuario (al fin y al cabo ésa es información
que está en /etc/passwd y /etc/group, disponible para todos).
groups # Indica a qué grupos pertenece el usuario actual
groups pepe # A qué grupos pertenece pepe
groups pepe root mari # A qué grupos pertenecen pepe, root, mari

groupadd: crear grupo


Crea un nuevo grupo. La sintaxis es groupadd [opciones] grupo, y las opciones son:
Opción Utilidad
-g gid Obliga a que el grupo tenga un gid determinado.
-r Permite crear un grupo de sistema
(gid<GID_MIN).

groupdel: borrar grupo


Borra un grupo. No se puede borrar el grupo primario de un usuario; hay que eliminar primero el usuario en
cuestión (o cambiarlo de grupo primario) y después borrar el grupo.
Uso: groupdel grupo.

7 Cread la siguiente estructura de grupos y usuarios:


Grupo Usuario
Jesús
asi1t
Laura
Elena
asi2t
Marcos

7 Haced que pertenezcan también al grupo asi; incorporad a Jesús y Laura con comandos, y a Elena y Marcos
modificando los ficheros de configuración. Comprobadlo con la orden groups.
7 Laura ha aprobado todo primero así que tiene que pasar a asi2t como nuevo grupo principal. ¿Cómo lo haríais
mediante comandos? ¿Y modificando los ficheros de configuración?
7 ¿Por qué los ficheros de Laura siguen perteneciendo al grupo asi1t si Laura ha cambiado al asi2t? ¿Por qué no
pertenecen también al grupo asi, al que Laura también pertenece?
7 Eliminad los usuarios Marcos y Elena, que ya han aprobado segundo. Pero eliminad a Marcos con comandos
y a Elena modificando los ficheros de configuración.

Actividad 3. Trabajo con usuarios


Para poder practicar con las operaciones de gestión de usuarios y grupos, es importante conocer los siguientes
comandos de trabajo con usuarios: cambio del usuario actual, listado de usuarios conectados, etc.

su (set user): cambiar usuario actual


Aunque hayamos entrado en el sistema como cierto usuario, es posible que queramos trabajar temporalmente
como otro usuario (típicamente, que necesitemos lanzar una orden como root). Para esto tenemos el comando
su, que nos permite cambiar de usuario, trabajar con él, y volver con nuestro usuario mediante la orden exit.

4 Centre d’estudis politècnics 2002-2003


Hay que tener en cuenta que podemos anidar un su en otro, y tendremos que hacer tantos exit como sea
necesario.
su pepito # Cambia al usuario pepito
su # Cambia a root
Al cambiar a otro usuario pedirá su contraseña, salvo si el usuario actual es root (que puede convertirse en los
usuarios que quiera).
Si sólo queremos ejecutar un comando como otro usuario, se puede utilizar la opción -c. Por ejemplo, como
usuario normal queremos crear un nuevo usuario:
su -c “adduser nuevo” # Cambia a root, crea el usuario y vuelve
Es importante poner el comando entre comillas para que lo interprete como un único parámetro.

who: quién hay conectado al sistema


Muestra una lista de los usuarios conectados al sistema, concretamente su nombre, la terminal a la que está
conectada (recordemos que con Alt+Fn disponemos de varias terminales: tty1, tty2, etc.), la fecha y hora de
entrada, y si está conectado desde otro ordenador (mediante telnet, por ejemplo) o en una sesión de X-Window
(en estos casos, las terminales se llaman pts/0, pts/1, etc.), desde qué ordenador o servidor X (si todavía no
sabes qué son estos dos últimos programas pronto los estudiaremos).
Este comando lo puede ejecutar cualquier usuario:
$who
root tty1 01 05 15:32
pepe tty2 01 05 17:15
La opción -i añade otra columna que indica cuánto tiempo lleva inactivo ese usuario (o un . si ha trabajado en el
último minuto).
La opció -w (o --message) muestra si el usuario acepta mensajes de la orden write (que veremos a continuación).
Tras la información de cada usuario sale un + si los acepta, un - si no, y un ? si no se puede determinar (porque
no se encuentra su terminal).

Incluso permite un poco de filosofía para averiguar detalles sobre uno mismo: who am i.

Nota técnica: el fichero /var/run/utmp contiene información sobre los usuarios conectados al sistema, aunque no es
legible. En algunos sistemas, /var/run/wtmp contiene información sobre los usuarios que se han conectado al
sistema alguna vez.

write: escribir mensajes a otros usuarios


Cuando en un sistema hay varios usuarios conectados, pueden charlar entre ellos con esta orden. La sintaxis es
write usuario [terminal], o sea, a qué usuario queremos dirigirnos y, si está conectado por más de una terminal,
a cuál de ellas queremos hablarle (conviene consultar cuál es la que está utilizando con who -i).
También será necesario especificar la terminal si nos aparece el mensaje de que no tenemos permiso de escritura.

Si se consigue contactar con el usuario (que debe tener los mensajes habilitados, ver orden mesg y who -w),
entonces podrán intercambiar mensajes hasta que los dos escriban EOF (Ctrl+D).

Hay que tener en cuenta que los usuarios deberán estar conectados al mismo ordenador, bien físicamente
utilizando las consolas virtuales, bien por red utilizando telnet (que permite trabajar en un ordenador utilizando
el teclado y la pantalla de otro). Más adelante veremos el comando talk, que permite charlar entre distintos
ordenadores.

mesg: controla la recepción de mensajes


mesg nos permite indicar si queremos recibir mensajes de write (mesg y), si no queremos recibirlos (mesg n) o
simplemente consultar si actualmente los podemos recibir (mesg).

Actividad 4. Permisos
El sistema de seguridad en Linux tiene como parte fundamental la asignación de permisos para los diferentes
usuarios en ficheros y directorios. Veremos que se trata de un sistema muy detallado y aprenderemos a utilizar
los comandos más importantes para trabajar con permisos.

Cuando hacemos ls –l, nos aparece mucha más información sobre los ficheros y directorios. La primera columna
contiene algo como drwxr-xr-x ó -rw-r--r-- , y de estas diez letras la primera indica el tipo de elemento que se

Práctica 3 de redes de área local: Administración de un sistema Linux 5


está visualizando (d=directorio; -=fichero normal; l= enlace simbólico, que se explica más abajo; b=dispositivo
de bloques, como un disco; c=dispositivo de caracteres, como el teclado; p=FIFO con nombre (named pipe),
las tuberías que se utilizan para comunicar programas pero en versión súper; S=socket, que permite comunicar
varios ordenadores entre sí).
Pero lo que nos interesa es la siguiente parte: los nueve caracteres que indican los permisos que tienen los ficheros
(o directorios, o lo que sean: usaremos el término general fichero). Hay que agruparlos de tres en tres
caracteres, con lo que tenemos:
• Las tres primeras letras indican los permisos de lectura, escritura y ejecución del fichero para el propietario
del fichero (el nombre que muestra el ls –l; suele ser quien lo ha creado, aunque esto se puede cambiar).
• Las otras tres, los permisos de lectura, escritura y ejecución del fichero para los miembros del grupo del
fichero (cada fichero pertenece a un grupo, como indica ls –l, y además ese grupo no tiene por qué ser el
grupo primario del propietario).
• Las tres últimas indican los mismos permisos para el resto de usuarios del sistema.

Sobre un fichero normal, los permisos tienen los siguientes significados:


• Lectura: se puede leer el contenido del fichero.
• Escritura: se puede modificar el contenido del fichero.
• Ejecución: se puede ejecutar el fichero (aplicable a programas binarios y scripts).

Sin embargo el significado de los permisos de un directorio es ligeramente distinto:


• Lectura: se pueden listar los contenidos del directorio(podemos hacer un ls).
• Escritura: se pueden crear y borrar ficheros.
• Ejecución: se puede acceder al directorio (hacer cd al directorio).

Consecuencia: aunque no tengas permiso de escritura en un fichero, puedes borrarlo si tienes permiso de escritura
en el directorio que lo contiene, aunque no puedes modificarlo.

Los ficheros ejecutables pueden tener un modificador especial en el permiso de ejecución:


• Recordemos que un fichero tiene un propietario, y que los programas también son ficheros. Cuando
ejecutamos un programa normalmente se ejecuta con nuestros privilegios, no con los del propietario. Sin
embargo, cuando un fichero tiene el permiso setuid, siempre se ejecutará con los privilegios del propietario.
Algunos programas, como el comando /usr/bin/passwd, funcionan de esta manera: se tienen que ejecutar con
privilegios de root (debe modificar /etc/shadow), pero debe poderlas ejecutar cualquier usuario. El bit setuid
sólo es aplicable a ficheros. Con ls -l se muestra como una s en el permiso de ejecución del propietario (pero
afecta a cualquiera que lo ejecute, no sólo al propietario, claro).
• El permiso setgid es análogo al anterior: se ejecuta con los derechos del grupo al que pertenece, aunque lo
ejecute cualquier otro usuario. Sólo aplicable a ficheros. Se muestra como una s en el permiso de ejecución
del grupo.
• Por último, el sticky bit, que aplicado a ficheros no es exactamente un permiso, sino que indica que el
programa se almacenará en la partición de intercambio (swap) para que su carga sea más rápida (o sea, como
si estuviera ya cargado en memoria). En directorios indica que los usuarios no pueden borrar los ficheros que
no sean suyos (aunque el dueño del directorio puede borrarlos todos). Esto es especialmente útil en directorios
de trabajo compartidos, como /tmp. La aplicación a directorios de este bit no está disponible en todos los
sistemas (por ejemplo, en Linux no lo está). En cualquier caso se muestra como una t en el permiso de
ejecución del resto de usuarios.

Nota: ls -l mostrará una S mayúscula en vez de la minúscula de setuid/setgid cuando estos permisos estén dados en
ficheros que no tienen los permisos de ejecución correspondientes, ya que esto es incoherente.

Hay una serie de comandos que trabajan con permisos, y permiten indicarlos de dos maneras: simbólica o
numérica.

NOTACIÓN NUMÉRICA DE PERMISOS


Los tres grupos de tres permisos que hemos visto se ven como tres cifras octales (base 8), la primera para el
propietario, la segunda para el grupo y la tercera para los demás, de forma que los permisos que quieran darse a
cada categoría de usuarios serán el resultado de sumar los siguientes valores: 1 para ejecución, 2 para escritura,
4 para lectura.
751 indica todos los permisos para el propietario (4+2+1=7), lectura y ejecución
para los del grupo (4+1=5), y ejecución sólo para los demás (1)

Los permisos especiales se pueden indicar anteponiendo otra cifra octal sumando los valores siguientes: 4 para
setuid, 2 para setgid, 1 para sticky bit.

6 Centre d’estudis politècnics 2002-2003


4755 se debe interpretar como: 4=sticky bit, 7=lectura, escritura y ejecución
para el propietario, 5 y 5=lectura y ejecución para el grupo y para los otros.

NOTACIÓN SIMBÓLICA DE PERMISOS


En primer lugar hay que indicar a quién queremos cambiarle los permisos: al propietario (u, de user), al grupo (g),
a los demás (o, de other) o a todos (a, de all).
A continuación indicaremos qué queremos hacer con los ficheros: un + añade los permisos indicados, un – los
quita y un = deja sólo los que indiquemos en la orden. Enseguida se ilustrará con ejemplos.
Por último hay que indicar qué permisos queremos modificar: lectura (r), escritura (w), ejecución (x).

u+x añade permiso de ejecución al propietario (y deja el resto como estén)


go-w quita permiso de escritura al grupo y a los demás
o=rx deja sólo lectura y ejecución a los demás (los de propietario y grupo
los deja como estén)
o= deja a los demás sin ningún permiso
o=g truco para dar a los demás los permisos que tenga el grupo
a-w quita permiso de escritura a todos
+w da permiso de escritura a todos (si no se indican usuarios, por
defecto es a)

Los permisos especiales se pueden modificar así (normalemente se utilizan con + o -, no con =):
u+s añade setuid
g+s añade setgid
o+t añade sticky
u-s quita setuid

A continuación veremos las órdenes para manejar todo esto, aunque primero vamos a estudiar una orden que no
tiene mucha relación pero ayudará a trabajar con permisos, pues permite crear cómodamente ficheros nuevos, y
cambiar la fecha de los existentes.

touch: cambiar tiempo y crear fichero


Su función principal es cambiar la fecha y la hora de los ficheros afectados, si bien una utilidad casi más
importante es que, si alguno de los ficheros indicados no existe, lo crea. Respecto a un fichero se almacenan
tres tiempos diferentes, y esto no sólo afecta a touch sino también a otros comandos como find:
• Tiempo de acceso: cuándo se ha leído por última vez (asociado a la letra a).
• Tiempo de cambio de estado: cuándo se ha cambiado sus propiedades por última vez (permisos, propietario,
tiempos, etc.) (asociado a la letra c).
• Tiempo de modificación: cuándo se ha modificado por última vez (asociado a la letra m).

Sólo puede utilizarlo el propietario de los ficheros, aunque si lo único que se quiere es cambiar la fecha de acceso
y modificación al tiempo actual, puede hacerlo cualquiera que tenga permisos de escritura sobre los ficheros.

touch [opciones] fichero(s)

Opción Utilidad
-a Cambia sólo el tiempo de acceso
-c Si el fichero no existe no lo crea.
-m Sólo cambia el tiempo de modificación
--reference=fichero En vez de poner el tiempo actual, le pone el que
tenga el fichero indicado
- En vez de poner el tiempo actual, le pone el
t[AAAA]MMDDhhmm[.ss indicado en la expresión (sólo puede usarlo el
] propietario)

Como se ve, el tiempo de cambio de estado no se puede cambiar (aunque si "tocamos" un fichero, ese momento
pasará a ser el nuevo tiempo de cambio de estado porque hemos cambiado una propiedad del fichero).

touch -a fich # El tiempo de acceso de fich pasa a ser el actual


touch noExisto # Si no existe, crea el fichero noExisto (si existe ya,
# cambia su tiempo de acceso y modificación al actual)
touch -m -t200105032215 secreto # Modificado el 3/5/2001 a las 22:15

Práctica 3 de redes de área local: Administración de un sistema Linux 7


7 Cread un fichero nuevo y ponedle como fecha de modificación el 7/10/2002 a las 19:45. Comprobad que se ve
esta nueva fecha haciendo ls -l.

chmod (change mode): cambiar permisos


Permite cambiar los permisos de uno o más ficheros o directorios. Sólo puede utilizarlo el propietario de los
ficheros (o root, por supuesto). La sintaxis general es:
chmod [opciones] permisos fichero(s)

Donde las opciones son opcionales (por eso van entre corchetes y por eso se llaman opciones) y pueden ser las
siguientes:
Opción Utilidad
-v Muestra información de lo que va haciendo con cada
fichero (modo verbose, se suele llamar a esto)
-f Evita que se impriman mensajes de error si no puede
cambiar los permisos de un fichero
-R Cambia los permisos de ficheros y directorios
recursivamente
-- Asigna al fichero los permisos que tenga fichRef.
reference=fichRef
Los permisos se pueden indicar de forma simbólica o numérica (incluso se pueden indicar varios permisos
separándolos con comas), y por último se deben indicar los ficheros (o directorios) que queramos cambiar.
chmod a+x script?# Añade permiso de ejecución a todos los ficheros
# script? (el ? representa a cualquier carácter)
chmod -R 755 . # Pone como 755 todos los ficheros del directorio
# actual y de sus subdirectorios
chmod +x,o-w sc2 # Da permiso de ejecución a todos pero quita de
# escritura a los demás del fichero sc2

Nota: aunque aún no sepáis bien de qué va el tema, adelantamos algo: chmod aplicado a un enlace simbólico no
cambia las propiedades del enlace, sino del fichero a que hace referencia el enlace.
Hay otra forma de especificar los permisos, que es copiárselos de otro fichero. Para ello se utiliza, en lugar de los
permisos, la opción --reference=fichero, con lo que todos los ficheros indicados a continuación pasarán a tener
los mismos permisos que este fichero.
# Los ficheros lista.txt y a.out pasarán a tener los mismos permisos que
# tenga fich1
chmod --reference=fich1 lista.txt a.out

7 Supongamos que tenéis dos usuarios normales, por ejemplo toni y laura (si no, creáis dos). ¿Puede acceder
laura al directorio origen de toni? ¿Puede ver sus ficheros? ¿Y modificarlos? ¿Y borrarlos? Justificad,
comprobando los permisos correspondientes, por qué esto ocurre así.
7 Para cada uno de los casos anteriores, cambiad los permisos para que el sistema haga lo contrario (si antes
dejaba que laura accediese al directorio de toni que ahora no pueda, etc.).
7 Cread, con root, el directorio /home/prueba/. Comprobad que otros usuarios no pueden crear ficheros en él.
Cambiad los permisos para que todos los usuarios puedan crear ficheros en este directorio.
7 Cread un usuario admin que pertenezca al grupo root y dadle todos los permisos para trabajar con el directorio
/root/.

chown (change owner): cambia el propietario de un fichero


Este comando permite cambiar la posesión de un fichero. En principio un fichero es de quien lo crea, pero a
menudo interesa cambiar la propiedad del fichero, o el grupo al que pertenece. Este comando sólo se puede
aplicar a los ficheros sobre los que se tiene permiso de escritura, y sólo te lo puedes asignar a ti mismo (salvo si
eres root, ya que entonces lo puedes asignar a quien quieras).
chown [opciones] propietarios fichero(s)

Opciones:
• -v, -f, -R y --reference=fichero, con el mismo significado que en chmod

Al especificar los nuevos propietarios podemos indicar el propietario, el grupo o ambos:


chown pepe fich1 # fich1 pasa a ser de pepe y sigue en el mismo grupo
chown pepe:asi1t fich1 # fich1 pasa a ser de pepe y del grupo asi1t
chown pepe: fich1 # fich1 pasa a ser de pepe y del grupo primario de pepe

8 Centre d’estudis politècnics 2002-2003


chown :asi1t fich1 # fich1 sigue siendo del mismo dueño pero pasa al grupo
# asi1t (hace lo mismo que chgrp)

En vez de especificar un nuevo propietario y/o grupo, se puede copiar de otro fichero con --reference=fichero,
igual que con chmod.

7 Cread el directorio /tmp/trabajo/ para el grupo asi1t. Haced que toni y laura pertenezcan a ese grupo y que
puedan crear ficheros en él, pero los demás usuarios sólo podrán ver los contenidos de ese directorio.
7 Con el usuario laura, cread un fichero ej2 en /home/laura/. Cambiad a laura al grupo primario asi1t. ¿A qué
grupo pertenece el fichero /home/laura/ej2? ¿Por qué no ha cambiado al grupo asi1t? ¿Puede laura acceder
todavía al fichero, si no es de su grupo? ¿Por qué?

Importante: recordad que el grupo de un fichero no tiene nada que ver con el grupo de su propietario, pueden ser
totalmente distintos (aunque por defecto son el mismo grupo).

chgrp (change group): cambia el grupo de un fichero


Este comando permite cambiar un fichero de grupo (lo que también puede hacerse con chown). Las opciones y la
sintaxis son las mismas, y también dispone de la variante con --reference=fichero:
chgrp [opciones] nuevoGrupo fichero(s)
chgrp [opciones] --reference=fichero fichero(s)

umask (user mask): máscara de permisos por defecto


O sea, cuando se crea un nuevo fichero, ¿por defecto con qué permisos se crea? Pues podemos cambiarlo para que
nuestro trabajo resulte más cómodo.

# Muestra el estado actual de la máscara de permisos en modo numérico


umask
022
# Muestra el estado actual de la máscara en modo simbólico
umask -S
u=rwx,g=rx,o=rx
# Cambia la máscara a 022 (debemos indicarla numéricamente)
umask 022

Hay que advertir que la máscara no contiene los valores de los permisos sino su complemento. O sea, lo que se le
resta a los permisos totales (777) para obtener los permisos por defecto. Así, si nuestra máscara es 022, los
permisos por defecto de nuestros ficheros serán 777-022=755 (restando cifra a cifra, ciudado).

Actividad 5. Enlaces
En Linux se distinguen dos tipos de enlaces: los “duros” (hardlinks) y los simbólicos (symlinks), y conviene hablar
de ellos por separado.

Un enlace duro es el nombre de un fichero; es un enlace en el sentido de que permite al usuario acceder a
información que está almacenada en algún lugar “misterioso” del disco duro (ese lugar es el inodo, para
entendernos el número de bloque del disco en que está el fichero; con ls -i podemos ver el número de inodo de
los ficheros y directorios). Así que cuando estamos haciendo “cat fich.txt” estamos utilizando un enlace duro
(el que tiene de nombre “fich.txt”) para acceder al contenido del fichero.
Lo novedoso en Linux es que un mismo fichero puede tener varios nombres, o sea, varios enlaces duros, todos
ellos igual de importantes. Si un fichero tiene dos enlaces duros (por ejemplo /home/luis/fich1.txt y
/home/pedro/práctica.txt), cualquier modificación en alguno de ellos repercutirá en el mismo fichero, porque al
fin y al cabo ambos hacen referencia al mismo fichero.
Si se borra un enlace duro, el fichero sigue siendo accesible desde los demás enlaces duros que tenga; cuando se
borre su último enlace duro será cuando se borre el fichero en sí. Por cierto, ls -l dice, en la segunda columna,
el número de enlaces duros que tiene un mismo fichero.
Hay que tener en cuenta que rm lo que hace es borrar un enlace duro (y el fichero, pero sólo si su número de
enlaces duros llega a cero). Si se hace mv de un fichero (y no cambia de sistema de ficheros, o sea, no lo
estamos moviendo del disco duro al disquete, por ejemplo) no se mueve el fichero en sí, que permanece en el
mismo inodo, sino que se cambia un enlace duro por otro; los demás enlaces duros siguen siendo válidos.

Práctica 3 de redes de área local: Administración de un sistema Linux 9


7 Pregunta: sabiendo que el número de inodo es lo que indica realmente qué fichero es, o sea, que todos los
enlaces duros de un mismo fichero mostrarán el mismo número de inodo, ¿cómo averiguaríais cuáles son los
enlaces duros que tiene un fichero?

Por otra parte, un enlace simbólico es un pequeño fichero que hace referencia a un fichero (estrictamente
hablando, a un enlace duro de un fichero). Con ls -l, los enlaces simbólicos tienen una l en el primer carácter
(tipo de fichero); además se muestra a qué fichero hacen referencia:
lrwxrwxrwx 1 root root 7 ene 13 2002 /usr/sbin/adduser -> useradd*

Este enlace puede utilizarse para acceder al fichero real, pero siempre teniendo en cuenta que, si por ejemplo
hacemos vi enlaceSim, Linux averiguará cuál es el fichero a que hace referencia y abrirá este fichero.
Si se borra un fichero o se renombra (mueve) el enlace duro correspondiente, los enlaces simbólicos se quedan
“colgando”.
Para hacerse mejor una idea, un enlace simbólico es como un acceso directo de Windows.

Por si tenéis curiosidad, los símbolos . y .. son enlaces duros al directorio actual y al directorio padre
respectivamente.

ln: crea un enlace (link)


Este comando permite crear nuevos enlaces para un fichero dado. Por defecto crea enlaces duros, aunque tiene una
opción para crearlos simbólicos. La sintaxis general y sus opciones son:

ln [opción] objetivo(s)
Opción Utilidad
-d Permite que root (y sólo él) haga enlaces duros de
directorios (en principio sólo se pueden hacer
enlaces duros de directorios).
-f Borra los ficheros existentes si coinciden con los
enlaces a crear.
-i Pregunta antes de borrar ficheros si coinciden con
los enlaces a crear.
-s Crea enlaces simbólicos (por defecto son duros).

Hay tres formas básicas de utilizarlo:


# Primera: con un nombre de fichero crea un enlace a ese fichero en el
# directorio actual y con el mismo nombre
# Por ejemplo: si estamos en /home/ podemos hacer
ln luis/prueba1.txt
# Y eso creará un enlace prueba1.txt pero en el directorio /home/

# Segunda: con dos nombres de fichero crea un enlace del segundo al primero
cd luis
ln prueba1.txt listado.txt
# Crea un nuevo enlace, en el mismo directorio, llamado listado.txt
# No es necesario que el enlace esté en el mismo directorio:
ln prueba1.txt /usr/local/listado.txt

# Tercera: varios nombres de fichero y un directorio al final, con lo que


# crea enlaces a todos los ficheros en el directorio indicado
ln prueba1.txt ../pepe/notas.txt /home/miguel/p1.c /root/
# Crea enlaces llamados prueba1.txt, notas.txt y p1.c en /root/

# La siguiente instrucción da error porque hay más de dos nombres y el


# último no es un directorio
ln prueba1.txt ../pepe/notas.txt /home/miguel/p1.c

7 Cread un fichero llamado asignaturas que contenga los nombres de vuestras asignaturas. Cread un enlace
simbólico al mismo en el mismo directorio. Haced ls -l y ved qué muestra (fijaos en el número de enlaces del
fichero original). Abrid el enlace con vi y comprobad que abre el fichero original; para verificar que se trata
del mismo fichero, haced un cambio y comprobad que haciendo cat asignaturas se ve el cambio. (Distinguidlo
de una copia).
7 Borrad el fichero original. ¿Qué pasa con el enlace?

10 Centre d’estudis politècnics 2002-2003


7 Cread un fichero llamado semana con los días de la semana. Cread un enlace duro llamado semana2. Repetid
el primer ejercicio con este nuevo enlace y comprobad que el comportamiento es el mismo (hay una
diferencia; ¿cuál?).
7 Repetid el segundo ejercicio. ¿Qué ocurre ahora?

Actividad 6. Montaje y desmontaje de sistemas de ficheros


En Linux, cada partición, unidad de disco, etc., que queramos utilizar es un sistema de ficheros distinto; es lo que
en MS-DOS y Windows correspondería a una unidad. La diferencia está en que, en Linux, todos los sistemas
de ficheros se ven desde la raíz, o sea, el directorio / ; de hecho, se ven como subdirectorios suyos, y no como
unidades independientes.
Para poder acceder a un sistema de ficheros (por ejemplo, a un disquete) hay que montarlo, que quiere decir
“engancharlo” en un directorio determinado. Para poder extraer el disquete después de haber accedido a él
(aunque sólo hayamos leído, porque igual hace modificaciones, como por ejemplo registrar el tiempo de acceso
a ficheros y directorios) es imprescindible desmontarlo primero.

Existe un fichero, /etc/fstab (file systems table) que lista los dispositivos que se montan habitualmente y dónde (en
qué directorio) se deben montar. Para cada sistema contiene una línea de la forma:
# dispositivo puntoMontaje tipo opciones
/dev/hda5 / ext2 defaults 1 1

El dispositivo suele indicar una entrada en el directorio /dev/, que contiene los dispositivos del sistema (devices)
como entradas tipo /dev/hda (disco duro primero, hard disk), /dev/hda5 (partición 5 del disco primero),
/dev/hdb3 (partición 3 del disco duro segundo (b)), /dev/fd0 (unidad de disquete primera, floppy disk), etc.
El punto de montaje es el directorio en que queremos ver el sistema montado; típicamente será un subdirectorio de
/mnt/, como /mnt/windows/ o /mnt/cdrom/, pero no es necesario que esté en /mnt/.
El tipo de un sistema de ficheros indica el formato que utiliza, y depende del tipo de unidad y del sistema
operativo empleado en su creación. Los tipos más habituales son:
• ext2: extended file system 2, el sistema de ficheros de Linux
• vfat: virtual fat, que emula los sistemas FAT16 y 32, o sea, los de DOS y Windows 9x
• nfs: network file system, el sistema de ficheros en red de Linux
• iso9660: sistema de ficheros por defecto, que por ejemplo utilizan los CDs de datos
• smbfs: sistema de ficheros en red por Samba, o sea, compatible en red con Windows
• auto: Linux intenta averiguar el tipo de sistema de ficheros analizando el medio
Una de las opciones más importantes es user, que permite que cualquier usuario monte ese sistema (si no sólo
puede montarlos root). Esto es lógico permitirlo por ejemplo en las disqueteras y las unidades de CD. También
está la opción noauto, que evita que ese sistema de ficheros se monte automáticamente.

mount: monta un sistema de ficheros


Cuando el sistema arranca por defecto tiene montados una serie de sistemas de ficheros, y podemos añadirle más
con esta orden.

# mount sin parámetros muestra las unidades que están montadas


# (es una información que está en el fichero /etc/mtab, también)
mount

# También permite ver sólo los dispositivos de un tipo


mount -t vfat

La forma general de mount es la siguiente:


mount -t tipo dispositivo directorio

Como por ejemplo:


mount -t vfat /dev/fd0 /mnt/floppy/ # Monta un disquete MS-DOS
mount -t iso9660 /dev/cdrom /mnt/cdrom # Monta un CD

Sin embargo para los sistemas de ficheros que ya están en /etc/fstab no es necesario indicar el dispositivo y el
directorio de montaje, vale con indicar uno de los dos valores y mount ya pone el resto:
mount /mnt/floppy # mount deduce el tipo y el punto de montaje
mount /dev/fd0 # Equivalente a la anterior

Práctica 3 de redes de área local: Administración de un sistema Linux 11


Por último podemos hacer que se monten todos los sistemas indicados en /etc/fstab (salvo los que ya estén
montados y los que tengan la opción noauto):
mount -a # Todos los que cumplen esas condiciones
mount -a -t vfat # Todos los que, además, son de tipo vfat

El resto de opciones disponibles es:


mount [opciones] [dispositivo] [directorio de montaje]

Opción Utilidad
-V Muestra la versión de mount.
-h Muestra un texto de ayuda.
-v Modo prolijo (o charlatán; verbose en inglés); muestra más
información de las operaciones que hace.
-f (fake) Hace sólo una simulación, no lleva a cabo los cambios
(muy útil junto con -v).
-r Monta el sistema de ficheros en modo sólo lectura.
-w Monta el sistema de ficheros en modo lectura y escritura (es el
valor por defecto).
-t tipoSF Permite indicar el tipo de sistema de fichero (si no se indica
Linux intentará averiguarlo).
-a Monta automáticamente todos los sistemas indicados en
/etc/fstab que no tengan la opción noauto y no estén montados ya.
-o noatime El sistema montado no modificará los tiempos de acceso, con lo
que éste será más rápido.
-o noexec No permitirá ejecución de programas (útil si montamos la
partición Windows y queremos evitar ejecutar .exe por error).
-o nosuid No permite ficheros con SUID/SGID.
-o remount “Remonta” un sistema de ficheros ya montado para cambiar
alguna opción (por ejemplo pasar de sólo lectura a lectura y
escritura). Atención: NO sirve para, por ejemplo, cambiar un
disquete. Para eso hay que desmontar, cambiarlo y volver a
montar.
-o sync Obliga a que los datos se guarden de forma síncrona en el sistema
de ficheros (o sea, en cuanto las aplicaciones lo soliciten, que se
almacenen, en lugar de mantenerse en una memoria temporal;
hace más lentas las operaciones pero garantiza más la integridad
de los datos, como por ejemplo en una base de datos).

umount: desmonta un sistema de ficheros


Siempre que el sistema en cuestión no se esté utilizando (por algún proceso, o porque algún usuario esté en un
directorio suyo), permite desmontarlo. Se puede indicar el dispositivo a desmontar o el punto de montaje.

umount dispositivo | directorio # La barra vertical es una “O” lógica

7 Coged un disquete, montadlo e intentad leer sus contenidos. Especificad vosotros el tipo, no os sirváis del
reconocimiento automático. (Nota: el disquete de arranque de Linux no sirve, tiene un formato especial.)
7 Desmontad el disquete y probad a montarlo en modo de sólo escritura. Comprobad que funciona.
7 Intentad leer los contenidos de un CD-ROM. Probad a escribir en él. Comprobad que, si no se desmonta, no se
puede sacar de la unidad.

Actividad 7. Configuración de LILO


LILO (Linux Loader) es el gestor de arranque predeterminado de Linux, y su objetivo es permitir disponer de
varios sistemas operativos en una misma máquina y que el usuario pueda elegir uno en el momento del
arranque. LILO se instala en el dispositivo de arranque del ordenador, que puede ser:
• El disco duro, concretamente en el MBR (Master boot record, o sea, sector de arranque principal);
• Un disquete

12 Centre d’estudis politècnics 2002-2003


• El disco duro pero al principio de la partición de Linux; en este caso sólo permite elegir opciones dentro del
Linux en cuestión, se supone que previamente ha pasado por algún otro gestor de arranque.
En cualquier caso, la configuración de LILO se rige por lo indicado en el fichero /etc/lilo.conf, cuya estructura
conviene conocer para hacer los cambios oportunos o recuperar un sistema de un posible fallo.

Al arrancar el sistema, LILO muestra un prompt o un menú que permite elegir el sistema operativo a arrancar;
generalmente, si pasa un cierto tiempo y el usuario no elige nada, LILO arranca una opción por defecto.

Estructura del fichero /etc/lilo.conf:


• Opciones globales
• Descripción imagen 1
• Descripción imagen 2
• ...
• Descripción imagen n

Opciones globales
Opción Significado Ejemplos
boot=dispArranque Nombre del dispositivo de arranque. boot=/dev/fd0
boot=/dev/hda
compact Permite agrupar la información para que arranque más compact
rápido (por ejemplo si lo hace desde un disquete).
default=etiqueta Etiqueta de la imagen por defecto (si no se indica ninguna default=linux
será la primera descripción que aparezca).
delay=retardo Expresa, en décimas de segundo, lo que LILO esperará delay=50 # Espera 5s
hasta elegir la opción por defecto.
message=fichero Toma el mensaje de bienvenida (el que aparece antes de message=/root/saludo.txt
las opciones) del fichero indicado. Un Ctrl+L en el
fichero permite borrar la pantalla.
optional Las imágenes que no encuentre las omitirá. optional
password=contrase LILO pide una contraseña antes de permitir el arranque de password=lorito
ña cualquier imagen.
restricted LILO pide la contraseña sólo si el usuario intenta restricted
especificar líneas de comandos (por ejemplo, el famoso
linux single).

Nótese que las tres últimas opciones pueden especificarse individualmente dentro de la descripción de cada
imagen (por ejemplo para que sólo pida contraseña al intentar arrancar cierta imagen y no otra).

La descripción de cada imagen comenzará con la directiva image si se trata de una imagen de Linux o con la
directiva other si se trata de otro sistema operativo.

Opciones para cada imagen:


Opción Significado Ejemplos
image=rutaimagen Nombre y ruta del fichero que contiene la imagen (se trata image=/boot/vmlinuz
de una imagen de Linux).
other=dispositivo Dispositivo que contiene otro sistema operativo. other=/dev/hda1
label=etiqueta Da un nombre (etiqueta) a esta imagen. label=linux
optional Si la imagen no está, omitirla en LILO. optional
password=contrase Pide una contraseña antes de arrancar esta imagen. password=semilla
ña
restricted Pide la contraseña sólo si el usuario intenta especificar restricted
una línea de comandos.

Opciones si la imagen es de Linux:

Práctica 3 de redes de área local: Administración de un sistema Linux 13


Opción Significado Ejemplos
append=cadena Pasa las opciones de la cadena al núcleo. append=” single”
root=dispositivo Qué dispositivo se montará como raíz del sistema de root=/dev/hda8
ficheros.
vga=modo Qué modo de vídeo se utilizará en el arranque (posteriores vga=normal
parámetros de configuración pueden cambiarlo). El modo vga=5
puede ser: vga=ask
• normal (visualización habitual de 80x25 caracteres)
• extended (visualización a 80x50 caracteres)
• ask (pregunta el modo; con Intro muestra la lista de
modos disponibles)
• Un número especificando el modo concreto (a partir
de la lista obtenida con ask)
Nota: esta opción también puede usarse en la sección
global.

lilo: instala o desinstala LILO


Para poder utilizar LILO no es suficiente con configurar el fichero lilo.conf, sino que hay que trasladar esa
configuración al dispositivo de arranque concreto. De esto se encarga el comando lilo, así como de
desinstalarlo de un dispositivo.

El uso habitual de este comando es el de aplicar los cambios introducidos en lilo.conf; para ello, tras editar
apropiadamente este fichero, ejecutaremos lilo (sin más opciones) y se introducirán los cambios en el
dispositivo de arranque.
Interesa conocer las opciones -t (test: sólo prueba, no hace los cambios) y -v (modo verbose o prolijo, o sea, que
muestra mucha información sobre lo que va haciendo) para asegurarse de las operaciones antes de aplicarlas
realmente.

También es posible eliminar LILO de una unidad (por ejemplo, del disco duro) con la opción -u; para ello, LILO
recupera el sector de arranque original del dispositivo a partir de las copias de seguridad de /boot/boot.*.

Un último uso es el de añadir la posibilidad de arranque a otros dispositivos. Aquí puede resultar útil la opción -b,
que permite indicar un dispositivo de arranque en lugar del que figure en lilo.conf.

Opción Significado Ejemplos


-t Modo prueba (test) lilo -t
-v Modo prolijo o charlatán (verbose) lilo -v
-u dispositivo Elimina LILO del dispositivo, restaurando su sector de lilo -u /dev/hda
arranque de la copia /boot/boot.*
-b dispositivo Instala LILO en el dispositivo indicado, ignorando la lilo -b /dev/fd0
directiva boot= que figura en lilo.conf

7 Personalizad las etiquetas de arranque de vuestro LILO y poned una contraseña a la opción “windows”. Œ

Actividad 8. Gestión de procesos y trabajos


Una parte esencial en la administración de un sistema Linux es el control de los procesos que hay en el sistema en
cada momento, y conocer las herramientas necesarias para poderlos eliminar en un momento dado es
especialmente importante. Esto es aún más evidente en un servidor, en el que los procesos no “se ven en
pantalla” sino que, en principio, están ocultos, y es importante saber obtener cuáles hay, en qué estado se
encuentran y qué consumo de recursos están haciendo.
Los procesos en Linux tienen una relación padre-hijo entre ellos, o sea, el proceso que ejecuta a otro es su padre; si
por ejemplo desde bash (que es un proceso) ejecutamos un find, éste será hijo de aquél.

Los trabajos (jobs) en Linux representan las distintas tareas que está realizando un usuario en un momento dado, y
es bastante interesante saber controlarlas para maximizar la productividad en el trabajo y realizar varias tareas
a la vez; aunque esto es menos importante al disponer de varias consolas virtuales, en ocasiones no se dispone
de ellas o hay otras circunstancias que recomiendan la gestión de varios trabajos desde una misma consola.

14 Centre d’estudis politècnics 2002-2003


Un trabajo, que al fin y al cabo es una orden completa de un usuario (o sea, todos los comandos enlazados con
tuberías en una misma orden, tipo “ls *.exe | grep “prueba” | less”), tiene un número asociado para poderlo
identificar posteriormente. Además se puede encontrar en dos estados: se puede estar viendo cómo se ejecuta
en su terminal (se dice que está en primer plano o en foreground), o puede estarse ejecutando en la sombra, o
sea, ejecutándose pero sin que se vean sus resultados; entonces se dice que está en el fondo (background). Hay
comandos y opciones de bash para cambiar el estado de los trabajos.

Otro concepto, que se ve con más profundidad en otros créditos, es el de señal, que es un mecanismo de
comunicación entre procesos que permite enviar avisos entre distintos procesos. De momento lo usaremos para
“matar” procesos, aunque tiene muchos más usos.

ps: muestra el estado de los procesos (processor share)


Este comando genera un listado de los procesos que hay en el sistema en un momento dado. La sintaxis general
es:
ps [opciones][pids]
Donde pids es una lista de PIDs (process identifiers, los números que identifican a cada proceso) separada por
comas y sin espacios (ni entre ellos ni respecto a la última opción). Permite ver información sólo de los
procesos indicados:
ps a13,42 # La a es la opción utilizada, y 13 y 42 son los procesos
ps 44,32 # Muestra la información de esos procesos, sin ninguna opción

Según la opción elegida, ps mostrará más o menos información en un listado en el que cada fila es un proceso y
cada columna una característica suya. El significado de cada columna, según el título que aparece en la primera
fila, es el siguiente:
Columna Significado
USER Usuario propietario del proceso (o sea, el que lo ha ejecutado)
PID PID del proceso
%CPU Porcentaje de CPU que está utilizando
%MEM Porcentaje de memoria que está utilizando
VSZ Tamaño de memoria virtual utilizada por el proceso (virtual
memory size)
RSS Memoria RAM real que está ocupando (resident size)
TTY Terminal asociada al proceso (? si el proceso no tiene ninguna
terminal asociada, como un servidor)
STAT Estado del proceso:
• R: ejecutable (runnable), o sea, que en cualquier momento puede
entrar en ejecución*
• S: durmiendo (sleeping), o sea, está esperando alguna señal
• T: parado en traza (trace). No es lo mismo que S, en general
muestran una T los procesos que están siendo controlados por
otro, como un depurador que ejecute paso a paso un programa
• Z: zombie, representa un proceso que por algún error ha
terminado sin que su padre lo esperase, y que se queda en un
estado de suspensión llamado zombie
START Momento en que ha comenzado
TIME Tiempo de procesador que lleva consumido
COMMAND Línea de comandos con que se ha puesto en ejecución

*Recordad que en un sistema operativo multitarea puede haber varios procesos listos para ejecutarse pero en un
momento dado sólo uno de ellos se estará ejecutando (si sólo hay un procesador en el sistema, claro). De hecho
si se está ejecutando el ps, no es posible que justo en el mismo momento se esté ejecutando otro proceso; sin
embargo, los procesos R pueden tomar el procesador en cualquier momento.

Las opciones de ps son las siguientes (atención, no llevan un guión delante, se escribe “ps a”, por ejemplo):
Opción Significado
u Listado para el usuario (o sea, es un listado largo; si no se pone, sale un listado
corto).
f Listado en forma de bosque (forest) de procesos, o sea, muestra las relaciones
padre-hijo. Un bosque es un conjunto de árboles.
a Muestra los procesos de todos (all) los usuarios. Sí, aunque no seas root. Es una
opción de dudosa seguridad, pero ahí está.

Práctica 3 de redes de área local: Administración de un sistema Linux 15


x Muestra los procesos no controlados por ninguna terminal (servidores y
similares).
h No incluye la cabecera en el listado.
r Muestra sólo los procesos con STAT=R
7 Encontrad todos los procesos del usuario root.
7 Mostrad todos los procesos del sistema ordenados por estado.
Opciones de bash para enviar trabajos al background
Principalmente hay dos formas de enviar un trabajo al fondo:
• Poner un & al final de su línea de comandos para que empiece a ejecutarse en el fondo.
find / -nouser -or -nogroup > lista & # Se ejecuta, pero en el fondo

• Cuando esté en ejecución en primer plano, presionar Ctrl+z (o sea, mantener Ctrl y entonces la z).
find / -nouser -or -nogroup > lista
# Y una vez se ponga en marcha, presionad Ctrl+z: se queda parado en el fondo

Al hacerlo, bash nos muestra un número entre corchetes que es su número de trabajo y permite obtener
información de él y volverlo a traer al frente con los comandos que vienen a continuación.
[1] 215 # Identificador de trabajo y PID

fg: traer un trabajo al frente (foreground)


El uso de este comando es muy sencillo: especificando un número de trabajo, lo vuelve a poner en ejecución en el
frente:
fg %1 # Si 1 es el número de trabajo, lo trae al frente
# y lo pone en ejecución
%1 # Poner simplemente esto equivale a %1

bg: hacer que continúe ejecutándose un trabajo en el fondo (background)


Cuando suspendemos un trabajo con Ctrl+z podemos seguir ejecutándolo pero en el fondo con bg:
bg %2 # Se pone en ejecución, pero en el fondo
%2 & # Equivale a lo anterior

jobs: lista de los trabajos del usuario


Este comando muestra qué trabajos tiene el usuario. Concretamente, muestra el número de trabajo, el estado
(stopped o running) y la orden de comandos que lo ha generado.
Sintaxis:
jobs [opciones] [identificadorTrabajo]
Si se indica un identificador de trabajo sólo muestra información de ese trabajo:
jobs %3
[3] Stopped vi lista.txt

Opciones de jobs:
Opción Significado
-l Lista también los PIDs de los trabajos.
-n Muestra información sólo de los trabajos cuyo estado ha cambiado desde la
última consulta.
-r Muestra información sólo de los jobs ejecutándose (running).
-s Muestra información sólo de los jobs parados (stopped).

kill: envía una señal al proceso


Aunque no siempre es para matarlo, como es su uso más habitual se le ha quedado ese nombre al comando. Se
puede usar especificando un nombre o un número de señal y un proceso o un trabajo:
kill -l # Muestra el listado de señales y su número
kill -s SIGKILL 152 # Envía la señal SIGKILL al proceso 152
kill -s SIGKILL %4 # Envía la señal SIGKILL al trabajo 4
kill -9 152 # Envía la señal 9 al proceso 152
kill -9 %4 # Envía la señal 9 al trabajo 4

16 Centre d’estudis politècnics 2002-2003


De todas las señales, es importante conocer SIGTERM (pide a un proceso/trabajo que termine, pero de buenas
maneras; según el programa que sea, se puede negar) y SIGKILL (obliga a que el proceso/trabajo termine; casi
ningún proceso puede resistirse a esto).

7 Abrid vi y enviadlo al fondo con Ctrl+Z. Enviadle la señal SIGTERM y, si no funciona, enviadle SIGKILL
para terminarlo.
7 Abrid una sesión con algún otro usuario y abrid algún programa (vi). Cambiad a vuestro primer usuario e
intentad matar todos los procesos del otro. ¿Podéis hacerlo? Pensad qué tendríais que hacer para poder matar
los procesos de otro usuario.
7 Abrid una sesión con la terminal cuatro (Alt+F4). Volved a otra sesión e intentad matar la sesión de la
terminal cuatro (o sea, el proceso bash en esa terminal).

Práctica 3 de redes de área local: Administración de un sistema Linux 17

Вам также может понравиться