Fins ara tot el que has executat era inofensiu: mirar, llistar, consultar. Aquesta lliçó creua la línia. A partir d'aquí les ordres escriuen al disc, i algunes esborren sense preguntar i sense possibilitat de desfer.
No és un advertiment retòric. A Linux no hi ha paperera de reciclatge per defecte: rm desenllaça el fitxer i l'espai queda disponible per reutilitzar-se. Recuperar alguna cosa esborrada en un sistema de fitxers muntat i en ús és, a la pràctica, impossible. Per això aquesta lliçó dedica un apartat sencer a estratègies defensives, i per això la instantània de la VM és avui més important que mai.
A canvi, aquestes són les eines amb què es treballa de debò: crear estructures de directoris, copiar preservant permisos, moure i reanomenar, sincronitzar arbres complets i empaquetar programari per distribuir-lo. En acabar podràs preparar un paquet de /opt/tramontana/app a punt per enviar-lo a en Luis, amb la certesa que arribarà idèntic a com va sortir.
Contingut
touch: crear i tocar marques de tempsmkdirirmdir: estructura de directoriscp: copiar, i el parany de la barra finalmv: moure i reanomenarrm: la conversa seriosa- Reanomenament per lots amb
rename rsync: la manera correcta de copiar directoristar: empaquetar- Compressió:
gzip,bzip2,xzizip - Pràctica: preparar el paquet per a en Luis
touch: crear i tocar marques de temps
touch: crear i tocar marques de tempstouch fa dues coses diferents segons si el fitxer existeix o no:
- Si no existeix, el crea buit.
- Si existeix, actualitza les seves marques de temps sense tocar el contingut.
operador@srv-tramontana:~$ touch informe-agost.txt
operador@srv-tramontana:~$ ls -l informe-agost.txt
-rw-rw-r-- 1 operador operador 0 Aug 18 10:15 informe-agost.txtZero bytes: existeix però és buit. Accepta diversos arguments:
La segona funció, actualitzar marques de temps, és la que dona nom a l'ordre i la que sorprèn qui només la coneix com a «crear fitxer buit». Reprenent les tres marques de la lliçó anterior:
| Opció | Què actualitza |
|---|---|
| (cap) | atime i mtime al moment actual |
-a |
Només atime |
-m |
Només mtime |
-t AAAAMMDDhhmm.ss |
Fixa la marca en aquella data concreta |
-d "cadena" |
Fixa la marca interpretant una data en llenguatge natural |
-r fitxer |
Copia les marques d'un altre fitxer |
-c |
No crea el fitxer si no existeix |
operador@srv-tramontana:~$ touch -t 202601011200.00 informe-agost.txt
operador@srv-tramontana:~$ ls -l --time-style=long-iso informe-agost.txt
-rw-rw-r-- 1 operador operador 0 2026-01-01 12:00 informe-agost.txt
operador@srv-tramontana:~$ touch -d "yesterday 09:00" nota1.txt
operador@srv-tramontana:~$ ls -l --time-style=long-iso nota1.txt
-rw-rw-r-- 1 operador operador 0 2026-08-17 09:00 nota1.txtFixa't en el que no ha canviat:
operador@srv-tramontana:~$ stat -c 'mtime=%y%nctime=%z' informe-agost.txt
mtime=2026-01-01 12:00:00.000000000 +0200
ctime=2026-08-18 10:18:44.331920103 +0200L'mtime diu gener, però el ctime diu avui. És exactament el que anticipava l'exercici de la lliçó 02-03: pots falsificar l'mtime, però el ctime delata que l'inode s'ha tocat ara mateix.
Usos legítims de touch en administració:
- Crear un fitxer de bloqueig o un marcador (
/var/run/tramontana.lock). - Forçar que una eina que compara dates consideri un fitxer com a modificat.
- Fixar la data d'un fitxer restaurat d'una còpia perquè coincideixi amb l'original.
- Crear un fitxer buit abans de donar-li permisos restrictius i després escriure-hi, perquè no existeixi mai amb permisos oberts.
-c és l'opció defensiva: actualitza si existeix, i si no existeix no facis res. Evita crear fitxers buits per una errada al nom.
mkdir i rmdir: estructura de directoris
mkdir i rmdir: estructura de directorisoperador@srv-tramontana:~$ mkdir informes
operador@srv-tramontana:~$ mkdir esborranys publicats arxiu
operador@srv-tramontana:~$ ls -F
arxiu/ dades/ esborranys/ informes/ publicats/ scripts/| Opció | Què fa |
|---|---|
-p |
Crea els pares que falten i no falla si ja existeix |
-m mode |
Crea amb aquells permisos directament |
-v |
Informa de cada directori creat |
Sense -p, mkdir no crea rutes imbricades:
operador@srv-tramontana:~$ mkdir informes/2026/agost
mkdir: cannot create directory 'informes/2026/agost': No such file or directory
operador@srv-tramontana:~$ mkdir -p informes/2026/agost
operador@srv-tramontana:~$ tree informes
informes
└── 2026
└── agost-p té una segona propietat, tan important com la primera: no falla si el directori ja existeix.
operador@srv-tramontana:~$ mkdir informes
mkdir: cannot create directory 'informes': File exists
operador@srv-tramontana:~$ echo $?
1
operador@srv-tramontana:~$ mkdir -p informes
operador@srv-tramontana:~$ echo $?
0Això fa que mkdir -p sigui idempotent: executar-lo deu vegades deixa el sistema en el mateix estat que executar-lo una. És la propietat que es busca en scripts, on un mkdir que falla perquè el directori ja existia avortaria l'execució sense motiu. Ho reprendràs al Mòdul 4 i amb Ansible al Mòdul 7.
-m crea amb permisos concrets en una sola operació:
operador@srv-tramontana:~$ mkdir -m 700 privat
operador@srv-tramontana:~$ ls -ld privat
drwx------ 2 operador operador 4096 Aug 18 10:24 privatÉs millor que crear i després fer chmod, perquè entre les dues operacions hi hauria una finestra —breu, però real— en què el directori té permisos més oberts del que caldria. En un sistema multiusuari, aquesta finestra és un problema de seguretat. El significat del 700 és la lliçó 02-07.
Amb expansió de claus pots crear estructures completes d'un sol cop:
operador@srv-tramontana:~$ mkdir -p informes/2026/{01..03}
operador@srv-tramontana:~$ tree informes/2026
informes/2026
├── 01
├── 02
├── 03
└── agostAquestes claus són expansió de claus, una funció del shell que s'explica a la lliçó 03-02. Fes-la servir ja; n'entendràs la mecànica més endavant.
rmdir esborra un directori, però només si és buit:
operador@srv-tramontana:~$ rmdir informes
rmdir: failed to remove 'informes': Directory not empty
operador@srv-tramontana:~$ rmdir esborranys
operador@srv-tramontana:~$ ls -d esborranys
ls: cannot access 'esborranys': No such file or directoryAquesta limitació no és un defecte: és una xarxa de seguretat. rmdir no pot esborrar res per accident perquè només actua sobre directoris buits. Quan vulguis eliminar un directori amb contingut hauràs de fer servir rm -r, i en aquell moment estàs assumint conscientment el risc.
rmdir -p elimina la branca sencera mentre vagi quedant buida:
operador@srv-tramontana:~$ rmdir -p informes/2026/agost
operador@srv-tramontana:~$ ls -d informes
ls: cannot access 'informes': No such file or directoryHa esborrat agost, després 2026 perquè va quedar buit, i després informes.
cp: copiar, i el parany de la barra final
cp: copiar, i el parany de la barra finaloperador@srv-tramontana:~$ cp dades/reserves.csv dades/reserves-copia.csv
operador@srv-tramontana:~$ ls dades/
cases.txt reserves-copia.csv reserves.csvLes opcions que importen:
| Opció | Què fa |
|---|---|
-r / -R |
Recursiu: obligatori per copiar directoris |
-i |
Pregunta abans de sobreescriure |
-n |
No sobreescriu mai, sense preguntar |
-u |
Copia només si l'origen és més nou o el destí no existeix |
-p |
Preserva mode, propietari i marques de temps |
-a |
Arxiu: equival a -dR --preserve=all. L'opció per a còpies fidels |
-v |
Mostra què copia |
-L / -P |
Segueix / no segueix els enllaços simbòlics (lliçó 02-06) |
--backup=numbered |
Guarda una còpia numerada del destí abans de trepitjar-lo |
cp sobreescriu sense avisar. És el comportament per defecte i ha destruït molta feina:
operador@srv-tramontana:~$ cp dades/cases.txt dades/reserves.csv
operador@srv-tramontana:~$ head -n 1 dades/reserves.csv
mas-figueres;Mas Figueres;Girona;6reserves.csv ja no conté reserves: conté cases. No hi va haver ni un avís.
Compara amb la versió defensiva:
operador@srv-tramontana:~$ cp -i dades/cases.txt dades/reserves.csv
cp: overwrite 'dades/reserves.csv'? nDiferència entre -p i -a:
operador@srv-tramontana:~$ ls -l --time-style=long-iso /etc/hostname
-rw-r--r-- 1 root root 16 2025-06-12 10:03 /etc/hostname
operador@srv-tramontana:~$ cp /etc/hostname /tmp/h1
operador@srv-tramontana:~$ cp -p /etc/hostname /tmp/h2
operador@srv-tramontana:~$ ls -l --time-style=long-iso /tmp/h1 /tmp/h2
-rw-r--r-- 1 operador operador 16 2026-08-18 10:31 /tmp/h1
-rw-r--r-- 1 operador operador 16 2025-06-12 10:03 /tmp/h2La còpia normal té la data d'avui; la còpia amb -p conserva la data original. El propietari va canviar en totes dues perquè operador no pot crear fitxers que pertanyin a root (cal sudo; els detalls a la lliçó 02-07).
| Què es conserva | cp |
cp -p |
cp -a |
|---|---|---|---|
| Contingut | Sí | Sí | Sí |
| Permisos | No (s'aplica la umask) | Sí | Sí |
| Marques de temps | No | Sí | Sí |
| Propietari i grup | No | Sí (si ets root) | Sí (si ets root) |
| Enllaços simbòlics | Els segueix i copia el contingut | Els segueix | Els copia com a enllaços |
| Recursiu | No | No | Sí |
| Atributs estesos i ACL | No | Parcial | Sí |
Regla pràctica: per copiar un arbre de directoris tal qual, cp -a. Per a tota la resta, cp -r n'hi ha prou.
El parany de la barra final
Aquest és el comportament que més confusió genera de tota l'ordre. La clau: cp es comporta de manera diferent segons si el destí existeix i és un directori o no.
# CAS 1: el destí NO existeix -> crea un fitxer amb aquell nom
operador@srv-tramontana:~$ cp dades/cases.txt copia.txt
operador@srv-tramontana:~$ ls -F copia.txt
copia.txt
# CAS 2: el destí existeix i ÉS un directori -> copia A DINS
operador@srv-tramontana:~$ mkdir backup
operador@srv-tramontana:~$ cp dades/cases.txt backup
operador@srv-tramontana:~$ ls backup/
cases.txtAl cas 2, el fitxer es diu backup/cases.txt. Fins aquí és intuïtiu. La sorpresa apareix amb directoris:
operador@srv-tramontana:~$ tree backup
backup
└── cases.txt
# SENSE barra final i amb destí que JA EXISTEIX: copia el directori A DINS
operador@srv-tramontana:~$ cp -r dades backup
operador@srv-tramontana:~$ tree backup
backup
├── cases.txt
└── dades
├── cases.txt
└── reserves.csv
# Si el destí NO existeix: crea el directori amb aquell nom
operador@srv-tramontana:~$ cp -r dades backup2
operador@srv-tramontana:~$ tree backup2
backup2
├── cases.txt
└── reserves.csvLa mateixa ordre produeix dos resultats diferents segons si backup existia. Aquesta és la fallada clàssica: executes un script de còpia dues vegades i la segona et crea backup/dades/ imbricat a dins.
I ara la barra final a l'origen, que a cp no canvia res però a rsync ho canvia tot:
operador@srv-tramontana:~$ cp -r dades/ backup3
operador@srv-tramontana:~$ tree backup3
backup3
├── cases.txt
└── reserves.csvAmb cp, dades i dades/ donen el mateix resultat. A rsync no, com veuràs a l'apartat 7. És una de les incoherències històriques d'Unix amb què cal conviure.
Defensa pràctica: quan copiïs directoris, executa abans ls -d desti per saber si existeix. I en scripts, fes servir sempre destins explícits i comprovats.
mv: moure i reanomenar
mv: moure i reanomenarmv fa les dues coses amb la mateixa ordre, perquè al fons són la mateixa operació: canviar l'entrada de directori que apunta a un fitxer.
# Reanomenar
operador@srv-tramontana:~$ mv informe-agost.txt informe-2026-08.txt
# Moure
operador@srv-tramontana:~$ mv informe-2026-08.txt backup/
# Moure i reanomenar alhora
operador@srv-tramontana:~$ mv backup/informe-2026-08.txt dades/informe-mensual.txt| Opció | Què fa |
|---|---|
-i |
Pregunta abans de sobreescriure |
-n |
No sobreescriu mai |
-u |
Mou només si l'origen és més nou |
-v |
Informa de cada moviment |
-b |
Fa còpia de seguretat del destí abans de trepitjar-lo |
-t dir |
Indica el destí primer, útil en scripts |
Com cp, mv sobreescriu sense preguntar, i amb una diferència crucial: a cp perds només el destí; a mv perds el destí i l'origen deixa de ser on era.
Dins i fora del sistema de fitxers
Aquest detall explica un comportament que desconcerta quan mous fitxers grans.
operador@srv-tramontana:~$ ls -i dades/cases.txt
262149 dades/cases.txt
operador@srv-tramontana:~$ mv dades/cases.txt backup/cases.txt
operador@srv-tramontana:~$ ls -i backup/cases.txt
262149 backup/cases.txtEl mateix inode. No s'ha copiat ni un byte: només s'ha esborrat una entrada de directori i se n'ha creat una altra que apunta al mateix inode. Per això moure un fitxer de 40 GB dins del mateix disc és instantani.
Ara, entre sistemes de fitxers diferents:
flowchart TD
A["mv origen desti"] --> B{"Mateix sistema<br/>de fitxers?"}
B -->|Sí| C["rename(): canvia l'entrada<br/>de directori"]
C --> D["INSTANTANI<br/>Mateix inode<br/>Conserva tot"]
B -->|No| E["Copiar bytes al destí"]
E --> F["Esborrar l'origen"]
F --> G["LENT: depèn de la mida<br/>Inode nou<br/>Interrompible a mitges"]
Conseqüències pràctiques de la branca dreta:
- Triga: moure 40 GB de
/a un disc USB implica llegir i escriure 40 GB. - Necessita espai lliure al destí durant tota l'operació.
- Si s'interromp a mitges (tall de llum,
Ctrl+C), el destí queda amb un fitxer parcial i l'origen pot haver-se esborrat parcialment si eren diversos fitxers.mvno és atòmic entre sistemes de fitxers. - El ctime canvia i el propietari pot canviar, perquè en realitat s'ha creat un fitxer nou.
Com saber si dues rutes són al mateix sistema de fitxers:
operador@srv-tramontana:~$ df /home/operador /opt/tramontana
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 23791616 6984924 15574056 31% /
/dev/sda2 23791616 6984924 15574056 31% /Mateix dispositiu, /dev/sda2: el moviment serà instantani. Si hi apareguessin dispositius diferents, seria copiar i esborrar.
Regla per moure coses grans entre discos: fes servir rsync i esborra després, després de verificar. Així, si alguna cosa falla, l'origen continua intacte.
rm: la conversa seriosa
rm: la conversa seriosarm elimina fitxers. En un sistema de fitxers muntat i en ús, ho fa de manera irreversible.
| Opció | Què fa |
|---|---|
-r / -R |
Recursiu: obligatori per a directoris |
-f |
Força: no pregunta, ignora els fitxers que no existeixen |
-i |
Pregunta per cada fitxer |
-I |
Pregunta una sola vegada si hi ha més de 3 fitxers o és recursiu |
-v |
Mostra què esborra |
-d |
Esborra directoris buits, com rmdir |
--one-file-system |
No creua a altres sistemes de fitxers en recórrer |
--preserve-root |
Rebutja operar sobre / (actiu per defecte) |
-I és el punt dolç: t'atura a pensar una vegada, sense la fatiga de -i preguntant quatre-centes vegades (que acaba fent que responguis «sí» automàticament, que és pitjor que no preguntar).
Per què rm -rf mereix un apartat propi
rm -rf és la combinació que esborra un arbre complet sense ni una pregunta i sense queixar-se de res. És necessària en scripts i és la responsable de la majoria dels desastres de dades autoinfligits.
El cas paradigmàtic és el de la variable buida. Un script conté:
Si per qualsevol motiu DESTI i SUBDIR són buides —perquè un cd previ ha fallat, perquè un fitxer de configuració no s'ha llegit, perquè hi ha hagut una errada al nom de la variable— la línia que s'executa és:
Aquest error ha passat en empreses reals i ha arribat a esborrar sistemes sencers en producció. El cas més conegut públicament és el d'un instal·lador d'un joc comercial que, per aquesta mateixa causa, esborrava el directori personal complet dels seus usuaris.
Les versions modernes de rm inclouen --preserve-root, que rebutja rm -rf /:
operador@srv-tramontana:~$ sudo rm -rf /
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafePerò aquesta protecció només cobreix l'arrel exacta. rm -rf /home o rm -rf /opt/tramontana s'executen sense objecció. I amb la barra: rm -rf "$DESTI"/ quan DESTI és buida dona rm -rf /, protegit; però rm -rf "$DESTI"/* amb DESTI buida dona rm -rf /*, que no està protegit i esborra tot el contingut de l'arrel.
Estratègies defensives
1. Mirar abans d'esborrar. L'hàbit que ja coneixes, ara obligatori:
operador@srv-tramontana:~$ ls -la /srv/tramontana/backups/temporals/
operador@srv-tramontana:~$ rm -rI /srv/tramontana/backups/temporals/I amb patrons, encara més: executa l'ls amb el mateix patró, comprova la llista i només llavors canvia ls per rm amb la fletxa amunt.
2. Fer servir -I per costum en treball interactiu.
3. Paperera amb trash-cli. Existeix un equivalent a la paperera d'escriptori per al terminal:
operador@srv-tramontana:~$ sudo apt install -y trash-cli
operador@srv-tramontana:~$ trash-put dades/informe-mensual.txt
operador@srv-tramontana:~$ trash-list
2026-08-18 10:52:31 /home/operador/dades/informe-mensual.txt
operador@srv-tramontana:~$ trash-restoreÉs útil al teu portàtil. En un servidor té un inconvenient seriós: els fitxers continuen ocupant espai a ~/.local/share/Trash, i si esborraves per alliberar disc, no has alliberat res. Fes-ho servir amb criteri.
4. Àlies defensius. Es pot fer que rm sigui rm -I per defecte mitjançant un àlies. Els àlies s'estudien a la lliçó 03-01, i allà discutirem per què aquesta pràctica concreta és discutible: t'acostumes a una protecció que no existeix als altres servidors, i el dia que treballis en una màquina aliena tindràs una falsa sensació de seguretat.
5. Cometes i --. Posa sempre les variables entre cometes i fes servir -- abans de noms que vinguin de fora.
6. El que de debò et salva: còpies de seguretat. Cap de les mesures anteriors protegeix contra un esborrat deliberat i ben escrit. L'única cosa que protegeix és tenir còpies en un altre lloc, i això és la lliçó 05-08. I al teu laboratori, la instantània de la VM.
Una última nota tècnica: rm no esborra el contingut, només desenllaça el nom. Les dades continuen als blocs fins que se sobreescriuen. Això significa dues coses oposades: que un forense les podria recuperar, i que tu, a la pràctica, no ho podràs fer perquè el sistema continuarà escrivint a sobre mentre ho intentes. Per a esborrat segur real existeix shred, amb les seves pròpies limitacions en discos SSD i sistemes amb journal.
- Reanomenament per lots amb
rename
renameReanomenar cinquanta fitxers a mà no és opció. rename (la versió Perl, que és la de Debian i Ubuntu) aplica una transformació a molts noms:
operador@srv-tramontana:~$ ls informes/
informe_gener.TXT informe_febrer.TXT informe_marc.TXT
operador@srv-tramontana:~$ rename -n 's/\.TXT$/.txt/' informes/*.TXT
rename(informes/informe_gener.TXT, informes/informe_gener.txt)
rename(informes/informe_febrer.TXT, informes/informe_febrer.txt)
rename(informes/informe_marc.TXT, informes/informe_marc.txt)
operador@srv-tramontana:~$ rename 's/\.TXT$/.txt/' informes/*.TXT
operador@srv-tramontana:~$ ls informes/
informe_gener.txt informe_febrer.txt informe_marc.txt-n (o --nono) és obligatori a la primera execució: mostra el que faria sense fer-ho. És l'equivalent al «mirar abans d'actuar» per a reanomenaments massius.
Més exemples:
# Substituir guions baixos per guionets
operador@srv-tramontana:~$ rename -n 's/_/-/g' informes/*
rename(informes/informe_gener.txt, informes/informe-gener.txt)
# Afegir un prefix
operador@srv-tramontana:~$ rename -n 's/^/2026-/' informes/*
rename(informes/informe-gener.txt, informes/2026-informe-gener.txt)
# Passar a minúscules
operador@srv-tramontana:~$ rename -n 'y/A-Z/a-z/' informes/*La sintaxi s/patró/reemplaçament/ són expressions regulars de Perl, tema de la lliçó 03-02. De moment en tens prou amb el patró literal i -n per verificar.
Compte amb dues coses: en algunes distribucions (Fedora, RHEL) rename és un programa completament diferent amb una altra sintaxi, i rename sobreescriu sense avisar si el nom de destí ja existeix. Afegeix -v per veure què fa realment.
rsync: la manera correcta de copiar directoris
rsync: la manera correcta de copiar directorisrsync està dissenyat per sincronitzar arbres de directoris. Enfront de cp -a té tres avantatges que el fan l'eina per defecte així que la còpia és gran o important:
cp -a |
rsync -av |
|
|---|---|---|
| Còpia incremental | No: copia tot cada vegada | Sí: només el que ha canviat |
| Represa | No: cal començar de zero | Sí (amb --partial) |
| Progrés | Silenciós | --progress |
| Verificació | Cap | Suma de comprovació del contingut |
| Esborrar el sobrant al destí | No | --delete |
| Exclusions | No | --exclude |
| Còpia remota per SSH | No | Sí, nativa |
operador@srv-tramontana:~$ rsync -av /opt/tramontana/app/ /srv/tramontana/backups/app-copia/
sending incremental file list
created directory /srv/tramontana/backups/app-copia
./
executable
version.txt
plantilles/
plantilles/confirmacio.html
plantilles/factura.html
sent 50,331,208 bytes received 115 bytes 100,662,646.00 bytes/sec
total size is 50,329,412 speedup is 1.00Segona execució, sense canvis:
operador@srv-tramontana:~$ rsync -av /opt/tramontana/app/ /srv/tramontana/backups/app-copia/
sending incremental file list
sent 143 bytes received 19 bytes 324.00 bytes/sec
total size is 50,329,412 speedup is 310,675.38162 bytes en comptes de 50 MB. Ha comparat i no ha trobat res per copiar. Aquest és l'estalvi que justifica fer servir rsync per a qualsevol cosa que es repeteixi.
Opcions essencials:
| Opció | Què fa |
|---|---|
-a |
Mode arxiu: recursiu + preserva permisos, dates, propietaris i enllaços |
-v |
Detallat |
-h |
Xifres llegibles |
--progress |
Barra de progrés per fitxer |
-n / --dry-run |
Simula sense copiar res |
--delete |
Esborra al destí el que ja no és a l'origen |
--exclude 'patró' |
Exclou rutes |
-c |
Compara per suma de comprovació en comptes de per mida i data |
-z |
Comprimeix durant la transferència (útil només en xarxa) |
La barra final a rsync sí que importa
Aquí sí, i és l'error número u amb aquesta eina:
# AMB barra a l'origen: copia el CONTINGUT d'app
operador@srv-tramontana:~$ rsync -av /opt/tramontana/app/ /tmp/desti/
# Resultat: /tmp/desti/executable, /tmp/desti/version.txt...
# SENSE barra: copia el DIRECTORI app dins del destí
operador@srv-tramontana:~$ rsync -av /opt/tramontana/app /tmp/desti/
# Resultat: /tmp/desti/app/executable, /tmp/desti/app/version.txt...Mnemotècnia: la barra final significa «el contingut de». Sense barra, «la carpeta mateixa».
--delete combinat amb això és perillós, perquè esborra al destí tot el que no sigui a l'origen. Si t'equivoques de nivell, buides el destí. Sempre -n primer:
operador@srv-tramontana:~$ rsync -avn --delete /opt/tramontana/app/ /srv/tramontana/backups/app-copia/
sending incremental file list
deleting obsolet.txt
sent 156 bytes received 22 bytes 356.00 bytes/sec-n t'ha ensenyat que anava a esborrar obsolet.txt. Ara decideixes amb informació.
L'ús de rsync per a còpies de seguretat reals —amb rotació, còpies incrementals enllaçades i destins remots— és la lliçó 05-08. Aquí el fas servir com el cp bo per a directoris.
tar: empaquetar
tar: empaquetartar (tape archive) ajunta molts fitxers en un de sol conservant l'estructura, els permisos i les dates. Per si mateix no comprimeix: això ho fa un compressor extern al qual crida.
Els tres modes d'operació són excloents, com vas esbrinar llegint el manual a la lliçó 02-02:
| Opció | Mode |
|---|---|
-c |
Create: crear |
-x |
eXtract: extreure |
-t |
lisT: llistar el contingut |
I les opcions que l'acompanyen:
| Opció | Què fa |
|---|---|
-f fitxer |
Nom del fitxer. Ha d'anar l'última si agrupes opcions |
-v |
Detallat |
-z |
Comprimir amb gzip (.tar.gz) |
-j |
Comprimir amb bzip2 (.tar.bz2) |
-J |
Comprimir amb xz (.tar.xz) |
-C dir |
Canvia a aquell directori abans d'operar |
--exclude='patró' |
Exclou rutes |
-p |
Preserva permisos en extreure |
Crear:
operador@srv-tramontana:~$ tar -czvf /tmp/app-3.2.1.tar.gz -C /opt/tramontana app
app/
app/executable
app/version.txt
app/plantilles/
app/plantilles/confirmacio.html
app/plantilles/factura.htmlDesglossament de l'ordre, que és l'important:
-ccrear,-zcomprimir amb gzip,-vmostrar,-fseguit del nom del fitxer resultant.-C /opt/tramontanafa quetarse situï allà abans d'empaquetar. Sense això, empaquetariaopt/tramontana/app/...amb tota la jerarquia a dins.appés el que s'empaqueta, ja relatiu a-C.
Llistar abans d'extreure és obligatori:
operador@srv-tramontana:~$ tar -tzvf /tmp/app-3.2.1.tar.gz
drwxr-xr-x root/root 0 2026-08-18 08:30 app/
-rwxr-xr-x root/root 50319872 2026-08-18 08:30 app/executable
-rw-r--r-- root/root 26 2026-08-18 08:30 app/version.txt
drwxr-xr-x root/root 0 2026-08-18 08:30 app/plantilles/
-rw-r--r-- root/root 4218 2026-08-18 08:30 app/plantilles/confirmacio.html
-rw-r--r-- root/root 2104 2026-08-18 08:30 app/plantilles/factura.htmlPer què és obligatori: per comprovar que el fitxer té un directori arrel únic. Si en comptes d'app/... hi veiessis els fitxers solts a l'arrel del paquet, en extreure'l t'escamparia desenes de fitxers pel teu directori actual. És el que es coneix com a tarbomb, i netejar-ho a mà és tediós.
Extreure:
operador@srv-tramontana:~$ mkdir -p /tmp/prova && tar -xzvf /tmp/app-3.2.1.tar.gz -C /tmp/prova
operador@srv-tramontana:~$ tree /tmp/prova
/tmp/prova
└── app
├── executable
├── plantilles
│ ├── confirmacio.html
│ └── factura.html
└── version.txtExtreure sempre amb -C a un directori buit evita el problema del tarbomb del tot.
Les versions modernes de tar detecten la compressió automàticament en extreure, així que -z, -j o -J no són necessàries per descomprimir. Sí que ho són en crear, perquè allà tar no pot endevinar què vols.
Excloure el que no ha de viatjar:
operador@srv-tramontana:~$ tar -czf /tmp/app-net.tar.gz \
--exclude='*.log' --exclude='*.tmp' --exclude='cache' \
-C /opt/tramontana appI una nota que val or: la sintaxi històrica de tar admet les opcions sense guionet (tar czf) perquè és anterior a la convenció de guionets de POSIX. Totes dues funcionen. Fes servir la de guionets, que és la que s'entén.
- Compressió:
gzip, bzip2, xz i zip
gzip, bzip2, xz i zipEls compressors d'Unix treballen sobre un sol fitxer i per defecte substitueixen l'original:
operador@srv-tramontana:~$ ls -lh /tmp/dades.csv
-rw-rw-r-- 1 operador operador 12M Aug 18 11:02 /tmp/dades.csv
operador@srv-tramontana:~$ gzip /tmp/dades.csv
operador@srv-tramontana:~$ ls -lh /tmp/dades.csv*
-rw-rw-r-- 1 operador operador 2.1M Aug 18 11:02 /tmp/dades.csv.gzdades.csv ja no existeix: s'ha convertit en dades.csv.gz. Per conservar l'original cal demanar-ho amb -k:
operador@srv-tramontana:~$ gzip -k /tmp/dades.csv
operador@srv-tramontana:~$ gunzip /tmp/dades.csv.gz # o gzip -dComparativa sobre un fitxer de text de 100 MB, que és on aquestes diferències es noten:
| Compressor | Extensió | Ràtio típica | Velocitat en comprimir | En descomprimir | Ús de RAM | Quan fer-lo servir |
|---|---|---|---|---|---|---|
| gzip | .gz |
~30 % | Molt ràpida | Molt ràpida | Baix | Per defecte. Registres, transferències, tot el que és quotidià |
| bzip2 | .bz2 |
~25 % | Lenta | Lenta | Mitjà | Poc recomanable avui: xz el supera |
| xz | .xz |
~20 % | Molt lenta | Ràpida | Alt | Distribuir programari, arxivar a llarg termini |
| zstd | .zst |
~28 % | Molt ràpida | Molt ràpida | Mitjà | L'alternativa moderna a gzip |
| zip | .zip |
~32 % | Ràpida | Ràpida | Baix | Compatibilitat amb Windows |
La regla de decisió:
- Comprimeixes moltes vegades i descomprimeixes poques (registres rotats diàriament):
gzip. La velocitat importa més que la mida. - Comprimeixes una vegada i descomprimeixes moltes (una release que es descarregarà mil vegades):
xz. El temps de compressió es paga una sola vegada i estalvies amplada de banda a cada descàrrega. - L'hi passes a algú amb Windows:
zip.
zip és l'únic que arxiva i comprimeix alhora, com a Windows:
operador@srv-tramontana:~$ zip -r /tmp/app.zip /opt/tramontana/app
adding: opt/tramontana/app/ (stored 0%)
adding: opt/tramontana/app/executable (deflated 62%)
...
operador@srv-tramontana:~$ unzip -l /tmp/app.zip
operador@srv-tramontana:~$ unzip /tmp/app.zip -d /tmp/des-de-zipLa seva gran limitació a Linux: no preserva bé els permisos ni la propietat d'Unix. Si empaquetes amb zip i desempaquetes, els bits d'execució es poden perdre i l'script deixa de funcionar. Per això a Linux es fa servir tar, que sí que els conserva, i zip només quan el destinatari fa servir Windows.
Eines per treballar amb fitxers comprimits sense descomprimir-los, molt útils amb registres:
operador@srv-tramontana:~$ zcat /var/log/tramontana/acces.log.1.gz
operador@srv-tramontana:~$ zless /var/log/tramontana/acces.log.1.gz
operador@srv-tramontana:~$ zgrep "ERROR" /var/log/tramontana/errors.log.2.gz
- Pràctica: preparar el paquet per a en Luis
En Luis Ferrer necessita una còpia exacta de la versió 3.2.1 desplegada en producció per reproduir una fallada al seu portàtil. La Marta ha aprovat enviar-l'hi. El paquet no ha d'incloure registres ni fitxers temporals, i ha d'arribar íntegre.
Pas 1: verificar què empaquetaràs.
operador@srv-tramontana:~$ cat /opt/tramontana/app/version.txt
Tramontana Reserves 3.2.1
operador@srv-tramontana:~$ du -sh /opt/tramontana/app
48M /opt/tramontana/app
operador@srv-tramontana:~$ tree -L 2 /opt/tramontana/app
/opt/tramontana/app
├── executable
├── plantilles
│ ├── confirmacio.html
│ └── factura.html
└── version.txtPas 2: crear el directori de treball. No s'empaqueta a /tmp tot sol: es fa servir un lloc amb espai i on el fitxer no desaparegui al pròxim reinici.
Pas 3: empaquetar, excloent el que no ha de sortir.
operador@srv-tramontana:~$ sudo tar -czvf /srv/tramontana/backups/enviaments/tramontana-app-3.2.1.tar.gz \
--exclude='*.log' --exclude='*.tmp' --exclude='__pycache__' \
-C /opt/tramontana app
app/
app/executable
app/version.txt
app/plantilles/
app/plantilles/confirmacio.html
app/plantilles/factura.htmlPas 4: verificar el resultat. No enviïs mai un paquet que no has llistat.
operador@srv-tramontana:~$ ls -lh /srv/tramontana/backups/enviaments/
total 19M
-rw-r--r-- 1 root root 19M Aug 18 11:20 tramontana-app-3.2.1.tar.gz
operador@srv-tramontana:~$ tar -tzvf /srv/tramontana/backups/enviaments/tramontana-app-3.2.1.tar.gz
drwxr-xr-x root/root 0 2026-08-18 08:30 app/
-rwxr-xr-x root/root 50319872 2026-08-18 08:30 app/executable
-rw-r--r-- root/root 26 2026-08-18 08:30 app/version.txt
drwxr-xr-x root/root 0 2026-08-18 08:30 app/plantilles/
-rw-r--r-- root/root 4218 2026-08-18 08:30 app/plantilles/confirmacio.html
-rw-r--r-- root/root 2104 2026-08-18 08:30 app/plantilles/factura.html48 MB comprimits a 19 MB, un sol directori arrel app/, permisos preservats (fixa't en el -rwxr-xr-x de l'executable) i cap .log a dins.
Pas 5: generar una suma de comprovació perquè en Luis pugui verificar que el fitxer ha arribat íntegre. És el mateix mecanisme que vas fer servir en verificar la ISO d'Ubuntu a la lliçó 01-04.
operador@srv-tramontana:~$ cd /srv/tramontana/backups/enviaments
operador@srv-tramontana:/srv/tramontana/backups/enviaments$ sha256sum tramontana-app-3.2.1.tar.gz | sudo tee tramontana-app-3.2.1.tar.gz.sha256
9f2c4a1e8b3d7f60a5c2e1b4d8f3a70c9e2b5d1f8a4c7e0b3d6f9a2c5e8b1d4f tramontana-app-3.2.1.tar.gzEn Luis, en rebre'l, executa:
luis@portatil-luis:~$ sha256sum -c tramontana-app-3.2.1.tar.gz.sha256
tramontana-app-3.2.1.tar.gz: OKPas 6: prova d'extracció en local. Comprovar que el paquet s'obre bé abans d'enviar-lo, no després que en Luis digui que no funciona.
operador@srv-tramontana:~$ mkdir -p /tmp/verificacio
operador@srv-tramontana:~$ tar -xzf /srv/tramontana/backups/enviaments/tramontana-app-3.2.1.tar.gz -C /tmp/verificacio
operador@srv-tramontana:~$ diff -rq /opt/tramontana/app /tmp/verificacio/app
operador@srv-tramontana:~$ echo $?
0diff -rq compara dos arbres recursivament i informa només de les diferències. Sense sortida i amb codi 0: són idèntics. Veuràs diff en detall a la lliçó següent.
Pas 7: netejar.
Procediment complet, reproduïble i verificat. La transferència del fitxer a en Luis es farà amb scp o rsync sobre SSH, que és la lliçó 06-02.
Errors Comuns i Consells
Oblidar -r en copiar o esborrar directoris. cp: -r not specified; omitting directory i rm: cannot remove ...: Is a directory són el mateix avís.
La barra final. A cp gairebé no importa; a rsync decideix si copies la carpeta o el seu contingut. I a cp -r, el resultat depèn de si el destí ja existia.
cp i mv sobreescriuen en silenci. No hi ha confirmació per defecte. -i o -n quan el destí pugui existir.
Copiar configuració amb cp en comptes de cp -p. Perds les dates, que moltes vegades són l'única pista de quan es va canviar alguna cosa.
Empaquetar amb rutes absolutes. tar -czf x.tar.gz /opt/tramontana/app guarda la jerarquia opt/tramontana/app/ a dins. Fes servir -C i rutes relatives.
Extreure sense llistar primer. tar -tzvf abans de tar -xzf, sempre.
zip per a fitxers de Linux. Perd bits d'execució i propietat. tar per a Linux, zip només per a Windows.
Consell: rsync -n i rename -n abans de la versió real. El mode simulació és gratis i t'ensenya exactament el que passarà.
Consell: anomena els paquets amb versió i data. tramontana-app-3.2.1.tar.gz és informatiu; backup.tar.gz no diu res d'aquí a tres mesos.
Consell: acompanya sempre un paquet del seu sha256sum. Costa una ordre i elimina tota una categoria d'incidències.
Consell: abans d'un rm -r, prem Ctrl+A i escriu ls -la al davant. Mires, i després fletxa amunt i ho canvies pel rm. Deu segons que han salvat moltes dades.
Exercicis
Exercici 1: muntar una estructura de treball
Al teu home de srv-tramontana, amb el mínim nombre d'ordres:
- Crea l'estructura
treball/2026/{07,08,09}/informesitreball/2026/{07,08,09}/dades. - Crea un fitxer
treball/2026/08/informes/resum.txtamb data de modificació de l'1 d'agost de 2026 a les 09:00. - Copia
~/dades/reserves.csvatreball/2026/08/dades/preservant-ne les marques de temps, i verifica-ho. - Reanomena tots els
.txtdetreball/2026/08/informes/a.mdsense equivocar-te (fes servir el mode simulació).
Exercici 2: revisar l'ordre d'en Luis
En Luis et proposa aquest procediment per fer una còpia diària de l'aplicació abans de cada desplegament:
cp -r /opt/tramontana/app /srv/tramontana/backups/app-backup
tar czf /srv/tramontana/backups/app.tar.gz /opt/tramontana/appTroba almenys cinc problemes i reescriu el procediment correctament.
Exercici 3: paquet de dades per a la Marta
La Marta necessita endur-se a una reunió les dades de reserves i el llistat de cases. Treballa amb Windows i vol obrir els fitxers amb l'Excel. A més demana que el paquet inclogui un petit informe de què conté.
Prepara l'enviament complet: crea l'informe, empaqueta en el format adequat, verifica el contingut del paquet i genera la suma de comprovació. Justifica l'elecció del format de compressió.
Solucions
Solució 1
operador@srv-tramontana:~$ mkdir -p treball/2026/{07,08,09}/{informes,dades}
operador@srv-tramontana:~$ tree treball
treball
└── 2026
├── 07
│ ├── dades
│ └── informes
├── 08
│ ├── dades
│ └── informes
└── 09
├── dades
└── informesUna sola ordre. L'expansió de claus imbricada genera les sis combinacions i -p crea tots els pares. Sense -p fallaria perquè treball i treball/2026 no existeixen.
operador@srv-tramontana:~$ touch -t 202608010900.00 treball/2026/08/informes/resum.txt
operador@srv-tramontana:~$ ls -l --time-style=long-iso treball/2026/08/informes/
total 0
-rw-rw-r-- 1 operador operador 0 2026-08-01 09:00 resum.txttouch amb -t crea i fixa la marca en una sola operació. El format és AAAAMMDDhhmm.ss.
operador@srv-tramontana:~$ stat -c '%n %y' dades/reserves.csv
dades/reserves.csv 2026-08-18 07:55:02.882910233 +0200
operador@srv-tramontana:~$ cp -p dades/reserves.csv treball/2026/08/dades/
operador@srv-tramontana:~$ stat -c '%n %y' treball/2026/08/dades/reserves.csv
treball/2026/08/dades/reserves.csv 2026-08-18 07:55:02.882910233 +0200Les marques coincideixen al nanosegon. Sense -p, la còpia tindria la data d'ara. Fixa't que el destí acaba en /: com que el directori existeix, la còpia es fa a dins conservant el nom.
operador@srv-tramontana:~$ rename -n 's/\.txt$/.md/' treball/2026/08/informes/*.txt
rename(treball/2026/08/informes/resum.txt, treball/2026/08/informes/resum.md)
operador@srv-tramontana:~$ rename 's/\.txt$/.md/' treball/2026/08/informes/*.txt
operador@srv-tramontana:~$ ls treball/2026/08/informes/
resum.mdEl \. escapa el punt perquè signifiqui un punt literal i no «qualsevol caràcter», i el $ ancora el patró al final del nom, de manera que un fitxer anomenat notes.txt.vell no en resultaria afectat. Totes dues coses són expressions regulars (lliçó 03-02).
Solució 2
Els problemes del procediment d'en Luis:
1. Totes dues ordres sobreescriuen la còpia anterior sense avisar. Els noms app-backup i app.tar.gz són fixos. Cada dia es trepitja la còpia del dia anterior, així que en realitat només existeix una còpia: la d'ahir. Si el problema es detecta dos dies després, no hi ha res a què tornar.
2. Pitjor encara: se sobreescriu abans de saber si el desplegament va bé. Si el desplegament d'avui falla i ja has aixafat la còpia bona amb la còpia de la versió trencada, has perdut el punt de retorn.
3. cp -r no preserva permisos ni propietaris. L'executable pot perdre el seu bit d'execució i tot passa a pertànyer a l'usuari que executa l'ordre. Restaurar aquesta còpia deixaria l'aplicació sense arrencar. Ha de ser cp -a o, millor, rsync -a.
4. tar czf amb ruta absoluta. Guarda la jerarquia opt/tramontana/app/ dins del paquet. En extreure no obtens app/, sinó tres nivells de directoris, i tar avisa amb «Removing leading / from member names». Falta -C.
5. Es fan dues còpies redundants del mateix, una sense comprimir (48 MB) i una altra comprimida (19 MB), ocupant 67 MB per desplegament sense que cap aporti res que l'altra no tingui.
6. No hi ha verificació. Ningú comprova que el .tar.gz es pugui obrir ni que contingui el que ha de contenir. Una còpia que no s'ha verificat no és una còpia: és una suposició.
7. No hi ha cap control d'espai. Si /srv s'omple a mitja tar, queda un fitxer truncat que sembla una còpia vàlida.
Procediment reescrit:
#!/bin/bash
# Copia prèvia al desplegament de Tramontana Reserves
# Ús: executar ABANS de desplegar
DATA=$(date +%F-%H%M)
VERSIO=$(cat /opt/tramontana/app/version.txt | tr ' ' '-')
DESTI=/srv/tramontana/backups/pre-desplegament
PAQUET="$DESTI/app-${DATA}.tar.gz"
# 1. Assegurar el destí (idempotent)
mkdir -p "$DESTI" || exit 1
# 2. Comprovar que hi ha espai suficient
df -h "$DESTI"
# 3. Empaquetar amb nom únic per data, preservant permisos
tar -czf "$PAQUET" -C /opt/tramontana app || exit 1
# 4. Verificar que el paquet es pot llegir i què conté
tar -tzf "$PAQUET" > /dev/null || exit 1
echo "Contingut:"
tar -tzvf "$PAQUET"
# 5. Suma de comprovació
sha256sum "$PAQUET" > "$PAQUET.sha256"
echo "Copia creada: $PAQUET"Correccions aplicades:
- Nom amb data i hora: cada execució crea un fitxer diferent. No es trepitja mai res.
- Un sol paquet comprimit en comptes de dues còpies.
-C /opt/tramontana app: dins del paquet hi ha un únicapp/net.tarpreserva permisos i propietaris per disseny, així que no cal-a.|| exit 1a cada pas crític: si alguna cosa falla, l'script s'atura en comptes de continuar com si res. És el&&/||de la lliçó 02-01 aplicat.- Verificació amb
tar -tzfabans de donar la còpia per bona. - Suma de comprovació per detectar corrupció posterior.
El que encara li falta i arribarà al seu moment: rotació (esborrar còpies de més de N dies perquè /srv no creixi sense fi), que es fa amb find -mtime a la lliçó 03-03; automatització amb cron (03-07); i destí remot, perquè una còpia al mateix disc que l'original no protegeix contra una fallada de maquinari (05-08).
Com dir-l'hi a en Luis: el seu procediment fa el gest de copiar però no compleix cap de les tres propietats d'una còpia útil —única, verificable i restaurable—. I la més greu és la primera: en fer servir un nom fix, la còpia bona es destrueix just abans que la necessitis.
Solució 3
Elecció del format: zip. La Marta treballa a Windows i obrirà els fitxers amb l'Excel. Encara que a Linux tar.gz conserva millor les metadades, aquí això no aporta res —són fitxers de dades, no executables— i sí que suposaria que la Marta hagués d'instal·lar una eina per obrir-lo. Windows obre .zip de manera nativa amb doble clic. La compatibilitat amb el destinatari mana sobre la puresa tècnica.
# 1. Preparar el directori d'enviament
operador@srv-tramontana:~$ mkdir -p /tmp/enviament-marta
# 2. Copiar les dades preservant dates
operador@srv-tramontana:~$ cp -p ~/dades/reserves.csv ~/dades/cases.txt /tmp/enviament-marta/
# 3. Redactar l'informe de contingut
operador@srv-tramontana:~$ cat > /tmp/enviament-marta/LLEGEIXME.txt <<'FI'
PAQUET DE DADES - TRAMONTANA RESERVES
Generat el 2026-08-18 per l'equip de sistemes
CONTINGUT
---------
reserves.csv Reserves registrades. Separador: punt i coma (;)
Columnes: id;data;casa;hoste;nits;import
cases.txt Llistat de cases rurals disponibles
COM OBRIR reserves.csv A L'EXCEL
--------------------------------
El fitxer fa servir punt i coma com a separador. Si en obrir-lo tot
apareix en una sola columna, ves a Dades > Text en columnes i
selecciona "punt i coma" com a delimitador.
VERIFICACIO
-----------
El paquet inclou un fitxer .sha256 amb l'empremta digital.
FI(Aquell cat > fitxer <<'FI' és un here document: escriu tot el bloc al fitxer. S'explica al Mòdul 3; aquí el fas servir com a eina.)
# 4. Empaquetar en zip, des de dins del directori per no arrossegar rutes
operador@srv-tramontana:~$ cd /tmp/enviament-marta
operador@srv-tramontana:/tmp/enviament-marta$ zip /tmp/dades-tramontana-2026-08-18.zip *
adding: LLEGEIXME.txt (deflated 48%)
adding: cases.txt (deflated 41%)
adding: reserves.csv (deflated 67%)
# 5. Verificar el contingut del paquet
operador@srv-tramontana:/tmp/enviament-marta$ unzip -l /tmp/dades-tramontana-2026-08-18.zip
Archive: /tmp/dades-tramontana-2026-08-18.zip
Length Date Time Name
--------- ---------- ----- ----
782 2026-08-18 11:44 LLEGEIXME.txt
418 2026-08-17 19:40 cases.txt
1204 2026-08-18 07:55 reserves.csv
--------- -------
2404 3 files
# 6. Suma de comprovació
operador@srv-tramontana:/tmp/enviament-marta$ cd /tmp
operador@srv-tramontana:/tmp$ sha256sum dades-tramontana-2026-08-18.zip > dades-tramontana-2026-08-18.zip.sha256
operador@srv-tramontana:/tmp$ cat dades-tramontana-2026-08-18.zip.sha256
3a7f1c9e2b8d4056f1a3c7e9b2d5f804a6c1e3b7d9f2a5c8e0b4d7f1a3c6e9b2 dades-tramontana-2026-08-18.zipDetalls del procediment que mereixen comentari:
cdal directori izip *en comptes dezip -r /tmp/x.zip /tmp/enviament-marta: així el paquet conté els tres fitxers a la seva arrel, sense la jerarquiatmp/enviament-marta/a dins. És l'equivalent del-Cdetar.cp -pconserva les dates originals de les dades, visibles al llistat del zip. La Marta pot veure quecases.txtés d'ahir ireserves.csvd'aquest matí.- El LLEGEIXME resol per endavant la pregunta que la Marta hauria fet per telèfon: per què el CSV es veu malament a l'Excel. El separador punt i coma és el que fa servir
reserves.csv, i en un Excel amb configuració regional espanyola sol funcionar directament, però convé documentar-ho. - La suma de comprovació va en un fitxer a part, no dins del zip: ha de poder verificar-se sense obrir el paquet.
Nota important per al món real: reserves.csv conté noms d'hostes, és a dir, dades personals. Enviar aquest fitxer fora del servidor per correu o per un canal no xifrat té implicacions de protecció de dades. En un entorn real, aquest enviament hauria d'anar xifrat i comptar amb l'aprovació del responsable de protecció de dades. Tornarem sobre el xifratge de fitxers a la lliçó 06-05.
Conclusió
Ja escrius al disc, i ho fas amb xarxa de seguretat.
touchcrea fitxers buits i manipula marques de temps, i el seuctimesempre delata la manipulació.mkdir -pés idempotent i crea arbres complets;rmdirés segur per disseny perquè només esborra el que és buit.cpsobreescriu en silenci;-aés l'opció per a còpies fidels; i el parany de la barra final i del destí preexistent produeix resultats diferents amb la mateixa ordre.mvés instantani dins del mateix sistema de fitxers perquè només canvia una entrada de directori, i és copiar-i-esborrar, lent i no atòmic, quan creua a un altre.rmés irreversible,rm -rfamb una variable buida ha esborrat sistemes sencers, i les defenses són mirar abans,-I, cometes i, sobretot, còpies de seguretat.rename -nreanomena per lots amb simulació prèvia.rsync -avés elcpcorrecte per a directoris: incremental, verificable, reprenible, amb--dry-runi amb la barra final que sí que importa.tarempaqueta preservant permisos; es llista amb-tabans d'extreure i es fa servir-Cper no arrossegar rutes absolutes.gzipper defecte,xzper distribuir,zipper a Windows, i saps justificar l'elecció.- I has preparat un paquet de producció complet: verificat, amb suma de comprovació i provat abans d'enviar-lo.
Ja saps moure fitxers de lloc. Falta el que hi ha a dins. A la propera lliçó, Visualització i Edició de Fitxers, aprendràs a mirar el contingut sense obrir un editor amb cat, less, head i tail —inclòs tail -F per seguir errors.log en directe mentre passa una incidència—, i a editar-lo amb nano a fons i amb el vim de supervivència que necessitaràs el dia que entris en un servidor on no hi hagi res més. Establiràs a més una convenció que el curs farà servir a partir d'aleshores: còpia de seguretat del fitxer de configuració abans de tocar-lo. I veuràs com comparar dues versions d'app.conf amb diff per saber exactament què ha canviat, que és la pregunta que es fa sempre després que alguna cosa deixi de funcionar.
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
