table of contents
SH-UTILS(1) | Narzędzia powłokowe GNU 2.0 | SH-UTILS(1) |
NAZWA¶
sh-utils - opis pakietu narzędzi powłokowych GNU
OD TŁUMACZA¶
Podręczniki man dla narzędzi powłokowych GNU nie są już rozwijane. Niniejsza strona podręcznika powstała jako tłumaczenie, używanej przez twórców jako podstawowej, dokumentacji formatu info. W pliku, który czytasz umieszczono część dokumentacji dotyczącą wspólnych cech i opcji programów oraz informacje, które z różnych przyczyn nie znalazły się na stronach opisujących poszczególne polecenia pakietu. Szczegółowe opisy samych poleceń znajdziesz we właściwych, osobnych stronach podręcznika.
WSTĘP¶
Niniejszy podręcznik opisuje zestaw narzędzi powłokowych GNU w wersji 2.0.
Podręcznik ten nie jest wyczerpujący. Zakłada się, że na ogół wiesz, co zrobić, i potrzebujesz tylko przypomnienia jak to zrobić. Nie usiłowano wyjaśnić podstawowych pojęć w sposób odpowiedni dla nowicjuszy. Zatem, jeśli jesteś zainteresowany, włącz się, proszę, w udoskonalanie podręcznika. Skorzysta na tym cała wspólnota GNU.
Niektóre z wymienionych programów przydatne są tylko przy pisaniu skryptów powłoki. Narzędzia takie stanowią, de facto, "język" skryptów powłoki (w dużym stopniu). Inne są czasami przydatne interaktywnie.
Narzędzia powłokowe GNU są w większości zgodne ze standardem POSIX.2.
Błędy proszę zgłaszać, w jęz.angielskim, do <bug-sh-utils@gnu.org>. Pamiętaj, by zamieścić numer wersji, architekturę maszyny, pliki wejściowe i inne informacje potrzebne do powielenia błędu: wprowadzane znaki, czego się spodziewałeś, co otrzymałeś i dlaczego jest to źle. Pliki diff są mile widziane, ale proszę dołączyć również opis problemu, gdyż czasem ciężko jest wyciągnąć wnioski.
Podręcznik ten powstał pierwotnie na bazie uniksowych stron man napisanych przez Davida MacKenzie i aktualizowanych przez Jima Meyeringa. Autorytatywną dokumentacją jest obecnie dokumentacja w formacie info; strony man nie są już rozwijane i aktualizowane. Franc,ois Pinard wykonał wstępną konwersję do formatu Texinfo. Karl Berry wykonał indeksy, trochę reorganizacji i edycji wyników. Richard Stallman wniósł swój zwykły nieoceniony wgląd w całość procesu.
ZAWARTOŚĆ PAKIETU¶
Obecnie pakiet narzędzi powłokowych GNU zawiera kilkadziesiąt programów:
Wypisywanie tekstu¶
Polecenia wyświetlające łańcuchy tekstowe
echo wypisuje wiersz tekstu printf formatuje i wypisuje dane yes wypisuje łańcuch aż do przerwania programu
Warunki¶
Polecenia przydatne przede wszystkim z uwagi na ich kod zakończenia, nie zaś wyświetany wynik. Stąd, często używane są jako warunek instrukcji `if' powłoki lub też jako ostatnie polecenie potoku.
false nic nie robi, zwraca niepowodzenie true nic nie robi, zwraca powodzenie test sprawdza typy plików, porównuje wartości expr rozwija (interpretuje) wyrażenia
Przekierowanie¶
Powłoki Uniksów powszechnie zapewniają kilka postaci "przekierowania" -- sposobów zmiany źródła wejścia lub celu wyjścia polecenia. Jednak jedno przydatne przekierowanie wykonywane jest przez odrębne polecenie, nie przez powłokę:
tee przekierowuje wyjście do wielu plików
Operacje na nazwach plików¶
Polecenia do manipulacji nazwami plików
basename obcina katalog i przyrostek z nazwy pliku dirname obcina niekatalogowy przyrostek nazwy pliku pathchk sprawdza przenośność nazwy pliku
Kontekst pracy¶
Polecenia wyświetlające lub zmieniające kontekst, w którym pracujesz: bieżący katalog, ustawienia terminala i tak dalej. Zobacz także polecenia związane z użytkownikiem, w następnej sekcji.
pwd wypisuje katalog roboczy stty wypisuje lub zmienia charakterystyki terminala printenv wypisuje zmienne środowiska tty wypisuje nazwę pliku terminala
Informacja o użytkowniku¶
Polecenia wypisujące informacje związane z użytkownikiem: nazwy zgłoszeniowe, grupy i tak dalej.
id wypisuje rzeczywisty i efektywny uid i gid logname wypisuje bieżącą nazwę zgłoszeniową (loginname) whoami wypisuje efektywny id użytkownika groups nazwy grup, do których należy użytkownik users nazwy aktualnie zalogowanych użytkowników who wypisuje kto jest obecnie zalogowany
Kontekst systemowy¶
Polecenia wypisujące lub zmieniające informację ogólnosystemową.
date wypisuje lub ustawia datę i czas systemowy uname wypisuje informację o systemie hostname wypisuje lub ustawia nazwę systemu hostid wypisuje numeryczny identyfikator systemu
Zmienione wywoływanie poleceń¶
Polecenia uruchamiające inne polecenia w kontekście różniącym się od bieżącego: zmienionym środowisku, jako inny użytkownik itp.
chroot zmienia katalog główny (korzeń) env zmienia zmienne środowiska nice zmienia priorytet obsługi zadań nohup uodpornia na sygnał zawieszenia wykonywania su zmienia id użytkownika i grupy
Opóźnianie¶
sleep pauzuje przez zadany czas
Operacje numeryczne¶
Programy wykonujące operacje związane z liczbami.
factor pokazuje czynniki liczby seq wypisuje ciągi liczb
OPCJE WSPÓLNE¶
Pewne opcje dostępne są we wszystkich opisywanych programach (naprawdę powinien je przyjmować każdy z programów GNU). Odstępstwa od tej zasady są jawnie opisane w dokumentacji danego polecenia. `--help' lub `--version' traktowane są jako opcja tylko jeśli występują jako jedyny argument wiersza poleceń.
FORMATY WPROWADZANIA DATY¶
Ta sekcja opisuje tekstowe postaci daty akceptowane przez programy GNU. Są to łańcuchy znakowe, które możesz, jako użytkownik, podać jako argumenty różnych programów. Nie jest tu opisany interfejs C (poprzez funkcję getdate).
Mimo, że opisywana składnia daty umożliwia przedstawienie dowolnej daty od roku zerowego naszej ery, to liczby całkowite komputera nie są wystarczająco duże dla takich (względnie) długich okresów czasu. Najwcześniejszą datą jaka jest dozwolona semantycznie w systemach uniksowych jest północ 1 stycznia 1970 czasu uniwersalnego (UTC).
Ogólna składnia daty¶
"Data" jest łańcuchem znakowym (może być pusty) zawierającym wiele elementów rozdzielonych białymi znakami. Biały znak może być pominięty jeśli nie spowoduje to niejednoznaczności. Pusty łańcuch oznacza początek dzisiejszego dnia (tj.północ). Kolejność elementów jest nieistotna. Łańcuch daty może zawierać wiele różnych odmian elementów:
* datę kalendarzową
* czas dnia (godzinę)
* strefę czasową
* dzień tygodnia
* element względny
* czyste liczby
Opiszemy poniżej po kolei każdy z typów elementu daty.
W większości kontekstów kilka liczb może być zapisanych słownie. Najbardziej przydaje się to do określania elementów dnia tygodnia lub elementów względnych (patrz poniżej). Oto lista: `first' (pierwszy) dla 1, `next' (następny) dla 2, `third' (trzeci) dla 3, `fourth' (czwarty) dla 4, `fifth' dla 5, `sixth' dla 6, `seventh' dla 7, `eighth' dla 8, `ninth' dla 9, `tenth' dla 10, `eleventh' dla 11 i `twelfth' dla 12. Również, `last' (ostatni) oznaczający dokładnie -1.
Kiedy w ten sposób zapisywany jest miesiąc, wciąż traktowany jest tak, jakby został zapisany liczbowo, zamiast potraktowania w sposób "w pełni zgodny z wymową"; zmienia to dozwolone łańcuchy.
Wielkość liter w datach jest całkowicie ignorowana. Pomiędzy nawiasami okrągłymi można umieszczać komentarze, póki zawarte nawiasy są poprawnie zagnieżdżone. Myślniki, po których nie występują cyfry są obecnie ignorowane. Wiodące zera w liczbach są ignorowane.
Zapis daty kalendarzowej¶
"Zapis daty kalendarzowej" określa dzień roku. Podawany jest rozmaicie, w zależności od tego, czy miesiąc określono liczbowo czy słownie. Wszystkie te łańcuchy określają tę samą datę kalendarzową:
1970-09-17 # ISO 8601.
70-9-17 # załóż 19xx dla 69 do 99, 20xx dla 00 do 68.
70-09-17 # wiodące zera są ignorowane.
9/17/72 # powszechny zapis amerykański.
24 September 1972
24 Sept 72 # wrzesień (September) ma specjalny skrót.
24 Sep 72 # zawsze dozwolone trzyliterowe skróty.
Sep 24, 1972
24-sep-72
24sep72
Można też ominąć rok. W takim przypadku, używany jest ostatnio określony rok, lub rok bieżący, jeśli nie określono żadnego. Na przykład:
9/17
sep 17
A oto reguły...
Dla miesięcy podanych liczbowo dozwolony jest format liczbowy ISO 8601 postaci `ROK-MIESIĄC-DZIEŃ', gdzie ROK jest dowolną liczbą całkowitą, MIESIĄC jest liczbą od 01 do 12, zaś DZIEŃ jest liczbą od 01 do 31. Jeśli liczba jest mniejsza niż dziesięć to musi być zapisana z zerem wiodącym. Jeżeli ROK jest wynosi 68 lub mniej, to dodawane jest do niego 2000; w przeciwnym razie, jeśli ROK jest mniejszy od 100, to jest do niego dodawane 1900. Akceptowana jest konstrukcja postaci `MIESIĄC/DZIEŃ/ROK', popularna w Stanach Zjednoczonych. Również `MIESIĄC/DZIEŃ', z pominięciem roku.
Miesiące słownie mogą być zapisane w pełnej formie: `January' (styczeń), `February' (luty), `March' (marzec), `April' (kwiecień), `May' (maj), `June' (czerwiec), `July' (lipiec), `August' (sierpień), `September' (wrzesień), `October' (październik), `November' (listopad) lub `December' (grudzień). Słowne określenia miesięcy mogą być skracane do pierwszych trzech liter, z możliwym dodaniem kropki kończącej skrót. Dozwolony jest również zapis `Sept' zamiast `September'.
Przy słownym zapisie miesięcy data kalendarzowa może być podana na jeden z poniższych sposobów:
Albo, pomijając rok:
DZIEŃ MIESIĄC ROK
DZIEŃ MIESIĄC
MIESIĄC DZIEŃ ROK
DZIEŃ-MIESIĄC-ROK
MIESIĄC DZIEŃ
Zapis czasu (godziny)¶
"Zapis czasu" w łańcuchach daty określa czas (godzinę) zadanego dnia. Oto kilka przykładów, oznaczających tę samą godzinę:
20:02:0
20:02
8:02pm
20:02-0500 # w strefie EST (Eastern US Standard Time)
Ogólniej, czas może zostać podany jako `GODZINA:MINUTA:SEKUNDA', gdzie GODZINA jest liczbą od 0 do 23, MINUTA liczbą od 0 do 59, zaś SEKUNDA liczbą od 0 do 59. Człon `:SEKUNDA' można pominąć, jest on wówczas przyjmowany jako zero.
Jeśli po określeniu czasu występuje `am' lub `pm' (lub `a.m.' czy `p.m.'), to GODZINA ograniczona jest do zakresu od 1 do 12 a `:MINUTA' może być pominięta (przyjmowana za zero). `am' wskazuje na pierwszą połowę dnia, `pm' na drugą połowę. W tej notacji, godzina 12 poprzedza godzinę 1: północ jest zapisywana jako `12am', zaś południe jako `12pm'.
Po zapisie czasu może również wystąpić określenie korekty z uwagi na strefę czasową. Jest ono wyrażane jako `ZGGMM', gdzie Z jest znakiem `+' lub `-', GG jest liczbą godzin różnicy dla strefy a MM liczbą minut. Podanie w ten sposób strefy czasowej wymusza interpretację podanego czasu względem czasu uniwersalnego (UTC - Coordinated Universal Time), unieważniając wcześniejsze określenia strefy czasowej czy lokalnej strefy czasowej. Część opisująca MINUTY w określeniu czasu nie może być pomijana, jeśli używana jest korekta z uwagi na strefę czasową. Jest to jedyny sposób określania korekty strefy czasowej o ułamkowe części godziny.
Można podać korektę `am'/`pm' albo korektę z uwagi na strefę czasową, ale nie obie jednocześnie.
Strefa czasowa¶
Element typu "strefa czasowa" określa międzynarodową strefę czasową, wskazywaną przez niewielki zestaw liter. Są one obsługiwane w celu zachowania wstecznej zgodności. Ich używanie nie jest jednakże zalecane, gdyż praktycznie są one dwuznaczne: na przykład, skrót `EST' posiada inne znaczenie w Australii, a inne w Stanach Zjednoczonych. Zawarte w nim kropki są ignorowane. Wojskowe miana stref czasowych używają pojedynczych liter. Obecnie jako pozycje typu strefa czasowa mogą być przedstawiane wyłącznie strefy o przesunięciu o całkowitą liczbę godzin. W poprzedniej sekcji znajdziesz opis precyzyjniejszego sterowania korektą z uwagi na strefę czasową.
Poniżej podano wiele stref czasowych (z wyłączeniem stref "czasów letnich"), uporządkowanych według przesunięcia w czasie (parametr GODZINA strefy).
- -1200
- `Y' wojskowo.
- -1100
- `X' wojskowo.
- -1000
- `W' wojskowo.
- -0900
- `V' wojskowo.
- -0800
- `PST' dla amerykańskiej strefy Pacific Standard, zaś `U' wojskowo.
- -0700
- `MST' dla amerykańskiej strefy Mountain Standard, zaś `T' wojskowo.
- -0600
- `CST' dla amerykańskiej strefy Central Standard, zaś `S' wojskowo.
- -0500
- `EST' dla amerykańskiej strefy Eastern Standard, zaś `R' wojskowo.
- -0400
- `AST' dla amerykańskiej strefy Atlantic Standard, zaś `Q' wojskowo.
- -0300
- `P' wojskowo.
- -0200
- `O' wojskowo.
- -0100
- `N' wojskowo.
- +0000
- `GMT' dla średniego czasu Greenwich (Greenwich Mean), `UT' dla czasu uniwersalnego, `UTC' dla Coordinated Universal, `WET' dla czasu zachodnioeuropejskiego (Western European), zaś `Z' dla ISO 8601 i zapisu wojskowego.
- +0100
- `A' wojskowo, `CET' dla czasu środkowoeuropejskiego (Central European), `MET' dla Midden Europesche Tijd (holenderski), and `MEZ' dla Mittel-Europa"ische Zeit (Niemcy).
- +0200
- `B' wojskowo, zaś `EET' dla wschodnioeuropejskiego (Eastern European).
- +0300
- `C' wojskowo.
- +0400
- `D' wojskowo.
- +0500
- `E' wojskowo.
- +0600
- `F' wojskowo.
- +0700
- `G' wojskowo.
- +0800
- `H' wojskowo.
- +0900
- `I' wojskowo, zaś `JST' dla strefy japońskiej (Japan Standard).
- +1000
- `GST' dla amerykańskiej strefy Guam (Guam Standard), zaś `K' wojskowo.
- +1100
- `L' wojskowo.
- +1200
- `M' wojskowo, zaś `NZST' dla strefy nowozelandzkiej (New Zealand Standard).
Istnieje wiele stref czasowych wynikających z oszczędzania światła dziennego ("czas letni", strefy DST - daylight-saving time). Również umieszczając po określeniu strefy zwykłej łańcuch `DTS' jako odrębne słowo (tj. oddzielone białymi znakami), można podać odpowiednią strefę czasową oszczędzania energii.
- -0700
- `PDT' dla amerykańskiej strefy Pacific Daylight.
- -0600
- `MDT' dla amerykańskiej strefy dla Mountain Daylight.
- -0500
- `CDT' dla amerykańskiej strefy Central Daylight.
- -0400
- `EDT' dla amerykańskiej strefy Eastern Daylight.
- -0300
- `ADT' dla amerykańskiej strefy Atlantic Daylight.
- +0100
- `BST' dla brytyjskiego czasu letniego (British Summer) oraz `WEST' dla zachodnioeuropejskiego czasu letniego (Western European Summer).
- +0200
- `CEST' dla środkowoeuropejskiego czasu letniego (Central European Summer), `MEST' dla Midden Europesche S. Tijd (holenderski) oraz `MESZ' dla Mittel-Europa"ische Sommerzeit (Niemcy).
- +1300
- `NZDT' dla nowozelandzkiego czasu New Zealand Daylight.
Dzień tygodnia¶
Bezpośrednie powołanie się na dzień tygodnia będzie występować po dacie (tylko jeśli to konieczne) w celu określenia takiego dnia tygodnia w przyszłości.
Dni tygodnia mogą być pisane w postaci pełnej: `Sunday' (niedziela), `Monday' (poniedziałek), `Tuesday' (wtorek), `Wednesday' (środa), `Thursday' (czwartek), `Friday' (piątek) lub `Saturday' (sobota). Można je skracać do pierwszych trzech liter, opcjonalnie zakończonych kropką. Dozwolone są także specjalne skróty `Tues' dla wtorku (Tuesday), `Wednes' dla środy (Wednesday) oraz `Thur' lub `Thurs' dla czwartku (Thursday).
Dzień tygodnia może być poprzedzony liczbą, by wyrazić przesunięcie w czasie o daną liczbę tygodni. Najlepiej używany jest w wyrażeniach takich jak `third monday' (trzeci poniedziałek). W tym kontekście dopuszczalne są również `last DZIEŃ' lub `next DZIEŃ'; przesuwają one o tydzień wstecz lub w przód w stosunku do dnia reprezentowanego przez DZIEŃ.
Przecinek następujący po określeniu dnia tygodnia jest jest ignorowany.
Elementy względne w łańcuchach dat¶
"Elementy względne" wskazują na datę przesunięta względem danej (lub daty bieżącej, jeśli nie podano innej) w przód i wstecz. Efekty elementów względnych sumują się. Oto kilka przykładów:
1 year # 1 rok
1 year ago # 1 roku temu
3 years # 3 lata
2 days # 2 dni
Jednostkę przemieszczenia w czasie można wybrać przy pomocy łańcucha year lub month dla przesunięcia odpowiednio o całe lata lub miesiące. Są to jednostki dość rozmyte, gdyż lata i miesiące nie mają jednakowej długości. Precyzyjniejszymi jednostkami są fortnight, czyli okres 14 dni, week (tydzień) mający 7 dni, day (dzień) mający 24 godziny, hour (godzina) o 60 minutach, minute (minuta) lub min o 60 sekundach i second (sekunda) lub sec o długości jednej sekundy. Przyrostek s, oznaczający w języku angielskim liczbę mnogą, dołączony do tych jednostek jest akceptowany i ignorowany.
Jednostka czasu może zostać poprzedzona mnożnikiem, podanym jako liczba (może być ze znakiem). Liczby bez znaku traktowane są jako liczby dodatnie ze znakiem. Brak liczby oznacza mnożnik 1. Następujące po elemencie względnym słowo ago (..temu) jest równoważne poprzedzeniu jednostki dodatkowym mnożnikiem o wartości -1.
Łańcuch znaków tommorow (jutro) ma wartość jednego dnia w przyszłości (równoważne day), łańcuch yesterday (wczoraj) ma wartość jednego dnia w przeszłości (równoważny day ago, dzień temu).
Łańcuchy now (teraz) lub today (dziś) są jednostkami względnymi odpowiadającymi zerowemu przesunięciu w czasie; biorą się one z tego, że przesunięcie w czasie o wartości zerowej reprezentuje bieżący czas, jeśli nie zostanie to zmienione przez poprzedzające elementy. Łańcuchów określających bieżący czas można użyć do uwydatnienia innych elementów, jak w `12:00 today' (12:00 dziś). Łańcuch this (ten) ma również znaczenie przesunięcia w czasie o zerowej wartości, ale używany jest raczej w łańcuchach daty jak `this thursday' (ten czwartek).
Gdy element względny powoduje, że data wynikowa przekracza granicę między DST (np.czasem letnim, zobacz podsekcja `Strefa czasowa') a czasem zwykłym (nie-DST), lub odwrotnie, godzina jest korygowana stosownie do czasu lokalnego.
Czyste liczby w łańcuchach daty¶
Dokładna interpretacja czystej liczby dziesiętnej zależy od kontekstu w łańcuchu znakowym określającym datę.
Jeżeli liczba dziesiętna ma postać RRRRMMDD i nie pojawia się przez nią żaden inny element daty kalendarzowej (patrz `Zapis daty kalendarzowej'), to RRRR odczytywane jest jako rok, MM jako numer miesiąca a DD jako dzień miesiąca opisywanej daty.
Jeżeli liczba dziesiętna ma postać GGMM i w łańcuchu daty nie pojawia się przed nią żaden inny element określający czas, to GG jest odczytywane jako godzina a MM jako minuty godziny opisywanego czasu dnia. MM może być też pominięte.
Jeśli po lewej stronie liczby pojawia się zarówno data kalendarzowa jak i czas, ale nie ma elementu względnego, to liczba unieważnia wcześniej określony rok.
Autorzy `getdate'¶
`getdate' zostało pierwotnie zaimplementowane przez Stevena M. Bellovin (<smb@research.att.com>) podczas pobytu w Chapel Hillwhile na University of North Carolina. Kod został później nieco zmodyfikowany przez kilku ludzi na Usenecie, a następnie gruntownie zmieniony przez Richa $alz (<rsalz@bbn.com>) i Jima Berets (<jberets@bbn.com>) w sierpniu 1990. Rozmaite wersje dla systemu GNU zrobił David MacKenzie, Jim Meyering i inni.
Rozdział ten został pierwotnie utworzony przez Franc,oisa Pinard (<pinard@iro.umontreal.ca>) z kodu źródłowego `getdate.y', a następnie poprawiony przez K. Berry (<kb@cs.umb.edu>).
ZOBACZ TAKŻE¶
- echo(1)
- wypisuje wiersz tekstu
- printf(1)
- formatuje i wypisuje dane
- yes(1)
- wypisuje łańcuch aż do przerwania programu
- false(1)
- nic nie robi, zwraca niepowodzenie
- true(1)
- nic nie robi, zwraca powodzenie
- test(1)
- sprawdza typy plików, porównuje wartości
- expr(1)
- rozwija (interpretuje) wyrażenia
- tee(1)
- przekierowuje wyjście do wielu plików
- basename(1)
- obcina katalog i przyrostek z nazwy pliku
- dirname(1)
- obcina niekatalogowy przyrostek nazwy pliku
- pathchk(1)
- sprawdza przenośność nazwy pliku
- pwd(1)
- wypisuje katalog roboczy
- stty(1)
- wypisuje lub zmienia charakterystyki terminala
- printenv(1)
- wypisuje zmienne środowiska
- tty(1)
- wypisuje nazwę pliku terminala
- id(1)
- wypisuje rzeczywisty i efektywny uid i gid
- logname(1)
- wypisuje bieżącą nazwę zgłoszeniową
- whoami(1)
- wypisuje efektywny id użytkownika
- groups(1)
- nazwy grup, do których należy użytkownik
- users(1)
- nazwy aktualnie zalogowanych użytkowników
- who(1)
- wypisuje, kto jest obecnie zalogowany
- date(1)
- wypisuje lub ustawia datę i czas systemowy
- uname(1)
- wypisuje informację o systemie
- hostname(1)
- wypisuje lub ustawia nazwę systemu
- hostid(1)
- wypisuje numeryczny identyfikator systemu
- chroot(1)
- zmienia katalog główny
- env(1)
- zmienia zmienne środowiska
- nice(1)
- zmienia priorytet obsługi zadań
- nohup(1)
- uodpornia na sygnał zawieszenia wykonywania
- su(1)
- zmienia id użytkownika i grupy
- sleep(1)
- pauzuje przez zadany czas
- factor(1)
- pokazuje czynniki liczby
- seq(1)
- wypisuje ciągi liczb
FSF | maj 2000 |