Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:cursos:linux_para_devops_y_sysadmin:administracion_particiones_docker

Administración, particiones y Docker

Sección perteneciente al curso Linux para DevOps y Sysadmin.

Buffer cache

Para obtener información acerca del buffer:

free -m
               total       usado       libre  compartido   búf/caché  disponible
Mem:           15953        1778       13463          30        1012       14174
Inter:          4095           0        4095

Si queremos liberar la caché en la memoria:

echo 3 > /proc/sys/vm/drop_caches

Si volvemos a hacer free -m, habrá disminuido el valor de búf/caché.

Estos son los valores que podemos establecer según lo que queramos hacer con la caché:

  • 1: limpiar solo la página de la caché.
  • 2: limpia todos los inodos
  • 3: limpia la página de la caché y los inodos de memoria.

Cambiar hostname

Para ver el hostname / nommbre del equipo:

hostname

Podemos usar el mismo comando para cambiar el nombre:

hostname nuevohostname

También haremos el cambio en el fichero /etc/hostname.

Finalmente modificaremos también el fichero /etc/hosts.

Información del sistema

Información sobre la distribución instalada:

cat /etc/*release

Ejemplo de salida:

ISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

También podemos emplear el comando lsb_release -a:

No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.3 LTS
Release:	22.04
Codename:	jammy

Otro comando para ver información básica del sistema: hostnamectl

 Static hostname: rrr
       Icon name: computer-desktop
         Chassis: desktop 🖥️
      Machine ID: 5cb2fdfd2b55411095c3fbf985a77da6
         Boot ID: e2d4a9099f8c4f438cc656de944a30f9
Operating System: Arch Linux
          Kernel: Linux 6.4.12-arch1-1
    Architecture: x86-64
 Hardware Vendor: Gigabyte Technology Co., Ltd.
  Hardware Model: H77-D3H
Firmware Version: F11
   Firmware Date: Tue 2012-08-21
    Firmware Age: 11y 3w 2d

Para ver información del kernel, uname -a:

Linux ubuntu-devops 6.2.0-32-generic #32~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 18 10:40:13 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

De forma más “bonita” y con información extra, podemos usar neofetch:

                   -`                    tempwin@rrr
                  .o+`                   -----------
                 `ooo/                   OS: Arch Linux x86_64
                `+oooo:                  Kernel: 6.4.12-arch1-1
               `+oooooo:                 Uptime: 16 mins
               -+oooooo+:                Packages: 1158 (pacman)
             `/:-:++oooo+:               Shell: bash 5.1.16
            `/++++/+++++++:              Resolution: 2560x1440
           `/++++++++++++++:             WM: LG3D
          `/+++ooooooooooooo/`           Theme: Adwaita-Xfce U [GTK2/3]
         ./ooosssso++osssssso+`          Icons: Adwaita [GTK2/3]
        .oossssso-````/ossssss+`         Terminal: alacritty
       -osssssso.      :ssssssso.        CPU: Intel i7-3770 (8) @ 3.900GHz
      :osssssss/        osssso+++.       GPU: NVIDIA GeForce GTX 1050 Ti
     /ossssssss/        +ssssooo/-       Memory: 3961MiB / 15953MiB
   `/ossssso+/:-        -:/+osssso+-
  `+sso+:-`                 `.-/+oso:
 `++:.                           `-/+/
 .`                                 `/

Otra herramienta parecida a Neofetch es screenfetch:

                   -`
                  .o+`                 tempwin@rrr
                 `ooo/                 OS: Arch Linux
                `+oooo:                Kernel: x86_64 Linux 6.4.12-arch1-1
               `+oooooo:               Uptime: 18m
               -+oooooo+:              Packages: 1161
             `/:-:++oooo+:             Shell: bash
            `/++++/+++++++:            Resolution: 2560x1440
           `/++++++++++++++:           WM: LG3D
          `/+++ooooooooooooo/`         GTK Theme: Adwaita-Xfce U [GTK2/3]
         ./ooosssso++osssssso+`        Icon Theme: Adwaita
        .oossssso-````/ossssss+`       Font: Sans 10
       -osssssso.      :ssssssso.      Disk: 479G / 2,7T (19%)
      :osssssss/        osssso+++.     CPU: Intel Core i7-3770 @ 8x 3.9GHz [63.0°C]
     /ossssssss/        +ssssooo/-     GPU: NVIDIA GeForce GTX 1050 Ti
   `/ossssso+/:-        -:/+osssso+-   RAM: 4242MiB / 15953MiB
  `+sso+:-`                 `.-/+oso:
 `++:.                           `-/+/
 .`                                 `/

Otra herramienta más completas para ver información del sistema y hardware es HardInfo.

Crear particiones con fdisk

Para listar las tablas de particiones de los dispositivos

fdisk -l
(...)
Disco /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectores
Disk model: VBOX HARDDISK
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: gpt
Identificador del disco: 30D06FF4-EA3B-444B-9894-421E173CB514

Dispositivo Comienzo    Final Sectores Tamaño Tipo
/dev/sda1       2048     4095     2048     1M Arranque de BIOS
/dev/sda2       4096  1054719  1050624   513M Sistema EFI
/dev/sda3    1054720 41940991 40886272  19,5G Sistema de ficheros de Linux


Disco /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectores
Disk model: VBOX HARDDISK
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes

Para usar fdisk con algún dispositivo:

fdisk /dev/sdb

Se abrirá fdisk y veremos un menú. Vamos a crear una partición. Para ello, pulsamos n y luego p para indicar que queremos una partición primaria. Todo lo demás lo dejaremos por defecto.

Al terminar, pulsamos w para aplicar los cambios y salir.

Ahora indicaremos al kernel que lea de nuevo la tabla de particiones para que vea estos cambios:

partprobe

Si ahora listamos los dispositivos y sus particiones:

fdisk -l

(...)
isco /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectores
Disk model: VBOX HARDDISK
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0x5d6a25a0

Dispositivo Inicio Comienzo    Final Sectores Tamaño Id Tipo
/dev/sdb1              2048 31457279 31455232    15G 83 Linux

Ahora formatearemos la partición en ext4 y para ello necesitaremos el comando mkfs:

mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Se está creando un sistema de ficheros con 3931904 bloques de 4k y 983040 nodos-i
UUID del sistema de ficheros: 2767222d-6e14-461f-a917-0c7abbf15204
Respaldos del superbloque guardados en los bloques:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Reservando las tablas de grupo: hecho
Escribiendo las tablas de nodos-i: hecho
Creando el fichero de transacciones (16384 bloques): hecho
Escribiendo superbloques y la información contable del sistema de archivos: hecho

Finalmente nos queda montar la partición en algún sitio. Creamos una carpeta en /media:

mkdir nuevo_disco

Y ahora hacemos el montaje:

mount /dev/sdb1 /media/nuevo_disco

Ya podríamos usar el disco.

Revisamos:

$ df -hT
S.ficheros     Tipo  Tamaño Usados  Disp Uso% Montado en
tmpfs          tmpfs   196M   1,5M  195M   1% /run
/dev/sda3      ext4     20G    13G  5,4G  71% /
tmpfs          tmpfs   980M      0  980M   0% /dev/shm
tmpfs          tmpfs   5,0M   4,0K  5,0M   1% /run/lock
/dev/sda2      vfat    512M   6,1M  506M   2% /boot/efi
tmpfs          tmpfs   196M    96K  196M   1% /run/user/1000
/dev/sdb1      ext4     15G    24K   14G   1% /media/nuevo_disco

Para desmontar la partición:

umount /media/nuevo_disco

Crear particiones con gparted

GParted es una herramienta gráfica para gestionar discos.

En Ubuntu se instala a través del paquete gparted.

Comprimir y descomprimir ficheros

Utilizaremos dos comandos: tar y gzip.

Cremos un paquete que contendrá el directorio /home/tempwin/mi-directorio:

tar cvf archivo.tar /home/tempwin/mi-directorio/''
  • c: crear un nuevo archivo.
  • v: salida detallada con lo que está haciendo el comando.
  • f

Se habrá creado el fichero archivo.tar.

Para desempaquetar:

tar cvf archivo.tar

Si en lugar de empaquetar, queremos comprimir, usaremos el comando gzip:

gzip fichero1

El comando anterior elimina el fichero original y deja solo el comprimido.

Para descomprimir:

gzip -d fichero1.gz

El comando anterior elimina el fichero original comprimido y deja solo el descomprimido.

Introducción a Docker

Docker es una herramienta que permite la gestión de contenedores.

Crear un contenedor:

docker run -dti --name web -p 80:80 httpd:latest

Para un contenedor:

docker stop <NOMBRE_CONTENEDOR> | <ID_CONTENEDOR>

Podemos ver los creados, estén o no funcionando, con:

docker ps -a

Si lo queremos arrancar de nuevo:

docker start <NOMBRE_CONTENEDOR> | <ID_CONTENEDOR>

Para obtener estadísticas en tiempo real de los contenedores en funcionamiento:

docker stats

Para acceder de forma interactiva a un contenedor en funcionamiento:

docker exec -ti web bash

Podemos salir del contenedor escribiendo exit o con Ctrl+D

Si queremos inspeccionar en detalle un contenedor:

docker inspect <NOMBRE_CONTENEDOR> | <ID_CONTENEDOR>

Ejemplo de salida:

[
    {
        "Id": "3ff7959ddfbf8cc14f8375ab4dd558436dd3e22cc0016c41e2e1193c7ecc1cb6",
        "Created": "2023-09-14T15:55:41.63269882Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3204,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-09-14T15:55:42.336390551Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:7860e76287176b75d5c526081506a592f4e848c2f3660492d4dfad7ef8df88f7",
        "ResolvConfPath": "/var/lib/docker/containers/3ff7959ddfbf8cc14f8375ab4dd558436dd3e22cc0016c41e2e1193c7ecc1cb6/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/3ff7959ddfbf8cc14f8375ab4dd558436dd3e22cc0016c41e2e1193c7ecc1cb6/hostname",
        "HostsPath": "/var/lib/docker/containers/3ff7959ddfbf8cc14f8375ab4dd558436dd3e22cc0016c41e2e1193c7ecc1cb6/hosts",
        "LogPath": "/var/lib/docker/containers/3ff7959ddfbf8cc14f8375ab4dd558436dd3e22cc0016c41e2e1193c7ecc1cb6/3ff7959ddfbf8cc14f8375ab4dd558436dd3e22cc0016c41e2e1193c7ecc1cb6-json.log",
        "Name": "/web",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                31,
                107
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
(...)
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "1d5511354c91342495a7e6087434222e4a6ce25f7d49301b066c0ae9640acc71",
                    "EndpointID": "f89940db2d5a24d276dfff9abf3b62b4a57fdd4b4f89189d5318911f23cf921c",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

Podemos ver los logs de un contenedor:

docker logs -f <NOMBRE_CONTENEDOR>

Ver las imágenes de Docker disponibles en el sistema:

docker image 

Para descargar una imagen explícitamente:

docker pull <IMAGEN:TAG>

Por ejemplo, para la última imagen de Apache2:

docker pull httpd:latest

Para eliminar un contenedor (debe estar detenido):

docker rm <NOMBRE_CONTENEDOR> | <ID_CONTENEDOR>

Comando GPG

gpg es una herramienta que nos permite cifrar y firmar archivos.

Si queremos cifrar un fichero:

gpg -c fichero-importante.txt

Nos pedirá una contraseña para cifrar.

Se creará el fichero fichero-importante.txt. Si intentamos ver su contenido, no entenderemos nada porque estamos viendo todo cifrado_

	Yp
{j��
vۛxƷ�!�Kave\7,��r�,I$rLe}��qd̓

Para descifrarlo:

gpg fichero-importante.txt-gpg

No nos ha pedido ninguna contraseña porque la tenemos en nuestro sistema.

uniq comando

El comando uniq muestra por pantalla las líneas o palabras que se repitan.

uniq -c fichero
  • -c: muestra la cantidad de veces que se repite una ocurrencia

Si queremos mostrar solo las líneas duplicadas (da igual cuántas veces se repitan):

uniq -d fichero

Si queremos mostrar las líneas únicas (que no se repiten):

uniq -u fichero

sort comando

sort permite ordenar líneas de texto.

Por defecto, sort ordena alfabéticamente según ASCII:

sort fichero

Si queremos hacer una ordenación numérica:

sort -n fichero

find comando

Permite buscar ficheros.

Buscar por el nombre del fichero:

find /donde/buscar -name fichero_a_buscar.txt

También podemos buscar ficheros de un determinado usuario:

find / -user tempwin

Buscar ficheros por tamaño, por ejemplo, ficheros que pasen de 500 megabytes:

find / -size +500M

pstree comando

pstree muestra los procesos en ejecución en forma de árbol, de padre a hijos:

$ pstree
systemd─┬─NetworkManager───3*[{NetworkManager}]
        ├─VBoxSVC─┬─VirtualBoxVM───42*[{VirtualBoxVM}]
        │         └─18*[{VBoxSVC}]
        ├─VBoxXPCOMIPCD
        ├─VirtualBox───9*[{VirtualBox}]
        ├─alacritty─┬─bash───mpv───19*[{mpv}]
        │           └─4*[{alacritty}]
        ├─alacritty─┬─bash───hardinfo
        │           └─4*[{alacritty}]
        ├─alacritty─┬─bash───pstree
        │           └─4*[{alacritty}]
        ├─autostart.sh───pnmixer───{pnmixer}
        ├─chronyd
        ├─dbus-daemon
        ├─firefox─┬─2*[Isolated Web Co───26*[{Isolated Web Co}]]
        │         ├─Isolated Web Co───28*[{Isolated Web Co}]
        │         ├─Isolated Web Co───25*[{Isolated Web Co}]
        │         ├─Isolated Web Co───27*[{Isolated Web Co}]
        │         ├─Privileged Cont───25*[{Privileged Cont}]
        │         ├─RDD Process───3*[{RDD Process}]
        │         ├─Socket Process───4*[{Socket Process}]
        │         ├─Utility Process───3*[{Utility Process}]
        │         ├─3*[Web Content───10*[{Web Content}]]
        │         ├─WebExtensions───26*[{WebExtensions}]
        │         └─133*[{firefox}]
        ├─login───bash───startx───xinit─┬─Xorg───{Xorg}
        │                               └─qtile─┬─numlockx
        │                                       └─{qtile}
        ├─nm-applet───4*[{nm-applet}]
        ├─polkitd───3*[{polkitd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─sshd
        ├─systemd─┬─(sd-pam)
        │         ├─at-spi-bus-laun─┬─dbus-daemon
        │         │                 └─4*[{at-spi-bus-laun}]
        │         ├─at-spi2-registr───3*[{at-spi2-registr}]
        │         ├─dbus-daemon
        │         ├─gvfsd───3*[{gvfsd}]
        │         ├─gvfsd-fuse───6*[{gvfsd-fuse}]
        │         ├─pipewire───2*[{pipewire}]
        │         └─pulseaudio─┬─gsettings-helpe───4*[{gsettings-helpe}]
        │                      └─2*[{pulseaudio}]
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─udiskie───3*[{udiskie}]
        └─udisksd───5*[{udisksd}]

Si queremos ver el ID de cada proceso:

pstree -p

Si los quisiéramos ordenar por su ID, añadimos el argumento -n:

pstree -p -n

Si solo queremos ver los procesos de cierto usuario:

pstree usuario

watch comando

watch ejecuta un comando a intervalos regulares mostrando el resultado del comando por pantalla.

Repetir el comando date cada 5 segundos:

watch -n 5 date

Backups y restore con tar

Crear un paquete archivo.tar con los ficheros fichero1 y fichero2:

tar cvf archivo.tar fichero1 fichero2
  • v: nos da una salida detallada de lo que va haciendo tar con los ficheros.

Para desempaquetar:

tar xvf archivo.tar

Si queremos comprimir con bzip2, usamos el argumento j:

tar cjvf archivo.bz2 fichero1 fichero2

Para extraerlo:

tar xjvf archivo.bz2

Enviar logs a un fichero

Los logs son ficheros que contienen la salida de una aplicación. Se utilizan para saber qué está ocurriendo en una aplicación.

Veremos cómo extraer la salida de los logs a un fichero para investigarlos tranquilamente.

tail -f /var/log/syslog > /home/tempwin/log
  • f: muestra los datos que se van añadiendo al archivo en directo.
informatica/sistemas_operativos/cursos/linux_para_devops_y_sysadmin/administracion_particiones_docker.txt · Última modificación: por tempwin