Jak zobrazit datum a čas v terminálu Linux (a použít jej ve skriptech Bash)

Příkaz `date` je základním nástrojem v prostředí Bash, které je standardním rozhraním pro většinu distribucí Linuxu a také pro macOS. Tento článek vám ukáže, jak efektivně pracovat s datem a časem v příkazovém řádku a jak ho můžete využít ve skriptech, abyste dosáhli mnohem více než jen zobrazení aktuálního času.

Chcete-li si zobrazit aktuální datum a čas, stačí zadat příkaz `date`. Terminál vám vypíše aktuální datum a čas ve vašem časovém pásmu:

date

Výchozí formátování nemusí každému vyhovovat. Proč je rok zobrazen až na konci, a ne za měsícem a dnem? Nebojte se, příkaz `date` nabízí rozsáhlé možnosti přizpůsobení výstupu. Máte k dispozici více než 40 voleb, pomocí kterých můžete výstup formátovat přesně podle vašich představ.

Pro použití voleb zadejte `date`, mezeru, znaménko plus `+` a následně požadovanou volbu, která začíná znakem procenta `%`. Například volba `%c` (datum a čas ve formátu dle vašeho národního prostředí) zajistí zobrazení data a času v normalizovaném formátu odpovídajícím vašemu národnímu prostředí. Vaše národní prostředí je definováno na základě geografických a kulturních informací, které jste zadali při instalaci operačního systému. Určuje takové věci jako symbol měny, formát papíru, časové pásmo a další kulturní normy.

date +%c

Nyní je rok ve výstupu zobrazen na logičtějším místě.

Příkazu `date` můžete předat více voleb najednou. Sekvence voleb se nazývá formátovací řetězec. Pro zobrazení názvu dne (%A), dne v měsíci (%d) a názvu měsíce (%B) použijte následující příkaz:

date +%A%d%B

Výsledek sice funguje, ale nevypadá příliš dobře. Můžeme vkládat mezery, pokud celý formátovací řetězec uzavřeme do uvozovek. Všimněte si, že znak `+` je mimo uvozovky.

date +"%A %d %B"

Do formátovacího řetězce můžeme přidat i vlastní text:

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

Procházení manuálové stránky příkazu `date` a hledání správné volby může být časem únavné. Proto jsme možnosti rozdělili do kategorií, aby bylo jejich použití přehlednější.

Možnosti pro zobrazení data a času

%c: Zobrazí datum a čas ve formátu podle vašeho národního prostředí, včetně časového pásma.

Možnosti pro zobrazení data

%D: Zobrazí datum ve formátu mm/dd/rr.
%F: Zobrazí datum ve formátu rrrr-mm-dd.
%x: Zobrazí datum ve formátu dle vašeho národního prostředí.

Možnosti pro zobrazení dne

%a: Zobrazí zkrácený název dne (Po, Út, St, atd.).
%A: Zobrazí celý název dne (pondělí, úterý, středa, atd.).
%u: Zobrazí číslo dne v týdnu (pondělí=1, úterý=2, středa=3 atd.).
%w: Zobrazí číslo dne v týdnu (neděle=0, pondělí=1, úterý=2 atd.).
%d: Zobrazí den v měsíci s nulou na začátku, pokud je potřeba (01, 02 … 09).
%e: Zobrazí den v měsíci s mezerou na začátku, pokud je potřeba (‚ 1‘, ‚ 2‘ … ‚ 9‘).
%j: Zobrazí den v roce s až dvěma nulami na začátku, pokud je potřeba.

Možnosti pro zobrazení týdne

%U: Zobrazí číslo týdne v roce, kde se neděle považuje za první den týdne.
%V: Zobrazí číslo týdne v roce podle normy ISO, kde se pondělí považuje za první den týdne.
%W: Zobrazí číslo týdne v roce, kde se pondělí považuje za první den týdne.

Možnosti pro zobrazení měsíce

%b nebo %h: Zobrazí zkrácený název měsíce (led, úno, bře, atd.).
%B: Zobrazí celý název měsíce (leden, únor, březen, atd.).
%m: Zobrazí číslo měsíce s nulou na začátku, pokud je potřeba (01, 02, 03 … 12).

Možnosti pro zobrazení roku

%C: Zobrazí století bez roku. Např. pro rok 2019 zobrazí 20.
%y: Zobrazí rok jako dvě číslice. Např. pro rok 2019 zobrazí 19.
%Y: Zobrazí rok jako čtyři číslice.

Možnosti pro zobrazení času

