Leer Linux

Hoe recursief de bestanden op datum te vinden en weer te geven in Linux

Hoe recursief de bestanden op datum te vinden en weer te geven in Linux

De belangrijkste reden dat de meeste gebruikers van besturingssystemen Linux verkiezen boven andere besturingssystemen, is de vrijheid om te verkennen. Met Linux ben je gebonden aan enkele losjes gekoppelde regels voor het besturingssysteem. Het besturingssysteem definieert vooraf enkele veranderlijke standaardregels om te gebruiken binnen zijn omgeving.

Zodra je de jas van de beginner hebt afgedaan, kun je deze standaardregels omzeilen en je eigen regels maken. Onder Linux is het besturingssysteem je trouwe dienaar en jij de meester.

Dit geval is niet haalbaar in andere distributies van besturingssystemen omdat er te veel abstracties zijn abstract. De besturingssystemen hier zijn meer uw assistent. Je kunt nooit meer macht hebben dan het besturingssysteem, zoals in het geval van Linux. Terwijl je doorgaat met het bouwen van je gebruikerservaring onder een Linux OS-omgeving, zal je nieuwsgierigheid naar OS dagelijks groeien. Je zult altijd willen weten wat hier verborgen is en wat je nog meer kunt doen onder de paraplu.

Werken met bestanden en mappen op Linux

Een perfect scenario is uw dagelijkse interactie met bestanden en mappen onder de Linux-besturingssysteemomgeving. Er is meer bij het gebruik van het Linux OS-bestandssysteem dan alleen het maken, bewerken, wijzigen en verwijderen van de gebruikersbestandssystemen en -mappen. Elke actie die is gekoppeld aan de gebruikersbestanden en -mappen/mappen onder een Linux-omgeving laat een gebruikersvoetafdruk of vingerafdruk achter. Het is alsof je een kamer binnenloopt om items aan te raken en uit te wisselen.

Als een Linux-verhuurder of -beheerder deze kamer beheert die je bent binnengegaan, weet deze precies wat je hebt gedaan en welke items je hebt aangeraakt of uitgewisseld. Linux heeft handige commando's om ons te helpen dergelijke resultaten te bereiken. U zult weten wat er met de bestanden en mappen in uw Linux-besturingssysteem is gebeurd en deze acties identificeren op basis van wanneer ze plaatsvonden.

Kortom, als we te maken hebben met bestanden en mappen onder een Linux-besturingssysteemomgeving, kunnen we een tijdlijn voor gebeurtenissen bouwen om kwetsbare bestandswijzigingen te identificeren door middel van tijdstempels die aan elke wijziging zijn gekoppeld. Een voordeel is dat u via de gegenereerde systeemlogboeken weet of de wijziging verband hield met schadelijke inhoud.

De Linux-commando's om te gebruiken

We zullen enkele eenvoudige opdrachten geven om ons te helpen de geobjectiveerde implicatie van dit artikelstuk te begrijpen. U moet eerst uw terminal starten en door een systeempad navigeren waarvan u weet dat het veel bestanden en mapmappen heeft. Om veilig te zijn en niet te spelen met uw kwetsbare systeembestanden, kunt u uw "Documents" -map gebruiken die meestal vooraf is gedefinieerd in het Linux-besturingssysteem. De volgende opdracht zou u naar deze map "Documenten" moeten brengen.

$ cd ~/Documenten

Het is een populaire map met veel bestanden en submappen. Een andere map om te gebruiken voor dit artikelexperiment is de map "Downloads"s. Het is een plek waar je nooit gedownloade bestanden en andere submappen zult missen.

$ cd ~/Downloads

Om dit experiment te starten, hebben we een aantal herkenbare voorbeelduitvoer van onze terminal nodig. We zullen een opdrachtreeks op onze terminal intoetsen waarmee we actieve bestanden en de bijbehorende submappen kunnen weergeven. Ook wordt elk element van de resulterende uitvoer van deze opdracht gekoppeld aan een tijdstempel die verwijst naar de laatste wijzigingspoging in het bijbehorende bestand, de bijbehorende map of de submap.

De te gebruiken opdrachtreeks is als volgt:

$ vinden . -printf '%T@ %t %p\n' | sorteer -k 1 -n | knippen -d"-f2-

