4.3 Lección 2
Certificación: |
Linux Essentials |
---|---|
Versión: |
1.6 |
Tema: |
4 El sistema operativo Linux |
Objetivo: |
4.3 Donde se almacenan los datos |
Lección: |
2 de 2 |
Introducción
Después de explorar los programas y sus
archivos de configuración, en esta lección
aprenderemos cómo se ejecutan los comandos
como procesos. Del mismo modo comentaremos
sobre la mensajería del sistema, el uso
del "kernel ring buffer" y cómo la llegada
de systemd
y su daemon — journald
— cambió las formas en que se habían hecho
las cosas con respecto al registro del
sistema.
Procesos
Cada vez que un usuario emite un comando, se ejecuta un programa y se generan uno o más procesos.
Los procesos existen en una jerarquía.
Después de que el kernel se carga en la
memoria durante el arranque, se inicia
el primer proceso que a su vez, inicia
otros procesos también pueden iniciar
otros procesos. Cada proceso tiene un
identificador único (PID
) y
un identificador de proceso padre (PPID
).
Estos son números enteros positivos que
se asignan en orden secuencial.
Explorando
procesos dinámicamente: top
Puede obtener una lista dinámica de
todos los procesos en ejecución con el
comando top
:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 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.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
Como vimos anteriormente top
también puede brindarnos información
sobre el consumo de memoria y CPU del
sistema, así como para cada proceso.
top
le permite al
usuario cierta interacción.
Por defecto, la salida se ordena por
el porcentaje de tiempo de CPU
utilizado por cada proceso en orden
descendente. Este comportamiento puede
modificarse presionando las siguientes
teclas desde top
:
M
-
Ordenar por uso de memoria.
N
-
Ordenar por número de identificación del proceso.
T
-
Ordenar por tiempo de ejecución.
P
-
Ordenar por porcentaje de uso de CPU.
Para cambiar entre orden
descendente/ascendente simplemente
presione R
.
Tip
|
Una versión más elegante y
fácil de usar en lugar de |
Un
Snapshot de los procesos: ps
Otro comando muy útil para obtener
información sobre los procesos es ps
.
Mientras que top
proporciona información dinámica, el
comando ps
es estática.
Si se invoca sin opciones la salida
de ps
es bastante
discreta y se relaciona solo con los
procesos adjuntos al shell actual:
$ ps PID TTY TIME CMD 2318 pts/0 00:00:00 bash 2443 pts/0 00:00:00 ps
La información que se muestra tiene
que ver con el identificador de
proceso (PID
), el
terminal en el que se ejecuta el
proceso (TTY
), el tiempo
de CPU tomado por el proceso (TIME
)
y el comando que inició el proceso(CMD
).
Un modificador útil para ps
es -f
que muestra la
lista de formato completo:
$ ps -f UID PID PPID C STIME TTY TIME CMD carol 2318 1682 0 08:38 pts/1 00:00:00 bash carol 2443 2318 0 08:46 pts/1 00:00:00 ps -f
En combinación con otros
modificadores, -f
muestra la relación entre los procesos
padre e hijo:
$ ps -uf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND carol 2318 0.0 0.1 21336 5140 pts/1 Ss 08:38 0:00 bash carol 2492 0.0 0.0 38304 3332 pts/1 R+ 08:51 0:00 \_ ps -uf carol 1780 0.0 0.1 21440 5412 pts/0 Ss 08:28 0:00 bash carol 2291 0.0 0.7 305352 28736 pts/0 Sl+ 08:35 0:00 \_ emacs index.en.adoc -nw (...)
Del mismo modo ps
puede
mostrar el porcentaje de memoria
utilizada cuando se invoca con el
modificador -v
:
$ ps -v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (...) (...)
Note
|
Otro comando visualmente
atractivo que muestra la
jerarquía de procesos es |
Información
del proceso en el directorio /proc
Ya hemos visto el sistema de archivos
/proc
. Este incluye un
subdirectorio numerado para cada
proceso en ejecución en el sistema (el
número es el PID
del
proceso):
carol@debian:~# ls /proc 1 108 13 17 21 27 354 41 665 8 9 10 109 14 173 22 28 355 42 7 804 915 103 11 140 18 23 29 356 428 749 810 918 104 111 148 181 24 3 367 432 75 811 105 112 149 19 244 349 370 433 768 83 106 115 15 195 25 350 371 5 797 838 107 12 16 2 26 353 404 507 798 899 (...)
Por lo tanto, toda la información
sobre un proceso particular se incluye
dentro de su directorio. Hagamos una
lista de los contenidos del primer
proceso, aquel cuyo PID
es 1
(la salida se ha
truncado para facilitar la lectura):
# ls /proc/1/ attr cmdline environ io mem ns autogroup comm exe limits mountinfo numa_maps auxv coredump_filter fd loginuid mounts oom_adj ...
Puede verificar — por ejemplo — el ejecutable del proceso:
# cat /proc/1/cmdline; echo /sbin/init
Como puede observar, el binario que
inició la jerarquía de procesos fue /sbin/init
.
Note
|
Los comandos pueden ser
concatenados con el punto y
coma ( |
Carga del sistema
Cada proceso puede potencialmente
consumir recursos del sistema. La
llamada carga del sistema intenta
agregar la carga general del sistema
en un solo indicador numérico. Puede
ver la carga actual con el comando uptime
:
$ uptime 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
Los tres últimos dígitos indican el
promedio de carga del sistema para el
último minuto (2.91
), los
últimos cinco minutos (1.59
)
y los últimos quince minutos (0.39
).
Cada uno de estos números indica cuántos procesos estaban esperando los recursos de la CPU o las operaciones de entrada/salida para completar. Esto significa que estos procesos estaban listos para ejecutarse si hubieran recibido los recursos respectivos.
Registro del sistema y mensajería del sistema
Tan pronto como el núcleo y los procesos comienzan a ejecutarse y comunicarse entre sí, se produce una gran cantidad de información. La mayor parte se envía a archivos: los llamados archivos de registro o simplemente logs.
Sin los archivos de log, la
búsqueda de un evento que sucedió en un
servidor daría mucho dolor de cabeza a
los administradores de sistemas, de ahí
la importancia de tener una forma
estandarizada y centralizada de realizar
un seguimiento de los eventos del
sistema. Además, los registros son
determinantes y reveladores cuando se
trata de resolución de problemas y
seguridad, así como fuentes de datos
confiables para comprender las
estadísticas del sistema y hacer
predicciones de tendencias.
El demonio syslog
Tradicionalmente, los mensajes del
sistema han sido gestionados por la
instalación del registro
estándar — syslog — o cualquiera de
sus derivados — syslog-ng o rsyslog.
El daemon de registro recopila
mensajes de otros servicios o
programas y los almacena en archivos
de registro, generalmente en /var/log
.
Sin embargo, algunos servicios se
encargan de sus propios registros (por
ejemplo, el servidor web Apache
HTTPD). Del mismo modo, el kernel de
Linux utiliza el "ring buffer" en
memoria para almacenar sus mensajes de
registro.
Archivos
de registro en /var/log
Debido a que los registros son
datos que varían con el tiempo,
normalmente se encuentran en /var/log
.
Si explora /var/log
se dará cuenta de que los nombres de
los registros son, hasta cierto
punto, bastante explicativos.
Algunos ejemplos incluyen:
/var/log/auth.log
-
Almacena información sobre la autenticación.
/var/log/kern.log
-
Almacena información del kernel.
/var/log/syslog
-
Almacena información del sistema.
/var/log/messages
-
Almacena datos del sistema y de algunas aplicaciones.
Note
|
El nombre exacto y el contenido de los archivos de registro pueden variar según las distribuciones de Linux. |
Accediendo a archivos de registro
Cuando explore archivos de registro,
recuerde ser root (si no tiene
permisos de lectura) y use un
localizador como less
;
# less /var/log/messages Jun 4 18:22:48 debian liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) Jun 29 16:57:10 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
Alternativamente, puede usar tail
con el modificador -f
para leer los mensajes más recientes
del archivo y mostrar dinámicamente
nuevas líneas a medida que se agregan:
# tail -f /var/log/messages Jul 9 18:39:37 debian kernel: [ 2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules Jul 9 18:39:37 debian kernel: [ 2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7 Jul 9 18:39:37 debian kernel: [ 2.513861] Adding 1046524k swap on /dev/sda5. Priority:-1 extents:1 across:1046524k FS Jul 9 18:39:37 debian kernel: [ 2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 Jul 9 18:39:37 debian kernel: [ 2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000 Jul 9 18:39:37 debian kernel: [ 2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready Jul 9 18:39:39 debian kernel: [ 4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jul 9 18:39:39 debian kernel: [ 4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready Jul 9 18:39:40 debian kernel: [ 5.315603] random: crng init done Jul 9 18:39:40 debian kernel: [ 5.315608] random: 7 urandom warning(s) missed due to ratelimiting
Encontrará la salida en el siguiente formato:
-
Timestamp
-
Nombre de host del que proviene el mensaje
-
Nombre del programa/servicio que generó el mensaje
-
El PID del programa que generó el mensaje
-
Descripción de la acción
La mayoría de los archivos de
registro están escritos en texto
plano; sin embargo, algunos pueden
contener datos binarios, como es el
caso de /var/log/wtmp
que almacena datos relevantes para
inicios de sesión exitosos. Puede usar
el comando file
para
determinar cuál es el caso:
$ file /var/log/wtmp /var/log/wtmp: dBase III DBT, version number 0, next free block index 8
Estos archivos se leen normalmente
mediante comandos especiales. El
comando last
se usa para
interpretar los datos en /var/log/wtmp
:
$ last carol tty2 :0 Thu May 30 10:53 still logged in reboot system boot 4.9.0-9-amd64 Thu May 30 10:52 still running carol tty2 :0 Thu May 30 10:47 - crash (00:05) reboot system boot 4.9.0-9-amd64 Thu May 30 09:11 still running carol tty2 :0 Tue May 28 08:28 - 14:11 (05:42) reboot system boot 4.9.0-9-amd64 Tue May 28 08:27 - 14:11 (05:43) carol tty2 :0 Mon May 27 19:40 - 19:52 (00:11) reboot system boot 4.9.0-9-amd64 Mon May 27 19:38 - 19:52 (00:13) carol tty2 :0 Mon May 27 19:35 - down (00:03) reboot system boot 4.9.0-9-amd64 Mon May 27 19:34 - 19:38 (00:04)
Note
|
Similar a |
Rotación de registro
Los archivos de registro pueden
crecer mucho en unas pocas semanas o
meses y ocupar todo el espacio libre
en disco. Para abordar esto, se
utiliza la utilidad logrotate
.
Este realiza la rotación de
registros o ciclos que implica
acciones tales como mover archivos
de registro a un nuevo nombre,
archivarlos y/o comprimirlos, a
veces enviándolos por correo
electrónico al administrador del
sistema y eventualmente
eliminándolos a medida que avanzan.
Las convenciones utilizadas para
nombrar estos archivos de registro
son diversas (por ejemplo, agregar
un sufijo con la fecha); sin embargo
es común observar un sufijo con un
número entero:
# ls /var/log/apache2/ access.log error.log error.log.1 error.log.2.gz other_vhosts_access.log
Tenga en cuenta que error.log.2.gz
ya se ha comprimido con gunzip (de
ahí el sufijo` .gz`).
Kernel Ring Buffer
El kernel ring buffer es una
estructura de datos de tamaño fijo que
registra los mensajes de arranque del
núcleo, así como cualquier mensaje en
vivo del kernel. La función de este
buffer — uno muy importante — es el de
registrar todos los mensajes del
kernel producidos en el
arranque — cuando el syslog
no está todavía disponible. El comando
dmesg
imprime el ring
buffer del kernel (que solía estar
también almacenado en /var/log/dmesg
).
Debido a la extensión del ring buffer,
este comando se usa normalmente en
combinación con la utilidad de
filtrado de texto grep
o
un paginador como less
.
Por ejemplo, para buscar mensajes de
arranque:
$ dmesg | grep boot [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.144986] AppArmor: AppArmor disabled by boot time parameter (...)
Note
|
A medida que el kernel ring buffer crece con nuevos mensajes, con el tiempo los más antiguos se eliminiran. |
El diario del sistema: systemd-journald
A partir de 2015, systemd reemplazó a
SysV Init como administrador de
servicio y sistema de facto en
la mayoría de las principales
distribuciones de Linux. Como
consecuencia, el daemon
journal — journald — se ha convertido
en el componente de registro estándar
reemplazando a syslog en la mayoría de
los aspectos, lo cual no significa que
syslog o sus derivados (syslog-ng,
rsyslog) no estén presentes
actualmente en los sistemas GNU/Linux,
de hecho, existen multitud de
herramientas y utilidades construidas
alrededor de dicho servicio como para
que desaparezca de repente.
Volviendo a las caracteristicas del
daemon journald hay que decir
que los datos ya no se almacenan en
texto plano sino en forma binaria. Por
lo tanto, la utilidad journalctl
es necesaria para leer los registros.
Además de eso, journald es
compatible con syslog y puede
integrarse con este.
journalctl
es la
utilidad que se utiliza para leer y
consultar la base de datos del journal
(diario) de Systemd. Si es invocada
sin opciones, imprime el journal
completo:
# journalctl -- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. -- jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free. jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01 Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet (...)
Sin embargo, si se invoca con los
modificadores -k
o --dmesg
,
será equivalente a usar el comando dmesg
:
# journalctl -k [ 0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet (...)
Otras opciones interesantes para journalctl
incluyen:
-b
,--boot
-
Muestra información de arranque.
-u
-
Muestra mensajes sobre una unidad especificada. Aproximadamente una unidad se puede definir como cualquier recurso manejado por systemd. Por ejemplo,
journalctl -u apache2.service
se usa para leer mensajes sobre el servidor webapache2
. -f
-
Muestra los mensajes de diario más recientes y sigue imprimiendo nuevas entradas a medida que se agregan al diario, de forma muy similar a
tail -f
.
Ejercicios guiados
-
Eche un vistazo a la siguiente lista de
top
y responda las siguientes preguntas:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 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.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
¿Qué procesos ha iniciado el usuario
carol
?
-
¿Qué directorio virtual de
/proc
debe visitar para buscar datos sobre el comandotop
?
-
¿Qué proceso se ejecutó primero? ¿Cómo puede saber ?
-
Complete la tabla especificando en qué área de salida
top
se encuentra la siguiente información:Información sobre … Área de resumen Área de tareas Memoria
Swap
PID
CPU time
Comandos
-
-
¿Qué comando se usa para leer los siguientes registros binarios?
-
/var/log/wtmp
-
/var/log/btmp
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
-
-
En combinación con
grep
, ¿qué comandos usaría para averiguar la siguiente información sobre su sistema Linux?-
¿Cuándo se reinició el sistema por última vez (
wtmp
) ?
-
¿Qué discos duros están instalados (
kern.log
) ?
-
¿Cuando ocurrió el último inicio de sesión (
auth.log
) ?
-
-
¿Cuales dos comandos usarías para mostrar el kernel ring buffer?
-
Indique a dónde pertenecen los siguientes mensajes de registro:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
-
¿Tiene información para consultar el comando
journalctl
sobre las siguientes unidades?Unidad Comando ssh
networking
rsyslog
cron
Ejercicios exploratorios
-
Reconsidere el resultado de
top
de los ejercicios guiados y responda las siguientes preguntas:-
¿Qué dos pasos seguirías para matar el servicio web apache?
-
En el área de resumen, ¿cómo podría mostrar la información sobre la memoria física e swap utilizando las barras de progreso?
-
Ahora, ordena los procesos por uso de memoria:
-
Ahora que tiene información de memoria en barras de progreso y procesos ordenados por uso de memoria, guarde estas configuraciones para que las obtenga como predeterminadas la próxima vez que use
top
:
-
¿Qué archivo almacena los ajustes de configuración de
top
? ¿Dónde se encuentra? ¿Cómo puedes verificar su existencia?
-
-
Aprende sobre el comando
exec
en Bash. Intente demostrar su funcionalidad iniciando una sesión Bash encontrando el proceso Bash conps
, luego ejecuteexec /bin/sh
y busque el proceso con el mismo PID nuevamente. -
Siga estos pasos para explorar los eventos del kernel y la administración dinámica de dispositivos de udev:
-
Conecte en caliente una unidad USB a su computadora. Ejecute
dmesg
y preste atención a las últimas líneas. ¿Cuál es la línea más reciente?
-
Teniendo en cuenta el resultado del comando anterior, ejecute
ls /dev/sd*
y asegúrese de que su unidad USB aparezca en la lista. ¿Cuál es el resultado?
-
Ahora retire la unidad USB y ejecute
dmesg
nuevamente. ¿Cómo se lee la línea más reciente?
-
Ejecute
ls /dev/sd*
nuevamente y asegúrese de que su dispositivo desapareció de la lista. ¿Cuál es el resultado?
-
Resumen
En el contexto del almacenamiento de datos, los siguientes temas se han discutido en esta lección: administración de procesos, registro y mensajería del sistema.
En cuanto a la gestión de procesos, hemos aprendido lo siguiente:
-
Los programas generan procesos y los procesos existen en una jerarquía.
-
Cada proceso tiene un identificador único (
PID
) y un identificador de proceso padre (PPID
). -
top
es un comando muy útil para explorar de forma dinámica e interactiva los procesos en ejecución del sistema. -
ps
se puede usar para obtener una instantánea de los procesos actuales en ejecución en el sistema. -
El directorio
/proc
incluye directorios para cada proceso en ejecución en el sistema con el nombre de sus PID. -
El concepto de promedio de carga del sistema que es muy útil para verificar la utilización/sobrecarga de la CPU.
Con respecto al registro del sistema, debemos recordar que:
-
Un registro es un archivo donde se registran los eventos del sistema. Los registros son invaluables cuando se trata de solucionar problemas.
-
El registro ha sido manejado tradicionalmente por servicios especiales como syslog, syslog-ng o rsyslog. Sin embargo, algunos programas usan sus propios demonios de registro.
-
Debido a que los registros son datos variables, se mantienen en
/var
y a veces sus nombres pueden darle una pista sobre su contenido (kern.log
,auth.log
, etc.) -
La mayoría de los registros están escritos en texto plano y se pueden leer con cualquier editor de texto siempre que tenga los permisos correctos. Sin embargo, algunos de ellos son binarios y deben leerse con comandos especiales.
-
Para evitar problemas con el espacio en disco, la utilidad logrotate lleva a cabo log rotation.
-
En cuanto al kernel, utiliza una estructura de datos - kernel ring buffer - donde se guardan los mensajes de arranque (los mensajes antiguos se desvanecen con el tiempo).
-
El administrador de sistema y servicio systemd reemplazó System V init en prácticamente todas las distribuciones con journald convirtiéndose en el servicio de registro estándar.
-
Para leer el diario de systemd, se necesita la utilidad
journalctl
.
Comandos usados en esta lección:
cat
-
Concatenar o imprimir el contenido de un archivo.
dmesg
-
Imprime el kernel ring buffer.
echo
-
Mostrar una línea de texto o una nueva línea.
file
-
Determinar el tipo de archivo.
grep
-
Imprimir líneas que coinciden con un patrón.
last
-
Mostrar una lista de los últimos usuarios registrados.
less
-
Muestra el contenido del archivo una página a la vez.
ls
-
Lista de contenidos del directorio.
journalctl
-
Consulta el diario
systemd
. tail
-
Mostrar las últimas líneas de un archivo.
Respuestas a los ejercicios guiados
-
Eche un vistazo a la siguiente lista de
top
y responda las siguientes preguntas:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 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.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
¿Qué procesos ha iniciado el usuario
carol
?Respuesta: Sólo una:
top
. -
¿Qué directorio virtual de
/proc
debe visitar para buscar datos sobre el comandotop
?Respuesta:
/proc/887
-
¿Qué proceso se ejecutó primero? ¿Cómo puede saber ?
Respuesta:
systemd
. Porque es el que tienePID
#1. -
Complete la tabla especificando en qué área de salida
top
se encuentra la siguiente información:Información sobre … Área de resumen Área de tareas Memoria
Si
Si
Swap
Si
No
PID
No
Si
CPU time
Si
Si
Comandos
No
Si
-
-
¿Qué comando se usa para leer los siguientes registros binarios?
-
/var/log/wtmp
Respuesta:
last
-
/var/log/btmp
Respuesta:
lastb
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
Respuesta:
journalctl
-
-
En combinación con
grep
, ¿qué comandos usaría para averiguar la siguiente información sobre su sistema Linux?-
¿Cuándo se reinició el sistema por última vez (
wtmp
) ?Respuesta:
last
-
¿Qué discos duros están instalados (
kern.log
) ?Respuesta:
less /var/log/kern.log
-
¿Cuando ocurrió el último inicio de sesión (
auth.log
) ?Respuesta:
less /var/log/auth.log
-
-
¿Cuales dos comandos usarías para mostrar el kernel ring buffer?
dmesg
yjournalctl -k
(alsojournalctl --dmesg
). -
Indique a dónde pertenecen los siguientes mensajes de registro:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
X
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
X
/var/log/syslog
/var/log/messages
X
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
X
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
X
-
-
¿Tiene información para consultar el comando
journalctl
sobre las siguientes unidades?Unidad Comando ssh
journalctl -u ssh.service
networking
journalctl -u networking.service
rsyslog
journalctl -u rsyslog.service
cron
journalctl -u cron.service
Respuestas a los ejercicios exploratorios
-
Reconsidere el resultado
top
de los ejercicios guiados y responda las siguientes preguntas:-
¿Cuales son los dos pasos seguientes para matar el servicio web apache?
Primero, presione
k
, luego proporcione un valor akill
. -
En el área de resumen, ¿cómo podría mostrar la información sobre la memoria física y swap utilizando las barras de progreso?
Al presionar
m
una o dos veces. -
Ahora, ordena los procesos por uso de memoria:
M
-
Ahora que tiene la información de la memoria en barras de progreso y procesos ordenados por uso de memoria, guarde estas configuraciones para que las obtenga como predeterminadas la próxima vez que use
top
:W
-
¿Qué archivo almacena los ajustes de configuración de
top
? ¿Dónde se encuentran? ¿Cómo puedes verificar su existencia?El archivo es
~/.config/procps/toprc
y se localiza en el directorio de inicio del usuario (~
). Como es un archivo oculto (reside en un directorio cuyo nombre comienza con un punto), podemos verificar su existencia conls -a
(lista todos los archivos). Este archivo puede generarse presionando kbd:[Shift+W] mientras estas entop
.
-
-
Aprende sobre el comando
exec
en Bash. Intente demostrar su funcionalidad iniciando una sesión Bash encontrando el proceso Bash conps
, luego ejecuteexec /bin/sh
y busque el proceso con el mismo PID nuevamente.exec
reemplaza un proceso con otro comando. En el siguiente ejemplo podemos ver que el proceso Bash se reemplaza por/bin/sh
(en lugar de que/bin/sh
se convierta en un proceso hijo):$ echo $$ 19877 $ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3984 pts/25 Ss 21:17 0:00 \_ bash $ exec /bin/sh sh-5.0$ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 \_ /bin/sh
-
Siga estos pasos para explorar los eventos del kernel y la administración dinámica de dispositivos de udev:
-
Conecte en caliente una unidad USB a su computadora. Ejecute
dmesg
y preste atención a las últimas líneas. ¿Cuál es la línea más reciente?Debería obtener algo similar a
[ 1967.700468] sd 6:0:0:0: [sdb] Attached SCSI removable disk
. -
Teniendo en cuenta el resultado del comando anterior, ejecute
ls /dev/sd*
y asegúrese de que su unidad USB aparezca en la lista. ¿Cuál es el resultado?Dependiendo de la cantidad de dispositivos conectados a su sistema, debería obtener algo como
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2
. En nuestro caso, encontramos nuestra unidad USB (/dev/sdb
) y sus dos particiones (/dev/sdb1
y/dev/sdb2
). -
Ahora retire la unidad USB y ejecute
dmesg
nuevamente. ¿Cómo se lee la línea más reciente?Debería obtener algo similar a
[ 2458.881695] usb 1-9: USB disconnect, device number 6
. -
Ejecute
ls /dev/sd *
nuevamente y asegúrese de que su dispositivo desapareció de la lista. ¿Cuál es el resultado?En nuestro caso,
/dev/sda /dev/sda1
.
-