Hur man visar datum och tid i Linux-terminalen (och använder det i Bash-skript)

Datumkommandot finns i Bash-skalet, som är standardskalet i de flesta Linux-distributioner och till och med macOS. Den här handledningen visar hur du behärskar datum på kommandoraden och hur du kan använda det i skalskript för att göra mer än att bara skriva ut tiden.

Kör kommandot datum för att se denna information. Den skriver ut aktuellt datum och tid för din tidszon:

date

Standardformateringen ser lite fånig ut. Varför skrivs inte året ut efter månaden och dagen, istället för att vara taggad på slutet, bakom tidszonen? Var inte rädd: Om det är kontroll över formatet på utdata du vill ha, levererar date det i spader. Det finns mer än 40 alternativ som du kan skicka hittills för att instruera den att formatera utdata exakt som du vill.

Om du vill använda något av alternativen skriver du datum, ett mellanslag, ett plustecken + och alternativet inklusive det inledande procenttecknet. Alternativet %c (data och tid i språkformat) gör att datumet och tiden skrivs ut i det normaliserade formatet som är kopplat till ditt språk. Din plats bestäms av den geografiska och kulturella information du angav när du installerade ditt operativsystem. Lokalen styr sådana saker som valutasymbolen, pappersstorlekar, tidszon och andra kulturella normer.

date +%c

Året framstår nu i en mer naturlig position i produktionen.

Du kan skicka flera alternativ att dejta samtidigt. En sekvens av alternativ kallas en formatsträng. För att se namnet på dagen (%A), månadens dag (%d) och månadens namn (%B), använd detta kommando:

date +%A%d%B

Det fungerade, men det är fult. Inga problem, vi kan inkludera mellanslag så länge vi lindar in hela formatsträngen inom citattecken. Observera att + står utanför citattecken.

date +"%A %d %B"

Du kan lägga till text i formatsträngen så här:

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

Bläddra upp och ner genom datumet man page att leta efter det alternativ du vill ha blir snart tröttsamt. Vi har delat in alternativen i grupper för att hjälpa dig att lättare hitta runt dem.

Alternativ för att visa datum och tid

%c: Skriver ut datum och tid i formatet för din plats, inklusive tidszon.

Alternativ för att visa datum

%D: Skriver ut datumet i formatet mm/dd/åå.
%F: Skriver ut datumet i formatet åååå-mm-dd.
%x: Skriver ut datumet i formatet för din plats.

Alternativ för att visa dagen

%a: Skriver ut dagens namn, förkortat till mån, tis, ons, etc.
%A: Skriver ut dagens fullständiga namn, måndag tisdag, onsdag osv.
%u: Skriver ut veckodagens nummer, där måndag=1, tisdag=2, onsdag=3 osv.
%w: Skriver ut veckodagens nummer, där söndag=0, måndag=1, tisdag=2 osv.
%d: Skriver ut månadsdagen, med en inledande nolla (01, 02 … 09) om det behövs.
%e: Skriver ut dagen i månaden, med ett inledande mellanslag (’1’, ’2’ … ’9’) om det behövs. Observera att apostroferna inte skrivs ut.
%j: Skriver ut dagen på året, med upp till två inledande nollor, om det behövs.

Alternativ för att visa veckan

%U: Skriver ut veckonummer för året, med tanke på söndagen som veckans första dag. Till exempel årets tredje vecka, årets tjugonde vecka osv.
%V: Skriver ut årets ISO-veckonummer, med tanke på måndag som veckans första dag.
%W: Årets veckonummer, med tanke på måndag som veckans första dag.

Alternativ för att visa månaden

%b eller %h: Skriver ut månadens namn förkortat till Jan, Feb, Mar, etc.
%B: skriver ut månadens fullständiga namn, januari, februari, mars, etc.
%m: Skriver ut månadens nummer, med en inledande nolla vid behov 01, 02, 03 … 12.

Alternativ för att visa året

%C: Skriver ut århundradet utan årtal. 2019 skulle det tryckas 20.
%y: Skriver ut året som två siffror. 2019 kommer den att tryckas 19.
%Y: Skriver ut året som fyra siffror.

Alternativ för att visa tiden

%T: Skriver ut tiden som TT:MM:SS.
%R: Skriver ut timmar och minuter som TT:MM utan sekunder med 24-timmarsklockan.
%r: Skriver ut tiden enligt din plats, med hjälp av 12-timmarsklockan och en am- eller pm-indikator.
%X: Skriver ut tiden enligt din plats med hjälp av 24-timmarsklockan. Påstås. Observera att detta alternativ under testningen fungerade exakt som %r gör, som visas nedan. På en Linux-maskin konfigurerad för Storbritannien och inställd på GMT, skrev den ut tiden, med hjälp av 24-timmarsklockan utan AM- eller PM-indikator, som förväntat.

Alternativ för att visa timmen

%H: Skriver ut timmen 00, 01, 02…23.
%I: Skriver ut timmen med 12-timmarsklockan, 00, 01, 02 … 12, med en inledande nolla vid behov.

Alternativ för att visa minuter

%M: skriver ut minuten, 01, 02, 03 … 59, med en inledande nolla vid behov.

Alternativ för att visa sekunder

%s: Skriver ut antalet sekunder sedan 1970-01-01 00:00:00, början av Unix-epok.
%S: Skriver ut sekunderna, 01, 02, 03 … 59, med en inledande nolla vid behov.
%N: Skriver ut nanosekunderna.

Alternativ för att visa tidszoninformation

%z: Skriver ut tidsskillnaden mellan din tidszon och UTC.
%:z: Skriver ut tidsskillnaden mellan din tidszon och UTC, med ett : mellan timmar och minuter. Observera: mellan %-tecknet och z.
%::z: Skriver ut tidsskillnaden mellan din tidszon och UTC, med ett : mellan timmar, minuter och sekunder. Notera :: mellan %-tecknet och z .
%Z: Skriver ut det alfabetiska tidszonens namn.

Alternativ relaterade till formatering

%p: Skriver ut AM- eller PM-indikatorn med versaler.
%P: Skriver ut am- eller pm-indikatorn med gemener. Lägg märke till egenheten med dessa två alternativ. Ett gement p ger utmatning med versaler, ett stort P ger utmatning med gemener.
%t: Skriver ut en flik.
%n: Skriver ut en ny rad.

Alternativ för att ändra andra alternativ

Dessa modifierare kan infogas mellan % och alternativbokstaven för andra alternativ för att ändra deras visning. Till exempel skulle %-S ta bort den inledande nollan för ensiffriga sekundvärden.

–: Ett enda bindestreck förhindrar nollutfyllnad på ensiffriga värden.
_: ett enda understreck lägger till inledande mellanslag för ensiffriga värden.
0: Ger inledande nollor för ensiffriga värden.
^: Använder versaler, om möjligt (alla alternativ respekterar inte denna modifierare).
#: Använd om möjligt motsatsen till standardfallet för alternativet (alla alternativ respekterar inte denna modifierare).

Ytterligare två snygga knep

För att få den senaste ändringstiden för en fil, använd alternativet -r (referens). Observera att detta använder ett – (bindestreck) istället för ett %-tecken, och det kräver inte ett +-tecken. Prova detta kommando i din hemmapp:

date -r .bashrc

TZ-inställningen låter dig ändra din tidszon under ett enda kommando.

TZ=GMT date +%c

Använda datum i skript

Att aktivera ett Bash-skalskript för att skriva ut tid och datum är trivialt. Skapa en textfil med följande innehåll och spara 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

Skriv följande kommando för att ställa in körningsbehörigheterna och göra skriptet körbart.

chmod +x gd.sh

Kör skriptet med detta kommando:

./gd.sh

Vi kan använda kommandot datum för att tillhandahålla en tidsstämpel. Skriptet som visas skapar en katalog med tidsstämpeln som namn. Den kopierar sedan alla textfiler från den aktuella mappen till den. Genom att köra det här skriptet regelbundet kan vi ta en ögonblicksbild av våra textfiler. Med tiden kommer vi att bygga upp en serie mappar med olika versioner av våra textfiler i dem.

Observera att detta inte är ett robust säkerhetskopieringssystem, det är bara för illustrativa syften.

Skapa en textfil med följande innehåll och spara 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

Skriv följande kommando för att ställa in körningsbehörigheterna och göra skriptet körbart.

chmod +x snapshot.sh

Kör skriptet med detta kommando:

./snapshot.sh

Du kommer att se att en katalog har skapats. Dess namn är datum och tid då skriptet kördes. Inuti den katalogen finns kopior av textfilerna.

Med tanke på lite eftertanke och kreativitet kan även det ödmjuka datumkommandot användas produktivt.