Varia

Hieronder vind je een overzicht van verdere standaardcommando's in Linux die niet kunnen worden ingedeeld in een van de hierboven genoemde categorieën.

Afkortingen voor programma-aanvragen definiëren

Met het opdrachtregelprogramma alias kun je afkortingen definiëren voor programma-aanvragen.

Gebruik alias volgens het volgende schema:

alias AFKORTING= ‘COMMANDO’

Vervang de plaatshouder COMMANDO door een willekeurig opdrachtregelcommando inclusief opties. Dit wordt verbonden met de voor de plaatshouder AFKORTING geplaatste tekenreeks.

Voorbeeld

alias ll=’ls -l’

De tekenreeks ll wordt met de optie –l (gedetailleerde weergave) gedefinieerd als alias voor het commando ls.

Commando tijdgestuurd uitvoeren

Open het opdrachtregelprogramma at volgens het volgende schema om een commando tijdgestuurd uit te voeren.

at TIJDSAANDUIDING

Voorbeeld:

at 10:00 AM 6/22/2019

Voer vervolgens het commando in en sluit de interactieve modus met [CTRL] + [D].

Kalender weergeven

Gebruik cal volgens het volgende schema om een kalender weer te geven in de terminal.

cal [OPTIES] [[MAAND] jaar]

Voorbeeld:

cal 12 2019

Het systeem geeft een maandoverzicht weer voor december 2019.

String weergeven in de standaardweergave

Gebruik het opdrachtregelcommando echo om een tekenreeks in regels weer te geven in de standaarduitvoer (in de regel de terminal).

De algemene syntax van het commando luidt:

echo [OPTIES] STRING

Inleiding

Enkele van de meest overtuigende voordelen van systemd zijn de voordelen die te maken hebben met proces- en systeemlogboekregistratie. Bij het gebruik van andere tools worden logs meestal verspreid over het systeem, afgehandeld door verschillende daemons en processen, en kunnen ze tamelijk moeilijk te interpreteren zijn als ze meerdere applicaties omvatten. systemd probeert deze problemen aan te pakken door een gecentraliseerde beheeroplossing te bieden voor het loggen van alle kernel- en gebruikerslandprocessen. Het systeem dat deze logboeken verzamelt en beheert, staat bekend als het journaal.

Het journaal is geïmplementeerd met de journald daemon, die alle berichten afhandelt die door de kernel, initrd, services, etc. worden geproduceerd. In deze handleiding bespreken we hoe je het journalctl-hulpprogramma kunt gebruiken, dat kan worden gebruikt om toegang te krijgen tot de gegevens en deze te manipuleren. gehouden in het journaal.

Algemeen idee

Een van de drijfveren achter het systemd journal is het centraliseren van het beheer van logs, ongeacht waar de berichten vandaan komen. Omdat een groot deel van het opstartproces en servicebeheer wordt afgehandeld door het systemd-proces, is het zinvol om de manier te standaardiseren waarop logboeken worden verzameld en toegankelijk worden gemaakt. De journald-daemon verzamelt gegevens uit alle beschikbare bronnen en slaat deze op in een binair formaat voor eenvoudige en dynamische manipulatie.

Dit levert ons een aantal belangrijke voordelen op. Door interactie met de gegevens via één enkel hulpprogramma kunnen beheerders loggegevens dynamisch weergeven op basis van hun behoeften. Dit kan zo simpel zijn als het bekijken van de opstartgegevens van drie keer opstarten geleden, of het opeenvolgend combineren van de loggegevens van twee gerelateerde services om een communicatieprobleem op te lossen.

Het opslaan van de loggegevens in een binair formaat betekent ook dat de gegevens in willekeurige uitvoerformaten kunnen worden weergegeven, afhankelijk van wat u op dat moment nodig heeft. Voor dagelijks logboekbeheer bent u bijvoorbeeld gewend om de logboeken in het standaard syslog-formaat te bekijken, maar als u besluit serviceonderbrekingen later in een grafiek weer te geven, kunt u elk item uitvoeren als een JSON-object om het bruikbaar te maken voor uw grafische service. Omdat de gegevens niet in platte tekst naar de schijf worden geschreven, is er geen conversie nodig als u een ander on-demand-formaat nodig heeft.

