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

Příkaz date se nachází v prostředí Bash, což je výchozí prostředí ve většině distribucí Linuxu a dokonce i v macOS. Tento výukový program vám ukáže, jak ovládat datum na příkazovém řádku a jak jej můžete použít ve skriptech shellu, abyste mohli dělat více než jen tisknout čas.

Chcete-li zobrazit tyto informace, spusťte příkaz datum. Vytiskne aktuální datum a čas pro vaše časové pásmo:

date

Výchozí formátování vypadá trochu praštěně. Proč není rok vytištěn po měsíci a dni, místo aby byl označen na konci, za časovým pásmem? Nemějte strach: Pokud je to kontrola nad formátem výstupu, který chcete, datum to doručí piky. Existuje více než 40 možností, které můžete předat k dnešnímu dni, abyste mu dali pokyn, aby formátoval svůj výstup přesně tak, jak chcete.

Chcete-li použít kteroukoli z možností, zadejte datum, mezeru, znaménko plus + a možnost včetně počátečního znaménka procenta. Možnost %c (data a čas ve formátu národního prostředí) způsobí, že se datum a čas vytisknou v normalizovaném formátu souvisejícím s vaším národním prostředím. Vaše národní prostředí je nastaveno podle geografických a kulturních informací, které jste poskytli při instalaci operačního systému. Národní prostředí řídí takové věci, jako je symbol měny, velikosti papíru, časové pásmo a další kulturní normy.

date +%c

Rok se nyní ve výstupu objevuje v přirozenější pozici.

K datu můžete předat několik možností najednou. Posloupnost voleb se nazývá formátovací řetězec. Chcete-li zobrazit název dne (%A), den v měsíci (%d) a název měsíce (%B), použijte tento příkaz:

date +%A%d%B

Fungovalo to, ale je to ošklivé. Žádný problém, můžeme zahrnout mezery, pokud celý formátovací řetězec zabalíme do uvozovek. Všimněte si, že + jde mimo uvozovky.

date +"%A %d %B"

Do formátovacího řetězce můžete přidat text takto:

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

Posouvání nahoru a dolů přes datum manuálová stránka hledání požadované možnosti se brzy stane únavným. Možnosti jsme rozdělili do skupin, abyste se v nich snadněji zorientovali.

Možnosti zobrazení data a času

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

Možnosti zobrazení data

%D: Vytiskne datum ve formátu mm/dd/rr.
%F: Vytiskne datum ve formátu rrrr-mm-dd.
%x: Vytiskne datum ve formátu pro vaše národní prostředí.

Možnosti zobrazení dne

%a: Vytiskne název dne ve zkratce Po, Út, St atd.
%A: Vytiskne celý název dne, pondělí úterý, středa atd.
%u: Vytiskne číslo dne v týdnu, kde pondělí=1, úterý=2, středa=3 atd.
%w: Vytiskne číslo dne v týdnu, kde neděle=0, pondělí=1, úterý=2 atd.
%d: V případě potřeby vytiskne den v měsíci s úvodní nulou (01, 02 … 09).
%e: V případě potřeby vytiskne den v měsíci s mezerou na začátku (‚ 1‘, ‚ 2‘ … ‚ 9‘). Všimněte si, že apostrofy se netisknou.
%j: V případě potřeby vytiskne den v roce s až dvěma úvodními nulami.

Možnosti zobrazení týdne

%U: Vytiskne číslo týdne v roce, přičemž neděle se považuje za první den v týdnu. Například třetí týden v roce, dvacátý týden v roce atd.
%V: Vytiskne číslo týdne v roce podle normy ISO, přičemž pondělí se považuje za první den v týdnu.
%W: Číslo týdne v roce, přičemž pondělí je považováno za první den v týdnu.

Možnosti zobrazení měsíce

%b nebo %h: Vytiskne název měsíce zkrácený na leden, únor, březen atd.
%B: vytiskne celý název měsíce, leden, únor, březen atd.
%m: Vytiskne číslo měsíce, v případě potřeby s nulou na začátku 01, 02, 03 … 12.

Možnosti zobrazení roku

%C: Vytiskne století bez roku. V roce 2019 by vytisklo 20.
%y: Vytiskne rok jako dvě číslice. v roce 2019 vytiskne 19.
%Y: Vytiskne rok jako čtyři číslice.

Možnosti zobrazení času

