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ń.

--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 (<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