Het systemd-journaal kan worden gebruikt met een bestaande syslog-implementatie, of kan de syslog-functionaliteit vervangen, afhankelijk van uw behoeften. Hoewel het systeemjournaal de meeste logbehoeften van beheerders zal dekken, kan het ook bestaande logmechanismen aanvullen. Het kan bijvoorbeeld zijn dat u een gecentraliseerde syslog-server heeft die u gebruikt om gegevens van meerdere servers te verzamelen, maar misschien wilt u ook de logboeken van meerdere services op één systeem interleaven met het systemd-journaal. U kunt beide doen door deze technologieën te combineren.

Basislogweergave

Gebruik de opdracht journalctl om de logbestanden te zien die de journald-daemon heeft verzameld.

Wanneer u het alleen gebruikt, wordt elke journaalboeking die zich in het systeem bevindt, weergegeven in een pager (meestal minder), zodat u kunt bladeren. De oudste inzendingen staan bovenaan:

journaalctl

U zult waarschijnlijk pagina’s en pagina’s met gegevens hebben om doorheen te scrollen, wat tien- of honderdduizenden regels lang kan zijn als systemd al een tijdje op uw systeem staat. Dit laat zien hoeveel gegevens beschikbaar zijn in de tijdschriftendatabase.

Het formaat zal bekend zijn voor degenen die gewend zijn aan standaard syslog-logboekregistratie. Dit verzamelt echter feitelijk gegevens uit meer bronnen dan waar traditionele syslog-implementaties toe in staat zijn. Het bevat logboeken van het vroege opstartproces, de kernel, de initrd en de standaardfout van de applicatie. Deze zijn allemaal beschikbaar in het tijdschrift.

Logboeken van de huidige opstart weergeven
De meest elementaire hiervan die u dagelijks zou kunnen gebruiken, is de vlag -b. Hiermee worden alle journaalboekingen weergegeven die zijn verzameld sinds de meest recente herstart.

journalctl-b

Dit helpt u bij het identificeren en beheren van informatie die relevant is voor uw huidige omgeving.

Om bijvoorbeeld het journaal van de vorige keer opstarten te zien, gebruikt u de relatieve aanwijzer -1 met de vlag -b:

journalctl -b -1

U kunt de opstart-ID ook gebruiken om de gegevens van een opstart terug te roepen:

journalctl -b caf0524a1d394cfe00058444fe

Tijdvensters

Hoewel het ongelooflijk nuttig is om logboekgegevens tijdens het opstarten te zien, wilt u misschien vaak tijdsperioden aanvragen die niet goed aansluiten bij het opstarten van het systeem. Dit kan met name het geval zijn als het gaat om langlopende servers met een aanzienlijke uptime.

U kunt filteren op willekeurige tijdslimieten met behulp van de opties –since en –until, die de weergegeven items beperken tot respectievelijk de items na of vóór de opgegeven tijd.

De tijdwaarden kunnen in verschillende formaten voorkomen. Voor absolute tijdwaarden moet u het volgende formaat gebruiken:

JJJJ-MM-DD UU:MM:SS
We kunnen bijvoorbeeld alle inzendingen sinds 11 januari 2015 om 13:06 uur zien door het volgende te typen:

journalctl --since "2023-01-11 13:06:00"

Als componenten van het bovenstaande formaat worden weggelaten, worden enkele standaardwaarden toegepast. Als de datum bijvoorbeeld wordt weggelaten, wordt uitgegaan van de huidige datum. Als de tijdcomponent ontbreekt, wordt “00:00:00” (middernacht) vervangen. Het secondenveld kan ook worden weggelaten en wordt standaard ingesteld op “00”:

journalctl --since "2023-11-01" --until "2023-11-02 03:00"

Het tijdschrift begrijpt ook enkele relatieve waarden en benoemde snelkoppelingen. U kunt bijvoorbeeld de woorden “gisteren”, “vandaag”, “morgen” of “nu” gebruiken. U kunt relatieve tijden berekenen door “-” of “+” voor een genummerde waarde te zetten of door woorden als “ago” in een zinsconstructie te gebruiken.

Om de gegevens van gisteren op te halen, typt u:

journalctl --since yesterday

Als u meldingen heeft ontvangen van een serviceonderbreking die om 09:00 uur begint en tot een uur geleden voortduurt, kunt u het volgende typen:

journalctl --since 09:00 --until "1 hour ago"

Zoals u kunt zien, is het relatief eenvoudig om flexibele tijdsperioden te definiëren om de items te filteren die u wilt zien.

