Ghost AcademySecLearn// Seguridad Informática
🐧 Comandos Varios II · Linux avanzado
Comandos Varios II
// dos2unix · recode · Sistema · Apagado · grep avanzado

Guía detallada de conversión de ficheros, información del sistema, gestión del apagado y el comando grep con expresiones regulares completas y ejemplos prácticos.

dos2unix · unix2dos recode /proc · sistema shutdown · reboot grep avanzado regex BRE/ERE
🔄
dos2unix
Conversión de ficheros DOS/Windows → UNIX/Linux
📦 Instalación requerida: sudo apt install dos2unix recode

dos2unix elimina los caracteres de retorno de carro (\r o CR) al final de cada línea. Windows/DOS usa \r\n (CR+LF) mientras que Linux/UNIX usa solo \n (LF).

\r\n
CR + LF
Windows / DOS
\n
LF
Linux / UNIX / macOS
\r
CR solo
Mac OS clásico
Comando / SintaxisDescripción
dos2unix <entrada> <salida>Convierte el fichero de entrada y guarda el resultado en un nuevo fichero de salida.
dos2unix <fichero>Convierte el fichero in-place (sobrescribe el original).
dos2unix -n filedos.txt fileunix.txtConversión con flag -n (new file): mantiene el original intacto.

Ejemplos prácticos

1
Crear fichero con formato DOS (simulación)
Creamos un fichero de texto y añadimos \r para simular el formato CR-LF de DOS.
bash
# Creamos el archivo y añadimos CR para simular DOS
echo "Linea 1" > filedos.txt
echo "Linea 2" >> filedos.txt
sed -i 's/$/\r/' filedos.txt   # añade \r al final de cada línea

# cat normal no muestra el \r
cat filedos.txt

# cat -A muestra caracteres especiales: ^M = \r, $ = \n
cat -A filedos.txt
salida — cat -A filedos.txt
Linea 1^M$
Linea 2^M$
^M = representación visible del carácter \r (Retorno de Carro). $ = representación visible de \n (Nueva Línea). cat normal ignora el \r porque los sistemas UNIX lo tratan como carácter no imprimible.

Para confirmar con dump octal:

od -c filedos.txt
# Verás \r (\015) antes de cada \n (\012)
od -c filedos.txt
Parte del archivoFormato UNIX originalDespués del sed (DOS)
Fin de línea\n (octal: \012)\r\n (octal: \015\012)
2
Convertir DOS → UNIX (nuevo fichero)
bash
dos2unix -n filedos.txt fileunix.txt
# fileunix.txt = formato UNIX. filedos.txt permanece sin cambios.
3
Convertir in-place (uso más común)
bash
dos2unix filedos.txt
# El archivo es modificado directamente. No hay copia de seguridad.

unix2dos — UNIX → DOS/Windows

Hace la operación inversa: añade \r antes de cada \n, creando el formato CR-LF de Windows.

Comando / SintaxisDescripción
unix2dos <entrada> <salida>Convierte y guarda en un nuevo fichero de salida.
unix2dos <fichero>Convierte el fichero in-place (sobrescribe el original).
bash — ejemplo completo
# 1. Crear fichero UNIX (formato predeterminado en Ubuntu)
echo "Este archivo esta en formato UNIX." > fileunix.txt

# 2. Convertir a formato DOS (nuevo fichero)
unix2dos -n fileunix.txt filedos.txt

# 3. Verificar que tiene CR-LF
cat -A filedos.txt
# Salida: Este archivo esta en formato UNIX.^M$
🔡
recode
Conversión de codificación de caracteres y formato general

recode es una herramienta versátil para convertir codificaciones de caracteres (ISO-8859-1 ↔ UTF-8) y formatos (texto plano → HTML, LaTeX, etc.).

📦 Instalación: sudo apt install recode
OpciónDescripción
<origen>..<destino>Especifica el tipo de conversión (ej: latin1..utf8, ..HTML).
-lLista todas las conversiones de codificación y formato disponibles.
< / >Redirección de entrada/salida (recode procesa stdin/stdout por defecto).

Ejemplos prácticos

1. Listar todas las conversiones disponibles
recode -l | more
# Usa Espacio para avanzar página, q para salir
2. Convertir texto plano a HTML
# Crear el fichero de texto
echo "Este es el titulo" > page.txt
echo "" >> page.txt
echo "Contenido de la pagina." >> page.txt