%T: Zobrazí čas ve formátu HH:MM:SS.
%R: Zobrazí hodiny a minuty ve formátu HH:MM bez sekund, používá 24hodinový formát.
%r: Zobrazí čas ve formátu dle vašeho národního prostředí, používá 12hodinový formát s indikátorem dopoledne/odpoledne.
%X: Zobrazí čas ve formátu dle vašeho národního prostředí, používá 24hodinový formát (v praxi se může chovat stejně jako %r).

Možnosti pro zobrazení hodin

%H: Zobrazí hodinu ve formátu 00, 01, 02…23.
%I: Zobrazí hodinu pomocí 12hodinového formátu 00, 01, 02 … 12, s nulou na začátku, pokud je potřeba.

Možnosti pro zobrazení minut

%M: Zobrazí minuty ve formátu 01, 02, 03 … 59, s nulou na začátku, pokud je potřeba.

Možnosti pro zobrazení sekund

%s: Zobrazí počet sekund od 1970-01-01 00:00:00, od začátku Unixové epochy.
%S: Zobrazí sekundy ve formátu 01, 02, 03 … 59, s nulou na začátku, pokud je potřeba.
%N: Zobrazí nanosekundy.

Možnosti pro zobrazení informací o časovém pásmu

%z: Zobrazí časový rozdíl mezi vaším časovým pásmem a UTC.
%:z: Zobrazí časový rozdíl mezi vaším časovým pásmem a UTC, s „:“ mezi hodinami a minutami. (Pozor na „:“ mezi znakem % a z).
%::z: Zobrazí časový rozdíl mezi vaším časovým pásmem a UTC, s „:“ mezi hodinami, minutami a sekundami. (Pozor na „::“ mezi znakem % a z).
%Z: Zobrazí abecední název časového pásma.

Možnosti související s formátováním

%p: Zobrazí indikátor AM nebo PM velkými písmeny.
%P: Zobrazí indikátor dopoledne nebo odpoledne malými písmeny.
%t: Zobrazí tabulátor.
%n: Zobrazí nový řádek.

Možnosti pro úpravu dalších voleb

Tyto modifikátory lze vložit mezi % a písmeno další volby pro úpravu jejího zobrazení. Například %-S odstraní úvodní nulu pro jednociferné hodnoty sekund.

–: Pomlčka zabrání odsazení nulou u jednociferných hodnot.
_: Podtržítko přidá úvodní mezery pro jednociferné hodnoty.
0: Přidá úvodní nuly pro jednociferné hodnoty.
^: Použije velká písmena, pokud je to možné (ne všechny volby to respektují).
#: Použije pro volbu opačný případ, než je výchozí, pokud je to možné (ne všechny volby to respektují).

Další dva praktické tipy

Pro zjištění času poslední úpravy souboru použijte volbu `-r` (odkaz). Všimněte si, že se zde používá pomlčka místo znaku `%` a nevyžaduje znak `+`. Zkuste tento příkaz ve svém domovském adresáři:

date -r .bashrc

Pomocí proměnné `TZ` lze změnit časové pásmo pouze pro dobu trvání jednoho příkazu:

TZ=GMT date +%c

Použití `date` ve skriptech

Zobrazení data a času ve skriptu Bash je velmi jednoduché. Vytvořte textový soubor s následujícím obsahem a uložte ho jako `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

Následujícím příkazem udělte skriptu oprávnění ke spuštění:

chmod +x gd.sh

Spusťte skript pomocí tohoto příkazu:

./gd.sh

Příkaz `date` lze použít také pro generování časových razítek. Následující skript vytvoří adresář, jehož název tvoří časové razítko. Poté do něj zkopíruje všechny textové soubory z aktuálního adresáře. Pravidelným spouštěním tohoto skriptu můžete vytvářet zálohy svých textových souborů. V průběhu času tak získáte řadu adresářů s různými verzemi vašich textových souborů.

Upozorňujeme, že se nejedná o plnohodnotný zálohovací systém, ale pouze o demonstrativní příklad.

Vytvořte textový soubor s následujícím obsahem a uložte ho jako `snapshot.sh`:

#!/bin/bash

# získáme aktuální datum a čas
date_stamp=$(date +"%F-%H-%M-%S")

# vytvoříme adresář s tímto názvem
mkdir "$date_stamp"

# zkopírujeme soubory z aktuálního adresáře do nově vytvořeného
cp *.txt "$date_stamp"

# vše hotovo, vypíšeme zprávu
echo "Text files copied to directory: "$date_stamp

Následujícím příkazem udělte skriptu oprávnění ke spuštění:

chmod +x snapshot.sh

Spusťte skript pomocí tohoto příkazu:

./snapshot.sh

Uvidíte, že byl vytvořen adresář, jehož název odpovídá datu a času spuštění skriptu. Uvnitř tohoto adresáře se nachází kopie všech textových souborů.

S trochou kreativity lze příkaz `date` využít mnoha produktivními způsoby.