Op proces-, gebruikers- of groeps-ID

Sommige services brengen een verscheidenheid aan onderliggende processen voort om werk te doen. Als u de exacte PID van het proces waarin u geïnteresseerd bent, hebt gescout, kunt u daar ook op filteren.

Om dit te doen kunnen we filteren door het veld _PID op te geven. Als de PID waarin we geïnteresseerd zijn bijvoorbeeld 8088 is, kunnen we typen:

journalctl_PID=8088

Op andere momenten wilt u misschien alle ingevoerde gegevens van een specifieke gebruiker of groep weergeven. Dit kan gedaan worden met de _UID- of _GID-filters. Als uw webserver bijvoorbeeld onder de gebruiker www-data draait, kunt u de gebruikers-ID vinden door het volgende te typen:

id -u bart

Daarna kunt u het geretourneerde ID gebruiken om de journaalresultaten te filteren:

journalctl _UID=1000 --since today

Het systemd-journaal heeft veel velden die kunnen worden gebruikt voor filteren. Sommige daarvan worden doorgegeven vanuit het proces dat wordt geregistreerd en sommige worden toegepast door journald met behulp van informatie die het systeem verzamelt op het moment van het loggen.

Het leidende onderstrepingsteken geeft aan dat het veld _PID van het laatste type is. Het journaal registreert en indexeert automatisch de PID van het proces dat wordt geregistreerd, zodat deze later kan worden gefilterd. U kunt alle beschikbare dagboekvelden ontdekken door te typen:

man systemd.journal-fields

Een aantal daarvan bespreken we in deze handleiding. Maar voorlopig bespreken we nog een nuttige optie die te maken heeft met het filteren op deze velden. De optie -F kan worden gebruikt om alle beschikbare waarden voor een bepaald journaalveld weer te geven.

Op prioriteit

Eén filter waar systeembeheerders vaak in geïnteresseerd zijn, is de berichtprioriteit. Hoewel het vaak nuttig is om informatie op een zeer uitgebreid niveau vast te leggen, kunnen logbestanden met een lage prioriteit bij het daadwerkelijk verwerken van de beschikbare informatie afleidend en verwarrend zijn.

U kunt journalctl gebruiken om alleen berichten met een opgegeven prioriteit of hoger weer te geven door de optie -p te gebruiken. Hiermee kunt u berichten met een lagere prioriteit eruit filteren.

Om bijvoorbeeld alleen vermeldingen weer te geven die op het foutniveau of hoger zijn geregistreerd, kunt u typen:

journalctl -p err -b

Hier worden alle berichten weergegeven die zijn gemarkeerd als fout, kritiek, waarschuwing of noodgeval. Het journaal implementeert de standaard syslog-berichtniveaus. U kunt de prioriteitsnaam of de bijbehorende numerieke waarde gebruiken. In volgorde van hoogste naar laagste prioriteit zijn dit:

0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug

De bovenstaande nummers of namen kunnen door elkaar worden gebruikt met de optie -p. Als u een prioriteit selecteert, worden berichten weergegeven die zijn gemarkeerd op het opgegeven niveau en de berichten daarboven.

De journaalweergave wijzigen

Hierboven hebben we de selectie van inzendingen door middel van filtering gedemonstreerd. Er zijn echter andere manieren waarop we de uitvoer kunnen wijzigen. We kunnen de journalctl-weergave aanpassen aan verschillende behoeften.

Uitvoer afkappen of uitbreiden

We kunnen aanpassen hoe journalctl gegevens weergeeft door te vertellen dat de uitvoer moet worden verkleind of uitgebreid.

Standaard toont journalctl het volledige bericht in de pager, waardoor de vermeldingen rechts van het scherm verschijnen. Deze informatie is toegankelijk door op de pijl-rechts te drukken.

Als je liever hebt dat de uitvoer wordt afgekapt en een weglatingsteken wordt ingevoegd waar informatie is verwijderd, kun je de optie –no-full gebruiken:

journalctl --no-full

Uitgang naar standaard uit

Standaard geeft journalctl de uitvoer weer in een pager voor eenvoudiger gebruik. Als u echter van plan bent de gegevens te verwerken met tekstmanipulatietools, wilt u waarschijnlijk de uitvoer naar standaarduitvoer kunnen uitvoeren.

U kunt dit doen met de optie –no-pager:

journalctl --no-pager

