Tutoriel Linux

Zoeken onder Linux: een bestand vinden zonder handmatig de hele server te hoeven doorzoeken.

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Als je weet dat een bestand ergens op een server staat, maar niet waar, is de verleiding vaak groot om map voor map te zoeken. Slecht idee. Onder Linux, vinden Het is hiervoor gemaakt: zoeken op naam, type, grootte, datum, rechten, en pas actie ondernemen wanneer het resultaat duidelijk is.

Ik raad je aan om het met beleid te gebruiken, vooral op een productieserver. Een `find`-opdracht op rootniveau kan een enorm aantal bestanden scannen, permissiefouten weergeven en de schijf onnodig belasten. Het is niet de bedoeling om de breedst mogelijke opdracht te typen, maar om het zoekgebied snel te verkleinen.

Tux gebruikt een vergrootglas om bestanden op een Linux-server te zoeken.
Met Find kunt u een bestand in een Linux-directorystructuur vinden zonder handmatig elke map te hoeven doorzoeken.

Begin door op de juiste plek te zoeken.

Het basisformulier is eenvoudig: u geeft een startmap op en vervolgens een zoekcriterium.

find /etc -name "ssh_config"

Hier zoekt Linux naar een bestand met de naam ssh_config In /enz en de bijbehorende submappen. Als je al weet dat het bestand zich op een specifieke locatie bevindt, begin dan daar. Dat is sneller, overzichtelijker en je voorkomt dat je het hele systeem onnodig doorzoekt.

Om geen rekening te houden met hoofdlettergevoeligheid, gebruikt u -naam :

find /var/www -iname "*.conf"

Als je vanuit de root begint, kun je berichten verwachten. Toestemming geweigerdDit hoeft niet per se een probleem te zijn. Je kunt ze verbergen, maar doe dit niet systematisch als je specifiek op zoek bent naar een auteursrechtkwestie.

find / -name "nginx.conf" 2>/dev/null

Beperk de zoekopdracht op bestandstype.

Op een server kan een naam overeenkomen met een bestand, een map, een symbolische link of iets anders. Voeg toe -vriendelijk om onnodige resultaten te voorkomen.

find /var/log -type f -name "*.log"
find /var/www -type d -name "cache"
find /usr/bin -type l -name "python*"

-type f richt zich op standaardbestanden. -type d doelmappen. -type l Het is gericht op symbolische links. Dit kleine filter voorkomt veel ruis in de resultaten.

Je kunt de diepte ook beperken als je niet te ver in de boomstructuur wilt gaan:

find /var/www -maxdepth 2 -type d -name "cache"

Dit is erg handig voor websites, back-ups of gebruikersmappen met veel submappen.

Zoek eerst naar de grote bestanden voordat je iets verwijdert.

Als de schijfruimte van een server bijna vol is, kan het commando `find` helpen bij het lokaliseren van grote bestanden. Begin met het weergeven van de bestanden, verwijder ze niet meteen.

find /var -type f -size +100M -print
find /home -type f -size +1G -print

Om de afmetingen op een leesbare manier weer te geven, kunt u het volgende uitvoeren: ls -lh bij elk resultaat:

find /var -type f -size +100M -exec ls -lh {} +

Als je ruimte wilt vrijmaken, ga dan niet meteen naar rmControleer eerst wat u hebt gevonden, vooral in /var/lib, /var/log of toepassingsmappen. Voor een databasebestand of cache kan een specifieke opschoonmethode nodig zijn.

Voor een meer uitgebreide benadering van het onderwerp kunt u dit aanvullen met de handleiding over Commando’s die je kunt gebruiken als de schijfruimte van Linux vol is..

Zoek op wijzigingsdatum

Om te zien wat er recent is veranderd, zijn de datumopties erg handig. Bijvoorbeeld: bestanden die in de afgelopen 7 dagen zijn gewijzigd.

find /etc -type f -mtime -7

Bestanden die meer dan 30 dagen geleden zijn gewijzigd:

find /var/log -type f -mtime +30

-mtijd Werkt binnen enkele dagen. Voor een meer verfijnde zoekopdracht kunt u ook kijken naar -mmin, wat binnen enkele minuten werkt:

find /tmp -type f -mmin -60

Dit is handig na een configuratiewijziging, een update of een script dat bestanden heeft gegenereerd zonder duidelijk aan te geven waar.

Filteren op rechten zonder de machtigingen te schenden

De zoekfunctie kan ook zoeken op basis van machtigingen. Bijvoorbeeld om uitvoerbare scripts in een map te vinden:

find /usr/local/bin -type f -perm /111

Om bestanden te identificeren die te gemakkelijk toegankelijk zijn, kunt u zoeken naar bestanden die door iedereen bewerkbaar zijn:

find /var/www -type f -perm -002 -exec ls -lh {};

Corrigeer een lijst met resultaten niet met een chmod Globale machtigingen zonder de context te begrijpen. Linux-machtigingen kunnen snel leiden tot applicatiecrashes. Als je dit punt wilt nalezen, raadpleeg dan het artikel over recursieve chmod onder Linux Dit verklaart precies waarom we voorzichtig moeten blijven.

-exec gebruiken zonder een ramp te veroorzaken

-exec Het stelt je in staat om een ​​commando uit te voeren op de gevonden bestanden. Het is krachtig, dus het is ook de plek waar je de meeste schade kunt aanrichten.

Begin altijd met het weergeven van de resultaten:

find /tmp -type f -name "*.tmp" -print

Pas dan, als de lijst correct is, kunt u om bevestiging vragen voordat de lijst wordt verwijderd:

find /tmp -type f -name "*.tmp" -exec rm -i {} +

Het echtpaar {} geeft de gevonden bestanden weer. + Het commando `find` vraagt ​​om, indien mogelijk, meerdere resultaten in één commando te groeperen, waardoor het niet nodig is om voor elk bestand een apart proces te starten.

find /var/log -type f -name "*.log" -exec ls -lh {} +

Mijn advies is simpel: verwijder niets automatisch voordat je de lijst hebt gecontroleerd. Op een server is het besparen van een seconde het niet waard om het vanuit een back-up te herstellen.

Een snelle methode voordat je iets in productie brengt

  • begin met het meest accurate bestand dat beschikbaar is;
  • toevoegen -type f, -type d Of -type l zo snel mogelijk;
  • gebruik -maxdiepte als je een te diepgaande zoekopdracht wilt vermijden;
  • de resultaten weergeven met -afdrukken Of -exec ls -lh voordat u actie onderneemt;
  • Bewaar de vernietigende commando’s voor het laatst, indien mogelijk met bevestiging.

Voor naslagdocumentatie kunt u de GNU Findutils-handleiding raadplegen op vinden en de pagina vind(1) van man7. Als je de logbestanden moet volgen nadat je een bestand hebt gevonden, raadpleeg dan de handleiding op staart onder Linux Deze methode vormt een goede aanvulling.

sudo apt update && sudo apt upgrade