Vraag Shell-opdracht om wijzigingen in een bestand te controleren - Hoe heet het opnieuw?


Ik weet dat er een opdracht voor Unix bestond die ik kon gebruiken om een ​​bestand te controleren en wijzigingen te zien die er naartoe werden geschreven. Dit was behoorlijk handig, vooral voor het controleren van logbestanden.

Weet je hoe het heet?


139
2018-04-30 21:00


oorsprong




antwoorden:


Bedoel je

tail -f logfile.log

?

(Man-pagina voor staart)


188
2018-04-30 21:01



Ja, het is realtime. - Adam Gibbins
Sidenote: Als uw distributie de opdracht tailf biedt, gebruikt u dat in plaats van tail -f. tailf is efficiënter omdat het geen toegang hoeft te hebben tot het bewaakte bestand als het niet wordt geschreven (poll-toegangen zijn vervelend als je het bestandssysteem hebt aangekoppeld met atime-updates.) - Mihai Limbăşan
Op super gebruiker Ik vond een antwoord bevelen staart -F in plaats van -f ook - Rafa
tail -F zal bestandsnamen volgen in plaats van bestandsobjecten, wat vooral handig is in het geval van het roteren van logbestanden. - Amir Ali Akbari
Update, een paar jaar later: tailf is nu verouderd en tail -f is veilig. (bevestig dit op uw systeem met man tailf.) Zie documentatie: man7.org/linux/man-pages/man1/tailf.1.html - exp1orer


Je bedoelde waarschijnlijk de staart, zoals Jon Skeet zei.

Een andere handige is kijk maar; Hiermee kunt u periodiek een opdracht uitvoeren en de uitvoer op volledig scherm bekijken. Bijvoorbeeld:

kijk -n 10 -d ls -l / var / adm / berichten

Zal het commando uitvoeren ls -l /var/adm/messages elke 10 seconden en markeer het verschil in de uitvoer tussen opeenvolgende runs. (Handig om te kijken hoe snel een logbestand groeit, bijvoorbeeld).


114
2018-04-30 21:07





Ik gebruik het liefst less +FG1 over- tail -f omdat ik merk dat ik een logbestand moet zoeken voor een specifieke fout of ID. Als ik iets moet zoeken, typ ik ^C om te stoppen met het volgen van het bestand en ? om achteruit te zoeken.

Sleutelbindingen zijn vrijwel hetzelfde als in vi. Elke opdracht kan worden geïnitialiseerd bij het opstarten met behulp van de + keuze:

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

Voor echt lange logboeken vind ik het handig om de -n optie die regelnummering uitschakelt. Van de manpage:

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

1. Hat-tip naar rgmarcha om dit in de commentaren aan te wijzen.


33
2018-04-30 23:44



Vergeet niet om een ​​in te stellen alias met de door u gewenste opties, zodat u ze niet elke keer hoeft te typen. - Michael Hampton♦
Eigenlijk zou je in de meeste gevallen in het algemeen de voorkeur moeten geven aan shell-functies boven aliassen. - tripleee


inotifywait van inotify-gereedschappen is handig als u een opdracht wilt uitvoeren telkens wanneer een bestand (of bestanden in een map) wordt gewijzigd. Bijvoorbeeld:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

27
2018-06-02 12:13





Tail is great ... less kan ook worden gebruikt start minder op het bestand, dus minder op mijn bestand en druk dan op F. Dit heeft minder de functie van staart.


19
2018-04-30 21:04



minder + F mijn bestand zal het ook maken - rgmarcha


Ik ben bezig met het bewerken van een LaTeX-bestand en wilde het ook controleren op veranderingen ergens in het midden. Ik klopte het volgende kleine shellscript op dat nuttig voor mij was. Ik hoop dat het ook van pas zal komen voor iemand anders.

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

Bewaar het als watch.sh en doe chmod u+x watch.sh. Dan voer ik het als volgt uit:

./watch.sh file.tex pdflatex

Als u wilt dat de opdracht alleen wordt uitgevoerd als de feitelijke wijziging plaatsvindt, kunt u deze gebruiken `md5sum "$FILE"` in plaats van `ls -l "$FILE"`.


12
2017-10-10 09:32



om mappen en hun inhoud te bekijken in plaats van een enkel bestand: NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'` - Andy


je kunt de gebruiken tailf  beveel zijn zeer gemakkelijkste

tailf logfile.log

7
2017-10-15 13:26





U kunt ook inotifywatch / inotifywait gebruiken, dat inhaakt in het inotify-subsysteem van de kernels. Op deze manier kunt u ook kijken naar zaken als "openen", "sluiten" of "openen".

Maar als je simpelweg bijgevoegde regels wilt hebben om akkoord te gaan, ben ik het eens over de staart.


5
2018-04-30 22:40





Tail is de standaard, traditionele, overal beschikbare Unix-tool. Een beetje meer geavanceerde tool is multitail die verschillende bestanden tegelijkertijd kan bewaken en die syntax highlighting biedt.


2
2018-04-30 22:58





Als ik naast het bestand in het bestand wil kunnen zoeken, gebruik ik minder met het "F" -commando.

Houd er bij het gebruik van tail rekening mee dat extra argumenten nodig zijn als het bestand mogelijk wordt omgerold of vervangen door bewerken (standaardmodus voor vim's: w).

tail -f zorgt ervoor dat tail de bestandsdescriptor opslaat en volgt. Als het bestand wordt vervangen, wordt de descriptor gewijzigd. Het voordeel van het volgen van de bestandsdescriptor is dat als het bestand wordt hernoemd, u het nog steeds zult volgen.

tail --follow = zorgt ervoor dat tail het genoemde bestand volgt door het periodiek opnieuw te openen om te zien of het is vervangen.

--retry is een andere handige optie als u een logbestand wilt uitzetten, maar het bestand is nog niet aangemaakt.

tail -F is een snelkoppeling voor --follow = --retry.


2
2018-05-27 15:47