Conceptos Fundamentales de Linux

Guía de Referencia de Linux

Conceptos Básicos

- /bin: Directorio de comandos básicos
- /sbin: Directorio de comandos de sistema, solo accesibles para el administrador
- /boot: Directorio del sistema operativo, equivalente a la unidad C
- /dev: Directorio de archivos de dispositivos, SSD, unidades ópticas, USB, /dev/sr0 representa la unidad óptica, deben ser montados primero
- /etc: Directorio de archivos de configuración. Después de instalar software, los archivos de configuración se almacenan aquí (importante)
- /home: Directorio personal de los usuarios
- /root: Directorio personal del administrador
- /media: Directorio de montaje, para discos ópticos y disquetes
- /mnt: Directorio de montaje, para dispositivos adicionales como USB, SSD, discos duros externos
- /opt: Directorio de software de terceros, lugar para instalar otro software, paquetes de código fuente instalados manualmente
- /usr/local: Directorio de software
- /proc: Sistema de archivos virtual, almacenado en memoria, principalmente guarda información del kernel, procesos, estado de dispositivos externos y red, como /proc/devices /proc/net
- /sys: Sistema de archivos virtual, almacenado en memoria, principalmente guarda información relacionada con el kernel
- /tmp: Directorio de archivos temporales, todos los usuarios pueden acceder y escribir aquí
- /var: Directorio de archivos que cambian con frecuencia, archivos web, archivos de datos, archivos de registro


Rutas

Ruta absoluta: ls /home/usuario/escritorio
Ruta relativa: ../: indica el directorio superior
	./: indica el directorio actual
	nombre_directorio/: indica el directorio inferior (el siguiente nivel)


Comandos Básicos

- uname -a Ver la versión del kernel
- stat Ver información de archivos
- history Ver el historial de comandos ingresados (1000 entradas)
- which Ver la ubicación de archivos ejecutables
- wheris Ver la ubicación de un comando
- alias Establecer alias para comandos
- hostname-ctl Cambiar el nombre del host
- dmidecode Ver información del servidor del sistema
- dmesg Ver los registros de arranque del hardware del servidor
- ip a Ver las direcciones del sistema
- date Ver fecha y hora del sistema
- ethtool Ver información de la red
- source Inicializar archivos
- localizar Buscar archivos por nombre
- rz/sz Subir/descargar archivos


Redirección de Salida

- >: Redirige la salida estándar a un archivo especificado, si el archivo no existe lo crea, si ya existe sobrescribe su contenido.
- >>: Redirige la salida estándar a un archivo especificado, si el archivo no existe lo crea, si ya existe añade contenido al final.
- 2>: Redirige la salida de error estándar a un archivo especificado.
- &>: Redirige tanto la salida estándar como la de error estándar a un archivo especificado.
- |: Envía la salida del comando anterior como entrada del siguiente comando.
A continuación, mostramos algunos ejemplos para demostrar el uso de la redirección de salida.

1. Guardar la salida de un programa en un archivo
Supongamos que tenemos un archivo de texto llamado test.txt con el siguiente contenido:
hola mundo
este es un archivo de prueba

Ahora, vamos a guardar la salida del comando ls en el archivo test.txt usando el siguiente comando:
ls > test.txt
Este comando guarda la salida del comando ls en el archivo test.txt. Si el archivo test.txt no existe, lo crea; si ya existe, sobrescribe su contenido.

2. Añadir la salida de un programa al final de un archivo
Si queremos añadir la salida del comando ls al final del archivo test.txt en lugar de sobrescribirlo, podemos usar el siguiente comando:
ls >> test.txt
Este comando añade la salida del comando ls al final del archivo test.txt.

3. Guardar la salida de error de un programa en un archivo
A veces, la salida de error de un programa puede ser importante y necesitamos guardarla en un archivo. Por ejemplo, si ejecutamos un comando que no existe, el sistema mostrará un mensaje de error:
bash: abc: comando no encontrado

Si queremos guardar este mensaje de error en el archivo error.log, podemos usar el siguiente comando:
abc 2> error.log
Este comando ejecuta el comando abc, como no existe, el sistema muestra un mensaje de error que se redirige al archivo error.log.

4. Redirigir tanto la salida estándar como la de error a un archivo
A veces, necesitamos redirigir tanto la salida estándar como la de error a un archivo. Podemos usar el siguiente comando:
ls &> output.log
Este comando redirige tanto la salida estándar como la de error del comando ls al archivo output.log.

5. Usar la salida de un comando como entrada de otro
Para buscar todas las líneas que contienen la cadena "hola" en archivos txt del directorio actual y sus subdirectorios, podemos usar el siguiente comando:
grep hola *.txt

Para guardar los resultados en un archivo, podemos usar el operador de redirección, por ejemplo:
grep hola *.txt > resultado.txt
Este comando busca en todos los archivos txt del directorio actual las líneas que contienen la cadena "hola" y guarda los resultados en el archivo resultado.txt.


Tubo (Pipe)

0: Entrada estándar. El proceso necesita que otros programas le pasen parámetros para funcionar correctamente
1: Salida estándar, resultado correcto de la ejecución de un programa o comando, llamado salida estándar
2: Error estándar, resultado incorrecto de la ejecución de un programa o comando, llamado error estándar


Permisos de Archivos

Tres permisos básicos: lectura, escritura y ejecución. Estos tres permisos se representan con r, w y x, correspondientes a los permisos de lectura, escritura y ejecución de archivos.
Antes del nombre del archivo, hay algunos símbolos que indican el tipo y permisos del archivo:
- `-`: Indica que el tipo de archivo es un archivo regular.
- `d`: Indica que el tipo de archivo es un directorio.
- `l`: Indica que el tipo de archivo es un enlace simbólico.
- `b`: Indica que el tipo de archivo es un dispositivo de bloque.
- `c`: Indica que el tipo de archivo es un dispositivo de caracteres.
- `s`: Indica que el tipo de archivo es un socket.
- `p`: Indica que el tipo de archivo es una tubería con nombre.

Los permisos de archivo se dividen en tres categorías: permisos del propietario, permisos del grupo y permisos de otros usuarios.
Representación numérica: rwx representa 111, r-x representa 101, r-- representa 100, y así sucesivamente.
rwxr-xr-- indica que el propietario del archivo tiene permisos de lectura, escritura y ejecución, el grupo tiene permisos de lectura y ejecución, y otros usuarios solo tienen permiso de lectura.
Representación simbólica: cada grupo de bits de permiso puede usar símbolos para representar, r representa permiso de lectura, w representa permiso de escritura, x representa permiso de ejecución.
u representa el propietario del archivo, g representa el grupo del usuario, o representa otros usuarios, a representa todos los usuarios.

Para usar símbolos para representar los permisos de archivo, podemos usar el siguiente formato:
[usuario|grupo|otro][+|-|=][rwx]
Donde usuario representa el propietario del archivo, grupo representa el grupo de usuarios, otro representa otros usuarios;
+ indica agregar permisos, - indica quitar permisos, = indica establecer permisos;
rwx representa permisos de lectura, escritura y ejecución.

Para establecer los permisos del propietario del archivo como lectura y ejecución, podemos usar el comando:
chmod u+rx nombre_archivo
La configuración de permisos de archivo se puede hacer con el comando `chmod`, por ejemplo:
chmod 777 nombre_archivo
Este comando establece los permisos del propietario, del grupo y de otros usuarios del archivo como lectura, escritura y ejecución.

Además de los permisos básicos de archivo, el sistema Linux también proporciona otras formas avanzadas de configurar permisos de archivo, por ejemplo:
1. Permiso SUID: Cuando un archivo tiene el permiso SUID, cualquier usuario puede ejecutarlo con la identidad del propietario del archivo.
Este permiso se usa generalmente para programas que necesitan permisos especiales para ejecutarse, como el comando passwd.
2. Permiso SGID: Cuando un archivo tiene el permiso SGID, cualquier usuario puede ejecutarlo con la identidad del grupo al que pertenece el archivo.
Este permiso se usa generalmente para la gestión de carpetas y archivos compartidos.
3. Permiso Sticky: Cuando un directorio tiene el permiso Sticky, solo el propietario del directorio y el propietario del archivo pueden eliminar los archivos dentro de él.
Este permiso se usa generalmente para directorios compartidos y carpetas temporales en computadoras públicas.

Estos permisos avanzados se pueden configurar con el comando chmod, por ejemplo:
chmod u+s nombre_archivo # Establecer permiso SUID
chmod g+s nombre_directorio # Establecer permiso SGID
chmod +t nombre_directorio # Establecer permiso Sticky

Además del comando chmod, también podemos usar los comandos chown y chgrp para cambiar el propietario y el grupo del archivo, por ejemplo:
chown usuario nombre_archivo # Establecer el propietario del archivo como usuario
chgrp grupo nombre_archivo # Establecer el grupo del archivo como grupo


getfacl/setfacl Permisos de Acceso a Archivos

getfacl [opciones] archivo o directorio
- -R: Ver información ACL de forma recursiva de todos los archivos y subdirectorios del directorio.
- -p: Salida de información ACL en formato reproducible.
- -s: Solo mostrar información ACL básica.

setfacl [opciones] regla_de_permisos archivo o directorio
- -R: Establecer información ACL de forma recursiva de todos los archivos y subdirectorios del directorio.
- -m: Modificar información ACL.
- -x: Eliminar información ACL.
- -d: Establecer información ACL predeterminada.


Gestión de Archivos

Los nombres de archivo deben ser en minúsculas
Los nombres de archivo deben separarse con "_"
Excepto el carácter "/", todos los demás son permitidos


ls Ver archivos y directorios

- ls = list show
- ls / # Todos los directorios del directorio raíz
- ls -l o ll # Mostrar información detallada
- ls -lh o ll -h# Mostrar información detallada y tamaño de archivo
- ls -a # Mostrar todos los archivos y directorios


mkdir Crear directorios

- mkdir prueba
- mkdir -p prueba/prueba1
- mkdir -m 777 prueba4


ln Enlaces

- -s: Crear enlaces simbólicos.
- -f: Forzar la creación de archivos de enlace, si el archivo ya existe, lo sobrescribe.
- -i: Preguntar interactivamente si se debe sobrescribir un archivo existente.
- -n: Al crear un enlace simbólico, si el archivo original es un directorio, crear un nuevo directorio como archivo de enlace.

ln -sf ./test.txt 123
ln ./test123.txt prueba


cd Cambiar directorio

change directory Cambiar el directorio actual
cd /usr/bin # Ir a /usr/bin
cd ~ # Ir a /home
cd ../../ # Ir dos niveles arriba del directorio actual


rm Eliminar archivos y directorios

- -i: Pedir confirmación antes de eliminar;
- -r: Eliminar directorios y sus subdirectorios de forma recursiva;
- -f: Eliminar forzosamente, sin pedir confirmación.

Eliminar archivo archivo1:
rm archivo1
Eliminar directorio dir1 y sus subdirectorios y archivos:
rm -r dir1
Eliminar todos los archivos que terminan con ".txt" en el directorio actual, sin pedir confirmación:
rm -f *.txt

Al eliminar archivos, se pueden usar comodines (como "*", "?" etc.) para coincidir con múltiples archivos, por ejemplo, eliminar todos los archivos que terminen con ".log":
rm *.log

Eliminar todos los archivos que terminen con ".bak", y respaldar automáticamente los archivos eliminados:
rm --backup=numbered *.bak

Eliminar todos los archivos de un tipo específico en un directorio y sus subdirectorios, se puede usar la combinación de los comandos "find" y "rm", por ejemplo, eliminar todos los archivos que terminen con ".log":
find dir1 -name "*.log" -type f -exec rm {} \;
"dir1" es el directorio donde se eliminarán, "-name" especifica el patrón del nombre de archivo, "-type f" especifica que se eliminarán archivos,
"-exec" ejecuta el comando "rm" y elimina los archivos que coincidan con los criterios.


kill/pkill Finalizar procesos

- -s señal: Especificar el tipo de señal a enviar, por ejemplo, kill -s SIGTERM PID envía la señal SIGTERM para terminar el proceso.
- -l: Listar todos los tipos de señal disponibles.
- -n num_señal: Especificar el número de identificación de la señal.
- -f: Forzar la terminación del proceso, sin enviar señales al proceso.
Generalmente, el proceso para terminar un proceso usando el comando kill es el siguiente:
1. Usar el comando ps o top para ver el PID del proceso.
2. Usar el comando kill para enviar una señal y terminar el proceso.

kill 12345
kill -9 12345
pkill -9 nginx