Dit kan onmiddellijk naar een verwerkingshulpprogramma worden gestuurd of worden omgeleid naar een bestand op schijf, afhankelijk van uw behoeften.

Uitvoerformaten

Als u journaalboekingen verwerkt, zoals hierboven vermeld, zult u waarschijnlijk gemakkelijker de gegevens kunnen ontleden als deze in een meer consumeerbaar formaat zijn. Gelukkig kan het dagboek indien nodig in verschillende formaten worden weergegeven. U kunt dit doen met behulp van de optie -o met een formaatspecificatie.

U kunt bijvoorbeeld de journaalboekingen in JSON uitvoeren door het volgende te typen:

journalctl -b -u nginx -o json

Dit is handig voor het parseren met hulpprogramma’s. U kunt het json-pretty-formaat gebruiken om beter inzicht te krijgen in de datastructuur voordat u deze doorgeeft aan de JSON-consument:

journalctl -b -u nginx -o json-pretty

Voor weergave kunnen de volgende formaten worden gebruikt:

  • cat: Geeft alleen het berichtveld zelf weer.
  • export: een binair formaat dat geschikt is voor overdracht of back-up.
  • json: Standaard JSON met één invoer per regel.
  • json-pretty: JSON geformatteerd voor betere leesbaarheid voor mensen
  • json-sse: JSON-geformatteerde uitvoer verpakt om het toevoegen van door de server verzonden gebeurtenis compatibel te maken
  • short: de standaarduitvoer in syslog-stijl
  • short-iso: het standaardformaat uitgebreid om ISO 8601-wandkloktijdstempels weer te geven.
  • short-monotonic: het standaardformaat met monotone tijdstempels.
  • short-precise: het standaardformaat met precisie op microseconden
  • verbose: toont elk journaalveld dat beschikbaar is voor de boeking, inclusief de velden die doorgaans intern verborgen zijn.

Actieve procesbewaking

De opdracht journalctl imiteert hoeveel beheerders tail gebruiken voor het monitoren van actieve of recente activiteiten. Deze functionaliteit is ingebouwd in journalctl, waardoor u toegang krijgt tot deze functies zonder dat u naar een andere tool hoeft te pipen.

Recente logboeken weergeven
Om een bepaald aantal records weer te geven, kunt u de optie -n gebruiken, die precies hetzelfde werkt als staart -n.

Standaard worden de meest recente 10 vermeldingen weergegeven:

journalctl -n

Je kunt het aantal vermeldingen dat je wilt zien opgeven met een getal na de -n:

journalctl -n 20

Logboeken volgen
Om de logs actief te volgen terwijl ze worden geschreven, kunt u de vlag -f gebruiken. Nogmaals, dit werkt zoals je zou verwachten als je ervaring hebt met het gebruik van tail -f:

journalctl-f

Om deze opdracht af te sluiten, typt u CTRL+C.

Journaalonderhoud

Je vraagt je misschien af wat de kosten zijn van het opslaan van alle gegevens die we tot nu toe hebben gezien. Bovendien kunt u interessant zijn in het opschonen van enkele oudere logbestanden en het vrijmaken van ruimte.

Huidig schijfgebruik vinden
U kunt de hoeveelheid ruimte die het journaal momenteel op schijf in beslag neemt, achterhalen door de vlag –disk-usage te gebruiken:

journalctl --schijfgebruik

Programma-uitvoer verdubbelen

tee is een opdrachtregelprogramma waarmee de uitvoer van een programma kan worden verdubbeld. Daarbij wordt de ene uitvoer doorgeleid naar de standaarduitvoer en de andere geschreven naar een bestand dat is ingevoerd met het tee-commando.

De algemene syntax van het commando luidt:

tee [OPTIES] BESTAND

In de regel wordt tee gebruikt in combinatie met het omleidingsteken pipe (|).

ls | tee voorbeeld.txt

Het commando ls geeft de inhoud van de huidige map weer. De programma-uitvoer wordt via pipe doorgestuurd naar het opdrachtregelprogramma tee, dat deze zowel in de terminal weergeeft als naar het bestand voorbeeld.txt schrijft.

Looptijd van programma’s meten

Gebruik het commando time volgens het volgende schema om de looptijd van programma’s te bepalen die je start via de terminal.

time [OPTIES] commando [ARGUMENTEN]

Tekens in tekstbestanden vervangen.

