Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de Linux
-Comandos y explicación
cat
El comando “cat” sirve para imprimir el contenido de un archivo en la consola de Linux en
texto plano. También puede ser utilizado para concatenar el contenido de varios archivos de
texto. Se recomienda combinar redirigir el resultado a otros ficheros con los caracteres de
comparación (“<” y “>”), añadir el resultado al contenido de un fichero de texto (“<<” y “>>”)
o combinarlo con otros comandos mediante el uso de pipes, como por ejemplo “grep”.
Algunos de los parámetros más relevantes de “cat” son:
-b == Numera las líneas del archivo que no estén vacías.
-n == Numera todas las líneas del archivo
-s ==Combina las líneas vacías que vayan seguidas en una única línea
-T ==Muestra las tabulaciones como ^I
wget
El comando “wget” tiene como función descargar un archivo de Internet indicado por el
usuario mediante su dirección por hipervínculo. Soporta HTTP, HTTPS y FTP; también puede
recuperar archivos a través de proxies HTTP. Si no se le especifica un archivo, “wget”
descargará el código html de la página y lo guardará en un fichero, pero también puede
descargar páginas XHTML y CSS. El comando no es interactivo, con lo que puede ejecutarse
en segundo plano y sin que el usuario este logueado.
Algunos de los parámetros más relevantes de “wget” son:
-o == Guarda el log en un archivo de log a especificarse
-d == También imprime información de debug
-q == Desactiva el output de wget
-nv == Desactiva parte del output de wget, sin embargo, se seguirá mostrando
información básica y errores
-i == Lee URLs de un archivo local, especificado después del parámetro con un “=”.
less
El comando “less” permite leer un archivo de texto pudiendo desplazarse por este hacia
arriba y hacia abajo. Es más rápido que otros editores de texto al no tener que leer todo el
input a la vez.
Less no tiene parámetros relevantes al ejecutarlo, pero sí mientras lee un archivo. Algunas
de estas funcionalidades son las siguientes:
d == Avanza en el texto media ventana
u == Retrocede en el texto media ventana
/ == Busca el texto especificado posteriormente en el documento hacia delante
? == Busca el texto especificado posteriormente en el documento hacia atrás
p == Regresa al principio del archivo
Escribir un número desde el programa permite avanzar ese número de líneas en el
documento.
zcat
El comando “zcat” es idéntico al comando “gunzip –c”. Permite ver el contenido de un
archivo comprimido sin descomprimirlo.
Algunos de los parámetros más relevantes de “zcat” son:
-l == Muestra información adicional del archivo
-q == Oculta las advertencias y errores
zless
Permite leer un archivo de texto comprimido y desplazarse por este. Sus funcionalidades son
las mismas que las del comando “less”.
tail
Imprime las últimas 10 líneas de los archivos especificados. En caso de que se le indiquen
más de un archivo, indicará el nombre del archivo antes de imprimir su contenido.
Algunos de los parámetros más relevantes de “tail” son:
-c == Imprime los últimos bytes, cuyo número es especificado tras el parámetro
-n == Imprime el último número de líneas especificadas tras el parámetro
-q == En caso de haber más de un archivo, no imprime los nombres de estos
-v == Siempre escribe primero el nombre del alrchivo
-f == Permite seguir actualizaciones del archivo de texto en tiempo real
-f –s == Lo mismo, pero “s” hace que el output se actualice tras los segundos especificados
posteriormente
head
Imprime las 10 primeras líneas de los archivos especificados, indicando el nombre de cada
archivo si se indica más de uno.
Tiene los mismos parámetros que “tail”, pero sin los que permiten ver actualizaciones del
archivo en tiempo real (-f y –s).
sed
grep
Imprime en la consola la información de uno o más archivos que coincida con los patrones
especificados.
Algunos de los parámetros más relevantes de “grep” son:
-f == Obtiene parámetros de un archivo, indicados por línea.
-i == Ignora las mayúsculas y minúsculas
-v == Invierte la búsqueda, mostrando texto que no coincida con el patrón
-c == Cuenta las líneas en las que haya coincidencias con el patrón
cut
Permite eliminar secciones específicas de las líneas extraídas de un archivo de texto. Se
recomienda utilizarlo para redirigir la salida a otro fichero o junto con otros parámetros que
impriman texto en él terminal utilizando tuberías, como “cat”.
Algunos de los parámetros más relevantes de “cut” son:
-b == Recorta solo un número de bytes
-c == Solo recorta ciertos caracteres
-d == Añade un delimitador para el comando, indicado posteriormente.
-s == No imprime líneas que contengan delimitadores.
sort
Permite ordenar las líneas de uno o varios archivos de texto, también funciona con inputs
estándar. Por defecto, las ordena en orden alfabético.
Algunos de los parámetros más relevantes de “sort” son:
-b == Ignora las líneas en blanco
-f == Ignora las mayúsculas
-n == Ordena a partir de valores numéricos en una línea
-r == Invierte el orden de las líneas, opuesto al alfabético
-R == No ordena, imprime las líneas de forma aleatoria
-u == Unifica las líneas idénticas
uniq
Imprime el contenido de un archivo de texto o un input omitiendo estándar omitiendo las
líneas que se repitan.
Algunos de los parámetros más relevantes de “uniq” son:
-c == Cuenta el número de líneas repetidas de un tipo
-i == Ignora las mayúsculas y minúsculas de líneas repetidas
-s == No compara el primer número de caracteres especificado tras el parámetro
wc
Cuenta e imprime el número de líneas, palabras y bytes de cada archivo especificado.
Algunos de los parámetros más relevantes de “wc” son:
-c –m –l -w == Para especificar la información a imprimir: bytes, caracteres, líneas o
palabras.
-L == Indica la longitud de la línea más larga en los archivos.
awk
Se utiliza para procesar y transformar datos mediante una sintaxis de lenguaje de
programación. Permite hacer operaciones matemáticas, reemplazar palabras o patrones,
procesar texto y mostrar la información que cumpla con ciertos requisitos, etc…
Algunas de las opciones, seguidas por expresiones awk, son las siguientes:
-f == Lee el código awk de un archivo
-v == Crea una variable
-c == Ejecuta el comando en modo de compatibilidad
-Ejemplos de cat:
-Comando para concatenar y leer el contenido de los archivos del directorio “misLogs” de nombre
“Log*” y redirigir la salida a “Logsunidos.txt” en el directorio actual:
Resultado:
-Comando para pasar la salida de la lectura de un fichero a otro comando. Para este ejemplo, el
comando “grep”.
Resultado:
-Ejemplos de wget:
-Uso del comando wget para descargar de la red los documentos que vayamos a necesitar para los
futuros ejemplos:
wget https://seguridadinformatica.s3.us-east-
2.amazonaws.com/Logs_ejemplo/ubuntu.auth.Log.gz
https://seguridadinformatica.s3.us-east-
2.amazonaws.com/logs_ejemplo/anonimizado.access.log.gz
https://www.gnu.org/licenses/gpl.txt https://people.sc.fsu.edu/~jburkardt/data/csv/trees.csv
-Ejemplos de less:
-Uso del comando less para poder revisar y desplazarse por el resultado del comando “grep” tras
buscar las líneas de texto con la cadena “Invalid user” en el fichero “Ubuntu.auth.log”:
zless anonimizado.access.log.gz
-Descomprimir el archivo “anonimizado.access.log.gz”:
gunzip anonimizado.access.log.gz
Resultado:
Resultado:
-Ejemplos de sed:
-Imprimir la primera línea del documento “gpl.txt” y sustituir las minúsculas por mayúsculas:
Resultado:
-Eliminar las líneas en blanco del fichero anterior, “/^$/d” indica eliminar aquello que empieza y
acaba sin ningún carácter en medio:
-Imprimir el contenido de “milog.log”, sustituir las cadenas de texto “sitioreal.es” por “ejemplo.es” y
guardar el resultado en un fichero llamado “anonimizado.milog.log”
Resultado:
-Mostrar las líneas del documento “gpl.txt” en las que ponga “the” e indicar el número de línea:
Resultado:
-Mostrar las líneas del documento “gpl.txt” que empiecen por “GNU”:
Resultado:
-Mostrar las líneas del documento “gpl.txt” que acaben por “and”:
Resultado:
-Mostrar las líneas del documento anterior en las que ponga “cept” acompañado previamente por
dos caracteres, sin importar cuales sean:
Resultado:
-Mostrar las líneas del documento anterior con los caracteres “t” y “o” con “w” u “o” (o ambos) en
medio:
Resultado:
-Mostrar las líneas del documento anterior en las que ponga “ode” pero no precedidas de “c”:
Resultado:
-Mostrar las líneas del documento anterior que comiencen por mayúsculas:
Resultado:
-Mostrar las líneas del documento anterior que incluyan texto entre paréntesis:
Resultado:
-Mostrar todas las líneas del documento anterior que tengan la cadena de texto “free” sin un espacio
posteriormente (-E hace que interprete el patrón como una expresión regular extendida):
Resultado:
-Mostrar las líneas del documento anterior que contengan tres vocales seguidas:
Resultado:
-Mostrar las líneas del documento anterior que contengan de 16 a 20 caracteres alfabéticos seguidos:
Resultado:
-Leer el contenido de “gpl.txt”, buscar caracteres alfabéticos entre paréntesis en la salida, e imprimir
lo que no tenga entre paréntesis “copy” (-i indica ignorar mayúsculas y –v invertir la búsqueda):
Resultado:
-Buscar las líneas que contengan la cadena “user user” en el documento “ubuntu.auth.log”:
-Buscar y contar las líneas que contengan “user user” en el documento “Ubuntu.auth.log”:
Resultado:
-Imprimir las líneas del documento anterior que contengan “port” seguido de espacio y el número
4792:
Resultado:
-Imprime las líneas del documento anterior que contengan “Invalid user cms”, las tres líneas
anteriores y las 2 siguientes:
-Buscar las líneas del documento anterior que contengan “AdminDashboard” y posteriormente
buscar en la salida las líneas en las que ponga POST:
wc -lwc gpl.txt
Resultado:
wc -l ubuntu.auth.log
Resultado:
wc -l anonimizado.access.log
Resultado:
-Ejemplos de awk:
-Imprimir las líneas del documento “gpl.txt” cuya longitud sea superior a 74 caracteres:
Resultado:
-Imprimir las entradas cuyo número de campos sea superior a 8 (NF significa “Number of Fields”):
-Imprimir las líneas del documento “auth.log” cuyo campo 6 sea “failed” y cuyo campo 7 sea
“password”:
-En el documento “ubuntu.auth.log”, imprimir el campo 11 de las líneas que contengan “sshd” y
“Failed password for invalid user” y cualquier texto en medio:
awk '/sshd.*Failed password for invalid user/ { print $11 }' ubuntu.auth.log
-Imprimir los campos 2 y 4 del documento “tres.csv” y separarlos por comas (-F implica utilizar “fs”
para colocar separadores entre campos):
-Imprimir los campos 1 y 3 del documento anterior y sustituir las comas por “|”:
Resultado:
Resultado:
-Del documento anterior, imprimir las líneas cuyo número esté entre el 2 y el 8:
Resultado:
-Del documento anterior, imprimir todas las líneas salvo aquellas en las que ponga “Index”:
awk '{ if (length > max) {max = length; longest = $0}} END {print longest}' gpl.txt
Resultado:
-Imprime la raíz cuadrada del campo 3 del documento “trees.csv”:
-Cuenta las líneas del fichero “ubuntu.auth.log”en las que pone “error” e imprime el número:
Resultado:
-Del documento anterior: imprimir “IP:”, el primer campo de las líneas, “Peticion:” y el segundo
subcampo del sexto campo:
-Imprimir las líneas del documento “access.log” cuyo noveno campo sea 200:
-Imprimir las líneas de “anonimizado.access.log” cuya fecha del cuarto campo esté entre
“15/Oct/2023:03:00:00” y “15/Oct/2023:04:00:00”:
-Imprimir aquellas líneas del fichero anterior cuyo primer campo sea “143.198.122.147”:
-Del documento anterior, detectar aquellas líneas cuyo sexto campo sea “Googlebot” y
posteriormente imprimir su segundo campo.
-Ejemplos combinados:
-Imprimir el contenido del documento “anonimizado.access.log”, buscar las líneas que contengan
“mercedes-napa-negro-tira-charol-negro.jpg”, imprimir el primer campo, ordenar el resultado por
valor numérico y omitir las líneas que se repiten (poniendo delante el número de veces que se
repite), posteriormente ordenarlos de forma descendente e imprimir las 10 primeras líneas:
cat anonimizado.access.log | grep mercedes-napa-negro-tira-charol-negro.jpg | awk '{print $1}' |
sort -n | uniq -c | sort -rn | head
Resultado:
-Imprimir el fichero anterior, buscar las líneas con la cadena “fbclid” y contar el número de líneas:
Resultado:
-Imprimir el noveno campo del fichero anterior, ordenarlo, omitir líneas repetidas (poniendo delante
el número de veces que se repite) y volver a ordenar la salida en orden descendente:
Resultado:
-Buscar aquellas líneas del documento anterior cuyo noveno campo sea 404, imprimir el séptimo
campo, ordenar, omitir líneas duplicadas y ordenar el resultado en orden descendente:
awk '($9 ~ /404/)' anonimizado.access.log | awk '{ print $7 }' | sort | uniq -c | sort –nr
-Imprimir los campos 1, 4 y 6 de las líneas del documento anterior cuyo segundo campo empiece por
“GET /en/80307-36474-fabric-kensington-bag-beige-comb-fab.html”:
awk -F\" '($2 ~ "^GET /en/80307-36474-fabric-kensington-bag-beige-comb-fab.html") {print
$1,$4,$6}' anonimizado.access.log
-Seleccionar aquellas líneas del documento anterior cuyo noveno campo no sea 200 ni 304,
posteriormente imprimir el noveno y séptimo campo de esas líneas, ordenarlos alfabéticamente y
omitir líneas repetidas:
-Imprime el campo 5 del documento anterior, lo ordena, omite las repeticiones (poniendo delante el
número de veces que se repite), las ordena en orden descendente e imprime las 10 primeras líneas.
cat anonimizado.access.log | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Resultado:
-Imprimir el sexto campo de las líneas del documento anterior, ordenar, omitir repeticiones, ordenar
de forma opuesta al alfabeto e ignorando mayúsculas, y mostrar las primeras 200 líneas.
awk -F\" '{print $6}' anonimizado.access.log | sort | uniq -c | sort -fr | head -200
-Seleccionar aquellas líneas del documento anterior cuyo sexto campo esté vacío, imprimir el primer
campo, ordenarlo y omitir repeticiones:
awk -F\" '($6 ~ /^-?$/)' anonimizado.access.log | awk '{print $1}' | sort | uniq
-Imprimir el cuarto campo de aquellas líneas del documento anterior cuyo segundo campo sea
“\.(jpg|gif)” y cuyo cuarto campo no empiece por “https:\/\/ejemplo\.es”, después ordenarlo, omitir
repeticiones y volver a ordenarlo:
-Buscar aquellas líneas del documento anterior que contengan “AdminLogin”, imprimir el primer
campo, ordenarlo, omitir repeticiones (poniendo delante el número de veces que se repite) y
ordenarlo de forma descendente:
grep AdminLogin anonimizado.access.log | awk '{print $1}' | sort | uniq -c | sort -nr