sh-utils(1) 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 <[email protected]>. 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ń.
--help
Wyświetla informację o stosowaniu programu i listę wszystkich dostępnych opcji, pomyślnie kończy pracę.
--version
Wyświetla numer wersji programu i pomyślnie kończy pracę.

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:

    DZIEŃ MIESIĄC ROK
    DZIEŃ MIESIĄC
    MIESIĄC DZIEŃ ROK
    DZIEŃ-MIESIĄC-ROK
Albo, pomijają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 (<[email protected]>) 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 (<[email protected]>) i Jima Berets (<[email protected]>) w sierpniu 1990. Rozmaite wersje dla systemu GNU zrobił David MacKenzie, Jim Meyering i inni.

Rozdział ten został pierwotnie utworzony przez Franc,oisa Pinard (<[email protected]>) z kodu źródłowego `getdate.y', a następnie poprawiony przez K. Berry (<[email protected]>).

INFORMACJE O TŁUMACZENIU

Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika.