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