Al Mòdul 1 vas llegir que a Unix «el text pla és la interfície universal». Sonava a declaració de principis. A la lliçó anterior vas veure el mecanisme que la fa possible —canonades i redirecció— i aquí arriben les eines que li donen sentit: un conjunt de programes petits, escrits fa quaranta anys, que saben retallar, ordenar, comptar, substituir i agregar text, i que combinats resolen en una línia el que en un altre entorn exigiria un programa.
Aquesta és la promesa concreta de la lliçó: reserves.csv i acces.log són fitxers de text, i la Marta necessita informes. En acabar els podràs produir sense obrir un full de càlcul i sense escriure codi, i —més important— sabràs quan aquestes eines deixen de ser la resposta correcta.
Contingut
cut: retallar columnestr: traduir, esborrar i comprimirsort: ordenar de debòuniq: comptar aparicionspaste,joinicomm: comparar llistatssed: l'editor de fluxawk: el llenguatge dels camps- Taula de decisió: quina eina i quan
- Cas A: informe de facturació per a la Marta
- Casos B i C: rutes amb errors i IP anòmales
cut: retallar columnes
cut: retallar columnesExtreu parts de cada línia, per camps o per caràcters.
| Opció | Efecte |
|---|---|
-d';' |
delimitador (per defecte, el tabulador) |
-f2,4 / -f2-5 |
camps: llista o rang |
-c1-10 |
per posició de caràcter |
--complement |
tot menys el que s'indica |
--output-delimiter=X |
separador de la sortida |
operador@srv-tramontana:~$ head -3 /home/operador/dades/reserves.csv
id;data;casa;hoste;nits;import
1001;2026-07-03;mas-figueres;Nuria Bosch;4;520.00
1002;2026-07-05;can-ventos;Pere Rius;2;240.00
operador@srv-tramontana:~$ cut -d';' -f3,6 /home/operador/dades/reserves.csv | head -2
casa;import
mas-figueres;520.00cut és rapidíssim i té un límit seriós: no entén delimitadors repetits. Amb un fitxer alineat per espais, cada espai de més compta com un camp buit:
Sortida buida: el camp 2 és l'espai entre GET i el següent. Per a sortides separades per espais variables —que és la de gairebé qualsevol ordre— l'eina correcta és awk, que tracta qualsevol bloc de blancs com un únic separador. cut per a formats amb delimitador fix (CSV, /etc/passwd); awk per a tota la resta.
tr: traduir, esborrar i comprimir
tr: traduir, esborrar i comprimirtr opera caràcter a caràcter i només llegeix de stdin.
| Opció | Efecte |
|---|---|
tr 'a' 'b' |
tradueix caràcter per caràcter |
-d 'X' |
esborra els caràcters indicats |
-s 'X' |
comprimeix repeticions consecutives en una |
-c |
complement: actua sobre els no llistats |
Ja l'has vist en acció: tr -s ' ' resol el problema de cut de l'apartat anterior. Altres usos habituals: tr -d '\r' per netejar fitxers que vénen de Windows —una font clàssica de fallades incomprensibles— i tr -cd '[:print:]\n' per eliminar caràcters de control d'un abocament.
sort: ordenar de debò
sort: ordenar de debò| Opció | Efecte |
|---|---|
-n |
numèric |
-h |
numèric amb sufixos humans (4K, 2M, 1G) |
-V |
per número de versió (3.2.1 abans que 3.10.0) |
-r |
invertit |
-u |
elimina duplicats |
-f |
ignora majúscules |
-t';' |
delimitador de camps |
-k3,3 |
ordena pel camp 3 |
-o fitxer |
escriu la sortida (permet el mateix fitxer d'entrada) |
-s |
estable: no reordena el que ja estava empatat |
La sintaxi de -k és la que més es malinterpreta. -kN significa «des del camp N fins al final de la línia», no «pel camp N». Per ordenar només per un camp cal escriure -kN,N.
operador@srv-tramontana:~$ tail -n +2 /home/operador/dades/reserves.csv | sort -t';' -k6,6nr | head -3
1001;2026-07-03;mas-figueres;Nuria Bosch;4;520.00
1014;2026-08-02;mas-figueres;Jordi Camps;4;520.00
1007;2026-07-19;la-solana;Anna Serra;3;435.50-t';' fixa el separador, -k6,6nr ordena pel camp 6 de manera numèrica i inversa. Els modificadors n i r s'enganxen al -k perquè s'apliquin només a aquell camp; posats solts afectarien tota la línia.
-V és específic i molt útil en el nostre cas: ls /opt/tramontana/releases/ | sort -V ordena 3.1.0, 3.2.0, 3.2.1, 3.3.0 correctament, mentre que un sort normal posaria 3.10.0 abans que 3.2.0.
Recorda de 03-01 que el resultat de sort depèn de la configuració regional. Quan la sortida s'hagi de comparar o versionar, LC_ALL=C sort.
uniq: comptar aparicions
uniq: comptar aparicions| Opció | Efecte |
|---|---|
-c |
prefixa cada línia amb el seu nombre de repeticions |
-d |
només les línies duplicades |
-u |
només les que apareixen un cop |
-i |
ignora majúscules |
-f N |
ignora els N primers camps en comparar |
uniq només compara línies adjacents. No és un defecte: és el que li permet processar fitxers enormes sense memòria. La conseqüència és que exigeix entrada ordenada.
operador@srv-tramontana:~$ printf 'a\nb\na\n' | uniq -c | tr '\n' ' '
1 a 1 b 1 a
operador@srv-tramontana:~$ printf 'a\nb\na\n' | sort | uniq -c | tr '\n' ' '
2 a 1 bD'aquí el cavall de batalla de l'anàlisi de registres, que ja vas fer servir sense explicació:
Agrupa el que és igual, compta cada grup i ordena per freqüència descendent. És la resposta a qualsevol pregunta de la forma «què és el que més es repeteix?».
paste, join i comm: comparar llistats
paste, join i comm: comparar llistatspaste enganxa fitxers costat per costat (paste -d';' a.txt b.txt). join fa una unió relacional per un camp comú i exigeix tots dos fitxers ordenats per ell. comm compara dos fitxers ordenats i produeix tres columnes: només al primer, només al segon, a tots dos.
operador@srv-tramontana:~$ cut -d';' -f3 /home/operador/dades/reserves.csv | tail -n +2 | sort -u > /tmp/amb-reserves.txt
operador@srv-tramontana:~$ comm -23 <(sort /home/operador/dades/cases.txt) /tmp/amb-reserves.txtSense sortida: les cinc cases del catàleg tenen almenys una reserva. -23 suprimeix les columnes 2 i 3 i deixa només «al catàleg però sense reserves», que és exactament la pregunta. <(...) és una substitució de procés: Bash lliura la sortida d'aquella ordre com si fos un fitxer, cosa que evita crear temporals.
sed: l'editor de flux
sed: l'editor de fluxsed llegeix l'entrada línia a línia, i per a cadascuna executa les ordres que li has donat i, tret que li diguis el contrari, la imprimeix. Aquest cicle ho explica tot: sed no carrega el fitxer a la memòria, per això processa fitxers de gigabytes.
Adreces
| Adreça | Selecciona |
|---|---|
5 |
la línia 5 |
2,10 |
de la 2 a la 10 |
$ |
l'última |
/regex/ |
les que coincideixen |
/inici/,/fi/ |
des d'una fins a una altra |
2~3 |
la 2 i després cada 3 |
/regex/! |
les que no coincideixen |
L'ordre s
s/patró/reemplaçament/indicadors, amb aquests indicadors:
| Indicador | Efecte |
|---|---|
g |
totes les ocurrències de la línia, no només la primera |
i |
ignora majúscules |
p |
imprimeix la línia modificada (útil amb -n) |
3 |
només la tercera ocurrència |
w f |
escriu les línies modificades a f |
El delimitador no ha de ser per força /: qualsevol caràcter serveix, i fer-ne servir un altre evita la «tanca de barres» quan el patró conté rutes.
operador@srv-tramontana:~$ echo '/opt/tramontana/releases/3.2.1' | sed 's|/opt/tramontana|/srv/app|'
/srv/app/releases/3.2.1Els grups de captura funcionen com a les expressions regulars: \1, \2… els reutilitzen al reemplaçament i & representa tot el que ha coincidit. Amb -E no cal escapar parèntesis ni claus:
operador@srv-tramontana:~$ echo '1001;2026-07-03;mas-figueres' | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
1001;03/07/2026;mas-figueresAltres ordres
| Ordre | Fa |
|---|---|
d |
esborra (no imprimeix) la línia |
p |
imprimeix; combina-la amb -n |
a text / i text |
afegeix després / insereix abans |
c text |
reemplaça la línia sencera |
y/abc/xyz/ |
tradueix caràcter a caràcter, com tr |
q |
surt (amb sed '100q' talles a la línia 100) |
operador@srv-tramontana:~$ sed -e '1d' -e 's/;/ | /g' /home/operador/dades/reserves.csv | head -1
1001 | 2026-07-03 | mas-figueres | Nuria Bosch | 4 | 520.00Amb -n, sed no imprimeix res pel seu compte i només surt el que p selecciona: sed -n '/ERROR 500/p' errors.log retorna les 41 línies d'error, és a dir, sed imitant grep. Diverses ordres s'encadenen amb -e repetit o separant-les amb ;.
Edició al lloc: per què -i.bak és obligatori
sed -i modifica el fitxer directament. En producció, mai sense sufix.
operador@srv-tramontana:~$ sudo sed -i.bak-$(date +%F) 's/^log_nivell=debug$/log_nivell=info/' /etc/tramontana/app.conf
operador@srv-tramontana:~$ sudo diff -u /etc/tramontana/app.conf.bak-2026-08-18 /etc/tramontana/app.conf
@@ -6,2 +6,2 @@
-log_nivell=debug
+log_nivell=infoAmb -i.bak-$(date +%F), sed guarda l'original amb aquell sufix abans d'escriure. Sense això, si el patró estava malament —i un patró mal escrit pot buidar mig fitxer sense avisar— no hi ha marxa enrere: sed no pregunta, no avisa i no desfà. La convenció de còpia prèvia del curs i aquesta opció són el mateix, integrat en una sola ordre. Fixa't a més en les àncores ^ i $: sense elles, el patró coincidiria també dins d'un comentari.
El procediment correcte és sempre en dos passos: executar sed sense -i per veure el resultat a la pantalla, i només llavors afegir-hi -i.bak-....
awk: el llenguatge dels camps
awk: el llenguatge dels campsawk és un llenguatge de programació complet disfressat d'ordre. El seu model és:
Per a cada línia, si el patró es compleix, executa l'acció. Sense patró, s'aplica a totes; sense acció, imprimeix la línia.
Camps i variables
| Variable | Conté |
|---|---|
$0 |
la línia sencera |
$1, $2… $NF |
els camps; $NF és l'últim |
NF |
nombre de camps de la línia |
NR |
número de línia |
FS / OFS |
separador d'entrada / de sortida |
FILENAME |
nom del fitxer actual |
Per defecte FS és «qualsevol bloc d'espais o tabuladors», que és justament el que cut no sap fer:
operador@srv-tramontana:~$ awk '{print $3, $4}' /var/log/tramontana/acces.log | head -2
GET /reserves/1012
POST /reservesPer a CSV es canvia amb -F';'. Els blocs BEGIN i END s'executen abans de la primera línia i després de l'última:
operador@srv-tramontana:~$ awk -F';' 'NR>1 {n++; s+=$6} END {printf "%d reserves, %.2f EUR, mitjana %.2f\n", n, s, s/n}' \
/home/operador/dades/reserves.csv
25 reserves, 7842.50 EUR, mitjana 313.70NR>1 salta la capçalera —un patró sense claus és una condició—, les variables es creen soles amb valor 0, i printf dona format: %d enter, %.2f decimal amb dues xifres.
Condicions i matrius associatives
awk -F';' '$5 >= 5 {print $1, $3, $5}' reserves.csv retorna les tres estades de cinc nits o més. I ara la característica que fa d'awk una cosa diferent: les matrius associatives, que permeten agrupar i sumar en una sola passada.
operador@srv-tramontana:~$ awk -F';' 'NR>1 {total[$3]+=$6} END {for (c in total) printf "%-14s %8.2f\n", c, total[c]}' \
/home/operador/dades/reserves.csv | sort -k2 -nr
mas-figueres 2450.00
can-ventos 1980.00
la-solana 1425.50
cal-ferrer 1120.00
el-moli 867.00total[$3]+=$6 fa servir el nom de la casa com a índex: no cal declarar res ni saber per endavant quantes cases hi ha. El bucle for (c in total) recorre les claus —en ordre impredictible, d'aquí el sort final— i %-14s alinea a l'esquerra en 14 caràcters.
Per què awk substitueix mitja canonada: aquesta ordre fa en una passada el que exigiria cut | sort | uniq més una suma que cap de les tres no sap fer. Quan necessitis agrupar i calcular alhora, awk no és una opció entre d'altres: és l'única del conjunt que pot.
- Taula de decisió: quina eina i quan
| Necessito | Eina |
|---|---|
| Retallar camps amb delimitador fix | cut |
| Retallar camps separats per espais variables | awk '{print $N}' |
| Canviar o esborrar caràcters solts | tr |
| Filtrar línies per un patró | grep |
| Substituir text en moltes línies | sed |
| Ordenar, deduplicar, comptar freqüències | sort + uniq -c |
| Sumar, fer mitjanes, agrupar per clau | awk |
| Condicions sobre diversos camps alhora | awk |
| Diversos fitxers, JSON, estat complex, més de 20 línies | Python |
L'última fila és un consell professional, no una rendició. Una canonada de sis baules amb dos sed imbricats és més difícil de mantenir que quinze línies de Python llegible. El punt de tall raonable: si no cap en una pantalla o si l'has de dibuixar per entendre-la, canvia d'eina. I per a JSON, ni ho intentis amb sed: existeix jq.
- Cas A: informe de facturació per a la Marta
L'encàrrec: total facturat, mitjana de nits i import per casa del període carregat a reserves.csv. Es construeix per passos, verificant.
Verificació prèvia amb awk -F';' 'NR>1 {n++} END {print n, NF}': 25 registres i 6 camps. Si alguna línia no en tingués 6, qualsevol suma posterior estaria malament; la validació de 03-02 ja ens va dir que el format és correcte.
operador@srv-tramontana:~$ awk -F';' '
NR>1 { res[$3]++; nit[$3]+=$5; imp[$3]+=$6; tn+=$5; ti+=$6; tr_++ }
END {
printf "%-14s %5s %7s %10s\n", "CASA", "RES", "NITS", "IMPORT"
for (c in res) printf "%-14s %5d %7d %10.2f\n", c, res[c], nit[c], imp[c]
printf "%-14s %5d %7d %10.2f\n", "TOTAL", tr_, tn, ti
printf "Mitjana de nits per reserva: %.2f\n", tn/tr_
}' /home/operador/dades/reserves.csv
CASA RES NITS IMPORT
mas-figueres 7 21 2450.00
can-ventos 6 17 1980.00
la-solana 5 13 1425.50
cal-ferrer 4 11 1120.00
el-moli 3 8 867.00
TOTAL 25 70 7842.50
Mitjana de nits per reserva: 2.80Tres matrius associatives indexades per la mateixa clau, tres acumuladors globals i un END que formata. El programa d'awk va entre cometes simples i pot ocupar diverses línies: Bash no toca res del que hi ha a dins. Fixa't que la variable es diu tr_ i no tr: dins d'awk no hi ha conflicte amb l'ordre, però evitar noms que coincideixen amb ordres estalvia confusió en rellegir-ho.
Comprovació final imprescindible: 7+6+5+4+3 = 25 reserves i les sumes parcials donen el total. Un informe el desglossament del qual no quadra amb el total no s'entrega.
- Casos B i C: rutes amb errors i IP anòmales
B) Rutes amb més errors. Ampliem la canonada de 03-04 a tots els codis 4xx i 5xx:
operador@srv-tramontana:~$ awk '$5 ~ /^[45][0-9][0-9]$/ {print $5, $4}' /var/log/tramontana/acces.log \
| sort | uniq -c | sort -rn | head -10
9 500 /reserves
5 503 /reserves/pagament
4 500 /reserves/pagament
4 404 /cases/el-molí
1 500 /casesCinc combinacions, no deu: el llistat és curt perquè el registre ho és. Sumen 23, i els 500 sumen 14, que és exactament el que vam comptar a 03-04. $5 ~ /regex/ és la comparació per patró d'awk, aplicada només al camp del codi d'estat, cosa que evita el problema que a 03-02 resolíem envoltant el patró d'espais. I hi ha una troballa lateral: els quatre 404 de /cases/el-molí porten accent, mentre que al catàleg la casa és el-moli. Algú està generant enllaços amb el nom accentuat. No és una fallada del servidor: és una fallada de l'aplicació, i cal dir-l'hi a en Luis.
C) IP amb més peticions.
operador@srv-tramontana:~$ awk -F'ip=' '{split($2, a, " "); c[a[1]]++} END {for (i in c) print c[i], i}' \
/var/log/tramontana/acces.log | sort -rn | head -5
138 10.0.2.77
94 10.0.2.31
61 10.0.2.44
38 10.0.2.52
27 10.0.2.18-F'ip=' parteix cada línia per aquella cadena, i split($2, a, " ") talla la resta pel primer espai per quedar-se amb la IP. És una manera d'extreure un camp amb nom sense dependre de la seva posició.
La lectura de la dada és el que importa. 10.0.2.77 acumula 138 de 412 peticions —el 33 %— davant les 94 de la segona. És un atac? Encara no ho sabem, i dir que sí seria precipitat. Mirem què fa:
operador@srv-tramontana:~$ grep 'ip=10.0.2.77' /var/log/tramontana/acces.log \
| awk '{print $3, $4, $5}' | sort | uniq -c | sort -rn | head -3
124 GET /reserves 200
9 GET /reserves 500
5 POST /reserves/pagament 503Un patró uniforme, gairebé tot GET /reserves amb èxit i a ritme constant: s'assembla més a un sistema automatitzat —un monitor, un rastrejador, una integració— que a una persona. L'informe per a la Marta ha de dir això i res més: hi ha una IP que concentra un terç del trànsit amb un patró automatitzat; les dades disponibles no permeten distingir un servei legítim d'un abús; cal identificar de qui és aquella adreça abans de prendre cap mesura. Distingir el que les dades demostren del que suggereixen és part de la feina.
Errors Comuns i Consells
uniq -csensesortal davant. Només agrupa línies adjacents; el recompte sortirà fragmentat i semblarà correcte.sort -k3esperant ordenar pel camp 3. Ordena des del 3 fins al final. Escriu-k3,3.cut -d' 'sobre sortida alineada. Els espais repetits creen camps buits. Fes servirtr -s ' 'oawk.sed -isense sufix de còpia. No hi ha desfer. Sempre-i.bak-$(date +%F), i prova abans sense-i.- Oblidar
NR>1en un CSV amb capçalera. Aawkuna cadena val 0, així que no dona error: falseja el recompte en silenci. - Posar un programa d'
awkentre cometes dobles. Bash expandirà$1. Cometes simples sempre. - Comparar números com a text.
sortsense-nposa100abans que20. I ordena primer, formata després: el farciment deprintfdesalinea els camps desort. - Consell: deixa un
wc -lal final mentre construeixes una canonada; si el número canvia on no esperaves, l'error és allà. I recorda queawkaccepta diversos fitxers:FILENAMEdiu quin processa iFNRés el número de línia dins d'aquell fitxer, davant deNR, que és global.
Exercicis
Exercici 1. Genera un llistat de les cases ordenat per import mitjà per nit (import total dividit entre nits totals), de major a menor, amb dos decimals. Explica per què no n'hi ha prou de dividir la mitjana d'imports entre la mitjana de nits.
Exercici 2. El fitxer /etc/tramontana/app.conf té max_connexions=200 i timeout_consulta=30. Puja'ls a 400 i 60 respectivament en una sola ordre, amb còpia prèvia i verificació, i explica cada element del patró que facis servir.
Exercici 3. La Marta pregunta quin percentatge de les peticions d'acces.log va acabar en error (4xx o 5xx) i en quina franja horària es concentren. Respon amb una sola canonada per a cada pregunta i redacta la conclusió en dues frases.
Solucions
Solució 1.
Un primer intent amb printf "%-14s %7.2f\n", c, imp[c]/nit[c] i sort -k2 -nr surt desordenat: -k2 significa «des del camp 2 fins al final», i com que %-14s omple amb espais, el camp 2 no comença on sort es pensa. La correcció:
operador@srv-tramontana:~$ awk -F';' 'NR>1 {nit[$3]+=$5; imp[$3]+=$6}
END {for (c in nit) printf "%.2f %s\n", imp[c]/nit[c], c}' \
/home/operador/dades/reserves.csv | sort -rn
116.67 mas-figueres
116.47 can-ventos
109.65 la-solana
108.38 el-moli
101.82 cal-ferrerPosant el número primer i sense farciment, sort -rn funciona sense ambigüitat. És una tècnica que convé adoptar: ordena primer, formata després.
Sobre la pregunta: no n'hi ha prou de dividir mitjanes perquè la mitjana de quocients no és el quocient de mitjanes. Una reserva de 7 nits pesa molt més al total de nits que una de 2, i dividir promitjos les tracta totes dues igual. El càlcul correcte és el que hem fet, sumant imports i nits per separat i dividint els totals.
Solució 2.
operador@srv-tramontana:~$ sudo sed -E 's/^(max_connexions)=200$/\1=400/; s/^(timeout_consulta)=30$/\1=60/' \
/etc/tramontana/app.conf | grep -E 'max_connexions|timeout_consulta'
max_connexions=400
timeout_consulta=60
operador@srv-tramontana:~$ sudo sed -i.bak-$(date +%F) -E \
's/^(max_connexions)=200$/\1=400/; s/^(timeout_consulta)=30$/\1=60/' /etc/tramontana/app.conf
operador@srv-tramontana:~$ sudo diff -u /etc/tramontana/app.conf.bak-2026-08-18 /etc/tramontana/app.conf
@@ -4,2 +4,2 @@
-max_connexions=200
-timeout_consulta=30
+max_connexions=400
+timeout_consulta=60Cada element: -E per no escapar els parèntesis; ^ i $ perquè el patró coincideixi amb la línia sencera i no amb un fragment dins d'un comentari; el grup (clau) i el seu \1 per no repetir el nom al reemplaçament, cosa que evita errades; el valor antic al patró, que actua com a comprovació —si el fitxer ja tingués un altre valor, la substitució no s'aplicaria en comptes de trepitjar-lo a cegues—; ; per encadenar dues substitucions en una sola ordre; i -i.bak-$(date +%F) per a la còpia. La primera ordre, sense -i, és la prova en sec: només quan la seva sortida és l'esperada s'executa la segona.
Solució 3.
operador@srv-tramontana:~$ awk '$5 ~ /^[45]/ {e++} END {printf "%d de %d peticions: %.1f%%\n", e, NR, 100*e/NR}' \
/var/log/tramontana/acces.log
23 de 412 peticions: 5.6%
operador@srv-tramontana:~$ awk '$5 ~ /^[45]/ {print substr($2,1,2)":00"}' /var/log/tramontana/acces.log \
| sort | uniq -c | sort -rn | head -4
15 03:00
4 11:00
2 09:00
2 17:00substr($2,1,2) pren els dos primers caràcters del camp de l'hora. %% imprimeix un percentatge literal a printf.
El 5,6 % de les 412 peticions registrades va acabar en error, una proporció que per si sola no és alarmant. Ara bé, 15 dels 23 errors —gairebé dos terços— es concentren a la franja de les 03:00, cosa que apunta a un problema puntual durant la finestra nocturna i no a una degradació general del servei.
Aquesta concentració encaixa amb el que veníem veient: els db_timeout d'errors.log, el timeout_consulta=30 esgotat i les connexions_actives=200 al límit configurat. Tot assenyala la tasca nocturna que competeix per les connexions de la base de dades amb les peticions dels usuaris.
Conclusió
Has convertit dos fitxers de text en informes defensables, i de passada has tancat el cercle que va obrir la filosofia Unix del Mòdul 1: el text pla com a interfície universal entre programes que no es coneixen.
cutretalla per delimitador fix, amb el seu límit davant de delimitadors repetits;trtradueix, esborra i comprimeix caràcters.sortordena per camp amb la sintaxi real-kN,N, amb-n,-h,-V,-ui-o;uniq -ccompta i exigeix entrada ordenada, i el patrósort | uniq -c | sort -rnrespon a qualsevol pregunta de freqüència.- Coneixes
paste,joinicommper comparar llistats, i la substitució de procés<(...)per no crear temporals. sedprocessa línia a línia; maneges adreces, l'ordresamb els seus indicadors i delimitadors alternatius,d,pamb-n, els grups de captura, i saps que-i.bak-$(date +%F)no és opcional i que abans va sempre la prova sense-i.awket donapatró { acció }, els camps$1…$NF,NR,NF,FS,BEGIN/END,printfi les matrius associatives que agrupen i sumen en una passada, substituint mitja canonada.- Tens una taula de decisió i un criteri per saber quan toca passar a Python.
- I has produït tres informes reals: la facturació per casa amb el seu desglossament quadrat, les rutes amb més errors —descobrint de passada una fallada de l'aplicació amb l'accent d'
el-molí— i la IP que concentra un terç del trànsit, amb l'honestedat de dir què demostren les dades i què només suggereixen.
Fins aquí has treballat amb fitxers. La lliçó següent canvia d'objecte: Gestió de Processos s'ocupa dels programes en execució. Veuràs què és un PID i com s'organitza l'arbre de processos des de systemd, com llegir ps aux i top columna a columna —inclòs què signifiquen de debò els tres números de la càrrega mitjana—, quins senyals existeixen i per què un professional prova SIGTERM i espera abans de recórrer a kill -9, i com esbrinar amb lsof quin procés té ocupat un port o un fitxer. El cas pràctic ja t'hi esperarà plantejat: l'aplicació de Tramontana es queda penjada de matinada, just en aquella franja de les 03:00 que acabes d'identificar, i cal diagnosticar-la i reiniciar-la sense perdre les peticions en curs.
Curs de Linux: De Principiant a Administrador de Sistemes
Mòdul 1: Introducció a Linux
- Què és Linux?
- Història de Linux
- Distribucions de Linux
- Instal·lant Linux
- Primer Contacte amb el Sistema
- Estructura del Sistema de Fitxers de Linux
Mòdul 2: Comandes Bàsiques de Linux
- Introducció a la Línia de Comandes
- Obtenir Ajuda i Documentació del Sistema
- Navegant pel Sistema de Fitxers
- Operacions amb Fitxers i Directoris
- Visualització i Edició de Fitxers
- Enllaços Durs i Simbòlics
- Permisos i Propietat dels Fitxers
Mòdul 3: Habilitats Avançades en la Línia de Comandes
- L'Entorn del Shell: Variables, Àlies i Historial
- Ús de Comodins i Expressions Regulars
- Cerca de Fitxers i Contingut: find, locate i grep
- Canonades i Redirecció
- Processament de Text: cut, sort, uniq, sed i awk
- Gestió de Processos
- Programació de Tasques amb Cron
- Comandes de Xarxa
Mòdul 4: Scripting en Shell
- Introducció al Scripting en Shell
- Variables i Tipus de Dades
- Entrada, Sortida i Arguments d'un Script
- Estructures de Control
- Funcions i Biblioteques
- Depuració i Gestió d'Errors
- Scripts de Producció: Bones Pràctiques
Mòdul 5: Administració del Sistema
- Gestió d'Usuaris i Grups
- sudo i Permisos Especials
- Gestió de Paquets
- Gestió de Discs
- systemd i la Gestió de Serveis
- Registres del Sistema: journald i syslog
- Monitoratge del Sistema i Optimització del Rendiment
- Còpies de Seguretat i Restauració
Mòdul 6: Xarxes i Seguretat
- Configuració de Xarxes
- SSH i Accés Remot
- Tallafocs i Seguretat Perimetral
- Sistemes de Detecció d'Intrusions
- Gestió de Secrets i Certificats TLS
- Assegurant Sistemes Linux
Mòdul 7: Temes Avançats
- El Procés d'Arrencada i la Recuperació del Sistema
- Diagnòstic Avançat: strace, perf i eBPF
- Optimització del Nucli de Linux
- Virtualització amb Linux
- Contenidors de Linux i Docker
- Automatització amb Ansible
- Alta Disponibilitat i Balanceig de Càrrega