wc Contar

word count
- -c: Calcular el número de bytes en el archivo;
- -w: Calcular el número de palabras en el archivo;
- -l: Calcular el número de líneas en el archivo;
- -m: Calcular el número de caracteres en el archivo (sin incluir caracteres de nueva línea);
- -L: Calcular la longitud de la línea más larga en el archivo;

wc ejemplo.txt
Calcular el número de líneas, bytes y palabras en un archivo llamado "ejemplo.txt"

wc -l ejemplo.txt
Solo mostrar el número de líneas en el archivo.

cat ejemplo.txt | wc
Calcular el número de líneas, bytes y palabras en un archivo llamado "ejemplo.txt"

grep -v "^$" archivo.txt | wc -l
Usar el comando grep para filtrar las líneas vacías antes de contar

count=$(wc -l archivo.txt | awk '{print $1}')
En scripts de Shell, guardar la salida del comando wc en una variable
Usar el comando wc para contar el número de líneas en un archivo, usar el comando awk para extraer el primer campo (es decir, el número de líneas), y finalmente guardar el resultado en la variable count.


find Buscar archivos y directorios

- -name PATRÓN: Coincidir por nombre de archivo, PATRÓN es un comodín para el nombre de archivo, se pueden usar *, ? etc.;
- -type TIPO: Coincidir por tipo, TIPO es f para archivo, d para directorio, l para enlace simbólico etc.;
- -size [+-]TAMAÑO: Coincidir por tamaño de archivo, TAMAÑO es el tamaño del archivo, se pueden usar unidades como k, M etc., + significa mayor que TAMAÑO, - significa menor que TAMAÑO;
- -mtime [+]DÍAS: Coincidir por tiempo de modificación del archivo, DÍAS es el número de días, + significa modificado hace más de DÍAS días, - significa modificado en los últimos DÍAS días;
- -maxprofundidad N: Establecer la profundidad de búsqueda del directorio, solo buscar en N niveles de directorio;
- -minprofundidad N: Establecer la profundidad de búsqueda del directorio, comenzar a buscar desde el nivel N de directorio.
- -print: Imprimir los nombres de archivo coincidentes en la salida estándar;
- -delete: Eliminar archivos o directorios coincidentes;
- -exec comando {} \;: Ejecutar un comando específico en archivos o directorios coincidentes, {} representa el nombre de archivo o directorio coincidente.

Buscar todos los archivos con extensión txt en el directorio actual y sus subdirectorios:
find . -name "*.txt" -print

Buscar todos los archivos mayores de 1MB en el directorio actual y sus subdirectorios, y eliminarlos:
find . -type f -size +1M -delete

Buscar todos los archivos modificados hace más de 7 días en el directorio actual y sus subdirectorios, y moverlos a otro directorio, se puede usar el siguiente comando:
find . -type f -mtime +7 -exec mv {} /ruta/a/destino \;

Buscar todos los archivos txt que comienzan con un número en el directorio actual y sus subdirectorios, se puede usar una expresión regular para coincidir con el nombre:
find . -regex './[0-9]+.*\.txt' -print

Buscar todos los archivos mayores de 1MB y modificados hace más de 7 días en el directorio actual y sus subdirectorios:
find . -type f -size +1M -mtime +7 -print

Buscar todos los archivos o directorios en cuyas rutas contenga "logs" en el directorio actual y sus subdirectorios, se puede usar un comodín para coincidir con la ruta del archivo:
find . -path '*logs*' -print



du Ver detalles del tamaño de archvios

- -h: Mostrar el tamaño del archivo de forma legible, por ejemplo "1K", "2M" etc.;
- -s: Solo mostrar el tamaño total, no mostrar el tamaño de cada subdirectorio o archivo;
- -c: Mostrar el tamaño total debajo del tamaño de cada subdirectorio o archivo;
- -a: Mostrar el tamaño de todos los archivos y directorios, incluyendo archivos y directorios ocultos;
- -L: Calcular el tamaño de los archivos o directorios a los que apuntan los enlaces simbólicos, en lugar de calcular el tamaño del enlace simbólico en sí;
- --exclude=PATRÓN: Excluir archivos o directorios que coincidan con un patrón específico;
- --max-depth=N: Establecer la profundidad del directorio, solo calcular el tamaño de N niveles de subdirectorios.

du -sh *


grep Buscar archivos, directorios, campos en archivos

- -i: Ignorar mayúsculas y minúsculas;
- -v: Mostrar líneas que no contienen la cadena coincidente;
- -n: Mostrar números de línea;
- -c: Mostrar el número de líneas que contienen la cadena coincidente;
- -r: Buscar de forma recursiva en el directorio especificado y sus subdirectorios.

Supongamos que tenemos un archivo de texto llamado test.txt con el siguiente contenido:
hola mundo
este es un archivo de prueba
hola grep
el comando grep es útil

Buscar líneas que contengan la cadena grep
grep grep test.txt

Este comando mostrará el siguiente resultado:
hola grep
el comando grep es útil

Buscar líneas que contengan las cadenas hola o mundo
grep 'hola\|mundo' test.txt

Este comando mostrará el siguiente resultado:
hola mundo
hola grep

Buscar todas las líneas que contengan la cadena hola, y mostrar los números de línea
grep -n hola test.txt

Este comando mostrará el siguiente resultado:
1:hola mundo
3:hola grep

Buscar de forma recursiva en el directorio actual y sus subdirectorios todas las líneas que contengan la cadena hola en archivos txt, y mostrar nombres de archivo y números de línea
grep -r -n hola *.txt

Este comando mostrará todas las líneas que contengan la cadena hola, con el nombre de archivo y número de línea antes de cada línea, por ejemplo:
test.txt:1:hola mundo
test.txt:3:hola grep
subdir/test2.txt:2:hola allí


wget Descargar

- -O: Especificar la ruta y nombre de archivo para guardar el archivo descargado, como -O /ruta/a/archivo especifica descargar el archivo a /ruta/a/archivo;
- -c: Soportar reanudación de descargas, si la descarga se interrumpe, se puede usar la opción -c para continuar la descarga;
- -r: Descargar de forma recursiva un directorio completo, se puede usar la opción -r para especificar la profundidad de descarga;
- -np: No descargar el directorio padre, si se necesita limitar la profundidad al descargar un directorio, se puede usar la opción -np;
- -P: Especificar el directorio para guardar los archivos descargados, como -P /ruta/a/directorio especifica descargar los archivos al directorio /ruta/a/directorio;
- -T: Establecer el tiempo de espera de descarga, en segundos, como -T 60 significa que la descarga se agota después de 60 segundos;
- -q: Modo silencioso, no mostrar información de progreso de descarga, solo mostrar mensajes de error;
- -U: Establecer el encabezado User-Agent, se puede disfrazar de navegador u otra herramienta para descargar.

Por ejemplo, descargar un archivo:
wget https://ejemplo.com/archivo.zip

Descargar un directorio completo:
wget -r -np https://ejemplo.com/directorio/

Donde, la opción -r significa descarga recursiva, la opción -np significa no descargar el directorio padre, y https://ejemplo.com/directorio/ es la URL del directorio a descargar.


curl Acceso HTTP

- -o: Especificar la ruta y nombre de archivo para guardar el archivo descargado, como -o /ruta/a/archivo especifica descargar el archivo a /ruta/a/archivo;
- -O: Guardar el archivo descargado en el directorio actual, con el mismo nombre que la última parte de la URL;
- -C: Soportar reanudación de descargas, si la descarga se interrumpe, se puede usar la opción -C para continuar la descarga;
- -I: Solo mostrar información de encabezado de respuesta HTTP, no descargar el archivo;
- -H: Establecer encabezados de solicitud HTTP, como -H "Content-Type: application/json" significa establecer el encabezado Content-Type;
- -d: Enviar datos de solicitud POST, como -d "clave=valor" significa enviar clave=valor como datos POST;
- -u: Establecer información de autenticación HTTP, como -u usuario:contraseña significa usar autenticación Basic;
- -k: Omitir verificación de certificado SSL, se puede usar la opción -k en solicitudes HTTPS;
- -s: Modo silencioso, no mostrar información de solicitud y respuesta, solo mostrar mensajes de error.

Por ejemplo, descargar un archivo:
curl -o archivo.zip https://ejemplo.com/archivo.zip

Descargar un directorio completo:
curl -O -J -L -R -r 0-9 https://ejemplo.com/directorio/*

Donde, la opción -O significa guardar el archivo descargado en el directorio actual, la opción -J significa guardar el archivo con el mismo nombre que la última parte de la URL,
la opción -L significa seguir redirecciones, la opción -R significa soportar marca de tiempo remota, y la opción -r significa soportar reanudación de descargas.


tar Comprimir archivos

- c: Crear un nuevo archivo de archivo;
- r: Agregar archivos al archivo de archivo;
- u: Actualizar archivos en el archivo de archivo;
- x: Extraer archivos del archivo de archivo;
- t: Listar archivos en el archivo de archivo;
- v: Progreso de archivo
- z: Usar compresión gzip para el archivo de archivo;
- j: Usar compresión bzip2 para el archivo de archivo;
- f: Especificar el nombre del archivo de archivo.

1. Crear archivo de archivo
tar -cf archivo.tar archivo1 archivo2 dir1
Empaquetar los archivos archivo1, archivo2 y el directorio dir1 en el archivo de archivo archivo.tar.

2. Extraer archivo de archivo
tar -xf archivo.tar
Extraer todos los archivos y directorios del archivo de archivo archivo.tar en el directorio actual.

3. Listar archivos en el archivo de archivo
tar -tf archivo.tar
Listará todos los archivos y directorios en el archivo de archivo archivo.tar.

4. Agregar archivos al archivo de archivo
tar -rf archivo.tar archivo3
Agrega el archivo archivo3 al archivo de archivo archivo.tar.

5. Actualizar archivos en el archivo de archivo
tar -uf archivo.tar archivo1
Actualiza el archivo archivo1 en el archivo de archivo archivo.tar, si el archivo no existe en el archivo, lo agrega.

6. Usar compresión gzip o bzip2 para el archivo de archivo
tar -czf archivo.tar.gz archivo1 archivo2 dir1
tar -cjf archivo.tar.bz2 archivo1 archivo2 dir1
Usará compresión gzip o bzip2 para el archivo de archivo, y empaquetará los archivos archivo1, archivo2 y el directorio dir1 en el archivo.

1. Excluir archivos o directorios
tar -cf archivo.tar --exclude=dir1 archivo1 archivo2 dir1
Excluirá el directorio dir1, y empaquetará los archivos archivo1, archivo2 y el directorio dir1 en el archivo de archivo archivo.tar.
2. Especificar nombre y ruta del archivo de archivo
tar -cf /tmp/archivo.tar /home/usuario1
Empaquetará el directorio /home/usuario1 en el archivo de archivo /tmp/archivo.tar.
3. Especificar nombre de archivo de archivo y formato de compresión
tar -czf archivo.tar.gz archivo1 archivo2 dir1
Usará compresión gzip para el archivo de archivo, y empaquetará los archivos archivo1, archivo2 y el directorio dir1 en el archivo.
4. Descargar y extraer archivo de archivo desde la red
curl https://ejemplo.com/archivo.tar.gz | tar -xz
Descargará el archivo de archivo desde la URL https://ejemplo.com/archivo.tar.gz y lo extraerá en el directorio actual.
5. Transferir archivo de archivo a un host remoto
tar -czf - archivo1 archivo2 dir1 | ssh usuario@host_remoto "cat > /tmp/archivo.tar.gz"
Empaquetará, comprimirá los archivos y directorios, y transferirá el archivo de archivo a través de ssh al host remoto, guardándolo en el archivo /tmp/archivo.tar.gz.


lsblk

- -a: Mostrar todos los dispositivos de bloque, incluyendo los no montados.
- -p: Mostrar la ruta completa de los dispositivos de bloque.
- -f: Mostrar el tipo de sistema de archivos de los dispositivos de bloque.
- -m: Usar formato de salida simplificado.
- -o: Especificar las columnas a mostrar, como NAME, MAJ:MIN, SIZE, FSTYPE etc.
- -t: Mostrar la estructura en árbol de los dispositivos de bloque.
- -u: Mostrar la unidad de capacidad de los dispositivos de bloque, como bytes, kilobytes, megabytes etc.


sync/rsync

sync [opción]
- -f: Prohibir el uso de escritura asíncrona en disco.
- -n: Ejecutar operación de sincronización, pero no escribir datos de caché en disco.
- -q: Prohibir mostrar el resultado de la operación de sincronización.

