Przeglądanie plików, które nie mieszczą się na jednym ekranie: more
i less
. W niektórych systemach można spotkać jeszcze bardziej zaawansowany program: most
Uwaga: UNIX powstawał w dość specyficznej i zamkniętej kulturze hakerów. Gry słowne (anglojęzyczne) są tu często spotykane Więcej informacji na temat specyfiki tej kultury można znaleźć np. w The Jargon File http://www.catb.org/jargon/html/ (to nie jest część wymaganego materiału przedmiotu. Proszę nie czytać w trakcie zajęć).
Ta grupa programów (less
, more
, …), jest nazywana pagerami – programami do podziału tekstu na “strony”. Niektóre programy używają ulubionego pagera użytkownika ustawionego w zmiennej PAGER.
Program more:
$ more /etc/passwd # za pomocą spacji można przewinąć do kolejnej strony tekstu $ more /etc/passwd /etc/group # więcej plików Program more kończy się, gdy dojdzie do końca pliku (plików)
less – ulepszona wersja more (jak sama nazwa wskazuje) – potrafi przewijać plik w górę i w dół, przeszukiwać. $ less /etc/passwd $ less /etc/passwd /etc/group # więcej plików.
(Po raz kolejny) Klawisze w less:
q
– zamknięcie/słowo<enter>
– wyszukiwanie słowan
– wyszukiwanie kolejnego wystąpieniaN
– wyszukiwanie poprzedniego wystąpienia:n
– następny plik:p
– poprzedni plikZmienna środowiskowa PAGER
$ PAGER=more
$ export PAGER # ustawienie i wyeksportowanie PAGER
$ man man # teraz manual używa programu more do podziału na strony
$ export PAGER=less # skrócona wersja ustawienia i wyeksportowania zmiennej
$ man man # a teraz ponownie używa less
Programy-filtry, poza byciem częścią potoków (pipe), mogą działać bezpośrednio na plikach. W większości można podać kilka plików jako argumenty.
$ sort /etc/passwd /etc/group # wynikiem są posortowane linie z obu plików
$ wc /etc/passwd /etc/group # oddzielne statystyk dla obu plików
$ tail /etc/passwd /etc/group # końce obu plików
$ head /etc/passwd /etc/group # początki obu plików
grep
: Wypisuje linie z plików zawierające dane słowo Uwaga na kolejność argumentów – najpierw szukane słowo, potem pliki
$ grep oo /etc/passwd /etc/group # linie z obu plików zawierające oo
cut
– podstawowe opcje
-f
– numer lub numery kolumn do wyświetlenia-d:
– podany znak (tu dwukropek) jest separatorem kolumn$ cut -f1 -d: /etc/group /etc/passwd # pierwsza kolumna z obu plików
tail
ma użyteczną funkcję dla plików do których dopisują inne programy. tail -f wyświetli koniec pliku, a następnie będzie czekał na kolejne linie, które pojawią się w pliku i będzie je na bieżąco wypisywać.
$ tail -f /var/log/dmesg
date
– wyświetla datę, domyślnie bieżącą:
$ date
jako parametr rozpoczynający się +
można podać format daty:
$ date +%Y-%m-%d,%H:%M
Można też wyświetlić czas UTC (GMT+0)
$ date -u
Inną opcją jest podanie innej daty/czasu niż bieżące – date
może posłużyć do formatowania daty:
$ date -d01/02/1970 # Uwaga na format wejściowej daty
Przeczytać w podręczniku date informacje o formacie daty i wyświetlić datę w formacie dzień tygodnia, dzień-miesiąc(słownie)-rok(2 cyfry), godzina:minuty
Przypomnienie: spacja jest znakiem specjalnie interpretowanym przez shell
cal
– wyświetla kalendarz na bieżący mieciąc
$ cal
Znaleźć w podręczniku informacja jak wyświetlić kalendarz na 3 miesiące i na cały rok. Wyświetlić kalendarz na cały 1970 rok.
uname – informacje o systemie operacyjnym Wszystkie dostępne informacje są wymienione w podręczniku. Przykłady:
$ uname
$ uname -s # nazwa jądra systemu
$ uname -o # nazwa systemu
$ uname -r # wersja jądra
$ uname -a # Wszystkie informacje
free – informacje o dostępnej pamięci operacyjnej
$ free # precyzyjne informacje, ale niezbyt czytelne dla człowieka
$ free -h # informacje czytelne dla człowieka
lsusb, lspci, lscpu – nie są częścią POSIX, wyświetlają informacje o różnych urządzeniach systemu podłączonych przez USB, PCI oraz o procesorach w większości systemów bazujących na jądrze Linux.
$ lsusb
$ lspci
$ lscpu
To ćwiczenie proszę również wykonać na serwerze ssh.mini.pw.edu.pl
id
– informacje podstawowe o użytkownikach i grupach. Użytkownicy są zorganizowani w grupy – więcej na ten temat na późniejszych zajęciach.
$ id # nazwa i identyfikator numeryczny bieżącego użytkownika i grup do których należy.
$ id karwowskij # informacje o użytkowniku karwowskij
$ id 2864 # informacje o użytkowniku o numerze 2864
$ id -Gn karwowskij # informacje o grupach, do których należy użytkownik
$ id -G karwowskij # .. o numerach grup
who
– informacja o użytkownikach zalogowanych na danej maszynie (zwrócić uwagę na innych użytkowników na lokalnej stacji roboczej i zdalnym serwerze).
$ who # informacje o wszystkich
$ who am I # informacje o bieżącej sesji (wg. POSIX)
$ who mom likes # rozszerzenie GNU ;)
mesg
i write
– prosta komunikacja między użytkownikami na tej samej maszynie.
mesg
ustawia czy wyświetlać komunikaty od innych:
$ mesg y # włącz wyświetlanie
$ mesg n # wyłącz wyświetlanie
$ mesg # wyświetl bieżące ustawienie
write
wysyła komunikat do użytkownika podanego jako argument. Write czyta komunikaty ze standardowego wejścia. Aby wprowadzić znak końca pliku należy wcisnąć Ctrl-D
w pustej linii.
Sesja użytkownika zawsze związana jest z jakimś urządzeniem terminala (być może wirtualnym, np. stworzonym przez program emulatora terminala). Użytkownik może być zalogowany w wielu terminalach na raz. (Można np. otworzyć dwie sesje ssh
do tego samego komputera. Polecenie who
przy każdym wpisie podaje urządzenie terminala.
$ write user # rozpoczyna pisanie do uzytkownika user (bez określenia który terminal)
$ write user pts/21 # rozpoczyna pisanie do user zalogowanego na pts/21
Uwaga: write nie będzie działać pomiędzy maszynami, np. stacjami roboczymi. Do ćwiczenia należy dobrać się w pary (lub większe grupy) i zalogować się na serwer ssh.mini.pw.edu.pl
Po zalogowaniu włączyć możliwość przesyłania komunikatów
$ mesg y
$ mesg # upewnić się, że opcja jest włączona
Poczekać na drugą osobę z pary, upewnić się, że jest zalogowana:
$ who
Jeśli aktywnych sesji jest dużo, można użyć grep
$ who | grep <login>
Rozpocząć wysyłanie komunikatów do wybranej osoby. Program write czyta komunikaty z stdin. Wysyłanie zakończyć wpisując Ctrl-D w pustej linii.
$ write <login>
$ # albo:
$ write <login> <terminal>
$ # jeśli użytkownik jest zalogowany na kilku terminalach na raz.
Następnie: wykonać próby pisania z
$ mesg n
Czy piszący wie, że jego komunikaty nie docierają do drugiej strony?
Zamknąć połączenie sieciowe.
script – zapisywanie stenogramu sesji terminala do pliku (np. w celu zrobienia pewnej formy notatek z zajęć)
$ script plik.txt # uruchamia nowy shell z logowaniem do pliku plik.txt
$ ls # kilka poleceń przykładowej sesji
$ cat /etc/passwd
$ exit # kończy powłokę uruchomioną przez script
$ less plik # przeglądanie zapisu sesji
Spostrzeżenie: less
domyślnie wyświetla kody sterujące zabezpieczając je przed interpretowaniem (np. kody ustawiające kolory). Tę funkcję less można wyłączyć:
$ less -R plik
Ważne!! script uruchamia nową powłokę, zaobserwować, że:
$ ZMIENNA=test # zmienna shella, NIE EKSPORTOWANA
$ echo $ZMIENNA
$ script plik
$ echo $ZMIENNA # nie ma wartości, bo to nowy shell
$ ZM2=test2
$ echo $ZM2
$ exit
$ echo $ZMIENNA # ponownie jesteśmy w starym shellu
$ echo $ZM2 # zmienna ZM2 istniała tylko w wewnętrznym shellu
Uwaga: script
nie radzi sobie z aplikacjami pełnoekranowymi, na przykład less
(więc także man
) lub nano
.
screen
– narzędzie GNU. Uruchamia wirtualny terminal, który można odłączyć od rzeczywistego i podłączyć potem. Szczególnie przydatny przy korzystaniu ze zdalnych serwerów sieciowych. Pozwala na rozpoczęcie pracy nad jakimś zadaniem, przerwanie, rozłączenie się od serwera, ponowne podłączenie i przywrócenie przerwanej sesji. Oczywiście przez cały czas serwer musi działać, przy wyłączeniu/restarcie komputera wszystkie uruchomione programy giną. W pewnym sensie screen jest odpowiednikiem minimalizowania/przełączania okien w trybie graficznym.
screen
nie wchodzi w zakres materiału wymaganego na teście.
Przykład użycia
$ screen # uruchamia wirtualny terminal i powłokę
$ nano plik.txt # rozpocząć edycję pliku
Nie zamykać edytora, odpiąć wirtualny terminal od bieżącego: Ctrl-A Ctrl-D
(najpierw wcisnąć Ctrl-A
, puścić, potem Ctrl-D
).
Zamknąć okno emulatora terminala. Otworzyć nowe okno emulatora terminala i przywrócić sesję: $ screen -r Dokończyć edycję, zakończyć sesję
Screen zawiera wiele opcji usprawniających pracę zaawansowanym użytkownikom, na przykład:
Więcej informacji w dokumentacji programu screen.