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
- L'ecosistema de documentació a Linux
man: el manual del sistema- Les seccions del manual
- Navegar i cercar dins d'una pàgina de manual
- Llegir un SYNOPSIS: la notació formal
- Cercar quan no saps el nom de l'ordre:
man -kiapropos help: els builtins de Bash i per quèman cdfalla--help: l'ajuda ràpidainfo,tldricheat- Documentació oficial: manual de Bash i POSIX
- Estratègia pràctica per resoldre dubtes
- Verificar ordres perilloses abans d'executar-les
- 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 exemple →
tldr.
man: el manual del sistema
man: el manual del sistemaman (de manual) és la referència canònica. Cada programa instal·lat porta la seva pàgina, escrita pel seu autor.
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 primerFixa'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:
-hdiu explícitament «amb-li/o-s». És a dir,ls -htot 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).
- 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:
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]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:
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:
- 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.
A dins, teclegeu /sort i premeu Enter. Prem n fins a arribar a:
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:
-R respecta els colors i -i fa les cerques insensibles a majúscules tret que n'escriguis alguna.
- 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.
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.
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.
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.
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ó.
- Cercar quan no saps el nom de l'ordre:
man -k i apropos
man -k i aproposEl 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.
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:
Pots acotar la cerca a una secció:
I combinar-la amb grep per filtrar més:
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:
help: els builtins de Bash i per què man cd falla
help: els builtins de Bash i per què man cd fallaRecuperem una cosa de la lliçó 01-04. Prova això:
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:
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):
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:
I admet patrons:
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:
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:
É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.
--help: l'ajuda ràpida
--help: l'ajuda ràpidaGairebé tots els programes accepten --help i mostren un resum a la pantalla.
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--helpno funciona, prova-hi desprésman. - Compte amb les ordres que interpreten
--helpcom a argument. Un cas famós: afind,--helpsí que funciona, però en programes antics un argument desconegut pot provocar comportaments estranys. - Si la sortida és llarga, canalitza-la a un paginador:
Un truc molt pràctic quan cerques una opció concreta: filtra l'ajuda amb grep.
-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 blocsEn quatre línies tens totes les opcions relacionades amb mides. Aquesta combinació ordre --help | grep és un reflex que adquiriràs de pressa.
info, tldr i cheat
info, tldr i cheat9.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».
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ò.
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:
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.
- 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:
É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.
- 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:
- Sé el nom? Si no,
man -kamb una paraula clau en anglès (les descripcions són en anglès a la majoria de sistemes). type -a ordreper saber si és builtin, externa o keyword. Això decideix la font.- Ajuda ràpida primer:
ordre --help | grep elQueCerco. Resol la majoria de les consultes en segons. - Si necessites detall,
man ordrei cerca-hi dins amb/. No llegeixis de dalt a baix. - Si continua sense quedar clar,
tldr ordreper veure exemples reals, oinfoper a les eines GNU. - 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.
- 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.
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ò:
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 |
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ó:
12.3 Altres precaucions
- Executa primer la part que només llegeix. Abans de
find /srv -name "*.tmp" -delete, executafind /srv -name "*.tmp"i revisa la llista. - Fes servir
-i(interactiu) en ordres destructives.rm -ipregunta per cada fitxer. - Comprova on ets i qui ets.
pwdiwhoamiabans de qualsevol esborrat. Unrm -rf *al directori equivocat és irreversible. - Desconfia de les ordres copiades d'internet, sobretot les que porten
sudo,curl | bash,rm -rfo rutes absolutes al sistema. Llegeix-les senceres, descompon-les i cerca amancada opció que no reconeguis. - A Linux no hi ha paperera.
rmno es desfà.
Un exercici de lectura crítica. Algú et passa aquesta línia «per netejar registres vells»:
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/mtimeal manual descobreixes que+7significa «més de 7 dies complets», un matís que se sol malinterpretar.)-exec rm -f {} \;: executarm -fsobre 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 -deleteAquest 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 cdi concloure que la documentació no existeix. És un builtin:help cd. Comprova sempre ambtype -aprimer. - Escriure
man crontabi no trobar el format del fitxer. Necessites la secció 5:man 5 crontab. Fes servirman -f nomper 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
tldrper 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.
echoal davant, o--dry-run. Sempre, fins i tot quan et pensis que ho tens clar. - Consell: si
man -kno retorna res, executasudo mandbper reconstruir l'índex. - Consell:
man maniman bashmereixen 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:
- Quina opció d'
lsmostra el número d'inode de cada fitxer. - Quina opció d'
lsordena per data de modificació de més antiga a més recent (n'has de combinar dues). - Quina opció de
grepmostra les 3 línies següents a cada coincidència. - Quina opció de
grepmostra només el nom dels fitxers que contenen la coincidència, sense les línies. - Quina opció de
grepinverteix 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
- Comprova amb
type -asitestés builtin, extern o totes dues coses. - Amb
help test, esbrina què fan els operadors-f,-d,-r,-si-z. - Esbrina també com es comprova si un fitxer és més recent que un altre.
- Escriu una ordre d'una sola línia que imprimeixi «existeix» si
/var/log/veloz/app.logexisteix i té contingut.
Exercici 3: Verificació d'una ordre perillosa
Un company t'envia aquesta ordre «per alliberar espai al servidor»:
- Descompon-la consultant
man findi explica'n cada part. - Esbrina què significa exactament
+30a-mtime(cerca-ho al manual, no ho suposis). - Identifica almenys dos riscos d'executar-la tal qual a Veloz Envíos.
- 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.
-i,--inode: imprimeix el número d'índex de cada fitxer.-tcombinat amb-r:-tordena per data amb el més nou primer, i-rinverteix l'ordre. Per tantls -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.-A NUM,--after-context=NUM: mostra NUM línies posteriors. Amb-Bs'obtenen les anteriors i amb-Ctotes dues.-l,--files-with-matches: només el nom dels fitxers amb coincidència.-v,--invert-match: selecciona les línies que no coincideixen.
Aplicació a Veloz Envíos:
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
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
-
É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 éshelp test. -
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 |
-
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. -
-s FITXERaplicat al nostre registre d'aplicació:
-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:
Solució a l'Exercici 3
- 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 |
- Què significa
+30. Cercant/mtimeaman findes 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:
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.
-
Riscos:
- Abast excessiu: actua sobre tot
/srv/velozde manera recursiva, inclòs el subdirectorihistoric, que precisament conté fitxers antics que es guarden a propòsit. Esborraria l'arxiu històric d'enviaments. - Irreversibilitat sense verificació:
rm -fno 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ésrmper 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
-deletes'evita.
- Abast excessiu: actua sobre tot
-
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 -deleteMillores aplicades:
-maxdepth 1impedeix que baixi ahistoric.- El patró
enviaments-*.csvés més específic i no toca l'enviaments.csvactiu. - S'executa primer sense acció destructiva per revisar la llista.
-deletesubstitueix-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
- Què és Bash?
- Configurar el teu Entorn
- Navegació Bàsica per la Línia d'Ordres
- Entendre el Shell
- Trobar Ajuda: man, help i --help
Mòdul 2: Ordres Bàsiques de Bash
- Operacions amb Fitxers i Directoris
- Ordres de Processament de Text
- Permisos i Propietat dels Fitxers
- Redirecció i Canonades
- Comodins i Expansió de Rutes
- Historial i Dreceres de Teclat
Mòdul 3: Fonaments de Scripting
- Crear i Executar un Script
- Variables i Constants
- Operadors Bàsics
- Sentències Condicionals
- Arguments i Entrada de l'Usuari
- Cometes, Expansió i Substitució
Mòdul 4: Scripting Intermedi
- Bucles en Bash
- Funcions en Bash
- Arrays i Arrays Associatius
- Manipulació de Cadenes
- La Sentència case i els Menús Interactius
- Aritmètica i Càlculs Numèrics
Mòdul 5: Tècniques Avançades de Scripting
- Operacions Avançades amb Fitxers
- Gestió de Processos
- Gestió d'Errors i Depuració
- Expressions Regulars
- Entrada/Sortida Avançada: Descriptors i Here-Documents
- Scripts Modulars i Llibreries Reutilitzables
Mòdul 6: Treballar amb Eines Externes
Mòdul 7: Automatització i Programació
- Tasques Cron
- Automatitzar Tasques
- Scripts de Còpia i Restauració
- Monitoratge i Registre
- Serveis i Temporitzadors amb systemd
- Automatització Remota amb SSH
Mòdul 8: Bones Pràctiques i Optimització
- Escriure Codi Llegible
- Optimitzar Scripts en Bash
- Consideracions de Seguretat
- Control de Versions amb Git
- Anàlisi Estàtica amb ShellCheck i shfmt
- Proves Automatitzades amb Bats
- Portabilitat: POSIX sh enfront de Bashismes