rsync [opción] archivo_fuente archivo_destino
- -a: Usar modo de archivo para sincronizar archivos, incluyendo atributos como permisos, tiempo, propietario etc.
- -r: Sincronizar directorios y sus subdirectorios de forma recursiva.
- -v: Mostrar información detallada durante el proceso de sincronización.
- -z: Usar algoritmo de compresión para la transmisión, puede ahorrar ancho de banda.
- -n: Ejecutar operación de sincronización simulada, sin ejecutar la sincronización real.
- --delete: Eliminar archivos en el directorio de destino que no existen en el directorio de origen.

Sincronizar el directorio local /dir1 con el directorio /dir2 en un host remoto, se puede usar el siguiente comando
rsync -avz /dir1/ usuario@host_remoto:/dir2/


rpm Gestionar paquetes

- -i: Instalar un nuevo paquete de software.
- -U: Actualizar un paquete de software existente.
- -e: Desinstalar un paquete de software.
- -q: Consultar información de paquetes instalados.
- -V: Verificar si los paquetes instalados son completos y correctos.
- -h: Mostrar información de ayuda del comando rpm.
- -a: Indica consultar todos los paquetes instalados
- --nodeps: Ignorar las dependencias entre paquetes.
- --test: Simular el proceso de instalación o actualización del paquete para comprobar si hay problemas.
- --force: Forzar la ejecución de la instalación, actualización o desinstalación del paquete.
La salida del comando rpm incluye los siguientes contenidos:
- Nombre y versión del paquete.
- Ruta de instalación y lista de archivos del paquete.
- Dependencias y conflictos del paquete.
- Estado de instalación e información del paquete.

rpm -qa | grep xxx # Consultar paquete
rpm -e --nodeps xxx # Desinstalar
rpm -ivh xxx # Instalar
rpm -qf # Consultar qué paquete
rpm -ql # Qué archivos genera después de la instalación


diff Comparar diferencias entre archivos

- -q: Solo mostrar si los archivos tienen diferencias, no mostrar el contenido específico de las diferencias.
- -r: Comparar recursivamente todos los archivos en los directorios.
- -u: Mostrar diferencias en formato Unificado, puede mostrar información de diferencias más detallada.
- -c: Mostrar diferencias en formato Context, similar al formato Unificado, pero muestra más información de contexto.
- -i: Ignorar mayúsculas y minúsculas al comparar.
- -w: Ignorar diferencias de espacios en blanco y tabulaciones.

diff archivo1 archivo2


scp

Secure Copy
Herramienta de transferencia de archivos segura basada en el protocolo SSH, utilizada para transferir archivos entre diferentes computadoras.
- -r: Copiar directorios de forma recursiva.
- -P: Especificar el puerto SSH.
- -p: Conservar atributos de archivo como permisos, marcas de tiempo etc.
- -C: Habilitar compresión de datos.
- -v: Mostrar información detallada de la transferencia.
- -q: Modo silencioso, no mostrar información de transferencia.
- -i: Especificar archivo de clave privada.
- -l: Limitar el ancho de banda de transferencia.
- -B: Ejecutar el comando scp en segundo plano.


xargs Pasar parámetros

- -n: Especificar el número de parámetros pasados al comando cada vez, por defecto es todos los parámetros.
- -I: Especificar cadena de reemplazo, xargs reemplazará la cadena de reemplazo con los parámetros leídos de la entrada estándar.
- -t: Mostrar la línea de comandos ejecutada por el comando.
- -p: Pedir confirmación al usuario antes de ejecutar el comando.
- -r: Cuando no se leen parámetros de la entrada estándar, no ejecutar el comando.
- -s: Especificar el límite superior del tamaño total de parámetros leídos de la entrada estándar.


Gestión de Usuarios

Grupos de Usuarios

Almacenados en /etc/group

groupadd
-g Especificar ID del nuevo grupo

groupmod
-g Establecer el código de identificación del grupo a usar.
-n Establecer el nombre del grupo a usar.

1. Ver información de grupos de usuarios
Antes de realizar operaciones de adición de grupos de usuarios, necesitamos conocer los grupos de usuarios ya existentes en el sistema. Podemos usar el siguiente comando para ver los grupos de usuarios existentes:
cat /etc/group

2. Crear grupo de usuarios
Si necesitamos crear un nuevo grupo de usuarios, podemos usar el siguiente comando:
sudo groupadd <nombre_grupo>

3. Verificar la operación de adición de grupo de usuarios
Después de agregar usuarios a un grupo, podemos usar el siguiente comando para verificar si la operación fue exitosa:
groups <nombre_usuario>

4. Modificar información de grupo de usuarios
Si necesitamos modificar la información de un grupo de usuarios existente, podemos usar el siguiente comando:
sudo groupmod <nombre_grupo>

5. Eliminar grupo de usuarios
Si necesitamos eliminar un grupo de usuario existente, podemos usar el siguiente comando:
sudo groupdel <nombre_grupo>


Usuarios

useradd [OPCIONES] NOMBRE_USUARIO

Donde, OPCIONES son parámetros opcionales para establecer las propiedades y características del nuevo usuario, y NOMBRE_USUARIO es el nombre del nuevo usuario. A continuación se muestran algunas OPCIONES comunes:
- -c COMENTARIO: Establecer información de comentario del usuario.
- -d DIRECTORIO_HOME: Establecer la ruta del directorio principal del usuario.
- -e FECHA_EXPIRACIÓN: Establecer la fecha de vencimiento de la cuenta del usuario.
- -f DÍAS_INACTIVOS: Establecer el tiempo de inactividad antes de que la cuenta se desactive.
- -g GRUPO_PRINCIPAL: Establecer el nombre o GID del grupo principal del usuario.
- -G GRUPOS_SECUNDARIOS: Establecer nombres o GID de grupos secundarios del usuario.
- -m: Crear automáticamente el directorio principal del usuario.
- -s SHELL: Establecer el programa Shell predeterminado del usuario.
	/bin/bash => Para uso humano
	/sbin/nologin => Para uso de software
- -u UID: Establecer el UID del usuario.
- -p CONTRASEÑA: Establecer la contraseña del usuario, debe ser una contraseña encriptada.
- -r: Crear cuenta de sistema, el UID y GID de esta cuenta son mayores o iguales a 500.
- -Z: Establecer el contexto de seguridad SELinux del usuario.

Para ver los valores predeterminados del sistema, podemos usar los siguientes comandos:
grep UID_MIN /etc/login.defs
grep UID_MAX /etc/login.defs
grep GID_MIN /etc/login.defs
grep GID_MAX /etc/login.defs


1. Abrir la terminal e iniciar sesión como usuario root.

2. Use el siguiente comando para crear un nuevo usuario:
sudo adduser <nombre_usuario>

3. Si necesita establecer una contraseña para el nuevo usuario, puede usar el siguiente comando:
sudo passwd <nombre_usuario>

4. Si necesita agregar el nuevo usuario a un grupo específico, puede usar el siguiente comando:
sudo usermod -aG <nombre_grupo> <nombre_usuario>

5. Verifique si la adición del nuevo usuario fue exitosa, use el siguiente comando para ver los usuarios existentes en el sistema:
cat /etc/passwd

6. Salir de la sesión de usuario root.
exit


/etc/passwd

root:x:0:0:root:/root:/bin/bash

- root: Nombre de usuario.
- x: Método de encriptación de contraseña, x indica que la contraseña está encriptada y almacenada en el archivo /etc/shadow.
- 0: Valor UID, que es el identificador único del usuario.
- 0: Valor GID, que es el identificador del grupo principal al que pertenece el usuario.
- root: Información de comentario, generalmente incluye el nombre, número de teléfono, correo electrónico etc. del usuario. useradd -c "información" nombre_usuario
- /root: Ruta del directorio principal, indica la ubicación del directorio principal del usuario. Por defecto en /home
- /bin/bash: Programa Shell predeterminado, indica el programa Shell que se usará por defecto cuando el usuario inicie sesión.
	/bin/bash => Para uso humano
	/sbin/nologin => Para uso de software


Servicios del Sistema

1. Iniciar servicio
systemctl start nombre_servicio
Por ejemplo, iniciar el servicio Apache:
systemctl start httpd.service

2. Detener servicio
systemctl stop nombre_servicio
Por ejemplo, detener el servicio Apache:
systemctl stop httpd.service

3. Reiniciar servicio
systemctl restart nombre_servicio
Por ejemplo, reiniciar el servicio Apache:
systemctl restart httpd.service

4. Ver estado del servicio
systemctl status nombre_servicio
Por ejemplo, ver el estado del servicio Apache:
systemctl status httpd.service

5. Activar servicio
systemctl enable nombre_servicio
Por ejemplo, activar el servicio Apache:
systemctl enable httpd.service

6. Desactivar servicio
systemctl disable nombre_servicio
Por ejemplo, desactivar el servicio Apache:
systemctl disable httpd.service


service/chkconfig

service nombre_servicio start|stop|restart|status
- start: Iniciar el servicio.
- stop: Detener el servicio.
- restart: Reiniciar el servicio.
- status: Ver el estado del servicio.

chkconfig --level nivel_ejecución nombre_servicio on|off|reset
- on: Establecer que el servicio se inicie automáticamente en el nivel de ejecución especificado.
- off: Desactivar el inicio automático del servicio en el nivel de ejecución especificado.
- reset: Restablecer el estado de inicio automático del servicio en el nivel de ejecución especificado.


systemctl(systemd)

- Iniciar servicio: systemctl start nombre_servicio
- Detener servicio: systemctl stop nombre_servicio
- Reiniciar servicio: systemctl restart nombre_servicio
- Ver estado del servicio: systemctl status nombre_servicio
- Establecer inicio automático del servicio: systemctl enable nombre_servicio
- Cancelar inicio automático del servicio: systemctl disable nombre_servicio
- Ver registros del servicio: systemctl status -n 50 nombre_servicio (mostrar las últimas 50 líneas de registro)
- Ver archivo de configuración del servicio: systemctl cat nombre_servicio
- Ver dependencias del servicio: systemctl list-dependencies nombre_servicio
- Ver todos los servicios iniciados: systemctl list-units --type=service


sshd Servicio SSH

- /etc/ssh/sshd_config: Archivo de configuración principal del servicio sshd, contiene varios parámetros y opciones del servicio sshd.
- Port: Puerto que escucha el servicio sshd, por defecto es 22.
- PermitRootLogin: Permite o no el inicio de sesión del usuario root a través de ssh, por defecto es yes.
- PasswordAuthentication: Permite o no el inicio de sesión usando contraseña a través de ssh, por defecto es yes.
- PubkeyAuthentication: Permite o no el inicio de sesión usando clave pública a través de ssh, por defecto es yes.
- UsePAM: Habilita o no la autenticación PAM (Pluggable Authentication Modules), por defecto es yes.
- AllowUsers: Permite qué usuarios iniciar sesión a través de ssh.
- AllowGroups: Permite qué miembros de grupos de usuarios iniciar sesión a través de ssh.
- DenyUsers: Prohíbe qué usuarios iniciar sesión a través de ssh.
- DenyGroups: Prohíbe qué miembros de grupos de usuarios iniciar sesión a través de ssh.
- LogLevel: Nivel de registro del servicio sshd, por defecto es INFO.
- /var/log/auth.log: Archivo de registro del servicio sshd, registra varias operaciones y eventos del servicio sshd.


ntp Sincronización de tiempo

ntp.org.cn

ntpdate dominio


crontab Programación de tareas

crontab [-u nombre_usuario] [-l|-e|-r] [nombre_archivo]
- -u: Especificar el usuario al que se le va a operar.
- -l: Listar las tareas cron del usuario especificado.
- -e: Editar las tareas cron del usuario especificado.
- -r: Eliminar las tareas cron del usuario especificado.

- @reboot: Ejecutar la tarea al iniciar el sistema.
- @yearly, @annually: Ejecutar la tarea una vez al año.
- @monthly: Ejecutar la tarea una vez al mes.
- @weekly: Ejecutar la tarea una vez a la semana.
- @daily, @midnight: Ejecutar la tarea una vez al día.
- @hourly: Ejecutar la tarea cada hora.

/etc/crontab.deny # Lista negra
/etc/crontab.allow # Lista blanca
/var/spool/cron/nombre_usuario # Ruta de almacenamiento de tareas
/var/log/cron # Registro

Minuto Hora Día Mes Día_semana Comando (ruta absoluta)
* * * * * /usr/bin/......
30 4 1 * * /usr/bin/systemctl restart red


at Tarea única

