A la lliçó anterior vas tancar el model mental del shell: saps què passa en prémer Enter, com es resolen les ordres i per què les variables no sobreviuen a un subshell. Queda una habilitat transversal abans d'entrar a l'arsenal d'ordres del Mòdul 2, i és probablement la més rendible de tot el curs: saber resoldre dubtes pel teu compte. Cap professional no recorda les quaranta opcions de find, l'ordre dels camps d'un crontab ni les diferències entre -exec i xargs. El que sí que sap és on mirar-ho en deu segons i com verificar una ordre perillosa abans de llançar-la contra srv-veloz-01. Això és el que aprendràs aquí.

Contingut

  1. L'ecosistema de documentació a Linux
  2. man: el manual del sistema
  3. Les seccions del manual
  4. Navegar i cercar dins d'una pàgina de manual
  5. Llegir un SYNOPSIS: la notació formal
  6. Cercar quan no saps el nom de l'ordre: man -k i apropos
  7. help: els builtins de Bash i per què man cd falla
  8. --help: l'ajuda ràpida
  9. info, tldr i cheat
  10. Documentació oficial: manual de Bash i POSIX
  11. Estratègia pràctica per resoldre dubtes
  12. Verificar ordres perilloses abans d'executar-les

  1. L'ecosistema de documentació a Linux

Linux és probablement el sistema més ben documentat que existeix, però la documentació està repartida en diverses fonts amb propòsits diferents. Saber quina consultar en cada moment estalvia moltíssim temps.

Font Com s'invoca Cobreix Profunditat Quan fer-la servir
man man ls Programes externs, formats de fitxer, crides al sistema Alta, exhaustiva Referència completa i fiable
help help cd Builtins de Bash Mitjana cd, export, test, read...
--help ls --help El mateix programa Baixa, resum Recordar una opció de pressa
info info coreutils Manuals extensos de GNU Molt alta Quan man remet a info
tldr tldr tar Exemples d'ús reals Molt baixa «Com es feia això?»
Manual de Bash Web o man bash El llenguatge Bash complet Màxima Dubtes de sintaxi del shell
POSIX Web L'estàndard Màxima Portabilitat

La regla mental que has d'interioritzar és simple:

  • Si és un programa (ls, grep, tar, find) → man.
  • Si és un builtin de Bash (cd, export, read, test) → help.
  • Si és sintaxi del shell ([[ ]], expansions, redireccions) → man bash.
  • Si només vols un exempletldr.

  1. man: el manual del sistema

man (de manual) és la referència canònica. Cada programa instal·lat porta la seva pàgina, escrita pel seu autor.

man ls

S'obre un document amb una estructura estandarditzada que veuràs un cop i un altre:

Secció Contingut
NAME Nom i descripció d'una línia
SYNOPSIS Forma d'invocació amb la seva sintaxi formal
DESCRIPTION Explicació detallada i llista d'opcions
OPTIONS Les opcions, si no són a DESCRIPTION
EXIT STATUS Codis de sortida i el seu significat
ENVIRONMENT Variables d'entorn que afecten el programa
FILES Fitxers que fa servir o llegeix
EXAMPLES Exemples d'ús (no totes les pàgines en tenen)
SEE ALSO Ordres relacionades
BUGS Limitacions conegudes

Un extracte real de man ls:

NOM
       ls - llista el contingut de directoris

SINOPSI
       ls [OPCIÓ]... [FITXER]...

DESCRIPCIÓ
       Llista informació sobre els FITXERs (del directori actual per omissió).
       Ordena les entrades alfabèticament si no s'especifica cap de
       -cftuvSUX ni --sort.

       -a, --all
              no oculta les entrades que comencen per .

       -h, --human-readable
              amb -l i/o -s, imprimeix mides llegibles (p. ex., 1K 234M 2G)

       -t     ordena per hora de modificació, la més nova primer

Fixa't en dues coses que apareixen constantment:

  • Les opcions amb forma curta i llarga es llisten juntes: -a, --all.
  • Hi ha dependències entre opcions: -h diu explícitament «amb -l i/o -s». És a dir, ls -h tot sol no fa res visible. Aquest tipus de matís només apareix al manual, mai en un tutorial precipitat.

I la secció ESTAT DE SORTIDA de man ls confirma el que vam veure a 01-04:

ESTAT DE SORTIDA
       0      si tot va bé,
       1      si hi ha problemes menors (p. ex. no es pot accedir a un subdirectori),
       2      si hi ha problemes seriosos (p. ex. no es pot accedir a un argument de
              la línia d'ordres).

  1. Les seccions del manual

El manual està dividit en seccions numerades. És important perquè un mateix nom pot aparèixer en diverses.

Secció Contingut Exemple
1 Ordres d'usuari man 1 crontab → el programa crontab
2 Crides al sistema (kernel) man 2 fork
3 Funcions de biblioteca C man 3 printf
4 Fitxers especials de /dev man 4 null
5 Formats de fitxer i convencions man 5 crontab → el format del fitxer
6 Jocs man 6 fortune
7 Miscel·lània, convencions, protocols man 7 regex, man 7 signal
8 Ordres d'administració man 8 mount, man 8 cron

Les tres que faràs servir de debò són la 1 (ordres), la 5 (formats de fitxer) i la 8 (administració).

L'exemple canònic de per què això importa és crontab, que farem servir al Mòdul 7:

man 1 crontab
CRONTAB(1)                    Ordres d'usuari
NOM
       crontab - manipula les taules cron de cada usuari
SINOPSI
       crontab [-u usuari] fitxer
       crontab [-u usuari] [-l | -r | -e]
man 5 crontab
CRONTAB(5)                Formats de fitxer
NOM
       crontab - fitxers usats per programar l'execució d'ordres

DESCRIPCIÓ
       ...
       camp           valors permesos
       ----           ---------------
       minut          0-59
       hora           0-23
       dia del mes    1-31
       mes            1-12 (o noms)
       dia de setmana 0-7 (0 o 7 és diumenge, o noms)

La secció 1 et diu com s'invoca el programa; la secció 5 et diu com s'escriu el fitxer. Si escrius man crontab a seques, obtens la 1, que no conté la taula de camps. Moltíssima gent s'encalla aquí i acaba cercant a internet una cosa que tenia a una ordre de distància.

Per saber en quines seccions existeix un nom:

man -f crontab
crontab (1)          - manipula les taules cron de cada usuari
crontab (5)          - fitxers usats per programar l'execució d'ordres

I per obrir-les directament totes, una rere l'altra:

man -a crontab

  1. Navegar i cercar dins d'una pàgina de manual

man no mostra el text de cop: el passa a un paginador, normalment less. Per això les dreceres de man són en realitat les de less, i també et serviran quan llegeixis registres llargs.

Tecla Acció
Espai / f Avançar una pantalla
b Retrocedir una pantalla
/ j Baixar una línia
/ k Pujar una línia
g Anar al principi
G Anar al final
/text Cercar cap endavant
?text Cercar cap enrere
n Coincidència següent
N Coincidència anterior
q Sortir
h Ajuda del mateix paginador

La cerca amb / és la tècnica més important d'aquesta lliçó. Una pàgina de manual com la de find té més de mil línies; llegir-la sencera és absurd. El que es fa és cercar.

Exemple real: vols saber com fer que ls ordeni per mida.

man ls

A dins, teclegeu /sort i premeu Enter. Prem n fins a arribar a:

       -S     ordena per mida de fitxer, la més gran primer

Un altre exemple encara més útil, cercant una opció concreta. Per localitzar la descripció exacta de -t a man ls, la cerca /^\s*-t aprofita que les opcions estan indentades al principi de línia. Les expressions regulars s'estudien a 05-04, però des d'avui pots fer servir el truc de cercar -t, o directament --sort.

Un consell de configuració: si prefereixes que les cerques ignorin les majúscules, exporta això al teu ~/.bashrc:

export LESS='-R -i'

-R respecta els colors i -i fa les cerques insensibles a majúscules tret que n'escriguis alguna.

  1. Llegir un SYNOPSIS: la notació formal

El SYNOPSIS és la part més densa i la que més gent ignora, quan en realitat condensa tota la gramàtica de l'ordre. Fa servir una notació estàndard:

Notació Significat Exemple
text en negreta Escriu-ho tal qual ls
TEXT en cursiva/majúscules Substitueix-ho pel teu valor FITXER
[ ] Opcional [OPCIÓ]
... Es pot repetir [FITXER]...
| Alternativa: tria'n una [-l | -r | -e]
{ } Agrupació d'alternatives obligatòries {-a | -b}

Analitzem casos reals.

ls [OPCIÓ]... [FITXER]...

Es llegeix: ls accepta zero o més opcions i zero o més fitxers. Tots dos són opcionals, per això ls a seques funciona.

cp [OPCIÓ]... ORIGEN... DIRECTORI

Es llegeix: cp accepta opcions (opcionals), un o més orígens (obligatoris, sense claudàtors) i un directori de destinació (obligatori, sense punts suspensius). L'estructura et diu d'un cop d'ull que el darrer argument és la destinació i que hi pot haver diversos orígens.

crontab [-u usuari] [-l | -r | -e]

Es llegeix: opcionalment -u amb un nom d'usuari, i opcionalment una sola de les tres opcions -l, -r, -e. La barra vertical avisa que són mútuament excloents: crontab -l -e no té cap sentit.

grep [OPCIONS] PATRONS [FITXER...]

Es llegeix: el patró és obligatori; els fitxers són opcionals i en poden ser diversos. Que FITXER sigui opcional és la pista que, si no l'indiques, grep llegirà de l'entrada estàndard, que és justament el que permet fer-lo servir en canonades.

Aprendre a llegir el SYNOPSIS et permet deduir el comportament d'una ordre sense llegir ni una línia de la descripció.

  1. Cercar quan no saps el nom de l'ordre: man -k i apropos

El problema més freqüent no és «com es fa servir aquesta ordre?», sinó «quina ordre fa això?». Per a això hi ha la cerca per paraula clau a les descripcions.

man -k compress
gzip (1)             - comprimeix o expandeix fitxers
bzip2 (1)            - un compressor de fitxers ordenador per blocs
xz (1)               - comprimeix o descomprimeix fitxers .xz
zcat (1)             - descomprimeix fitxers a la sortida estàndard

apropos és exactament el mateix:

apropos "disk space"
df (1)               - informa sobre l'espai de disc ocupat
du (1)               - estima l'espai ocupat pels fitxers

Pots acotar la cerca a una secció:

man -k -s 1 "log"

I combinar-la amb grep per filtrar més:

man -k file | grep -i "permission"
chmod (1)            - canvia els bits de mode d'un fitxer
chown (1)            - canvia el propietari i el grup d'un fitxer

Si man -k retorna res apropiat, probablement la base de dades d'índexs no està construïda. S'arregla amb:

sudo mandb

  1. help: els builtins de Bash i per què man cd falla

Recuperem una cosa de la lliçó 01-04. Prova això:

man cd
No hi ha entrada de manual per a cd

L'explicació ja la coneixes: cd no és cap programa, és un builtin de Bash. No existeix cap fitxer /usr/bin/cd que pugui portar la seva pròpia pàgina de manual. La documentació dels builtins viu dins del mateix Bash, i es consulta amb help:

help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
    Canvia el directori de treball del shell.

    Canvia el directori actual a DIR. DIR per defecte és el valor de la
    variable de shell HOME.

    Opcions:
      -L	força a seguir els enllaços simbòlics: resol els enllaços
    		simbòlics a DIR després de processar les instàncies de '..'
      -P	usa l'estructura física de directoris sense seguir els enllaços
    		simbòlics: resol els enllaços simbòlics a DIR abans de
    		processar les instàncies de '..'

    Estat de sortida:
    Retorna 0 si es canvia el directori, i si $PWD s'estableix
    correctament quan s'usa -P; si no, és diferent de zero.

Comprovació ràpida de la regla, recolzant-nos en type (01-04):

type -a cd export ls
cd és una ordre interna del shell      ← help cd
export és una ordre interna del shell  ← help export
ls és /usr/bin/ls                      ← man ls

Si type diu «ordre interna del shell», fes servir help. Si et dona una ruta, fes servir man.

Builtins l'ajuda dels quals consultaràs sovint durant aquest curs:

help test        # comparacions amb [ ... ]
help read        # llegir entrada de l'usuari (03-05)
help declare     # tipus de variables i arrays (04-03)
help printf      # sortida formatada
help set         # opcions del shell: set -e, set -u...
help trap        # capturar senyals (05-03)

Sense arguments, help llista tots els builtins disponibles:

help

I admet patrons:

help 'ex*'
exec: exec [-cl] [-a nom] [ordre [arguments ...]] [redirecció ...]
exit: exit [n]
export: export [-fn] [nom[=valor] ...] o export -p

Hi ha un cas especial que convé conèixer. Alguns builtins també existeixen com a programa extern, així que tenen totes dues documentacions:

type -a test
test és una ordre interna del shell
test és /usr/bin/test

help test documenta el builtin que realment s'executa; man test documenta el programa de coreutils. Són gairebé idèntics, però no del tot. La correcta és help test, perquè és la que Bash fa servir. El mateix passa amb echo, printf, kill i pwd.

Finalment, per a la sintaxi del mateix llenguatge (no un builtin, sinó construccions com [[ ]], ${var%%patró} o les redireccions), la font és la pàgina de manual de Bash:

man bash

És enorme (més de 5.000 línies), així que es navega cercant. Per exemple, teclegeu /Conditional Expressions per arribar a la documentació de [[ ]], o /Parameter Expansion per a la de ${...}. És la referència definitiva del shell i hi tornaràs durant tot el curs.

  1. --help: l'ajuda ràpida

Gairebé tots els programes accepten --help i mostren un resum a la pantalla.

date --help
Forma d'ús: date [OPCIÓ]... [+FORMAT]
  o bé:     date [-u|--utc|--universal] [MMDDhhmm[[CC]AA][.ss]]
Mostra la data actual en el FORMAT indicat.

  -d, --date=CADENA          mostra la data descrita per CADENA, no «ara»
  -f, --file=FITXER_DATA     com --date, un cop per cada línia de FITXER_DATA
  -r, --reference=FITXER     mostra l'última data de modificació de FITXER
  -u, --utc, --universal     mostra o estableix el Temps Universal Coordinat

CADENES DE FORMAT:
  %Y   any
  %m   mes (01..12)
  %d   dia del mes (01..31)
  %H   hora (00..23)

Avantatges davant de man: és instantani, no obre cap paginador i sol cabre en una pantalla. És el que faràs servir el 80 % de les vegades per recordar una opció concreta.

Advertiments importants:

  • No és universal. Alguns programes fan servir -h, d'altres -?, i uns quants cap de les dues. Si --help no funciona, prova -h i després man.
  • Compte amb les ordres que interpreten --help com a argument. Un cas famós: a find, --help sí que funciona, però en programes antics un argument desconegut pot provocar comportaments estranys.
  • Si la sortida és llarga, canalitza-la a un paginador:
find --help | less

Un truc molt pràctic quan cerques una opció concreta: filtra l'ajuda amb grep.

ls --help | grep -i "mida"
  -h, --human-readable       amb -l i -s, imprimeix les mides de forma llegible
      --block-size=MIDA      amb -l, escala les mides segons MIDA
  -S                         ordena per mida de fitxer, la més gran primer
      --size, -s             imprimeix la mida assignada de cada fitxer, en blocs

En quatre línies tens totes les opcions relacionades amb mides. Aquesta combinació ordre --help | grep és un reflex que adquiriràs de pressa.

  1. info, tldr i cheat

9.1 info

El projecte GNU documenta les seves eines amb info, un format amb hipervincles i estructura d'arbre. Moltes pàgines man de GNU són en realitat resums i acaben amb una nota del tipus «la documentació completa és al manual info».

info coreutils 'ls invocation'

Navegació bàsica:

Tecla Acció
Espai Avançar
n / p Node següent / anterior
u Pujar un nivell
Enter sobre un enllaç Seguir-lo
q Sortir

info és més complet que man per a les coreutils (conté exemples i explicacions extenses), però la seva navegació resulta incòmoda per a qui no hi està acostumat. Recorre-hi quan man et deixi amb dubtes.

9.2 tldr

tldr (too long; didn't read) és un projecte comunitari que ofereix només exemples pràctics. És el complement perfecte de man: aquest et diu què fa cada opció, aquell et diu com es fa servir de debò.

sudo apt install tldr    # Debian/Ubuntu
tldr tar
tar

Utilitat d'arxivament, sovint combinada amb compressió.

- Crear un arxiu comprimit:
  tar czf ruta/a/l-arxiu.tar.gz ruta/a/fitxers

- Extreure un arxiu comprimit:
  tar xzf ruta/a/l-arxiu.tar.gz

- Llistar el contingut sense extreure:
  tar tvf ruta/a/l-arxiu.tar

Compara: man tar té més de 1.200 línies; tldr tar cap en mitja pantalla i resol el 90 % dels casos. Per a ordres amb sintaxi intricada (tar, find, ffmpeg, awk) és una benedicció.

9.3 cheat

cheat és similar però permet crear les teves pròpies xuletes, cosa que encaixa molt bé amb un toolkit com veloz-ops:

cheat -e veloz-ops

S'obre el teu editor i pots desar-hi les teves pròpies notes, que després consultes amb cheat veloz-ops. És una manera excel·lent de documentar convencions internes de l'equip.

Un advertiment sobre tldr i cheat: són contingut comunitari, no oficial. Estan molt bé per recordar, però quan una cosa sigui crítica o el comportament no coincideixi, la veritat és a man.

  1. Documentació oficial: manual de Bash i POSIX

Hi ha dues referències escrites que tot professional de Bash ha de conèixer.

10.1 El Manual de Referència de Bash

És el document oficial del projecte GNU, mantingut per Chet Ramey. Cobreix el llenguatge complet: gramàtica, expansions, builtins, control de treballs, edició de línia. Està disponible al web de GNU i, en local, amb:

info bash
man bash

És la font que tanca qualsevol discussió sobre el comportament de Bash. Quan al Mòdul 3 ens preguntem exactament en quin ordre passen les expansions, la resposta és a la seva secció EXPANSION.

10.2 L'estàndard POSIX

POSIX (Portable Operating System Interface) és l'estàndard que defineix el comportament mínim comú dels shells Unix. El publica The Open Group i és la referència per escriure scripts portables.

La seva utilitat pràctica és respondre la pregunta: «això que estic fent servir és de Bash o és estàndard?». Si és només de Bash, el teu script no funcionarà a dash, a Alpine ni en un BSD. La documentació de Bash marca les seves extensions, i a la lliçó 08-07 treballarem la portabilitat en detall.

10.3 ShellCheck (menció)

ShellCheck és un analitzador estàtic que detecta errors en scripts de shell abans d'executar-los: variables sense cometes, comparacions mal escrites, usos que provoquen comportaments inesperats. Cada avís porta un codi SCxxxx (per exemple, SC2086 per a «les cometes dobles eviten la divisió en paraules»), i el wiki del projecte explica cadascun amb exemples de què falla i com corregir-ho.

L'esmentem aquí perquè és documentació: el wiki de ShellCheck és una de les millors fonts per entendre els errors clàssics de Bash. La seva instal·lació i el seu ús els veurem a la lliçó 08-05; de moment, queda't amb el nom.

  1. Estratègia pràctica per resoldre dubtes

Amb tantes fonts, convé tenir un procediment. Aquest és el que funciona.

graph TD
    A["Tinc un dubte"] --> B{"Sé el nom<br/>de l'ordre?"}
    B -->|No| C["man -k paraula clau<br/>apropos"]
    C --> D
    B -->|Sí| D{"type -a ordre"}
    D -->|"Ordre interna"| E["help ordre"]
    D -->|"Ruta a fitxer"| F{"Necessito una opció<br/>o el detall complet?"}
    F -->|"Només una opció"| G["ordre --help filtrat amb grep"]
    F -->|"Detall"| H["man ordre<br/>+ / per cercar"]
    D -->|"És sintaxi del shell"| I["man bash + /secció"]
    E --> J{"Resolt?"}
    G --> J
    H --> J
    I --> J
    J -->|No| K["tldr ordre<br/>info ordre<br/>manual oficial"]
    J -->|Sí| L["Verificar abans d'executar"]
    K --> L

Traduït a passos concrets:

  1. Sé el nom? Si no, man -k amb una paraula clau en anglès (les descripcions són en anglès a la majoria de sistemes).
  2. type -a ordre per saber si és builtin, externa o keyword. Això decideix la font.
  3. Ajuda ràpida primer: ordre --help | grep elQueCerco. Resol la majoria de les consultes en segons.
  4. Si necessites detall, man ordre i cerca-hi dins amb /. No llegeixis de dalt a baix.
  5. Si continua sense quedar clar, tldr ordre per veure exemples reals, o info per a les eines GNU.
  6. Verifica abans d'executar (secció següent). Aquest pas no és opcional en un servidor de producció.

Un consell de mètode que marca la diferència: quan aprenguis una cosa consultant el manual, anota-la. Un fitxer ~/veloz-ops/etc/notes.md amb les opcions que has necessitat converteix cada cerca en coneixement acumulat en lloc d'una consulta repetida.

  1. Verificar ordres perilloses abans d'executar-les

Aquesta secció pot estalviar-te un incident greu. A srv-veloz-01 hi ha dades de producció; una ordre mal entesa pot esborrar els enviaments d'un mes.

12.1 Posar echo al davant

La tècnica més simple i més eficaç: anteposa echo i mira què s'hauria executat realment. Recorda de la lliçó 01-04 que les expansions passen abans d'executar l'ordre, així que echo t'ensenya el resultat exacte d'aquestes expansions.

cd /var/log/veloz
echo rm acces.log.*
rm acces.log.1 acces.log.2 acces.log.3

Ara veus amb precisió quins fitxers afectaria. Si la llista és la que esperaves, treu l'echo i executa. Si hi apareix una cosa inesperada, acabes d'evitar un problema.

El cas on això salva de debò:

echo rm -rf /srv/veloz/dades /historic
rm -rf /srv/veloz/dades /historic

L'espai accidental abans de /historic converteix una ruta en dos arguments independents. Amb echo ho veus; sense echo, hauries esborrat dos arbres diferents.

12.2 Fer servir --dry-run quan existeixi

Moltes ordres ofereixen un mode de simulació:

Ordre Opció de simulació
rsync -n, --dry-run
apt --dry-run, -s
make -n, --just-print
git clean -n
find ... -delete Treure -delete i veure la llista primer
sed -i Executar sense -i i veure la sortida
rsync -avn /srv/veloz/dades/ /mnt/backup/dades/

La n de --dry-run fa que rsync llisti exactament el que copiaria, sense copiar res. A la lliçó 07-03, quan construïm el sistema de còpia de seguretat de veloz-ops, aquest serà el primer pas obligatori de cada prova.

Com descobrir si una ordre té mode simulació:

rsync --help | grep -i "dry"
 -n, --dry-run               fa una execució de prova sense fer canvis

12.3 Altres precaucions

  • Executa primer la part que només llegeix. Abans de find /srv -name "*.tmp" -delete, executa find /srv -name "*.tmp" i revisa la llista.
  • Fes servir -i (interactiu) en ordres destructives. rm -i pregunta per cada fitxer.
  • Comprova on ets i qui ets. pwd i whoami abans de qualsevol esborrat. Un rm -rf * al directori equivocat és irreversible.
  • Desconfia de les ordres copiades d'internet, sobretot les que porten sudo, curl | bash, rm -rf o rutes absolutes al sistema. Llegeix-les senceres, descompon-les i cerca a man cada opció que no reconeguis.
  • A Linux no hi ha paperera. rm no es desfà.

Un exercici de lectura crítica. Algú et passa aquesta línia «per netejar registres vells»:

find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;

Abans d'executar-la, la descompons consultant man find:

  • -name "*.log": fitxers acabats en .log.
  • -mtime +7: modificats fa més de 7 dies. (Cercant /mtime al manual descobreixes que +7 significa «més de 7 dies complets», un matís que se sol malinterpretar.)
  • -exec rm -f {} \;: executa rm -f sobre cada resultat.

I hi detectes el problema: actua sobre tot /var/log, no només sobre /var/log/veloz. Esborraria també els registres del sistema i de nginx. La versió segura seria:

# Primer mirar, sense esborrar res
find /var/log/veloz -name "*.log.*" -mtime +7

# Només si la llista és correcta
find /var/log/veloz -name "*.log.*" -mtime +7 -delete

Aquest hàbit —descompondre, consultar, llistar i només llavors executar— és el que separa un professional d'algú que un dia té un dia molt dolent.

Errors Habituals i Consells

  • Cercar man cd i concloure que la documentació no existeix. És un builtin: help cd. Comprova sempre amb type -a primer.
  • Escriure man crontab i no trobar el format del fitxer. Necessites la secció 5: man 5 crontab. Fes servir man -f nom per veure en quines seccions existeix.
  • Llegir una pàgina de manual de dalt a baix. Són documents de referència, no tutorials. Entra-hi i cerca amb /.
  • Refiar-se de tldr per a una cosa crítica. És contingut comunitari i pot estar desactualitzat. Per a decisions importants, man.
  • Ignorar la secció SEE ALSO. Sol contenir justament l'ordre que necessitaves i no sabies que existia.
  • No llegir EXIT STATUS. Si penses fer servir una ordre dins d'un script, els seus codis de sortida són tan importants com les seves opcions.
  • Executar ordres destructives sense verificar. echo al davant, o --dry-run. Sempre, fins i tot quan et pensis que ho tens clar.
  • Consell: si man -k no retorna res, executa sudo mandb per reconstruir l'índex.
  • Consell: man man i man bash mereixen una lectura pausada almenys un cop a la vida. No per memoritzar-les, sinó per saber què contenen.
  • Consell: quan un manual sigui en anglès i et costi, recorda que els termes són sempre els mateixos (pattern, recursive, verbose, overwrite, suppress). En una setmana els reconeixes tots.

Exercicis

Exercici 1: Cercar opcions reals a man ls i man grep

Fent servir exclusivament les pàgines de manual (res de cercadors web), esbrina:

  1. Quina opció d'ls mostra el número d'inode de cada fitxer.
  2. Quina opció d'ls ordena per data de modificació de més antiga a més recent (n'has de combinar dues).
  3. Quina opció de grep mostra les 3 línies següents a cada coincidència.
  4. Quina opció de grep mostra només el nom dels fitxers que contenen la coincidència, sense les línies.
  5. Quina opció de grep inverteix la cerca i mostra les línies que no coincideixen.

Després, aplica el que has après a un cas de Veloz Envíos: mostra els fitxers de /var/log/veloz ordenats de més antic a més recent, i localitza a app.log cada ERROR amb les seves 3 línies de context posterior.

Exercici 2: help test i els builtins

  1. Comprova amb type -a si test és builtin, extern o totes dues coses.
  2. Amb help test, esbrina què fan els operadors -f, -d, -r, -s i -z.
  3. Esbrina també com es comprova si un fitxer és més recent que un altre.
  4. Escriu una ordre d'una sola línia que imprimeixi «existeix» si /var/log/veloz/app.log existeix i té contingut.

Exercici 3: Verificació d'una ordre perillosa

Un company t'envia aquesta ordre «per alliberar espai al servidor»:

find /srv/veloz -type f -name "*.csv" -mtime +30 -exec rm -f {} \;
  1. Descompon-la consultant man find i explica'n cada part.
  2. Esbrina què significa exactament +30 a -mtime (cerca-ho al manual, no ho suposis).
  3. Identifica almenys dos riscos d'executar-la tal qual a Veloz Envíos.
  4. Proposa una versió verificable i més segura.

Solucions

Solució a l'Exercici 1

Procediment: man ls, després /inode, /sort, etc. Alternativa ràpida: ls --help | grep -i inode.

  1. -i, --inode: imprimeix el número d'índex de cada fitxer.
  2. -t combinat amb -r: -t ordena per data amb el més nou primer, i -r inverteix l'ordre. Per tant ls -ltr. És una de les combinacions més usades en administració de sistemes: deixa el més recent al capdavall de tot, just damunt del prompt, que és on mires.
  3. -A NUM, --after-context=NUM: mostra NUM línies posteriors. Amb -B s'obtenen les anteriors i amb -C totes dues.
  4. -l, --files-with-matches: només el nom dels fitxers amb coincidència.
  5. -v, --invert-match: selecciona les línies que no coincideixen.

Aplicació a Veloz Envíos:

ls -ltr /var/log/veloz
total 47M
-rw-r--r-- 1 veloz    veloz 2,1M ago  2 23:59 app.log.1
-rw-r--r-- 1 www-data adm   9,4M ago  2 23:59 acces.log.1
-rw-r--r-- 1 veloz    veloz 1,3M ago  3 09:02 veloz-api.log
-rw-r--r-- 1 www-data adm    28M ago  3 10:14 acces.log
-rw-r--r-- 1 veloz    veloz 6,0M ago  3 10:15 app.log
grep -A 3 'ERROR' /var/log/veloz/app.log | head -20
2026-08-03 10:12:04 [ERROR] Timeout en connectar amb passarel·la de pagament (enviament E-4471)
2026-08-03 10:12:05 [INFO] Reintent 1 de 3 per a l'enviament E-4471
2026-08-03 10:12:09 [INFO] Reintent 2 de 3 per a l'enviament E-4471
2026-08-03 10:12:14 [WARN] Reintents esgotats, marcant E-4471 com a incidencia
--
2026-08-03 10:14:31 [ERROR] No s'ha pogut escriure a /srv/veloz/dades/enviaments.csv

El context posterior és justament el que necessites per entendre un error: la línia de l'ERROR diu què va fallar, i les següents diuen com hi va reaccionar l'aplicació. Les separacions -- marquen blocs no contigus.

Solució a l'Exercici 2

type -a test
test és una ordre interna del shell
test és /usr/bin/test
  1. És totes dues coses: existeix com a builtin de Bash i com a programa de coreutils. Bash fa servir el builtin (els builtins tenen prioritat sobre el PATH, com vam veure a 01-04), així que la documentació rellevant és help test.

  2. Consultant help test:

Operador Cert si...
-f FITXER Existeix i és un fitxer regular
-d FITXER Existeix i és un directori
-r FITXER Existeix i hi tens permís de lectura
-s FITXER Existeix i la seva mida és més gran que zero
-z CADENA La cadena té longitud zero
  1. FITXER1 -nt FITXER2 (newer than): cert si FITXER1 és més recent, segons la data de modificació, que FITXER2. També existeix -ot (older than) i -ef (mateix dispositiu i inode). Aquest operador ens serà molt útil al Mòdul 7 per saber si una còpia de seguretat està al dia.

  2. -s FITXER aplicat al nostre registre d'aplicació:

test -s /var/log/veloz/app.log && echo "existeix"
existeix

-s és més apropiat que -f aquí, perquè comprova alhora que existeix i que no és buit. L'operador && executa la segona part només si la primera ha retornat codi 0; és una aplicació directa dels codis de sortida de la lliçó 01-04 i es formalitza a 03-03. Escrit amb la sintaxi moderna seria:

[[ -s /var/log/veloz/app.log ]] && echo "existeix"

Solució a l'Exercici 3

  1. Descomposició (consultant man find):
Part Significat
/srv/veloz Directori on comença la cerca, recursiva per defecte
-type f Només fitxers regulars (ni directoris ni enllaços)
-name "*.csv" El nom dels quals acabi en .csv
-mtime +30 Modificats fa més de 30 dies
-exec rm -f {} \; Executa rm -f sobre cada resultat; {} se substitueix pel nom i \; tanca l'-exec
  1. Què significa +30. Cercant /mtime a man find es troba:
       -mtime n
              El fitxer va ser modificat per última vegada fa n*24 hores.
              Quan find calcula quants períodes de 24 hores fa,
              qualsevol part fraccionària s'ignora...

I a la secció prèvia sobre arguments numèrics:

       +n     per a més gran que n,
       -n     per a més petit que n,
       n      per a exactament n.

Per tant +30 significa modificat fa més de 30 períodes complets de 24 hores. El matís important és que la part fraccionària es descarta: un fitxer de 30 dies i 20 hores compta com a 30, no pas com a 31, i no seria seleccionat. Aquest comportament sorprèn molta gent i només està escrit al manual.

  1. Riscos:

    • Abast excessiu: actua sobre tot /srv/veloz de manera recursiva, inclòs el subdirectori historic, que precisament conté fitxers antics que es guarden a propòsit. Esborraria l'arxiu històric d'enviaments.
    • Irreversibilitat sense verificació: rm -f no pregunta ni deixa rastre, i a Linux no hi ha paperera. Si el criteri és incorrecte, les dades es perden.
    • Risc addicional: -exec ... \; llança un procés rm per fitxer, cosa que amb milers de fitxers és molt lenta i pot saturar el servidor. La forma eficient és -exec rm -f {} + o -delete.
    • Risc amb noms estranys: si algun fitxer tingués un nom amb caràcters especials, certes variants d'aquest patró fallen. Amb -delete s'evita.
  2. Versió segura i verificable:

# Pas 1: veure exactament què se seleccionaria, acotant l'abast
find /srv/veloz/dades -maxdepth 1 -type f -name "enviaments-*.csv" -mtime +30

# Pas 2: revisar la llista amb detall (mida i data)
find /srv/veloz/dades -maxdepth 1 -type f -name "enviaments-*.csv" -mtime +30 -ls

# Pas 3: si i només si la llista és correcta, esborrar
find /srv/veloz/dades -maxdepth 1 -type f -name "enviaments-*.csv" -mtime +30 -delete

Millores aplicades:

  • -maxdepth 1 impedeix que baixi a historic.
  • El patró enviaments-*.csv és més específic i no toca l'enviaments.csv actiu.
  • S'executa primer sense acció destructiva per revisar la llista.
  • -delete substitueix -exec rm, és més ràpid i segur.

La versió definitiva per a veloz-ops inclouria a més moure a un directori de quarantena en lloc d'esborrar, però això arribarà a la lliçó 07-03.

Conclusió

Amb aquesta lliçó tanques el Mòdul 1 i, amb ell, els fonaments del curs. Ja saps què és Bash i quin paper juga a la teva feina; tens un entorn modern muntat amb ~/veloz-ops al PATH; et mous pel sistema de fitxers de srv-veloz-01 amb criteri; entens què passa per dins quan prems Enter; i ara, a més, ets autosuficient per resoldre dubtes: saps quan fer servir man i quan help, com triar la secció correcta, com cercar dins d'una pàgina amb /, com desxifrar un SYNOPSIS, com trobar una ordre que no coneixes amb man -k i —el més important en un servidor de producció— com verificar una ordre perillosa abans d'executar-la.

Aquest darrer punt és el que més vegades et salvarà. Tota la potència que adquiriràs als propers mòduls és també potència per destruir, i la diferència rau en l'hàbit de comprovar abans d'actuar.

Al Mòdul 2 comença la feina de debò amb les eines: aprendràs a crear, copiar, moure i eliminar fitxers; a processar text amb cat, head, tail, grep, sort i wc; a entendre i modificar permisos; a encadenar ordres amb redireccions i canonades; a fer servir comodins; i a moure't per la línia d'ordres a la velocitat d'un professional. A partir d'aquí, tot el que aprenguis anirà directe a construir veloz-ops.

Curs de Programació en Bash

Mòdul 1: Introducció a Bash

Mòdul 2: Ordres Bàsiques de Bash

Mòdul 3: Fonaments de Scripting

Mòdul 4: Scripting Intermedi

Mòdul 5: Tècniques Avançades de Scripting

Mòdul 6: Treballar amb Eines Externes

Mòdul 7: Automatització i Programació

Mòdul 8: Bones Pràctiques i Optimització

Mòdul 9: Projectes del Món Real

© Copyright 2026. Tots els drets reservats