Comandos básicos GNU/Linux#
Control de procesos#
ps ver procesos ps -ef
top, htop monitorización de procesos
PID Número único que identifica cada proceso en el sistema
USUARIO Nombre del usuario que es dueño del proceso
PR Prioridad del proceso en el sistema operativo
NI Valor de "amabilidad" que afecta cuánto CPU recibe el proceso
VIRT Memoria virtual total que el proceso está usando
RES Memoria física (RAM) real que el proceso está usando
SHR Memoria que el proceso comparte con otros procesos
%CPU Porcentaje de tiempo de CPU que el proceso está usando
%MEM Porcentaje de memoria RAM total que el proceso está usando
S Estado actual del proceso (ejecutándose, dormido, etc.), los estados más comunes son:
R Ejecutándose o listo para ejecutar
S Durmiendo (esperando por algo)
D Durmiendo profundamente (no se puede interrumpir)
Z Zombie (proceso terminado pero no eliminado)
T Detenido/pausado
Atajos de teclado
[Espacio] Realiza un refresco de la pantalla
[h] Muestra la pantalla de ayuda
[k] Mata un proceso, pedirá la ID del proceso y la señal que hay que enviarle.
[n] Cambia el número de procesos que se muestran en pantalla.
[u] Ordena por usuario.
[M] Ordena por uso de memoria.
[P] Ordena por uso del CPU.
nice ejecuta un comando con una prioridad determinada; renice modifica la prioridad de un proceso en ejecución
kill mata procesos
pstree muestra en vista de árbol (de forma jerárquica) una lista de los procesos en ejecución.
nohup permite mantener la ejecución de un comando pese a salir de la terminal
jobs, fg, bg, Ctrl+C, Ctrl+Z
$ sleep 10m & #mandamos al segundo plano añadiendo & al final
[1] 7768
$ sleep 10m &
[2] 7770
$ sleep 10m &
[3] 7771
$ jobs
[1] Ejecutando sleep 10m &
[2]- Ejecutando sleep 10m &
[3]+ Ejecutando sleep 10m &
$ fg %1 #lo traemos al primer plano, bloquea la terminal
sleep 10m #para desbloquear terminal y no matar el proceso Ctrl+Z
^Z
[1]+ Detenido sleep 10m
$ jobs
[1]+ Detenido sleep 10m
[2] Ejecutando sleep 10m &
[3]- Ejecutando sleep 10m &
$ bg %1 #lo volvemos a mandar al segundo plano
[1]+ sleep 10m &
$ jobs
[1] Ejecutando sleep 10m &
[2]- Ejecutando sleep 10m &
[3]+ Ejecutando sleep 10m &
$ kill %1 #matamos el proceso 1
$ jobs
[1] Terminado sleep 10m
[2]- Ejecutando sleep 10m &
[3]+ Ejecutando sleep 10m &
$ fg %2 #traemos el proceso 2 al primer plano
sleep 10m #para matar el proceso Ctrl+C
^C
$ jobs
[3]+ Ejecutando sleep 10m &
sleep 10 & # Ponemos tarea en segundo plano añadiendo & al final del comando.
fg %1 # Ponerlo en primer plano
bg %1
Ctrl+Z # para detener una tarea en primer plano
Ctrl+C # para cancelar una tarea en primer plano
/etc/security/limits.conf es utilizado en sistemas Unix y Linux para configurar límites de recursos y privilegios para usuarios y grupos. Este archivo permite establecer restricciones específicas sobre cómo los usuarios pueden utilizar los recursos del sistema, como la cantidad de memoria, la cantidad de procesos, el número de archivos abiertos, entre otros. También se utiliza para establecer prioridades y políticas de programación para procesos específicos. Los límites definidos en "/etc/security/limits.conf" son aplicados por el sistema de gestión de límites de recursos (RLIMIT) del kernel. Esto permite evitar el uso excesivo de recursos por parte de usuarios o grupos, lo que podría llevar a una degradación del rendimiento del sistema o incluso a problemas de seguridad.
/proc/self es un atajo que permite a un proceso acceder a información sobre sí mismo a través del sistema de archivos virtual /proc, que proporciona una ventana al kernel para monitorear y gestionar procesos y recursos del sistema.
Ficheros y directorios#
ls listar archivos y carpetas
ls -l #ver archivos y directorios en formato detallado o extendido ls -la #ver archivos ocultos (empiezan por .) ls *dat #ver los archivos acabados en dat ls *T* #ver archivos que contienen T ls ???.dat #ver archivos que tienen 3 caracteres y terminan en .dat ls -ai #ver inodos
ln -s crea enlaces simbólicos; sin la opción -s, ln crea enlaces duros (solo sobre archivos, comparten el mismo inodo)
stat muestra información del inodo
cp -r copiar
mv mover, renombrar
rm -fr borrar
touch crea un archivo vacío o actualiza su fecha de modificación
mkdir crear directorio
cd cambiar directorio
Entrar en A :
cd ASubir un nivel :
cd ..Ir al home (ruta al directorio personal del usuario actual):
cd <enter>ocd $HOMEVolver al directorio anterior :
cd -
whereis localiza los archivos binarios (ejecutables), páginas de manual (man) y archivos fuente de un comando o programa
pwd muestra tu ubicación como ruta absoluta (ej: /home/usuario/docs), que empieza desde / y es fija. Las rutas relativas (ej: docs) dependen del directorio actual: si pwd dice /home/usuario/docs, entonces es la ruta relativa docs y /home/usuario/docs la ruta absoluta
locate es muy rápido porque busca en una base de datos preconstruida
locate sshd_config locate "*.ssh" locate -i SSH # Ignorar mayúsculas/minúsculas locate -r "ssh[0-9]*\.conf$" # utiliza expresiones regulares sudo updatedb # actualizar su base de datos
find busca en tiempo real recorriendo el sistema de archivos
find /etc -name "sshd_config" # Busca en el directorio /etc (y todos sus subdirectorios) un archivo llamado exactamente "sshd_config" find /etc -iname "sshd_config" # ignorando mayúsculas/minúsculas find /etc -name "sshd_config" -ls # muestra permisos, dueño, tamaño, etc. find . -name "*dat" # las comillas evitan que el shell expanda el * find . -not -name "*dat" find . -type f -size +20M # para buscar por tamaño find /home -size 1M # exactamente de 1MB. +1M busca los mayores y con -1M los menores de 1MB
Alias#
Un alias es una forma de crear atajos o abreviaturas para comandos largos o frecuentemente utilizados.
Puedes definir alias en Bash utilizando el comando alias. Por ejemplo, si deseas crear un alias para un comando largo como ls -l, puedes hacerlo de la siguiente manera:
alias ll='ls -l'
Para hacer que los alias sean persistentes y estén disponibles cada vez que abras una terminal, puedes agregarlos al archivo de configuración donde se cargan los valores por defecto cada vez que abres una terminal ~/.bashrc
Visualizadores de archivos#
cat visualizar el contenido del archivo, si queremos numerar las líneas
cat -nmore ver archivos página por página, si queremos abrir el archivo comenzando en la línea número n
more +n, more +50 acceso.logless visor avanzado con navegación completa
Editor vi#
vi hola.dat abrir y editar el archivo hola.dat
i -> modo insertar
<esc> -> modo comandos
:w -> guardar
:q -> salir
:wq -> guardar y salir
:q! -> salir sin guardar
:n -> ir a la linea n
shift + R -> REEMPLAZAR
/cadena -> buscar cadena (n, shift+n)
N yy -> copiar N lineas
N dd -> borrar N lineas
p -> pegar
u -> undo
:redo -> rehacer
:%s/cadena1/cadena2/g -> sustituir una cadena
G -> ir al final del archivo
:set number -> ver los números de línea (:set nu ; :set nonu)
Para establecer la configuración por defecto usamos el archivo .vimrc, por ejemplo:
$ cat ~/.vimrc filetype indent off
Para configurar que el editor vi sea nuestro editor de forma predeterminada:
export EDITOR=/usr/bin/vim
Esta configuración se aplica solo para la sesión actual, para que sea permanente agrega esta línea al archivo .bashrc
echo 'export EDITOR=/usr/bin/vim' >> ~/.bashrc source ~/.bashrc # recarga la configuración en la sesión actual
Compresión#
tar, gzip, gunzip, zip combina una colección de archivos y carpetas en un solo archivo (conocido como "tarball"). Luego, puedes usar gzip (u otras herramientas como bzip2 o xz) para comprimir ese archivo .tar.
tar -czvf A.tar.gz carpeta/ # crear el tarball comprimido con gzip
tar -xzvf A.tar.gz # extraerlo
tar -tvzf A.tar.gz # listar los archivos sin descomprimir
zip -r A.zip carpeta/ # comprimir en formato zip
unzip A.zip # descomprimir el zip
Instalar software#
apt-get update actualiza la lista de paquetes disponibles
apt-get upgrade actualiza todos los paquetes instalados a la última versión disponible en los repositorios.
apt-get install instala un paquete y sus dependencias (si ya está instalado, lo actualiza)
con la opción --reinstall reinstala el paquete.
apt-get remove desinstala un paquete instalado
apt-get purge desinstala eliminando ficheros de configuración.
apt-get install -f resuelve las dependencias de paquetes rotos instalando lo necesario.
dpkg --configure -a intenta reconfigurar todos los paquetes desplegados no configurados
dpkg -i instalación manual
En las versiones recientes puede usarse el comando apt (apt update, apt upgrade, apt install...), que unifica las funciones de apt-get y apt-cache con una salida más amigable.
Configuración de la red#
Obtener IP local
ip aReiniciar tarjeta de red
sudo systemctl restart systemd-networkd # en servidores con netplan/networkd sudo systemctl restart NetworkManager # en equipos de escritorio
Activar/desactivar tarjeta red
sudo ip link set enp0s3 down/up
NetPlan es la nueva utilidad para configurar la red, el antiguo /etc/network/interfaces ya no funciona. Debemos configurar
/etc/netplan/01-*.yaml, por ejemplo:network: ethernets: enp0s3: addresses: - 10.4.105.100/8 routes: - to: default via: 10.0.0.2 nameservers: addresses: [8.8.8.8] version: 2
Probar NetPlan
sudo netplan --debug apply
Aplicar NetPlan
sudo netplan apply
virtualBox#
VBoxManage list vms
VBoxManage list runningvms
VBoxManage startvm 'ubuntu-server' --type headless
VBoxManage controlvm 'ubuntu-server' savestate
Gestión de particiones#
gparted editor de particiones para el entorno de escritorio GNOME
fdisk utilidad de línea de comandos que se utiliza para manejar particiones de discos duros en sistemas operativos (vídeo).
fdisk -l # muestra discos y particiones que hay en el sistema fdisk /dev/sdX #para hacer el particionado del disco /dev/sdX # o crear nueva tabla de particiones (MSDOS) # n crear nueva particion (para poner tamaño +25G) # w escribir los cambios
cfdisk similar a fdisk, pero con una interfaz diferente
mkfs.ext4 /dev/sdX1 dar formato ext4 a la partición sdX1
fsck Utilidad para detectar, verificar y corregir los errores del sistema de archivo
mkswap /dev/sdX1 para convertir la partición /dev/sdX1 al formato SWAP
swapon activa particiones de swap
swapoff desactiva particiones de swap
df -h muestra el estado actual de las particiones montadas
du -sh tamaño de archivos y directorios
mount se utiliza para conectar (montar) un sistema de archivos (disco, USB, partición, recurso de red) en un directorio (punto de montaje) para poder acceder a sus archivos. Para montar utilizamos
mount [opciones] <dispositivo> <punto_montaje>y para desmontarumount <punto_montaje>mount /dev/sda1 /media/carpeta1 umount /media/carpeta1 mount -t ext3 /dev/sdb3 /home
lsblk -a nos muestra información de todos los dispositivos de bloque
file sirve para determinar el tipo archivo
dd copia y clona datos, discos y particiones. Podemos usarlo para limpiar nuestro MBR y la tabla de particiones
dd if=/dev/zero of=/dev/sda bs=512 count=1
/etc/fstab contiene información sobre los sistemas de archivos del sistema, sus puntos de montaje y opciones; en las distribuciones recientes se implementa además un sistema de automontaje.
$ cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda2 during curtin installation /dev/disk/by-uuid/4609be84-f57c-4ee0-b876-3839f95d628c / ext4 defaults 0 1 /dev/disk/by-uuid/f7832f7d-90b0-4c39-9145-4d5dfaaf5d47 none swap sw 0 0 # /home was on /dev/sdb during curtin installation /dev/disk/by-uuid/093e58be-28c0-4620-87cc-c77e3cb03b8c /home ext4 defaults 0 1 /swap.img none swap sw 0 0 $ sudo file -Ls /dev/sdb /dev/sdb: Linux rev 1.0 ext4 filesystem data, UUID=093e58be-28c0-4620-87cc-c77e3cb03b8c (needs journal recovery) (extents) (64bit) (large files) (huge files)
La estructura de las instrucciones es de 6 columnas separadas por espacios o tabuladores
<pass-num> indica el orden en que la aplicación fsck revisará la partición en busca de errores durante el inicio, si es cero el dispositivo no se revisa.
<dispositivo> es el directorio lógico que hace referencia a una partición o recurso. Nombre del dispositivo o etiqueta, podríamos sustituir la línea de /home por:
/dev/sdb1 /HOME ext4 defaults 0 2
<punto_de_montaje> es la carpeta en que se proyectarán los datos del sistema de archivos, en la línea anterior /HOME
<sistema de archivos> es el algoritmo que se utilizará para interpretarlo.
<opciones> es el lugar donde se especifican los parámetros que mount utilizará para montar el dispositivo, deben estar separadas por comas. Las opciones de montaje son numerosas. Las más usadas se listan a continuación:
auto : indica que el dispositivo se monta siempre que se inicie el sistema. La opuesta es noauto.
rw: indica que el dispositivo se monta con permisos de lectura y escritura.
ro: indica que el dispositivo se monta con permisos de lectura solamente.
owner: indica que el usuario conectado al sistema localmente en primer lugar tiene derechos a montar y desmontar el dispositivo (se adueña de este).
user : indica que cualquier usuario puede montar y solo el mismo usuario podrá desmontar el dispositivo. La opción opuesta es nouser.
users : indica que cualquier usuario puede montar y cualquiera también puede desmontar el dispositivo.
suid : indica que el bit "s" (SUID/SGID) tenga efecto para los ejecutables presentes en el dispositivo: se ejecutan con los permisos del dueño del archivo (normalmente root) en vez de con los del usuario que los invoca. La opción opuesta es nosuid.
exec : indica que los binarios ejecutables almacenados en el dispositivo se pueden ejecutar. La opción opuesta es noexec.
async : expresa que todas las operaciones de entrada y salida se hacen de forma asíncrona, o sea, no necesariamente en el momento en que se invocan. La opción opuesta es sync.
dev : indica que se interprete como tal a los dispositivos especiales de bloques y de caracteres presentes en el dispositivo. La opción opuesta es nodev.
defaults : es una opción equivalente a la unión de rw, suid, dev, exec, auto, nouser y async.
<dump-freq> es el comando que utiliza dump para hacer respaldos del sistema de archivos, si es cero no se toma en cuenta ese dispositivo.
<pass-num> indica el orden en que la aplicación fsck revisará la partición en busca de errores durante el inicio, si es cero el dispositivo no se revisa.
rsync#
rsync sirve para sincronización de archivos
rsync [opciones] [origen] [destino]
Opciones comunes
-v (verbose): Muestra información detallada sobre el proceso de sincronización.
-r (recursive): Copia directorios recursivamente.
-a (archive): Modo de copia de seguridad, que conserva metadatos como permisos, propiedades y fechas de modificación.
--delete: Elimina archivos en el destino que no existen en el origen (útil para mantener los dos sistemas iguales).
--exclude: Permite excluir ciertos archivos o patrones de archivos de la sincronización.
-n (dry-run): Realiza una simulación de la sincronización sin realizar cambios en el sistema de archivos.
-P (progress): Muestra el progreso de la transferencia.
Ejemplos de uso
#Copiar un directorio local a otro lugar local
rsync -av /ruta/de/origen/ /ruta/de/destino/
#Copiar de local a un servidor remoto (SSH)
rsync -av -e ssh /ruta/local/ usuario@servidor:/ruta/destino/
#Copiar de un servidor remoto a local
rsync -av -e ssh usuario@servidor:/ruta/origen/ /ruta/local/destino/
#Eliminar archivos en el destino que no existen en el origen
rsync -av --delete /ruta/de/origen/ /ruta/de/destino/
Consejos adicionales
Usa
-npara simular una sincronización antes de ejecutarla realmente. Esto te permitirá ver qué cambios se realizarán sin efectuarlos.Usa
--excludepara evitar copiar ciertos archivos o directorios. Por ejemplo,--exclude=archivo.txtevitará la copia del archivo llamado archivo.txt.