$ at 15:30
at> /usr/bin/comando
at> ^D

- -f: Especificar el archivo de script a ejecutar.
- -l: Listar todas las tareas pendientes del usuario actual.
- -d: Eliminar la tarea especificada.
- -c: Mostrar información detallada de la tarea especificada.


Ajuste de Prioridad de Procesos

1.top
top -r pid

2.renice
renice -5 pid

3.nice
kill pid
systemctl stop comando
nice -n -5 comando


Archivos de Registro

journalctl(Systemd, puede ver registros del kernel)

Ver todos los registros (por defecto, solo se guardan los registros del arranque actual)
sudo journalctl
Ver registros del kernel (no muestra registros de aplicaciones)
sudo journalctl -k
Ver registros del sistema de este arranque
sudo journalctl -b

Ver registros en un tiempo específico
sudo journalctl --since "30 min atrás"
sudo journalctl --since ayer
sudo journalctl --since "2022-01-10" --until "2022-01-11 03:00"
Mostrar las últimas 10 líneas de registro
sudo journalctl -n
Mostrar en tiempo real los registros más recientes
sudo journalctl -f
Ver registros de un servicio específico
sudo journalctl /usr/lib/systemd/systemd
Ver registros de un proceso específico
sudo journalctl _PID=1
Ver registros de un script en una ruta específica
sudo journalctl /usr/bin/bash
Ver registros de una Unidad específica
sudo journalctl -u nginx.service
Mostrar en tiempo real los registros más recientes de una Unidad
sudo journalctl -u nginx.service -f
Ver registros de prioridad específica (y superior), hay 8 niveles en total
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug
sudo journalctl -p err -b
Los registros se muestran paginados por defecto, --no-pager cambia a salida estándar normal
sudo journalctl --no-pager
Salida en formato JSON (múltiples líneas), mejor legibilidad
sudo journalctl -b -u nginx.service -o json-pretty
Mostrar el espacio en disco ocupado por los registros
sudo journalctl --disk-usage
Especificar el espacio máximo que ocupan los archivos de registro
sudo journalctl --vacuum-size=1G
Especificar cuánto tiempo se conservan los archivos de registro
sudo journalctl --vacuum-time=2years


Monitoreo

Ver CPU

1. `lscpu`: Este comando puede listar información detallada de la CPU, incluyendo modelo, arquitectura, número de núcleos, número de hilos, tamaño de caché etc. Por ejemplo:
$ lscpu
2. `cat /proc/cpuinfo`: Este comando puede listar información detallada de la CPU, incluyendo modelo, tamaño de caché, frecuencia de reloj etc. Por ejemplo:
$ cat /proc/cpuinfo
3. `top`: Este comando puede monitorear en tiempo real el uso de la CPU del sistema.
En la línea de comandos, ingrese top, luego presione Shift+P para ordenar los procesos por uso de CPU de mayor a menor, y mostrar el tiempo de CPU y el porcentaje de uso de CPU de cada proceso.

$ top
top - 10:51:06 up 1 day,  2:11,  1 user,  load average: 0.23, 0.22, 0.25
Tasks: 210



ps Búsqueda estática de procesos

1. Uso básico: En la línea de comandos, ingrese ps para listar todos los procesos del usuario actual. Por ejemplo:
$ ps
  PID TTY          TIME CMD
  153 pts/0    00:00:00 bash
  1074 pts/0    00:00:00 ps
Donde, PID indica el ID del proceso, TTY indica el dispositivo terminal donde está el proceso, TIME indica el tiempo que el proceso ha estado ejecutándose, y CMD indica el nombre del comando del proceso.

2. Opción -a: Esta opción se usa para mostrar todos los procesos de todos los usuarios. Por ejemplo:
$ ps -a
  PID TTY          TIME CMD
  153 pts/0    00:00:00 bash
  1075 pts/0    00:00:00 ps

3. Opción -u: Esta opción se usa para mostrar información detallada de los procesos, incluyendo el usuario al que pertenece, porcentaje de uso de CPU, porcentaje de uso de memoria etc. Por ejemplo:
$ ps -u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu     153  0.0  0.1  13972  3564 pts/0    Ss   10:52   0:00 bash
ubuntu    1085  0.0  0.0  17464  2496 pts/0    R+   10:58   0:00 ps -u

4. Opción -f: Esta opción se usa para mostrar información completa del proceso, incluyendo PPID (ID del proceso padre), estado del proceso, hora de inicio etc. Por ejemplo:
$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
ubuntu     153   151  0 10:52 pts/0    00:00:00 bash
ubuntu    1094   153  0 11:00 pts/0    00:00:00 ps -f

5. Opción -e: Esta opción se usa para mostrar todos los procesos, no solo los del usuario actual. Por ejemplo:
$ ps -e

6. Opción -l: Esta opción se usa para mostrar información de formato largo del proceso, incluyendo UID, PID, PPID, porcentaje de uso de CPU, porcentaje de uso de memoria, hora de inicio etc. Por ejemplo:
$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  1291  1243  0  80   0 -  2839 wait   tty2     00:00:00 bash
0 R  1000  1557  1291  0  80   0 -  3088 -      tty2     00:00:00 ps
Donde, F indica los bits de bandera del proceso, S indica el estado del proceso,
UID indica el ID del usuario al que pertenece el proceso, PID indica el ID del proceso, PPID indica el ID del proceso padre,
C indica el porcentaje de uso de CPU, PRI indica la prioridad del proceso, NI indica el valor numérico de la prioridad,
ADDR indica la dirección del proceso en la memoria, SZ indica el tamaño de memoria ocupada por el proceso,
WCHAN indica el evento en el que el proceso está esperando, TTY indica el dispositivo terminal donde está el proceso,
TIME indica el tiempo que el proceso ha estado ejecutándose, y CMD indica el nombre del comando del proceso.

7. Opción -x: Esta opción se usa para mostrar todos los procesos, no solo los relacionados con el dispositivo terminal actual. Por ejemplo:
$ ps -x
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:02 /sbin/init splash
    2 ?        S      0:00 [kthreadd]
    3 ?        I<     0:00 [rcu_gp]
    4 ?        I<     0:00 [rcu_par_gp]
    6 ?        I<     0:00 [kworker/0:0H-kblockd]
    8 ?        I<     0:00 [mm_percpu_wq]
   ...

8. Opción -C: Esta opción se usa para ordenar por nombre de comando y mostrar información detallada de los procesos. Por ejemplo:
$ ps -C sshd -f
UID        PID  PPID  C STIME TTY          TIME CMD
root       902     1  0 10:50 ?        00:00:00 /usr/sbin/sshd -D
Donde, el parámetro después de la opción -C es el nombre del comando, y -f indica mostrar información detallada del proceso.

9. Opción -H: Esta opción se usa para mostrar el árbol de procesos. Por ejemplo:
$ ps -H
  PID TTY          TIME CMD
  153 pts/0    00:00:00 bash
  164 pts/0    00:00:00   less
  168 pts/0    00:00:00     sh
  169 pts/0    00:00:00       ps
Donde, PID indica el ID del proceso, TTY indica el dispositivo terminal donde está el proceso, TIME indica el tiempo que el proceso ha estado ejecutándose, y CMD indica el nombre del comando del proceso.
La estructura del árbol de procesos se indica por la sangría. Por ejemplo, el proceso 164 es un subproceso del proceso 153, el proceso 168 es un subproceso del proceso 164, y el proceso 169 es un subproceso del proceso 168.

ps -df | grep prueba
ps -aux
ps -u prueba


top Búsqueda dinámica de procesos

Los significados de los datos en la interfaz interactiva son los siguientes:
- PID: ID del proceso;
- USER: Usuario al que pertenece el proceso;
- PR: Prioridad del proceso;
- NI: Valor nice del proceso;
- VIRT: Tamaño de memoria virtual utilizada por el proceso;
- RES: Tamaño de memoria física utilizada por el proceso;
- SHR: Tamaño de memoria compartida por el proceso;
- S: Estado del proceso, como R indica en ejecución, S indica sueño, Z indica zombie, D indica interrupción no permitida etc.;
- %CPU: Porcentaje de uso de CPU por el proceso;
- %MEM: Porcentaje de uso de memoria por el proceso;
- TIME+: Tiempo acumulado de CPU del proceso;
- COMMAND: Comando ejecutado por el proceso.

- -d: Especificar el intervalo de tiempo de actualización, es decir, cuánto tiempo se actualiza la información del proceso, en segundos, el valor predeterminado es 3 segundos;
- -p: Especificar el ID del proceso a monitorear;
- -u: Especificar el usuario a monitorear;
- -H: Mostrar información del proceso en forma de hilos;
- -s: Especificar por qué atributo del proceso ordenar, como -s %CPU indica ordenar por uso de CPU;
- -b: Ejecutar el comando top en modo por lotes, enviar el resultado a un archivo.


vmstat Memoria, swap


procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 842252  15920  81692    0    0    25    36   78  109  6  1 93  0  0

"procs" indica la situación de los procesos, "r" indica el número de procesos en ejecución, "b" indica el número de procesos en estado de espera;
"memory" indica la situación de la memoria, "swpd" indica el uso de memoria virtual, "free" indica el tamaño de memoria libre, "buff" indica el tamaño de memoria usada como búfer, "cache" indica el tamaño de memoria usada como caché;
"swap" indica la situación del espacio de intercambio, "si" indica la velocidad de lectura desde el disco al espacio de intercambio, "so" indica la velocidad de escritura desde el espacio de intercambio al disco;
"io" indica la E/S del disco, "bi" indica la velocidad de lectura desde dispositivos de bloque, "bo" indica la velocidad de escritura a dispositivos de bloque;
"system" indica las llamadas al sistema, "in" indica el número de interrupciones por segundo, "cs" indica el número de cambios de contexto por segundo;
"cpu" indica la situación de la CPU, "us" indica el porcentaje de tiempo de uso de la CPU por procesos de usuario, "sy" indica el porcentaje de tiempo de uso de la CPU por procesos del kernel, "id" indica el porcentaje de tiempo de inactividad de la CPU, "wa" indica el porcentaje de tiempo de espera de E/I de la CPU, "st" indica el porcentaje de tiempo en que la CPU fue despojada por una máquina virtual.

- -a: Mostrar toda la información;
- -d: Mostrar información de E/S del disco;
- -m: Mostrar información de uso de memoria;
- -s: Especificar el intervalo de tiempo, en segundos, el valor predeterminado es 2 segundos;
- -n: Especificar el número de salidas;
- -V: Mostrar información de versión del comando vmstat.

Por ejemplo, ejecutar el comando vmstat:
vmstat 1 10


mpstat Monitoreo de CPU

En los resultados de salida del comando mpstat, la primera línea indica el promedio, y las líneas siguientes indican la información estadística de cada CPU. El formato de salida del comando mpstat es el siguiente:
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)  06/22/2017  _x86_64_ (2 CPU)
12:31:12 PM  CPU   %user   %nice    %sys %iowait   %irq  %soft  %steal  %guest  %gnice   %idle
12:31:12 PM  all    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.99
12:31:12 PM    0    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.99
12:31:12 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

"CPU" indica el número de CPU;
"%user" indica el porcentaje de tiempo de uso de la CPU por procesos de usuario, "%nice" indica el porcentaje de tiempo de uso de la CPU por procesos de usuario con mayor prioridad,
"%sys" indica el porcentaje de tiempo de uso de la CPU por procesos del kernel, "%iowait" indica el porcentaje de tiempo de espera de E/I de la CPU,
"%irq" indica el porcentaje de tiempo de uso de la CPU por programas de manejo de interrupciones, "%soft" indica el porcentaje de tiempo de uso de la CPU por programas de manejo de interrupciones suaves,
"%steal" indica el porcentaje de tiempo en que la CPU fue despojada por una máquina virtual, "%guest" indica el porcentaje de tiempo de uso de la CPU por una máquina virtual,
"%gnice" indica el porcentaje de tiempo de uso de la CPU por procesos de alta prioridad en una máquina virtual, "%idle" indica el porcentaje de tiempo de inactividad de la CPU. (*Importante)

- -A: Mostrar toda la información;
- -P: Especificar las CPU o grupos de CPU a monitorear, se puede usar el número o nombre de la CPU o grupo de CPU;
- -u: Mostrar información de uso de CPU;
- -I: Especificar el tipo de interrupción a monitorear, puede ser "SUM", "CPU", "DEVICE" etc.;
- -h: Mostrar información de ayuda.

Por ejemplo, ejecutar el comando mpstat:
mpstat 1 10


iostat Lectura y escritura del disco

