Cum să afișați data și ora în terminalul Linux (și să le utilizați în scripturile Bash)

Comanda `date` este un instrument esențial în mediul shell Bash, care este implicit în majoritatea distribuțiilor Linux și în macOS. Acest ghid detaliază cum să utilizați eficient comanda `date` în linia de comandă și în scripturile shell pentru a depăși simpla afișare a orei.

Pentru a vizualiza informațiile despre data și ora curentă, executați comanda simplă:

date

Rezultatul implicit poate părea neobișnuit. De ce anul nu este afișat imediat după lună și zi, ci la final, după fusul orar? Ei bine, comanda `date` oferă un control granular asupra formatului de ieșire. Aceasta acceptă peste 40 de opțiuni, permițându-vă să personalizați afișarea exact așa cum doriți.

Pentru a utiliza aceste opțiuni, tastați `date`, un spațiu, un semn plus `+` și opțiunea dorită, care include un semn procent `%.` De exemplu, opțiunea `%c` (dată și oră în format local) afișează data și ora în formatul standard specific regiunii dvs. Setările regionale sunt determinate de informațiile geografice și culturale furnizate la instalarea sistemului de operativ. Aceste setări afectează simbolul monedei, dimensiunile hârtiei, fusul orar și alte norme culturale.

date +%c

Observați că anul este acum afișat într-o poziție mai familiară.

Puteți combina mai multe opțiuni pentru `date` simultan. O astfel de secvență de opțiuni este denumită șir de format. Pentru a afișa numele zilei (%A), ziua lunii (%d) și numele lunii (%B), utilizați această comandă:

date +%A%d%B

Rezultatul este corect, dar poate fi îmbunătățit. Putem include spații, atâta timp cât înconjurăm șirul de format cu ghilimele. Rețineți că semnul `+` este în afara ghilimelelor.

date +"%A %d %B"

De asemenea, se pot adăuga texte suplimentare în șirul de format:

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

Consultarea paginii de manual (man page) pentru comanda `date` pentru a găsi opțiunea dorită poate deveni rapid obositoare. Am grupat opțiunile pentru a vă facilita navigarea prin ele.

Opțiuni pentru afișarea datei și orei

%c: Afișează data și ora în format local, inclusiv fusul orar.

Opțiuni pentru afișarea datei

%D: Afișează data în formatul mm/zz/aa.
%F: Afișează data în formatul aaaa-mm-zz.
%x: Afișează data în formatul specific regiunii dvs.

Opțiuni pentru afișarea zilei

%a: Afișează numele zilei prescurtat (Lun, Mar, Mie etc.).
%A: Afișează numele complet al zilei (Luni, Marți, Miercuri etc.).
%u: Afișează numărul zilei în săptămână (luni=1, marți=2, miercuri=3 etc.).
%w: Afișează numărul zilei în săptămână (duminică=0, luni=1, marți=2 etc.).
%d: Afișează ziua lunii cu zero inițial (01, 02 … 09), dacă este necesar.
%e: Afișează ziua lunii cu un spațiu inițial („1”, „2” … „9”), dacă este necesar. (Ghilimelele nu sunt afișate).
%j: Afișează ziua anului cu până la două zerouri inițiale, dacă este necesar.

Opțiuni pentru afișarea săptămânii

%U: Afișează numărul săptămânii din an, considerând duminica prima zi a săptămânii (ex. a 3-a săptămână, a 20-a săptămână etc.).
%V: Afișează numărul săptămânii ISO din an, considerând ziua de luni prima zi a săptămânii.
%W: Afișează numărul săptămânii din an, considerând ziua de luni prima zi a săptămânii.

Opțiuni pentru afișarea lunii

%b sau %h: Afișează numele lunii prescurtat (ian, feb, mar etc.).
%B: Afișează numele complet al lunii (ianuarie, februarie, martie etc.).
%m: Afișează numărul lunii cu zero inițial (01, 02, 03 … 12).

Opțiuni pentru afișarea anului

%C: Afișează secolul fără anul (ex. 20 pentru 2019).
%y: Afișează anul ca două cifre (ex. 19 pentru 2019).
%Y: Afișează anul ca patru cifre.

Opțiuni pentru afișarea orei

%T: Afișează ora în formatul HH:MM:SS.
%R: Afișează ora și minutele în formatul HH:MM (fără secunde), folosind formatul de 24 de ore.
%r: Afișează ora conform setărilor locale, folosind formatul de 12 ore și indicatorul AM/PM.
%X: Afișează ora conform setărilor locale, folosind formatul de 24 de ore. (În timpul testelor, această opțiune s-a comportat identic cu %r. Pe un sistem Linux configurat pentru regiunea UK și GMT, a afișat ora folosind formatul de 24 de ore, fără indicatorul AM/PM, conform așteptărilor).

