¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Comandos avanzados
Sección perteneciente al curso Linux para DevOps y Sysadmin.
Comando df
El comando df informe sobre la utilización de disco en un sistema de ficheros.
El uso más habitual es:
df -h
-h: legible para humanos
S.ficheros Tamaño Usados Disp Uso% Montado en tmpfs 196M 1,6M 195M 1% /run /dev/sda3 20G 12G 6,4G 65% / tmpfs 980M 0 980M 0% /dev/shm tmpfs 5,0M 4,0K 5,0M 1% /run/lock /dev/sda2 512M 6,1M 506M 2% /boot/efi tmpfs 196M 164K 196M 1% /run/user/1000
Si además quisiéramos incluir los pseudo sistemas de ficheros (/sys, /proc) y los inaccesibles, empleamos el argumento a:
$ df -ah S.ficheros Tamaño Usados Disp Uso% Montado en sysfs 0 0 0 - /sys proc 0 0 0 - /proc udev 943M 0 943M 0% /dev devpts 0 0 0 - /dev/pts tmpfs 196M 1,6M 195M 1% /run /dev/sda3 20G 12G 6,4G 65% / securityfs 0 0 0 - /sys/kernel/security tmpfs 980M 0 980M 0% /dev/shm tmpfs 5,0M 4,0K 5,0M 1% /run/lock cgroup2 0 0 0 - /sys/fs/cgroup pstore 0 0 0 - /sys/fs/pstore bpf 0 0 0 - /sys/fs/bpf systemd-1 - - - - /proc/sys/fs/binfmt_misc hugetlbfs 0 0 0 - /dev/hugepages mqueue 0 0 0 - /dev/mqueue tracefs 0 0 0 - /sys/kernel/tracing debugfs 0 0 0 - /sys/kernel/debug fusectl 0 0 0 - /sys/fs/fuse/connections configfs 0 0 0 - /sys/kernel/config ramfs 0 0 0 - /run/credentials/systemd-sysusers.service /dev/loop1 74M 74M 0 100% /snap/core22/858 /dev/loop0 128K 128K 0 100% /snap/bare/5 /dev/loop3 238M 238M 0 100% /snap/firefox/2987 /dev/loop2 64M 64M 0 100% /snap/core20/1974 /dev/loop4 350M 350M 0 100% /snap/gnome-3-38-2004/143 /dev/loop5 486M 486M 0 100% /snap/gnome-42-2204/120 /dev/loop6 92M 92M 0 100% /snap/gtk-common-themes/1535 /dev/loop7 13M 13M 0 100% /snap/snap-store/959 /dev/loop9 54M 54M 0 100% /snap/snapd/19457 /dev/loop8 512K 512K 0 100% /snap/snapd-desktop-integration/83 /dev/sda2 512M 6,1M 506M 2% /boot/efi binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc tmpfs 196M 164K 196M 1% /run/user/1000 gvfsd-fuse 0 0 0 - /run/user/1000/gvfs tmpfs 196M 1,6M 195M 1% /run/snapd/ns nsfs 0 0 0 - /run/snapd/ns/firefox.mnt /dev/sda3 20G 12G 6,4G 65% /var/snap/firefox/common/host-hunspell nsfs 0 0 0 - /run/snapd/ns/snap-store.mnt nsfs 0 0 0 - /run/snapd/ns/snapd-desktop-integration.mnt /dev/loop10 74M 74M 0 100% /snap/core22/864 /dev/loop11 486M 486M 0 100% /snap/gnome-42-2204/126
Comando du
Muestra una estimación del espacio ocupado por ficheros y directorios.
du -sh
-s: espacio utilizado real-h: muestra el tamaño en megabytes.
$ du -sh /home 17M /home
Comando grep
Este comando permite encontrar líneas de texto que contengan una cadena o patrón dentro de uno o varios archivos.
Buscar el texto ACPI en el fichero /var/log/syslog:
grep ACPI /var/log/syslog
Si añadimos el argumento --color resaltará en pantalla las coincidencias.
Otro argumento interesante es -i que permite no hacer distinción entre mayúsculas y minúsculas:
grep -i error /var/log/syslog
Si queremos que muestre el número de línea:
grep -n ACPI /var/log/syslog
El comando grep se puede concatenar con otros comandos a través de tuberías:
lscpu | grep -i model
Comando head
Imprime las primeras líneas de un fichero. Por defecto muestra las 10 primeras líneas:
head fichero
Para indicar el número de líneas a mostrar, usamos el argumento -n:
$ head -n 4 /var/log/syslog head -n5 /var/log/syslog Sep 11 17:42:15 ubuntu-devops kernel: [ 0.000000] Linux version 6.2.0-32-generic (buildd@lcy02-amd64-076) (x86_64-linux-gnu-gcc-11 (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #32~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 18 10:40:13 UTC 2 (Ubuntu 6.2.0-32.32~22.04.1-generic 6.2.16) Sep 11 17:42:15 ubuntu-devops kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.2.0-32-generic root=UUID=2e064991-4618-44cf-ae59-725ef1c9bb26 ro quiet splash Sep 11 17:42:15 ubuntu-devops kernel: [ 0.000000] KERNEL supported cpus: Sep 11 17:42:15 ubuntu-devops kernel: [ 0.000000] Intel GenuineIntel Sep 11 17:42:15 ubuntu-devops kernel: [ 0.000000] AMD AuthenticAMD
El comando head también se puede usar con otros comandos mediante tuberías:
lsusb | head -n2
Comando locate
Busca ficheros y directorios.
locate deploy
Comando more y less
El comando more muestra el resultado de un comando de forma paginada, es decir, si la salida por pantalla va a ocupar más de lo visible, lo va separando por páginas.
ps -ef | more
También se puede utilizar para visualizar cualquier fichero:
more /var/log/syslog
El comando less es más potente, no solo pagina los resultados y permite movernos, sino que además podemos hacer búsquedas.
Comando tail
Muestra la parte final de un archivo.
Por defecto imprime las últimas 10 líneas.
tail /var/log/syslog
Si queremos decir el número de líneas a mostrar, usamos el argumento -n:
tail -n 2 /var/log/syslog
Algo muy útil es usar el argumento -f que mantiene en funcionamiento tail y muestra los datos que se van añadiendo al archivo:
tail -f /var/log/syslog
Comando htop y top
El comando top muestra los procesos y más información del sistema.
top - 16:54:30 up 6:28, 4 users, load average: 0,00, 0,08, 0,16
Tareas: 186 total, 2 ejecutar, 184 hibernar, 0 detener, 0 zombie
%Cpu(s): 0,2 us, 0,3 sy, 0,0 ni, 99,3 id, 0,0 wa, 0,0 hi, 0,2 si, 0,0 st
MiB Mem : 1959,4 total, 663,8 libre, 616,3 usado, 679,3 búfer/caché
MiB Intercambio: 2140,0 total, 1981,8 libre, 158,2 usado. 1146,0 dispon Mem
PID USUARIO PR NI VIRT RES SHR S %CPU %MEM HORA+ ORDEN
380 systemd+ 20 0 14824 4096 3328 S 0,3 0,2 0:26.68 systemd-oomd
2013 jm 20 0 503460 16800 10016 S 0,3 0,8 0:00.88 update-notifier
22853 jm 20 0 21956 4096 3328 R 0,3 0,2 0:00.03 top
1 root 20 0 168000 10536 5544 S 0,0 0,5 0:05.51 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0,0 0,0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0,0 0,0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0,0 0,0 0:00.00 slub_flushwq
6 root 0 -20 0 0 0 I 0,0 0,0 0:00.00 netns
8 root 0 -20 0 0 0 I 0,0 0,0 0:00.00 kworker/0:0H-eve+
El comando htop muestra la misma información que top, pero de forma más agradable.También podemos realizar acciones sobre los procesos mediante atajos de teclado como hacer búsquedas, filtrar por algún parámetro, etc.
En Ubuntu, el comando htop se instala mediante el paquete htop
Comando wget
Descarga ficheros de una URL de forma no interactiva.
wget https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-desktop-amd64.iso
Firejail - securiza tus aplicaciones en linux
Firejail permite “enjaular” una aplicación y que se ejecute de forma segura.
En Ubuntu, se instala con el paquete fairjail.
Si queremos ejecutar una aplicación con Fairjail:
fairjail firefox
Instalar php y python en un contenedor de docker
En Ubuntu, instaremos Docker con el paquete docker.io y Docker Compose con docker-compose.
Probamos la instalación de Docker creando un contenedor de la imagen de Ubuntu:
run -dti --name ubuntu ubuntu:latest
Nos metemos en el contenedor:
docker exec -ti ubuntu bash
Una vez dentro del contenedor, actualizamos los repositorios y el sistema:
apt update && apt upgrade
Para instalar Python en este contenedor Ubuntu:
apt install software-properties-common python3
En Ubuntu suele venir instalado Python, así que no necesitaríamos hacer los pasos anteriores.
Para instalar PHP:
apt install php
Para detener el contenedor de Docker:
docker stop ubuntu
Y para eliminarlo:
docker rm ubuntu
Smartctl
Este comando consulta información sobre discos de almacenamiento.
En Ubuntu se instala mediante el paquete smartmoontools.
Para ver el resumen del estado de un dispositivo:
smartctl -A /dev/sda2
Con el argumento -i podemos ver información sobre el disco y ver cosas como si SMART está activado o no:
smartctl -i /dev/sda2
Ejemplo de salida:
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.4.12-arch1-1] (local build) Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Samsung based SSDs Device Model: Samsung SSD 860 EVO 1TB Serial Number: S4CSNF0MA00815A LU WWN Device Id: 5 002538 e49a08082 Firmware Version: RVT03B6Q User Capacity: 1.000.204.886.016 bytes [1,00 TB] Sector Size: 512 bytes logical/physical Rotation Rate: Solid State Device Form Factor: 2.5 inches TRIM Command: Available, deterministic, zeroed Device is: In smartctl database 7.3/5528 ATA Version is: ACS-4 T13/BSR INCITS 529 revision 5 SATA Version is: SATA 3.2, 6.0 Gb/s (current: 3.0 Gb/s) Local Time is: Wed Sep 13 17:24:46 2023 CEST SMART support is: Available - device has SMART capability. Ssmartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.4.12-arch1-1] (local build) Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Samsung based SSDs Device Model: Samsung SSD 860 EVO 1TB Serial Number: S4CSNF0MA00815A LU WWN Device Id: 5 002538 e49a08082 Firmware Version: RVT03B6Q User Capacity: 1.000.204.886.016 bytes [1,00 TB] Sector Size: 512 bytes logical/physical Rotation Rate: Solid State Device Form Factor: 2.5 inches TRIM Command: Available, deterministic, zeroed Device is: In smartctl database 7.3/5528 ATA Version is: ACS-4 T13/BSR INCITS 529 revision 5 SATA Version is: SATA 3.2, 6.0 Gb/s (current: 3.0 Gb/s) Local Time is: Wed Sep 13 17:24:46 2023 CEST SMART support is: Available - device has SMART capability. SMART support is: Enabled
Umask
Establece la máscara de creación de archivos del usuario.
Tenemos que conocer el sistema de permisos en Linux:
| Octal | Símbolos | Permisos |
|---|---|---|
| 0 | --- | Sin permisos |
| 1 | --x | Ejecución |
| 2 | -w- | Escritura |
| 3 | -wx | Escritura y ejecución |
| 4 | r-- | Lectura |
| 5 | r-x | Lectura y ejecución |
| 6 | rw- | Lectura y escritura |
| 7 | rwx | Lectura, escritura y ejecución |
Los permisos se establecen a nivel de propietario, grupo y otros:
$ ls -l /var/ drwxr-xr-x 6 root root 4096 sep 11 17:00 spool
drwxr-xr-x se separaría:
d: indica que es un directorio.rwx: permisos del propietarior-x: permisos del grupor-x: permisos del resto (otros)
Si ejecutamos umask sin más, nos indica los permisos que se le asigna a un fichero o directorio cuando se crea:
umask 0002
Si le añadimos el argumento -S:
umask -S u=rwx,g=rwx,o=rx
Para cambiar la máscara por defecto, editamos el fichero /etc/profile y añadimos al final:
umask 027
Guardamos y cargamos la nueva configuración en bash:
source /etc/profile
Nmap
Herramienta de exploración de redes y de sondeo de seguridad / puertos.
- Un puerto es un lugar por donde los ordenadores intercambian información.
- Un servicio es el tipo de información que se intercambia con la utilidad determinada (SSH, FTP, HTTP…)
- Un firewall es un sistema que acepta o rechaza tráfico entrante y saliente de un equipo.
- Un paquete SYN es un paquete que abre un intento de establecer una conexión TCP.
A la hora de trabajar con Nmap, veremos los puertos de 3 maneras:
- open: puerto abierto. Hay un servicio escuchando por él.
- close: puerto cerrado. Es un puerto accesible, pero no hay nada escuchando por él.
- filtered: puerto no accesible porque el firewall está filtrándolo.
En Ubuntu, Nmap se instala mediante el paquete nmap
Vamos a hacer pruebas contra un contenedor de Docker:
docker run -ti --name web -p 80:80 httpd:latest
Comprobamos la IP del anterior contenedor:
docker inspect web
Nos fiiamos en el apartado “IPAddress”.
Hacemos prueba con Nmap:
nmap -sSV 172.0.0.2
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-13 17:57 CEST Nmap scan report for 172.17.0.2 Host is up (0.000013s latency). Not shown: 999 closed ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.57 ((Unix)) MAC Address: 02:42:AC:11:00:02 (Unknown)
Podemos usar Nmap con nombres de dominio:
nmap -A -T4 www.google.es
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-13 18:02 CEST Nmap scan report for www.google.es (142.250.184.163) Host is up (0.016s latency). Other addresses for www.google.es (not scanned): 2a00:1450:4003:80e::2003 rDNS record for 142.250.184.163: mad07s23-in-f3.1e100.net Not shown: 998 filtered ports PORT STATE SERVICE VERSION 80/tcp open http gws 2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service : (...) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running (JUST GUESSING): OpenBSD 4.X (86%) OS CPE: cpe:/o:openbsd:openbsd:4.3 Aggressive OS guesses: OpenBSD 4.3 (86%) No exact OS matches for host (test conditions non-ideal). Network Distance: 9 hops TRACEROUTE (using port 80/tcp) HOP RTT ADDRESS 1 2.08 ms _gateway (192.168.0.1) 2 ... 3 4 12.07 ms ix-be-7-700.ecore1.dvs-bilbao.as6453.net (80.231.157.133) 5 15.53 ms if-ae-8-2.tcore1.wv6-madrid.as6453.net (5.23.28.134) 6 15.05 ms 72.14.213.246 7 15.10 ms 74.125.242.161 8 17.44 ms 142.250.213.127 9 15.16 ms mad07s23-in-f3.1e100.net (142.250.184.163) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 85.48 seconds
Zenmap es una interfaz gráfica de Nmap.
