Linux Internals - Como Funciona
Linux Internals - Como Funciona
Linux Internals - Como Funciona
Daniel Ezquerra
ndice
Prefacio
1. Los sistemas Linux
1.1 Breve historia de los sistemas Linux
1.2 Una visin general de los sistemas Linux
1.3 Unix Shell o Terminal, un primer vistazo
1.3.1 Errores comunes
2. Ficheros y Jerarqua de directorios
2.1 Ficheros y directorios
2.2 Jerarqua de directorios
2.3 Permisos y propiedades de ficheros
2.3.1 Umask
2.3.2 Permisos adicionales
2.3.4 De vuelta a las propiedades
2.4 Links simblicos
2.4.1 Creando links simblicos
3. Dispositivos
3.1 Bash, salida estndar y otros
3.1.2 Pipes o Tuberias
3.2 Extrayendo informacin de los dispositivos
3.3 Algunos dispositivos de los sistemas Linux
3.3.1 EL fichero /dev/null
3.3.2 El fichero /dev/zero
3.3.3 Los ficheros /dev/random y /dev/urandom
3.3.4 Discos duros /dev/sd*
5.1 History
5.2 Variables especiales del terminal
5.3 Path
5.4 Autocompletar
5.5 Algunos comandos bsicos
6. Procesos y threads
6.1 Listando los procesos en nuestro sistema
6.2 Seales
6.3 Viendo los procesos en tiempo real
6.3.1 Interactuando con el comando top
6.4 Planificacin de tareas
6.4.1 at
6.4.2 cron
6.4.2.1 Como funciona cron
7. Recursos y monitorizacin
7.1 Visin general de los recursos
7.1.1 cpu
7.1.2 Memoria
7.1.3 Espacio de disco
7.2 Memoria y fallos de pgina
7.3 Monitorizacin de ficheros
7.4 Monitorizacin de entrada/salida
8. Usuarios
8.1 El fichero /etc/passwd
8.2 El fichero /etc/shadow
8.3 Grupos de usuarios
8.3.1 Trabajando con los grupos
Prefacio
Hoy en da somos muchos los que trabajamos con
ordenadores y no parece que esta tendencia vaya a ir a la baja. Es
cierto que muchos de los que trabajan con ordenadores lo hacen en
su entorno familiar o con programas de ofimtica, sin embargo, hay
tambin un gran nmero de persona que necesitan sacar mayor
provecho de las mquinas.
Hay gente que se dedica a hacer que los ordenadores
funcionen 24/7 (24 horas al da, 7 das a la semana) o algunos que se
dedican a hacer programas para terceros. En general, hay usuarios
para todos los gustos.
Muchas veces se recurre a programas ya hechos o pequeas
utilidades (scripts) que nos solucionan la vida y que, para que negarlo,
son de lo ms til. Sea cual sea el caso, conocer como funciona
aquello con lo que trabajamos nos puede hacer ms sencillo el trabajo,
e incluso a veces nos puede permitir hacerlo. Siempre, claro est,
dentro de las posibilidades.
Ese es el objetivo de Linux Internals: dar unas nociones de
como funcionan las cosas en los sistemas operativos Linux. Y con esta
ltima frase, me gustara hacer referencia a como funciona el sistema
operativo adems de como funcionamos nosotros con l. En ocasiones
los detalles cambian entre distintas distribuciones de Linux, pero en
cualquier caso, los conceptos son los mismos incluso entre
distribuciones.
La idea de este texto es dar una visin de como trabajan los
sistemas Linux ms all de los comandos y las instrucciones y sobre
partes que los componen y que realizan unas u otras tareas. Intentar
aprenderlo todo resulta abrumador, y muchas veces innecesario,
puesto que el SO realizar tareas de las que no debemos
preocuparnos.
En este punto, puede ser vlido el smil del televisor. Al usar
un televisor con un mando distancia que permite cambiar de canal, no
conocemos realmente todos los detalles que hacen que al apretar un
botn el canal del televisor cambie. Sin embargo, si que somos capaces
de separar los problemas, cuando los hay, en problemas del mando o
problemas del televisor. Es decir, estamos creando dos niveles de
abstraccin sobre los detalles tcnicos, el nivel del mando a distancia y
el del televisor.
Con los sistemas operativos haremos algo similar. Como es
una tarea ardua y casi imposible llegar a comprender todos los detalles
que conforman el sistema operativo, intentaremos abordarlo usando
determinados niveles de abstraccin que nos permitirn tener una
visin global. Ms tarde seremos capaces de profundizar en aquellos
detalles que ms nos interesen.
En el caso de los sistemas Linux, que son los que nos
ocupan, podemos definir tres niveles de abstraccin:
Hardware
Kernel
Usuario
En esta clasificacin que presentamos, cada capa es un
conjunto de funciones agrupadas segn se siten ms cerca del
hardware o del usuario. As por ejemplo, los juegos, servidores web,
etc. se situaran en la capa superior: la Capa de Usuario. Aquello que
corresponde a los 0s y 1s se situara en la capa ms baja, es decir en
root@vps18547:~#> pwd
/home/internal
Este comando nos indica en que directorio estamos. (print
working directory, escribe el directorio en el que trabajas en ingls).
ls
(list --> listar en ingls) nos devuelve una lista de los ficheros
que se encuentran en el directorio actual. Este comando admite varios
parmetros que ofrecen ms informacin. Permite tambin especificar la
ruta del directorio cuyo contenido queremos listar.
cd
(change directory, cambiar directorio en ingls) Es bastante
explicativo, permite cambiar a un directorio especificado a continuacin
del comando. Hay que tener en cuenta que en los sistemas Unix, en
Linux por tanto tambin, el . representa el directorio actual mientras
que .. representa el directorio inmediatamente superior o directorio
padre. Luego veremos ms acerca de estos detalles.
cat
(de concat, concatenar en ingls) Es un programa que
permite mostrar ficheros o concatenarlos. En general los estamos
concatenando siempre puesto que lo que hace este comando es
concatenar el contenido de los ficheros a la salida estndar. Veremos
ms sobre esto llegado el momento.
Juntando conceptos: Si ejecutamos el comando ls en un directorio
en el que tenemos un fichero llamado holamundo.txt, Cuantos
Advertencia
Aunque /var tiene un subdirectorio tmp (/var/tmp) el SO no vaca este
directorio al arrancar como sucede con /tmp
/usr Pronunciado user , usuario en ingls. Parece que
debiese contener los archivos de los usuarios, sin embargo
nada ms lejos de la realidad. Los ficheros de los usuarios se
encuentran habitualmente en /home/usuario. Este directorio
suele contener una gran cantidad de directorios en su interior
organizados de forma jerrquica. Es quizs uno de los
directorios ms importante puesto que dentro de /usr
encontramos las libreras, manuales, programas, etc que
contiene nuestro SO. La separacin entre /usr y / se debe a
motivos histricos sobre la distribucin de espacio para la raz
del sistema. Hoy suele ser habitual encontrar archivos que
pertenecen de forma a especfica a la distribucin en este
directorio.
/boot Contiene los ficheros para el arranque del Kernel. Los
sistemas actuales ya no permiten la inclusin en este directorio
de nuestros propios ficheros. Si queremos que algn programa
se ejecute al inicio tenemos otras posibilidades que veremos
ms adelante.
/media
Este directorio es el punto de entrada para todos
los dispositivos removibles como pendrives o similares.
Juntando conceptos:
desactivado. As pues
111 101 101
Significa que el propietario tiene permisos de lectura,
escritura y ejecucin (los bits van en este orden) mientras que el grupo
y el resto de los usuarios tienen permisos de lectura y ejecucin pero
no de escritura. Como usamos entonces estos valores para cambiar
los permisos? Muy sencillo, lo primero que vamos hacer es convertir
cada grupo a la notacin decimal:
755
chmod 755 backups
A continuacin recurrimos al comando chmod que dar los
permisos que hemos descrito segn la notacin binaria al fichero
backups. Cualquier combinacin que nos permitan estos 3 bits ser
vlida.
Advertencia
El mayor valor que se puede representar con 3 bits en notacin
binaria es el 7 en notacin decimal. Eso significa que en ningn
caso se podrn asignar permisos mayores a 7.
Decimal
Binario
Lectura
(r)
Escritura
(w)
Ejecucin(x)
000
No
No
No
001
No
No
010
No
011
No
No
S
100
No
No
101
No
110
No
111
Advertencia
Para poder listar el contenido de un directorio es necesario tener
permisos de ejecucin para dicho directorio.
2.3.1 Umask
Que es lo que sucede con los permisos cuando se crea un
nuevo fichero? Como podemos controlar con que permisos se va a
crear? Para ello estn las umask o mascaras de usuario. Una mascara
de usuario hace exactamente eso, define con que permisos se va a
crear un fichero o directorio. As pues si ejecutamos el comando umask
umask
022
Nos devolver la mscara actual, algo similar a 022. Los
nmero en el caso de umask funcionan exactamente igual que a nivel
de permisos. Pero al crear un fichero vemos que realmente no se est
creando con los permisos 022. Que estas sucediendo?
La mscara de usuario establece valores negativos sobre los
permisos originales. En la mayora de sistemas UNIX los ficheros
regulares (normales) se crean con los permisos 666 mientras que los
directorios se crean con los permisos 777. A esto hay que aplicar-le la
mascara. Esta mascara consiste en aplicar una operacin NAND.
Veamos como funciona:
umask:
Permisos originales:
Permisos finales:
/etc/bash.bashrc
para aadir la modificacin de umask. La aadiremos como si
escribisemos el comando correspondiente en un terminal. Estos
Binario
suid
guid
sticky
000
No
No
No
001
No
No
010
No
No
011
No
100
No
No
101
No
110
No
111
3. Dispositivos
Aunque los dispositivos no son otra cosa que ficheros de un
tipo especial, la complejidad e importancia que suponen para
cualquier sistema operativo, sea o no Linux, hace que merezcan un
captulo completo.
Quizs antes de entrar a pelearse con los dispositivos es un
buen momento para aprender algo de Usuarios y grupos, pero dejar
esa eleccin al sentir del lector. Si se decide leer sobre usuarios puede
recurrirse al captulo 8. Usuarios.
En Linux es posible interactuar con la mayora de los
dispositivos como se interactuara con un fichero corriente. No es el
espacio de usuario el que gestionar la interaccin con los dispositivos
si no que ser el kernel el que decidir que hacer con dichos
dispositivos.
Si hacemos memoria seguro recordaremos que los ficheros de
tipo dispositivo se encontraban en /dev. As pues si echamos un vistazo
con el comando ls l en el directorio /dev deberamos ver los
dispositivos de los que disponemos en el sistema. Veremos que
tenemos varios, algo que puede resultar incluso sorprendente. Adems
el resultado ser algo como lo siguiente:
crw-r----- 1 root kmem 1, 2 mar 4 2011 kmem
srw-rw-rw- 1 root root 0 ago 14 1:16 log
brw-rw---- 1 root disk 7, 0 mar 4 2011 loop0
Si nos fijamos vemos que la primera letra de las propiedades
no es ninguna letra a la que estemos acostumbrados. Esta primera letra
nos est mostrando el tipo de fichero, igual que sucede cuando al
dispositivo fsico.
direccin.
Lo primero que debemos saber es que cada uno de los
canales posee su propio descriptor de fichero, siendo:
0 Entrada estndar.
1 Salida estndar.
2 Error estndar.
Como hemos dicho podremos re-direccionar la salida o
entrada de cualquier programa. Para hacerlo tenemos los caracteres
>, <, y >>.
> y >> nos permiten redirigir la salida estndar. El primero
(>) nos permite enviar la salida a un fichero. Si el fichero existe se
vaciar su contenido y se rellenar con la salida del programa. Si el
fichero no existe se crear antes de llenar el contenido. Por contra, >>
aade el contenido de la salida al final del fichero especificado sin
borrar el contenido existente. Si el fichero no existe lo crea. Veamos un
ejemplo:
root@PC:~/test# ls #No devuelve nada porque la carpeta est vaca
root@PC:~/test# ls-a > test #Redirecciona la salida de ls a al fichero
test
root@PC:~/test# cat test # Muestra el contenido del fichero test
.
..
test
root@PC:~/test# ls a >> test #Redireccionamos la salida de ls a al
fichero test, pero aadimos el resultado al final
root@PC:~/test# cat test
.
..
test
.
..
test
root@PC:~/test# echo 1 > test #El comando echo imprime lo que vaya a
continuacin por pantalla. En este caso lo redireccionamos al fichero
test con un solo > lo que sobrescribir todo el contenido del fichero.
root@PC:~/test# cat test
1
Que sucede si lo que queremos re-direccionar es la
entrada? No hay problema, todo lo que debemos hacer es usar <. Por
ejemplo, el comando wc (word count) cuenta el nmero de palabras
que recibe por la entrada estndar. Sin embargo, a nosotros podra
interesarnos contar las palabras de un fichero. Usaramos para ello:
wc < fichero.txt
Ahora ya tenemos todo lo que necesitamos saber sobre las
re-direcciones de las entradas y salidas estndar. No hemos dicho
nada sobre el error estndar. Recordemos que el error estndar tiene
como identificador de fichero el nmero 2. As pues podemos hacer lo
siguiente:
echo 1 2> test
Este comando le est diciendo a nuestro terminal que
queremos imprimir un 1 en pantalla y en caso de que diese algn error,
queremos redirigir el error al fichero test. Es muy importante que el
ls l | wc l
Devolver 2 en lugar de listar los ficheros del directorio,
puesto que le hemos enviado los resultados de ls l al programa wc
como entrada.
3.2 Extrayendo
dispositivos
informacin
de
los
Aclaracin
En este artculo aparecen muchos conceptos tcnicos relacionados
con el hardware, no es el objetivo de este texto tratar esos temas,
sin embargo es muy sencillo obtener las descripciones de los
elementos mencionados en Internet.
Aclaracin
Se han listado los comandos en su versin ms sencilla, sin
parmetros. La mayora de ellos tienen una pltora de parmetros
bastante amplia. Conociendo la funcionalidad general del
parmetro es posible imaginar algunos de los parmetros. Por
ejemplo, el comando df nos da el espacio en disco que tenemos en
cada dispositivo. Los nmeros que nos muestra sin embargo, son
difciles de comprender. Es por tanto plausible que existan distintas
opciones para mostrar esos nmeros segn convenga. En
cualquier caso siempre es posible recurrir al comando man (de
manual) para obtener informacin detallada del comando y sus
parmetros. La invocacin sera algo similar a lo siguiente:
man ls
fichero que funciona por caracteres igual que el anterior. Siempre que
leamos de este dispositivo nos va a devolver 0s. Tantos 0s como sea
necesario. Puede ser muy til para borrar ficheros u otros dispositivos.
3.3.3 Los
/dev/urandom
ficheros
/dev/random
disk
/dev/sda
ATA
WDC WD3200AAJS-2
3.5 Udev
Dado que esta parte es algo compleja, debe ser decisin del
lector profundizar un poco ms en ella o pasarla de largo. Aunque se
/sys
Existen ms substituciones de cadenas posibles, estas son
solo algunas de ellas. Si nos fijamos, casi todas empiezan por el
carcter %. Esto significa que si queremos usar este carcter como
parte de alguna accin o algn atributo tendremos que emplear en su
lugar %%.
Veamos un par de ejemplos:
Queremos dar nombre a un dispositivo en funcin del nombre que ya le
ha dado el kernel. Incluiremos en nuestra regla:
PROGRAM= /scripts/renamer %k , NAME=%c{1}, SYMLINK=%c{2}
Queremos cambiar el propietario de un dispositivo segn el driver que
cargue.
PROGRAM= /scripts/changeOwner $driver , OWNER=%c
Hemos insistido en la importancia de testear las reglas que
creamos antes de darlas por buenas. Vamos a ver como hacerlo. De
nuevo recurriremos a udevadm
udevadm test /syspath
Este comando nos informara de cada una de las acciones que
ejecutara y como las ejecutara, de esta manera podemos hacernos
una idea de que reglas quedaran correctamente definidas y cuales
necesitaran ser revisadas.
Una vez tenemos probadas las reglas nicamente nos queda
forzar su carga. Si revisamos este mismo apartado 3.5, veremos que
tenemos dos maneras de hacerlo. La primera reiniciando el sistema y la
segunda recurriendo de nuevo al comando udevadm.
4.1.1 MBR
Este tipo de particin nace al final de los aos 70 para dar
soporte a los ordenadores personales IBM. Ms tarde se ampla su uso
y ahora tenemos un tipo de particin compatible con todos los sistemas
PC.
Master Boot Record o MBR guarda la informacin relativa a
las particiones al inicio del disco. Dado que se trata de informacin
Longitud
Descripcin
000-445
0000-01BD
446 bytes
rea de cdigo
446-509
1BE-1FD
16 bytes
Tabla de
particiones
510-511
1FE-1FF
2 bytes
de arranque
Del byte 000-445: rea de cdigo. Este cdigo es el
que se carga en primer lugar y es por tanto el
encargado de contener el gestor de arranque o el
programa encargado de lanzar el cargador del
sistema operativo. Es muy importante que este cdigo
sea de como mucho 439bytes puesto que los bytes
siguientes suelen estar reservados para la firma del
disco y para un separador de 2 bytes.
Del byte 446-559: La tabla de particiones en si misma,
aqu es donde se almacena la informacin referente a
las particiones en nuestro disco duro.
Del byte 510-511: Una firma que identifica el MBR y
que nos indica su final. Siempre es la misma. 0x55AA
en su notacin hexadecimal o AA55h en notacin
hexadecimal tambin pero en little endian.
Aclaracin
Offset (decimal)
Longitud
Descripcin
1 bytes
Indicador de arranque
(80h=activo)
1-3
3 bytes
1 bytes
Tipo de la particin
5-7
3 bytes
8-11
4 bytes
Primer Sector
12-15
4 bytes
Tamao de la particin en
sectores
4.1.2 GPT
GPT, de las siglas GUID Partition table, surge como un tipo de
tabla de particiones que intenta paliar las limitaciones de MBR. A
diferencia de MBR, en este tipo de tabla de particiones no se requiere
de un rea de cdigo para poder ejecutar el gestor de particiones o
para poder lanzar el arranque del sistema. Para poder realizar estas
tareas las tablas de particiones GPT confan en una interfaz
desarrollada por Intel conocida como EFI. Esta interfaz ofrece
funcionalidades a muchos niveles, puesto que est pensada para
interactuar como puente entre el firmware base y el sistema operativo,
en nuestro caso el sistema Linux. La idea es remplazar a la antigua
BIOS ofreciendo una interfaz ms amigable y con ms funcionalidades
antes de arrancar el sistema. Podramos decir que hablamos de una
BIOS avanzada. Una de las cosas que nos ofrece EFI es la capacidad
de carga de las unidades de almacenamiento.
Aunque podra resultar muy interesante, no entra dentro del
objetivo de este texto discutir las caractersticas del sistema EFI, an
as, no resulta complicado encontrar informacin al respecto por
Internet.
Pese a confiar en el sistema EFI para el arranque, la tabla de
particiones GPT, mantiene en los primeros bytes del disco un MBR. Este
se mantiene por motivos de compatibilidad con sistemas que no den
Longitud
Contenido
8 bytes
4 bytes
12
4 bytes
16
4 bytes
CRC32 de la cabecera
(comprobacin de integridad)
20
4 bytes
24
8 bytes
32
8 bytes
LBA de soporte.
40
8 bytes
48
8 bytes
56
16 bytes
72
8 bytes
80
4 byes
84
4 bytes
88
4 bytes
Offset
(decimal)
Longitud
Contenido
16 bytes
16
16 bytes
32
8 bytes
40
8 bytes
48
8 bytes
56
72 bytes
Nombre de la particin
Particin MBR.
C12A7328-F81F-11D2-BA4B-00A0C93EC93B:
Particin de Sistema EFI.
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7:
Particin de datos para sistemas Linux.
A19D880F-05FC-4D3B-A006-743F0F84911E:
Particin RAID para sistemas Linux.
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F:
Particin de SWAP en sistemas Linux.
E6D6D379-F507-44C2-A23C-238F2A3DF928:
Particin de gestin de volmenes virtuales(LVM) en
sistemas Linux.
No suele ser habitual preocuparse por estos valores, puesto
que los comandos o programas que empleemos para realizar las
particiones o la tabla de particiones gestionarn la mayora de ellos, si
no todos, por nosotros. De la misma manera, los atributos de una
particin los podremos especificar de una forma ms amigable que
insertando nmeros hexadecimales en un offset dado. Pese a ello,
siempre resulta interesante conocer la estructura interna. En un
momento dado, sabemos que insertar un bit concreto en un offset
concreto puede hacer que nuestra particin, a la que no tenamos
acceso, deje de estar en modo de solo lectura. Los atributos que se
pueden aadir a una particin son bastante numerosos puesto que se
tratan a nivel de bit. Esto significa que si un bit est a 1 ese valor se
activa, si est a 0 se desactiva. Este tipo de valores basados en el valor
que toma un bit se conocen usualmente como flags. Esto significa
4.2 La herramienta dd
dd es una herramienta muy potente que permite leer de un
fichero o de un stream de entrada, un dispositivo de tipo s o c, y escribir
lo ledo en un fichero o stream de salida. La funcionalidad que ofrece
dd es extremadamente til tanto para trabajar con dispositivos como
con discos. dd no limita su utilidad nicamente a estos trabajos, si no
que adems permite realizar copias de datos en el formato
especificado y segn los bloques y tamao de bloques especificado. Si
no se especifica ninguna codificacin ni formato, por defecto dd
trabajar, tanto de entrada como de salida con los datos bit por bit.
Podemos, solo con la funcionalidad bsica, asomarnos ya al potencial
de esta herramienta.
dd if=origen of=destino ...
Su funcionamiento es muy sencillo, pero como seguro nos
hemos dado cuenta su sintaxis no es similar a la de los otros comandos
que nos hemos encontrado hasta ahora. Esto es porque pese a ser un
comando que encontraremos en todos o en la mayora de sistemas
Linux, dd ha heredado su sintaxis de un antiguo lenguaje IBM.
Vamos a ver que opciones tenemos:
if=<path> Especifica el fichero, recordemos que un
dispositivo es un fichero, de entrada. Es decir, de
donde leeremos
of=<path> Especifica el fichero de salida, Es decir,
donde escribiremos.
bs=<nmero> Especifica el tamao del bloque en que
se leer y se escribir. Entendemos por tamao de
bloque, cuantos bytes sern ledos y escritos
simultneamente . La combinacin de las dos
siguientes opciones es incompatible con la actual, sin
embargo permiten un mayor nivel de detalle.
ibs=<nmero> Especifica el tamao de bloque que
se leer.
obs=<nmero> Especifica el tamao de bloque
que se escribir.
count=<nmero> Especifica el mximo nmero de
bloques que deben ser copiados.
4.3.2.1 Particiones
Si se trata de una particin, lo primero que deberemos hacer
es asegurarnos de que la particin est vaca, podemos usar, por
ejemplo, la herramienta dd para borrar el contenido de una particin
antes de usarla como una particin de swap. Una vez hecho esto, si
nuestra particin es /dev/sdb1 deberemos crear el espacio de swap y
luego registrarlo en el kernel para que esta pueda usar la particin
como espacio de swap. Haramos lo siguiente:
dd if=/dev/zero of=/dev/sdb1 bs=512 #Borramos la particin con dd
mkswap /dev/sdb1 #Creamos el espacio de SWAP
swapon /dev/sdb1 #Habilitamos el uso de la particin como SWAP
4.3.2.2 Ficheros
gparted
fdisk
Cualquiera de ellas es igualmente vlida. Funcionan adems
de manera similar, eso si, cada una con sus caractersticas, en este
caso nos vamos a centrar en fdisk. No por que sea mejor o peor,
simplemente por una decisin personal.
Antes de ver como trabajar con fdisk, debemos aclarar que los
sistemas Linux requieren al menos una particin. Esta particin es
donde se sita la raz del sistema, es decir /. Si creamos una nica
particin, esta contendr adems el espacio de swap y el espacio de
usuario. Suele ser habitual en los sistemas Linux tener al menos dos
particiones, una para la raz del sistema y otra para el espacio de
SWAP. Si se decide no trabajar con swap, igualmente suele ser habitual
tener una particin para la raz del sistema y otra para los usuarios. Es
decir, una particin para / y otra para /home. Algunas distribuciones
ofrecen la funcionalidad de particionar el disco automticamente en el
momento de la instalacin. En estos casos suele ser habitual tener al
menos una particin de swap y otra para la raz y se ofrece al usuario
la posibilidad de crear una tercera para la /home.
Despus de este pequeo inciso, lo primero que deberemos
hacer es decidir que particiones queremos o necesitamos para nuestro
sistema. Antes de ello si queremos listar las particiones y tablas de
particiones ya existentes, podemos invocar a fdisk con la opcin l.
Para usar el comando fdisk, necesitaremos, de un sistema Linux ya
instalado o emplear alguna de las alternativas en formato Live CD,
como por ejemplo el Live CD de gparted.
Aclaracin
fdisk /dev/sda
Despus de ejecutar el comando, fdisk quedar a la espera
de que le digamos que queremos hacer. Estas son algunas de las
opciones que nos ofrece la aplicacin:
a: Permite indicar que una particin ser bootable o,
lo que es lo mismo, que se podr arrancar desde ella.
d:
l:
Lista los tipos de particiones con los que
podemos trabajar
m:
fdisk
n:
o:
p:
Muestra por pantalla la tabla de particiones
segn la tenemos
q:
v:
correcta
w:
...
Para entender como funcionan los inodes y la estructura
jerrquica de directorios, vamos a recurrir a una simplificacin de como
se trabaja con estas estructuras de datos. Pese a que no contaremos
con toda la informacin que manejan estas estructuras si que nos
permitir hacernos una idea de su funcionamiento.
regulares o directorios.
Ahora que ya sabemos que significa cada elemento de los que hemos
presentado vamos a ver un ejemplo de como trabajar con los inodes.
Veremos un ejemplo terico y a continuacin veremos un ejemplo
prctico usando algunos comandos de Linux que ya nos sonaran.
fichero.
ls i
18 ad???.txt
find . -inum 18 delete
El comando find est buscando en el directorio . ,es decir el
actual, el fichero con inode 18 para borrarlo.
Para terminar con el tema de los inodes, seguro que una de
las cosas que nos viene a la mente es: como puede el Kernel saber
que bloques estn libres para asignarlos a un fichero? En este caso
una de las maneras ms sencillas de mantener el control sobre los
bloques libres es mantener un mapa de bits para los bloques. Si un
bloque tiene asignado un uno (1) es porque est en uso. Si un bloque
tiene asignado un cero (0) no est en uso y puede ser asignado, por
ejemplo, cuando creamos un nuevo fichero. La manera de tratar as los
datos implica que al borrar un inode, simplemente se pone a 0 el bit
que indicaba que ese bloque estaba ocupado. Si reflexionamos sobre
ello, llegamos a la conclusin que la informacin no se ha borrado
completamente del disco, si no que simplemente el kernel la ha
considerado borrada. Es por esto que muchos programas de
informtica forense son capaces de recuperar datos que han sido
borrados de nuestro ordenador.
Juntando conceptos
Como podemos borrar entonces los datos de forma segura?
Seguro que si le damos un par de vueltas a la herramienta dd y
releemos la seccin 4.3.2.1 se nos ocurre una solucin al problema
de borrar los datos de una forma segura empleando el comando
4.7 Journaling
Una de las cosas ms importantes para cualquier sistema de
almacenamiento de datos, ya sea una base de datos, un sistema de
ficheros o cualquier otro sistema, es mantener la integridad de los
datos. Es decir, asegurar que los datos que hay almacenados siguen
siendo los datos que guardamos.
Para ello los sistemas de ficheros nativos de Linux usan un
mecanismo basado en transacciones. Una transaccin es una
interaccin con una estructura de datos compleja en la que todos los
procesos que la componen deben realizarse de una sola vez. La idea
del Journaling es llevar un registro detallado de todas las operaciones
que se realizan con las estructuras de datos para asegurar que si la
transaccin falla en un momento dado podr recuperarse el estado
anterior al fallo. Recordemos que los sistemas Linux, al igual que la
gran mayora de sistemas modernos, son sistemas multiusuario y
multitarea. Esto afectar tambin a como tratar la integridad de los
datos, puesto que mientras realizamos una transaccin debemos
impedir que ninguna otra tarea o usuario pueda alcanzar los datos y
comprometer su integridad.
Pongamos un ejemplo: supongamos que dos usuarios
quieren escribir su nombre en el fichero nombre.txt . Este fichero tiene
como objetivo tener el nombre de todos los usuarios del sistema, a
razn de uno por lnea. Que sucede si el usuario Alberto y el usuario
Benito abren el fichero al mismo tiempo e intentan escribir su nombre?
anteriormente.
Se habilita un espacio para guardar el journal o diario
de las transacciones que se realizarn.
Se anota en el journal la modificacin a realizar y
como deshacerla, por si hubiese un error y fuese
necesario.
Se realiza la modificacin.
Se borra el journal.
Se desbloquean las estructuras implicadas.
Si en algn momento se quieren deshacer las transacciones,
antes de borrar el journal se pueden deshacer una a una siguiendo el
orden. Si al arrancar el sistema se detecta que una transaccin qued
pendiente, es decir, si el journal no ha sido borrado, nicamente se
deben deshacer todas las modificaciones una a una para volver a
tener el sistema de ficheros en un estado coherente y consistente.
Aclaracin
Los tipos de sistemas de ficheros son conocidos, coloquialmente
como formatos. La accin de dar formato a un disco o dispositivo de
almacenamiento se conoce como formatear. Al formatear un disco o
USB en Windows o MAC realmente se est creando un nuevo
sistema de ficheros, no borrando los datos del disco. Los datos del
disco son irrecuperables por la reestructuracin que se comenta
ms arriba. Esto tambin nos dice que si nos piden formatear un
disco en Linux deberemos recurrir a los comandos mkfs.
Advertencia
Comprobar los errores de una particin que se encuentre montada,
ms adelante veremos que significa esto, puede resultar fatal para
los datos. Cualquier cambio en los datos o en el sistema de ficheros
mientras se realiza la comprobacin y podemos acabar con datos
desaparecidos o con un sistema de ficheros inservible.
ficheros
nouser: nicamente un usuario con privilegios de
administrador puede montar el sistema de ficheros.
defaults: Opciones por defecto, se traduce en las
opciones (rw,suid,dev,exec,auto,nouser,async)
noatime: No actualiza las fechas de acceso en los
inodes. Puede suponer una mejora de rendimiento. En
casos como tarjetas SD suele marcarse esta opcin
para alargarles la vida til.
nodiratime: Igual que la opcin anterior pero
nicamente para directorios
Con esta informacin tenemos suficientes datos para poder
montar nuestros sistemas de ficheros y trabajar con ellos cmodamente.
No solo eso, si no que somos capaces de decirle al sistema que monte
automticamente nuestros sistemas de ficheros en el arranque del
sistema. Para terminar solo nos falta un matiz. En los sistemas Linux
modernos es posible que nos encontremos con un directorio llamado
/etc/fstab.d/. En estos casos, cualquier fichero que incluyamos en este
directorio se tratar como una parte del fichero fstab del que ya hemos
hablado.
Advertencia
Cuando trabajemos con fstab debemos ser cuidadosos. Un error de
sintaxis o cualquier otro error en este fichero y es posible que
seamos incapaces de montar nuestros sistemas de ficheros o
incluso de arrancar el sistema. Por ello es recomendable realizar
5. Bash, profundizando
Conocemos unos cuantos comandos para trabajar en los
sistemas Linux que nos hacen la vida ms cmoda o que nos permiten
hacer exactamente aquello que queremos con el sistema en el que
trabajamos. Conociendo los comandos, un mejor conocimiento del
terminal Bash nos permitir trabajar de una manera ms sencilla.
5.1 History
La mayora de terminales, los que no son bash tambin, nos
ofrecen la posibilidad de recuperar comandos que ya hemos ejecutado
usando la flecha arriba de nuestro teclado. En nuestro caso nos
centraremos en el funcionamiento de bash. Encontrar informacin
sobre el terminal que prefiera cada uno, sin embargo no debera ser
difcil y en algunos casos podra ser bastante similar a la que aqu se
presenta.
Los comandos que el terminal almacena se conocen como
historia (history en ingls). Por tanto si en nuestro terminal ejecutamos
history obtendremos una lista de los ltimos comandos ejecutados por
nuestro usuario. History, por defecto, suele almacenar un nmero
limitado de comandos, 500 en las distribuciones Linux basadas en
Debian, esto significa que pasado un tiempo los comandos ms
antiguos dejaran de ser accesibles.
Recuperar un comando que ejecutamos hace 5 das puede
ser muy arduo si lo hacemos a base de apretar 300 veces la flecha
hacia arriba de nuestro teclado. Es por eso que history nos ofrece una
serie de herramientas para poder interactuar de una forma rpida con
los comandos ejecutados.
de los que nos interesa aprovechar una parte o de los que nos
interesa saber que identificador tienen. En Linux cada proceso que se
ejecuta tiene un identificador nico. Si la frase ha sonado a chino no
hay que preocuparse, ms adelante hablaremos sobre procesos, que
son y que informacin nos aportan. Por ahora, podemos decir que
cada programa que se ejecuta en nuestra mquina es un proceso.
Volviendo al tema del terminal, los identificadores de los
procesos pueden ser interesantes para trabajar con ellos. Tambin es
posible que nos interese repetir tan solo el ltimo parmetro que le
hemos pasado a un comando anterior. Por ejemplo, es habitual que
despus de crear un nuevo directorio queramos entrar en l. Las
variables especiales del terminal van a ser las que nos facilitarn todos
estos trabajos en los sistemas Linux. Es importante no confundir estas
variables con los comandos guardados en el historial de comandos,
estas variables tienen siempre el mismo valor, solo que este valor
depende de los comandos recientemente ejecutados.
Bastantes de los valores que toman las variables que vamos a
mostrar tienen mucho que ver con procesos. Si no entendemos bien
cual es el objetivo de la variable o cual es el valor que toma no
debemos preocuparnos. Ms adelante, en el captulo 6, trataremos
largo y tendido los procesos en Linux, en ese momento entenderemos
exactamente cual es el valor que va a tomar cada una de las variables.
Puede ser una buena idea volver atrs en ese momento.
$? : Valor de retorno del ltimo parmetro ejecutado
$_ : ltimo parmetro del ltimo comando ejecutado
$!: Identificador de proceso para el ltimo comando
ejecutado en segundo plano
5.3 Path
PATH es una variable especial en los terminales de los
sistemas Linux. Esta variable permite al terminal saber en que rutas
debe buscar los programas cuando tratamos de ejecutar un comando.
Es decir, cuando nosotros escribimos en un terminal el comando ls. La
variable PATH le indica al terminal donde debe ir a buscar un programa
de nombre ls para ejecutarlo. Si el terminal no encuentra el comando
en ninguna de las rutas que tiene definida en la variable PATH
PATH=dir:$PATH
PATH=$PATH:dir
Poner el nuevo directorio delante o detrs del contenido de PATH
depender de nuestras necesidades. Hay que ser cuidadoso al
manipular esta variable puesto que podramos borrar sin querer
todas las rutas que ya tiene guardadas.
Como sucede con otras variables si le asignamos un valor a esta
variable ese valor se perder en cuanto cerremos la ventana del
terminal o en cuanto cerremos sesin. Si queremos hacer los
cambios permanentes deberemos recurrir a un fichero de
configuracin. Si recordamos la seccin anterior, veremos que
debemos aadir estos mismos comandos al fichero /etc/profile o bien
al fichero /home/usuario/.bashrc segn nos convenga.
5.4 Autocompletar
Una de las funciones ms tiles que nos ofrece bash es la
opcin de autocompletar. Es cierto que la funcionalidad no est
siempre disponible en todos los sistemas Linux aunque siempre es
posible instalarla. Debido a que la instalacin de esta funcionalidad
depende de cada distribucin y no es el objetivo del texto tratar cada
distribucin ni una en concreto, no entraremos en detalles sobre la
instalacin. Sin embargo, no resulta difcil encontrar informacin en
Internet.
Cuando estamos trabajando con el terminal, si apretamos la
tecla tabulador <TAB> este intentara autocompletar lo que hayamos
escrito hasta ese momento. El autocompletado es especfico de cada
aplicacin. Eso significa que si ya hemos introducido un comando, el
autocompletado, cuando este activo, tratar de autocompletar segn
como se obtienen los candidatos. Para ello vamos a ver como funciona
el comando complete. Este comando nos ayudar, por un lado, a
comprender como puede el sistema ofrecernos una lista de posibles
candidatos y por otro lado a poder definir nuestras propias
especificaciones de autocompletado. No veremos todas las opciones
en profundidad pero si las necesarias para hacernos una idea.
Lo primero que debemos saber, es que si todava no tenemos
activado el autocompletado programable podemos hacerlo ejecutando
en cualquier terminal
. /etc/bash_completion
Una vez lo tenemos activado ya podemos recurrir al comando
complete. Este comando tiene multitud de opciones. Quizs la primera
que nos interese ver, para hacernos una idea de como va a funcionar
es:
complete p
Esto nos mostrara las especificaciones de autocompletado
que ya tengamos definidas. Podemos definir especificaciones que
hagan referencia a las ya mencionadas anteriormente. Puede parecer
absurdo definir una especificacin para obtener los directorios con la
funcin autocompletar, pero imaginad que queremos que el comando ls
os devuelva nicamente directorios cuando apretamos el tabulador, en
este caso podemos crear una especificacin de autocompletado para
ello.
complete c [nombre] : Ofrecer posible comandos
para autocompletar nombre.
complete
[nombre]:
Ofrecer
nicamente
{
local curr_arg;
curr_arg=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W -iincoming -ooutgoing -mmissed - $curr_arg ) );
}
6. Procesos y threads
Otro de los puntales claves de cualquier sistema operativo
son los procesos que se ejecutan en cada uno de estos sistemas. Junto
con los ficheros y los usuarios que veremos ms adelante, es lo que
realmente nos permite trabajar con nuestros sistemas. En los sistemas
Linux no es diferente y saber trabajar con ellos nos puede ser de gran
ayuda.
Un proceso puede definirse de una forma sencilla como un
programa en ejecucin. As pues, por fin sabemos lo que es un
proceso. Ms concretamente podramos definirlo como una unidad de
proceso gestionada por el sistema operativo. As pues, cuando
hablamos de un sistema multiusuario y multitarea o multiproceso, nos
referimos a que puede tener al mismo tiempo ms de un programa en
ejecucin.
Hoy en da parece que afirmar esto es una obviedad. Sin
embargo, si nos paramos a pensar en las mquina de hace unos aos
o en las mquina de uso domestico de hoy en da quizs nos daremos
cuenta que podemos tener al mismo tiempo varios programas
ejecutndose, varios procesos, y que normalmente estos procesos son
bastantes ms que el nmero de procesadores que tiene nuestra
mquina. Como es posible que se ejecuten simultneamente ms
procesos que unidades de procesamiento tiene nuestra mquina? La
respuesta es sencilla y bastante obvia una vez se conoce: no se
puede.
Los procesos tienen diversos requisitos y necesidades. Por
ejemplo, pueden necesitar estar esperando a poder leer o escribir en
ejecutndose el comando.
STAT: El estado del proceso. Ms adelante veremos
en que estados podemos encontrar a los procesos
en nuestros sistemas Linux.
TIME: Aunque esta columna parece intuitiva, nada
ms lejos, puesto que nos muestra el tiempo de
CPU que el proceso ha usado hasta ahora. Esto
significa que el proceso puede llevar 45 minutos
ejecutndose a la espera de un evento y el tiempo
mostrado ser 0:00. nicamente el tiempo que el
proceso ha estado ejecutando instrucciones se
computa aqu.
COMMAND: El comando o programa que
corresponde con ese identificador de proceso.
Al igual que muchos otros comandos, ps puede invocarse
usando opciones para modificar la informacin o los detalles que
ofrece. A diferencia de otros comandos, ps no recibe sus opciones, es
decir sus argumentos, precedidos del carcter -, si no que
simplemente recibe todas sus opciones separadas del comando por un
espacio. Algunas de las opciones ms conocidas son:
x: Muestra todos los procesos que corren en el
sistema que pertenecen al usuario que lanza el
comando
a: Muestra los procesos para todos los usuarios
u: Incluye informacin ms detallada de los
procesos
6.2 Seales
Una seal es un mensaje del kernel destinado a un proceso.
Vendra a funcionar de una manera similar a como trabajan las
excepciones de hardware. La idea detrs de las seales reside en
que cualquier proceso que este en ejecucin y reciba una seal
detendr su ejecucin para tratar la seal y en caso de que la seal no
implique terminar el proceso, una vez tratada, el proceso recuperar su
ejecucin normalmente.
Normalmente las seales solo pueden ser enviadas por el
kernel o por otro proceso. Cuando se trata de un proceso, este
nicamente puede mandar seales a procesos que han sido iniciados
por el mismo usuario, de otra manera se necesitarn permisos de sper
usuario. Las seales permiten enviar diversos mensajes a los
procesos, de manera que podemos controlar su ciclo de vida con el
uso de seales. En algunas ocasiones, si somos nosotros los
desarrolladores de alguna aplicacin, incluso podremos interactuar
con las seales desde la aplicacin para obtener el comportamiento
que consideremos oportuno.
El comando kill nos permite mandar seales a un proceso si
conocemos su PID.
kill 1359 #Manda la seal TERM (terminar) al proceso con PID 1359.
Por defecto el comando kill siempre manda la seal TERM al
PID especificado, sin embargo es posible enviar la seal que
deseemos pasndosela como parmetro.
kill -2 1359
kill INT 1359
Cualquiera de las dos formulas anteriores es correcta y de
hecho ambas hacen los mismo. En este caso mandar una seal, la de
interrupcin del teclado. Suele ser habitual esta seal para parar o
finalizar procesos en los sistemas Linux. De hecho, esta seal es el
equivalente al famoso Ctrl+C que ha ido apareciendo a lo largo del
texto.
Las seales disponibles en el sistema son bastante variadas.
A continuacin veremos algunas de ellas. Estn expresadas en dos
formatos, ambos vlidos para usar junto con el comando kill. Sin
embargo, a la primera columna debemos quitarle las tres primeras
letras en caso de querer pasarlas como parmetros. Por que incluir
esas letras entonces? En el lenguaje de programacin C, por ejemplo,
se usan con el nombre completo y en los manuales de los sistemas
Linux aparecen tambin con estos nombres, as que usaremos sus
nombres completos.
Seal
(nombre)
Seal (valor
numrico)
Descripcin
SIGINT
SIGQUIT
SIGILL
Instruccin no permitida o
desconocida
SIGABRT
SIGKILL
Seal de muerte
SIGPIPE
13
SIGTERM
15
Seal de terminacin
SIGTSTP
18,20,24
Seal de parada
Las anteriores son slo una muestra de las seales que hay.
Se trata, quizs de las ms comunes. No todas ellas tienen el mismo
efecto y las descripciones de las seales son muy vagas. Sin embargo,
el tratamiento de una u otra seal puede ser modificado por los
procesos, por lo que dar una descripcin detallada resulta bastante
complicado. Pese a eso, las seales SIGSTOP y SIGKILL son seales
que no pueden ser tratadas por los programas que desarrollemos, si
no que fuerzan siempre la terminacin del proceso sea cual sea el
estado de este. As pues, si algn proceso nos est causando
problemas siempre podemos recurrir a:
kill -9 PID
Finalmente, hay algunas de estas seales que tienen una
equivalencia directa en cuanto a combinacin de teclas del teclado.
Son las siguientes:
CTRL+C: kill -2. Manda una seal de interrupcin
al proceso.
chrome
3072 dani 20 0 1138196 282700 110108 S 2,0 1,7 2:14.22
chrome
1608 dani 20 0 404816 138800 55904 S 1,3 0,8 2:39.46
Xorg
2649 dani 20 0 1978388 258592 93712 S 1,0 1,6 2:06.50
cinnamon
4017 dani 20 0 1027028 355312 80784 S 1,0 2,2 1:24.25
chrome
2404 dani 9 -11 512236 12708 9988 S 0,7 0,1 0:17.32
pulseaudio
4879 dani 20 0 718964 52856 31332 S 0,7 0,3 0:02.09
chrome
2685 dni 20 0 2421212 119344 32568 S 0,3 0,7 0:16.68
dropbox
3206 dani 20 0 864884 168212 56048 S 0,3 1,0 0:43.57
chrome
4762 dani 20 0 622428 33680 23552 S 0,3 0,2 0:01.74 gnometerminal
4849 root 20 0 0 0 0 S 0,3 0,0 0:00.09
kworker/1:2
1 root 20 0 33888 4368 2600 S 0,0 0,0 0:01.27
init
2 root 20 0 0 0 0 S 0,0 0,0 0:00.00
kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:00.01
ksoftirqd/0
6.4.1 at
El comando at permite programar tareas, aunque estas no
sern persistentes. Que significa esto? Significa que en el momento
que apaguemos el ordenador todas las tareas programadas con at
sern eliminadas.
Podemos invocar el comando at de la siguiente manera:
at 11:00
at 11:00 15/09/2015
Si la hora y la fecha son correctas, at no nos va a dejar
programar una tarea en el pasado, nos aparecer un prompt, es decir
un puntero en el terminal que nos da la opcin de escribir. Desde ese
momento podemos escribir tantos comandos como queramos, tal como
si los estuvisemos escribiendo en un terminal. Una vez hayamos
terminado de introducir todas las tareas que queremos programar para
esa fecha simplemente debemos presionar Ctrl+D y saldremos del
comando at, dejando las tareas correctamente programadas.
Una vez hemos programado nuestras tareas podremos
consultarlas con el comando:
atq
Si nos fijamos en la salida de atq, veremos que junto con cada
tarea nos aparece un nmero identificador. Este nmero es nico para
cada tarea y nos permite identificarlas por si quisisemos trabajar con
ellas. Por ejemplo, nos podra resultar interesante borrar una de las
tareas que tuvisemos programadas. En este caso podramos recurrir
a:
atrm <identificador_de_tarea>
Para hacernos la vida ms fcil el comando at permite trabajar
con algunas palabras en ingls que nos harn la vida ms fcil. A
continuacin se muestran algunos ejemplos, no son todos los
existentes, pero no es difcil encontrar informacin sobre estos detalles
en Internet.
at midnight #Se ejecutarn las tareas a medianoche
at 10:32 +5 days #Se ejecutarn las tareas a las 10:32 de aqu a 5 das
at 10:32 +5 weeks #Se ejecutarn las tareas a las 13:32 de aqu a 5
semanas.
at 10:32 APR 20 #Se ejecutar la tarea a las 10:32 del 20 de abril
En el caso de especificar los meses hay que tener en cuenta
que se deben expresar siempre en maysculas las tres primeras letras
del mes en ingls. Para saber cuales son las opciones que acepta
vuestro comando at es posible que sea necesario recurrir al manual.
Recordemos que la mayora, si no todas las distribuciones de Linux,
cuentan con el comando man. Este comando nos permite ver el manual
de la mayora de comandos y programas de nuestro sistema.
man at
6.4.2 cron
El comando cron permite programar tareas de forma
persistente, es decir podemos apagar el ordenador y al volverlo a
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# tareas
*****
comando a ejecutar
8. Vuelta a 4.
Si nos fijamos cuidadosamente veremos que los pasos de 1 a
3 solo se ejecutan 1 vez al lanzar el demonio de cron. Esto significa
que si modificamos el fichero /etc/crontab a mano, nuestra tarea no va a
entrar a la lista de tareas pendientes hasta que no reiniciemos el
demonio de cron o la mquina. Es por eso que se recomienda usar el
comando crontab e, puesto que el comando gestiona la inclusin de
la tarea en la lista de eventos por nosotros.
7. Recursos y monitorizacin
Hemos hablado de ficheros, hemos hablado de dispositivos y
de procesos. Son pocos los puntales que quedan por descubrir de
cualquier sistema Linux sin embargo, ningn sistema operativo podra
existir si no fuese capaz de aprovechar los recursos de las mquinas
subyacentes. Es por eso que ser capaz de monitorizar los recursos de
los que disponemos y el uso que se les da es un activo importante para
cualquiera que trabaje con un sistema Linux.
7.1.1 cpu
La cpu o las cpus, puesto que hoy en da todos los
ordenadores disponen de ms de una, son las que nos permiten
realizar clculos, es decir ejecutar programas y mantener vivos los
procesos. Los distintos procesos de nuestro ordenador compiten por
obtener tiempo de procesamiento y son las CPUs las que nos van a
permitir drselo. Este nmero de CPUs viene dado por el procesador
7.1.2 Memoria
La memoria RAM (Random Access Memory) es un recurso
que nos permite almacenar informacin y acceder a ella sin necesidad
de tener una tabla de particiones o un sistema de archivos.
Precisamente este tipo de memoria recibe su nombre por la manera en
que se accede a ella. El nombre, que proviene del ingls, son las siglas
de memoria de acceso aleatorio.
Este tipo de memoria es mucho ms rpido que los mtodos
de almacenamiento magnticos o de estado slido. El precio por
Megabyte es tambin mayor caro que el de los discos duros. Adems,
plantea otro problema, la tecnologa de la memoria RAM es muy rpida
pero se basa en condensadores que se cargan y se descargan (1s y
0s) para guardar la informacin. El hecho de que la tecnologa use de
Juntando conceptos
Si volvemos a la seccin 4.5 Sistema de ficheros, recordaremos que
nicamente vamos a poder trabajar con aquellos dispositivos que
1%
5.4 del captulo sobre bash. Esto quiere decir que si llegamos a llenar
la particin montada en la raz del sistema es muy posible que nos
encontremos con un sistema con el que es bastante difcil, o casi
imposible, trabajar. Por ello debemos ser cuidadosos con el espacio
restante en disco. En estos casos, para saber donde estamos gastando
nuestro espacio en disco, podemos recurrir a la herramienta du.
du *
Nos dar lo que ocupa cada uno de los elementos del
directorio actual. Sin embargo, el comando du no nos va a mostrar el
tamao completo de los directorios, si no el de todos sus elementos. Si
queremos obtener el tamao total de los directorios dentro del
directorio actual deberemos emplear el comando
du s *
De esta manera sumar el tamao del contenido de los
subdirectorios para mostrarnos finalmente este valor. Al igual que ls o
df, du cuenta tambin con la opcin h que permite mostrar la salida en
un formato comprensible para los humanos. Adems, permite
especificar un fichero o directorio concreto, tan solo se debe substituir
el asterisco * por la ruta del fichero del que se quiere calcular el
tamao.
du hs *
Esta herramienta puede ser tediosa de usar, pero se puede
automatizar su uso mediante scripts. Hay que tener en cuenta que en
algunas ocasiones puede parecer que nuestro sistema Linux se ha
quedado bloqueado puesto que du toma un tiempo considerable de
fallos menores. Para poder ver los fallos mientras se est en el modo
interactivo de top se debe presionar la tecla f y la tecla u a
continuacin. Deberamos ver una nueva columna de nombre nFLT
que nos muestra los fallos de pgina mayores. Sobre todo en procesos
que hacen un uso intensivo de memoria y donde el tiempo es crtico
este valor nos aporta mucha informacin.
8. Usuarios
Con los usuarios, completamos el ltimo de los puntos claves
de cualquier sistema operativo moderno y, ms concretamente, de
cualquier sistema Linux moderno. Un usuario en un sistema Linux es
cualquier entidad capaz de ejecutar procesos y poseer ficheros.
Debemos recordar que siempre que hablemos de sistemas Linux
estaremos hablando de sistemas multiusuarios. Una correcta gestin
de los usuarios puede llegar a suponer una diferencia muy importante
respecto a la seguridad de nuestros sistemas con una gestin nula o
inexistente.
a continuacin:
-D: Usa los valores por defecto del sistema para
crear una nueva cuenta de usuario. No suele ser
habitual emplear esta opcin.
-b <directorio>: Permite especificar el directorio
base para el directorio raz del usuario. Al nombre
especificado se le aade el nombre de usuario que
se est creando. Este valor es /home por defecto. Es
decir, si este parmetro toma el valor /var para un
usuario. Este tendr su directorio raz en
/var/usuario/.
-m: Crea el directorio raz del usuario si este no
existe. Si se especifica la opcin b y no se
especifica esta opcin el directorio raz del usuario
debe existir en el equipo u obtendremos un error.
-d <directorio>: Especifica el directorio raz del
usuario. Lo habitual es aadir el valor especificado
al directorio base. La ruta resultante no tiene por
que existir. Si no existe, sin embargo, el directorio
no se crear.
-e <fecha expiracin>: Permite especificar la fecha
en que la cuenta de usuario expirar. La fecha
debe expresarse en formato AAAA-MM-DD para
que sea tomada en cuenta.
-g <GID>: Permite especificar el grupo principal
para el usuario.
tabulador y el valor que debe tomar. Estos valores afectarn a todos los
usuarios del fichero sudoers. Algunos de los valores que podemos
encontrar son:
authenticate: Puede tomar los valores de on y off.
Si est activo obliga a los usuarios a autenticarse
antes de usar cualquier comando con sudo. Por
defecto est activo.
env_reset: Limpia cualquier variable de entorno
seteada antes de ejecutar el comando.
timestamp_timeout: Permite especificar el tiempo
que debe durar la sesin de sudo. Es decir, durante
cuantos minutos el comando sudo no volver a
pedir la contrasea al mismo usuario para
autenticarse. Este parmetro solo tiene sentido si
authenticate se encuentra activo.
insults: Si est activo el comando insultar a los
usuarios que se equivoquen al introducir la
contrasea. Por defecto se encuentra inactivo. La
verdad es que, a parte del detalle gracioso, no
aporta mucho.
log_input: Si se activa, todas las entradas del
usuario cuando emplee sudo quedarn
registradas. Por defecto quedarn registradas en
/var/log/sudo-io. Por defecto log_input est
desactivada.
mail_badpass: Si el usuario que intenta ejecutar el
ALL=(ALL:ALL) ALL
8.9
PAM
(Pluggable
Authentication
Modules)
A diferencia de la identificacin la autenticacin no gozaba de
un sistema centralizado en los antiguos sistemas Linux. Para solventar
el problema, aparece en 1995 de mano de Sun Microsystems lo que se
conoce como PAM por las siglas en ingls de Pluggable Authentication
Mode. Este sistema provee un mecanismo flexible y centralizado para la
autenticacin de los usuarios. Aunque a da de hoy, no todas las
distribuciones de Linux implementan por defecto este mecanismo si
que lo hacen la mayora de ellas.
La idea de PAM es que las diferentes aplicaciones puedan
delegar la autenticacin de usuarios a este mecanismo para tratar de
identificar y autentificar al usuario. El diseo centralizado que tiene y el
sistema modular permiten aadir de manera sencilla segundos factores
de autenticacin, la autenticacin mediante dispositivos fsicos, un usb
por ejemplo, o casi cualquier otro sistema que se nos ocurra.
Para entender como funciona PAM lo mejor es echar un
vistazo a sus ficheros de configuracin. Los mayores problemas que
nos encontraremos son:
Cada distribucin gestiona de forma distinta los
ficheros de configuracin de PAM
Es posible encontrar la configuracin de PAM en
/etc/pam.conf o bien en distintos ficheros dentro del
directorio /etc/pam.d/
Los ficheros de configuracin permiten la inclusin,
mediante lneas de texto en los ficheros de
configuracin de otros ficheros de configuracin
completos, cosa que dificulta la tarea de
entenderlos.
No todos los mdulos de PAM tienen porque estar
siempre disponibles, es posible que sea necesario
habilitarlos.
Teniendo claras las limitaciones que existen podemos
abordar los ficheros de configuracin de PAM. Estos ficheros,
independientemente de la distribucin, son ficheros de texto con una
estructura similar. Empecemos por el caso en el que disponemos del
fichero /etc/pam.conf. En este caso, cada lnea del fichero representa
una regla y debe tener una estructura como la que se presenta a
continuacin:
servicio tipo control ruta [argumentos]
servicio: Nombre de la aplicacin o el fichero
sobre el que se aplicar la regla.
Tipo: Especifica el tipo de accin que deber hacer
PAM. Esto se hace mediante la especificacin de
uno de los 4 grupos de gestin que se presentan a
continuacin:
account: Permite realizar tareas de gestin de la
cuenta de usuario sin realizar ninguna
autenticacin, por ejemplo validar el estado de
una cuenta de usuario.
auth: Permite autenticar a un usuario en dos
pasos. El primero de ellos es asegurarse que el
auth
auth
auth
sufficient
sufficient
required
pam_rootok.so
pam_unix.so
pam_deny.so
manuales.
En el caso que exista, el fichero /etc/pam.d/other
define la configuracin por defecto para cualquier
aplicacin que no disponga del fichero de
configuracin para PAM correspondiente.
Algunas distribuciones de Linux generan ficheros
de configuracin para PAM de forma automtica, en
estos casos, no suele ser muy recomendable
cambiar dichos ficheros de configuracin a menos
que se tenga muy claro lo que se est haciendo. En
estos casos, siempre encontraremos algunas
comentarios en el fichero, lneas que empiezan por
# para avisarnos de que los ficheros han sido
generados automticamente.
Al trabajar con los ficheros de configuracin de PAM debemos
hacer siempre una copia de seguridad. Si por algn casual
cometisemos un error en los ficheros de configuracin podramos
llevarnos una sorpresa muy desagradable. En el peor de los casos
podramos ser incapaces incluso de entrar al sistema. Si esto sucede y
hemos sido precavidos, lo nico que debemos hacer es restaurar los
ficheros de configuracin desde la copia de seguridad.
tipo
recurso
limite
manera una regla definida para un grupo prevalecer sobre las reglas
que se definen por defecto.
sistemas modernos.
2. El cargador de arranque, boot loader, busca la imagen
del kernel en el disco y la carga en memoria, una vez
cargada en memoria la ejecuta.
3. El kernel inicializa los dispositivos y sus drivers
correspondientes. Podemos refrescar algunos detalles
si volvemos al captulo 3.Dispositivos o a la seccin 3.5
Udev. Es en etse momento que kernel ya conoce los
dispositivos conectados y es capaz de proporcionar
esa informacin para que nosotros trabajemos ms
adelante, an as aun no podremos interactuar con
esta informacin.
4. El kernel monta el sistema de ficheros raz. Es decir, el
sistema de ficheros principal. Si recordamosla seccin
4.9 Montando un sistema de ficheros y, en concreto
como funciona el fichero /etc/fstab, podemos darnos
cuenta que este proceso es algo complejo y que
implica comprobaciones y otras subtareas.
5. El kernel inicia un programa llamado init con PID 1. Es
el primer programa del espacio de usuario. Es decir, el
programa init inicia el espacio de usuario.
6. Init inicia los servicios de bajo nivel como udevd y
syslogd. Esto significa que hasta este momento no
somos capaces de interactuar con los dispositivos o de
generar entradas de log en el sistema.
7. Se configura y se levanta la red.
descriptivos.
El comando dmesg. Este comando nos devolver
el contenido de los mensajes del kernel desde el
ltimo arranque. La salida de dmesg puede ser
extremadamente grande por lo que no se
recomienda ejecutar el comando dmesg sin ms. En
su lugar es recomendable redirigir la salida a otro
programa como less, more o tail.
dmesg | tail
dmesg | less
Aunque no podemos entrar a explicar todos los mensajes que
arroja dmesg a continuacin se muestra una posible salida de este
comando:
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc
version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed
Oct 23 17:26:33 UTC 2013
(Ubuntu 3.11.0-13.20-generic 3.11.6)
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] NSC Geode by NSC
[ 0.000000] Cyrix CyrixInstead
[ 0.000000] Centaur CentaurHauls
con los logs del kernel es el comando grep. Como ya hemos visto en la
seccin 5.5 Algunos comando bsicos, el comando grep es una
herramienta que permite buscar texto plano que coincida con una
expresin dada. As pues podemos hacer uso de expresiones como:
#Buscar mensajes sobre los dispositivos SCSI disk
dmesg | grep -i sd
#Buscar mensajes sobre dispositivos usb
dmesg | grep i usb
Al igual que muchos otros de los comando de sistemas Linux,
dmesg tiene sus propias opciones y argumentos. La lista de
argumentos para dmesg es considerable y nos permite una gran
flexibilidad. Vamos a ver algunos parmetros que resultan interesantes.
Para ms informacin sobre los parmetros de dmesg es posible
recurrir a la entrada del manual:
man dmesg
-u: Muestra los errores del espacio de usuario.
-t: No muestra las marcas temporales del kernel.
-C o --clear: Elimina el buffer de mensajes del
kernel. Debemos ser cuidadosos con esta opcin.
-c: Elimina el buffer con los mensajes del kernel
despus de mostrarlos por pantalla
-L: Muestra la salida de dmesg en distintos colores.
Puede ayudar a comprender los mensajes que
vemos.
9.2 El bootloader
El boot loader es un pequeo programa que arranca
despus de las comprobaciones iniciales y de la interfaz de
entrada/salida bsica, es decir despus de la BIOS. El arranque del
sistema depende en gran medida de nuestros discos y de la BIOS, el
boot loader, por tanto, deber ser acorde a la configuracin de nuestra
mquina. En funcin de si disponemos de una mquina que permite el
arranque desde UEFI o si tenemos un disco con un MBR, ver la seccin
4.1 Tabla de particiones y particiones, deberemos escoger el boot
loader en consecuencia.
La tarea del boot loader es sencilla, al menos en apariencia.
Carga el kernel del sistema operativo en memoria y lo ejecuta. Aunque
enunciado parece sencillo es una tarea que a medida que la miramos
detalladamente se revela complicada. En primer lugar debemos saber
donde se encuentra la imagen del kernel. En segundo lugar debemos
conocer con que parmetros se debe llamar al kernel.
Parece que la respuesta es sencilla: tanto el kernel del
sistema operativo como los parmetros con los que se debe llamar
estn en algn lugar del sistema de ficheros. La conclusin sencilla es
que el boot loader nicamente debe buscar en el sistema de ficheros
para encontrar la imagen del kernel y el fichero de configuracin con
los parmetros. Aunque se trata de la conclusin ms fcil, se nos
(hd0)
(hd0,msdos1)
(hd0, msdos5)
necesario.
9.10 Runlevels
Un sistema Linux se puede encontrar en diversos estados en
cada momento de su ejecucin. Los estados de un sistema operativo
complejo se definen por los procesos que se estn ejecutando o que
se pueden ejecutar en un determinado momento. Este conjunto de
estados se conoce como runlevels en las implementaciones System V
de Init. Lo comentamos de manera global dado que Upstart y Systemd
mantienen compatibilidad con los runlevels para dar soporte a
aquellos scripts o servicios que estn pensados para ejecutarse
nicamente con System V. Sin embargo, tanto Upstart como Systemd
consideran el sistema de runlevels obsoleto y las implementaciones
difieren bastante entre uno y otro estndar.
Nombre
Descripcin
Halt
Single-user
Modo de recuperacin. No se
ejecuta ningn demonio ni se
configura la red. nicamente est
disponible el usuario root y los
sistemas de ficheros. GRUB suele
dar la opcin de iniciar en este
runlevel.
Multi-user
Multi-user +
networking
servicios de red
En desuso
Multi-user +
GUI
Reboot
Reinicia el sistema.
runlevel
N5
who r
run-level 5
2015-09-06 8:37
son:
wait: El proceso se lanzar al entrar en el
runlevel e init se esperar a que termine el
proceso antes de realizar ninguna otra
accin.
respawn: El proceso se volver a lanzar una
vez termine.
once: El proceso se lanzar al entrar al
runlevel, init no esperar a que termine el
proceso para lanzar otros programas del
runlevel.
powerwait: Si init recibe una seal de que
hay problemas de corriente o alimentacin, se
de el apagado, por ejemplo, ejecutar el
proceso y esperar a que termine antes de
hacer nada ms.
boot: El proceso se ejecutar durante el
arranque del sistema. En este caso se
ignorar el runlevel. Init no esperar a que
termine el proceso para lanzar otros.
bootwait: El proceso se ejecutar durante el
arranque del sistema. En este caso se
ignorar el runlevel y se esperar a que
termine el proceso antes de realizar ninguna
otra accin.
9.12 Systemd
Systemd es una de las implementaciones ms nuevas para el
programa Init. A diferencia del init de System V, systemd engloba muchas
ms tareas y responsabilidades. Systemd adems de manejar los
servicios de nuestro sistema Linux es capaz de montar sistemas de
ficheros, monitorizar la red, lanzar temporizadores y otra gran mirada
de tareas.
Este conjunto de funciones que ahora es capaz de realizar
systemd no vienen solas. La complejidad tanto en el procesado como
en la configuracin del sistema ha crecido muchsimo al implementar
este Init. Pese a la complejidad, parece que cada vez son ms las
distribuciones que incluyen systemd. A diferencia de sus competidores,
systemd hizo pblica una interfaz de programacin para que los
desarrolladores que quieran puedan trabajar con ella. Quizs este es
uno de los motivos de su amplia aceptacin.
Antes de adentrarnos un poco en la complejidad de systemd
vamos a ver, a grandes rasgos, que sucede despus de iniciar el
kernel.
1. Systemd carga su configuracin
2. Systemd determina su objetivo de arranque.
Recordemos que systemd a diferencia de otros como
systemV, trabaja por objetivos. El objetivo por defecto
de systemd suele estar definido en el fichero
default.target.
3. systemd determina todas las dependencias que debe
satisfacer para lograr el objetivo. En otros Init como el
de SystemV esto no era necesario porque el
lanzamiento de los servicios era secuencial. Systemd
permite el lanzamiento de los distintos servicios en
paralelo.
4. Systemd activa las dependencias y el objetivo de
arranque.
9.12.3.1 journalctl
Una de las caractersticas de systemd es que guarda los logs
en formato binario, es decir, no comprensible por humanos. Para poder
ver entonces los logs de una unidad o de systemd se debe recurrir a
otra herramienta: journalctl.
Por defecto journalctl nos muestra los logs del sistema. Esto es
el equivalente a inspeccionar los logs del kernel durante el arranque
leyendo el archivo /var/log/messages, podemos recordar algunas
cosas volviendo a la seccin 9.1 Los mensajes de Inicio.
journalctl permite especificar una unidad concreta de la que
obtener el log, un programa o incluso un nombre de usuario. Esto es
porque systemd pasa a gestionar los logs del sistema, cosa que no
hace System V.
La mejor manera de conocer todas las opciones de journalctl
es recurrir a las pginas del manual, sin embargo vamos a tratar de ver
a travs de algunos ejemplos, algunas de las opciones que nos ofrece
journalctl
9.13 Upstart
Upstart es un programa de inicio que adoptaron Ubuntu y
otras distribuciones. A da de hoy ha perdido mucho terreno respecto a
systemd que es el que se est imponiendo como opcin mayoritaria
para substituir a system V. Upstart a diferencia de systemd es orientado
a eventos. Al lanzarse el programa se genera el primero de los eventos
por parte de Upstart. El primer evento desencadena la ejecucin de
algunos programas de inicio que a su vez desencadenan nuevos
eventos. Una vez el sistema esta ha arrancado completamente, Upstart
queda a la espera de nuevos eventos y es capaz de gestionarlos.
Adems las unidades con las que trabaja Upstart son
conocidas como trabajos. Los trabajos son lanzados por los eventos y
emit startup
Es el caso de start on o de emit. start on o stop on
permiten definir cuando el trabajo debe lanzarse o pararse. Ambos
pueden recibir como parmetros el nombre de un evento o un runlevel.
En el caso del nombre del evento estaremos especificando que el
trabajo debe lanzarse en cuanto suceda el evento. En el caso de
especificar un runlevel el trabajo se lanzar o parar en cuanto se
cambie a dicho runlevel. En el caso del ejemplo, el trabajo se lanzara
al entrar en el runlevel 2 o en el 3. El funcionamiento de los runlevels
es el que se ha descrito en la seccin 9.10 Runlevels.
emit permite lanzar un evento. Esta funcionalidad puede ser
muy til para ejecutar otros trabajos segn un orden de prioridad que
nos convenga. Los eventos pueden ser definidos por el usuario.
Adems, hay una serie de eventos conocidos que pueden ser usados
para poder realizar una planificacin medida y ajustada. Algunos de
ellos son:
control-alt-del: Evento que se produce cuando
se da la pulsacin de las tres teclas
mencionadas al mismo tiempo.
startup: Es el primer evento que lanza Upstart al
iniciarse.
power-status-changed: Es un evento que se
genera cuando cambia la alimentacin de
corriente de la mquina. Por ejemplo si se
mantiene apretado durante varios segundos el
botn de apagado y el sistema se va a apagar.
9.13.2 initctl
De la misma manera que en systemd tenamos systemctl,
Upstart ofrece la herramienta initctl para interactuar con l. initctl nos
permite diversas tareas, algunas de ellas tan tiles como la posibilidad
de enviar seales en cualquier momento.
initctl start <trabajo> [clave=valor, ...]
Permite lanzar un trabajo, independientemente de si se ha
satisfecho o no el evento que lo lanza. La lista de parejas clave=valor
permiten pasar parmetros al trabajo que se est intentando lanzar. Si
el programa ya se encuentra en ejecucin, este comando lanzar una
nueva instancia. Si no se quiere que un programa o servicio pueda
tener mltiples instancias, por ejemplo no nos interesa tener dos
servidores web, es posible especificar en el fichero de configuracin la
opcin
instance
Si se intenta lanzar un trabajo configurado como instancia y
este ya se est ejecutando se obtendr un error.
initctl stop <trabajo> [clave=valor,...]
Permite parar un trabajo. De nuevo la lista de parejas
10. Red
Aunque tener el sistema conectado en red no es
imprescindible para su funcionamiento, hace ya unos aos que un
sistema que no est conectado a otro, aunque no este conectado a
Internet, sirve de bien poco. En el mundo de la informtica se dispone
ya de servidores de disco, redes internas y externas y de una de las
redes globales ms conocidas por todos: Internet. As pues, la
configuracin de la red y sus caractersticas se han convertido en una
de las cosas esenciales para cualquier mquina y tambin para los
sistemas Linux.
10.4 Direcciones IP
Aunque la idea es que el protocolo usado en cada una de las
capas sea transparente al resto de capas, la verdad es que el
protocolo IP y su compaero ICMP de la capa de internet, forman parte
casi inseparable de las implementaciones de protocolos de red de
cualquier sistema moderno. El protocolo IP pretende que sea posible
enviar mensajes de una mquina a la otra independientemente del
hardware que haya debajo, independientemente de la topologa de
red. La idea detrs de IP es una red descentralizada en que existen
subredes y una manera de conectar estas subredes entre si. De ah el
nombre de internet: la capa permite la conexin entre redes, en ingls
net.
El protocolo IPv4 que es a da de hoy el ms extendido, est
asociado con las direcciones IPs que son direcciones de aspecto:
a.b.c.d #Es un ejemplo. Una IPv4 real no tendr letras
127.0.0.1
Estas direcciones son una tupla de 4 nmeros separados por
puntos. Cada uno de los 4 nmeros es la representacin en base
decimal de 8 bits, la direccin completa son por tanto 32 bits. Esto
significa que ninguno de los nmeros podr ser nunca superior a 255.
Estamos limitados tambin, a un total de 4 mil millones de direcciones.
Las direcciones IP deben ser nicas en la red donde se encuentran.
Aunque esto es una simplificacin, un clculo rpido nos lleva a darnos
cuenta que los dispositivos conectados a da de hoy superan con
creces los 4 mil millones. Con el propsito de suplir la carencia de
direcciones IP, adems de otras necesidades, nace IPv6. Este nuevo
protocolo permite representar las direcciones IP con 128 bits en lugar
10.4.1 Subredes
Comprender las subredes y las direcciones IP, as como su
funcionamiento, es el primero de los pasos para comprender como
funciona internet. Aunque no es el objetivo de este texto profundizar
en las subredes, tambin son uno de los bloques imprescindibles para
comprender como funciona cualquier red de computadores y por tanto
se intentar dar una visin global.
Una subred es un conjunto de mquinas, cada una con su
direccin IP, de tal manera que la direccin IP de estas mquinas, est
de alguna manera agrupada u ordenada. As por ejemplo, todas las
mquinas que tengan una IP entre 192.168.10.0 y 192.168.10.255
pueden pertenecer a la misma subred. Todas las direcciones IP estn
definidas por dos elementos: la direccin IP y la mascara de red. La
direccin IP ya la hemos visto. La mascara de red tambin nos la ha
mostrado ifconfig. Dicha mascara nos est indicando que parte de la
direccin IP nos indica la red y que parte identifica al host. Tal como
sucede con la direccin de las cartas en las que se especifica calle y
nmero de vivienda.
Para saber como relacionar la mascara de red con la IP
debemos pasar a notacin binaria:
IP: 10.23.2.0 --> 11000000 10101000 00000001 00011101
Mascara: 255.255.255.0 --> 11111111 11111111 1111 1111 00000000
Lo que indica la mascara son los bits de la direccin IP que no
pueden ser modificados. Dicho de otro modo, que bits de la direccin IP
sirven para especificar la subred a que pertenece la mquina.
por ejemplo:
IP: 192.168.2.1 Mask: 255.255.255.0
# Es equivalente a
IP: 192.168.2.1/24
Si nos fijamos en la notacin en binario ser ms sencillo
comprender el porque:
11111111 11111111 1111 1111 00000000
#Los primeros 24 bits son 1, mientras que el resto son 0s.
Una IP con una mascara con todo 1s est representando de
forma unvoca un host. Si los 32 bits de una direccin IP sirven para
identificar una subred, significa que la subred est compuesta por una
nica mquina con la IP expresada.
111111111111
y completar con 0s hasta completar las 32 cifras
11111111111100000000000000000000
Luego cada 8 cifras introducimos un espacio y convertimos los
4 nmeros binarios que obtengamos a decimal.Eso nos dar la
mascara.
11111111 11110000 00000000 00000000
255 240 0 0
Debemos tomar en cuenta que una mscara tendr los 1s de
forma consecutiva. No debemos considerar mascaras que tengan 0s
intercalados entre los 1s.
Juntando conceptos
Si la mascara de red representa bits invariables de la direccin IP,
los bits puestos a cero representan la parte variable de la IP, la que
nos permite identificar a un host. Esta parte variable, permite
representar un nmero limitado de hosts. Dicho de otro modo, la
mascara de red, adems de indicar cual es la subred, limitar el
nmero de IPs, de dispositivos, que pueden estar conectados a una
misma subred. Con una mascara /24 nos quedarn 8 bits libres.
Estos 8 bits nos permitiran representar un total de 256 IPs distintas.
Lamentablemente la primera IP y la ltima de cualquier subred
estn reservadas. Una mascara /24 permite, entonces, disponer de
254 IPs distintas en la subred.
con
netmask
anteriores:
ifconfig eth0 0.0.0.0
#ip address delete
ip a d 127.0.0.1/24 dev eth0
#si tuviesemos ms de una IP y quisiesemos borrarlas todas
ip a flush dev eth0
la
informacin
aliasIP1
de una tabla de enrutamiento que les permite decidir por que interfaz
deben entregar los mensajes. Si deben realizar entrega directa o si por
el contrario deben entregar el mensaje a un router. Incluso pueden
enviar los mensajes que van a una determinada direccin IP con la
direccin de origen que se especifique. Para ver la tabla de
enrutamiento de nuestro sistema podemos emplear
route n
Destination Gateway
Genmask
Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0
255.255.255.0 U 0 0
0 eth0
0.0.0.0
192.168.1.10 0.0.0.0
UG 0 0
0 eth0
ip r s # ip route show
192.168.99.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 192.168.99.254 dev eth0
Aunque la salida de ambos comandos es bastante distinta, en
esencia nos muestran la misma informacin. Fijmonos primero en la
salida del comando route n.
Vemos que la primera columna nos indica la destinacin. En la
primera lnea una IP que termina en 0. Si recordamos el apartado de
subredes, hemos comentado que una la parte que indica el host de
una Ip no poda ser todo 0s o todo 1s. Estas direcciones estn
reservadas. La direccin con todo 0s en la parte que no representa la
subred, se emplea junto con la mascara de red, la tercera columna,
para indicar que la regla afecta a la subred al completo. La segunda
columna nos indica el gateway o puerta de enlace, es decir, a donde
deben enviarse los mensajes que lleguen a la mquina, o sean
Encontramos dos opciones: la del ejemplo, scope link que nos indica
que se trata de entrega directa, por tanto que la destinacin se
encuentra en la misma red, o bien via 192.168.99.254 que indica
que se debe enviar a travs de un router y la IP de dicho router.
10.7 DHCP
Actualmente las IPs fijas y la configuracin de servidores de
resolucin de nombres de dominio o de las tablas de rutas no suele
hacerse manualmente. Las redes han crecido mucho y en muchas
ocasiones, las IPs que son accesibles para todo el mundo, las IPs
pblicas esconden detrs redes privadas con sus propias IPs.
Para realizar estas configuraciones de forma automtica el
protocolo DHCP (Dynamic Host Configuration Protocol) permite
alquilar una direccin IP, y obtener la ruta por defecto y los
servidores de DNS de un servidor. El servidor de DHCP debe existir en
la propia red local, puesto que en el momento de recurrir a l, todava
no disponemos de direccin IP. Esto hace que en la mayora de
ocasiones, sea el propio router de la red local el que ofrezca tambin
el servicio de DHCP.
DHCP funciona como un cliente que se conecta a un servidor.
En los sistemas Linux este cliente es un programa conocido como
dhclient. Al iniciar el sistema se lanza el servicio de dhcp para obtener
la configuracin de red. Si as se ha especificado, una vez obtenida la
configuracin del servidor de DHCP, suele almacenarse en
/var/state/dhclient.leases. Vamos a ver, a grandes rasgos como funciona
DHCP.
1. La mquina que quiere obtener una IP y la
correspondiente configuracin (servidores DNS, ruta
por defecto,...) manda a toda la red local una peticin
de DHCP.
10.8.1 TCP
Aunque parezca una sutileza debemos notar, que es la
primera vez, al hablar de TCP, en la que se habla de conexin. Esto se
debe a que las conexiones en la capa de internet son mquina a
mquina no extremo a extremo. nicamente en la capa de transporte,
el protocolo TCP establece una conexin punto a punto para la
transmisin de datos. Una conexin de dos mquinas se define como
el conjunto:
(IPorigen , Puerto origen ), (IPdestino , Puerto destino )
Si no se conocen estos datos la conexin no est establecida
y no es hasta la capa de transporte que los puertos no entran en
juego. Es por tanto, trabajo de TCP proveer los mecanismos para
establecer una conexin y mantenerla abierta el tiempo necesario
para enviar los datos. El protocolo TCP es bastante complejo, si se
quiere conocer en profundidad, lo mejor es recurrir al RFC donde se
define el protocolo.
10.8.2 Puertos
Los puertos son valores enteros que representan las distintas
aplicaciones. El nmero que puede tomar un puerto va desde 1 hasta
65535. Los primeros 1024 puertos son conocidos como well known
ports y los usuarios sin permisos no pueden cambiar la utilidad de
estos puertos. Tampoco los programas que no se ejecutan como sper
usuario pueden hacer uso de estos puertos. Son puertos asociados a
servicios o protocolos bien conocidos. Es el caso de http, el protocolo
de hipertexto que emplean las pginas web. Este se encuentra en el
puerto 80 por defecto. Los puertos por encima del 1024 se conocen
como puertos efmeros y estn a disposicin de los usuarios.
Habitualmente los servidores suelen escuchar por un puerto
a la espera de conexiones. Una vez han recibido la conexin, para no
ocupar el puerto conocido, derivan la conexin a un puerto efmero y
siguen a la espera de conexiones por el puerto conocido. As trabajan
por ejemplo los servidores FTP. FTP suele escuchar por el puerto 20
pero, para poder soportar conexiones concurrentes, una vez recibe
10.9.1 La herramienta iw
La herramienta iw es la que permite listar y manipular
dispositivos inalmbricos. Es una herramienta relativamente nueva y es
posible que en su lugar encontremos wireless-tools, una herramienta
ms antigua que provee de una gran variedad de herramientas, cada
una para una de las tareas que ahora realiza iw. Es posible que
dependiendo de la distribucin iw no se encuentre instalado en el
sistema. En este caso deberemos instalarlo. Puede parecer paradjico
el hecho de necesitar acceso a Internet para poder descargar un
ssid="casa"
scan_ssid=1
key_mgmt=WPA-PSK
psk="frase super secreta"
}
network={
ssid="trabajo"
scan_ssid=1
key_mgmt=WPA-EAP
pairwise=CCMP TKIP
group=CCMP TKIP
eap=TLS
identity="usuario@ejemplo.com"
ca_cert="/etc/cert/ca.pem"
client_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="contrasea"
}
Cada entrada network , especifica los detalles para una red.
Las redes son ledas en orden de aparicin. Eso significa, que si la
conexin es posible con la primera de las redes que aparece en el
fichero, el sistema no probar de conectarse a ninguna otra. La
modificacin del fichero wpa_supplicant.conf requiere del reinicio de
los servicios de red para tener efecto. Para conocer todos los detalles
que pueden ser especificados en una red, lo mejor es recurrir a la
Eplogo
Poner punto final a un texto que trate sobre Linux parece
realmente complicado. Hay una gran variedad de comandos, opciones,
programas y distribuciones. An ms, hay una comunidad detrs de
cada distribucin Linux que hace crecer y mejorar a los distintos
sistemas. Si a todo este le sumamos las capacidades de red, tan
necesarias hoy en da, resulta todava ms difcil saber donde se debe
poner el punto y final.
A lo largo de este texto se han revisado algunos de los pilares
de los sistemas Linux desde una perspectiva que, espero, ayude a
entender que sucede cuando trabajamos con estos sistemas y ayude a
ir un poco ms all que el saber escribir un comando en el terminal.
Muchas cosas han quedado en el tintero y otras se han
explicado con palabras que quizs no sean las ms adecuadas.
Simplemente se ha tratado de poner el esfuerzo en que el texto
pudiese llegar a la mayor cantidad de gente posible.
La informacin sobre los sistemas operativos Linux es muy
abundante en Internet y uno no debe tener miedo de buscarla i
enfrentarse a ella. Con unos mnimos conocimientos de ingls y una
idea de lo que se desea hacer ser sencillo encontrar informacin al
respecto. Seguro que la informacin disponible y que ofrece la
comunidad ser suficiente para solventar las dudas que haya podido
dejar este texto.
Bibliografa
Antes de citar una lista de referencias, decir que mucha de la
informacin ha sido extrada de las pginas de manuales de los
distintos comandos o de las pginas de referencia de la Linux
Fundation o Freedesktop. ServerFault tambin llega a convertirse en
una pgina muy til para todos aquellos que deben administrar un
sistema.
Carretero J, Garca F, Anasagasti P, Prez F, Sistemas
Operativos: una visin aplicada, Mc Graw Hill, 2007
Evi N, Unix and Linux System Administration Handbook,
Pearson Education, 2011.
Garfinkel S, Sppaford G, Schwartz A, Practical Unix & Internet
Security, OReilly 2003
Kroha-Hartman G, Linux Kernel in a Nutshell, OReilly 2006
Nguyen B, Linux Filesystem Hierarchy, Version 0.65, 2015,
http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/
Poettering L, systemd System and Service Manager, 2015,
http://www.freedesktop.org/wiki/Software/systemd/
Prieto A, Lloris A, Torres JC, Introduccin a la informtica,
McGrawHill, 2006
Samar V, Schemers R, Unified login with pluggable
authentication modules (PAM), Open Software Fundation, RFC 86,
1995. http://www.opengroup.org/rfc/rfc86.0.html
Shotts W, The Linux command Line: a Complete Introduction,
no starch press, 2012
Stallings W, Comunicaciones y redes de computadores,
Pearson, 2004.
Surez R, Descubriendo Udev, Todo Linux: la revista mensual
para entusiastas de GNU/LINUX, (79), 18-22. 2007