Opțiuni pentru afișarea orei

%H: Afișează ora în formatul 00, 01, 02…23.
%I: Afișează ora folosind formatul de 12 ore, 00, 01, 02…12, cu zero inițial, dacă este necesar.

Opțiuni pentru afișarea minutelor

%M: Afișează minutele, 01, 02, 03…59, cu zero inițial, dacă este necesar.

Opțiuni pentru afișarea secundelor

%s: Afișează numărul de secunde scurse de la 1970-01-01 00:00:00, începutul Epocii Unix.
%S: Afișează secundele, 01, 02, 03…59, cu zero inițial, dacă este necesar.
%N: Afișează nanosecundele.

Opțiuni pentru afișarea informațiilor despre fusul orar

%z: Afișează diferența de timp dintre fusul orar și UTC.
%:z: Afișează diferența de timp dintre fusul orar și UTC, cu un „:” între ore și minute. (Rețineți „:” între `%` și `z`).
%::z: Afișează diferența de timp dintre fusul orar și UTC, cu un „:” între ore, minute și secunde. (Observați „::” între `%` și `z`).
%Z: Afișează numele alfabetic al fusului orar.

Opțiuni legate de formatare

%p: Afișează indicatorul AM sau PM cu majuscule.
%P: Afișează indicatorul am sau pm cu litere mici. (Observați comportamentul neobișnuit: un `p` mic returnează majuscule, un `P` mare returnează litere mici).
%t: Afișează un tab.
%n: Afișează o linie nouă.

Opțiuni pentru modificarea altor opțiuni

Acești modificatori pot fi inserați între `%` și litera opțiunii pentru a-i altera afișarea. De exemplu, `%-S` ar elimina zero-ul inițial pentru valorile secundelor cu o singură cifră.

–: O singură cratimă previne completarea cu zero pentru valorile cu o singură cifră.
_: Un singur caracter de subliniere adaugă spații inițiale pentru valorile cu o singură cifră.
0: Adaugă zerouri inițiale pentru valorile cu o singură cifră.
^: Folosește majuscule, dacă este posibil (nu toate opțiunile respectă acest modificator).
#: Folosește opțiunea opusă majusculelor implicite, dacă este posibil (nu toate opțiunile respectă acest modificator).

Încă două trucuri utile

Pentru a obține ora ultimei modificări a unui fișier, folosiți opțiunea `-r` (referință). Rețineți că se folosește un `-` (cratimă) în loc de `%` și nu este necesar semnul `+`. Încercați această comandă în folderul personal:

date -r .bashrc

Variabila de mediu `TZ` vă permite să schimbați fusul orar doar pentru durata unei comenzi:

TZ=GMT date +%c

Utilizarea datei în scripturi

Integrarea afișării orei și datei într-un script shell Bash este foarte simplă. Creați un fișier text cu următorul conținut și salvați-l ca `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

Tastați următoarea comandă pentru a seta permisiunile de execuție și a face scriptul executabil:

chmod +x gd.sh

Rulați scriptul folosind această comandă:

./gd.sh

Comanda `date` poate fi folosită pentru a genera un marcaj temporal. Scriptul de mai jos creează un director cu numele corespunzător marcajului temporal. Apoi, copiază toate fișierele text din directorul curent în acest nou director. Executând periodic acest script, se pot crea copii de rezervă ale fișierelor text. Cu timpul, se va acumula o serie de directoare cu diferite versiuni ale fișierelor.

Important: acesta nu este un sistem robust de backup, ci doar o demonstrație.

Creați un fișier text cu următorul conținut și salvați-l ca `snapshot.sh`:

#!/bin/bash

# obține data și ora
date_stamp=$(date +"%F-%H-%M-%S")

# creează un director cu acel nume
mkdir "$date_stamp"

# copiază fișierele din folderul curent în el
cp *.txt "$date_stamp"

# operațiunea s-a încheiat, anunță și ieși
echo "Text files copied to directory: "$date_stamp

Tastați următoarea comandă pentru a seta permisiunile de execuție și a face scriptul executabil:

chmod +x snapshot.sh

Rulați scriptul folosind această comandă:

./snapshot.sh

Veți observa că un director nou a fost creat, cu numele format din data și ora la care a fost executat scriptul. În interiorul acestui director se află copii ale fișierelor text.

Cu puțină creativitate, chiar și umila comandă `date` poate fi utilizată în mod productiv.