%T: Vytiskne čas jako HH:MM:SS.
%R: Vytiskne hodiny a minuty jako HH:MM bez sekund s použitím 24hodinového formátu.
%r: Vytiskne čas podle vašeho národního prostředí pomocí 12hodinových hodin a indikátoru dopoledních nebo odpoledních hodin.
%X: Vytiskne čas podle vašeho národního prostředí pomocí 24hodinového formátu. Údajně. Všimněte si, že během testování se tato možnost chovala přesně jako %r, jak je ukázáno níže. Na počítači se systémem Linux nakonfigurovaném pro národní prostředí ve Spojeném království a nastaveném na GMT vytiskl čas pomocí 24hodinového formátu bez indikátoru AM nebo PM, jak se očekávalo.

Možnosti zobrazení hodin

%H: Vytiskne hodinu 00, 01, 02…23.
%I: Vytiskne hodinu pomocí 12hodinových hodin, 00, 01, 02 … 12, v případě potřeby s nulou na začátku.

Možnosti zobrazení minut

%M: vytiskne minuty, 01, 02, 03 … 59, v případě potřeby s úvodní nulou.

Možnosti zobrazení sekund

%s: Vytiskne počet sekund od 1970-01-01 00:00:00, od začátku Unixová epocha.
%S: V případě potřeby vytiskne sekundy 01, 02, 03 … 59 s nulou na začátku.
%N: Vytiskne nanosekundy.

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

%z: Vytiskne časový rozdíl mezi vaším časovým pásmem a UTC.
%:z: Vytiskne časový rozdíl mezi vaším časovým pásmem a UTC s : mezi hodinami a minutami. Všimněte si : mezi znakem % a z.
%::z: Vytiskne časový rozdíl mezi vaším časovým pásmem a UTC s : mezi hodinami, minutami a sekundami. Všimněte si :: mezi znakem % a z .
%Z: Vytiskne abecední název časového pásma.

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

%p: Vytiskne indikátor AM nebo PM velkými písmeny.
%P: Vytiskne indikátor dopoledne nebo odpoledne malými písmeny. Všimněte si vtipu s těmito dvěma možnostmi. Malé písmeno p poskytuje výstup velkým písmenem, velké písmeno P poskytuje výstup malých písmen.
%t: Vytiskne kartu.
%n: Vytiskne nový řádek.

Možnosti pro úpravu dalších možností

Tyto modifikátory lze vložit mezi % a písmeno volby dalších voleb a upravit jejich zobrazení. Například %-S odstraní úvodní nulu pro jednociferné sekundové hodnoty.

–: Jediná pomlčka zabraňuje odsazení nuly u jednociferných hodnot.
_: jedno podtržítko přidá úvodní mezery pro jednociferné hodnoty.
0: Poskytuje úvodní nuly pro jednociferné hodnoty.
^: Používá velká písmena, pokud je to možné (ne všechny možnosti respektují tento modifikátor).
#: Pokud je to možné, použijte pro volbu opak výchozího případu (ne všechny možnosti respektují tento modifikátor).

Další dva elegantní triky

Chcete-li získat čas poslední úpravy souboru, použijte volbu -r (odkaz). Všimněte si, že toto používá – (pomlčku) místo znaku % a nevyžaduje znak +. Zkuste tento příkaz ve své domovské složce:

date -r .bashrc

Nastavení TZ umožňuje změnit časové pásmo po dobu trvání jednoho příkazu.

TZ=GMT date +%c

Použití data ve skriptech

Povolit skriptu Bash shell tisknout čas a datum je triviální. Vytvořte textový soubor s následujícím obsahem a uložte jej 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

Zadejte následující příkaz, chcete-li nastavit oprávnění ke spuštění a nastavit skript jako spustitelný.

chmod +x gd.sh

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

./gd.sh

K poskytnutí časového razítka můžeme použít příkaz date. Zobrazený skript vytvoří adresář s časovým razítkem jako názvem. Poté do ní zkopíruje všechny textové soubory z aktuální složky. Pravidelným spouštěním tohoto skriptu můžeme pořídit snímek našich textových souborů. Postupem času vytvoříme řadu složek s různými verzemi našich textových souborů.

Všimněte si, že toto není robustní zálohovací systém, je to pouze pro ilustrativní účely.

Vytvořte textový soubor s následujícím obsahem a uložte jej jako 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

Zadejte následující příkaz, chcete-li nastavit oprávnění ke spuštění a nastavit skript jako spustitelný.

chmod +x snapshot.sh

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

./snapshot.sh

Uvidíte, že byl vytvořen adresář. Jeho název je datum a čas, kdy byl skript spuštěn. Uvnitř tohoto adresáře jsou kopie textových souborů.

Při troše přemýšlení a kreativity lze produktivně využít i příkaz skromného data.