fileutils(1) opis pakietu narzędzi plikowych GNU

OD TŁUMACZA

Podręczniki man dla narzędzi plikowych 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.

Dokumentacja niniejsza nie jest już utrzymywana i może być niedokładna lub niekompletna. Autorytatywnym źródłem jest obecnie dokumentacja Texinfo. Dostęp do niej uzyskasz wpisując w wierszu poleceń:

pinfo fileutils
lub
info fileutils.

WSTĘP

Niniejszy podręcznik opisuje zestaw narzędzi plikowych GNU w wersji 4.01.

Podręcznik ten nie jest wyczerpujący: nie usiłowano wyjaśnić podstawowych pojęć dotyczących plików w sposób odpowiedni dla nowicjuszy. Zatem, jeśli jesteś zainteresowany, włącz się, proszę, w udoskonalanie go. Skorzysta na tym cała wspólnota GNU.

Narzędzia plikowe 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 plikowych GNU zawiera kilkanaście programów:

Listowanie zawartości katalogów

ls          lista zawartości katalogu
dir         ls krótko
vdir        rozgadane ls
dircolors   ustawienie kolorów dla ls, itd.

Podstawowe operacje

cp          kopiuje pliki
dd          konwertuje i kopiuje plik
install     kopiuje pliki i ustawia atrybuty
mv          przesuwa pliki/zmienia nazwy
rm          usuwa pliki lub katalogi
shred       bezpieczniejsze usuwanie plików

Specjalne typy plików

