Użyteczne programy

Przeglądanie plików

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:

Zmienna ś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

Filtry

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

$ 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 

Data i czas

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.

Informacje systemowe

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

Informacje o użytkownikach

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 ;)

Prosta komunikacja między użytkownikami używającymi tej samej maszyny (na raz)

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.

Użyteczne narzędzia

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.