En los resultados de salida del comando iostat, la primera línea indica el promedio, y las líneas siguientes indican la información estadística de cada disco. El formato de salida del comando iostat es el siguiente:

Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)  06/22/2017  _x86_64_ (2 CPU)
12:31:12 PM  CPU  %user %nice %system %iowait %steal %idle
12:31:12 PM  all  0.02  0.00   0.01   0.00   0.00  99.97
12:31:12 PM    0  0.01  0.00   0.01   0.00   0.00  99.98
12:31:12 PM    1  0.03  0.00   0.01   0.00   0.00  99.96
12:31:12 PM  Device  r/s   w/s   rkB/s   wkB/s  rrqm/s  wrqm/s  %util
12:31:12 PM  sda     0.00  0.00    0.00    0.00     0.00    0.00   0.00
12:31:12 PM  sdb     0.00  0.00    0.00    0.00     0.00    0.00   0.00

"Device" indica el nombre del disco;
"r/s" indica el número de lecturas por segundo,
"w/s" indica el número de escrituras por segundo,
"rkB/s" indica la cantidad de datos leídos por segundo (en KB),
"wkB/s" indica la cantidad de datos escritos por segundo (en KB),
"rrqm/s" indica la cantidad de solicitudes de lectura combinadas por segundo,
"wrqm/s" indica la cantidad de solicitudes de escritura combinadas por segundo,
"%util" indica el uso del disco. (*Importante, si el uso del disco es del 90%, está ocupado)

- -c: Mostrar información de uso de CPU;
- -d: Mostrar información de uso de disco;
- -h: Mostrar información de ayuda.
- -x: Mostrar información extendida
- -k: Mostrar cantidad de datos en KB

Por ejemplo, ejecutar el comando iostat:
iostat -d -x -k 1 10


sar Análisis de rendimiento

- -u: Mostrar información relacionada con el uso de CPU, incluyendo el uso de cada núcleo de CPU, uso de CPU en modo usuario y modo sistema, interrupciones y cambios de contexto etc.
- -r: Mostrar información relacionada con el uso de memoria, incluyendo memoria libre, caché, búfer, uso y espacio de intercambio etc.
- -b: Mostrar información relacionada con E/S de disco, incluyendo velocidad de lectura y escritura del disco, longitud de la cola de solicitudes de E/I etc.
- -n: Mostrar información relacionada con la red, incluyendo tráfico de la interfaz de red, paquetes erróneos, paquetes perdidos etc.
- -p: Mostrar información relacionada con los procesos, incluyendo uso de CPU y memoria, actividad de red, operaciones de E/I etc.
- -f: Especificar la ruta del archivo de datos sar, se puede usar para ver datos históricos.
- -q: Indica mostrar información relacionada con la carga promedio

sar -q 1 10

- ldavg-1: Carga promedio en el último minuto.
- ldavg-5: Carga promedio en los últimos 5 minutos.
- ldavg-15: Carga promedio en los últimos 15 minutos.


pidstat Lectura y escritura de disco por proceso

- -u: Mostrar información relacionada con el uso de CPU, incluyendo uso de CPU en modo usuario, modo sistema y tiempo de espera de CPU etc.
- -r: Mostrar información relacionada con el uso de memoria, incluyendo memoria virtual, memoria física, memoria compartida etc.
- -d: Mostrar información relacionada con E/I de disco, incluyendo velocidad de lectura y escritura, longitud de la cola de solicitudes de E/I etc.
- -w: Mostrar información relacionada con cambios de contexto y tiempo de espera de CPU del proceso.
- -t: Especificar el intervalo de tiempo de salida del proceso.
- -h: Mostrar resultados en formato fácil de leer.
- -p: Especificar el ID del proceso a monitorear, se pueden separar múltiples IDs con comas.
- -C: Especificar el nombre del proceso a monitorear, se pueden separar múltiples nombres con comas.
- -u: Especificar mostrar la situación de uso de todos los procesos, no solo los procesos especificados.

pidstat -d 1 10
Ver procesos


uptime Ver equilibrio de carga

El formato de salida del comando uptime es el siguiente:
22:16:47 up  1:21,  2 usuarios,  load average: 0.00, 0.01, 0.05
"load average" Los tres números siguientes indican la carga promedio del sistema en 1 minuto, 5 minutos y 15 minutos respectivamente.
Si la carga promedio del sistema excede 2 veces el número de núcleos de CPU, indica que la carga del sistema es demasiado alta y se necesita una optimización adicional.

- -p: Mostrar el tiempo de inicio del sistema;
- -s: Mostrar la duración de ejecución del sistema, en formato compacto;
- -h: Mostrar el tiempo de ejecución del sistema de forma humana, como 2 días 3 horas 20 minutos;
- -V: Mostrar la información de versión del comando uptime.


free

1. total (memoria total): Memoria física total del sistema.
2. used (memoria usada): Cantidad de memoria actualmente ocupada.
3. free (memoria libre): Cantidad de memoria actualmente no ocupada.
4. shared (memoria compartida): Cantidad de memoria compartida por múltiples procesos.
5. buffers/cached (búfer/caché): Memoria reservada por el sistema para acelerar el acceso al disco.
6. available (memoria disponible): Cantidad de memoria actualmente disponible en el sistema.
El resultado de salida del comando `free` está en bytes por defecto, pero también se pueden usar parámetros para especificar la unidad de salida, por ejemplo, usar el parámetro "-m" puede mostrar el resultado en MB.

Usar el operador de tubería (|) para pasar el resultado de salida de `free` al comando `grep`, se puede buscar información específica de uso de memoria.
Por ejemplo, el siguiente comando puede buscar información que contenga "Swap" en las líneas "buffers" y "cached":
free -h | grep -i swap
Por ejemplo, el siguiente comando puede actualizar automáticamente la situación de uso de memoria cada 5 segundos:
free -h -s 5


Escucha

ipconfig Información de la red
/etc/sysconfig/network-scripts/...


watch Ver en tiempo real

- -n: Especificar el intervalo de tiempo para ejecutar el comando, en segundos, como -n 10 significa ejecutar el comando cada 10 segundos;
- -d: Resaltar las partes cambiadas en la salida del comando, facilitando la observación de cambios;
- -t: No mostrar la línea de título del comando watch, solo mostrar la salida del comando;
- -c: Limpiar la pantalla de la terminal antes de ejecutar el comando cada vez;
- -x: Usar la salida del comando como título de la ventana de terminal, facilitando la identificación de diferentes comandos watch.

Por ejemplo, usar el comando watch para monitorear la carga del sistema:
watch -n 1 uptime

Donde, la opción -n 1 indica ejecutar el comando uptime cada segundo, mostrando la carga del sistema.

Por ejemplo, combinar con el comando tail para observar en tiempo real los cambios en el archivo de registro:
watch -n 1 tail -n 10 /var/log/syslog

Donde, la opción -n 1 indica ejecutar el comando tail cada segundo, mostrando las últimas 10 líneas del archivo de registro.


strace

- -p: Especificar el ID del proceso a rastrear.
- -o: Especificar el nombre del archivo para guardar el resultado de salida.
- -c: Estadísticas del número de veces, tiempo y errores de las llamadas al sistema.
- -t: Mostrar la marca de tiempo de cada llamada al sistema.
- -e: Especificar las llamadas al sistema a rastrear, se pueden separar múltiples llamadas con comas.
- -s: Especificar la longitud máxima del resultado de salida.
- -f: Rastrear todos los subprocesos del proceso.
- -v: Mostrar información de depuración más detallada.

El resultado de salida del comando strace incluye los siguientes contenidos:
- Nombre y parámetros de la llamada al sistema.
- Valor de retorno de la llamada al sistema.
- Información de transmisión y manejo de señales del proceso.

strace -c ls
Ver las llamadas del comando ls


netstate Estado de la red

- -a: Mostrar todas las conexiones de red, incluyendo las en estado de escucha y no escucha.
- -t: Mostrar información de conexión del protocolo TCP.
- -u: Mostrar información de conexión del protocolo UDP.
- -p: Mostrar el nombre del proceso y el ID del proceso.
- -n: No resolver nombres de host y servicios, usar direcciones IP y puertos en su lugar.
- -l: Solo mostrar conexiones de red en estado de escucha.
- -r: Mostrar información de la tabla de enrutamiento.
- -i: Mostrar información de la interfaz de red.
- -s: Mostrar información estadística de la red, incluyendo tráfico de red, errores de red etc.

- Protocolo: TCP o UDP.
- Dirección y puerto local: Dirección IP y puerto local de la computadora.
- Dirección y puerto remoto: Dirección IP y puerto remoto de la computadora.
- Estado: Estado de la conexión de red, como ESTABLISHED, LISTEN, CLOSED etc.
- Nombre y ID del proceso: Nombre e ID del proceso que ocupa el puerto.

netstat -anptu
Mostrar toda la información de conexiones de red TCP y UDP, y mostrar el nombre e ID del proceso que ocupa el puerto, usando direcciones IP y puertos en lugar de nombres de host y servicios.


ss Estado de la red

- -t: Mostrar información de sockets del protocolo TCP.
- -u: Mostrar información de sockets del protocolo UDP.
- -d: Mostrar información de sockets del protocolo DCCP.
- -r: Mostrar información de sockets del protocolo RAW.
- -a: Mostrar toda la información de conexiones y sockets de escucha.
- -n: Mostrar direcciones IP y puertos en formato numérico.
- -p: Mostrar información del proceso correspondiente al socket.
- -s: Mostrar información estadística de los sockets, como número de paquetes recibidos y enviados, tasa de transmisión etc.
- -o: Mostrar información del temporizador del protocolo TCP.
- -i: Mostrar información de marca de tiempo del socket.
- -h: Mostrar información de ayuda del comando ss.
- -l: Indica mostrar toda la información de sockets de escucha.

El resultado de salida del comando ss incluye los siguientes contenidos:
- Tipo de protocolo y estado.
- Dirección IP y puerto local.
- Dirección IP y puerto remoto.
- ID y nombre del proceso correspondiente al socket.
- Información de marca de tiempo y temporizador del socket.
- Información estadística del socket, como bytes transmitidos, número de paquetes, tasa de transmisión etc.

ss -ntl
Ver puertos TCP
ss -s


tcpdump Captura de paquetes

- -i: Especificar la interfaz de red, como eth0.
- -n: Mostrar direcciones IP y puertos en formato numérico.
- -X: Mostrar el contenido original del paquete en código ASCII y codificación hexadecimal.
- -w: Guardar los paquetes capturados en un archivo.
- -r: Leer los paquetes de un archivo y analizarlos.
- -c: Especificar el número de paquetes a capturar.
- -s: Especificar el tamaño de los paquetes a capturar.
- -v: Mostrar información detallada de captura de paquetes.
- -A: Mostrar el contenido original del paquete en código ASCII.

tcpdump -i eth1


Estrategias de Seguridad

Este artículo no descrieb estrategias detalladas

lsattr Mostrar atributos de archivo
chattr Evitar modificación de archivos


Especificaciones de Uso de Puertos

Número de puerto 0 no se usa
Números de puerto 1 - 1023, llamados puertos privilegiados, el sistema solo los da por defecto al usuario root
Números de puerto 1024 - 4999 se asignan libremente a programas cliente
Números de puerto 5000 - 65535 se asignan libremente a programas servidor


netfilter

netfilter es el mecanismo central de iptables, netfilter permite a los usuarios usar hook para que el kernel de Linux ejecute funciones de devolución de llamada registradas y complete una serie de funciones.
1: NF_IP_PRE_ROUTING, ubicado antes de que el paquete sea enrutado, después de que se complete la verificación de consistencia del paquete, entra en esta posición hook.
2: NF_IP_LOCAL_IN, ubicado después de que el paquete es enrutado, y el destino del paquete es esta máquina.
3: NF_IP_FORWARD, ubicado después de que el paquete es enrutado, pero la dirección de destino del paquete no es esta máquina.
4: NF_IP_LOCAL_OUT: Paquetes enviados por esta máquina, antes de ser enrutados, entran en este hook para procesamiento.
5: NF_IP_POST_ROUTING: Paquetes a punto de salir de esta máquina, se procesan en este hook.

Cuando el módulo del kernel de Linux está registrado, la función registrada puede tener 5 valores de retorno, diferentes valores de retorno, el kernel realizará diferentes procesamientos.
1: NF_ACCEPT, el paquete se procesa normalmente, se permite pasar el paquete.
2: NF_DROP, el paquete se descarta.
3: NF_STOLEN, se lleva este paquete, no se realiza un procesamiento posterior.
4: NF_QUEUE, el paquete se pone en cola nuevamente, puede ser enviado a programas de usuario.
5: NF_REPEAT, volver a llamar a la función hook para este paquete.