# Convertir a HTML (genera etiquetas title, body, etc.)
recode ..HTML < page.txt > page.html
3. Convertir codificación: Latin-1 → UTF-8
# Paso 1: Crear fichero y forzar codificación ISO-8859-1 con iconv
echo "El camión de Jose mañana." > archivo_latin1.txt
iconv -f UTF-8 -t ISO-8859-1 archivo_latin1.txt > archivo_latin1_final.txt
rm archivo_latin1.txt

# Paso 2: Convertir Latin-1 a UTF-8 con recode (in-place)
recode latin1..utf8 archivo_latin1_final.txt

# Paso 3: Verificar la codificación resultante
file archivo_latin1_final.txt
# archivo_latin1_final.txt: UTF-8 Unicode text
🖥️
Información del Sistema
Arquitectura, kernel, hardware, /proc y fecha/hora
📦 Dependencias: sudo apt install dmidecode hdparm pciutils usbutils

I. Arquitectura, Kernel y Componentes

ComandoDescripciónEjemplo
archMuestra la arquitectura de la máquina (ej. x86_64).arch
uname -mMuestra la arquitectura del hardware de la máquina.uname -m
uname -rMuestra la versión del kernel Linux en uso.uname -r
cat /proc/versionMuestra la versión completa del kernel junto con el compilador GCC usado.cat /proc/version
dmidecode -qMuestra detalles de los componentes del sistema (BIOS, placa base, CPU, RAM) leyendo la tabla DMI/SMBIOS.sudo dmidecode -q

II. Dispositivos PCI y USB

ComandoDescripciónEjemplo
lspci -tvMuestra los dispositivos conectados al bus PCI (GPU, tarjetas de red, controladores SATA) en formato árbol.lspci -tv
lsusb -tvMuestra los dispositivos conectados al bus USB (teclado, ratón, pendrives, impresoras) en formato árbol.lsusb -tv

III. Discos Duros y Rendimiento

ComandoDescripciónEjemplo
hdparm -i /dev/sdaMuestra las características de identificación del disco duro (modelo, número de serie, firmware).sudo hdparm -i /dev/sda
hdparm -tT /dev/sdaPrueba de velocidad: lectura de caché y buffer (-T) y del disco directamente (-t).sudo hdparm -tT /dev/sda

IV. Ficheros /proc — Estado del Kernel en Tiempo Real

Los ficheros en /proc son pseudo-archivos que reflejan el estado actual del kernel y del sistema. No ocupan espacio en disco.

cat /proc/cpuinfo
Información detallada de la CPU: modelo, núcleos, caché, flags de instrucciones.
cat /proc/meminfo
Uso de memoria RAM: total, libre, buffers, caché, swap.
cat /proc/swaps
Ficheros y particiones swap activos con su tamaño y uso.
cat /proc/mounts
Sistema de ficheros montado actualmente (más detallado que mount).
cat /proc/interrupts
Interrupciones de hardware asignadas a la CPU por dispositivo.
cat /proc/net/dev
Adaptadores de red y estadísticas de tráfico por interfaz (bytes y paquetes).

V. Fecha y Hora del Sistema

📦 Instalar ncal: sudo apt install ncal
ComandoDescripciónEjemplo
dateMuestra la fecha y hora actual del sistema.date
cal 2011Muestra el almanaque completo del año 2011.cal 2011
cal 07 2011Muestra el almanaque para el mes de julio (07) de 2011.cal 07 2011
date MMDDhhmmYYYY.ssAjusta la fecha y hora del sistema. Formato: Mes, Día, hora, minuto, Año, segundos.sudo date 041217002011.00
clock -wGuarda la hora del sistema (software) en el reloj de hardware (BIOS/CMOS).sudo clock -w
⚡
Apagado, Reinicio y Cierre de Sesión
shutdown · halt · reboot · init · logout
🔐 Permisos: Todos los comandos de apagado y reinicio requieren sudo.

I. Comandos de Apagado (Halt)

⛔ Apagado inmediato
sudo shutdown -h now sudo halt sudo init 0 sudo telinit 0
Todos equivalentes — shutdown -h now es el método recomendado.
⏰ Apagado planificado
sudo shutdown -h 17:00 sudo shutdown -h +30 "Mensaje" sudo shutdown -c
-c cancela cualquier apagado programado.
ComandoDescripciónRequisitos
shutdown -h nowApagado inmediato — método preferido y moderno.sudo
haltApagado inmediato. Equivalente a shutdown -h now.sudo
init 0Cambia al runlevel 0 (definido para apagar el sistema).sudo
telinit 0Enlace simbólico a init 0. Mismo efecto.sudo
shutdown -h hours:minutes &Apagado planificado a hora específica. & lo ejecuta en segundo plano.sudo
shutdown -h +minutesApagado en X minutos. Envía aviso a todos los usuarios.sudo
shutdown -cCancela cualquier apagado planificado.sudo

