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 iniciar sesión, 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.
Iniciar sesión con 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 gzip
(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. 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
.
-