md5sum Valor de verificación MD5

Verificar si el archivo ha sido modificado
md5sum archivo.txt


ssh-keygen Generar clave SSH

ssh-keygen
ssh-copy-id -i id_rsa.pub usuario@host


firewalld Firewalll dinámico

Zona bloqueada (block): Cualquier paquete de red entrante será bloqueado. Zona de trabajo (work): Se confía en otras computadoras en la red, no dañarán tu computadora. Zona hogareña (home): Se confía en otras computadoras en la red, no dañarán tu computadora. Zona pública (public): No se confía en ninguna computadora en la red, solo se aceptan conexiones de red entrantes seleccionadas. Zona aislada (DMZ): La zona aislada también llamada zona desmilitarizada, es una capa de red agregada entre redes internas y externas, actuando como buffer. Para la zona aislada, solo se aceptan conexiones de red entrantes seleccionadas. Zona de confianza (trusted): Todas las conexiones de red pueden ser aceptadas. Zona interna (internal): Se confía en otras computadoras en la red, no dañarán tu computadora. Solo se aceptan conexiones de red entrantes seleccionadas. Zona externa (external): No se confía en otras computadoras en la red, no dañarán tu computadora. Solo se aceptan conexiones de red entrantes seleccionadas.

Nota: La zona predeterminada de FirewallD es pública. FirewallD proporciona por defecto nueve archivos de configuración de zona: block.xml, dmz.xml, drop.xml, external.xml, home.xml, internal.xml, public.xml, trusted.xml, work.xml, todos se guardan en el directorio "/usr/lib/firewalld/zones/".

firewall-config Configuración gráfica
Usar la interfaz gráfica para configurar es más rápido y sencillo


firewall-cmd Configuración de línea de comandos:
firewall-cmd --state && echo "En ejecución" || echo "No en ejecución"

1. Comandos relacionados con zona
--get-default-zone  Consultar el nombre de la zona predeterminada
--set-default-zone=<nombre_zona>   Establecer la zona predeterminada
--get-active-zones  Mostrar las zonas actualmente en uso y los nombres de las interfaces de red
--get-zones Mostrar todas las zonas disponibles
--new-zone= Nueva zona
2. Comandos de gestión de servicios
--get-services  Mostrar servicios predefinidos
--add-service=<nombre_servicio> Establecer que la zona predeterminada permita el tráfico de este servicio
--remove-service=<nombre_servicio>  Establecer que la zona predeterminada ya no permita el tráfico de este servicio
3. Comandos de puerto
--add-port=<puerto/protocolo> Establecer que la zona predeterminada permita el tráfico de este puerto
--remove-port=<puerto/protocolo>  Establecer que la zona predeterminada ya no permita el tráfico de este puerto
4. Comandos de interfaz de red
--add-interface=<nombre_interfaz>  Dirigir todo el tráfico de esta interfaz de red a una zona especificada
--change-interface=<nombre_interfaz>   Asociar una interfaz de red con una zona
5. Comandos para ver todas las reglas
--list-all  Mostrar información de configuración de la zona, como parámetros de red, recursos, puertos y servicios etc.
--permanent Mostrar parámetros de configuración permanentes, recursos, puertos y servicios etc. (al agregar, las reglas son permanentes, se necesita recargar)
6. Recargar las políticas del firewall
--reload    Hacer que las reglas de configuración "permanentes" entren en vigor inmediatamente, y sobrescriban las reglas de configuración actuales


iptables Firewall estático

RAW table: Principalmente determinar si se realiza un seguimiento de estado del paquete.
Mangle table: Se usa para modificar el tipo de servicio, tiempo de vida, establecer marca en el paquete, implementar整形 de tráfico etc.
NAT table: Modificar la dirección IP, puerto y otra información del paquete.
Filter table: Filtrar paquetes, determinar cómo procesar los paquetes según reglas específicas.
Prioridad: mangle > nat > filter

input
Coincide con paquetes cuyo IP de destino es esta máquina
output
Paquetes de salida, generalmente no se configura en esta cadena
forward
Coincide con paquetos que pasan por esta máquina
prerouting
Modificar dirección de destino, usado para hacer DNAT. Por ejemplo: mapear el puerto 80 de la red interna a un puerto de Internet
postrouting
Modificar dirección de origen, usado para hacer SNAT. Por ejemplo: compartir una IP pública de Internet en una red de área local

Cuando un paquete entra en la tarjeta de red, primero entra en la cadena PREROUTING, el kernel determina según la IP de destino del paquete si necesita ser reenviado.
Si el paquete es para esta máquina, llegará a la cadena INPUT. Una vez que el paquete llega a la cadena INPUT, cualquier proceso lo recibirá.
Los programas en esta máquina pueden enviar paquetes, estos paquetes pasarán por la cadena OUTPUT, luego llegarán a la cadena POSTROUTING para ser enviados.
Si el paquete necesita ser reenviado y el kernel permite el reenvío, el paquete pasará por la cadena FORWARD, luego llegará a la cadena POSTROUTING para ser enviado.

En general, los paquetes se dividen en dos categorías:
1. Paquetes enviados a la propia máquina firewall;
2. Paquetes que necesitan pasar por la máquina firewall


iptables -t nombre_tabla <-A/I/D/R> nombre_cadena [número_regla] <-i/o nombre_interfaz> -p protocolo <-s IP_fuente/máscara>
--sport puerto_fuente <-d IP_destino/máscara> --dport puerto_destino -j acción

iptables soporta las siguientes condiciones de filtrado:
- Dirección IP (dirección de origen, dirección de destino)
- Número de puerto (puerto de origen, puerto de destino)
- Tipo de protocolo (TCP, UDP, ICMP etc.)
- Interfaz de red (interfaz de entrada, interfaz de salida)
- Marca (marcar paquetes, para procesamiento posterior)

iptables soporta las siguientes acciones:
- ACCEPT: Permitir que el paquete pase.
- DROP: Descartar el paquete.
- REJECT: Rechazar el paquete, y enviar un mensaje de rechazo al remitente.
- LOG: Registrar el paquete en el registro del sistema.
- MASQUERADE: Traducción de dirección de red, para convertir direcciones IP internas a IP públicas para el acceso.
- SNAT: Traducción de dirección de origen, para modificar la dirección IP de origen del paquete.
- DNAT: Traducción de dirección de destino, para modificar la dirección IP de destino del paquete.
- REDIRECT: Redirigir el paquete a un puerto o IP específico.

-P Establecer política predeterminada
-F Limpiar cadena de reglas
-L Ver cadena de reglas
-A Agregar nueva regla al final de la cadena de reglas
-I Agregar nueva regla al principio de la cadena de reglas
-D Eliminar una regla específica
-s Coincidir con dirección IP/MÁSCARA de origen, agregar signo "!" indica excepto esta IP.
-d Coincidir con dirección de destino
-i nombre_interfaz Coincidir con datos que ingresan desde esta interfaz de red
-o nombre_interfaz Coincidir con datos que salen desde esta interfaz de red
-p Coincidir con protocolo, como tcp, udp, icmp
--dport num  Coincidir con puerto de destino
--sport num  Coincidir con puerto de origen


-t, --table table Operar en la tabla table especificada.

-L, --list [chain] Listar todas las reglas en la cadena chain, si no se especifica una cadena, listar todas las reglas en todas las cadenas de la tabla.

-p: Especificar el tipo de protocolo de paquete a coincidir;
-s, --source [!] dirección[/máscara] : Especificar una o un grupo de direcciones como dirección de origen, filtrar según esta regla. Cuando no hay máscara después, la dirección es una dirección, por ejemplo: 192.168.1.1; cuando se especifica la máscara, puede indicar un rango de direcciones, por ejemplo: 192.168.1.0/255.255.255.0.
-d, --destination [!] dirección[/máscara] : El formato de la dirección es el mismo que arriba, pero aquí se especifica la dirección como dirección de destino, filtrando según esto.
-i, --in-interface [!] <nombre_interfaz red> : Especificar la interfaz de red desde la que proviene el paquete, por ejemplo, la más común eth0. Nota: solo funciona para estas tres cadenas: INPUT, FORWARD, PREROUTING. Si no se especifica esta opción, significa que puede provenir de cualquier interfaz de red. Al igual que antes, "!" indica negación.
-o, --out-interface [!] <nombre_interfaz red> : Especificar la interfaz de red por la que sale el paquete. Solo funciona para estas tres cadenas: OUTPUT, FORWARD, POSTROUTING.

-A, --append chain regla Especificada insertar una o más reglas especificadas al final de la cadena chain. Es decir, esta regla se colocará al final, y se ejecutará al final. La regla se especifica por la coincidencia posterior.
-I, --insert chain [número_regla] regla Especificada insertar una o más reglas en la posición especificada de la cadena chain. Si el número de regla especificado es 1, se inserta al principio de la cadena. Este es el caso predeterminado, si no se especifica el número de regla.
-D, --delete chain regla Especificada eliminar una o más reglas especificadas en la cadena chain.
-R num: Reemplazar/modificar la regla número n

-P, --policy chain target : Establecer la política target para la cadena chain especificada. Nota, solo las cadenas integradas pueden tener políticas, las cadenas definidas por el usuario no las permiten.
-F, --flush [chain] : Limpiar todas las reglas en la cadena chain especificada. Si no se especifica una cadena, limpiar todas las reglas en todas las cadenas de la tabla.
-N, --new-chain chain : Crear una nueva cadena con el nombre especificado.
-X, --delete-chain [chain] : Eliminar la cadena especificada, esta cadena no debe ser referenciada por ninguna otra regla, y no debe tener ninguna regla. Si no se especifica el nombre de la cadena, se eliminarán todas las cadenas no integradas de la tabla.
-E, --rename-chain old-chain new-chain : Renombrar la cadena especificada con el nuevo nombre especificado. Esto no afectará el interior de la cadena.
-Z, --zero [chain] : Poner a cero todos los contadores en la cadena especificada, o en todas las cadenas de la tabla.
-j, --jump target <especificar objetivo> : Es decir, qué ejecutar al satisfacer cierta condición. target puede ser un objetivo incorporado, como ACCEPT, o también puede ser una cadena definida por el usuario.
-h: Mostrar información de ayuda;


SELinux Contexto de Seguridad

El archivo de configuración de SELinux está ubicado en  /etc/selinux/config

SELINUX=enforcing Este elemento define el estado de selinux.

enforcing—Modo forzado, el sistema está protegido por selinux. Es decir, si violas las políticas, no puedes continuar operando
permissive—Modo de advertencia, el sistema no está protegido por selinux, solo recibe mensajes de advertencia.
En modo de advertencia, Selinux está activo, pero incluso si violas las políticas, te permite continuar operando, pero registra tus violaciones (mensajes de advertencia)
disabled—Deshabilitar selinux.

SELINUXTYPE=targeted
Este elemento define qué módulo de política usa selinux para proteger el sistema.
targeted solo protege servicios de red como apache, sendmail, bind, postgresql, nfs, cifs etc.


setenforce 0
Deshabilitar temporalmente SELinux
setenforce 1
Habilitar temporalmente SELinux
getenforce
Ver estado de SELinux
sestatus
Ver modo de trabajo de SELinux


Gestión de Discos

ID del sistema:
- 83: Partición de sistema de archivos Linux
- 82: Partición swap de Linux
- 7: Partición NTFS de Windows
- 1: Partición FAT16
- 8e: Partición LVM de Linux


df Consultar situación del disco

Puede mostrar la capacidad total, espacio utilizado, espacio disponible y porcentaje de uso del sistema de archivos
- `-h`: Mostrar el uso del disco de forma legible para humanos, por ejemplo en GB, MB o KB.
- `-T`: Mostrar el tipo de sistema de archivos.
- `-t`: Solo mostrar sistemas de archivos del tipo especificado, por ejemplo solo mostrar sistemas de archivos ext4.
- `-i`: Mostrar el uso de inodos del sistema de archivos, en lugar del uso del espacio en disco.
- `-x`: No mostrar sistemas de archivos del tipo especificado, por ejemplo no mostrar sistemas de archivos tmpfs.

- Mostrar el uso del disco de todos los sistemas de archivos montados:
  df
- Mostrar el uso del disco de todos los sistemas de archivos montados de forma legible para humanos:
  df -h
- Mostrar el uso del disco del sistema de archivos especificado:
  df /dev/sda1
- Mostrar el uso del disco de sistemas de archivos del tipo especificado:
  df -t ext4
- Mostrar el uso de inodos del sistema de archivos:
  df -i
El comando `df` puede ayudar a los administradores del sistema o usuarios a conocer el uso actual del espacio del sistema de archivos, para que puedan tomar medidas oportunas para gestionar y optimizar los recursos de almacenamiento del sistema de archivos.


dd Copiar y convertir archivos y dispositivos

archivo_entrada y archivo_salida indican las rutas de los archivos de entrada y salida, if indica el archivo de entrada, of indica el archivo de salida.
- iflag: Se usa para especificar los atributos del archivo de entrada, por ejemplo iflag=direct indica usar modo de E/S directa para leer el archivo.
- oflag: Se usa para especificar los atributos del archivo de salida, por ejemplo oflag=direct indica usar modo de E/S directa para escribir en el archivo.
- bs: Se usa para especificar el tamaño del bloque de datos leído o escrito cada vez, el valor predeterminado es 512 bytes.
- count: Se usa para especificar el número de bloques de datos leídos o escritos.
- skip: Se usa para especificar el número de bloques de datos omitidos en el archivo de entrada.
- seek: Se usa para especificar el número de bloques de datos omitidos en el archivo de salida.

Copiar archivos o dispositivos
dd if=/dev/sda of=/dev/sdb bs=4096

Crear archivo de tamaño especificado
dd if=/dev/zero of=archivo.txt bs=1M count=10

Escribir imagen ISO en una USB
dd if=imagen.iso of=/dev/sdb bs=4M


fsck Reparar datos del disco

- -a: Reparar automáticamente errores del sistema de archivos.
- -c: Verificar sectores defectuosos del dispositivo, toma mucho tiempo.
- -f: Forzar la verificación del sistema de archivos, incluso si el sistema de archivos parece normal.
- -V: Mostrar el proceso detallado de verificación y reparación.
Generalmente, el proceso para usar el comando fsck para verificar y reparar un sistema de archivos es el siguiente:
1. Desmontar el sistema de archivos que se va a verificar y reparar, por ejemplo umount /dev/sda1.
2. Usar el comando fsck para verificar y reparar el sistema de archivos, por ejemplo fsck /dev/sda1.
3. Esperar a que el comando fsck complete la verificación y reparación.
4. Volver a montar el sistema de archivos, por ejemplo mount /dev/sda1 /mnt.

fsck -a /dev/sda1


mkfs Crear o formatear disco

mkfs -t ext4 /dev/sda1
Crear /dev/sda1 como disco con formato ext4

mkfs.xfs -f prueba.rar
prueba.rar es de formato ext4, forzar cambio a formato xfs


fdisk Particionamiento de disco (MBR)

fdisk /dev/sda
1. p: Ver información de la tabla de particiones actual.
2. n: Crear una nueva partición.
3. d: Eliminar una partición.
4. t: Establecer el tipo de una partición.
5. w: Escribir la tabla de particiones modificada en el disco.


LVM Volumen Lógico

PV(physical volume): Volumen físico en la capa más baja del sistema de gestión de volúmenes lógicos, puede ser un disco duro físico completo o una partición física en un disco duro real.
Solo se reserva una área especial en la partición física para registrar parámetros de gestión relacionados con LVM.

VG(volume group): El grupo de volúmenes se crea en volúmenes físicos, un grupo de volúmenes debe incluir al menos un volumen físico,
después de crear el grupo de volúmenes, se pueden agregar dinámicamente nuevos volúmenes al grupo de volúmenes, un proyecto de sistema de gestión de volúmenes lógicos puede tener múltiples grupos de volúmenes.

LV(logical volume): El volumen lógico se crea en un grupo de volúmenes, el espacio no asignado en el grupo de volúmenes se puede usar para crear nuevos volúmenes lógicos,
después de crear el volumen lógico, se puede expandir y reducir dinámicamente su espacio.

PE(physical extent): La extensión física es la unidad de almacenamiento mínima utilizada para asignación en un volumen físico, el tamaño de la extensión física se especifica al crear el grupo de volúmenes,
una vez determinado no se puede cambiar, el tamaño de la extensión física de todos los volúmenes físicos en el mismo grupo de volúmenes debe ser el mismo,
cuando se agrega un nuevo pv al vg, el tamaño de pe se cambia automáticamente al tamaño de pe definido en vg.

LE(logical extent): La extensión lógica es la unidad de almacenamiento mínima utilizada para asignación en un volumen lógico, el tamaño de la extensión lógica depende del tamaño de la extensión física en el grupo de volúmenes donde se encuentra el volumen lógico.
Debido a las limitaciones del kernel, un volumen lógico (Logic Volume) puede contener como máximo 65536 PE (Physical Extent),
por lo que el tamaño de un PE determina la capacidad máxima de un volumen lógico, un PE de 4 MB (predeterminado) determina una capacidad máxima de volumen lógico de 256 GB,
si se desea usar un volumen lógico mayor que 256G, se debe especificar un PE más grande al crear el grupo de volúmenes.


Conectar varias particiones de disco en un solo grupo de volúmenes (volume group), formando un pool de almacenamiento.
El administrador puede crear libremente volúmenes lógicos (logical volumes) en el grupo de volúmenes, y crear sistemas de archivos en los volúmenes lógicos.
El administrador puede ajustar fácilmente el tamaño del grupo de volúmenes de almacenamiento, y puede nombrar, gestionar y asignar el almacenamiento de disco por grupos.

Poner los ingredientes existentes (discos) en una olla para hacer un guiso (grupo de volúmenes), después de cocinar (configurar), asignar a cada taza (volumen lógico)

Modo lineal
Escribir en un dispositivo antes de escribir en otro
Modo de tira (striping)
Los datos se dispersan y escriben en los dispositivos LVM

Debido a que el modo de tira no tiene seguridad de datos, y LVM no enfatiza el rendimiento de lectura/escritura, el modo predeterminado de LVM es el modo lineal.


Volumen físico (pv)
pvcreate: Crear volumen físico.
    - Sintaxis: pvcreate [opciones] volumen_físico
    - Ejemplo: pvcreate /dev/sdb1

pvdisplay: Mostrar información del volumen físico.
    - Sintaxis: pvdisplay [opciones] [ruta_volumen_físico]
    - Ejemplo: pvdisplay /dev/sdb1

pvmove: Mover datos de un volumen físico a otro volumen físico.
    - Sintaxis: pvmove [opciones] ruta_volumen_físico_origen ruta_volumen_físico_destino
    - Ejemplo: pvmove /dev/sdb1 /dev/sdd1

pvremove: Eliminar volumen físico.
    - Sintaxis: pvremove [opciones] ruta_volumen_físico
    - Ejemplo: pvremove /dev/sdb1

pvscan: Escanear información de volúmenes físicos.
    - Sintaxis: pvscan [opciones]
    - Ejemplo: pvscan

pvresize: Ajustar el tamaño del volumen físico.
    - Sintaxis: pvresize [opciones] ruta_volumen_físico
    - Ejemplo: pvresize /dev/sdb1

------------


Grupo de volúmenes (vg)
vgcreate: Crear grupo de volúmenes.
    - Sintaxis: vgcreate [opciones] nombre_grupo_volumenes volumen_físico...
    - Ejemplo: vgcreate vg1 /dev/sdb1 /dev/sdc1

vgdisplay: Mostrar información del grupo de volúmenes.
    - Sintaxis: vgdisplay [opciones] [nombre_grupo_volumenes]
    - Ejemplo: vgdisplay vg1

vgremove: Eliminar grupo de volúmenes.
    - Sintaxis: vgremove [opciones] nombre_grupo_volumenes
    - Ejemplo: vgremove vg1

vgextend: Agregar volumen físico al grupo de volúmenes.
    - Sintaxis: vgextend [opciones] nombre_grupo_volumenes volumen_físico...
    - Ejemplo: vgextend vg1 /dev/sdd1

vgreduce: Eliminar volumen físico del grupo de volúmenes.
    - Sintaxis: vgreduce [opciones] nombre_grupo_volumenes volumen_físico...
    - Ejemplo: vgreduce vg1 /dev/sdd1

vgscan: Escanear información de grupos de volúmenes.
    - Sintaxis: vgscan [opciones]
    - Ejemplo: vgscan

vgchange: Modificar atributos del grupo de volúmenes.
    - Sintaxis: vgchange [opciones] nombre_grupo_volumenes
    - Ejemplo: vgchange -a n vg1

------------


Volumen lógico (lv)
lvcreate: Crear volumen lógico.
    - Sintaxis: lvcreate [opciones] [-l|--extents número_de_extensiones_lógicas] [-L|-- tamaño_volumen_lógico] [-n|--nombre nombre_volumen_lógico] nombre_grupo_volumenes
    - Ejemplo: lvcreate -n lv1 -L 10G vg1

lvextend: Expandir volumen lógico.
    - Sintaxis: lvextend [opciones] ruta_física_volumen_lógico
    - Ejemplo: lvextend -L +5G /dev/mapper/vg1-lv1

lvreduce: Reducir volumen lógico.
    - Sintaxis: lvreduce [opciones] ruta_física_volumen_lógico
    - Ejemplo: lvreduce -L -5G /dev/mapper/vg1-lv1

lvdisplay: Mostrar información del volumen lógico.
    - Sintaxis: lvdisplay [opciones] [ruta_física_volumen_lógico]
    - Ejemplo: lvdisplay /dev/mapper/vg1-lv1

lvmove: Mover datos del volumen lógico a otro volumen físico.
    - Sintaxis: lvmove [opciones] ruta_física_volumen_lógico ruta_volumen_físico_destino
    - Ejemplo: lvmove /dev/mapper/vg1-lv1 /dev/sdd1

lvremove: Eliminar volumen lógico.
    - Sintaxis: lvremove [opciones] ruta_física_volumen_lógico
    - Ejemplo: lvremove /dev/mapper/vg1-lv1

lvrename: Cambiar nombre del volumen lógico.
    - Sintaxis: lvrename [opciones] nombre_volumen_lógico_antiguo nombre_volumen_lógico_nuevo
    - Ejemplo: lvrename /dev/vg1/lv1 /dev/vg1/lvnew

lvresize: Ajustar tamaño del volumen lógico.
    - Sintaxis: lvresize [opciones] ruta_física_volumen_lógico
    - Ejemplo: lvresize -L 20G /dev/mapper/vg1-lv1

lvmove: Mover datos del volumen lógico a otro volumen físico.
    - Sintaxis: lvmove [opciones] ruta_física_volumen_lógico ruta_volumen_físico_destino
    - Ejemplo: lvmove /dev/mapper/vg1-lv1 /dev/sdd1

lvconvert: Convertir volumen lógico a otro tipo de volumen lógico.
    - Sintaxis: lvconvert [opciones] tipo_destino ruta_física_volumen_lógico
    - Ejemplo: lvconvert --type raid1 /dev/mapper/vg1-lv1

lvscan: Escanear información de volúmenes lógicos.
    - Sintaxis: lvscan [opciones]
    - Ejemplo: lvscan

lvchange: Modificar atributos del volumen lógico.
    - Sintaxis: lvchange [opciones] ruta_física_volumen_lógico
    - Ejemplo: lvchange -a y /dev/mapper/vg1-lv1


#1. Establecer el tipo de sistema de cada disco físico o partición como Linux LVM, su ID de sistema es 8e, usando el comando t de la herramienta fdisk
[root@localhost ~]# fdisk /dev/sda
...
Comando (m para ayuda): n
Cilindro inicial (1593-3916, predeterminado 1593):
Usando valor predeterminado 1593
Cilindro final, +cilindros o +tamaño{K,M,G} (1593-3916, predeterminado 3916): +5G
...
Comando (m para ayuda): t
Número de partición (1-6): 5
Código hexadecimal (tipo L para listar códigos): 8e   # Especificar ID de sistema como 8e
Tipo de sistema de partición 5 cambiado a 8e (Linux LVM)
...
Comando (m para ayuda): p
...
/dev/sda5            1593        2246     5252227+  8e  Linux LVM
/dev/sda6            2247        2900     5253223+  8e  Linux LVM
/dev/sda7            2901        3554     5253223+  8e  Linux LVM
Comando (m para ayuda): w
...
#Re-mapear particiones en /dev/sda
[root@localhost ~]# partx -a /dev/sda
...
[root@localhost ~]# kpartx -af /dev/sda
...


------------

