Módulo 1 — Operación de Sistemas Operativos GNU/Linux
Al finalizar esta clase vas a poder:
Por qué vemos este tema: para administrar un servidor necesitamos localizar configuraciones, consultar logs y comparar versiones sin modificar los archivos.
| Necesidad | Herramienta |
|---|---|
| Identificar un archivo | file |
| Mostrar o recorrer contenido | cat / less |
| Ver el comienzo o el final | head / tail |
| Contar contenido | wc |
| Comparar dos versiones | diff |
| Buscar un nombre | find |
| Buscar texto | grep |
Primero definimos qué necesitamos. Después elegimos el comando.
Supongamos que el directorio contiene:
acceso-01.log
acceso-02.log
acceso-final.log
error-01.log
inventario.txt
ls acceso-*.log
Bash expande el patrón antes de ejecutar ls.
ls recibe los nombres encontrados, no el asterisco.
| Patrón | Coincide con | Ejemplo |
|---|---|---|
* | Cero o más caracteres | *.log |
? | Exactamente un carácter | acceso-0?.log |
[abc] | Un carácter de la lista | informe-[abc].txt |
[0-9] | Un carácter del rango | acceso-0[1-9].log |
ls *.log
ls acceso-??.log
ls acceso-0[12].log
ls archivo*[0-3]
Los comodines se pueden combinar. archivo*[0-3] comienza con archivo y termina con un dígito del 0 al 3.
logs/*.log busca dentro de logs, pero no recorre sus subdirectorios.* no incluye normalmente nombres que comienzan con punto.
ls *
ls .*
ls -a
Para observar archivos ocultos suele ser más claro utilizar ls -a.
ls *.respaldo
ls: cannot access '*.respaldo': No such file or directory
En la configuración habitual de Bash, el patrón sin coincidencias queda sin expandir.
Antes de operar sobre varios nombres, conviene revisar la selección:
ls -- logs/*.log
ls '*.log'
ls "*.log"
ls \*.log
En los tres casos, Bash protege el asterisco y no lo expande.
$VARIABLE.
ls "Documentos del curso"
ls Documentos\ del\ curso
Patrón → expansión de Bash → coincidencias → previsualización
file /etc/os-release
file /bin/ls
file /usr/share/man/man1/ls.1.gz
/etc/os-release: symbolic link to ../usr/lib/os-release
/bin/ls: ELF 64-bit LSB pie executable ...
/usr/share/man/man1/ls.1.gz: gzip compressed data ...
file inspecciona el contenido y otros indicios. No decide solamente por la extensión.
Primero identificamos el archivo. Después elegimos cómo consultarlo.
cat: mostrar contenido archivos
cat /etc/os-release
cat /etc/hostname /etc/hosts
cat -n /etc/os-release
-n agrega números a las líneas.Resulta adecuado cuando el contenido entra en la pantalla. Para archivos extensos conviene less.
cat muestra la salida. No modifica el archivo.
less: recorrer sin editar
less /etc/services
↓ o j | Avanzar una línea |
↑ o k | Retroceder una línea |
Espacio | Avanzar una pantalla |
b | Retroceder una pantalla |
g / G | Comienzo / final |
/texto | Buscar |
n | Repetir la búsqueda |
q | Salir |
less permite recorrer y buscar dentro de configuraciones o logs extensos sin abrirlos en un editor.
less y more
more /etc/services
more también muestra texto por pantallas.
En el curso utilizaremos less como visor principal.
.gz
cp /etc/services servicios.txt
gzip -k servicios.txt
zcat servicios.txt.gz
zless servicios.txt.gz
gzip -k crea servicios.txt.gz y conserva el original.zcat envía el contenido descomprimido a la terminal.zless abre ese contenido en el visor paginado.gzip comprime archivos individuales.
Identificar → archivo breve o extenso → texto normal o comprimido
head
head /etc/passwd
head -n 5 /etc/passwd
head -n 3 /etc/hosts /etc/services
-n permite elegir otra cantidad.Es útil para comprobar rápidamente el formato y las primeras entradas.
tail
tail /var/log/dpkg.log
tail -n 20 /var/log/dpkg.log
tail -f /var/log/dpkg.log
-n permite elegir otra cantidad.-f espera y muestra las nuevas líneas que recibe el archivo.Ctrl + C interrumpe el seguimiento y devuelve el prompt.
wcwc viene de word count, “conteo de palabras”. Sin opciones informa líneas, palabras y bytes.
wc /etc/passwd
wc -l /etc/passwd
wc -w /etc/services
wc -c /etc/hosts
| Opción | Cuenta |
|---|---|
-l | Líneas |
-w | Palabras |
-c | Bytes |
-m | Caracteres |
Un carácter Unicode puede ocupar más de un byte. Por eso wc -c y wc -m no siempre coinciden.
wc -c /etc/hosts
wc -m /etc/hosts
wc -l /etc/hosts /etc/passwd
Con varios archivos, wc informa cada conteo y agrega un total.
Contar líneas no explica qué significa cada entrada.
Comienzo → final → seguimiento → conteo
diff: ver qué cambió
diff archivo-anterior.conf archivo-actual.conf
diff compara el contenido de ambos archivos.El orden importa: primero la versión anterior y después la actual.
diff -u archivo-anterior.conf archivo-actual.conf
diff --color -u archivo-anterior.conf archivo-actual.conf
--- archivo-anterior.conf
+++ archivo-actual.conf
@@ -1,2 +1,2 @@
puerto=22
-acceso_root=si
+acceso_root=no
-u agrega contexto. En GNU diff, --color resalta la salida cuando se muestra en una terminal.
--- identifica el primer archivo.+++ identifica el segundo.- está en el primero y no en el segundo.+ está en el segundo y no en el primero.El color facilita la lectura, pero los signos conservan el significado.
diff describe la diferencia. La decisión sobre cuál versión es correcta sigue siendo nuestra.
diff directorio-a directorio-b
diff -r directorio-a directorio-b
-r, la comparación no desciende por todos los subdirectorios.-r, compara los archivos correspondientes en ambos árboles.Cambiar el orden invierte los signos - y +.
Comparar no modifica ninguno de los dos lados.
Primera versión → segunda versión → diferencias → decisión
find recorre un árbol
find ruta criterios
find ~/documentos
find ~/documentos -type f
find ~/documentos -type d
-type f selecciona archivos regulares.-type d selecciona directorios.Un punto de inicio demasiado amplio puede tardar y encontrar rutas sin permiso de lectura.
find ~/documentos -type f -name '*.log'
find ~/documentos -type f -name 'acceso-??.log'
find ~/documentos -type f -iname '*.conf'
-name compara el nombre con el patrón.-iname ignora diferencias entre mayúsculas y minúsculas.En este caso queremos quefind, y no Bash, interprete*.log.
find /etc -maxdepth 1 -type f -name '*.conf'
find ~/documentos -type f -size +10k
find ~/documentos -type f -mtime -1
-maxdepth 1 limita la profundidad del recorrido.-size +10k selecciona archivos mayores que 10 KiB.-mtime -1 selecciona modificaciones de menos de 24 horas.Los criterios se combinan. Cada resultado debe cumplirlos.
Ruta inicial → recorrido → tipo → nombre o propiedad → resultados
grep y tuberías sencillasgrep busca líneas
grep 'root' /etc/passwd
grep -n 'root' /etc/passwd
grep -in 'ssh' /etc/services
grep -w 'root' /etc/passwd
| Opción | Función |
|---|---|
-n | Muestra el número de línea |
-i | Ignora mayúsculas y minúsculas |
-w | Exige una palabra completa |
find /etc -maxdepth 1 -type f -iname '*ssh*'
grep -in 'ssh' /etc/services
find busca objetos por su nombre o propiedades.grep busca texto dentro de un archivo.Primero definimos qué estamos buscando: un archivo o una línea de texto.
El carácter | conecta la salida del comando de la izquierda con la entrada del comando de la derecha.
comando1 | comando2
grep -in 'tcp' /etc/services | head -n 5
grep produce las líneas y head conserva solamente las cinco primeras.
La tubería evita crear un archivo intermedio.
tee: mostrar y guardartee recibe datos por la entrada estándar y los envía a dos lugares: la terminal y uno o más archivos.
comando | tee archivo
head -n 5 /etc/services | tee muestra.txt
head produce las cinco líneas.tee las muestra y también las guarda en muestra.txt.-a, agrega al final.Su nombre recuerda a una conexión en T: una entrada continúa por dos salidas.
cat no aporta
cat servicios | grep -w 'ssh'
grep -w 'ssh' servicios
Ambas formas funcionan, pero grep ya sabe abrir el archivo.
cat sigue siendo útil para mostrar archivos breves o concatenar varios archivos.
grep → coincidencias → tubería → segundo comando
file identifica el contenido; cat y less permiten consultarlo.gzip -k conserva el original; zcat y zless leen la copia comprimida.head, tail y wc ayudan a observar y medir.diff -u muestra diferencias con contexto y --color facilita su lectura.find busca objetos; grep busca líneas.tee permite mostrar y guardar la salida.