Gebruik tr om een willekeurige hoeveelheid tekens te verwijderen of te vervangen door andere. Daarvoor leest tr de datastroom van de standaardinvoer in en schrijft het deze naar de gewenste modificatie op de standaarduitvoer.

Als er een tekenvolume moet worden vervangen door een ander wordt tr met twee argumenten gebruikt.

tr OPTIE TEKENVOLUME1 TEKENVOLUME2

Het tweede argument (TEKENVOLUME2) vervangt het eerste (TEKENVOLUME1).

Als je een tekenreeks wilt verwijderen, gebruik je tr met de optie –d en voer je de te verwijderen sequentie in als argument.

tr -d TEKENVOLUME

Het opdrachtregelprogramma wordt in de regel gebruikt in combinatie met omleidingstekens (< en >) om wijzigingen in bestanden aan te brengen.

tr ‘a-z’ ‘A-Z’ < voorbeeld1.txt > voorbeeld2.txt

tr leest de inhoud van het bestand voorbeeld1.txt in, vervangt de kleine letters a tot z door grote letters en schrijft de output naar het bestand voorbeeld2.txt.

Berichten versturen naar alle aangemelde gebruikers

Met het opdrachtregelprogramma wall kun je alle in het systeem aangemelde gebruikers een bericht sturen.

Om een bericht te verzenden, start je het programma met het volgende commando:

wall

Bevestig de programma-aanvraag met [enter] en voer je bericht in. Ook dit wordt bevestigd met [enter] en verzonden met de toetsencombinatie [CTRL]+[D].

Alle in het systeem aangemelde gebruikers ontvangen je bericht als broadcast-message in de terminal.

Let op: om berichten te kunnen ontvangen, moet je andere gebruikers een schrijfrecht voor je terminal toekennen. Gebruik hiervoor het commando mesg:

mesg [y/n]

  • Huidige status opvragen: mesg
  • Schrijfrecht toekennen: mesg y
  • Schrijfrecht weigeren: mesg n

Als je bestandsinhoud wilt versturen naar alle aangemelde gebruikers gebruik je wall in combinatie met een invoeromleiding en de bijbehorende bestandsnaam:

wall < BESTANDSNAAM

Commando’s periodiek uitvoeren

Met het opdrachtregelprogramma watch kun je een commando uitvoeren in regelmatige intervallen.

Het programma wordt geopend met de volgende syntax:

watch [OPTIES] COMMANDO

Het tijdsinterval waarin het met watch ingevoerde commando periodiek wordt aangevraagd, definieer je met behulp van de optie –n SECONDEN.

watch kan worden afgesloten met de toetsencombinatie [CTRL] + [C].

In het volgende voorbeeld wordt het systeem geïnstrueerd om de belasting van het werkgeheugen om de 10 seconden weer te geven.

watch -n 10 free

Regels, woorden, letters, tekens en/of bytes van tekstbestanden tellen

Het opdrachtregelprogramma wc (kort voor word count) geeft je indien gewenst het aantal regels, woorden, letters, tekens en/of bytes van een tekstbestand weer.

De algemene syntax van het commando luidt:

wc [OPTIES] BESTAND

Voorbeeld: wc voorbeeld.txt

Output: 14 18 143 voorbeeld.txt

Als wc zonder optie wordt ingevoerd, komt de weergave overeen met het schema REGELS WOORDEN TEKENS BESTAND. Voor een gefilterde weergave ondersteunt het opdrachtregelprogramma de opties: –l (regels), –c (bytes), –m (tekens), –L (lengte van de langste regel) en –w (woorden).

Standaardinvoer in commandoregels veranderen

xargs is een opdrachtregelprogramma waarmee je de uitvoer van een voorafgaand commando als argument kunt toevoegen aan een commando. In de regel wordt daarbij de pipe (|) gebruikt als omleidingsteken.

Gebruik xargs volgens deze syntax:

COMMANDO1 | xargs [OPTIES] COMMANDO2

xargs wordt bijvoorbeeld gebruikt in combinatie met het commando find.

In het volgende voorbeeld stelt find in de huidige map alle bestanden vast die bij het zoekpatroon *.tmp passen en geeft het de namen ervan weer in de standaarduitvoer. Daar worden de bestandsnamen aangenomen door xargs en als argumenten toegevoegd aan het commando rm.

$ find . -name ‘*.tmp’ | xargs rm