script to program służący do logowania sesji terminala do pliku.
Gdy uruchomimy program, uruchamiana jest konsola, w której możemy normalnie pracować. Jednak wszystko to co widzimy i piszemy w konsoli, zapisywane jest do pliku. Dzięki temu możemy zarchiwizować sesję. Program ten mimo swojej prostoty ma jednak kilka właściwości, które warto omówić.
Użytkowanie:
script [-a] [-c KOMENDA] [-f] [-q] [-t] [plik]
| -a | Plik nie jest nadpisywany, zamiast tego dane są dodawane do pliku. |
| -c KOMENDA | Zamiast domyślnego shella uruchamiana jest podana komenda i jej przebieg śledzony. |
| -f | Opcja powoduje, że dane do pliku są dopisywane zawsze, gdy jest to tylko możliwe (standardowo dane są buforowane i dopisywane raz na jakiś czas). |
| -q | Powoduje, że nie są wyświetlane komunikaty programu. |
| -t | Sprawia, że na stderr (standardowy strumień błędu) wysyłane są komunikaty z związane przerwami między przychodzeniem kolejnych danych (więcej informacji: man script). |
Co jest zapisywane?
script zapisuje do pliku wszystko co znajdzie się na standardowym wejściu/wyjściu i wyjściu błędów. Zapisywane są wszystkie znaki, nie tylko te, które są czytelne dla człowieka. Oznacza to, że gdy otworzymy plik utworzony przez skrypt za pomocą swojego ulubionego edytora, ujrzymy tam między innymi takie znaki jak “back space”, “clear screen”. Może być to denerwujące, lecz jest w pewnych przypadkach bardzo ważne. Jeśli chcemy obejrzeć zawartość pliku, najlepiej wyświetlić go za pomocą polecenia “cat”. W takim przypadku zawartość będzie już sformatowana.
Obserwowanie pracy na innej konsoli
Jednym z ciekawszych efektów jakie możemy uzyskać za pomocą script, jest obserwowanie pracy wykonywanej na innej konsoli. Jest to bardzo przydatne, gdy pozwalasz komuś zdalnie manipulować twoim komputerem, a przy okazji sam byś chciał się czegoś nauczyć, więc przyglądasz się temu co robi tamta osoba. Najlepsze w tym wszystkim jest to, że działa to po prawnie nie tylko ze zwykłym tekstem, ale także z takimi bibliotekami jak ncurses.
Przykład
Najpierw musimy utworzyć plik fifo, będzie on nam służył za plik wymiany danych między konsolami:
mkfifo /tmp/nasze_fifo
Teraz na shellu, z którego będą wydawane polecenia, uruchamiamy script:
script -f /tmp/nasze_fifo
Opcja “-f” została zastosowana, by dane były przesyłane na bieżąco, a nie buforowane. Na shellu “obserwatorze” uruchamiamy komendę:
cat /tmp/nasze_fifo
Na obu shellach powinniśmy od teraz widzieć to samo, jednak polecenia będziemy mogli wykonywać tylko z jednego. Nie krępujmy się, wypróbować takie programy jam mc czy irssi. To naprawdę działa.
irssi:
Przykład - kilku obserwatorów
Jeśli chcemy obserwować pracę z więcej niż jednej konsoli, sprawa się trochę komplikuje, z pomocą przychodzi jednak tee, które dzieli sygnał:
mkfifo /tmp/nasze_fifo0 mkfifo /tmp/nasze_fifo1 mkfifo /tmp/nasze_fifo2
Obserwowany terminal:
script -f /tmp/nasze_fifo0
Obserwator nr 1:
cat /tmp/nasze_fifo0 | tee /tmp/nasze_fifo1
Obserwator nr 2:
cat /tmp/nasze_fifo1 | tee /tmp/nasze_fifo2
Obserwator nr 3:
cat /tmp/nasze_fifo2
mc: