Utforsk Datokommandoen i Bash
Datokommandoen er et kraftfullt verktøy som finnes i Bash-skallet, standard i de fleste Linux-distribusjoner, og også tilgjengelig på macOS. Denne veiledningen vil demonstrere hvordan du kan mestre bruken av datokommandoen i kommandolinjen, og hvordan du kan integrere den i shell-skript for mer avanserte oppgaver enn bare å vise gjeldende tidspunkt.
Ved å skrive inn date
i terminalen, vil du få ut dagens dato og klokkeslett basert på din spesifikke tidssone:
date
Standardvisningen kan virke noe ulogisk, med året plassert etter tidssonen i stedet for etter måned og dag. Heldigvis gir datokommandoen deg full kontroll over formateringen av utdataene. Med over 40 ulike alternativer kan du skreddersy visningen nøyaktig slik du ønsker.
For å benytte deg av disse alternativene, skriver du date
etterfulgt av et mellomrom, et plusstegn +
, og deretter ønsket alternativ, inkludert det innledende prosenttegnet. For eksempel, alternativet %c
(dato og klokkeslett i lokalformat) vil vise dato og klokkeslett i et format som er tilpasset dine lokale innstillinger. Disse innstillingene, som omfatter blant annet valutasymbol, papirstørrelser og tidssone, er konfigurert under installasjonen av operativsystemet.
date +%c
Med dette alternativet ser vi at året plasseres mer naturlig i utdataene.
Du kan kombinere flere alternativer i én kommando ved å opprette en såkalt formatstreng. Hvis du for eksempel vil vise ukedagens navn, datoen i måneden og månedens navn, kan du bruke følgende kommando:
date +%A%d%B
Selv om dette fungerer, kan resultatet se litt rotete ut. Dette kan enkelt fikses ved å inkludere mellomrom i formatstrengen, så lenge vi setter hele strengen i anførselstegn. Merk at plusstegnet plasseres utenfor anførselstegnene.
date +"%A %d %B"
Du kan også legge til egen tekst i formatstrengen, som i dette eksemplet:
date +"Today is: %A %d %B"
Den detaljerte manualsiden for datokommandoen inneholder en overflod av alternativer, som kan gjøre det litt vanskelig å navigere. Derfor har vi delt opp alternativene i grupper for å lette prosessen.
Alternativer for Dato og Klokkeslett
%c
: Viser dato og klokkeslett i henhold til lokale innstillinger, inkludert tidssone.
Alternativer for Dato
%D
: Viser datoen i formatet mm/dd/åå.
%F
: Viser datoen i formatet åååå-mm-dd.
%x
: Viser datoen i henhold til dine lokale innstillinger.
Alternativer for Dag
%a
: Viser ukedagens navn forkortet (Man, Tir, Ons, osv.).
%A
: Viser ukedagens fulle navn (mandag, tirsdag, onsdag, osv.).
%u
: Viser ukedagens nummer (mandag=1, tirsdag=2, onsdag=3, osv.).
%w
: Viser ukedagens nummer (søndag=0, mandag=1, tirsdag=2, osv.).
%d
: Viser dagen i måneden med ledende null (01, 02 … 09).
%e
: Viser dagen i måneden med ledende mellomrom (» 1″, » 2″ … » 9″).
%j
: Viser dagen i året, med ledende nuller om nødvendig.
Alternativer for Uke
%U
: Viser ukens nummer i året, med søndag som første dag i uken.
%V
: Viser ISO-ukenummeret for året, med mandag som første dag i uken.
%W
: Viser ukens nummer i året, med mandag som første dag i uken.
Alternativer for Måned
%b
eller %h
: Viser månedens navn forkortet (Jan, Feb, Mar, osv.).
%B
: Viser månedens fulle navn (januar, februar, mars, osv.).
%m
: Viser månedens nummer, med ledende null om nødvendig (01, 02, 03 … 12).
Alternativer for År
%C
: Viser århundret uten årstall (20 i 2019).
%y
: Viser året med to sifre (19 i 2019).
%Y
: Viser året med fire sifre.
Alternativer for Klokkeslett
%T
: Viser klokkeslettet som TT:MM:SS.
%R
: Viser timen og minutter som TT:MM uten sekunder (24-timers format).
%r
: Viser klokkeslettet i henhold til dine lokale innstillinger, ved hjelp av 12-timers klokken med am/pm-indikator.
%X
: Viser klokkeslettet i henhold til dine lokale innstillinger, ved hjelp av 24-timers klokken. Det er verdt å merke seg at i noen tilfeller har dette alternativet oppført seg likt som %r
. På en Linux-maskin konfigurert for Storbritannia og satt til GMT, viser det derimot tiden i 24-timers format uten AM/PM-indikator, som forventet.
Alternativer for Time
%H
: Viser timen som 00, 01, 02…23.
%I
: Viser timen i 12-timers format (00, 01, 02 … 12) med ledende null.
Alternativer for Minutt
%M
: Viser minuttet som 01, 02, 03 … 59, med ledende null.
Alternativer for Sekund
%s
: Viser antall sekunder siden 1970-01-01 00:00:00 (starten på Unix-epoken).
%S
: Viser sekundene som 01, 02, 03 … 59, med ledende null.
%N
: Viser nanosekunder.
Alternativer for Tidssone
%z
: Viser tidsforskjellen mellom din tidssone og UTC.
%:z
: Viser tidsforskjellen mellom din tidssone og UTC, med et kolon mellom timer og minutter.
%::z
: Viser tidsforskjellen mellom din tidssone og UTC, med kolon mellom timer, minutter og sekunder.
%Z
: Viser det alfabetiske navnet på tidssonen.
Alternativer for Formatering
%p
: Viser AM- eller PM-indikatoren med store bokstaver.
%P
: Viser am- eller pm-indikatoren med små bokstaver. Vær oppmerksom på at små «p» gir store bokstaver som output, mens store «P» gir små bokstaver.
%t
: Viser en tabulator.
%n
: Viser en ny linje.
Modifikatorer for Alternativer
Disse modifikatorene kan plasseres mellom prosenttegnet %
og alternativbokstaven for å endre utdataene. For eksempel vil %-S
fjerne ledende null for enkeltsifrede sekundverdier.
-
: En enkel bindestrek forhindrer nullutfylling av enkeltsifrede verdier.
_
: En enkel understrek legger til ledende mellomrom for enkeltsifrede verdier.
0
: Gir ledende nuller for enkeltsifrede verdier.
^
: Bruker store bokstaver, der det er mulig (ikke alle alternativer støtter dette).
#
: Bruker motsatt bokstavstørrelse av standard for alternativet, der det er mulig (ikke alle alternativer støtter dette).
To Nyttige Triks
For å se siste endringstidspunkt for en fil, bruk alternativet -r
(referanse). Legg merke til at dette bruker en bindestrek i stedet for et prosenttegn og ikke krever et plusstegn. Prøv denne kommandoen i hjemmemappen din:
date -r .bashrc
Med TZ
-innstillingen kan du endre tidssonen for varigheten av en enkelt kommando:
TZ=GMT date +%c
Bruk av Dato i Skript
Det er enkelt å bruke datokommandoen i Bash-skript. Opprett en tekstfil med følgende innhold og lagre 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
Gi filen kjøretillatelse ved hjelp av denne kommandoen:
chmod +x gd.sh
Kjør skriptet med:
./gd.sh
Datokommandoen kan også brukes til å lage tidsstempler. Følgende skript vil opprette en katalog med et tidsstempel som navn, og deretter kopiere alle tekstfiler fra gjeldende mappe til den. Ved å kjøre dette skriptet jevnlig kan du lage en rekke øyeblikksbilder av dine tekstfiler. Vær oppmerksom på at dette ikke er et robust sikkerhetssystem, men kun ment som et eksempel.
Opprett en ny tekstfil, lim inn følgende kode og lagre den som snapshot.sh
:
#!/bin/bash # Hent dato og klokkeslett date_stamp=$(date +"%F-%H-%M-%S") # Lag en mappe med dette navnet mkdir "$date_stamp" # Kopier filene fra gjeldende mappe til den cp *.txt "$date_stamp" # Ferdig, gi tilbakemelding og avslutt echo "Text files copied to directory: "$date_stamp
Gi skriptet kjøretillatelse med denne kommandoen:
chmod +x snapshot.sh
Kjør skriptet ved å skrive:
./snapshot.sh
Du vil nå se at en ny mappe er opprettet. Navnet på mappen tilsvarer datoen og klokkeslettet da skriptet ble kjørt. Inne i denne mappen finner du kopier av dine tekstfiler.
Med litt kreativitet kan selv den enkle datokommandoen brukes til mange nyttige formål.