Un servidor en producció acumula desenes de milers de fitxers. A srv-tramontana hi ha quatre releases, còpies de seguretat en tres carpetes, fitxers .bak- repartits per on algú va editar alguna cosa, i registres que creixen cada dia. Quan la Marta pregunta «quant ocupen els releases vells?» o quan cal esbrinar si una credencial s'ha colat en algun fitxer, no serveix navegar amb cd i ls: cal preguntar-ho al sistema.
Aquesta lliçó et dona les tres eines de cerca i, més important, el criteri per triar entre elles. locate respon en mil·lisegons però et pot mentir. find recorre l'arbre de debò i accepta criteris que cap altra eina no ofereix. grep no busca fitxers: busca dins d'ells. Són tres problemes diferents, i confondre'ls es paga en temps o en errors.
Contingut
- Tres eines, tres problemes
locate: la base de dades precalculadafind: anatomia d'una cerca- Criteris de
find: nom, tipus, mida, temps, propietat, profunditat - Combinar criteris amb lògica
- Accions:
-print,-delete,-execi-execdir - Noms amb espais i el patró
-print0 | xargs -0 grepa fonsripgrep, l'alternativa moderna- Casos reals de Tramontana
- Tres eines, tres problemes
| Pregunta | Eina | Per què |
|---|---|---|
| On és el fitxer que es diu X? | locate |
Instantani; suficient si el fitxer no és recent |
| Quins fitxers compleixen aquestes condicions? | find |
L'únic que filtra per mida, data, permisos, propietari |
| Quins fitxers contenen aquest text? | grep -r |
És l'únic que obre i llegeix el contingut |
La confusió típica és fer servir find per al que fa grep o a l'inrevés. Regla mnemotècnica: find busca per les propietats del fitxer, grep busca pel seu contingut. I es combinen constantment, perquè l'habitual és «busca als fitxers que compleixen X si apareix Y».
locate: la base de dades precalculada
locate: la base de dades precalculadalocate no recorre el disc: consulta un índex generat periòdicament. A Ubuntu 24.04 la implementació és plocate.
operador@srv-tramontana:~$ sudo apt install -y plocate
operador@srv-tramontana:~$ locate confirmacio.html
/opt/tramontana/releases/3.2.1/plantilles/confirmacio.html
/opt/tramontana/releases/3.3.0/plantilles/confirmacio.html
operador@srv-tramontana:~$ touch /home/operador/dades/prova-locate.txt
operador@srv-tramontana:~$ locate prova-locate.txt # sense sortida: encara no indexat
operador@srv-tramontana:~$ sudo updatedb && locate prova-locate.txt
/home/operador/dades/prova-locate.txtLa base s'actualitza un cop al dia mitjançant una tasca programada. Fins que no s'executi updatedb, el que acabes de crear no existeix per a locate, i el que acabes d'esborrar continua apareixent.
Opcions útils: -i (ignora majúscules), -c (compta), -b '\nom' (coincideix només amb el nom base), -l 5 (limita resultats), -e (verifica que el fitxer encara existeix). Quan fer-lo servir: per localitzar un fitxer de sistema o de configuració del qual recordes el nom a mitges. Quan no: en qualsevol procediment seriós, i mai com a entrada d'una ordre destructiva. Un rm alimentat per locate pot intentar esborrar rutes obsoletes o passar per alt el que sí que s'havia d'esborrar.
find: anatomia d'una cerca
find: anatomia d'una cercaEls tres blocs van en aquest ordre, i aquesta és la font de la meitat dels errors. find processa els arguments seqüencialment: tot el que va abans del primer criteri ho interpreta com a ruta.
operador@srv-tramontana:~$ find /opt/tramontana/releases -maxdepth 1 -type d
/opt/tramontana/releases
/opt/tramontana/releases/3.1.0
/opt/tramontana/releases/3.2.0
/opt/tramontana/releases/3.2.1
/opt/tramontana/releases/3.3.0Si no indiques acció, find assumeix -print. Si no indiques ruta, fa servir el directori actual; escriure-la sempre és un bon costum, perquè un find sense ruta llançat des de / recorre el sistema sencer.
- Criteris de
find
findPer nom
| Criteri | Coincideix amb |
|---|---|
-name '*.log' |
el nom base, distingeix majúscules |
-iname '*.LOG' |
igual però sense distingir |
-path '*/plantilles/*' |
la ruta completa |
-regex '.*/3\.[12]\..*' |
la ruta completa, amb expressió regular |
El patró va entre cometes simples, sense excepció: si no, Bash l'expandeix contra el directori actual abans que find el vegi, i busques una altra cosa.
Per tipus
-type f fitxer regular, d directori, l enllaç simbòlic, s sòcol, b/c dispositius, p canonada amb nom.
find /opt/tramontana -maxdepth 1 -type l -ls et retorna una sola entrada: l'enllaç de desplegament app -> releases/3.2.1 del Mòdul 2, amb el seu destí relatiu.
Per mida
-size accepta sufixos: c bytes, k KiB, M MiB, G GiB. Sense sufix, la unitat són blocs de 512 bytes, que gairebé mai és el que vols. El signe delimita: +10M més gran que, -10M més petit que, 10M exactament (arrodonit cap amunt, així que poques vegades és útil).
operador@srv-tramontana:~$ find /opt/tramontana -type f -size +10M -exec ls -lh {} +
-rwxr-x--- 1 root tramontana 48M Aug 10 09:12 /opt/tramontana/releases/3.2.1/executable
-rwxr-x--- 1 root tramontana 48M Aug 15 11:03 /opt/tramontana/releases/3.3.0/executablePer temps
Aquí hi ha el detall que cal entendre bé perquè genera resultats equivocats en silenci.
| Criteri | Unitat | Significat |
|---|---|---|
-mtime n |
dies | contingut modificat |
-mmin n |
minuts | contingut modificat |
-atime / -amin |
dies / minuts | últim accés |
-ctime / -cmin |
dies / minuts | metadades canviades |
-newer FITXER |
— | més recent que aquell fitxer |
Per què -mtime +7 no significa «modificat els últims 7 dies» ni «fa més de 7 dies» tal com ho diries en veu alta. find calcula els dies transcorreguts i descarta la part decimal. Un fitxer de 7 dies i 20 hores té una antiguitat de 7,83 dies, que truncat és 7. I +7 significa «estrictament més gran que 7», així que aquest fitxer no hi coincideix. A la pràctica, -mtime +7 selecciona el que té més de 8 dies d'antiguitat.
| Expressió | Selecciona fitxers amb antiguitat |
|---|---|
-mtime 0 |
menys de 24 h |
-mtime -7 |
menys de 7 dies |
-mtime 7 |
entre 7 i 8 dies exactament |
-mtime +7 |
8 dies o més |
Quan la precisió importa —i en una purga automàtica importa— fes servir -mmin o, millor, compara contra un fitxer de referència:
operador@srv-tramontana:~$ touch -d '2026-08-01 00:00' /tmp/ref
operador@srv-tramontana:~$ find /srv/tramontana/backups -type f ! -newer /tmp/refAixò és «anterior a l'1 d'agost», sense ambigüitat i sense aritmètica mental. És la manera que fem servir a Tramontana.
Per propietat i permisos
operador@srv-tramontana:~$ find /var/log/tramontana -type f ! -group adm
operador@srv-tramontana:~$ find /opt/tramontana -type f -perm /u+sEl primer verifica que tots els registres tenen adm com a grup propietari; sense sortida significa que la convenció es compleix. El segon és una auditoria de seguretat: busca binaris amb SUID, aquell bit que a 02-07 vas aprendre a reconèixer. La sintaxi de -perm té tres formes:
| Forma | Significa |
|---|---|
-perm 640 |
permisos exactament 640 |
-perm -640 |
com a mínim aquests bits (en pot tenir més) |
-perm /640 |
algun d'aquests bits |
També -user operador, -group tramontana, -uid 997, -nouser i -nogroup (orfes, típics després d'esborrar un compte).
Per profunditat
-maxdepth i -mindepth són opcions de posició: han d'anar abans de qualsevol criteri. Si escrius find /opt -name '*.log' -maxdepth 2, find funciona però avisa que el resultat no és el que esperes, perquè aleshores ja ha decidit descendir. Posa-les sempre just després de la ruta.
- Combinar criteris amb lògica
Els criteris consecutius es combinen amb I implícit. Per a la resta:
| Operador | Significat |
|---|---|
-a |
I (implícit, gairebé mai s'escriu) |
-o |
O |
! o -not |
negació |
\\( \\) |
agrupació (els parèntesis van escapats) |
operador@srv-tramontana:~$ find /home/operador -type f \( -name '*.bak-*' -o -name '*.tmp' \) -mtime +30
/home/operador/.bashrc.bak-2026-07-02
/home/operador/dades/reserves.csv.bak-2026-07-11Els parèntesis són imprescindibles: sense ells, la precedència fa que -mtime +30 s'apliqui només a l'última alternativa, i t'emportaries per davant tots els .bak-* sense importar-ne l'edat. Quan barregis -o amb qualsevol altra cosa, agrupa. Els parèntesis s'escapen perquè per a Bash són metacaràcters; també valen '(' i ')'.
- Accions
| Acció | Què fa |
|---|---|
-print |
imprimeix la ruta (per defecte) |
-print0 |
igual, separant amb byte nul |
-ls |
com ls -dils |
-delete |
esborra (s'avalua abans que altres criteris: compte) |
-exec CMD {} \; |
executa CMD un cop per fitxer |
-exec CMD {} + |
executa CMD agrupant fitxers |
-execdir CMD {} \; |
igual, però des del directori del fitxer |
-ok CMD {} \; |
com -exec, demanant confirmació |
{} és el marcador que find substitueix per la ruta. El terminador \; va escapat perquè Bash no se'l quedi.
\; enfront de +: la diferència de rendiment
Amb \; es llança un procés per fitxer. Amb +, find acumula rutes i llança el mínim nombre de processos possible. Sobre 5.000 fitxers del sistema:
operador@srv-tramontana:~$ time find /usr/share/doc -type f -exec basename {} \; > /dev/null
real 0m11,482s
operador@srv-tramontana:~$ time find /usr/share/doc -type f -exec basename {} + > /dev/null
real 0m0,213sCinquanta vegades més ràpid. La diferència no és l'ordre: és el cost de crear milers de processos. Fes servir + sempre que l'ordre accepti diversos arguments. Necessites \; només quan l'ordre admet un únic argument o quan {} apareix al mig de l'ordre (per exemple -exec mv {} {}.old \;).
-execdir i per què és més segur
-execdir executa l'ordre des del directori que conté el fitxer, i li passa ./nom en comptes de la ruta completa. Això elimina una classe sencera de problemes: rutes que comencen per guionet i que l'ordre interpretaria com a opcions, i la condició de cursa en què algú substitueix un directori intermedi per un enllaç simbòlic entre el moment en què find el troba i el moment en què l'ordre actua. Si has d'executar alguna cosa destructiva sobre directoris on escriuen altres usuaris, -execdir és l'opció correcta.
-delete, amb cap
operador@srv-tramontana:~$ find /srv/tramontana/backups/temporals -type f -name '*.tmp' -mtime +7
/srv/tramontana/backups/temporals/export-1.tmp
/srv/tramontana/backups/temporals/export-2.tmp
operador@srv-tramontana:~$ find /srv/tramontana/backups/temporals -type f -name '*.tmp' -mtime +7 -deleteSempre en dos passos: primer sense -delete per veure la llista, després amb ell. És la mateixa convenció que ja apliques a l'rm. I un advertiment real: -delete implica -depth, i si el col·loques abans dels criteris, find l'avalua abans i esborra tot el que trobi. L'ordre importa.
- Noms amb espais i el patró
-print0 | xargs -0
-print0 | xargs -0Els noms de fitxer a Linux poden contenir espais, tabuladors i fins i tot salts de línia. Qualsevol canonada que separi rutes per espais s'hi trenca.
operador@srv-tramontana:~$ touch '/tmp/informe agost.txt'
operador@srv-tramontana:~$ find /tmp -name '*.txt' | xargs ls -l
ls: cannot access '/tmp/informe': No such file or directory
ls: cannot access 'agost.txt': No such file or directoryLa solució és un separador que no pot aparèixer en un nom: el byte nul. find l'emet amb -print0 i xargs l'espera amb -0.
operador@srv-tramontana:~$ find /tmp -name '*.txt' -print0 | xargs -0 ls -l
-rw-r----- 1 operador operador 0 Aug 18 11:20 '/tmp/informe agost.txt'find ... -print0 | xargs -0 ordre és el patró canònic. Memoritza'l tal qual.
xargs en si
xargs construeix línies d'ordres a partir de la seva entrada estàndard. Opcions que importen:
| Opció | Efecte |
|---|---|
-0 |
entrada separada per bytes nuls |
-n 5 |
com a màxim 5 arguments per invocació |
-I{} |
substitueix {} per cada línia; implica un argument per invocació |
-P 4 |
executa fins a 4 processos en paral·lel |
-r, --no-run-if-empty |
no executar res si l'entrada és buida |
-t |
mostra l'ordre abans d'executar-la (depuració) |
--no-run-if-empty evita un error clàssic: sense ella, xargs rm amb entrada buida executa rm sense arguments. A GNU és el comportament per defecte, però escriure-la explícita fa l'ordre portable i documenta la intenció.
grep a fons
grep a fons| Opció | Efecte |
|---|---|
-i |
ignora majúscules |
-v |
inverteix: línies que no coincideixen |
-n |
número de línia |
-c |
només compta coincidències |
-l / -L |
només noms de fitxers amb / sense coincidència |
-r / -R |
recursiu (-R segueix enllaços simbòlics) |
-w / -x |
paraula completa / línia completa |
-o |
imprimeix només la part que coincideix |
-A n / -B n / -C n |
n línies després / abans / de context |
-e P1 -e P2 |
diversos patrons |
-f fitxer |
patrons llegits d'un fitxer |
-E / -F / -P |
ERE / cadenes fixes / PCRE |
--include / --exclude |
filtra quins fitxers es llegeixen en mode recursiu |
-q |
silenciós; només importa $? |
operador@srv-tramontana:~$ grep -n -A2 'ERROR 500' /var/log/tramontana/errors.log | head -6
41:2026-08-18 03:12:44 ERROR 500 /reserves db_timeout
42-2026-08-18 03:12:44 TRACE connexions_actives=200
43-2026-08-18 03:12:45 WARN pool exhaurit
--
58:2026-08-18 03:19:02 ERROR 500 /reserves db_timeoutEl context converteix una línia solta en una història: l'error 500 va acompanyat de connexions_actives=200, que és exactament el max_connexions d'app.conf. Aquí hi ha una hipòtesi de diagnòstic.
-F enfront de -E. Amb -F, grep tracta el patró com a text literal i fa servir un algorisme de cerca multipatró molt més ràpid que un motor d'expressions regulars. Si busques una cadena fixa, -F és l'opció correcta: més ràpida i sense sorpreses amb els metacaràcters. Buscar 10.0.2.15 amb -E coincidiria també amb 10x0y2z15; amb -F, només amb la IP.
-q com a test. No imprimeix res; només retorna 0 si ha trobat alguna cosa. És la manera correcta de preguntar «apareix això?» i encadenar amb &&:
operador@srv-tramontana:~$ grep -q 'log_nivell=debug' /etc/tramontana/app.conf \
&& echo "AVÍS: l'app està en mode depuració"
AVÍS: l'app està en mode depuracióUna troballa real: deixar log_nivell=debug en producció infla els registres i pot abocar dades sensibles al fitxer.
ripgrep, l'alternativa moderna
ripgrep, l'alternativa modernarg fa el mateix que grep -r i és diverses vegades més ràpid: recorre en paral·lel, respecta .gitignore, ignora binaris i numera les línies per defecte.
operador@srv-tramontana:~$ rg -n 'db_timeout' /var/log/tramontana/
errors.log:41:2026-08-18 03:12:44 ERROR 500 /reserves db_timeout
errors.log:58:2026-08-18 03:19:02 ERROR 500 /reserves db_timeoutS'instal·la amb sudo apt install -y ripgrep. És excel·lent per a la teva feina diària. Amb una salvetat professional: grep és a totes les màquines i rg no. En un servidor aliè, en un contenidor mínim o en un procediment documentat, escriu grep.
- Casos reals de Tramontana
a) Releases antics per purgar. Quant ocupen i quins no són l'actiu:
operador@srv-tramontana:~$ readlink /opt/tramontana/app
releases/3.2.1
operador@srv-tramontana:~$ find /opt/tramontana/releases -maxdepth 1 -mindepth 1 -type d \
! -name '3.2.1' -exec du -sh {} +
97M /opt/tramontana/releases/3.1.0
98M /opt/tramontana/releases/3.2.0
99M /opt/tramontana/releases/3.3.0-mindepth 1 exclou el mateix /opt/tramontana/releases, que si no apareixeria a la llista. Abans d'esborrar res: 3.3.0 és el release següent, no un d'antic. La regla que vam fixar és conservar l'actiu i l'immediatament anterior, així que el candidat a purga és 3.1.0, i només ell. Aquest és el criteri que automatitzarem a 03-07.
b) Tots els .bak-* dispersos.
operador@srv-tramontana:~$ sudo find /etc /home /srv /opt -name '*.bak-*' -type f -printf '%TY-%Tm-%Td %10s %p\n' | sort
2026-07-02 3771 /home/operador/.bashrc.bak-2026-07-02
2026-07-11 1284 /home/operador/dades/reserves.csv.bak-2026-07-11
2026-08-18 512 /etc/tramontana/app.conf.bak-2026-08-18-printf permet compondre la sortida exacta que vols: %TY-%Tm-%Td la data de modificació, %10s la mida alineada, %p la ruta. És més net que encadenar ls i awk.
c) Buscar una credencial pel sistema. La Marta pregunta si la contrasenya de la base de dades pot ser en algun lloc on no hauria de ser:
operador@srv-tramontana:~$ sudo grep -rIl --exclude-dir='.git' -e 'db_password' /etc /home /srv /opt
/etc/tramontana/app.conf
/srv/tramontana/backups/temporals/app.conf.copiaApareix on toca... i on no. -I omet els binaris (sense ella, l'executable de 48 MB s'analitza inútilment i pot embrutar el terminal), -l dona només el nom del fitxer, i --exclude-dir evita soroll. La segona ruta és una descoberta seriosa:
operador@srv-tramontana:~$ ls -l /srv/tramontana/backups/temporals/app.conf.copia
-rw-r--r-- 1 operador operador 512 Aug 12 17:40 /srv/tramontana/backups/temporals/app.conf.copiaPermisos 644: llegible per qualsevol usuari del sistema, quan l'original és 640 de root:tramontana. És una còpia que en Luis va deixar en depurar un problema de connexió. S'elimina, i a l'informe per a la Marta es diu què protegeix la mesura (ningú més no pot llegir aquella credencial des del servidor) i què no (la contrasenya va estar exposada sis dies; cal rotar-la, perquè esborrar la còpia no desfà l'exposició). Aquesta distinció és la que s'espera de tu.
d) Comptar errors per tipus.
operador@srv-tramontana:~$ grep -c '' /var/log/tramontana/errors.log
87
operador@srv-tramontana:~$ grep -oE 'ERROR [0-9]{3}' /var/log/tramontana/errors.log | sort | uniq -c | sort -rn
41 ERROR 500
28 ERROR 503
18 ERROR 404grep -c '' compta totes les línies —el patró buit coincideix sempre—: 87, com esperàvem. D'aquestes, 41 són errors 500 de servidor. Això ja és un informe.
Errors Comuns i Consells
- No posar entre cometes el patró de
-name. Bash l'expandeix contra el directori actual ifindrep una altra cosa. - Posar
-maxdepthdesprés dels criteris. Ha d'anar immediatament després de la ruta. - Barrejar
-osense parèntesis. La precedència farà que l'últim criteri s'apliqui només a una branca. - Interpretar
-mtime +7literalment. Són 8 dies o més. Si importa, fes servir! -newer fitxer-de-referencia. - Encadenar
find | xargssense-print0/-0. Es trenca amb el primer nom que porti un espai. - Fer servir
-exec ... \;sobre milers de fitxers. Canvia a+i guanyes un ordre de magnitud. - Posar
-deleteabans dels criteris. S'avalua primer i esborra de més. I no et fiïs delocateper prendre decisions: és una foto d'ahir, verifica ambfindo ambls. - Consell:
findbarreja a la sortida els avisos de directoris sense permís. Afegeix-hi2>/dev/nullper silenciar-los —ho veuràs en detall a 03-04— però només quan sàpigues que no t'interessen. I davant d'unfindcomplex, executa'l primer amb-ls: és el seu--dry-run.
Exercicis
Exercici 1. Localitza a /home/operador tots els fitxers regulars més grans d'1 MiB modificats fa més de dues setmanes, mostrant data, mida i ruta ordenats per data. Explica per què no has fet servir -mtime +14 a seques.
Exercici 2. Esbrina quins fitxers de configuració del sistema esmenten el port de la base de dades de Tramontana (5432), excloent-ne els binaris i sense que els noms amb espais trenquin res. Després compta quantes vegades apareix en total.
Exercici 3. Prepara —sense executar-la— la purga del release 3.1.0 i de tots els fitxers .tmp de més de 7 dies a /srv/tramontana/backups/temporals. Mostra exactament què s'esborraria, quant espai s'alliberaria, i justifica la verificació prèvia que faries per no esborrar el release actiu.
Solucions
Solució 1.
operador@srv-tramontana:~$ touch -d '2026-08-04 00:00' /tmp/ref-14d
operador@srv-tramontana:~$ find /home/operador -type f -size +1M ! -newer /tmp/ref-14d \
-printf '%TY-%Tm-%Td %8s %p\n' | sort
2026-07-11 2097152 /home/operador/dades/export-juny.tar.gz
2026-07-29 5242880 /home/operador/treball/2026/07/dades/abocament.sqlS'evita -mtime +14 perquè la seva semàntica real és «15 dies o més», pel truncament de la part decimal que vam veure a l'apartat 4. Amb un fitxer de referència creat amb touch -d, la frontera és una data concreta i verificable, no el resultat d'una aritmètica que cal recordar. En una purga automàtica aquesta diferència d'un dia pot significar esborrar l'única còpia que quedava. -printf i sort substitueixen ls -l, que no admet ordenar per data una llista arbitrària de rutes.
Solució 2.
operador@srv-tramontana:~$ sudo grep -rIlF --exclude-dir=.git '5432' /etc 2>/dev/null
/etc/tramontana/app.conf
/etc/postgresql/16/main/postgresql.conf
operador@srv-tramontana:~$ sudo grep -rIhoF '5432' /etc 2>/dev/null | wc -l
7-r gestiona el recorregut internament, així que no hi ha cap canonada per trencar: el problema dels noms amb espais ni tan sols es planteja. És la primera lliçó de la solució: si grep -r et basta, no muntis find | xargs. -I descarta binaris, -F tracta 5432 com a literal (és un número, no hi ha metacaràcters, però és més ràpid i explícit), i 2>/dev/null silencia els avisos de permís denegat en subdirectoris d'/etc que ni tan sols amb sudo interessen. Per comptar, -h suprimeix el nom del fitxer i -o emet una línia per coincidència, de manera que wc -l compta aparicions i no línies que en contenen alguna.
Solució 3. Primer la verificació que no es pot saltar:
L'actiu és 3.2.1, per tant 3.1.0 no és l'actiu. Aquesta comprovació va sempre abans, perquè l'enllaç app és l'única font de veritat sobre quin release està servint: fiar-se de la memòria o del número més alt és com s'esborra un release en producció. I cal fer-la ara, no ahir.
operador@srv-tramontana:~$ du -sh /opt/tramontana/releases/3.1.0
97M /opt/tramontana/releases/3.1.0
operador@srv-tramontana:~$ find /srv/tramontana/backups/temporals -type f -name '*.tmp' -mtime +7 \
-printf '%TY-%Tm-%Td %8s %p\n'
2026-08-02 4096 /srv/tramontana/backups/temporals/export-1.tmp
2026-08-05 8192 /srv/tramontana/backups/temporals/export-2.tmpTotal a alliberar: 97 MiB més 12 KiB. Les ordres que executaríem, ja validades per les llistes anteriors:
# sudo rm -rf /opt/tramontana/releases/3.1.0
# find /srv/tramontana/backups/temporals -type f -name '*.tmp' -mtime +7 -deleteEstan comentades a propòsit: l'exercici demanava preparar-les. Fixa't que la segona ordre és literalment la mateixa que la de la verificació amb -delete afegit al final. Aquest és el procediment correcte: no s'escriu una ordre nova per esborrar, s'afegeix l'acció a l'ordre que ja has vist funcionar. Qualsevol canvi en el patró entre la comprovació i l'esborrat invalida la comprovació.
Conclusió
Ja no navegues un servidor: l'interrogues.
- Tries entre les tres:
locateper a «on és»,findper filtrar per propietats del fitxer,grepper buscar contingut. I coneixes el defecte delocate: és una foto d'ahir fins al següentupdatedb. - Domines
find <rutes> <criteris> <accions>i els criteris per nom, tipus, mida, temps, propietari, permisos i profunditat, amb les tres formes de-permi les posicionals col·locades on han d'anar. - Entens de debò
-mtime +7i saps que l'alternativa robusta és! -newersobre un fitxer de referència. - Combines criteris amb
-o,!i parèntesis escapats, sabent per què l'agrupació no és opcional. - Fas servir
-exec ... +en comptes de\;perquè la diferència és d'un ordre de magnitud; coneixes-execdir, i apliques-deletenomés després d'haver vist la llista. - Tens interioritzat el patró canònic
find ... -print0 | xargs -0i manegesxargsamb-n,-I{},-Pi--no-run-if-empty. - Maneges
grepamb context, recursivitat,-o,-Fper a literals i-qcom a test encadenable, i coneixesrgcom a alternativa ràpida que no sempre estarà instal·lada. - I has resolt quatre problemes reals: quantificar els releases purgables sense tocar l'actiu, inventariar els
.bak-*, trobar una credencial exposada en una còpia oblidada —amb la conclusió honesta que esborrar-la no n'hi ha prou i cal rotar la contrasenya— i comptar els errors d'errors.logper tipus.
En diverses d'aquestes ordres has fet servir 2>/dev/null, | i > sense que ningú t'hagi explicat del tot què són. Això s'acaba a la lliçó següent. Canonades i Redirecció desmunta la mecànica: els tres fluxos estàndard i per què existeixen, com veure'ls a /proc, què és realment una canonada, la diferència entre &>fitxer, >fitxer 2>&1 i el clàssic error 2>&1 >fitxer que gairebé tothom comet, i el patró | sudo tee per escriure en fitxers protegits. En acabar-la hauràs deixat d'encadenar ordres per imitació i començaràs a compondre-les sabent exactament per on circula cada byte.
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
