Download: UserCommand

Transkrypt

Download: UserCommand
LINUX USER
Wiersz poleceń
Kalendarz w wierszu poleceń
PANOWANIE
NAD CZASEM
Dotychczasowe narzędzia cal and date ułatwiają śledzenie czasu i daty.
Umożliwiają nawet zmianę czasu systemowego
za pomocą jednego polecenia powłoki.
HEIKE JURZIK
K
alendarze ścienne są ładne,
a palmtopy poręczne, ale Linux,
dzięki narzędziom wiersza poleceń cal and date, zapewnia wszystko, co
jest niezbędne do szybkiego sprawdzenia
i ustawienia daty i godziny. Korzystając
z narzędzia cal
można wyświetlić
w oknie terminala stronę kalendarza albo
kalendarz całoroczny, a date nie tylko
wyświetla datę i godzinę w różnych formatach, ale także, jeżeli masz uprawnienia administratora, pozwala zmienić czas
systemowy.
Jeżeli polecenie uzupełni się o jednolub dwucyfrową liczbę (np. 6 lub 06)
i czterocyfrową liczbę oznaczającą rok (np.
2005), pozwala ono wyświetlić dany miesiąc. Aby na przykład wyświetlić kalendarz na czerwiec 2005, należy wpisać:
cal 06 2005
Ponieważ cal sięga w przeszłość do
1 stycznia 0001 r., nie wystarczy podać roku w postaci liczby dwucyfrowej. Na przykład
cal 06 05
wyświetli kalendarz na czerwiec 5 roku n.e.
W niektórych wersjach Linuksa cal domyślnie uznaje niedzielę za początek tygodnia – jeżeli wolisz, aby tydzień zaczynał
Kalendarz
na wszystkie pory roku
Narzędzie cal wyświetla kalendarz
w oknie terminala. Wpisanie polecenia
cal bez dodatkowych parametrów pozwala wyświetlić przejrzysty kalendarz
na dany miesiąc. Aby zobaczyć kalendarz całoroczny, wystarczy dodać parametr -y. Parametr -3 (Rysunek 1)
umożliwia wyświetlenie aktualnego
miesiąca oraz miesięca poprzedniego
i następnego.
84
NUMER 20 PAŹDZIERNIK 2005
Rysunek 1: Polecenie cal -3 wyświetla aktualny, poprzedni i następny miesiąc.
WWW.LINUX-MAGAZINE.PL
Wiersz poleceń
się od poniedziałku, po prostu uruchom
polecenie cal z parametrem -m.
Parametr -j pozwala ponumerować dni
w roku od 1 do 365 (lub 366 w latach przestępnych):
$ cal -j
June 2005
Su Mo Tu We Th Fr Sa
152 153 154 155
156 157 158 159 160 161 162
...
Wiemy dzięki temu na przykład, że 19
czerwca to 170 dzień roku.
Wszystko o czasie
Program date nie tylko sprawdza datę,
ale podaje więcej informacji o czasie.
Wpisanie tego polecenia po znaku zachęty powłoki, bez podawania żadnych
parametrów, wyświetli aktualną datę
i czas:
$ date
Sun Jun 19 18:38:15 EDT 2005
Jeżeli zostaną one podane w języku,
którego nie rozumiesz, możesz użyć polecenia echo do sprawdzenia zmiennej śro dowiskowej LC_TIME i ustawienia jej
odpowiedniej wartości (locale -a wyświetli ustawienia narodowe dostępne w danym systemie).
$ echo $LC_TIME
$ export LC_TIME=en_US
$ date
Sun Jun 19 19:00:15 EDT 2005
Aby wyświetlić aktualny czas i datę
w innym kraju, użyj polecenia date ze
zmienną środowiskową TZ (od „time zone” – strefa czasowa). W katalogu /usr/share/zoneinfo wymienione są wszystkie strefy
czasowe na świecie (niektóre z nich znajdują się w podkatalogach). Jeżeli na przykład chcesz sprawdzić, która godzina jest
w Nowej Zelandii, możesz tymczasowo, na
jedno wywołanie programu date, przypisać
odpowiednią wartość zmiennej TZ:
$ TZ=NZ date
Mon Jun 20 11:00:44 NZST 2005
Jeżeli masz znajomych lub krewnych za
granicą i chcesz uniknąć budzenia ich
w środku nocy, możesz zdefiniować alias
dla całego tego polecenia. W tym celu dodaj do pliku ~/.bashrc poniższy wpis :
alias nz='TZ=NZ date'
Następnie ponownie wczytaj plik konfiguracyjny:
source ~/.bashrc
albo po prostu wyloguj się i zaloguj ponownie. Aby następnym razem sprawdzić,
która godzina jest w Nowej Zelandii, wystarczy wpisać nz.
Mówiący zegar
Program date ma kilka użytecznych parametrów służących do ustalania formatu
wyświetlania. Służą do tego różne kombinacje symbolu procenta i liter, poprzedzone znakiem plusa (+):
$ date '+Today is day %d §§
in the month of %B §§
of the year %Y.'
Today is day 19 in the month §§
of June of the year 2005.
Parametr %d podaje dzień w postaci
dwucyfrowej, %B pełną nazwę miesiąca, a
%Y rok (jako liczbę czterocyfrową).
W Tabeli 1 zaprezentowano zestawienie
najważniejszych symboli wieloznacznych.
Zastosowanie tych opcji ma sens zwłaszcza wtedy, gdy potrzebujesz daty i czasu
w niepełnym formacie. Możesz na przykład użyć ich w połączeniu z poleceniami
tar i date, aby tworzyć kopie zapasowe nazywane automatycznie według dnia, miesiąca i roku utworzenia:
$ tar cvfj §§
backup_-_$(date +'%d')_$§§
(date +'%m')_$(date +'%y')§§
.tar.bz2 *
Jutro nie nadejdzie
nigdy...
Parametr -d pozwala określić format wyjścia polecenia date. Pozwala on użyć wielu
słów kluczowych i liczb, w tym takich słów
kluczowych jak tomorrow (jutro) i yesterday
(wczoraj), na przykład
$ date -d tomorrow
Mon Jun 20 18:37:10 EDT 2005
WWW.LINUX-MAGAZINE.PL
LINUX USER
$ date -d yesterday
Sat Jun 18 18:37:55 EDT 2005
Więcej słów kluczowych umożliwia odniesienia względne (next, ago itp.), odwoływanie się do ustalonych dat (09 June 1973, 09
Jun 73 etc.), dni tygodnia (Monday, Tuesday,
etc.) i okresów (day, year, week, month, fortnight etc.), jeżeli więc naprawdę chcesz, możesz wyświetlić wczorajszą datę, wpisując
date -d '1 day ago'
Jeżeli, jak w naszym przykładzie, używasz kilku słów kluczowych, musisz zastosować pojedyncze (' ') lub podwójne (”
„) znaki cudzysłowu. Wykorzystując także parametry odpowiedzialne za format,
możesz wyświetlić nazwę poprzedniego
miesiąca
Tabela 1:
Formatowanie wyjścia
polecenia date
%H
Godziny (00 do 23)
%I
Godziny (00 do 12)
%M
Minuty (00 do 59)
%S
Sekundy (00 do 60); ze względu na sekundę przestępną górną liczbą zakresu jest 60 a nie 59
%p
Przed południem lub po południu (AM, PM)
%r
Zegar dwunastogodzinny (gg:mm:ss AM/PM)
%R
Zegar dwudziestoczterogodzinny (gg:mm:ss),
%H:%M
%s
Liczba sekund od 1 stycznia 1970 (czas Uniksa)
%Z
Aktualna strefa czasowa (EDT, GMT itp.)
%a
Skrócona nazwa dnia tygodnia (Sun, Mon itp.)
%A
Pełna nazwa dnia tygodnia (Sunday, Monday itp.)
%b
Skrócona nazwa miesiąca (Jan, Feb itp.)
%B
Pełna nazwa miesiąca (January, February itp.)
%d
Dzień w postaci dwucyfrowej (01, 31 itp.)
%e
Dzień (jedna cyfra poprzedzona spacją, np. 7)
%D
Data w formacie mm/dd/rr
%j
Kolejny dzień roku – 1 dla 1 stycznia i 365 dla 31
grudnia (z wyjątkiem lat przestępnych)
%u
Kolejny dzień tygodnia (1 do 7).
%U
Kolejny tydzień kalendarzowy (00 do 53)
%y
Rok w postaci dwucyfrowej (00 do 99)
%Y
Rok w postaci czterocyfrowej (np. 1973)
%%
Wyświetla znak procenta
%n
Koniec wiersza
%t
Tabulator
NUMER 20 PAŹDZIERNIK 2005
85
LINUX USER
Wiersz poleceń
$ date -d '1 month ago' §§
+'Last month: %B'
Last month: May
albo sprawdzić, jakim dniem tygodnia
był 3 stycznia
$ date -d 'third January' +%A
Monday
Użytkownicy, którzy muszą ściśle trzymać się terminów, mogą za pomocą jednego polecenia sprawdzić, ile dni zostało im
do oddania aktualnego projektu. Wiąże się
to z wykorzystaniem legendarnych zdolności arytmetycznych Basha. Wyrażenie,
które chcemy obliczyć, znajduje się w podwójnych nawiasach, np.
$ echo $((1-1))
0
Aby sprawdzić liczbę dni do terminu,
musisz podać w nawiasach dwa wyrażenia
typu date: datę końcową i dzisiejszą. Zostaną one odjęte:
$ echo $((`date -d '29 §§
September 2005' +%j`§§
-`date +%j`))
102
Parametr formatujący +%j każe programowi date obliczyć liczbę dni; z zastosowaniem tej funkcji do aktualnej daty powinniście poradzić sobie sami.
Rozwiązanie to działa tylko wtedy, kiedy obie daty należą do tego samego roku,
można to jednak obejść. Wystarczy zastąpić licznik dni (%j) czasem uniksowym
(%s) – liczbą sekund od godz. 0:00
01.01.1970. Aby następnie otrzymać wynik
w dniach, trzeba podzielić obliczoną różnicę w sekundach przez 60*60*24 =
86400:
$ echo „$((`date -d §§
'19 June 2006' §§
+%s`-`date +%s`))§§
/ 86400” | bc -l
364.21625000000000000000
Ustawianie czasu
Administrator może korzystać z programu date, aby w wygodny sposób ustawiać
czas systemowy. Wystarczy po prostu
wpisać po poleceniu date (bez znaku plu-
86
NUMER 20 PAŹDZIERNIK 2005
sa) datę i godzinę jako pojedynczą dużą
liczbę. Zasady wpisywania daty i godziny
są dość surowe: najpierw należy wpisać
miesiąc (dwie cyfry), następnie dzień
(dwie cyfry), godzinę (dwie cyfry), sekundy (dwie cyfry), opcjonalnie dwie
pierwsze cyfry roku (np. 19) i dwie ostatnie cyfry roku (np. 73) [UWAGA: w oryginalnym tekście kolejność jest nieco inna, ale ta wersja jest zgodna z poniższym
listingiem – E.D]. Aby ustawić czas systemowy na 08:13 9 czerwca 1973, należy
najpierw wpisać su -, aby uzyskać prawa
roota, a następnie
# date 060908131973
Sat Jun 18 08:13:00 EDT 1973
Zamiennie można podać parametr -s
i wykorzystać słowa kluczowe i liczby opisane w części zatytułowanej Jutro nie nadejdzie nigdy.... Przykładowo, poniższe polecenie przestawi zegar o dwie minuty do
przodu:
date -s '+2 minutes'
Równie proste jest cofnięcie kalendarza
o jeden dzień:
date -s 'yesterday'
Uwaga: zmiana czasu nie wpływa na
zegar CMOS. Pecety mają zasilany z baterii zegar, który odlicza datę i czas nawet wtedy, gdy komputer jest wyłączony. Ponieważ znajduje się on w tym samym układzie scalonym co pamięć
RAM CMOS, nazywa się go zegarem
CMOS. Bywa również nazywany zegarem sprzętowym, zegarem czasu rzeczywistego (RTC, Real Time Clock) lub zegarem BIOS-u. Aby przestawić zegar
sprzętowy na aktualny czas systemowy
wpisz (także z prawami roota) następujące polecenie:
hwclock -w
Niektóre programy, np. klient IRC-a
xchat, nie znoszą dobrze dużych przeskoków w czasie; jeżeli chcesz więc eksperymentować z programem date, może okazać
się, że niektóre aplikacje trzeba uruchomić ponownie. ■
WWW.LINUX-MAGAZINE.PL

Podobne dokumenty