Ejemplos — Apagado planificado

bash
# Apagar a las 17:00 con aviso a usuarios
sudo shutdown -h 17:00

# Apagar en 30 minutos con mensaje
sudo shutdown -h +30 "El servidor se apagará en 30 minutos para mantenimiento."

# Cancelar el apagado programado
sudo shutdown -c

II. Comandos de Reinicio

🔁 Reinicio inmediato
sudo shutdown -r now sudo reboot sudo init 6
shutdown -r now es el método recomendado.
🚪 Cerrar sesión
logout
O usa Ctrl+D. Solo cierra la sesión actual — no apaga la máquina.
ComandoDescripciónRequisitos
shutdown -r nowReinicio inmediato — método recomendado.sudo
rebootReinicio inmediato. Equivalente a shutdown -r now.sudo
init 6Cambia al runlevel 6 (definido para reiniciar el sistema).sudo

III. Cierre de Sesión

bash
# Cerrar sesión de terminal / SSH
logout

# Alternativa equivalente: Ctrl+D
💡 Diferencia clave: logout solo cierra la sesión del usuario actual en esa terminal. No apaga el sistema ni afecta a otros usuarios.
🔍
grep — Global Regular Expression Print
Búsqueda de patrones en ficheros y texto

Primero creamos los ficheros de ejemplo para practicar todos los casos:

bash — crear ficheros de prueba
# documento.txt
echo "Linux es un sistema operativo potente." > documento.txt
echo "Aprenderemos a usar GREP hoy." >> documento.txt
echo "grep busca texto rapido." >> documento.txt
echo "Ubuntu 24.04 es la version actual." >> documento.txt

# logs.log
echo "ERROR: Fallo de conexion en el puerto 80." > logs.log
echo "INFO: Usuario jose ha iniciado sesion." >> logs.log
echo "WARN: Memoria libre baja (90MB)." >> logs.log
echo "ERROR: El disco esta lleno (99%)." >> logs.log

I. Uso Básico y Opciones Fundamentales

básicoBusca el patrón en el archivo
-iIgnora mayúsculas/minúsculas
-vLíneas que NO coinciden
-wPalabra completa
-nNúmero de línea
bash — ejemplos básicos
# 1. Búsqueda simple (sensible a mayúsculas)
grep "grep" documento.txt
grep busca texto rapido.

# 2. Ignorar mayúsculas (-i)
grep -i "linux" documento.txt
Linux es un sistema operativo potente.

# 3. Líneas que NO contienen "ERROR" (-v)
grep -v "ERROR" logs.log
INFO: Usuario jose ha iniciado sesion.
WARN: Memoria libre baja (90MB).

# 4. Palabra completa "es" + número de línea (-w -n)
grep -w -n "es" documento.txt
1:Linux es un sistema operativo potente.

II. Opciones de Contexto y Formato

-cCantidad de líneas que coinciden
-lSolo nombre del fichero
-A NN líneas DESPUÉS (After)
-B NN líneas ANTES (Before)
-C NN líneas ALREDEDOR (Context)
bash — contexto y formato
# 1. Contar errores (-c)
grep -c "ERROR" logs.log
2

# 2. Mostrar el ERROR y las 2 líneas siguientes (-A 2)
grep -A 2 "Fallo de conexion" logs.log
ERROR: Fallo de conexion en el puerto 80.
INFO: Usuario jose ha iniciado sesion.
WARN: Memoria libre baja (90MB).

# 3. Mostrar 1 línea de contexto alrededor del WARN (-C 1)
grep -C 1 "WARN" logs.log
INFO: Usuario jose ha iniciado sesion.
WARN: Memoria libre baja (90MB).
ERROR: El disco esta lleno (99%).

III. Búsqueda Recursiva y Múltiples Archivos

-rBusca recursivamente en subdirectorios
*Busca en todos los ficheros del directorio actual
--excludeOmite ficheros específicos
bash — recursivo y múltiples ficheros
# 1. Buscar en todos los ficheros del directorio actual (*)
grep "Ubuntu" *
documento.txt:Ubuntu 24.04 es la version actual.

# 2. Búsqueda recursiva en todo el directorio (-r)
grep -r "jose"
./logs.log:INFO: Usuario jose ha iniciado sesion.

# 3. Recursivo excluyendo un fichero (--exclude)
grep -r --exclude=logs.log "es"
./documento.txt:Linux es un sistema operativo potente.
./documento.txt:grep busca texto rapido.
./documento.txt:Ubuntu 24.04 es la version actual.

