Sådan viser du dato og klokkeslæt i Linux-terminalen (og bruger det i Bash-scripts)

Dato-kommandoen findes i Bash-skallen, som er standard-skallen i de fleste Linux-distributioner og endda macOS. Denne vejledning viser dig, hvordan du mestrer dato på kommandolinjen, og hvordan du kan bruge den i shell-scripts til at gøre mere end blot at udskrive tiden.

Kør datokommandoen for at se disse oplysninger. Den udskriver den aktuelle dato og tid for din tidszone:

date

Standardformateringen ser lidt fjollet ud. Hvorfor udskrives året ikke efter måneden og dagen, i stedet for at blive mærket til sidst, bag tidszonen? Vær ikke bange: Hvis det er kontrol over formatet på det output, du ønsker, leverer date det i spar. Der er mere end 40 muligheder, du kan videregive til dato for at instruere den i at formatere sit output præcis, som du ønsker.

For at bruge en hvilken som helst af indstillingerne, skriv dato, et mellemrum, et plustegn + og muligheden inklusive det foranstillede procenttegn. Indstillingen %c (data og klokkeslæt i lokalitetsformat) bevirker, at datoen og klokkeslættet udskrives i det normaliserede format, der er knyttet til din lokalitet. Din lokalitet er indstillet af de geografiske og kulturelle oplysninger, du gav, da du installerede dit operativsystem. Lokaliteten styrer ting som valutasymbolet, papirstørrelser, tidszone og andre kulturelle normer.

date +%c

Året fremstår nu i en mere naturlig position i outputtet.

Du kan sende flere muligheder til dato på én gang. En sekvens af muligheder kaldes en formatstreng. For at se navnet på dagen (%A), dagen i måneden (%d) og månedens navn (%B), skal du bruge denne kommando:

date +%A%d%B

Det virkede, men det er grimt. Intet problem, vi kan inkludere mellemrum, så længe vi pakker hele formatstrengen i anførselstegn. Bemærk, at + står uden for anførselstegnene.

date +"%A %d %B"

Du kan tilføje tekst til formatstrengen på denne måde:

date +"Today is: %A %d %B"

Rul op og ned gennem datoen man-side at lede efter den mulighed, du ønsker, bliver snart trættende. Vi har inddelt mulighederne i grupper for at hjælpe dig med at finde rundt i dem nemmere.

Muligheder for at vise dato og klokkeslæt

%c: Udskriver dato og klokkeslæt i formatet for din lokalitet, inklusive tidszonen.

Muligheder for at vise datoen

%D: Udskriver datoen i formatet mm/dd/åå.
%F: Udskriver datoen i formatet åååå-mm-dd.
%x: Udskriver datoen i formatet for din lokalitet.

Muligheder for at vise dagen

%a: Udskriver dagens navn, forkortet til Man, Tir, Ons osv.
%A: Udskriver dagens fulde navn, mandag tirsdag, onsdag osv.
%u: Udskriver nummeret på ugedagen, hvor mandag=1, tirsdag=2, onsdag=3 osv.
%w: Udskriver nummeret på ugedagen, hvor søndag=0, mandag=1, tirsdag=2 osv.
%d: Udskriver dagen i måneden med et indledende nul (01, 02 … 09), hvis det kræves.
%e: Udskriver dagen i måneden med et mellemrum foran (‘1’, ‘2’ … ‘9’), hvis det kræves. Bemærk, at apostroferne ikke udskrives.
%j: Udskriver dagen på året med op til to foranstillede nuller, hvis det kræves.

Muligheder for at vise ugen

%U: Udskriver ugenummeret for året, idet søndagen betragtes som den første dag i ugen. Eksempelvis årets tredje uge, årets tyvende uge osv.
%V: Udskriver årets ISO-ugenummer, idet mandag betragtes som den første dag i ugen.
%W: Årets ugenummer, idet mandag betragtes som den første dag i ugen.

Muligheder for at vise måneden

%b eller %h: Udskriver navnet på måneden forkortet til Jan, Feb, Mar osv.
%B: udskriver månedens fulde navn, januar, februar, marts osv.
%m: Udskriver månedens nummer med et indledende nul, hvis det er nødvendigt 01, 02, 03 … 12.

Muligheder for at vise året

%C: Udskriver århundredet uden årstal. I 2019 ville den udskrive 20.
%y: Udskriver året som to cifre. i 2019 udskrives 19.
%Y: Udskriver året som fire cifre.

Muligheder for at vise tiden

%T: Udskriver tiden som TT:MM:SS.
%R: Udskriver timen og minutterne som TT:MM uden sekunder ved hjælp af 24-timers uret.
%r: Udskriver klokkeslættet i henhold til dit sted ved hjælp af 12-timers uret og en am- eller pm-indikator.
%X: Udskriver klokkeslættet i henhold til din lokalitet ved hjælp af 24-timers uret. Angiveligt. Bemærk, at denne mulighed under test opførte sig nøjagtigt som %r gør, som vist nedenfor. På en Linux-maskine, der var konfigureret til Storbritannien og indstillet til GMT, udskrev den tiden ved at bruge 24-timers uret uden AM eller PM-indikator, som forventet.

Muligheder for at vise timen

%H: Udskriver timen 00, 01, 02…23.
%I: Udskriver timen ved hjælp af 12-timers uret, 00, 01, 02 … 12, med et indledende nul, hvis det kræves.

Muligheder for at vise minutter

%M: udskriver minuttet, 01, 02, 03 … 59, med et indledende nul, hvis det kræves.

Muligheder for at vise sekunder

%s: Udskriver antallet af sekunder siden 1970-01-01 00:00:00, starten af Unix epoke.
%S: Udskriver sekunderne, 01, 02, 03 … 59, med et indledende nul, hvis det kræves.
%N: Udskriver nanosekunderne.

Indstillinger for at vise tidszoneoplysninger

%z: Udskriver tidsforskellen mellem din tidszone og UTC.
%:z: Udskriver tidsforskellen mellem din tidszone og UTC, med en : mellem timer og minutter. Bemærk: mellem %-tegnet og z.
%::z: Udskriver tidsforskellen mellem din tidszone og UTC, med et : mellem timer, minutter og sekunder. Bemærk :: mellem %-tegnet og z .
%Z: Udskriver det alfabetiske tidszonenavn.

Indstillinger relateret til formatering

%p: Udskriver AM- eller PM-indikatoren med store bogstaver.
%P: Udskriver am- eller pm-indikatoren med små bogstaver. Bemærk særheden med disse to muligheder. Et lille p giver output med store bogstaver, et stort P giver output med små bogstaver.
%t: Udskriver en fane.
%n: Udskriver en ny linje.

Indstillinger for at ændre andre indstillinger

Disse modifikatorer kan indsættes mellem % og valgbogstavet for andre muligheder for at ændre deres visning. For eksempel ville %-S fjerne det indledende nul for enkeltcifrede sekundværdier.

–: En enkelt bindestreg forhindrer nuludfyldning på enkeltcifrede værdier.
_: en enkelt understregning tilføjer mellemrum for enkeltcifrede værdier.
0: Giver indledende nuller for enkeltcifrede værdier.
^: Bruger store bogstaver, hvis det er muligt (ikke alle muligheder respekterer denne modifikator).
#: Brug det modsatte af standardindstillingen for indstillingen, hvis det er muligt (ikke alle muligheder respekterer denne modifikator).

Yderligere to smarte tricks

For at få det sidste ændringstidspunkt for en fil, brug -r (reference) mulighed. Bemærk, at dette bruger et – (bindestreg) i stedet for et %-tegn, og det kræver ikke et +-tegn. Prøv denne kommando i din hjemmemappe:

date -r .bashrc

TZ-indstillingen giver dig mulighed for at ændre din tidszone for varigheden af ​​en enkelt kommando.

TZ=GMT date +%c

Brug af dato i scripts

Det er trivielt at aktivere et Bash-shell-script til at udskrive tid og dato. Opret en tekstfil med følgende indhold, og gem den som gd.sh.

#!/bin/bash

TODAY=$(date +"Today is %A, %d of %B")
TIMENOW=$(date +"The local time is %r")
TIME_UK=$(TZ=BST date +"The time in the UK is %r")

echo $TODAY
echo $TIMENOW
echo $TIME_UK

Indtast følgende kommando for at indstille udførelsestilladelserne og gøre scriptet eksekverbart.

chmod +x gd.sh

Kør scriptet med denne kommando:

./gd.sh

Vi kan bruge datokommandoen til at give et tidsstempel. Det viste script vil oprette en mappe med tidsstemplet som navn. Det vil derefter kopiere alle tekstfiler fra den aktuelle mappe ind i den. Ved at køre dette script med jævne mellemrum kan vi tage et øjebliksbillede af vores tekstfiler. Med tiden vil vi opbygge en række mapper med forskellige versioner af vores tekstfiler i dem.

Bemærk, at dette ikke er et robust backup-system, det er kun til illustrative formål.

Opret en tekstfil med følgende indhold, og gem den som snapshot.sh.

#!/bin/bash

# obtain the date and time
date_stamp=$(date +"%F-%H-%M-%S")

# make a directory with that name
mkdir "$date_stamp"

# copy the files from the current folder into it
cp *.txt "$date_stamp"

# all done, report back and exit
echo "Text files copied to directory: "$date_stamp

Indtast følgende kommando for at indstille udførelsestilladelserne og gøre scriptet eksekverbart.

chmod +x snapshot.sh

Kør scriptet med denne kommando:

./snapshot.sh

Du vil se, at en mappe er blevet oprettet. Dens navn er datoen og tidspunktet, hvor scriptet blev udført. Inde i den mappe er kopier af tekstfilerne.

Givet en smule omtanke og kreativitet, kan selv den ydmyge date-kommando bruges produktivt.