#2. Inicializar cada disco físico o partición como PV (physical volume, volumen físico), en esta etapa se pueden usar los comandos pvcreate, pvremove, pvscan, pvdisplay (pvs)
[root@localhost ~]# pvcreate /dev/sda{5,6,7}   # Inicializar tres particiones como volúmenes físicos
  Volumen físico "/dev/sda5" creado exitosamente
  Volumen físico "/dev/sda6" creado exitosamente
  Volumen físico "/dev/sda7" creado exitosamente
[root@localhost ~]# pvscan
  PV /dev/sda5                      lvm2 [5.01 GiB]
  PV /dev/sda6                      lvm2 [5.01 GiB]
  PV /dev/sda7                      lvm2 [5.01 GiB]
  Total: 3 [15.03 GiB] / en uso: 0 [0   ] / sin VG: 3 [15.03 GiB]
[root@localhost ~]# pvdisplay /dev/sda5   # Mostrar información detallada del volumen físico sda5
  "/dev/sda5" es un nuevo volumen físico de "5.01 GiB"
  --- Nuevo Volumen físico ---
  Nombre PV               /dev/sda5
  Nombre VG               
  Tamaño PV               5.01 GiB
  Asignable              NO
  Tamaño PE               0   # Como PE se divide en la etapa VG, aquí se ve todo 0
  Total PE               0
  PE Libre               0
  PE Asignado            0
  UUID PV                lrNOS3-8U21-ZS8o-eyKH-HqPn-DLhX-W1ppl4
  
[root@localhost ~]# pvremove /dev/sda7   # Eliminar información del volumen físico sda7
  Etiquetas en el volumen físico "/dev/sda7" borradas exitosamente
[root@localhost ~]# pvscan   # Se puede que PV lista ya no tiene sda7
  PV /dev/sda5   VG vgprueba   lvm2 [5.01 GiB / 5.01 GiB libre]
  PV /dev/sda6   VG vgprueba   lvm2 [5.01 GiB / 5.01 GiB libre]
[root@localhost ~]# pvcreate /dev/sda7
  Volumen físico "/dev/sda7" creado exitosamente


------------

#3. Crear VG (volume group, grupo de volúmenes). El grupo de volúmenes integra múltiples volúmenes físicos (ocultando los detalles subyacentes), y divide PE (physical extend). PE es la unidad de almacenamiento mínima en el volumen físico, similar al block en el sistema de archivos, el tamaño de PE se puede especificar, el valor predeterminado es 4M. En esta etapa se usan los comandos vgcreate, vgscan, vgdisplay, vgextend, vgreduce
[root@localhost ~]# vgcreate -s 8M vgprueba /dev/sda{5,6}   # Crear grupo de volúmenes con sda5, sda6, especificar tamaño PE como 8M
  Grupo de volúmenes "vgprueba" creado exitosamente
[root@localhost ~]# vgscan
  Leyendo todos los volúmenes físicos. Esto puede tomar un tiempo...
  Se encontró grupo de volúmenes "vgprueba" usando tipo de metadatos lvm2
[root@localhost ~]# vgdisplay   # Ver información detallada del grupo de volúmenes
  --- Grupo de volúmenes ---
  Nombre VG               vgprueba
  ID de Sistema            
  Formato                lvm2
  Áreas de Metadatos    2
  Número de Secuencia de Metadatos  1
  Acceso VG              lectura/escritura   # Lectura/escritura
  Estado VG              redimensionable
  Máximo LV              0
  LV Actual             0
  LV Abierto            0
  Máximo PV              0
  PV Actual             2
  PV Activo             2
  Tamaño VG              10.02 GiB   # Capacidad del grupo de volúmenes
  Tamaño PE              8.00 MiB
  Total PE               1282   # Número total de PE
  PE Asignado / Tamaño   0 / 0   # Capacidad asignada
  PE Libre / Tamaño      1282 / 10.02 GiB   # Capacidad libre
  UUID VG                5zBY8e-5Cgc-HqSo-BOiZ-02NX-77ON-NJSCbN

------------

#4. Crear LV (logical volume, volumen lógico) en el grupo de volúmenes. Para facilitar la gestión, los archivos de dispositivo correspondientes al volumen lógico se guardan en el directorio del grupo de volúmenes, como /dev/VG_NAME/LV_NAME. La unidad de almacenación mínima que se puede asignar en LV se llama LE (logical extend), en el mismo grupo de volúmenes, el tamaño de LE es el mismo que el de PE, y corresponde uno a uno. En esta etapa se usan los comandos lvcreate, lvscan, lvdisplay, lvextend, lvreduce, lvresize
[root@localhost ~]# lvcreate -L 500M -n lvprueba vgprueba   # Crear volumen lógico de 500M llamado lvprueba
  Redondeando tamaño a extensión física completa 504.00 MiB
  Volumen lógico "lvprueba" creado
[root@localhost ~]# lvscan
  ACTIVO            '/dev/vgprueba/lvprueba' [504.00 MiB] inherit
[root@localhost ~]# lvdisplay
  --- Volumen lógico ---
  Ruta LV                /dev/vgprueba/lvprueba
  Nombre LV              lvprueba
  Nombre VG              vgprueba
  UUID LV                0fPpO3-gVaI-ZKqi-xHnc-uaHk-u6of-i5wds7
  Acceso de Escritura    lectura/escritura
  Host de Creación, hora localhost.localdomain, 2015-10-18 22:05:18 +0800
  Estado LV              disponible
  # abierto              0
  Tamaño LV              504.00 MiB
  LE Actual              63
  Segmentos              1
  Asignación             inherit
  Lectura anticipada sectores  auto
  - actualmente establecido en 256
  Dispositivo de bloque  253:0

------------

#Formatear volumen lógico y montar
[root@localhost ~]# mke2fs -t ext4 /dev/vgprueba/lvprueba
...
Escribiendo tablas de inodo: hecho
Creando journal (8192 bloques): hecho
Escribiendo superbloques y información contable del sistema de archivos: hecho
...
[root@localhost ~]# mkdir /datos
[root@localhost ~]# mount /dev/vgprueba/lvprueba /datos
[root@localhost ~]# cp /etc/inittab /datos
[root@localhost ~]# ls /datos
inittab  lost+found
------------

#Expandir sistema de archivos
[root@localhost ~]# vgextend vgprueba /dev/sda7   # Si la capacidad del grupo de volúmenes no es suficiente, expandir el sistema de archivos antes expandir el grupo de volúmenes
  Grupo de volúmenes "vgprueba" extendido exitosamente
[root@localhost ~]# lvextend -L +300M /dev/vgprueba/lvprueba
  Redondeando tamaño a límite entre extensiones físicas: 304.00 MiB
  El volumen lógico instantáneo no puede redimensionarse mientras está activo: intente lvchange -an
  Ejecute `lvextend --help` para más información.
[root@localhost ~]# umount /dev/vgprueba/lvprueba_snap
[root@localhost ~]# lvremove /dev/vgprueba/lvprueba_snap  # Para aumentar o disminuir el volumen lógico, primero debe eliminar el volumen instantáneo correspondiente
¿Realmente desea eliminar el volumen lógico activo lvprueba_snap? [y/n]: y
  Volumen lógico "lvprueba_snap" eliminado exitosamente
[root@localhost ~]# lvextend -L +300M /dev/vgprueba/lvprueba   # Aumentar volumen lógico 300M
  Redondeando tamaño a límite entre extensiones físicas: 304.00 MiB
  Expandiendo volumen lógico lvprueba a 808.00 MiB
  Volumen lógico lvprueba redimensionado exitosamente
[root@localhost ~]# resize2fs /dev/vgprueba/lvprueba   # Expandir sistema de archivos
resize2fs 1.41.12 (17-May-2010)
El sistema de archivos en /dev/vgprueba/lvprueba está montado en /datos; se requiere redimensionamiento en línea
antiguos bloques_desc = 2, nuevos bloques_desc = 4
Realizando redimensionamiento en línea de /dev/vgprueba/lvprueba a 827392 (1k) bloques.
El sistema de archivos en /dev/vgprueba/lvprueba ahora tiene 827392 bloques de largo.

[root@localhost ~]# df -h   # Mostrar que la capacidad realmente se ha expandido
...
/dev/mapper/vgprueba-lvprueba  783M   11M  732M   2% /datos

------------

#Reducir sistema de archivos (operación fuera de línea)
[root@localhost ~]# umount /dev/vgprueba/lvprueba   # Antes de reducir el sistema de archivos, primero desmontar
[root@localhost ~]# e2fsck -f /dev/vgprueba/lvprueba   # Verificar sistema de archivos
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgprueba/lvprueba: 12/206848 archivos (0.0% no contiguos), 36856/827392 bloques
[root@localhost ~]# resize2fs /dev/vgprueba/lvprueba 500M   # Reducir sistema de archivos a 500M
resize2fs 1.41.12 (17-May-2010)
Redimensionando el sistema de archivos en /dev/vgprueba/lvprueba a 512000 (1k) bloques.
El sistema de archivos en /dev/vgprueba/lvprueba ahora tiene 512000 bloques de largo.
[root@localhost ~]# lvreduce -L 500M /dev/vgprueba/lvprueba   # Reducir volumen lógico a 500M
  Redondeando tamaño a límite entre extensiones físicas: 504.00 MiB
  ADVERTENCIA: Reduciendo volumen lógico activo y abierto lvprueba a 504.00 MiB
  ESTO PUEDE DESTRUIR SUS DATOS (sistema de archivos etc.)
¿Realmente desea reducir lvprueba? [y/n]: y
  Redimensionando volumen lógico lvprueba a 504.00 MiB
  Volumen lógico lvprueba redimensionado exitosamente
[root@localhost ~]# mount /dev/vgprueba/lvprueba /datos   # Volver a montar
[root@localhost ~]# df -h   # Mostrar que la capacidad realmente se ha reducido
...
/dev/mapper/vgprueba-lvprueba  485M   11M  449M   3% /datos

[root@localhost ~]# vgchange -an vgprueba   # Cuando no vamos a usar el grupo de volúmenes por un tiempo, podemos ponerlo en suspensión
  0 volumen(s) lógico(s) en el grupo de volúmenes "vgprueba" ahora activo
[root@localhost ~]# umount /datos    # Antes de suspender, primero desmontar el volumen lógico
[root@localhost ~]# umount /mnt
[root@localhost ~]# vgchange -an vgprueba
  0 volumen(s) lógico(s) en el grupo de volúmenes "vgprueba" ahora activo
[root@localhost ~]# vgchange -ay vgprueba   # Reactivar grupo de volúmenes
  1 volumen(s) lógico(s) en el grupo de volúmenes "vgprueba" ahora activo
[root@localhost ~]# vgremove vgprueba   # Si planeamos no usarlo en el futuro, podemos eliminar el grupo de volúmenes
¿Realmente desea eliminar el grupo de volúmenes "vgprueba" que contiene 1 volumen(s) lógico(s)? [y/n]: y
¿Realmente desea eliminar el volumen lógico activo lvprueba? [y/n]: y
  Volumen lógico "lvprueba" eliminado exitosamente
  Grupo de volúmenes "vgprueba" eliminado exitosamente

------------

#Crear volumen instantáneo
[root@localhost ~]# mount -o remount,ro /dev/vgprueba/lvprueba /datos   # Antes de crear un volumen instantáneo, cambiar el volumen lógico correspondiente a solo lectura
[root@localhost ~]# lvcreate -s -L 512M -n lvprueba_snap /dev/vgprueba/lvprueba  # Crear volumen instantáneo de 512M
  Volumen lógico "lvprueba_snap" creado
[root@localhost ~]# mount -o remount,rw /dev/vgprueba/lvprueba /datos   # Cambiar el volumen lógico de nuevo a lectura/escritura
[root@localhost ~]# mount /dev/vgprueba/lvprueba_snap /mnt
[root@localhost ~]# df -h   # Se puede ver que el volumen instantáneo y su volumen lógico correspondiente muestran los mismos valores de parámetro
...
/dev/mapper/vgprueba-lvprueba       489M   11M  453M   3% /datos
/dev/mapper/vgprueba-lvprueba_snap  489M   11M  453M   3% /mnt
[root@localhost ~]# ls /mnt
inittab  lost+found
[root@localhost ~]# cp /etc/passwd /datos   # Agregar algunos datos al volumen original
[root@localhost ~]# ls /datos
inittab  lost+found  passwd
[root@localhost ~]# ls /mnt   # El estado del sistema de archivos mostrado por el volumen instantáneo sigue siendo el momento de la creación
inittab  lost+found


Etiquetas: linux administracion-de-sistemas comandos-linux

Publicado el 6-25 03:41