IV. Expresiones Regulares — BRE y ERE

Por defecto, grep usa BRE (Basic Regular Expressions). Para patrones avanzados con +, ? o |, usa -E (Extended).

-EExpresiones Regulares Extendidas (ERE) — activa |, +, ?
-FTexto fijo — desactiva regex, más rápido
^patronPatrón al inicio de línea
patron$Patrón al final de línea
bash — regex BRE y ERE
# 1. OR con | — buscar "ERROR" o "WARN" (-E)
grep -E "ERROR|WARN" logs.log
ERROR: Fallo de conexion en el puerto 80.
WARN: Memoria libre baja (90MB).
ERROR: El disco esta lleno (99%).

# 2. Ancla ^ — líneas que comienzan con "INFO" (BRE)
grep "^INFO" logs.log
INFO: Usuario jose ha iniciado sesion.

# 3. Ancla $ — líneas que terminan con "potente." (BRE)
grep "potente.$" documento.txt
Linux es un sistema operativo potente.
BRE vs ERE:
En BRE, los metacaracteres como |, +, ? deben escaparse con \.
Con -E (ERE) se usan directamente sin escape: grep -E "ERROR|WARN"

V. Conjuntos de Caracteres — [ ] y [^ ]

Primero creamos el fichero de prueba:

bash — crear numeros_letras.txt
echo "Texto de prueba A1" > numeros_letras.txt
echo "Texto de prueba B2" >> numeros_letras.txt
echo "Texto de prueba C3" >> numeros_letras.txt
echo "Texto de prueba D4" >> numeros_letras.txt
echo "Linea sin numeros ni mayusculas" >> numeros_letras.txt
echo "Palabra-clave" >> numeros_letras.txt
echo "Palabra_clave" >> numeros_letras.txt
echo "FIN" >> numeros_letras.txt

1. Corchetes [ ] — Conjunto de caracteres

SintaxisDescripción
[abc]Coincide si el carácter es a, b o c.
[0-9]Coincide con cualquier dígito del 0 al 9.
[A-Za-z]Coincide con cualquier letra (mayúscula o minúscula).
[BD][24]B o D seguido de 2 o 4.
bash — ejemplos con [ ]
# 1. Líneas que contienen "B2" o "D4" ([ ] para conjuntos)
grep " [BD][24]" numeros_letras.txt
Texto de prueba B2
Texto de prueba D4

# 2. Líneas que TERMINAN con un dígito ([0-9]$)
grep "[0-9]$" numeros_letras.txt
Texto de prueba A1
Texto de prueba B2
Texto de prueba C3
Texto de prueba D4

# 3. Líneas que contienen una vocal minúscula ([aeiou])
grep "[aeiou]" numeros_letras.txt
Texto de prueba A1  ...(todas excepto "FIN")

2. Negación [^ ] — Todo EXCEPTO el conjunto

Cuando ^ aparece inmediatamente tras el corchete de apertura, invierte el conjunto: coincide con cualquier carácter excepto los listados.

SintaxisDescripción
[^abc]Cualquier carácter que NO sea a, b o c.
[^0-9]Cualquier carácter que NO sea un dígito.
[^A-Za-z0-9 ]Caracteres especiales/puntuación (no letra, número ni espacio).
bash — ejemplos con [^ ]
# 1. Líneas donde el ÚLTIMO carácter NO es un dígito
grep "[^0-9]$" numeros_letras.txt
Linea sin numeros ni mayusculas
Palabra-clave
Palabra_clave
FIN

# 2. Líneas con caracteres especiales (no letra, número ni espacio)
grep "[^A-Za-z0-9 ]" numeros_letras.txt
Palabra-clave
Palabra_clave

# 3. Palabra "clave" precedida de puntuación/símbolo (no espacio)
grep "[^ ]clave" numeros_letras.txt
Palabra-clave
Palabra_clave

VI. Resumen Completo de Opciones grep

-iIgnora mayúsculas/minúsculas
-vInversión: NO coincide
-nNúmero de línea
-wPalabra completa
-cCuenta coincidencias
-lSolo nombre del fichero
-rRecursivo
-ERegex extendidas (ERE)
-FTexto fijo (sin regex)
-A NN líneas después
-B NN líneas antes
-C NN líneas de contexto
^patronInicio de línea
patron$Final de línea
[abc]Conjunto de caracteres
[^abc]Negación del conjunto
--excludeExcluir ficheros
💡 Combinando opciones: grep -rni "error" /var/log/ busca recursivamente, ignorando mayúsculas y mostrando número de línea — ideal para análisis de logs.