====== Hardware en Linux ====== ===== Herramientas ===== ==== lspci ==== Muestra información sobre los buses PCI y los dispositivos que tienen conectados. Tarjeta de red, tarjeta gráfica, etc. lspci Ejemplo de salida: 00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/Ivy Bridge DRAM Controller (rev 09) 00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09) 00:06.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09) 00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05) 00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5) 00:1c.4 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5 (rev b5) 00:1c.6 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 7 (rev b5) 00:1c.7 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 8 (rev b5) 00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev a5) 00:1f.0 ISA bridge: Intel Corporation C204 Chipset Family LPC Controller (rev 05) 00:1f.2 RAID bus controller: Intel Corporation 6 Series/C200 Series Chipset Family SATA RAID Controller (rev 05) 01:00.0 System peripheral: Hewlett-Packard Company Integrated Lights-Out Standard Slave Instrumentation & System Support (rev 05) 01:00.1 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200EH 01:00.2 System peripheral: Hewlett-Packard Company Integrated Lights-Out Standard Management Processor Support and Messaging (rev 05) 01:00.4 USB controller: Hewlett-Packard Company Integrated Lights-Out Standard Virtual USB Controller (rev 02) 02:00.0 Memory controller: Hewlett Packard Enterprise Device 005f 03:00.0 Ethernet controller: Broadcom Limited NetXtreme BCM5720 Gigabit Ethernet PCIe 03:00.1 Ethernet controller: Broadcom Limited NetXtreme BCM5720 Gigabit Ethernet PCIe 04:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03) El primer par de dígitos hace referencia al bus (00 suele ser integrado en placa) Más información sobre los dispositivos lspci -v Más detalles: lspci -vv Si queremos mostrar información solo de cierto dispositivo: lspci -s ==== lsusb ==== Muestra info sobre los buses y dispositivos usb conectados lsusb Para más información: lsusb -v El descriptor ''bDeviceSubClass'' indica si se está usando el puerto USB Más detalles todavía: lsusb -vv Información sobre determinado dispositivo: lsusb -s Si queremos ver información en árbol y la velocidad del puerto USB: lsusb -t Ejemplo de salida: /: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M |__ Port 3: Dev 3, If 0, Class=Hub, Driver=hub/2p, 480M |__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M |__ Port 5: Dev 3, If 0, Class=Vendor Specific Class, Driver=btusb, 12M |__ Port 5: Dev 3, If 1, Class=Vendor Specific Class, Driver=btusb, 12M |__ Port 5: Dev 3, If 2, Class=Vendor Specific Class, Driver=btusb, 12M |__ Port 5: Dev 3, If 3, Class=Application Specific Interface, Driver=, 12M USB soporta muchos dispositivos en un mismo bus * USB 1.1 velocidad de lectura hasta 12 Mb/s (1,5 MB/s) * USB 2.0 velocidad de lectura hasta 480 Mb/s (60 MB/s) * USB 3.0 velocidad de lectura hasta 5000 Mb/s (600 MB/s) ==== Interrupciones ==== Para ver las interrupciones asociadas: ''/proc/interrupts'' Las interrupciones son señales hardware que se envían a la CPU para que gestione alguna petición. Si un dispositivo hardware dispone de DMA, podrá acceder a bloques de memoria sin intervención de la CPU. La información respecto a canales DMA se puede consultar en ''/proc/dma'' Para consultar las direcciones de memoria de los procesos de entrada/salida, se consulta en ''/proc/ioports'' ===== /sys ===== Sistema de ficheros virtual que contiene información sobre el hardware. Ver los dispositivos por clases, en el directorio ''/sys/class/'' Si queremos ver información de las interfaces: ''/sys/class/net/'' $ ls -l total 0 lrwxrwxrwx 1 root root 0 oct 15 21:40 enp0s25 -> ../../devices/pci0000:00/0000:00:19.0/net/enp0s25 lrwxrwxrwx 1 root root 0 oct 15 21:40 lo -> ../../devices/virtual/net/lo lrwxrwxrwx 1 root root 0 oct 15 21:40 wlp2s0 -> ../../devices/pci0000:00/0000:00:1c.2/0000:02:00.0/net/wlp2s0 Dirección MAC de una tarjeta de red: cat /sys/class/net/wlp2s0/address ===== /dev ===== Todo lo que hace referencia a algún dispositivo. Está menos organizado que ''/sys'' (''/sys'' es una mejora de ''/dev'') y se utiliza básicamente para poder referenciar los dispositivos y poder utilizarlo. El contenido de este directorio varía en función de los dispositivos que se tenga conectados. Útil por ejemplo para la identificación de los discos: ls -l /dev/disk/by-uuid Cuando conectamos un pendrive USB, aparecerán nuevos elementos: ls /dev/sd* También podríamos verlo desde ''/sys/class/block/'', donde habrá diferentes enlaces a la información del hardware. ===== Módulos del kernel ===== Los módulos son partes del kernel que podemos activar o desactivar para añadir o quitar funcionalidades. Tiene una relación muy estrecha con los drivers. Son archivos terminados con la extensión ''.ko'' y se suelen almacenar en ''/lib/modules/version_kernel/kernel/'' ==== lsmod ==== Muestra los módulos cargados en el sistema Module Size Used by softdog 16384 0 veth 20480 0 xt_nat 16384 86 xt_tcpudp 16384 106 xt_conntrack 16384 8 ipt_MASQUERADE 16384 18 nf_conntrack_netlink 49152 0 nfnetlink 16384 2 nf_conntrack_netlink xfrm_user 45056 1 xfrm_algo 16384 1 xfrm_user xt_addrtype 16384 2 iptable_filter 16384 1 iptable_nat 16384 20 nf_nat_ipv4 16384 2 ipt_MASQUERADE,iptable_nat * Nombre de los módulos * Tamaño * Cuántas veces se ha utilizado * Quién lo ha usado ==== modinfo ==== Amplía información de un módulo $ modinfo bluetooth filename: /lib/modules/4.19.0-0.bpo.9-amd64/kernel/net/bluetooth/bluetooth.ko alias: net-pf-31 license: GPL version: 2.22 description: Bluetooth Core ver 2.22 author: Marcel Holtmann srcversion: 333F9F6A8EDC24E53008B30 depends: rfkill,ecdh_generic,crc16 retpoline: Y intree: Y name: bluetooth vermagic: 4.19.0-0.bpo.9-amd64 SMP mod_unload modversions signat: PKCS#7 signer: sig_key: sig_hashalgo: md4 parm: disable_esco:Disable eSCO connection creation (bool) parm: disable_ertm:Disable enhanced retransmission mode (bool) ==== insmod ==== Carga un fichero ''.ko'' en el sistema. Para cargar el módulo, debemos indicar la ruta al mismo: insmod /lib/modules/4.19.0-0.bpo.9-amd64/kernel/drivers/block/floppy.ko ==== rmmod ==== Quita el módulo del sistema. Con la opción ''-w'' indicamos que espera a que deje de utilizarse para que se quite del sistema. ==== modprobe ==== Carga o borra módulos y resuelve las dependencias entre estos. Es más recomendable usar este comando en lugar de ''insmod'' y ''rmmod'' * ''-f'': fuerza la carga del módulo aunque la versión del kernel no coincida con la esperada. * ''-r'': elimina el módulo. * ''-v'': muestra información adicional de lo que realiza. * ''-n'': hace una simulación pero no inserta el módulo ===== Almacenamiento ===== Si queremos ver particiones e información sobre ellas, podemos usar ''parted'': $ sudo parted -l [tempwin@zeta ~]$ sudo parted -l [sudo] password for tempwin: Model: ATA KINGSTON SUV500M (scsi) Disk /dev/sda: 240GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Numero Inicio Fin Tamaño Sistema de ficheros Nombre Banderas 1 1049kB 538MB 537MB fat32 EFI System Partition arranque, esp 2 538MB 22,0GB 21,5GB ext4 3 22,0GB 65,0GB 42,9GB ext4 arch 4 65,0GB 240GB 175GB ext4 data ===== Arranque ===== - BIOS - MBR (si tenemos UEFI, nos saltamos este paso) - GRUB (gestor de arranque) - Kernel: es iniciado por el gestor de arranque - Initramfs (initial ram file system). Es el sistema de archivos ram inicial (ramdisk). Archivo comprimido que contiene un pequeño sistema de archivos que se cargará en la memoria RAM en el proceso de arranque del núcleo. El kernel lo necesita para completar tareas relacionadas con módulos y controladores de dispositivos para poder arrancar el verdadero sistema de archivos raíz instalado en el disco duro e invocar al proceso init. En el fichero de configuración del GRUB lo vemos en una línea como ''initrd /boot/initramfs-linux.img''. - El kernel llama al primer programa del SO que se encargará de configurar todos los servicios, demonios y cargar las particiones para poner el sistema en funcionamiento. Este programa se llama **init**, suele tener el identificador de proceso número 1 y es el padre del resto de procesos que empiezan a arrancar la máquina. Al arrancar Llinux se muestran mensajes según se van cargando controladores o funciones del sistema. Para revisarlos se utiliza el comando ''dmesg'' que acepta las siguientes opciones recomendadas: * ''-T'': muestra las marcas de tiempo en forma de fecha y hora * ''-k'': muestra solo los mensajes del kernel. * ''-H'': salida coloreada y paginada. * ''-l'': filtra por niveles (''warn'', ''err'', etc). ==== Procesos de inicio ==== Podemos encontrar 3 tipos de procesos encargados de iniciar y gestionar los servicios o demonios de entornos Linux === SysVinit === Utiliza scripts y niveles de ejecución para controlar el inicio, apagado y gestión de los procesos del sistema. La configuración básica está en ''/etc/inittab''. Niveles de ejecución (pueden variar según la distribución de Linux): * 0: Parar * 1: Monousuario * 2: Multiusuario * 3: Multiusuario con soporte de red * 4: Igual que el 3 * 5: Multiusuario gráfico (X11) * 6: Reiniciar. === Systemd === Agrupa los servicios en "target" en lugar de niveles de ejecución (//runlevel//) estableciendo en ellos dependencias y el orden de ejecución de los procesos. Aprovecha características de los kernel más modernos e intentar que el arranque sea más rápido, lanzar procesos de forma paralela, etc. Se ejecuta un único programa que utilizará ficheros de configuración para cada servicio a gestionar. Utiliza **unidades** que pueden ser de diversos tipos: automount, device, mount, path, service, snapshot, socket y target. Cada unidad se define en un fichero con el nombre de dicha unidad y en la extensión se indica el tipo de unidad, por ejemplo, ''ssh.service''. Estos ficheros pueden estar en distintos directorios: * ''/usr/lib/systemd/system'' * ''/lib/systemd/system'' * ''/etc/systemd/system'' === Upstart === Utiliza eventos para gestionar el arranque o parada de los procesos. ===== Comandos del sistema ===== Desde el terminal podemos enviar comandos para la parada o reinicio del sistema. * ''shutdown'': apaga el sistema de forma planificada. * ''halt'': apaga el sistema sin enviar señal ACPI de apagado de alimentación eléctrica (tendríamos que apagarlo físicamente) * ''poweroff'': apaga el sistema con señal ACPI * ''reboot'': reinicia el sistema. Si queremos reiniciar en 5 minutos avisando a los usuarios que estén en consola: shutdown +5 "El sistema se apagará en 5 minutos" Podemos indicar la hora de apagado con ''shutdown HH:MM''. Si queremos que se apague ahora mismo: ''shutdown now'' Si quisiéramos cancelar el apagado programado: shutdown -c Se puede utilizar el comando ''wall'' para enviar mensajes al resto de usuarios conectados por terminal Se pueden utilizar varios comandos para reiniciar: * ''reboot'' * ''shutdown -r'' * ''halt --reboot'' Se pueden utilizar varios comandos para cerrar el sistema: * ''halt'' * ''shutdown -H'' * ''reboot --halt'' Y para apagar: * ''poweroff'' * ''shutdown -P'' * ''halt -p''