Niżej wymienione polecenia tworzą pliki specjalnych typów. (W szczególności `rmdir' usuwa katalogi, będące jednym ze specjalnych typów plików.)

Mimo, że uniksopodobne systemy operacyjne mają znacznie mniej specjalnych typów plików niż inne, nie wszystko może być traktowane wyłącznie jako niezróżnicowany strumień bajtów "zwykłych plików". Na przykład, podczas tworzenia lub usuwania pliku, system musi odnotować tę informację, co czyni w "katalogu" -- specjalnym rodzaju pliku. Można czytać katalogi tak jak zwykłe pliki, jeśli ktoś jest ciekaw, jednak system do wykonania swojej roboty musi narzucić strukturę, pewne uporządkowanie bajtów takiego pliku. Dlatego jest to "specjalny" typ pliku.

Oprócz katalogów, inne typy plików specjalnych obejmują potoki nazwane (FIFO), dowiązania symboliczne, gniazda i tak zwane "pliki specjalne".

ln          tworzy dowiązania (links) między plikami
mkdir       tworzy katalogi
mkfifo      tworzy FIFO (potoki nazwane)
mknod       tworzy blokowe lub znakowe pliki specjalne
rmdir       usuwa puste katalogi

Zmiana atrybutów pliku

Plik to nie tylko jego zawartość, nazwa i typ pliku (zobacz `Specjalne typy plików'). Plik ma także właściciela (id użytkownika), grupę (id grupy), prawa (co może zrobić z plikiem jego właściciel, co mogą członkowie grupy a co wszyscy inni), różne znaczniki czasu (timestamps) i inne dane. Zbiorczo, nazywamy je "atrybutami" pliku. Poniższe polecenia zmieniają atrybuty pliku.
chown       zmienia właściciela i grupę pliku
chgrp       zmienia grupę pliku
chmod       zmienia prawa dostępu do pliku
touch       zmienia znaczniki czasu pliku

Zajętość dysku

Żaden dysk nie pomieści nieskończonej ilości danych. Poniższe polecenia podają, jak bardzo zajęte lub dostępne jest miejsce na dyskach. (Nie ma to nic wspólnego z tym, ile pamięci głównej, tj. RAM, używa dany program podczas pracy; w tym celu potrzebujemy `ps', `pstat' lub `swap' albo jakiegoś podobnego polecenia.)
df          raport zajętości dysku dla systemów plików
du          szacunkowe zużycie miejsca przez plik
sync        synchronizuje pamięć i dysk

OPCJE WSPÓLNE

Pewne opcje dostępne są we wszystkich opisywanych programach (naprawdę powinien je przyjmować każdy z programów GNU).
--help
Wyświetla informację o stosowaniu programu i listę wszystkich dostępnych opcji, pomyślnie kończy działanie.
--version
Wyświetla numer wersji programu i pomyślnie kończy działanie.

Zobacz też w niektórych programach:


Opcje kopii zapasowych: -b -S -V
Rozmiar bloku: BLOCK_SIZE i --block-size
Katalog docelowy: --target-directory

OPCJE KOPII ZAPASOWYCH

Niektóre z programów GNU (co najmniej `cp', `install', `ln' i `mv') opcjonalnie tworzą kopie zapasowe plików przed zapisaniem ich nowych wersji. Opcje te sterują szczegółami robienia kopii. Są one także krótko wzmiankowane w opisach konkretnych programów.
-b metoda
--backup[=metoda] Tworzy kopię zapasową każdego pliku, który inaczej byłby nadpisany lub usunięty. Bez użycia tej opcji wersje pierwotne są niszczone. Posługuje się zadaną metodą do określenia typu kopii zapasowych, jakie mają być wykonywane. Gdy opcja ta jest używana bez określenia metody, do używana jest wartość zmiennej środowiskowej VERSION_CONTROL. A jeśli ta zmienna nie jest ustawiona, to domyślnym typem kopii zapasowej jest `existing'.

Opcja ta odpowiada zmiennej `version-control' Emacsa: używane są te same wartości dla metody tworzenia kopii. Opcje te rozpoznają także bardziej opisowe synonimy. Prawidłowe wartości to (unikalne skróty są dopuszczalne):

none, off
Nigdy nie tworzy kopii zapasowych.
t, numbered
Zawsze tworzy numerowane kopie zapasowe.
nil, existing
Tworzy numerowane kopie zapasowe plików, które już je mają, zwykłe kopie dla reszty.
never, simple
Robi zawsze zwykłe kopie zapasowe. Zauważ, proszę, że `never' nie powinno być mylone z `none'.
-S przyr_kopii
--suffix przyr_kopii Dodaje przyrostek przyr_kopii do nazwy każdego pliku kopii zapasowej wykonanego za pomocą -b. Jeśli opcja ta nie zostanie podana, to użyta zostanie wartość zmiennej środowiskowej SIMPLE_BACKUP_SUFFIX. Jeśli ona również nie jest określona, to użyty zostanie domyślny znak `~', jak w Emacsie.
--version-control=metoda
Opcja ta jest przestarzała i w przyszłych wydaniach zostanie usunięta. Została zastąpiona przez --backup.

ROZMIAR BLOKU

Niektóre z programów GNU (co najmniej `df', `du' i `ls') wyświetlają wielkości plików w "blokach". Możesz dopasować rozmiar bloku by uczytelnić rozmiary plików. Rozmiar bloku do wyświetlania jest niezależny od rozmiaru bloku jakiegokolwiek systemu plików.

Normalnie wyświetlane zajętości dysku zaokrąglane są w górę, ilość wolnego miejsca w dół, a inne rozmiary do najbliższego bloku, z połówkami zaokrąglanymi do liczb parzystych.

Domyślny rozmiar bloku wybierany jest przez sprawdzenie kolejno poniższych zmiennych środowiska; pierwsza, która jest ustawiona określa rozmiar bloku.

DF_BLOCK_SIZE
Określa domyślny rozmiar bloku dla polecenia `df'. Podobnie, DU_BLOCK_SIZE określa wielkość domyślną dla `du', zaś LS_BLOCK_SIZE' dla `ls'.
BLOCK_SIZE
Określa domyślny rozmiar bloku dla wszystkich trzech poleceń, jeśli nie są ustawione wymienione wyżej zmienne specyficzne dla poszczególnych poleceń.
POSIXLY_CORRECT
Jeżeli nie jest ustawiona ani zmienna polecenie_BLOCK_SIZE ani też BLOCK_SIZE, ale ta zmienna jest ustawiona, to domyślną wartością bloku jest 512.

Jeśli nie jest ustawiona żadna z powyższych zmiennych środowiskowych, to obecnie domyślny rozmiar bloku wynosi 1024 bajty, lecz liczba ta może w przyszłości się zmienić.

Rozmiaru bloku może opisywać dodatnia liczba całkowita, określająca liczbę bajtów bloku, bądź jeden z napisów human-readable lub si, wybierający format w postaci czytelnej dla człowieka.

W przypadku formatów czytelnych dla człowieka wyświetlane rozmiary kończone są literą przyrostka potęgi, jak `M' dla megabajtów. BLOCK_SIZE=human-readable posługuje się potęgami 1024; `M' oznacza 1,048,576 bajtów. BLOCK_SIZE=si jest podobne, ale używa potęg 1000; `M' oznacza tu 1,000,000 bajtów. (SI, Międzynarodowy System Jednostek, definiuje wymienione przyrostki kolejnych potęg liczby 1000.)

Całkowity rozmiar bloku może być zakończony literą określającą wielokrotność tego rozmiaru. Przy użyciu tej notacji, litery rozmiarów normalnie oznaczają potęgi 1024, i może po nich wystąpić opcjonalna litera `B' dla oznaczenia "bajtów"; ale jeżeli po literze rozmiaru występuje `D' ("bajty dziesiętnie"), oznacza to potęgi 1000. Na przykład, `BLOCK_SIZE=4MB' jest równoważne `BLOCK_SIZE=4194304', a `BLOCK_SIZE=4MD' jest równoważne `BLOCK_SIZE=4000000'.

Zdefiniowane są poniższe litery. Bardzo wielkie rozmiary, jak `1Y' mogą być odrzucone przez twój komputer z powodu ograniczeń jego arytmetyki.

k
kilo: 2^10 = 1024 dla `human-readable' lub 10^3 = 1000 dla `si'.
M
Mega: 2^20 = 1,048,576 lub 10^6 = 1,000,000.
G
Giga: 2^30 = 1,073,741,824 lub 10^9 = 1,000,000,000.
T
Tera: 2^40 = 1,099,511,627,776 lub 10^12 = 1,000,000,000,000.
P
Peta: 2^50 = 1,125,899,906,842,624 lub 10^15 = 1,000,000,000,000,000.
E
Exa: 2^60 = 1,152,921,504,606,846,976 lub 10^18 = 1,000,000,000,000,000,000.
Z
Zetta: 2^70 = 1,180,591,620,717,411,303,424 lub 10^21 = 1,000,000,000,000,000,000,000.
Y
Yotta: 2^80 = 1,208,925,819,614,629,174,706,176 lub 10^24 = 1,000,000,000,000,000,000,000,000.

Domyślne rozmiary bloków mogą być unieważniane przez jawne użycie opcji --block-size=rozmiar. Opcja -k lub -kilobytes jest równoważna --block-size=1k, co jest ustawieniem domyślnym, chyba że ustawiono zmienną środowiskową POSIXLY_CORRECT. Opcja -h lub --human-readable jest równoważna --block-size=human-readable. Opcja -H lub -si jest równoważna --block-size=si.

KATALOG DOCELOWY

Niektóre programy GNU (co najmniej `cp', `install', `ln' i `mv') pozwalają na określenie katalogu docelowego przez tę opcję:
--target-directory=KATALOG
Określa KATALOG docelowy.

Interfejs większości programów przewiduje, że po przetworzeniu opcji i skończonej liczby (może być to zero) argumentów stałopozycyjnych, pozostała lista argumentów powinna być albo pusta albo być listą pozycji (zwykle plików), które będą identycznie traktowane. Program xargs(1) zaprojektowano do pracy z taką konwencją.

Polecenia z rodziny mv są niezwyczajne przez to, że pobierają zmienną liczbę argumentów, specjalnie traktując ostatni z nich (czyli katalog docelowy). Powoduje to, że wykonanie niektórych operacji nie jest banalne, np., "przesuń wszystkie pliki stąd do ../d/", gdyż `mv * ../d/' może wyczerpać przestrzeń argumentów [będzie ich zbyt wiele na możliwość rozwinięcia znaku `*' przez powłokę]. Z kolei `ls | xargs ...' nie daje czystego sposobu na określenie dodatkowego, końcowego argumentu dla każdego wywołania odpowiedniego polecenia. (Da się to zrobić przez polecenie powłoki, ale wymaga to więcej ludzkiej pracy i wysiłku umysłowego niż powinno.)

Opcja --target-directory pozwala programom cp, install, ln i mv na wygodne użytkowanie z xargs. Na przykład, można przesunąć pliki z bieżącego katalogu do równoległego katalogu `d' w ten sposób (jednak, nie przesuwa to plików o nazwach rozpoczynających się `.')

    ls | xargs mv --target-directory=../d
Korzystając z programu find w wersji GNU, można przesunąć wszystkie pliki takim poleceniem:
    find . -mindepth 1 -maxdepth 1 \
        | xargs mv --target-directory=../d
Zawiedzie ono jednak, jeżeli w bieżącym katalogu nie ma żadnych plików lub któryś z plików ma nazwę zawierającą znak nowej linii. Poniższy przykład usuwa te ograniczenia i wymaga równocześnie GNU find i GNU xargs:
    find . -mindepth 1 -maxdepth 1 -print0 \
        | xargs --null --no-run-if-empty   \
                mv --target-directory=../d

PRAWA PLIKU

Każdy z plików posiada zestaw "praw dostępu" kontrolujących rodzaje dostępu, jakie mają do niego użytkownicy. Prawa dla pliku są również nazywane jego "trybem dostępu". Mogą być przedstawiane w formie symbolicznej lub jako liczba ósemkowa.

Struktura praw pliku

Istnieją trzy rodzaje praw, jakie w stosunku do pliku może posiadać użytkownik:
1.
prawo do odczytu pliku. Dla katalogów oznacza ono prawo do przeglądania (listowania) zawartości danego katalogu.
2.
prawo do zapisu (zmiany) pliku. Dla katalogów oznacza ono prawo do tworzenia i usuwania plików w danym katalogu.
3.
prawo do wykonywania pliku (uruchomienia go jako programu). Dla katalogów oznacza ono prawo dostępu do plików w danym katalogu.

Istnieją trzy kategorie użytkowników, którzy mogą mieć różne prawa do wykonywania dowolnej z powyższych czynności dla pliku:

1. właściciel pliku

2. inni użytkownicy należący do grupy pliku

3. wszyscy inni użytkownicy systemu

Właściciel i grupa przypisywane są plikom podczas ich tworzenia. Zwykle właścicielem jest bieżący użytkownik, a grupą jest grupa katalogu, w którym znajduje się plik, ale może być różnie w zależności od systemu operacyjnego, systemu plików, w którym jest tworzony plik i sposobu jego tworzenia. Możesz zmienić właściciela i grupę pliku przy pomocy poleceń chown i chgrp.

Oprócz wymienionych powyżej trzech zestawów trzech uprawnień prawa pliku zawierają trzy specjalne składniki, działające jedynie w odniesieniu do plików wykonywalnych (programów) oraz, na niektórych systemach, katalogów:

1.
podczas wykonywania ustaw efektywny identyfikator użytkownika procesu na identyfikator właściciela pliku (zwany bitem "setuid", od "set user id"). Nie działa na katalogach.
2.
podczas wykonywania ustaw efektywny identyfikator grupy procesu na identyfikator grupy pliku (zwany bitem "setgid", od "set group id"). Na niektórych systemach, zastosowany do katalogu ustawia dla plików w nim tworzonych grupę danego katalogu, bez względu na grupę użytkownika, który je tworzy.
3.
zachowaj tekst programu na urządzeniu buforującym (swap), tak by ładował się szybciej przy uruchomieniu (zwany "sticky bit", "bitem lepkim" lub "bitem ochrony"). Na niektórych systemach, zastosowany do katalogu zabrania użytkownikom usuwania w nim innych plików poza własnymi; nazywane jest to ustawianiem katalogu "tylko-do-dodawania" ("append-only").

Tryby symboliczne

"Tryby symboliczne" pokazują zmiany praw do plików jako operacje na jednoznakowych symbolach. Pozwalają na zmianę wszystkich lub wybranych części praw plików, opcjonalnie w oparciu o ich uprzednie wartości i być może również o aktualne ustawienie umask (zobacz Umask i ochrona). Formatem trybów symbolicznych jest:

[ugoa...][[+-=][rwxXstugo...]...][,...]

Poniższe sekcje opisują operatory i inne szczegóły dotyczące trybów symbolicznych.

Ustawianie praw dostępu

Podstawowymi operacjami symbolicznymi na prawach pliku są dodawanie, usuwanie i ustawianie prawa, jakie mają pewni użytkownicy do czytania, zapisu i wykonywania pliku. Operacje te mają następujący format:

użytkownicy operacja prawa

Spacje pomiędzy powyższymi trzema częściami pokazano wyłącznie dla czytelności; tryby symboliczne nie mogą zawierać spacji.

Część użytkownicy mówi, jakim użytkownikom zmieniany jest dostęp do pliku. Składa się z jednej lub więcej liter (może też być pusta; zobacz `Umask i ochrona', gdzie znajdziesz opis, co wówczas się dzieje). Kiedy podano więcej niż jedną z tych liter, ich kolejność nie ma znaczenia.

u
(user) użytkownik, który jest właścicielem pliku
g
(group) inni użytkownicy należący do grupy pliku
o
(other) inni użytkownicy systemu;
a
(all) wszyscy użytkownicy; to samo co ugo.

Część operacja mówi, jak zmienić zadanym użytkownikom prawa dostępu do pliku, i jest jednym z następujących symboli:

+
dodaje prawa do dowolnych praw pliku, jakie mają już użytkownicy. Następuje uzupełnienie już posiadanych praw o podane.
-
usuwa prawa spośród dowolnych praw pliku, jakie mają już użytkownicy.
=
ustawia podane prawa jako jedyne prawa pliku, jakie powinni mieć do niego użytkownicy. Usuwa ewentualne uprzednie prawa.

Część prawa mówi, jaki rodzaj dostępu do pliku powinien zostać zmieniony; jest to zero lub więcej poniższych liter. tak jak w przypadku części użytkownicy, kolejność liter, jeśli jest więcej niż jedna, nie ma znaczenia. Pominięcie części prawa przydatne jest tylko z operacją `=', gdzie nie daje ona użytkownikom żadnego dostępu do pliku.

r
prawo do odczytu (read) pliku
w
prawo do zapisu (write) pliku
x
prawo do wykonywania (execution) pliku

Na przykład, aby odebrać każdemu prawo do odczytu i zapisu pliku, ale nie do jego wykonywania, posłuż się:

    a=rw
Usunięcie prawa zapisu dla wszystkich użytkowników innych niż właściciel pliku można zrealizować przez:
    go-w
Powyższe polecenie nie zmieni dostępu, jaki ma do pliku jego właściciel, nie nie ma też wpływu na to, czy inni użytkownicy mogą czytać bądź wykonywać plik.

Chcąc nie dać nikomu poza właścicielem pliku żadnych praw do niego, możesz posłużyć się podanym poniżej trybem. Inni użytkownicy mogą nadal usunąć plik, jeżeli mają prawo zapisu w katalogu, w którym się on znajduje.

    go=
Innym sposobem określenia tego samego jest:
    og-rxw

Kopiowanie istniejących praw

Możesz ustalić prawa pliku w oparciu o jego prawa już istniejące. By to zrobić wystarczy zamiast używania `r', `w' czy `x' po operatorze użyć liter `u', `g' lub `o'. Na przykład tryb
    o+g
dodaje prawa dla użytkowników, którzy należą do grupy pliku do praw, jakie posiadają inni użytkownicy pliku. Zatem, jeśli plik początkowo miał tryb 644 (`rw-rw-r--'), to powyższe dopisanie zmieni mu tryb na 666 (`rw-rw-rw-'). Jeżeli tryb początkowo miał tryb 741 (`rwxr----x'), to nastąpi zmiana na tryb 745 (`rwxr--r-x'). Operacje `-' i `=' działają analogicznie.

Zmiana praw specjalnych

Oprócz zmiany praw odczytu, zapisu i wykonywania pliku, możesz zmienić także jego prawa specjalne. W podsekcji `Struktura praw pliku' znajdziesz ich krótki opis.

W celu zmiany prawa pliku ustawiającego identyfikator użytkownika przy wykonaniu posłuż się literą u w części użytkownicy trybu symbolicznego oraz s w części prawa.

W celu zmiany prawa pliku ustawiającego identyfikator grupy przy wykonaniu posłuż się literą g w części użytkownicy trybu symbolicznego oraz s w części prawa.

W celu zmiany prawa pliku decydującego o pozostawieniu tekstu programu na urządzeniu wymiany (swap), posłuż się literą o w części użytkownicy trybu symbolicznego oraz t w części prawa.

Na przykład, chcąc dodać prawo ustawiania ID użytkownika dla programu, możesz użyć trybu

    u+s
Usunąć mu zarówno prawo ustawiania ID użytkownika jak i grupy, możesz trybem:
    ug-s
Użycie trybu
    o+t
spowoduje z kolei zachowanie programu na urządzeniu wymiany.

Pamiętaj, że prawa specjalne działają tylko w odniesieniu do plików wykonywalnych, plus, na niektórych systemach, katalogach (w tym przypadku mają inne znaczenie; patrz `Struktura praw pliku'). Użycie `a' w części użytkownicy trybu symbolicznego nie powoduje zmian praw specjalnych; zatem,

    a+s
nic nie robi. Musisz użyć jawnie `u', `g' lub `o' by zmienić prawa specjalne. Również kombinacje `u+t', `g+t' i `o+s' nic nie robią.

Operator `=' niezbyt się przydaje przy prawach specjalnych; na przykład, tryb:

    o=t
spowoduje zachowanie pliku na urządzeniu wymiany, ale równocześnie usunie wszystkie prawa odczytu, zapisu i wykonania, które mogli mieć wcześniej użytkownicy nie należący do grupy pliku.

Warunkowa wykonywalność

Istnieje jeszcze jeden specjalny typ praw symbolicznych; jeśli użyjesz X zamiast x, to prawo wykonywania jest zmieniane tylko wtedy, gdy plik ma już prawo wykonywania lub jest to katalog. Zmienia on prawa wykonywania dla katalogów nawet, jeśli uprzednio nie miały ustawionego żadnego prawa wykonywania.

Na przykład, ten tryb:

    a+X
daje wszystkim użytkownikom prawo wykonywania plików (lub przeszukiwania katalogów) jeśli ktoś już wcześniej je posiadał.

Dokonywanie wielu zmian

Format trybów symbolicznych jest faktycznie bardziej złożony, niż opisano to powyżej (zobacz `Ustawianie praw dostępu'). Umożliwia on dwa sposoby dokonywania wielu zmian w prawach plików.

Sposób pierwszy polega na wielokrotnym określeniu części operacja i prawo po części użytkownicy trybu symbolicznego.

Na przykład, tryb:

    og+rX-w
daje użytkownikom innym niż właściciel pliku prawo odczytu oraz, jeśli jest to katalog lub ktoś już ma prawo wykonywania tego pliku, daje im prawo wykonywania; równocześnie odbiera im prawo zapisu tego pliku. Nie ma to wpływu na prawa, jakie posiada do niego właściciel pliku. Powyższy tryb jest równoważnikiem dwu trybów:
    og+rX
    og-w

Drugi sposób dokonywania wielu zmian polega na określeniu więcej niż jednego prostego trybu symbolicznego, oddzielonego od poprzedniego przecinkiem. Na przykład, ten tryb:

    a+r,go-w
nadaje każdemu prawo do odczytu pliku i usuwa prawo zapisu wszystkim użytkownikom oprócz jego właściciela. Inny przykład:
    u=rwx,g=rx,o=
ustawia wprost wszystkie nie-specjalne prawa pliku. (Nie daje użytkownikom spoza grupy w ogóle żadnych praw do pliku.)

Opisane dwie metody mogą być ze sobą łączone. Ten tryb

    a+r,g+x-w
daje wszystkim użytkownikom prawo odczytu pliku, użytkownikom należącym do grupy pliku również prawo jego wykonywania, ale bez prawa zapisu. Powyższy tryb można zapisać na kilka różnych sposobów; innym sposobem jest:
    u+r,g+rx,o+r,g-w

Umask i ochrona

Jeśli w trybie symbolicznym pominięto część określającą użytkowników, to domyślnie jest ona przyjmowana za `a' (dotyczy wszystkich użytkowników), z wyjątkiem tego, że prawa ustawione w zmiennej systemowej umask nie są zmieniane. Wartość umask można zmienić posługując się poleceniem umask. Wartość domyślna tej zmiennej jest różna dla różnych systemów.

Pominięcie części użytkownicy trybu symbolicznego nie jest na ogół użyteczne przy operacjach innych niż `+'. Przydaje się przy `+', gdyż pozwala na użycie `umask' jako łatwo dostosowywalnej ochrony przeciw rozdawaniu większych praw do plików niż faktycznie zamierzasz.

Na przykład, jeśli `umask' ma wartość 2, co usuwa prawa zapisu dla użytkowników nie należących do grupy pliku, to tryb:

    +w
dodaje prawo zapisu do pliku jego właścicielowi i innym użytkownikom należącym do grupy pliku, ale nie pozostałym użytkownikom. Inaczej jest w przypadku trybu:
    a+w
ignoruje on `umask' i daje prawo zapisu do pliku wszystkim użytkownikom.

Tryby liczbowe

Prawa pliku są wewnętrznie zapisywane jako liczby całkowite. Zamiast podawać tryb symbolicznie, możesz podać liczbę ósemkową (o podstawie układu równej 8), odpowiadającą wewnętrznej reprezentacji nowego trybu. Liczba ta jest zawsze interpretowana jako ósemkowa; nie musisz dodawać wiodącego 0, tak jak w C. Tryb 0055 jest tym samym, co tryb 55.

Tryb liczbowy jest zwykle krótszy w zapisie niż odpowiadający mu tryb symboliczny, ale jego ograniczeniem jest to, że nie możesz przy jego określaniu korzystać z poprzednich praw pliku; możesz jedynie ustawiać je bezwzględnie.

Na większości systemów prawa nadane użytkownikowi, innym użytkownikom grupy pliku i pozostałym użytkownikom spoza grupy są przechowywane jako trójki bitów, każda przedstawiana przez jedną cyfrę ósemkową. Układ bitów, poczynając od najmniejszej wartości, pokazano poniżej:

Wartość trybu  Odpowiadające mu prawo
               Pozostali użytkownicy spoza grupy pliku:
        1      wykonanie (x)
        2      zapis (w)
        4      odczyt (r)
               Inni użytkownicy należący do grupy pliku:
       10      wykonanie (x)
       20      zapis (w)
       40      odczyt (r)
               Właściciel pliku:
      100      wykonanie (x)
      200      zapis (w)
      400      odczyt (r)
               Prawa specjalne:
     1000      zachowaj obraz na urządzeniu wymiany
     2000      ustaw ID grupy przy wykonaniu
     4000      ustaw ID użytkownika przy wykonaniu

Na przykład, tryb liczbowy 4755 odpowiada trybowi symbolicznemu `u=rwxs,go=rx', zaś tryb 664 trybowi `ug=rw,o=r'. Numeryczny tryb 0 odpowiada symbolicznemu `ugo='.

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.