De onderstaande schermafbeelding is de uitvoer voor het gebruik van de bovenstaande opdrachtreeks:.

voorbeelduitvoer van het gebruik van de opdracht zoeken, sorteren en knippen

Vanuit analytisch oogpunt vertegenwoordigt het onderste scherm van de opdrachtuitvoer de recent gewijzigde items in uw bovenliggende werkmap working. De uitvoerlijst kan lang zijn, afhankelijk van de bestanden en mappen die u op uw machine hebt. Naar boven scrollen op de uitvoerterminal onthult oudere bestanden en mapwijzigingen. Samenvattend hebben we een uitvoer die de oudste bestanden en mapwijzigingen rangschikt naar de nieuwste wijzigingen.

Zoals je hebt gemerkt, heeft de bovenstaande opdrachtreeks die je op je terminal hebt geplakt drie belangrijke opdrachtargumenten:. We moeten begrijpen wat elk van hen doet.

Vind

De opdracht "find" is de eerste die wordt uitgevoerd vanaf de opdrachtreeks. Het heeft als enige doel om recursief de actieve bestanden en mappen in uw bovenliggende werkmap weer te geven. De "."argument dat volgt op het argument "find" verwijst deze opdracht naar de huidige werkdirectory working. Als u niet zeker weet in welke map u zich bevindt; u kunt de opdracht "pwd" op uw terminal intoetsen. Het zal het pad afdrukken naar de map waarin u zich momenteel bevindt.

De "."argument wordt vertaald als de uitvoer van het "pwd"-commando. Het maakt het gemakkelijker om de bestanden en mappen van uw huidige werkmap te vinden. Het volgende argument op de opdrachtreeks is "-printf". Het is een vlag voor een print-argument. Het drukt de bestanden en mappen in uw huidige werkmap af in een gespecificeerd formaat. Het formaat dat nodig is, wordt gespecificeerd door het argument "%T@%t%p\n". Het is het commando-argument dat er onmiddellijk op volgt.

Het '%T@'-gedeelte van dit argument vertegenwoordigt de epochetijd. Epochetijd of Unix-tijdperk is per definitie de tijdstempel op 1 januari 1970. Het wordt weergegeven als 00:00:00 UTC. De uitvoer op uw terminal heeft dit formaat om de wijzigingsdatums weer te geven die zijn gekoppeld aan de vermelde bestanden en mappen. Het '%t'-gedeelte van het argument heeft nu de epoche-tijdnotatie om het laatste wijzigingstijdstempel weer te geven dat is gekoppeld aan de vermelde bestanden en mappen.

Afhankelijk van uw Linux-distro of -smaak, geeft de terminaluitvoer mogelijk niet de epochetijd weer die is gekoppeld aan de uitvoerlijst met gewijzigde bestanden. Deze verklaring is het bewijs van de output van mijn kant.

Het '%p'-gedeelte van het argument voert de namen uit van de weergegeven bestanden in die huidige werkmap. Ten slotte dient het '/n'-gedeelte van het argument het doel van een teken voor een nieuwe regel. Na elke opeenvolgende vermelding van een gewijzigd bestand, neemt dit teken van de nieuwe regel de weergavecursor en slaat de volgende bestandsweergave over naar een nieuwe regel op het terminalscherm. Het maakt het voor ons gemakkelijker om elk weergegeven bestand anders te associëren.

Een andere manier om met de eerder genoemde opdrachtreeks te werken, is het '%t'-gedeelte van het argument '%T@%t%p\n' te vervangen door '%c'. De resulterende opdrachtreeks zou er ongeveer als volgt uit moeten zien:

$ vinden . -printf '%T@ %c %p\n' | sorteer -k 1 -n | knippen -d"-f2-

De uitvoer van het uitvoeren van deze opdrachtreeks zou een uitvoer moeten produceren die lijkt op de volgende schermafbeelding:.

argumenten wijzigen op recursief bestand zoeken

Het observeren van de bovenstaande schermafbeelding onthult scherp de volgende observatie:. De uitvoerlijst van bestanden in de huidige werkdirectory wordt weergegeven met een "laatste statuswijzigingstijd" in plaats van de "modificatietijd". Het is het effect van het vervangen van '%c' door '%t' in "%T@%t%p\n". Deze laatste opdracht drukt toestemmingswijzigingen af ​​die zijn gekoppeld aan de lijst met uitgevoerde bestanden. De inhoud van de bestanden verandert mogelijk niet, maar de bijbehorende metadata wel.

In dit stadium volgen de uitvoerresultaten geen chronologische volgorde omdat we het sorteercommando nog moeten behandelen. Het wijzigingstijdstempel wordt eerst afgedrukt, gevolgd door de naam van het bijbehorende bestand.

Soort

Dit opdrachtargument heeft drie parameters, namelijk '-k', '1' en 'n'. Het sort-commando is verantwoordelijk voor de volgorde waarin de uitvoer van de bestandslijst op onze schermen verschijnt. In dit geval wordt eerst de wijzigingsdatum afgedrukt, gevolgd door het bestandspad naar het gewijzigde bestand of de gewijzigde map. Het '-k'-gedeelte van dit opdrachtargument geeft de startpositie aan om het sorteerproces te starten.

Het '-k'-gedeelte van het sorteeropdrachtargument bevat een vraag die wordt beantwoord door het '1'-gedeelte van hetzelfde argument. In dit geval begint het sorteerproces vanaf de eerste kolom zoals aangegeven door '1'. Het argument voor de sorteeropdracht zorgt er ook voor dat het nieuwste gewijzigde bestand onderaan de lijst staat en het oudste bovenaan oldest. Het '-n'-gedeelte van het argument is verantwoordelijk voor de numerieke tijd met decimale precisie.

Als u '-nr' gebruikt in plaats van '-n', heeft de uitvoer van de opdrachtreeks de nieuw gewijzigde bestanden en mappen bovenaan de terminaluitvoer en oude bestandswijzigingen onderaan. Het keert de sorteervolgorde van de terminaluitgang om.

Besnoeiing

Het belangrijkste doel van het argument "knippen" is om de uitvoer van onze terminalafdruk op een nette manier te organiseren. De '-d' en "opties van dit commando-argument worden gecombineerd om spaties te genereren en vervolgens de afdruk van de details van de bestandsinhoud af te snijden die zou kunnen proberen deze spaties te volgen.

Met deze eenvoudige opdrachtreeks kunt u de bestanden recursief afdrukken in uw huidige werkmap, waarbij elke uitvoer de genoemde bestanden koppelt aan hun wijzigingsdatums.

Alternatieve commando-opties

Je zou kunnen beweren dat het commando "ls -lrt" een perfecte lijst geeft van alle bestanden in een Active Directory-pad op je Linux-besturingssysteem, van de oudste om te wijzigen tot de nieuwste. Aan de andere kant houdt deze opdracht geen rekening met de bestandsinhoud die in submappen bestaat. Als het weergeven van submappen niet uw doel is, kunt u het argument "-type f" toevoegen aan de opdrachtreeks. Overweeg de volgende wijziging van de opdracht:.

$ vinden . -typ f -printf '%T@ %t %p\n' | sorteer -k 1 -n | knippen -d"-f2-

Het gebruik van het commando-argument "-type d" zal een tegengesteld effect hebben op het bovenstaande commando. Uw terminal voert alleen gewijzigde mappen uit van de oudste naar de nieuwste. Beschouw de implicatie als volgt:

$ vinden . -typ d -printf '%T@ %t %p\n' | sorteer -k 1 -n | knippen -d"-f2-

laatste opmerking:

U bent nu bekend met de procedure voor het recursief afdrukken van bestanden en mappen in uw huidige werkmap met de aanvullende kennis om te weten wanneer ze voor het laatst zijn gewijzigd op basis van de bijbehorende tijdstempels.

Vanuit deze kennis heb je de mogelijkheid om een ​​tijdlijn van gebeurtenissen samen te stellen die chronologisch de volgorde van bestanden en mappenwijziging onthult, samen met het pad naar hun opslaglocatie.

Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...
Unity3D-zelfstudie
Inleiding tot Unity 3D Unity 3D is een krachtige game-ontwikkelingsengine. Het is platformoverschrijdend, zodat je games voor mobiel, internet, deskto...