Praca z shell
Kiedy bootujemy SO Linux, jesteśmy zazwyczaj kierowani do GUI, który prowadzi nas przez prcoes logowania i idzie za interakciami z SO. Chociaż GUI stał się bardzo ważny i dobry na użytkownika, używanie jego nie jest jedynym sposobem komunikowania się z naszym SO. Można też użyć tekstowej komunikacji jak interpretator wiersza polecenia zwany zazwyczaj shell, gdzie można wprowadzać polecenia. Ponieważ Linux dostarcza opcji dla startowania okien shell z GUI, można łatwo użyć obu metod.
W administracji aplikacje oparte na shell są zwłaszcza ważne dla kontrolowania komputerów przez wolne linki sieciowe lub jeśli chcemy wykonywać zadania jako root w wierszu polecenia. Dla Linuxa “newbies” to mogłoby być raczej nietypowe, aby wprowadzać polecenia w shell, ale shell nie jest tylko dla administratorów. Użycie shell jest często najszybszym i najłatwiejszym sposobem, aby wykonać pewne szczegołowe zadania. Jest klika shell dla UNIX lub Linux. Domyślnym shell dla SLES jest Bash (GNU Bourne-Again Shell).
Kilka podstaw, które trzeba wiedzieć dla shell:
– jak wprowadzać polecenia
– struktura katalogowa Linux
– jak pracować z plikami i katalogami
– jak używać podstawowych funkcji
– pojęcie użytkownika i praw dostepu w Linux
– wprowadzenie do edytora vi
Startowanie Bash Shell
W Linux można używać równocześnie wiersza polecenia i GUI i łatwo przełączać między nimi. Zachęta w wierszu polecenia pokazuje zazwyczaj: nasz login (tomza), nazwę hosta naszego komputera (knox) i bieżącą ściezkę (np. katalog home wskazny przez symbol tyldy ~).
tomza@knox:~>
Kiedy jesteśmy zalogowani na zdalnym komputerze ta informacja zawsze wskazuje nam, na jakim SO bieżąco pracujemy.
Wprowadzanie poleceń
Polecenie składa się z kilku elementów. Pierwszym jest bieżące polecenie a za nim parametry lub opcje. Można wprowadzić polecenie i je edytowac przez użycie ← , → , <— , Del i Space . Można też dodać opcje lub poprawiać błędy przy wpisywaniu.
Ważne:
Shell nie jest rozmowny, bo w przeciwieństwie do GUI to zazwyczaj nie dostarcza potwierdzenai wiadomości, kiedy polecenia zostały wykonane. Wiadomości pojawiają się przy błędach i problemach.
Polecenie ls
W Linux nie ma rozszerzeń plików i czasami trudno rozróżnić między plikami i folderami w danych wyjściowych ls. Domyslnie kolory dostarczają wskazówki: katalogi- niebieskie, pliki- czarne.
Opcje są oddzielone od poelcenie spacją i poprzedzone łącznikiem pisarskim (hyphen), czyli minusem.
Polecenie ls –l
Na lewo od każdej nazwy obiektu jest informacja o obiekcie w kliku kolumnach:
I- typ pliku lub obiektu (d- katalog, –plik)
II-X- prawa dostepu uzytkownika
XI- rozmiar pliku w bajtach
XII- dat i czas ostatniej zmiany w pliku jest wyświetlana
XIII- nazwa obiektu
Aby zobaczyć jeszcze więcej stosujemy ls –la. Pojawiają się pliki ukryte z kropką na przedzie.
Pomoc
polecenie –help
ls –help
Struktura katalogów w Linux
Ponieważ shell nie daje graficznego przeglądu katalogów i plików jak widok drzewa w menadżerze plików, jest uzyteczne mieć wiedzę o domyślnej strukturze katalogów w SO Linux. Można myśleć o katalogach jako elektronicznych folderach, w których pliki, foldery i podkatalogi są gromadzone. Katalogiem na szczycie jest /root. Do tego wszystkie inne katalogi mają dostęp. Katalog /home zawiera katalogi, w którym poszczególni uzytkownicy mogą gromadzić swoje osobiste pliki.
Uwaga: Katalog /home w środowisku sieciowym
jeśli pracujemy w środowisku sieciowym, nasz katalog /home może nie być nazwany /home. Może być mapowany do jakiegokolwiek katalogu w systemie plików.
/- katalog root
/home- osobiste katalogi użytkowników
/dev- pliki urządzeń, które reprezentują składniki hardware
/etc- ważne pliki dla konfiguracji SO
/etc/init.d- skrypty bootowania
/bin, /sbin- programy potrzebne na początku procesu bootowania (/bin) i dla administratora (/sbin)
/usr, /usr/local- wszystkie programy aplikacji i lokalne zależne od dystrybucji rozszerzenia (/usr/local)
/usr/bin, /usr/sbin- Ogólnie dostępne programy (/usr/bin) i zarezerwowane dla administratora SO ( /usr/sbin)
/usr/share/doc- różne pliki dokumentacyjne
/tmp, /var/tmp- pliki tymczasowe (nie zapisujemy plików w tym katalogu, jesli ich nie potrzebujemy)
/opt- opcjonale oprogramowanie, większe pakiety składników dodatkowych (jak KDE, GNOME i Netscape)
/proc- system plików procesu
/sys- system plików SO, gdzie wszystkie informacje o urządzeniach sązbierane dla kernela
/var/log- system plików logowania
Praca z katalogami i plikami
Aby zaadresować pewien plik lub katalog, musimy okreslić ściezkę prowadzącą do tego obiektu. Dwa spsoby określania ścieżki:
– absolutna- cała ścieżka od katalogu root do danego pliku (zawsze zaczyna się od slasha)
– względna- częściowa ścieżka z bieżącego katalogu do danego pliku (nie zaczyna się od slasha.
Przykład dla polecenia kopiowania pliku z katalogu /home do podkatalogu /tmp:
1/ Z naszego katalogu /home tworzymy podkatalog w /tmp:
a/ Jeśli bieżącym katalogiem nie jest /home, wprowadzamy
cd ~
aby przełączyć do /home (możemy tak zrobić z każdej lokalizacji).
b/ W katalogu /home wprowadzamy
mkdir /tmp/test
To polecenie tworzy nowy katalog zw. test i katalogu /tmp (musimy użyć ścieżki absolutnej).
c/ Aby sprawdzić, co się stało, teraz wprowadzamy
ls -l /tmp
Nowy katalog test pownien pojawić się w wylistowanej zawartości katalogu /tmp.
2/ teraz tworzymy nowy plik w katalogu /home i kopiujemy go do katalogu /tmp/test (ścieżka względna)
a/ wprowadzamy
touch myfile.txt
Jest utworzony nowy pusty plik zw. myfile.txt w bieżącym katalogu.
b/ Sprawdzamy go przez wprowadzenie
ls –l
Nowy plik powinien pojawić się wna liście zawartości.
c/ Wprowadzamy
cp myfile.txt ../tmp/test
To kopiuje plik myfile.txt do katalogu /tmp/test.
d/ Sprawdzamy to przez wprowadzenie
ls -l /tmp/test
Plik myfile.txt pownien pojawić na liście zawartości dla /tmp/test.
Aby wylistować zawartość katalogów /home innych uzytkowników, wprowadzamy:
ls ~username
ls ~tomasz
wylistuje zawartosć katalogu /home dla użytkownika tomasz.
Uwaga: Operowanie spacjami w nazwach plików i katalogów
Jeśli nazwa pliku zawiera spacje, albo używamy backslash (\) przed spacją albo zamykamy nazwę pliku w pojedynczym lub podwójnym cudzysłowiu. Inaczej Bash interpretuje nazwę pliku My Documents jako nazwy dwóch plików lub katalogów. Różnica między zastosowanym cudzysłowiem jest taka, że rozszerzenie zmiennej jest w podwójnym cudzysłowiu. Pojedynczy cudzysłów zapewnia, że shell widzi ciąg w cudzysłowiu dosłownie.
Użyteczne cechy Shell
Wprowadzanie poleceń w Bash może zawierać wiele wprowadzania. Bash ułatwia pracę i zapisuje dużo wprowadzeń.
Historia i uzupełnienie
Domyśle Bash pamięta polecenia, które wprowadziliśmy. To jest historia. Poruszamy się klawiszami strzałek. Ctrl+R przeszukuje hisotrię.
Można edytować wybrane polecenie np. zmieniając nazwę pliku przed wykonaniem tego.
Można napisać kilka pierwszych liter →|, czyli tabulator. Drugi raz tabulator- wyświetla wiel przykładów wypisanych liter.
Używanie znaków globalnych (wild cards):
?
*
[set]- dopasowuje jeden z wymienionych znaków
[:class:]- okreslamy charakter klasy, gdzie klasa jest jednym z alnum, alpha, ascii itp.
! lub ^- na początku grupy ([!set]) dopasowuje każdy inny jeden znak niż tu wymienione
Zakładając, że nasz katalog test zawiera pliki Testfile, Testfile1, Testfile2 i datafile.
Polecenie Testfile? listuje Testfile1 i Testfile2.
Polecenie ls Test* listuje też Testfile.
Polecenie ls *fil* pokazuje wszystkie pliki.
Użycie znaków globalnych do zaadresowania plików, których ostatnim znakiem jest liczba:
ls Testfile[1-9] lub uzywajac klasy ls Testfile[[:digit:]].
Najbardziej globalnym znakiem jest gwiazdka.
Przeglądanie plików z Less i More
Linux zawiera dawa małe programy dla przeglądania plików tekstowych bezpośrednio w shell: less i more. Niż uruchomienie edytora dla przeczytania pliku jak Readme.txt po prostu wprowadzamy
less Readme.txt
aby wyświetlić tekst w oknie konsoli.
spacja- przewija do dołu o jedną stronę
Page Up- idziemy do przodu w tekście
Page Down- idziemy do tyłu w tekście
Q- wyjście
Zmiast less można też wybrać starszy program more. Jest mniej wygodny, bo nie pozwala nam przewinąć do tyłu.
program lessdostał swoją nazwę z odczuwania, że mniej (less) jest więcej (more) i może też być użyte do przeglądnięcia danych wyjściowych poleceń w dogodny sposób.
Przekierowanie i potoki (pipes)
stdin0 stdout1
=================> polecenie ===============>
dane wejściowe | dane wyjściowe
inne polecenie | inne polecenie
|
stderr2
zakończenie błędem
dane wejściowe- może być klawiatura, ale może być też plik np. grep lub inne poelcenie np. pipe
dane wyjściowe- moniotr (konsola)
przekierowanie wyjścia przy pomocy nawiasu zamkniętego (>), jeśli plik nie istnieje, jest tworzony, a jak istnieje- jest nadpisywany
> nazwa_pliku- przekierowanie poleceń
>> nazwa_pliku- przekierowanie poleceń
w skrypcie jest to samo, co w linii poleceń- tak samo działa
repquota -qug > /nazwa_pliku- przekierowanie do pliku danych wyjściowych (a nie na monitor) np.
repquota -aug > /tmp/quota.log.- przekierowanie danych wyjściowych na plik /tmp/quota.log.
mail. adres odbioru- wysyłanie maili z linii polecenia
mail root@do 2 dig.
kończenie maila- w wolnej lini stawiamy kropkę (znak, że tu jest koniec maila)
.
wtedy warcamy do linii poleceń
W Windows tego nie ma
mail tomasz@komp.pl < /tmp/quota log
przekierowanie wejścia polecenia z pliku (pobierz plik)
ten plik trzeba spreparować (dodać kropkę) i można wysyłać
>- zamienia plik na inny nowy (nadpisuje)
>>- zawartość dopisuje na końcu pliku np. dodaje kropkę, której brakuje, aby zakończyć mail
echo- wypisuje to, co mamy w cudzysłowiu
echo „.” >> /tmp/quota.log
sprawdzamy, czy kropka została dodana
Jeśli odpalamy z cron (Zadania Zaplanowane w Windows) tu nie ma zmiennej PATH
/bin/echo „.” >> /tmp/quota.log
/bin/mail tomasz@komp.pl < /tmp/quota.log
raz na dobę robimy update bazy danych plików
whereis mail– w obrębie ścieżki znajduje się wszystkie pliki do poleceń mail, czyli pokazuje całą ścieżkę
drugi sposób przekierowania
mail -s „raport” -a /tmp/quota.log
trzeci sposób przekierowania
cat – wyświetala zawartość pliku
cat /tmp/quota.log | mail tomasz@komp.pl
5 routerów- na każdym 8 poleceń, co pochłania dużo czasu, dlatego automatyzujemy, aby przychodziły one do administratora
Normalnie standardowe dane wyjściowe w shell są na naszym ekranie lub w naszej konsoli i standardowe dane wejściowe są z klawiatury. Jednak shell daje funkcje, dzięki którym możemy przekierować dane wejściowe lub wyjściowe do innego obiektu, takiego jak plik lub inne polecenie.
Z pomocą symboli >i <można wysłać dane wyjściowe z polecenia do pliku (przekierowanie danych wyjściowych) lub użyć plik jako dane wejściowe dla polecenia (przeadresowanie danych wejściowych). Np. jeśli chcemy zapisać dane wyjściowe polecenia takiego jak lsdo pliku, wprowadzamy
ls -l > file.txt
To tworzy plik zw. file.txt, który zawiera listę zawartości naszego bieżącego katalogu jako generowanego przez polecenie ls. Jednak jeśli plik zw. file.txt już istnieje, to polecenie nadpisze istniejący plik. Aby tego uniknąć wpisujemy >>. Wprowadzając
ls –l>> file.txt
po prostu dodajemy dane wyjściowe polecenia ls do już istniejącego pliku zw. file.txt. Jeśli plik nie istnieje, jest tworzony.
Czasami jest użyteczne użyć plik jako dane wejściowe dla polecenia. Np. z poleceniem
tr
można zastąpić znaki przekierowane z pliku i zapisać rezultat do standardowych danych wyjściowych naszego ekranu. Np. chcemy zastąpić wszystkie znaki t w pliku file.txt z przykładu powyżej na x wydrukować to na ekranie. Robimy tak przez wprowadzenie:
tr t x < file.txt
Tak jak standardowe dane wyjściowe standardowe błędne dane wyjściowe są wysyłane do konsoli. Aby przekierować standardowe błędne dane wyjściowe do pliku zw. errors, dołączamy 2> errors do odpowiedniego polecenia. Zarówno standardowe dane wyjściowe i standardowe błędne dane wyjściowe są zapisywane do jednego pliku zw. alloutput jeśli dołączymy >& alloutput.
Używając potoku jest też sortowanie przekierowania, chociaż użycie potoku nie jest ograniczone do plików. Z potokiem można łączyć klika poleceń, używając danych wyjściowych jednego polecenia jako dane wejściowe dla następnego polecenia. Np. aby przejrzeć zawartość lub naszego bieżącego katalogu w less, wprowadzamy
ls | less
To ma tylko sens, kiedy normalne dane wyjściowe z ls byłyby zbyt długie. Np. jeśli przeglądamy zawartość katalogu dev z ls/dev, widzimy tylko małą porcję w oknie. Widzimy wylistowaną całość z poleceniem:
ls /dev | less
Kompresja archiwów i danych
Jeśli mamy duzo plików i katalogów możemy kompresować archiwa i dane. Jeśli chcemy spakować cały katalog test do jednego pliku, którego zapisalismy w pamięci USB jako kopię backup lub wysłać przez e-mail. Aby to zrobić używamy polecenia tar (dla archiwera taśmowego). Z tar –help widzimy wszystkie opcje. Najważniejsze:
-c- (create)- tworzenie nowego archiwum
-t- (table)- wyświetlanie zawartości archiwum.
-x- (extract)- rozpakowanie archiwum.
-v- (verbose)- pokazuje wszystkie pliki na ekranie podczas tworzenia archiwum.
-f- (file)- wybieramy nazwę pliku dla archiwizowanego pliku. Kiedy tworzymy archiwum ta opcja zawsze musi być dana na końcu.
Aby spakować katalog test ze wszystkimi plikami i podkatalogami do archiwum zw. testarchive.tar, robimy:
1/ Otwieramy shell.
2/ Uzywamy cd dla naszego katalogu /home, gdzie katalog test jest ulokowany.
3/ Wprowadzamy
tar -cvf testarchive.tar test
Opcja –c tworzy archiwum, robiąc go plikiem jako skierowanego przez –f. Opcja –v listuje pliki jak są przetwarzane.
4/ Przeglądanie zawartości pliku archiwalnego z
tar -tf testarchive.tar
Katalog test z wszystkimi swoimi plikami i katalogami pozostał niezmieniony na naszym twardym dysku. Aby go odpakować, wprowadzamy
tar -xvf testarchive.tar
ale nie robimy tego jeszcze.
Dla kompresji pliku oczywistym wyborem jest gzip lub, dla lepszej proporcji kompresji, bzip2. Wprowadzamy po prostu
gzip testarchive.tar lub bzip2 testarchive.tar
Z ls widzimy, że teraz plik testarchive.tar nie jest tam i że plik testarchive.tar.gz plik został stworzony zamiast. Teraz plik jest duzo mniejszy i pasuje do transferu przez e-mail lub przechowania w pamięci USB.
Teraz rozpakowujemy ten plik w katalogu test2 stworzonym wcześniej. Aby to zrobic, wprowadzamy
cp testarchive.tar.gz test2
dla kopiowania pliki to tamtego katalogu. Zmiana do katalogu z
cd test2
Skompresowane archiwum z rozszerzeniem .tar.gz może być odpakowane z polecniem gunzip.
Wprowadzamy gunzip testarchive.tar.gz
co daje w rezultacie plik testarchive.tar, który potem potrzebuje być extracted lub untarred z
tar -xvf testarchive.tar
Można też unzip lub extract skompresowane archiwum w jednym kroku z
tar -xvf testarchive.tar.gz
dodanie opcji –z już nie jest wymagane. Z ls możemy zobaczyć, że nowy katalog test został stworzony z taką samą zawartością jak nasz katalog test w naszym katalogu /home.
Czyszczenie
Możemy oczyścić katalog home przez wykasowanie róznych plików tekstowych i katalogów uzywając poleceń:
rm
rmdir
Użytkownicy i prawa dostępu
Od swego rozpoczęcia we wczesnych latach 90. Linux został rozwinięty w SO wieloużytkowy. Jakakolwiek liczba użytkowników może pracować na nim równocześnie. Użytkownicy muszą zalogować się przed otwraciem sesji przy ich stacjach roboczych.
Prawa dostępu do systemu plików
Zasadniczo każdy plik w systemie plików Linux należy do uzytkownika i grupy. Oni jak i wszyscy inni są autoryzowani do zapisu, odczytu i wykonania tych plików. Grupa to zestaw połączonych użytkowników z pewnymi wspólnymi prawami. Każdy uzytkownik w Linux jest członkiem przynajmniej jednej grupy posiadającej, zwykłych użytkowników. Tylko root dodaje grupy.Każdy uzytkownik może dowiedzieć się z poleceniem
groups
których grup jest członkiem.
Prawa dostępu do pliku
Ogranizacja praw do pliku w systemie plików odróznia pliki i katalogi. Informacja o prawach dostępu do pliku może być wświetlona z poleceniem ls –l.
-rw-r—– 1 tomza project3 14197 Jun 21 15:03 Roadmap
r- plik może być odczytywany
w- do pliku można zapisywać (zmieniać)
x- plik może być wykonywany
Ta pierwsza kolumna rodzaju obiektu i praw składa się z 10 pól. Plik należy to uzytkownika tomza. Jest w grupie project3. To jest plik tekstowy, a więc nie trzeba go wykonywać z opcją x. Inne prawa możemy nadać za pomocą ACL.
Prawa dostępu do katalogu
Indywidualne prawa mają trochę inne znaczenie niż w przypadku pliku.
drwxrwxr-x 1 tomza project3 35 Jun 21 15:15 ProjectData
r- zawartość katalogu może być pokazana, można przeglądać zawartość
w- można tworzyć nowe pliki kasować pliki w tym katalogu
x- użytkownik może zmieniać ten katalog
Modyfikacja praw dostępu do pliku
Zmienianie praw dostępu
Prawa dostępu do pliku lub katalogu mogą być zmienione przez właściciela i przez roota z poleceniemchmod
z parametrami zmieniającymi prawa i jedną lub więcej nazw plików. Parametry z róznych kategorii:
1/ Dotyczące użytkowników:
– u (user)—właściciel pliku
– g (group)—grupa, która posiada plik
– o (others)—dodatkowu uzytkownicy (jesli nie ma parametru zmiany odnoszą się do wszystkich kategorii)
2/
2. Znak dla deletion (–), setting (=) lub insertion (+)
3. Skróty:
– r—read
– w—write
– x—execute
4. Nazwa pliku lub nazwy plików oddzielamy przez spacje
chmod o+w- użytkownik tomza daje innym uzytkownikom prawo zapisu do katalogu
chmod go-w- użytkownik tomza zakazuje wszystkim uzytkownikom niż sam prawo zapisu do katalogu
Zmiana prawa własności i praw dostępu
Inne ważne polecenia do kontrolowania praw własności i praw dostepu komponentu systemu plików są za pomocą chown (change owner) i chgrp (change group). Polecenie chown może być użyte do transferu prawa własności pliku dla innego użytkownika. Jednak tylko root ma pozwolenie, aby wykonać tę zmianę.
Np. Plik Roadmap nie powinien należeć dłużej do tomza, ale do użytkownika pagantempereta. Root wprowadza:
chown pagantempereta Roadmap
chgrp zmienie prawa własnosci pliku. Jednak posiadacz pliku musi byc członkiem nowej grupy. W ten sposób uzytkownik tomza może przełączyć grupę posiadającą plik ProjectData doi project4 z poleceniem
chgrp project4
tak długo jak jest członkiem tej nowej grupy.
Ważne polecenia Linux
Poszczególne elementy polecenia są zapisane różnym krojem pisma. Bieżące polecenie i jego obowiązkowe opcje są zawsze wyświetlane jako opcje polecenia. Wyszczególnienia lub parametry, które nie są wymagane są w nawiasach kwadratowych.
Dwa sposoby zapisania opcji:
ls –la
lub
ls –l –a
Polecenia pliku
To opisuje cokolwiek z administracji ogólnej pliku do manipulacji systemu plików ACL.
Administracja pliku
ls [options] [files]
ls bez parametrów- zawartość bieżącego katalogu w krótkiej formie.
-l- lista szczegółowa
-a- ukryte pliki
cp [options] source target- kopiuje źródło do celu
-i- czeka na potwierdzenie, kiedy cel jest nadpisany.
-r- kopiuje z podkatalogami i plikami
mv [options] source target- kopiuje źródło do celu, potem usuwa oryginalne źródło.
-b- tworzy kopię backup źródła przed usunięciem.
-i- czeka na potwierdzenie zanim istniejący plik docelowy będzie nadpisany.
rm [options] files- usuwa określone pliki z systemu plików. Katalogi nie są usuwane przez rm, chyba że opcja –r jest użyta.
-r- usuwa jakiekolwiek istniejące podkatalogi
-i- czeka na potwierdzenie przed usunięciem każdego pliku
ln [options] source target- tworzy wewnętrzny link ze źródła do celu. Normalnie taki linkwskazuje bezpośrednio na źródło w tym samym systemie plików. Jednak jeśli in jest z opcją:
-s- tworzy symboliczny link, który tylko wskazuje na katalog, w którym źródło jest zlokalizowane, umożliwiając linkowanie przez systemy plików.
-s- tworzy symboliczny link
cd [options] [directory]- zmienia bieżący katalog. cd bez parametrów zmienia do katalogu domowego danego użytkownika
mkdir [options] directory- tworzy nowy katalog
rmdir [options] directory- kasuje katalog, jesli jest pusty.
chown [options] username[:[group]] files- tranferuje prawo posiadania pliku do innego użytkownika z określoną nazwą użytkownika
-R- zmienia pliki i katalogi we wszystkich podkatalogach
chgrp [options] groupname files- transferuje prawo posiadania grupy danego pliku do innej grupy z określoną nazwą gupy. Posiadacz pliku tylko zmienia prawo posiadania grupy, jeśli jest członkiem zarówno bieżącej jak i nowej grupy.
chmod [options] mode files- zmiany praw dostępu. Parametr mode ma trzy części: group, access i access type.
group- akceptuje znaki:
u- użytkownik
g- grupa
o- inni
Dla access
+- przydziela prawa
— zabiera prawa
access type jest kontrolowany przez opcje:
r- odczytywanie
w- zapisywanie
x- wykonywanie plików lub zmienianie katalogu
s- bit setuid- aplikacja lub program jest startowany jak gdyby był startowany przez właściciela pliku.
Jako alternatywa kod liczbowy może być użyty. Cztery cyfry tego kodu sa złozone z sumy wartości 4, 2 i 1- dziesiętny rezultat maski binarnej.
Pierwsza cyfra:
4- ustawia set user ID (SUID)
2- ustawia group ID
1- ustawia sticky bit
Druga cyfra:
Określa prawa dostępu właściciela pliku.
Trzecia cyfra:
Określa prawa dostępu grupy członków.
Czwarta cyfra:
Ustawia prawa dla wszystkich użytkowników.
4- ustawia odczytywanie
2- ustawia zapisywanie
1- ustawia wykonywanie
Własciciel pliku otrzymuje zazwyczaj 6 lub 7 dla plików wykonywalnych.
gzip [parameters] files- ten program kompresuje zawartość plików uzywając skomplikowanych matematycznych algorytmów. Pliki kompresowane w ten sposób są dane z rozszerzeniem .gz i potrzebują być rozkompresowane zanim będą użyte.
tar- aby skompresować kilka plików lub cały katalog.
-d- dekompresuje spakowane pliki gzip, więc one wracają do oryginalnego rozmiaru i mogą być przetwarzane normalnie (jak polecenie gunzip).
opcja archiwizujące pliki dla tar:
tar wkłada jeden lub więcej plików do archiwum. Kompresja jest opcjonalna. tar jest całkiem skomplikowanym poleceniem z wieloma dostępnymi opcjami. Najczęście używane:
-f- zapisuje dane wyjściowe do pliku a nie na ekran jak jest zazwyczaj
-c- tworzy nowe archiwum tar
-r- dodaje pliki do istniejącego archiwum
-t- dane wyjściowe zawartości archiwum
-u- dodaje pliki, ale tylko jeśli one są nowsze niż pliki już zawarte w archiwum
-x- rozpakowuje pliki z archiwum (extraction)
-z- pakuje wynikające archiwum z gzip
-j- kompresuje wynikające archiwum z bzip2
-v- listuje przetworzone pliki
Archiwa plikowe tworzone z tar mają zakończenie z .tar. Jeśli archiwum tar było też skompresowane używając gzip, zakończenie jest .tgz lub .tar.gz. Jeśli było skompresowane przy użyciu bzip2, zakończenie jest .tar.bz2.
locate patterns- to polecenie jest tylko dostepne, jesli zainstalowaliśmy pakiet findutils-locate. Poelcenia to może znaleźć, w którym katalogu okreslony plik jest zlokalizowany. Można uzywać znaków globalnych, aby okreslić nazwy plików. Program jest bardzo szybki, ponieważ używa specialnie stworzonej do tego celu bazy danych (niż szuka w całym systemie plików). Tu też jest jego główna wada- polecenie to nie jest zdolne do znalezienia pliku stworzonego po ostatnim uaktualnieniu bazy danych. Taka baza danych może być generowana przez root z poleceniem updatedb.
updatedb [options]- polecenie wykonuje aktualizację bazy danych używaną przez locate. Aby zawrzeć pliki w wszystkich istniejących katalogach, uruchamiamy program jako root. To też ma sens ustawienia tego w tle przez dodanie ampersand(&), więc można natychmiast kontynuować pracę na tej samej konsoli (updatedb &). Ro polecenie zazwyczaj uruchamia się jako daily cron job.
find [options]- szuka pliku w danym katalogu. Pierwszy katalog okresla katalog, w którym startuje wyszukiwanie. Opcja –name musi być z ciągiem wyszukiwania, który miże zawierac znaki globalne. Nie uzywa bazy danych, a skanuje systemy plików.
Polecenia dla zawartości praw dostępu do pliku
file [options] [files]- Z file wykrywamy zawartość okreslonych plików.
-z- próbuje zajrzeć do skompresowanych plików.
cat [options] files- wyświetla zawartość pliku, drukuje całą zawartość na ekranie bez przerwy.
-n- liczby danych wyjściowych na lewym marginesie
less [options] files- przegląda zawartość okreslonego pliku.
PgUp i PgDn- przewija zawartość o pół ekranu
Home i End- początek i koniec
Q- wyjście
grep [options] searchstring files- znajduje okreslony ciąg wyszukiwania w określonych plikach. Jeśli jest znaleziony, polecenie wyświetla linie, w której ciąg wyszukiwania został znaleziony z nazwą pliku
-i- ignoruje wielkość liter
-H- tylko wyświetla nazwy poszczególnych plików, ale nie tekstowe linie.
-n- dodatkowo wyświetla liczby linii, w których to znaleziono
-l- tylko listuje pliki, w których ciąg wyszukiwania nie pojawia się
diff [options] file1 file2- porównuje zawartość jakichkolwiek dwóch plików. Dane wyjściowe wytworzone przez program listują wszystkie linie, które nie pasują. Używane często przez programistów, którzy potrzebują tylko wysłać ich zmiany programu a nie cały kod źródłowy.
-q- tylko raportuje, czy te dwa pliki się różnią
-u- wytwarza “unified” diff, który czyni dane wyjściowe bardziej czytelnymi.
Systemy plików
mount [options] [device] mountpoint- może być używane dla podmontowania mediów danych takich jak twarde dyski, napędy CD-ROM i inne napędy do katalogu systemu plików Linux.
-r- podmontowuje tylko do odczytu
-t filesystem- określa system plików, zwykle ext2 dla Linuxowych twardych dysków
msdos dla mediów MS-DOS
vfat- dla Windowsa systemu plików
iso9660- dla CDs
Dla twardych dysków nie okreslonych w pliku /etc/fstab, typ urządzenia musi też być okreslony. W tym wypadku tylko root może to podmontować. Jesli system plików powinien być też podmontowany przez innych uzytkowników, wprowadzamy opcję user w odpowiednej linii w pliku /etc/fstab (oddzielone przez przecinki) i zapisujemy te zmiany.
Inne informacje na mount(1) man page.
umount [options] mountpoint- odmontowuje napęd z systemu plików. Aby uniknąć straty danych, ruszamy to przed usunięciem medium z danymi z napędu.
Normalnie tylko root uruchamia poelcenia mount i umount. Aby dodac innych użytkowników do tego, edytujemy plik /etc/fstab, aby okreslić opcję user dla poszczególnego napędu.
Polecenia systemu
Najważniejsze polecenia potrzebne dla odzyskania informacji systemowych i kontrolowania procesówi sieci.
Informacje o SO
df [options] [directory]- polecenie df (disk free) bez żadnych opcji wyświetla informacje o całkowitej przestrzeni dysku, przestrzeń dyskowa obecnie w użyciu i wolna przestrzeń na wszystkich podmontowanych urządzeniach. jeśli okreslony jest katalog, informacja jest ograniczona do urządzenia, na którym katalog jest ulokowany.
-h- pokazuje liczbę zajętych bloków w GB, MG i KB- w formie odczytywalnej dla człowieka
-T- typ systemu plików (ext2, nfs itp.)
du [options] [path]- polecenie bez opcji pokazuje całkowitą przestrzeń dyskową zajmowaną przez pliki i podkatalogi w bieżącym katalogu.
-a- wyświetla rozmiar każdego pojedynczego pliku.
-h- dane wyjściowe w formie odczytywalnej dla człowieka
-s- wyświetla tylko obliczony całkowity rozmiar
free [options]- wyświetla informacje o uzyciu przestrzeni RAM i swap, pokazujacej całkowitą i użytą sumę w obu kategoriach.
-b- dane wyjściowe w bajtach
-k- dane wyjściowe w kilobajtach
-m- dane wyjściowe w megabajtach
date [options]- prosty program wyświetla bieżący czas systemu. Jesli uruchomiony jako root, można też zmieniać czas SO. date(1) man page dla szczegółów.
Procesy
top [options]- dostarcza szybkiego przeglądu bieżąco działających procesów. Naciskamy H dla dostępu do strony, która krótko wyjaśnia główne opcje dla optymalizowania programu.
ps [options] [process ID]- jeśli bez opcji, to polecenie wyświetla tablicę wszystkich programów lub procesów, które startowaliśmy. Opcje nie są poprzedzone minusem
aux- wyświetla szczegółową listę wszystkich procesów, niezależnie od posiadacza
kill [options] process ID- wysyła sygnał TERM, który zamyka proces. Jeśli to nie pomaga, używamy:
-9- wysyła sygnał KILL zamiast sygnału TERM, zakańczając proces prawie w każdym przypadku
killall [options] processname- to polecenie jest podobne do kill, ale używa nazwy procesu (zamiast ID procesu) jako argumentu, zabijając wszystkie procesy z tą nazwą.
Sieć
ping [options] hostname lub IP address- testowanie podstawowej funkcjonalności dla sieci TCP/IP. To wysyła mały pakiet danych do docelowego hosta, wymagając natychmiastowej odpowiedzi. Jeśli działa, ping wyświetla wiadomości o wykonaniu, co wskazuje, że sieciowy link funkcjonuje zasadniczo.
-c number- ustala całkowitą liczbę pakietów do wysłania i zakończenia po tym jak one są wysłane (domyślnie nie ma żadnego ograniczenia)
-f- (flood ping)- wysyła tak wiele pakietów danych jak możliwe- popularny środek zarezerwowany dla root do testowania sieci
-i value- określa interwał między dwoma pakietami danych (domyślnie jedna sekunda)
nslookup- DNS rozdziela nazwy domen dla adresów IP. Z tym narzędziem wysyłamy zapytania dla serwerów nazw (DNS servers).
telnet [options] hostname or IP address [port]- jest to protokół internetowy, który umożliwia nam pracę na zdalnych hostach przez sieć. To też jest program Linuxa dla tego protokołu dla operacji na zdalnych komputerach.
Ostrzeżenie:
Nie używamy telnetu przez sieć, gdzie trzecia strona może podsłuchiwać. Uzywamy tutaj raczej ssh, aby uniknać ryzyka złego używania hasła.
Różności
passwd [options] [username]- uzytkownicy mogą zmieniać swoje hasła o każdej porze uzywajac tego polecenia. Root może używać poelcenia do zmiany hasła jakiegokolwiek uzytkownika w SO.
su [options] [username]- umożliwia logowanie pod różnymi nazwami uzytkowników z działajacej sesji. Określamy nazwę użytkownika i odpowiednie hasło. Hasło nie jest wymagane z poziomu root, bo root jest autoryzowany przejmować tożsamość jakiegokolwiek użytkownika. jesli bez nazwy uzytkownika, podajemy hasło root.
— z su staruje shell loginu dla innego użytkownika
halt [options]- aby uniknąć straty danych, zawsze powiniśmy używać tego programu, aby zamknąć nasz SO.
reboot [options]- SO natychmiast bootuje
clear- czyści widoczną powierzchnię konsoli. Nie ma opcji.
Polecenia związane z logami
daemon SSHD
syslog– daemon zbierania komunikatów z różnych części systemu, system zapisu logów, demon logowania
każdy daemon generuje logi, w których zapisuje swoją pracę, np. serwer Apache generuje dużo logów
/dev/loger- plik reprezentujący urządzenie
syslog– monitoruje to urządzenie
te logi w SO są niezależne od danego oprogramowania
są też metalogi
syslog czeka i nasłuchuje na logach, które zapisuje na dysku, ma najlepsze możliwości:
– możliwość zdalnego logowania
– możliwość zdalnego odbierania logów
Haker czyści ślady swojej obecności, czyli czyści logi. Na lokalnym systemie to proste, a na zdalnym jest bardzo ciężko.
/etc/syslog–ng /syslog–ng.conf- konfigurujemy tutaj sysloga
Procedura konfiguracyjna zasad logowania
1/ definjujemy źródła komunikacji (mogą być z różnych źródeł) np. przez port COM
2/ definjujemy wszystkie miejsca przeznaczenia komunikatów (pliki mogą być różne, a SO będzie je wrzucał)
3/ definjujemy filtry (np. wybierz komunikaty z Apache, czy wybierz komunikaty na poziomie security
4/ łączenie punktów 1, 2, 3, czyli reguła logowania (skąd, jak filtrować, dokąd zapisujemy, czyli gdzie ma trafiać)
source
destination
filtr
reguła logowania
source nazwa {definjujemy źródło};
słowem kluczowym jest source
jak definjujemy źródło- grupowanie opcji w nawiasach klamrowych {…}
internal– źródło wewnętrzne
unix –dgrm (“/dev/log”) unix datagrama- źródło w /dev/log
wszystkie daemony będą wrzucać swoje logi, kolejność nie ma znaczenia
filtr nazwa {definicja filtru};
filtr- słowo kluczowe
level– poziom ważności komunikatu domeny z parametrami (fascility– nadawca komunikatu)
jeśli nie ma level, to wszystko
local– komunikaty systemowe lokalne
regular expressions- wieloznaczniki np. * i ?- reguły wyszukiwania (wyszukiwania znaku)
match– dopasowuje
wyfiltrowanie komunikatu, który ma w nazwie jakieś słowo
trzeba tak poustawiać filtry, aby w natłoku informacji dostrzec te, które nas interesują
definjujemy miejsce przeznaczenia komunikatu
destination nazwa {definicja celu}
słowem kluczowym jest destination
połączenie wszystkiego ze sobą
log {source (nazwa); filtr (nazwa); destination (nazwa); };
słowem kluczowym jest log
Po takim poleceniu zapisujemy logi pochodzące z danego źródła i zostaną przefiltrowane zgodnie z naszymi wymaganiami i zapisane w miejscu przeznaczenia
alt+F10– tutaj zbierają się logi
|- przebieramy informacje na pewnym urządzeniu
Xconsole– konsola graficzna
Zawsze jest serwer i klient; tu jest serwer przyjmujący logi i przesyłający logi, które muszą być odpowiednio skonfigurowane
serwer wysyłający- źródło komunikatów
serwer przyjmujący- destination
źródłem logów jest sieć
konfiguracja sieci- name server- adres serwera nazw przez adres IP
może być kilka nazw serwerów jeden pod drugim
długie domeny zwłaszcza w Active Directory
W domenach przeszukiwania wypisujemy nazwę hosta w DNS, dlatego powiększa nazwę o domenę i dalej szuka.
nie wymaga restartu sieci
name server 154.204.152.34
name server 154.204.152.35 itd
dyrektywa options– tutaj nie manipulujemy
w logach też jest statystyka
source sieciowe {
udp (ip (“172.16.0.112” port (514)) ;
} ;
172.16.0.112- adres IP w lokalnym serwerze, który słucha na danej karcie sieciowej
UDP- ten protokół, a nie TCP; w UDP mogą być logi kilku urządzeń (w logach jest nazwa serwera; albo lokalny, albo sieciowy). Natomiast protokół TCP mógłby się zablokować.
/var/log/messages– trafiają tu wszystkie logi
/var/log/$HOST– każdy serwer w osobnym pliku
wpis na stronie wysyłającego serwera
w messages jest- data, godzina, nazwa komputera, daemon, nr procesu, treść loga z numerem IP
To trzeba wycinać przez Firewall (serwer blokowania)- jest przed daemonem SSH
konfiguracja po stronie klienta- wysłać
zdefiniowanie destynacji, nazwa destynacji {udp (171.16.0.112 port (514)) ; } ;
destination serwer_logów
log {source (src) ; destination (serwer_logów) ; } ;
wszystkie logi będą trafiały na port (514)
W Windows nie jest podobnie- logi zapisuje na lokalnym serwerze
Permitroot login– ma 3 wartości:
{yes, no, without password}
yes– logi otrzymuje bezpośrednio root
no– logi na zwykłego użytkownika, potem na roota
without password- logi na roota bez używania hasła, ale są dwa klucze (publiczny i prywatny), czyli trzeba wygenerować dwa pliki. SO porównuje połówki kluczy (funkcje, które nie mają odpowiednich funkcji odwrotnych, dlatego trudno je złamać)
MONITOROWANIE SYSTEMU W LOGACH
Szukamy odpowiedzi:
– czy SO bootuje normalnie?
– jaka jest wersja kernela?
– jakie usługi działają?
– jakie jest ładowanie do SO?
Możemy znaleźć informacje o hardware i SO:
– informacje logów bootowania
– informacje o hardware (/proc/)
– informacje o hardware (programy wiersza polecenia)
– informacje o SO i procesie (programy wiersza polecenia)
– monitorowanie przestrzeni twardego dysku
Informacje logów bootowania
Kiedy SLES 10 startuje, pewne linie w konsoli są rozwijane zbyt szybko, aby przeczytać. Te wiadomości są trzymane w ringbuffer kernela. Z racji, że pojemność tego jest niewielka, jedne linie są kasowane, gdy drugie dodawane. Aby mieć dostęp do wiadomości dostępnych nawet wtedy, kiedy skasowano je z buffera, są zapisywane do pliku /var/log/boot.msg w lekko zmodyfikowanym formacie po zabootowaniu SO. Dla każdej linii wyświetlanej w konsoli podczas startu jest jeden lub kilka linii w pliku /var/log/boot.msg.
dmesg jest poleceniem używanym do przeglądania bieżącej zawartości ring buffer kernela.
dmesg | less pozwala na rozwijanie i zwijanie danych wyjściowych, co wygląda podobnie do:
Linux version…
BIOS-provided physical RAM map:
…
Dane wyjściowe dmesg pokazują wiadomości generowane podczas inicjalizacji hardware przez kernel i moduły kernela. Plik /var/log/boot.msg zawiera dodatkowe informacje poza tym, co można wyświetlić przez dmesg. Te informacje zawierają dane takie jak wiadomości o różnych skryptach generowanych w czasie bootowania i kody stanu exit:
…
System Boot Control: The system has been set up
…
INIT: Entering runlevel: 5
Boot logging started on /dev/tty1 (/dev/console) at Wed May 24 10:31:51
2006
Master Resource Control: prevoius runlevel: N, switching to runlevel: 5
…
…
Te dodatkowe wiadomości mogą być użyteczne podczas troubleshooting.
Można użyć też YaST, aby przeglądać zawartość pliku przez startowanie YaST i potem wybierając Miscellaneous==>View Start-up Log.
Lub startujemy moduł bezpośrednio przez yast2 view_anymsg w oknie terminala jako root.
Informacje o hardware (/proc/)
Katalog /proc/ zawiera wiele informacji na temat działającego systemu, w tym informacja o hardware przechowywana w przestrzeni pamięci kernela. Np. jeśli wprowadzimy
cat /proc/cpuinfo
dane wyjściowe są generowane z danych przechowywanych w pamięci kernela, który daje informacje takie jak nazwę modelu CPU i rozmiar cache. Można przeglądać dostępne informacje przez używanie poleceń takich jak cat, more lub less z nazwą pliku (jak np. cat /proc/cpuinfo).
/proc/devices- przegląd urządzeń używanych na SO Linux
/proc/cpuinfo- przegląd informacji o procesorze
/proc/ioports- przegląd portów I/O (wejścia/wyjścia) na danym serwerze; porty I/O są adresowane przez różne urządzenia hardware
/proc/interrupts- przegląd IRQ (Hardware Interrupt Signal) przypisanego dla danego SO
/proc/dma- przegląd kanałów DMA (Direct Memory Access) używanych na SO
/proc/bus/pci/devices- przegląd informacji o PCI (Peripheral Component Interconnect) na SO
/proc/scsi/scsi- przegląd podsumowania informacji o SCSI (Small Computer System Interface) na SO
Informacje o hardware (programy wiersza polecenia)
Można użyć następujące programy użytkowe z wiersza polecenia, aby przejrzeć informacje o hardware w danym SO:
hwinfo- wytwarza i wyświetla listę określonych informacji o urządzeniach zainstalowanych na SO Linux.
hwinfo | less- jeśli chcemy przewijać listę wprowadzamy
hwinfo –short- dla podsumowania listowania, wprowadzamy
hwinfo –log nazwa_pliku- aby zapisać informację do pliku logowania.
hdparm- wyświetla informację o twardym dysku i pozwala nam zarządzać parametrami twardego dysku.
Np. opcja –i wyświetla informacje identyfikacji twardego dysku dostępne podczas bootowania. Opcja –I wymaga informacji bezpośrednio z twardego dysku.
hdparm lub hdparm –h- wprowadzamy dla podsumowania listy dostępnych opcji
fdisk- użyta początkowo do zarządzania tablicą partycji na SO Linux. Można też użyć opcji takich jak –l (listowanie tablicy partycji) lub –s (rozmiar partycji), aby przeglądać informacje o twardym dysku.
iostat- wyświetla CPU i statystyki input/output (I/O) dla urządzeń i partycji. Program iostat jest częścią pakietu sysstat.
Te polecenie wytwarza raporty, które mogą być użyte do zmiany konfiguracji SO, aby lepiej zrównoważyć ładowanie input/output między fizycznymi dyskami.
Pierwszy wytwarzany raport dostarcza statystyk dotyczących czasu, od kiedy SO jest bootowany. Każdy następny raport omawia czas od poprzedniego raportu.
Można wytworzyć dwa typy raportów z tym poleceniem- raport użycia CPU i raport użycia urządzenia.
Opcja –c wytwarza tylko raport użycia CPU, opcja –d wytwarza tylko raport użycia urządzenia.
lspci- wyświetla informację o wszystkich szynach PCI w SO i wszystkich urządzeniach podłączonych do nich.
Opcje –v i –vv wytwarzają wielosłowne raporty.
Opcja –b daje nam szynocentryczny przegląd wszystkich numerów IRQ i adresów, jako widzianych przez karty (zamiast kernela) na szynie PCI.
siga- System Information GAthering (system zbierania informacji)- zbiera informacje o naszym SO i daje dane wyjściowe w formacie HTML lub ASCII.
sitar- System InformaTion At Runtime (informacje systemowe w czasie pracy maszyny)- przygotowuje informacje systemowe przy użyciu Perl, odczytując system plików /proc. Dane wyjściowe są zapisywane do /tmp w HTML, LaTeX i uproszczonego doc-book-xml.
Informacje o SO i procesie (programy wiersza polecenia)
Poza ps i top są inne polecenia, aby przejrzeć informacje systemowe:
– uptime
– netstat
– uname
– xosview
uptime
Chociaż polecenie top daje informacje systemowe w nagłówku, ale może być potrzeba tylko określonej informacji bez uruchamiania programu użytkowego. Np. można użyć polecenie uptime, aby wyświetlić bieżący czas, długość czasu, od kiedy SO działa, liczbę użytkowników na SO i średnią liczbę zadań w kolejce do uruchomienia przez ostatnie 1, 5, 15 minut:
tomasz@da10:~ > uptime
1:13pm up 2:42, 1 user load average: 0.02, 0.12, 0.09
inne informacje na man uptime.
netstat
Podczas gdy polecenie ps dostarcza informacji na poziomie procesu, można użyć netstat, aby dowiedzieć się, które sieciowe porty oferują usługi i jakie połączenia są ustanowione:
da10:~ # netstat –patune
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
User Inode PID/Program name
tcp 0 0 149.44.87:427 0.0.0.0:* LISTEN
0 6812 2723/slpd
tcp…
0…
Opcje dostosowujące dla netstat:
-p– pokazuje procesy jako root
-a– pokazuje sockety słuchające i niesłuchające (wszystkie)
-t– pokazuje informacje TCP
-u– pokazuje informacje UDP
-n– nie rozdziela nazwy hostów
-e– wyświetal dodatkowe informacje (rozszerzone)
-r– wyświetla informacje o routingu
uname
Używamy polecenia uname, aby dowiedzieć się o bieżącej wersji kernela:
da10:~ # uname –a
Linux da10 2.6.16.14-6-smp #1 SMP Tue May 9 12:09:06 UTC 2006 i686 i686
i686 GNU/Linux
xosview
Z graficznego desktopu można użyć programu użytkowego xosview (pakiet xosview), aby wyświetlić stan kilku parametrów opartych na SO, takich jak użycie CPU, średnie załadowanie, użycie pamięci, użycie przestrzeni swap, użycie sieci, przerywania i stan portu szeregowego.
Aby uruchomić xosview, wprowadzamy
xosview &
Pojawi się okno z bieżącymi parametrami i wykresami. q– wychodzimy.
Monitorowanie przestrzeni twardego dysku
W wierszu polecenia wpisujemy df i du. Równoważnikiem tego w graficznym interfejsie jest Gnome System Monitor (Computer===>More Applications===>System===>Devices)
Użycie systemowych usług logowania
SO Linux ma wiele logów, które śledzą różne aspekty działania SO. Wiele usług loguje swoje aktywności do ich własnego pliku logowania i poziom szczegółów może być ustawiony na bazie przez pośrednictwo usługi. Dodatkowo system loguje w /var/log/, co śledzi zdarzenia na poziomie SO. Informacje logowane w tych plikach logowania są typowo używane do pomocy podczas troubleshooting i dla celów bezpieczeństwa. Pliki logowania powinny być regularnie przeglądane.
Daemon sysloga, czyli syslog-ng
Demon sysloga syslog-ng jest używany przez wiele usług do logowania zdarzeń systemowych. Korzyścią w używaniu pojedynczej usługi do logowania jest to, że wszystkie logowania mogą być zarządzane z jednego pliku konfiguracyjnego. W SLES 9 i wersjach wcześniejszych syslogd był używany do logowania systemowych zdarzeń. Z SLES 10 te zdarzenia były logowane przez syslog-ng, nowego syslogd. Główną zaletą syslog-ng w porównaniu z syslogd jest zdolność do filtrowania wiadomości nie tylko w oparciu na programach użytkowych i priorytetach, ale też w oparciu na zawartości każdej wiadomości. Daemon syslog akceptuje wiadomości z usług systemowych i, zależnie od jego konfiguracji, innych hostów i loguje je na bazie ustawień w plikach konfiguracyjnych:
/etc/sysconfig/syslog
/etc/syslog-ng/syslog-ng.conf
Ten ostatni plik jest generowany przez SuSEconfig z pliku /etc/syslog-ng/syslog-ng.conf.in. Oba pliki mają taką samą składnię. Konfiguracja syslog-ng dzielona jest na trzy pliki:
/etc/sysconfig/syslog
/etc/syslog-ng/syslog-ng.conf.in
/etc/syslog-ng/syslog-ng.conf
Plik /etc/sysconfig/syslog
Zawiera ogólne parametry dające się zastosować do syslog-ng i do syslogd. Parametry w tym polu zawierają przełączenia przejścia z syslogd do syslog-ng, poziomu logowania kernela, parametrów dla klogd i który daemon ma być używany:
…
## Type: string
## Default: „”
## Config: „”
## ServiceRestart syslog
#
# if not empty: parameters for syslogd
# for example SYSLOGD_PARAMS=”-r my.dom.ain”
#
SYSLOGD_PARAMS=””
## Type: string
…
Parametry ustawiane w /etc/sysconfig/syslog są obliczane przez skrypt startowy /etc/init.d/syslog. Co więcej SuSEconfig używa /etc/sysconfig/syslog do dodania socketów logowania do /etc/syslog-ng/syslog-ng.conf.in.
Plik /etc/syslog-ng/syslog-ng.conf.in
Plik /etc/syslog-ng/syslog-ng.conf.in jest szablonem używanym do tworzenia pliku /etc/syslog-ng/syslog-ng.conf, czyli pliku konfiguracyjnego aktualnie używanego przez syslog-ng. Oba pliki mają tę samą składnię. Jednak jeśli nie wyłączymy generacji, plik /etc/syslog-ng/syslog-ng.conf w /etc/sysconfig/syslog, jakiekolwiek ręczne zmiany w tym pliku będą nadpisane, kiedy SuSEconfig jest wykonywany. Dlatego zmiany w konfiguracji syslog-ng powinny być zrobione w tym pliku.
Plik /etc/syslog-ng/syslog-ng.conf
Daemony syslog i syslog-ng podzielają dwa koncepty, że musimy rozumieć, aby być w stanie konfigurować każdy jeden:
– programy użytkowe
– priorytety
Konfiguracja syslog-ng składa się z kilku części, które potem są łączone do konfigurowania, jaka informacja gdzie jest zalogowana. Te części to:
– źródła
– filtry
– cele
– ścieżki logowania
Programy użytkowe
Odnoszą się do podsystemu, który dostarcza odpowiednich wiadomości. Każdy program, który używa syslog dla logowania, jest wyznaczony jako program użytkowy, zazwyczaj przez ich programistów. Te programy użytkowe to:
authpriv– używany przez wszystkie usługi, które mają coś wspólnego z bezpieczeństwem SO lub autoryzacji. Wszystkie wiadomości PAM używają tego programu użytkowego, też daemon ssh.
cron– akceptuje wiadomości z daemonów cron i at.
daemon– używany przez różne daemony, które nie mają swoich własnych programów użytkowych, takie jak daemon ppp.
kern– wszystkie wiadomości kernela.
lpr– wiadomości z systemu drukowania.
mail– wiadomości z systemu mail. To jest ważne, bo wiele wiadomości może dotrzeć bardzo szybko.
news– wiadomości z systemu wiadomości. Wiele innych wiadomości też może potrzebować logowania w krótkim czasie.
syslog– wewnętrzne wiadomości daemona sysloga.
user– Ogólny program użytkowy dla wiadomości na poziomie użytkownika. Np. to jest używane przez login do logowania nieudanych logowań.
uucp– wiadomości z systemu uucp.
local0-local7– tych osiem programów użytkowych jest dostępnych dla swojej własnej konfiguracji. Wszystko z lokalnych kategorii może być użyte w swoich własnych programach. Przez konfigurowanie jednego z tych programów użytkowych, wiadomości ze swoich własnych programów mogą być administrowane indywidualnie przez wpisy w pliku /etc/syslog-ng/syslog-ng.conf.
Priorytety
Priorytet daje szczegóły o pilności wiadomości. Następujące priorytety są dostępne (wylistowane wg. wzrastającego stopnia pilności):
debug– powinien być tylko używany dla celów debuggowania, ponieważ wszystkie wiadomości z tej kategorii i wyższej są logowane.
info– używany dla wiadomości, które są czysto informacyjne.
notice– używany dla wiadomości, które opisują stany normalnego systemu, który powinien być zanotowany.
warning– używany dla wiadomości wyświetlających odchylenia od normalnego stanu.
err– używany dla wiadomości wyświetlających błędy.
crit– używany dla wiadomości w krytycznych warunkach dla określonego programu
alert– używany dla wiadomości, które informują nas, że natychmiastowa akcja jest wymagana, aby utrzymywać system w stanie funkcjonowania.
emerg– używany dla wiadomości, które ostrzegają nas, że system już nie jest do użycia.
Części konfiguracji syslog-ng
Źródła
Źródło jest zbiorem sterowników źródeł, które zbierają wiadomości, używając danej metody. Te źródła są używane do zebrania wiadomości w postaci logów. Ogólna składnia:
source <identifier> { source-driver (params); source-driver (params); …};
Poszczególne sekcje w /etc/syslog-ng/syslog-ng.conf wygladają jak:
source src {
# include internal syslog-ng messages
# note: the internal () source is required!
internal ();
# the following line will be replaced by the
# socket list generated by SuSEconfig using
# variables from /etc/sysconfig/syslog:
unix-dgram („/dev/log”);
# uncomment to process log messages from network:
#udp (ip(„0.0.0.0”) port (514));
};
Filtry
Filtry są wyrażeniami booleanskimi, które odnoszą się do wiadomości i są analizowane jako albo prawdziwe, albo fałszywe. Ogólna składnia:
filter <identifier> { expression; };
Identyfikator musi być unikalny w danej konfiguracji i jest używany potem do konfigurowania aktualnego logowania. Wyjątek z /etc/syslog-ng/syslog-ng.conf pokazuje pewne filtry używane w SLES 10:
#
# Filter definitions
#
filter f_iptables { facility (kern) and match („IN=”) and match („OUT=”);
};
filter f_console { level (warn) and facility (kern) and not
filter if_iptables) or level (err) and not facility (authpriv); };
…
Jak możemy zobaczyć, program użytkowy i priorytet (level) może być używany w filtrach. Jednak jest też możliwe, aby przefiltrować zgodnie z zawartością linii, będąc zalogowanym, jak w f_iptables filter powyżej.
Łączenie wyrażeń z „and”, „or” lub „and not” pozwala nam na stworzenie bardzo określonych filtrów.
Cele
Cele określają, gdzie wiadomości mogą być logowane. Ogólna składnia:
destination <identifier> {
destination- driver (params);
destination-driver (params); … };
Możliwe cele są filtrami, plikami typu FIFO, socket, ttys pewnych użytkowników, programów lub innych hostów.
Próbka z /etc/syslog-ng/syslog-ng.conf wygląda jak:
destination console { file („/dev/tty10” group (tty) perm (0620)); };
destination message { file („/var/log/message”); };
Ścieżki logowania
Są punktem, gdzie to wszystko schodzi się razem. One określają, które wiadomości są logowane w jakim miejscu, zależnie od źródła, filtra i celu. Ogólna składnia:
log {source (sl); source (s2); …
filter (f1); filter (f2); …
destination (d1); destination (d2); …
flags (flag1 [, flag2…]); };
Następujące wpisy w /etc/syslog-ng/syslog-ng.conf np. są odpowiedzialne za logowanie do /dev/tty10 i /var/log/messages:
log (source (src); filter (f_console); destination (console); );
log (source (src); filter (f_messages); destination (messages); );
W pierwszej linii wiadomości logowania, które przechodzą przez źródła określone w source src są logowane do tty10, jeśli one pasują do filtra f_console.
W linii drugiej wiadomości, które przychodzą przez źródła określone w source src są logowane do /var/log/messages, jeśli one pasują do filtra f_messages.
Dalsze szczegóły pliku syslog-ng.conf po wprowadzeniu man 5 syslog-ng.conf. Ogólny przegląd syslog-ng a także szczegółów konfiguracji w /usr/share/doc/packages/syslog-ng/html/book1.html
Ważne pliki logowania
Większość wiadomości jest zapisanych w pliku logowania /var/log/messages. Często wskazówki mogą być tu znalezione o problemach takich jak, dlaczego usługa nie funkcjonuje należycie, kiedy to startuje. Jeśli nie ma wskazówki w /var/log/messages, /var/log/audit.log, plik logowania dla wiadomości AppArmor, może dostarczyć więcej informacji. Wiadomości zapory są logowane w /var/log/firewall.
Dobrze jest dla czytania plików logowania użyć wiersza polecenia i polecenia tail:
tail /var/log/messages
To polecenie wyświetla ostatnie 10 linii pliku, które są też najświeższymi wpisami.
Przez używanie tail –n (taki jak tail –n 30), można określić liczbę linii do wyświetlenia.
Jeśli chcemy mieć nowe wiadomości wyświetlane natychmiast, używamy trybu interaktywnego z tail –f. Np. wprowadzając
tail -20f /var/log/messages
przełącza tail do trybu interaktywnego. Ostatnie 20 linii dla pliku /var/log/messages są wyświetlane. Jeśli nowe wiadomości są dodane, te są natychmiast wyświetlane.
Można zatrzymać
tail –f
przez naciśnięcie Ctrl+c.
Ważne pliki logowania w katalogu /var/log/:
/var/log/audit/- ten katalog magazynuje pliki logowania dla Novell AppArmor w audit.log.
/var/log/cups/- ten katalog magazynuje pliki logowania dla systemu drukowania CUPS.
/var/log/news/- ten katalog magazynuje wiadomości dla systemowych news.
/var/log/YaST2/- ten katalog magazynuje pliki logowania dla YaST.
/var/log/boot.msg- kiedy system bootuje, wszystkie skrypty bootowania dla wiadomości są wyświetlane na pierwszej konsoli wirtualnej, to często zdarza się tak szybko, że nie można przeczytać. Jednak można czytać wiadomości bootowania w tym pliku.
/var/log/mail- wiadomości z systemu mail są zapisywane do tego pliku. Ponieważ ten system często generuje wiele wiadomości, są dodatkowe pliki logowania:
/var/log/mail.err
/var/log/mail.info
/var/log/mail/warn
/var/log/wtmp- ten plik zawiera informacje o tym, który użytkownik był zalogowany, gdzie użytkownik loguje się, jak długo użytkownik był zalogowany (od czasu, jak plik był stworzony).
Zawartość pliku jest w formie binarnej i może tylko być wyświetlana z poleceniem last (/usr/bin/last).
Z powodu formatu binarnego jest trudno manipulować wpisami w tym pliku.
/var/log/lastlog- ten plik zawiera informacje, o których użytkownik był ostatnio zalogowany, gdzie użytkownik loguje się i jak długo użytkownik był zalogowany.
Można tylko przeglądać zawartość z poleceniem lastlog (/usr/bin/lastlog).
Archiwizowanie plików logowania (logrotate)
Jest wiele usług (daenmons), które razem z samym kernelem regularnie zapisują stan SO i okreslone zdarzenia do plikow logowania. Tak administrator sprawdza stan SO o pewnym czasie, rozpoznaje błędy lub złe funkcje i Pliki logowania są w /var/log jak określono w FHS i rosną w dziennej podstawie. logrotate kontroluje rozrost tych plików. Konfigurujemy logrotate /etc/logrotate.conf. Programy produkujące pliki logowania instaluja indywidualne pliki konfiguracyjne w /etc/logrotate.d. Np. apache2 (/etc/logrotate.d/apache2) i syslogd (/etc/logrotate.d/syslog).
Jest ważne, aby zapewnić, żeby pliki logów nie zajmowały zbyt dużo przestrzeni w SO. Dlatego rozmiar i wiek plików logowania są monitorowane automatycznie przez program logrotate (/usr/sbin/logorotate).
Program jest uruchamiany codziennie przez daemona cron (/etc/cron.daily/logrotate). Program sprawdza wszystkie pliki logowania wylistowane w swoich plikach konfiguracyjnych i podejmuje jakąkolwiek akcję wymaganą przez konfigurację dla poszczególnego pliku. Można konfigurować ustawienia w plikach, aby wskazać czy pliki powinny być skompresowane lub skasowane w regularnych odstępach czasowych lub kiedy określony plik jest osiągnięty. Można też konfigurować, jak wiele skompresowanych wersji pliku logowania jest trzymanych przez określony czas. Pliki logowania mogą też być wysyłane prze e-mail. Plik konfiguracyjny logrotate jest w /etc/logrotate.conf, co zawiera ogólne ustawienia konfiguracyjne. Przykład logrotate.conf:
# see „man logrotate” for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
# compress
# uncomment these to switch compression to bzip2
#compresscmd /usr/bin/bzip2
#uncompresscmd /usr/bin/bunzip2
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp – we’ll rotate them here
#/var/log/wtmp {
# monthly
# create 0664 root utmp
# rotate 1
#}
# system-specific logs may be also be configured here.
logrotate jest kontrolowane przez cron i jest wywoływany daily przez /etc/cron.daily/logrotate.
Ważne:
Opcja create odczytuje wszystkie ustawienia uczynione przez administratorra w /etc/permissions*. Zapewnia, że żadne konflikty nie wynikną z jakichkolwiek osobistych modyfikacji.
Opcje w pliku:
weekly– pliki logowania są tworzone lub zastępowane raz na tydzień.
rotate 4- jeśli opcja rotate nie jest określona, stare pliki są kasowane. Tutaj ostatnie cztery wresje pliku logowania są trzymane (rotate 4).
create– stary plik jest zapisywany pod nową nazwą i nowy, pusty plik logowania jest tworzony.
compress– jeśli opcja compress jest aktywowana, kopie są magazynowane w formie skompresowanej.
Wiele pakietów RPM zawiera przedkonfigurowane pliki dla analizy przez logrotate. Te pliki są magazynowane w /etc/logrotate.d/ i są odczytywane przez logrotate przez wpis include /etc/logrotate.d w /etc/logrotate.conf.
Jakiekolwiek ustawienia w plikach logrotate.d zastępują ogólne ustawienia w logrotate.conf. Trzeba listować pliki, które chcemy, aby były monitorowane we wpisach w pliku /etc/logrotate.conf (takie jak /var/log/wtmp [options] lub w oddzielnych plikach konfiguracyjnych. Przykład pliku syslog w /etc/logrotate.d/:
#
# Please note, that changing of log file permissions in this
# file is not sufficient if syslog-ng is used as long daemon.
# It is required to specify the permissions in the syslog-ng
# configuration /etc/syslog-ng/syslog-ng.conf.in as well.
#
/var/log/warn /var/log/messages /var/log/allmessages
/var/log/localmessages /var/log/firewall {
compress
dateext
maxage 365
rotate 99
missingok
notifempty
size +4096k
create 640 root root
sharedscripts
postrotate
/etc/init.d/syslog reload
endscript
}
…
Pliki syslog i syslog-ng w /etc/logrotate.d/ zawierają ustawienia dla konfigurowania, jak pliki logowania są zapisane przez syslog (syslog lub syslog-ng) będą traktowane. Tablica opisująca opcje w tym pliku:
size +4086k– pliki nie będą rotowane aż one osiągną rozmiar 4096 KB.
rotate 99- 99 wersji każdego pliku będzie trzymane.
compress– stare pliki logowania będą magazynowane w formie skompresowanej.
maxage 365– jak tylko skompresowany plik jest starszy niż 365 dni, jest kasowany.
notifempty– jeśli plik logowania jest pusty, nie ma żadnej rotacji.
create 640 root root– nowe pliki logowania są tworzone po rotacji i właściciel, grupa i prawa do pliku dla nowego pliku są określane.
postrotate … endscript- skrypty mogą być wezwane po rotacji. Np. pewne usługi muszą być startowane ponownie po tym jak pliki logowania zostaną zmienione.
W tym przykładzie daemon syslog będzie czytał jeszcze raz swoje pliki konfiguracyjne po tym jak rotacja (/etc/init.d/syslog jest załadowny jeszcze raz). Ponieważ ten skrypt jest taki dla syslogd i syslog-ng, nie ważne, który z nich jest używany.
Monitorowanie aktywności loginu
Jedno z najbardziej krytycznych zadań dla administratora jest upewnienie się, że zauważymy i zadziałamy na jakąkolwiek podejrzaną działalność na SO, która może wskazywać na narażenie bezpieczeństwa. Zadania monitorowania zawierają analizowanie aktywności loginu dla naruszenia bezpieczeństwa takie jak liczne nieudane logowania. O aktywności loginu mamy też informacje podczas przeglądania plików takich jak /var/log/messages.
Monitorowanie aktywności loginu z poleceniami:
who– te polecenie pokazuje kto jest obecnie zalogowany do SO i informację taką jak czas ostatniego loginu.
Opcje jak:
-H– wyświetla nagłówki kolumn
-r– bieżący runlevel
-a– wyświetla informację dostarczoną przez większość opcji
Np. wprowadzenie who –H zwraca informację:
da10:~ # who –H
NAME LINE TIME COMMENT
root pts/0 2006-05-24 10:33 (da1.digitalairlines.com)
tomasz :0 2006-05-24 10:54
tomasz pts/0 2006-05-24 10:54
w– to polecenie wyświetla informację o obecnych użytkownikach na maszynie i ich procesach.
Pierwsza linia zawiera informacje o bieżącym czasie, jak długo SO funkcjonuje, jak wiele użytkowników jest obecnie logowanych i załadowanie systemu dla minionych 1, 5 i 15 minutach. Pod pierwszą linią jest wpis dla każdego użytkownika, który wyświetla nazwę loginu, nazwę tty, zdalnego hosta, czas loginu, czas bezczynności, JCPU, PCPU i linię polecenia bieżącego procesu użytkownika.
Czas JCPU jest czasem użytym przez wszystkie procesy przyłączone do tty. To nie zawiera minionych zadań z drugiego planu, ale to zawiera zadania bieżąco działające w drugim planie.
Czas PCPU jest czasem użytym przez bieżący proces, co jest zwane w polu What.
Można użyć opcji takich jak –h (nie wyświetlaj nagłówka), -s (nie wyświetlaj czasu loginu, JCPU i PCPU) i –V (wyświetla informacje o wersji).
Wprowadzając w mamy zwrot:
da10:~ # w
15:06:45 up 4:35 4 users , load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10:33 0.00s 0.73s 0.02s w
tomasz :0 15:54 ?xdm? 1:15 0.58 /bin/sh
/opt/kde3/bin/startkde
…
finger– to polecenie wyświetla informacje o lokalnym czy zdalnym systemie użytkowników. Domyślnie następująca informacja jest wyświetlana o każdym bieżącym użytkowniku zalogowanym do lokalnego hosta:
Login name
User’s full name
Associated terminal name
Idle time
Login time (i from where)
Można użyć opcji takich jak –l (long format) i –s (short format).
Np. wprowadzając finger –s zwraca informacje:
da10:~ # finger –s
Login Name Tty Idle Login Time Where
tomasz Tomasz *:0 – Wed 13:54
tomasz Tomasz pts/1 1:13 Wed 13:54
tomasz Tomasz *pts/3 1:02 Wed 13:55
root root pts/0 – Wed 10:33 da1.digitalairl
last– to polecenie wyświetla listę użytkowników, którzy są zalogowani w i wylogwani z od czasu, kiedy plik /var/log/wtmp został stworzony. Ostatnie przeszukiwania do tyłu przez plik /var/log/wtmp (lub plik przeznaczony przez opcję –f) i wyświetla listę wszystkich użytkowników, którzy zalogowali się (lub wylogowali) od czasu, gdy dany plik został tworzony.
Można określić nazwy użytkowników u nazwy tty, aby tylko pokazać informacje dla tych wpisów.
Można użyć opcji takich jak –num (gdzie num jest liczbą linii do wyświetlenia), -a (wyświetla nazwę hosta w ostatniej kolumnie), i –x (wyświetla wpisy zamknięcia SO i zmiany runleveli).
Np. wprowadzając last –ax zwraca informację:
da10:~ # last –ax
tomasz pts/3 Wed May 24 13:55 still logged in
tomasz pts/1 Wed May 24 13:54 still logged in
tomasz :0 Wed May 24 13:54 still logged in
tomasz :0 Wed May 24 13:45 – 13:53 (00:08)
root pts/0 Wed May 24 10:33 still logged in da1.digitalairlin
runlevel (to lvl 5) Wed May 24 10:31 – 15:09 (04:37) 2.6.16.14-6-smp
reboot system boot Wed May 24 10:31 (04:38) 2.6.16.14-6-smp
shutdown system down Tue May 23 17:30 – 15:09 (21:39) 2.6.16.14-6-smp
…
lastlog– to polecenie formatuje i drukuje zawartość ostatniego pliku logowania loginu (/var/log/lastlog). Nazwa loginu, port i czas ostatniego loginu są wyświetlane. Wprowadzanie polecenia bez opcji wyświetla wpisy sortowane przez numeryczne ID. Można użyć opcji takich jak –u login_name (wyświetla informację tylko dla wyznaczonego użytkownika) i –h (wyświetla jednoliniową wiadomość o pomocy).
Jeśli użytkownik nigdy nie logował się, wiadomość **Never logged in** jest wyświetlana w miejsce portu i czasu.
Wprowadzając lastlog mamy zwrot informacji:
da10:~ # lastlog
Username Port Latest
at **Never logged in**
bin **Never logged in**
…
root pts/0 Wed May 24 10:33:36 +0200 2006
sshd **Never logged in**
suse-ncc **Never logged in**
uucp **Never logged in**
wwwrun **Never logged in**
tomasz :0 Wed May 24 13:54:29 +0200 2006
faillog– to polecenie formatuje i wyświetla zawartość nieudanego logu (/var/log/faillog) i utrzymuje nieudane konta i ograniczenia. Funkcjonalność faillog musi być włączona przez dodanie modułu pam_tally.so, aby odpowiedni plik w /tec/pam.d/, np. /etc/pam.d/login:
# %PAM-1.0
auth required pam_securetty.so
auth required pam_tally.so no_magic_root per_user
auth include common-auth
auth required pam_nologin.so
account required pam_tally.so no_magic_root
Reszta pliku nie musi być zmieniona.
Jeśli chcemy mieć też tę funkcjonalność z graficznym loginem, dodajemy nad linią do /etc/pam.d/xdm i (lub) /etc/pam.d/gdm, zależnie od tego, jakiego menadżera loginu używamy.
Można użyć opcji takich jak –u login_name (wyświetla informacje tylko dla przeznaczonego użytkownika) i –p (wyświetla w porządku UID).
Polecenie faillog tylko pokazuje użytkowników bez udanego loginu od ostatniego nieudanego. Aby pokazać użytkownika, który nie miał udanego loginu od ostatniego nieudanego, musimy jawnie żądać użytkownika z opcją –u.
Wprowadzając zwrot informacji faillog:
da10:~ # faillog
Login Failures Maximum Latest On
tomasz 1 3 05/24/06 15:39:35 +0200 /dev/tty2
Polecenie faillog jest też użyte do wyznaczania ograniczeń dla nieudanych logów:
faillog –m 3
ustawia limit do trzech nieudanych logowań dla wszystkich użytkowników. Aby zapobiec wykluczeniu roota, trzeba upewnić się, że nia ma ograniczeń dla root:
faillog –u root –m 0
sekwencja opcji jest istotna: faillog –m0 –u root usuwa ograniczenie dla all users, nie dla root.
Aby znowu przydzielić dostęp dla użytkownika, który ma więcej nieudanych logowań niż limit, wprowadzamy
faillog –r user
pisanie logów (logowanie) w rodzajach:
– każdy daemon musi prowadzić swoje logi
– daemony wysyłają logi do daemona logów
w SO daemony logowania są różne, wrzucają do /dev i dalej daemon logowania bierze je
PROGRAMY UŻYTKOWE MONITORUJĄCE SO
Wiele procesów programów i mechanizmów mogą być uzyte do badania stanu naszego SO. Też opisane są programy użytkowe, które są pozyteczne dla rutynowej pracy razem z najważniejszymi parametrami.
Dla każdego wprowadzonego polecenia przykłady związanych danych wyjściowych są prezentowane. W tych przykładach pierwszą linią jest same polecenie (po > lub znaku zachęty #). Pominięcia są wskazane z nawiasami kwadratowymi ([…]) i długie linie są zawijane, jesli trzeba. Urwanie linii dla długich linii jest wskazane przez backslash (\).
# command -x -y
output line 1
output line 2
output line 3 is annoyingly long, so long that \
we have to break it
output line 3
[…]
output line 98
output line 99
Opisy są krótkie, aby pozwalić tak wielu jak to możliwe do wymienienia. Dalsze informacje dla wszystkich poleceń mogą być znalezione na man pages. Większość poleceń też rozumie parametr –help, który dostarcza krótkiej listy dostępnych parametrów.
Debugowanie
Określanie Required Library: ldd
Uzywamy polecenia
ldd
dla dowiedzienia się, które biblioteki załadowałyby dynamicznie, wykonywalnie określone jako argument.
zacker@linux:~> ldd /bin/ls
linux-gate.so.1 => (0xffffe000)
librt.so.1 => /lib/librt.so.1 (0xb7f97000)
libacl.so.1 => /lib/libacl.so.1 (0xb7f91000)
libc.so.6 => /lib/libc.so.6 (0xb7e79000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7e67000)
/lib/ld-linux.so.2 (0xb7fb6000)
libattr.so.1 => /lib/libattr.so.1 (0xb7e63000)
Binaria statyczne nie potrzebują żadnych dynamicznych bibliotek.
zacker@linux:~> ldd /bin/sash
not a dynamic executable
zacker@linux:~> file /bin/sash
/bin/sash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.6.4, statically linked, for GNU/Linux 2.6.4, stripped
Zawołania biblioteki działającego programu: ltrace
Polecenie
ltrace
umozliwia nam wytropienie zawołań biblioteki procesu. To polecenie jest używane w podobny sposób do strace. Parametr –c w danych wyjściowych daje numer i trwanie biblioteki zawołań biblioteki, które się przydarzyło:
zacker@linux:~> ltrace -c find ~
% time seconds usecs/call calls function
—— ———– ———– ——— ——————–
34.37 6.758937 245 27554 __errno_location
33.53 6.593562 788 8358 __fprintf_chk
12.67 2.490392 144 17212 strlen
11.97 2.353302 239 9845 readdir64
2.37 0.466754 27 16716 __ctype_get_mb_cur_max
1.18 0.231189 27 8531 strcpy
1.17 0.230765 27 8358 memcpy
[…]
0.00 0.000036 36 1 textdomain
324 Installation and Administration
—— ———– ———– ——— ——————–
100.00 19.662715 105717 total
zawołani systemu programu działającego: strace
Program użytkowy strace umożliwia nam wytropienie wszystkich zawołań SO bieżąco działającego procesu. Wprowadzamy polecenie w normalny sposób, dodając strace na początku linii:
zacker@linux:~> strace ls
execve(“/bin/ls”, [“ls”], [/* 61 vars */]) = 0
uname({sys=”Linux”, node=”linux”, …}) = 0
brk(0) = 0x805c000
access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or \
directory)
open(“/etc/ld.so.cache”, O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=89696, …}) = 0
mmap2(NULL, 89696, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7ef2000
close(3) = 0
open(“/lib/librt.so.1”, O_RDONLY) = 3
read(3, “\177ELF\1\1\1\3\3\1000\36″…, 512) \
= 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=36659, …}) = 0
[…]
stat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), …}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) \
= 0xb7ca7000
write(1, “bin Desktop Documents music\tM”…, 55bin Desktop Documents \
\ music Music public_html tmp
) = 55
close(1) = 0
munmap(0xb7ca7000, 4096) = 0
exit_group(0) = ?
Np. dla wytropienia wszsytkich usiłowań otwarcia poszczególnego pliku, używamy:
zacker@linux:~> strace -e open ls .bashrc
open(“/etc/ld.so.cache”, O_RDONLY) = 3
open(“/lib/librt.so.1”, O_RDONLY) = 3
open(“/lib/libacl.so.1”, O_RDONLY) = 3
open(“/lib/libc.so.6”, O_RDONLY) = 3
open(“/lib/libpthread.so.0”, O_RDONLY) = 3
open(“/lib/libattr.so.1”, O_RDONLY) = 3
[…]
Aby wyśledzić wszystkie procesy child używamy parametru –f. Zachowanie i format danych wyjściowych dla strace może być w większości kontrolowany. Dla informacji patrzymy man strace.
Pliki i systemy plików
Ustalenie typu pliku: file
Polecenie
file
Ustala typ pliku lub listy plików przez sprawdzenie /etc/magic.
zacker@linux:~> file /usr/bin/file
/usr/bin/file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), \
for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
Parametr –f listuje plik z listą nazw plików do zbadania. Opcja –z pozwala plikowi przejrzeć skompresowane pliki:
zacker@linux:~> file /usr/share/man/man1/file.1.gz
usr/share/man/man1/file.1.gz: gzip compressed data, from Unix, max compression
zacker@linux:~> file -z /usr/share/man/man1/file.1.gz
/usr/share/man/man1/file.1.gz: ASCII troff or preprocessor input text \
(gzip compressed data, from Unix, max compression)
Systemy plików i ich użycie: mount, df i du
Polecenie
mount
pokazuje, który system plików (urządzenie lub typ) jesy podmontowany przy jakim punkcie:
zacker@linux:~> mount
/dev/hda3 on / type reiserfs (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/hda1 on /boot type ext2 (rw,acl,user_xattr)
/dev/hda4 on /local type reiserfs (rw,acl,user_xattr)
/dev/fd0 on /media/floppy type subfs (rw,nosuid,nodev,noatime,fs=floppyfss,p
Otrzymujemy informację o totalnym użyciu systemów plików z poleceniem
df
Parametr –h (lub –human-readable) przekształca dane wyjściowe w formę zrozumiałą dla człowieka:
zacker@linux:~> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda3 11G 3.2G 6.9G 32% /
udev 252M 104K 252M 1% /dev
/dev/hda1 16M 6.6M 7.8M 46% /boot
/dev/hda4 27G 34M 27G 1% /local
Wyświetla cały rozmiar wszystkich plików w danym katalogu i jego podkatalogi z poleceniem
du
Parametr –s ukrywa dane wyjściowe szczegółowej informacji. Opcja –h znowu przekształca dane w forme odczytywalną dla człowieka:
zacker@linux:~> du -sh /local
1.7M /local
Dodatkowe informacje o binariach ELF
Czytamy zawartość binariów przy pomocy programu użytkowego readelf. To nawet pracuje z plikami elf, które były zbudowane dla innej architektury hardware:
zacker@linux:~> readelf –file-header /bin/ls
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2’s complement, little endian
Version: 1 (current)
OS/ABI: UNIX – System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x8049b60
Start of program headers: 52 (bytes into file)
Start of section headers: 81112 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 9
Size of section headers: 40 (bytes)
Number of section headers: 30
Section header string table index: 29
Właściwości pliku: stat
Polecenie
stat
wyświetla właściwości:
zacker@linux:~> stat /etc/profile
File: `/etc/profile’
Size: 7930 Blocks: 16 IO Block: 4096 regular file
System Monitoring Utilities 327
Device: 303h/771d Inode: 40657 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2006-01-06 16:45:43.000000000 +0100
Modify: 2005-11-21 14:54:35.000000000 +0100
Change: 2005-12-19 09:51:04.000000000 +0100
Parametr –filesystem oddaje szczegóły właściwości systemu plików, w którym dany plik jest zlokalizowany:
zacker@linux:~> stat /etc/profile –filesystem
File: “/etc/profile”
ID: 0 Namelen: 255 Type: reiserfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 2622526 Free: 1809771 Available: 1809771
Inodes: Total: 0 Free: 0
Informacja hardware
Zasoby PCI: lspci
Polecenie
lspci
listuje zasoby PCI:
linux:~ # lspci
00:00.0 Host bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE \
DRAM Controller/Host-Hub Interface (rev 01)
00:01.0 PCI bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE \
Host-to-AGP Bridge (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM \
(ICH4/ICH4-M) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 81)
00:1f.0 ISA bridge: Intel Corporation 82801DB/DBL (ICH4/ICH4-L) \
LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801DB (ICH4) IDE \
Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) \
SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) AC’97 Audio Controller (rev 01)
01:00.0 VGA compatible controller: Matrox Graphics, Inc. G400/G450 (rev 85)
02:08.0 Ethernet controller: Intel Corporation 82801DB PRO/100 VE (LOM) \
Ethernet Controller (rev 81)
Używając opcji –v mamy bardziej szczegółowe listowanie:
linux:~ # lspci
[…]
02:08.0 Ethernet controller: Intel Corporation 82801DB PRO/100 VE (LOM)\
Ethernet Controller (rev 81)
Subsystem: Fujitsu Siemens Computer GmbH: Unknown device 1001
Flags: bus master, medium devsel, latency 66, IRQ 11
Memory at d1000000 (32-bit, non-prefetchable) [size=4K]
I/O ports at 3000 [size=64]
Capabilities: [dc] Power Management version 2
Informacje o rozdzieleniu nazwy urządzenia jest otrzymywana z pliku /usr/share/pci.ids. ID nielistowane w tym pliku jest oznaczane “Unknown device.”
Parametr –vv daje całą informację, która może być zapytana przez program. Aby zobaczyć czysto numeryczne wartości, używamy parametru –n.
Urządzenia USB: lsusb
Polecenie
lsusb listuje wszystkie urzadzenia USB. Z opcją –v wyświetla bardziej szczegółową listę. Szczegółowa informacja jest odczytywana z katalogu /proc/bus/usb/. Dane wyjściowe lsusb z dołączonymi tymi urządzeniami USB: hub, pamięć USB, twardy dysk i mysz.
linux:/ # lsusb
Bus 004 Device 007: ID 0ea0:2168 Ours Technology, Inc. Transcend JetFlash \
2.0 / Astone USB Drive
Bus 004 Device 006: ID 04b4:6830 Cypress Semiconductor Corp. USB-2.0 IDE \
Adapter
Bus 004 Device 005: ID 05e3:0605 Genesys Logic, Inc.
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 005: ID 046d:c012 Logitech, Inc. Optical Mouse
Bus 001 Device 001: ID 0000:0000
Informacje o Urządzeniu SCSI:scsiinfo
Polecenie
scsiinfo
listuje informacje o urządzeniu SCSI. Z opcja –l listuje wszystkie urządzenia SCSI znane dla SO (podobna informacja jest otrzymywana przez polecenie lsscsi). Dane wyjściowe dla
scsiinfo –i /dev/sda
które daje informacje o twardym dysku. Opcja –a daje nawet większą informację.
linux:/ # scsiinfo -i /dev/sda
Inquiry command
—————
Relative Address 0
Wide bus 32 0
Wide bus 16 1
Synchronous neg. 1
Linked Commands 1
Command Queueing 1
SftRe 0
Device Type 0
Peripheral Qualifier 0
Removable? 0
Device Type Modifier 0
ISO Version 0
ECMA Version 0
ANSI Version 3
AENC 0
TrmIOP 0
Response Data Format 2
Vendor: FUJITSU
Product: MAS3367NP
Revision level: 0104A0K7P43002BE
Opcja –d listuje defekty z dwoma tablicami złych bloków twardego dysku: pierwszy dostarczony przez sprzedawcę (manufacturer table) i drugi listuje złe bloki, które pojawiły się w operacji (grown table). Jeśli liczba wpisów w grown table wzrasta, może być dobrym pomysłem zastąpić dysk twardy.
Praca w sieci
Pokazuje stan sieci: netstat
netstat pokazuje połączenia, tablice routingu (-r), interfejsy (-i), maskowane połączenia (-M), członkowstwo multicast (-g) i statystyki (-s).
zacker@linux:~> netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.22.0 * 255.255.254.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 0 0 0 eth0
loopback * 255.0.0.0 U 0 0 0 lo
default 192.168.22.254 0.0.0.0 UG 0 0 0 eth0
zacker@linux:~> netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 1624507 129056 0 0 7055 0 0 0 BMNRU
lo 16436 0 23728 0 0 0 23728 0 0 0 LRU
Kiedy wyświetlamy połączenia sieciowe lub statystyki, możemy okreslić typ socketu dla wyświetlenia: TCP (-t), UDP (-u) lub surowy (-r). Opcja –p pokazuje PID i nazwę programu, do którego każdy socket należy.
Poniższy przykład listuje połączenia TCP i programy używające te połączenia:
linux:~ # netstat -t -p
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Pro
tcp 0 0 linux:33513 http://www.novell.com:www-http ESTABLISHED 6862/fi
tcp 0 352 linux:ssh linux2.:trc-netpoll ESTABLISHED 19422/s
tcp 0 0 localhost:ssh localhost:17828 ESTABLISHED –
W poniższej statystyce dla protokołu TCP jest wyświetlane:
zacker@linux:~> netstat -s -t
Tcp:
2427 active connections openings
2374 passive connection openings
0 failed connection attempts
0 connection resets received
1 connections established
27476 segments received
26786 segments send out
54 segments retransmited
0 bad segments received.
6 resets sent
[…]
TCPAbortOnLinger: 0
TCPAbortFailed: 0
TCPMemoryPressures: 0
System Plików /proc
System plików /proc jest tak naprawdę pseudo systemem plików, gdzie kernel rezerwuje ważne ważne informacje w formie plików wirtualnych. Np. wyświetla typ CPU z poleceniem:
zacker@linux:~> cat /proc/cpuinfo
processor : 0
System Monitoring Utilities 331
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : AMD Athlon(tm) XP 2400+
stepping : 1
cpu MHz : 2009.343
cache size : 256 KB
fdiv_bug : no
[…]
Zapytanie o allokację i użycie przerywań z poleceniem:
zacker@linux:~> cat /proc/interrupts
CPU0
0: 3577519 XT-PIC timer
1: 130 XT-PIC i8042
2: 0 XT-PIC cascade
5: 564535 XT-PIC Intel 82801DB-ICH4
7: 1 XT-PIC parport0
8: 2 XT-PIC rtc
9: 1 XT-PIC acpi, uhci_hcd:usb1, ehci_hcd:usb4
10: 0 XT-PIC uhci_hcd:usb3
11: 71772 XT-PIC uhci_hcd:usb2, eth0
12: 101150 XT-PIC i8042
14: 33146 XT-PIC ide0
15: 149202 XT-PIC ide1
NMI: 0
LOC: 0
ERR: 0
MIS: 0
Pewne z ważnych plików i ich zawartości są:
/proc/devices- dostępne urządzenia
/proc/modules- załadowane moduły kernela
/proc/cmdline- wiersz polecenia kernela
/proc/meminfo- szczegółowa informacja o użyciu pamięci
/proc/config.gz- skompresowany w gzip plik konfiguracyjny bieżąco działającego kernela
Dodatkowe informacje dostępne w pliku tekstowym
/usr/src/linux/Documentation/filesystems/proc.txt
Znalezienie informacji o procesach działających bieżąco w katalogach /proc/NNN, gdzie NNN jest numerem procesu (PID) stosownych procesów.
Każdy proces może znaleźć swoje własne cechy charakterystyczne w /proc/self/
:
zacker@linux:~> ls -l /proc/self
lrwxrwxrwx 1 root root 64 2006-01-09 13:03 /proc/self -> 5356
zacker@linux:~> ls -l /proc/self/
total 0
dr-xr-xr-x 2 zacker users 0 2006-01-09 17:04 attr
-r——– 1 zacker users 0 2006-01-09 17:04 auxv
-r–r–r– 1 zacker users 0 2006-01-09 17:04 cmdline
lrwxrwxrwx 1 zacker users 0 2006-01-09 17:04 cwd -> /home/zacker
-r——– 1 zacker users 0 2006-01-09 17:04 environ
lrwxrwxrwx 1 zacker users 0 2006-01-09 17:04 exe -> /bin/ls
dr-x—— 2 zacker users 0 2006-01-09 17:04 fd
-rw-r–r– 1 zacker users 0 2006-01-09 17:04 loginuid
-r–r–r– 1 zacker users 0 2006-01-09 17:04 maps
-rw——- 1 zacker users 0 2006-01-09 17:04 mem
-r–r–r– 1 zacker users 0 2006-01-09 17:04 mounts
-rw-r–r– 1 zacker users 0 2006-01-09 17:04 oom_adj
-r–r–r– 1 zacker users 0 2006-01-09 17:04 oom_score
lrwxrwxrwx 1 zacker users 0 2006-01-09 17:04 root -> /
-rw——- 1 zacker users 0 2006-01-09 17:04 seccomp
-r–r–r– 1 zacker users 0 2006-01-09 17:04 smaps
-r–r–r– 1 zacker users 0 2006-01-09 17:04 stat
-r–r–r– 1 zacker users 0 2006-01-09 17:04 statm
-r–r–r– 1 zacker users 0 2006-01-09 17:04 status
dr-xr-xr-x 3 zacker users 0 2006-01-09 17:04 task
-r–r–r– 1 zacker users 0 2006-01-09 17:04 wchan
Wyznaczenie adresu plików wykonywalnych i bibliotek jest zawarte w pliku maps:
zacker@linux:~> cat /proc/self/maps
08048000-0804c000 r-xp 00000000 03:03 17753 /bin/cat
0804c000-0804d000 rw-p 00004000 03:03 17753 /bin/cat
0804d000-0806e000 rw-p 0804d000 00:00 0 [heap]
b7d27000-b7d5a000 r–p 00000000 03:03 11867 /usr/lib/locale/en_GB.utf8/
b7d5a000-b7e32000 r–p 00000000 03:03 11868 /usr/lib/locale/en_GB.utf8/
b7e32000-b7e33000 rw-p b7e32000 00:00 0
b7e33000-b7f45000 r-xp 00000000 03:03 8837 /lib/libc-2.3.6.so
b7f45000-b7f46000 r–p 00112000 03:03 8837 /lib/libc-2.3.6.so
b7f46000-b7f48000 rw-p 00113000 03:03 8837 /lib/libc-2.3.6.so
b7f48000-b7f4c000 rw-p b7f48000 00:00 0
b7f52000-b7f53000 r–p 00000000 03:03 11842 /usr/lib/locale/en_GB.utf8/
[…]
b7f5b000-b7f61000 r–s 00000000 03:03 9109 /usr/lib/gconv/gconv-module
b7f61000-b7f62000 r–p 00000000 03:03 9720 /usr/lib/locale/en_GB.utf8/
b7f62000-b7f76000 r-xp 00000000 03:03 8828 /lib/ld-2.3.6.so
b7f76000-b7f78000 rw-p 00013000 03:03 8828 /lib/ld-2.3.6.so
bfd61000-bfd76000 rw-p bfd61000 00:00 0 [stack]
ffffe000-fffff000 —p 00000000 00:00 0 [vdso]
procinfo
Ważne informacje z systemu plików /proc jest streszczone przez polecenie procinfo:
zacker@linux:~> procinfo
Linux 2.6.15-rc5-git3-2-default (pagantempereta@buildhost) (gcc 4.1.0 20051129) #1 Wed
Memory: Total Used Free Shared Buffers
Mem: 515584 509472 6112 0 73024
Swap: 658656 0 658656
Bootup: Mon Jan 9 12:59:08 2006 Load average: 0.10 0.04 0.05 1/86 5406
user : 0:02:07.98 0.8% page in : 442638 disk 1: 20125r 134
nice : 0:02:20.91 0.9% page out: 134950
system: 0:00:42.93 0.3% page act: 70577
IOwait: 0:01:25.40 0.6% page dea: 11696
hw irq: 0:00:08.94 0.1% page flt: 1423622
sw irq: 0:00:01.29 0.0% swap in : 0
idle : 4:06:30.54 97.3% swap out: 0
uptime: 4:13:20.72 context : 3813145
irq 0: 3799268 timer irq 8: 2 rtc
irq 1: 130 i8042 irq 9: 1 acpi, uhci_hcd:usb
irq 2: 0 cascade [4] irq 10: 0 uhci_hcd:usb3
irq 3: 8 irq 11: 75905 uhci_hcd:usb2, eth
irq 4: 8 irq 12: 101150 i8042
irq 5: 564535 Intel 82801DB-ICH4 irq 14: 33733 ide0
irq 6: 9 irq 15: 157045 ide1
irq 7: 1 parport0 [3]
Aby zobaczyć całą informację używamy parametru –a. Parametr –nN daje uaktualnienie informacji co N sekund. W tej sytuacji zakończenie programu przez naciśnięcie Q. Domyślnie zbiorcze wartości są wyświetlane. Parametr –d daje zróżnicowane wartości. procinfo -dn5 wyświetla, które się zmieniły w ciągu ostatnich pięciu sekund:
Procesy
Międzyprocesowa komunikacja: ipcs
Polecenie ipcs daje listę bieżących zasobów IPC w użyciu:
—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0x00000000 58261504 zacker 600 393216 2 dest
0x00000000 58294273 zacker 600 196608 2 dest
0x00000000 83886083 zacker 666 43264 2
0x00000000 83951622 zacker 666 192000 2
0x00000000 83984391 zacker 666 282464 2
0x00000000 84738056 root 644 151552 2 dest
—— Semaphore Arrays ——–
key semid owner perms nsems
0x4d038abf 0 zacker 600 8
—— Message Queues ——–
key msqid owner perms used-bytes messages
Lista procesów: ps
Polecenie ps daje listę procesów. Większość parametrów musi być napisana bez znaku minusa (-). W ps –help krótka pomoc lub man page dla rozszerzenia help.
Aby wylistować wszystkie procesy z użytkownikiem i informacjami wiersza polecenia używamy ps axu:
zacker@linux:~> ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 696 272 ? S 12:59 0:01 init [5]
root 2 0.0 0.0 0 0 ? SN 12:59 0:00 [ksoftirqd
root 3 0.0 0.0 0 0 ? S< 12:59 0:00 [events
[…]
zacker 4047 0.0 6.0 158548 31400 ? Ssl 13:02 0:06 mono-best
zacker 4057 0.0 0.7 9036 3684 ? Sl 13:02 0:00 /opt/gnome
zacker 4067 0.0 0.1 2204 636 ? S 13:02 0:00 /opt/gnome
zacker 4072 0.0 1.0 15996 5160 ? Ss 13:02 0:00 gnome-scre
zacker 4114 0.0 3.7 130988 19172 ? SLl 13:06 0:04 sound-juic
zacker 4818 0.0 0.3 4192 1812 pts/0 Ss 15:59 0:00 -bash
zacker 4959 0.0 0.1 2324 816 pts/0 R+ 16:17 0:00 ps axu
Aby sprawdzić jak wiele procesów sshd jest uruchomionych używamy opcji –p razem z poleceniem pidof, co listuje ID procesów danych procesów.
To check how many sshd processes are running, use the option -p together with the
command pidof, which lists the process IDs of the given processes.
zacker@linux:~> ps -p `pidof sshd`
PID TTY STAT TIME COMMAND
3524 ? Ss 0:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
4813 ? Ss 0:00 sshd: zacker [priv]
4817 ? R 0:00 sshd: zacker@pts/0
Lista procesu może być sformatowana zgodnie z naszymi potrzebami. Opcja –L listuje wszystkie słowa kluczowe. Wprowadzamy poniższe polecenie, aby wypuścić listę wszystkich procesów sortowanych pod względem zużycia pamięci:
zacker@linux:~> ps ax –format pid,rss,cmd –sort rss
PID RSS CMD
2 0 [ksoftirqd/0]
3 0 [events/0]
4 0 [khelper]
5 0 [kthread]
11 0 [kblockd/0]
12 0 [kacpid]
472 0 [pdflush]
473 0 [pdflush]
[…]
4028 17556 nautilus –no-default-window –sm-client-id default2
4118 17800 ksnapshot
4114 19172 sound-juicer
4023 25144 gnome-panel –sm-client-id default1
4047 31400 mono-best –debug /usr/lib/beagle/Best.exe –autostarted
3973 31520 mono-beagled –debug /usr/lib/beagle/BeagleDaemon.exe –bg –aut
Drzewo procesów: pstree
Polecenie pstree daje listę procesów w formie drzewa:
zacker@linux:~> pstree
init-+-NetworkManagerD
|-acpid
|-3*[automount]
|-cron
|-cupsd
|-2*[dbus-daemon]
|-dbus-launch
|-dcopserver
|-dhcpcd
|-events/0
|-gpg-agent
|-hald-+-hald-addon-acpi
| `-hald-addon-stor
|-kded
|-kdeinit-+-kdesu—su—kdesu_stub—yast2—y2controlcenter
| |-kio_file
| |-klauncher
| |-konqueror
| |-konsole-+-bash—su—bash
| | `-bash
| `-kwin
|-kdesktop—kdesktop_lock—xmatrix
|-kdesud
|-kdm-+-X
| `-kdm—startkde—kwrapper
[…]
Parametr –p dodaje ID procesu do danej nazwy. Aby mieć też wyświetlony wiersz polecenia, używamy parametru –a:
Procesy: top
Polecenie top, które jest za “table of processes,” wyświetla listę procesów, które są odświeżane co dwie sekundy. Aby zakończyć, naciskamy Q. Parametr –n 1 kończy program po pojedynczym wyświetleniu listy procesów. Przykład danych wyjściowych polecenia –n 1:
zacker@linux:~> top -n 1
top – 17:06:28 up 2:10, 5 users, load average: 0.00, 0.00, 0.00
Tasks: 85 total, 1 running, 83 sleeping, 1 stopped, 0 zombie
Cpu(s): 5.5% us, 0.8% sy, 0.8% ni, 91.9% id, 1.0% wa, 0.0% hi, 0.0% si
Mem: 515584k total, 506468k used, 9116k free, 66324k buffers
Swap: 658656k total, 0k used, 658656k free, 353328k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 16 0 700 272 236 S 0.0 0.1 0:01.33 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 10 -5 0 0 0 S 0.0 0.0 0:00.27 events/0
4 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 khelper
5 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
11 root 10 -5 0 0 0 S 0.0 0.0 0:00.05 kblockd/0
12 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid
472 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
473 root 15 0 0 0 0 S 0.0 0.0 0:00.06 pdflush
475 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0
474 root 15 0 0 0 0 S 0.0 0.0 0:00.07 kswapd0
681 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 kseriod
839 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 reiserfs/0
923 root 13 -4 1712 552 344 S 0.0 0.1 0:00.67 udevd
1343 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd
1587 root 20 0 0 0 0 S 0.0 0.0 0:00.00 shpchpd_event
1746 root 15 0 0 0 0 S 0.0 0.0 0:00.00 w1_control
1752 root 15 0 0 0 0 S 0.0 0.0 0:00.00 w1_bus_master1
2151 root 16 0 1464 496 416 S 0.0 0.1 0:00.00 acpid
2165 messageb 16 0 3340 1048 792 S 0.0 0.2 0:00.64 dbus-daemon
2166 root 15 0 1840 752 556 S 0.0 0.1 0:00.01 syslog-ng
2171 root 16 0 1600 516 320 S 0.0 0.1 0:00.00 klogd
2235 root 15 0 1736 800 652 S 0.0 0.2 0:00.10 resmgrd
2289 root 16 0 4192 2852 1444 S 0.0 0.6 0:02.05 hald
2403 root 23 0 1756 600 524 S 0.0 0.1 0:00.00 hald-addon-acpi
2709 root 19 0 2668 1076 944 S 0.0 0.2 0:00.00 NetworkManagerD
2714 root 16 0 1756 648 564 S 0.0 0.1 0:00.56 hald-addon-stor
Jeśli naciśniemy klawisz F, kiedy top jest uruchomiony, otwiera się menu z którym robimy szczegółowe zmiany w formacie danych wyjściowych.
Parametr -U UID monitoruje tylko procesy skojarzone z poszczególnym użytkownikiem. Zastępujemy UID przez ID użytkownika danego użytkownika. top –U `id -u` zwraca UID użytkownika na bazie nazwy użytkownika i wyświetla jego procesy.
Informacje systemowe
System Activity Information: sar
Aby użyć sar, sadc (system activity data collector) musi być uruchomiony. Sprawdzamy jego san lub startujemy to przez rcsysstat {start|status}.
sar może generować szczegółowe raporty dla prawie wszystkich aktywności SO, m.in. CPU, pamięci, IRQ, IO lub pracy w sieci. Ma wiele opcji, które patrzymy na stronach man pages.
Użycie pamięci: free
Program użytkowy free bada użycie RAM. Szczegóły zarówno wolnej jak i zajętej pamięci i obszar swap. Jest to nieco mylące, jesli chcemy wiedzieć ile jest w danej chwili uzywanej RAM. Te informacje można znaleźć w /proc/meminfo. Teraz o to nie trzeba siemartwić, bo są nowoczesne SOs. Wolna pamięć źle sie odnosi do Linuxa. W rezultacie Linux zawsze balansuje caches bez uwzględniania wolnej i nieużywanje pamięci. Zasadniczo kernel nie ma bezpośredniej wiedzy o danych aplikacji i uzytkownika. Zamiast tego zarządza danymi aplikacji i uzytkownika w page cache. Jeśli kończy się pamięć, części tego są zapisywane do partycji swap lub do plików, z których możemy początkowo je odczytywać z pomocą polecenia mmap (man mmap).
Kernel też zawiera caches takie jak slab cache, gdzie są gromadzone caches używane do dostępu do sieci. To może wyjasniać róznice między licznikami /proc/meminfo. Większość, ale nie wszystkie, moga byćdostępne przez /proc/slabinfo.
zacker@linux:~> free
total used free shared buffers cached
Mem: 515584 501704 13880 0 73040 334592
-/+ buffers/cache: 94072 421512
Swap: 658656 0 658656
Opcje -b,-k,-m,-g pokazują kolejno w bajtach (KB, MB, lub GB). Parametr –d (delay) zapewnia, że dane wyjściowse są odświeżane co ileś tam sekund. Np.
free -d 1.5
daje uaktualnienie co każde 1.5 sekundy.
Pliki dostępu użytkownika: fuser
Może być użyteczne ustalenie, do jakich procesów lub jacy użytkownicy mają dostęp do jakich plików. Przypuśćmy np., że chcemy odmontować system plików zamontowany przy /mnt. Umount zwraca, że “device is busy.” Polecenie fuser może wobec tego być użyte do ustalenia, jakie procesy mają dostęp do urządzenia:
zacker@linux:~> fuser -v /mnt/*
USER PID ACCESS COMMAND
/mnt/notes.txt zacker 26597 f…. less
FUSER(1) User Commands FUSER(1)
NAME
fuser – identify processes using files or sockets
SYNOPSIS
fuser [-a|-s|-c] [-4|-6] [-n space ] [-k [-i] [-w] [-signal ] ]
[-muvf] name …
fuser -l
fuser -V
DESCRIPTION
fuser displays the PIDs of processes using the specified files or file
systems. In the default display mode, each file name is followed by a
letter denoting the type of access:
c current directory.
e executable being run.
f open file. f is omitted in default display mode.
F open file for writing. F is omitted in default display
mode.
r root directory.
m mmap’ed file or shared library.
fuser returns a non-zero return code if none of the specified files is
accessed or in case of a fatal error. If at least one access has been
found, fuser returns zero.
In order to look up processes using TCP and UDP sockets, the corre-
sponding name space has to be selected with the -n option. By default
fuser will look in both IPv6 and IPv4 sockets. To change the default,
behavior, use the -4 and -6 options. The socket(s) can be specified by
the local and remote port, and the remote address. All fields are
optional, but commas in front of missing fields must be present:
[lcl_port][,[rmt_host][,[rmt_port]]]
Either symbolic or numeric values can be used for IP addresses and port
numbers.
fuser outputs only the PIDs to stdout, everything else is sent to
stderr.
OPTIONS
-a Show all files specified on the command line. By default, only
files that are accessed by at least one process are shown.
-c Same as -m option, used for POSIX compatibility.
-f Silently ignored, used for POSIX compatibility.
-k Kill processes accessing the file. Unless changed with -signal,
SIGKILL is sent. An fuser process never kills itself, but may
kill other fuser processes. The effective user ID of the process
executing fuser is set to its real user ID before attempting to
kill.
-i Ask the user for confirmation before killing a process. This
option is silently ignored if -k is not present too.
-w Kill only processes which have write access. This option is
silently ignored if -k is not present too.
-l List all known signal names.
-m name specifies a file on a mounted file system or a block device
that is mounted. All processes accessing files on that file sys-
tem are listed. If a directory file is specified, it is auto-
matically changed to name/. To use any file system that might be
mounted on that directory. Please note that due the required
device ID comparision all mounted file systems the stat(2) sys-
tem call will applied to every file system even on network file
system (NFS). If the NFS server does not respond or the network
is down the stat(2) may hang forever.
-n space
Select a different name space. The name spaces file (file names,
the default), udp (local UDP ports), and tcp (local TCP ports)
are supported. For ports, either the port number or the symbolic
name can be specified. If there is no ambiguity, the shortcut
notation name/Ispace (e.g. 80/tcp ) can be used.
-s Silent operation. -u and -v are ignored in this mode. -a must
not be used with -s.
-signal
Use the specified signal instead of SIGKILL when killing pro-
cesses. Signals can be specified either by name (e.g. -HUP) or
by number (e.g. -1). This option is silently ignored if the -k
option is not used.
-u Append the user name of the process owner to each PID.
-v Verbose mode. Processes are shown in a ps-like style. The fields
PID, USER and COMMAND are similar to ps. ACCESS shows how the
process accesses the file. If the access is by the kernel (e.g.
in the case of a mount point, a swap file, etc.), kernel is
shown instead of the PID.
-V Display version information.
-4 Search only for IPv4 sockets. This option must not be used with
the -6 option and only has an effect with the tcp and udp names-
paces.
-6 Search only for IPv6 sockets. This option must not be used with
the -4 option and only has an effect with the tcp and udp names-
paces.
– Reset all options and set the signal back to SIGKILL.
FILES
/proc location of the proc file system
EXAMPLES
fuser -km /home kills all processes accessing the file system /home in
any way.
if fuser -s /dev/ttyS1; then :; else something; fi invokes something if
no other process is using /dev/ttyS1.
fuser telnet/tcp shows all processes at the (local) TELNET port.
RESTRICTIONS
Processes accessing the same file or file system several times in the
same way are only shown once.
If the same object is specified several times on the command line, some
of those entries may be ignored.
fuser may only be able to gather partial information unless run with
privileges. As a consequence, files opened by processes belonging to
other users may not be listed and executables may be classified as
mapped only.
Installing fuser SUID root will avoid problems associated with partial
information, but may be undesirable for security and privacy reasons.
udp and tcp name spaces, and UNIX domain sockets can’t be searched with
kernels older than 1.3.78.
udp and tcp currently work with IPv6 and IPv4, but the address fields
can only be IPv4 addresses.
Accesses by the kernel are only shown with the -v option.
The -k option only works on processes. If the user is the kernel, fuser
will print an advice, but take no action beyond that.
BUGS
fuser -m /dev/sgX will show (or kill with the -k flag) all processes,
even if you don’t have that device configured. There may be other
devices it does this for too.
fuser -m name may hang forever if there are NFS file systems mounted
and one of the NFS servers do not respond or the corresponding network
is down.
fuser cannot report on any processes that it doesn’t have permission to
look at the file descriptor table for. The most common time this prob-
lem occurs is when looking for TCP or UDP sockets when running fuser as
a non-root user. In this case fuser will report no access
AUTHORS
Werner Almesberger <werner@almesberger.net>
Craig Small <csmall@small.dropbear.id.au>
SEE ALSO
kill(1), killall(1), lsof(8), ps(1), kill(2).
Linux 2005-11-05 FUSER(1)
Idąc za zakończeniem procesu less, który działa na innym terminalu, system plików może być odmontowany z sukcesem.
Ring Buffer kernela: dmesg
Kernel Linuxa trzyma pewne wiadomości w ring buffer. Aby przejrzeć te wiadomości, wprowadzamy dmesg:
$ dmesg
[…]
end_request: I/O error, dev fd0, sector 0
subfs: unsuccessful attempt to mount media (256)
e100: eth0: e100_watchdog: link up, 100Mbps, half-duplex
NET: Registered protocol family 17
IA-32 Microcode Update Driver: v1.14 <tigran@veritas.com>
microcode: CPU0 updated from revision 0xe to 0x2e, date = 08112004
IA-32 Microcode Update Driver v1.14 unregistered
bootsplash: status on console 0 changed to on
NET: Registered protocol family 10
Disabled Privacy Extensions on device c0326ea0(lo)
IPv6 over IPv4 tunneling driver
powernow: This module only works with AMD K7 CPUs
bootsplash: status on console 0 changed to on
Starsze wydarzenia są logowane w plikach /var/log/messages i /var/log/warn.
Lista otwartych plików: lsof
Aby przejrzeć listę otwartych plików dla procesu z ID procesu (PID), używamy –p. Np., aby przejrzeć wszystkie pliki używane przez bieżący shell, wprowadzamy:
zacker@linux:~> lsof -p $$
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 5552 zacker cwd DIR 3,3 1512 117619 /home/zacker
bash 5552 zacker rtd DIR 3,3 584 2 /
bash 5552 zacker txt REG 3,3 498816 13047 /bin/bash
bash 5552 zacker mem REG 0,0 0 [heap] (stat: No such
bash 5552 zacker mem REG 3,3 217016 115687 /var/run/nscd/passwd
bash 5552 zacker mem REG 3,3 208464 11867 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 882134 11868 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 1386997 8837 /lib/libc-2.3.6.so
bash 5552 zacker mem REG 3,3 13836 8843 /lib/libdl-2.3.6.so
bash 5552 zacker mem REG 3,3 290856 12204 /lib/libncurses.so.5.5
bash 5552 zacker mem REG 3,3 26936 13004 /lib/libhistory.so.5.1
bash 5552 zacker mem REG 3,3 190200 13006 /lib/libreadline.so.5.
bash 5552 zacker mem REG 3,3 54 11842 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 2375 11663 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 290 11736 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 52 11831 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 34 11862 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 62 11839 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 127 11664 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 56 11735 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 23 11866 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 21544 9109 /usr/lib/gconv/gconv-m
bash 5552 zacker mem REG 3,3 366 9720 /usr/lib/locale/en_GB.
bash 5552 zacker mem REG 3,3 97165 8828 /lib/ld-2.3.6.so
bash 5552 zacker 0u CHR 136,5 7 /dev/pts/5
bash 5552 zacker 1u CHR 136,5 7 /dev/pts/5
bash 5552 zacker 2u CHR 136,5 7 /dev/pts/5
bash 5552 zacker 255u CHR 136,5 7 /dev/pts/5
Określona zmienna shell $$, której wartość jest ID procesu shella została użyta.
Polecenie lsof listuje wszystkie pliki aktualnie otwarte, kiedy używamy bez jakichkolwiek parametrów. Ponieważ jest zwykle tysiące otwartych plików listowanie wszystkich z nich jest rzadko użyteczne. Jednak lista wszystkich plików może być łączona z funkcjami wyszukiwania, aby generować użyteczne listy. Np. listuje wszystkie użyte właściwości urządzeń.
zacker@linux:~> lsof | grep CHR
bash 3838 zacker 0u CHR 136,0 2 /dev/pts/0
bash 3838 zacker 1u CHR 136,0 2 /dev/pts/0
bash 3838 zacker 2u CHR 136,0 2 /dev/pts/0
bash 3838 zacker 255u CHR 136,0 2 /dev/pts/0
bash 5552 zacker 0u CHR 136,5 7 /dev/pts/5
bash 5552 zacker 1u CHR 136,5 7 /dev/pts/5
bash 5552 zacker 2u CHR 136,5 7 /dev/pts/5
bash 5552 zacker 255u CHR 136,5 7 /dev/pts/5
X 5646 root mem CHR 1,1 1006 /dev/mem
lsof 5673 zacker 0u CHR 136,5 7 /dev/pts/5
lsof 5673 zacker 2u CHR 136,5 7 /dev/pts/5
grep 5674 zacker 1u CHR 136,5 7 /dev/pts/5
grep 5674 zacker 2u CHR 136,5 7 /dev/pts/5
Kernel i przegląd ciągu wydarzeń udev: udevmonitor
udevmonitor nasłuchuje kernela uevents i events wysłanych przez regułę udev i wyświetla ścieżkę urządzenia (DEVPATH) zdarzenia w konsoli. To jest ciąg zdarzeń podczas podłączenia pamięci USB:
UEVENT[1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2
UEVENT[1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2
UEVENT[1138806687] add@/class/scsi_host/host4
UEVENT[1138806687] add@/class/usb_device/usbdev4.10
UDEV [1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2
UDEV [1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2
UDEV [1138806687] add@/class/scsi_host/host4
UDEV [1138806687] add@/class/usb_device/usbdev4.10
UEVENT[1138806692] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2
UEVENT[1138806692] add@/block/sdb
UEVENT[1138806692] add@/class/scsi_generic/sg1
UEVENT[1138806692] add@/class/scsi_device/4:0:0:0
UDEV [1138806693] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2
UDEV [1138806693] add@/class/scsi_generic/sg1
UDEV [1138806693] add@/class/scsi_device/4:0:0:0
UDEV [1138806693] add@/block/sdb
UEVENT[1138806694] add@/block/sdb/sdb1
UDEV [1138806694] add@/block/sdb/sdb1
UEVENT[1138806694] mount@/block/sdb/sdb1
UEVENT[1138806697] umount@/block/sdb/sdb1
Serwer zasobów uzyty przez Klienta X11: xrestop
xrestop dostarcza statystyk dla każdego podłączonego zasobu po stronie serwera klienta X11. Dane wyjściowe są bardzo podobne do top:
xrestop – Display: localhost:0
Monitoring 40 clients. XErrors: 0
Pixmaps: 42013K total, Other: 206K total, All: 42219K total
System Monitoring Utilities 341
res-base Wins GCs Fnts Pxms Misc Pxm mem Other Total PID Identifier
3e00000 385 36 1 751 107 18161K 13K 18175K ? NOVELL: SU
4600000 391 122 1 1182 889 4566K 33K 4600K ? amaroK – S
1600000 35 11 0 76 142 3811K 4K 3816K ? KDE Deskto
3400000 52 31 1 69 74 2816K 4K 2820K ? Linux Shel
2c00000 50 25 1 43 50 2374K 3K 2378K ? Linux Shel
2e00000 50 10 1 36 42 2341K 3K 2344K ? Linux Shel
2600000 37 24 1 34 50 1772K 3K 1775K ? Root – Kon
4800000 37 24 1 34 49 1772K 3K 1775K ? Root – Kon
2a00000 209 33 1 323 238 1111K 12K 1123K ? Trekstor25
1800000 182 32 1 302 285 1039K 12K 1052K ? kicker
1400000 157 121 1 231 477 777K 18K 796K ? kwin
3c00000 175 36 1 248 168 510K 9K 520K ? de.comp.la
3a00000 326 42 1 579 444 486K 20K 506K ? [opensuse-
0a00000 85 38 1 317 224 102K 9K 111K ? Kopete
4e00000 25 17 1 60 66 63K 3K 66K ? YaST Contr
2400000 11 10 0 56 51 53K 1K 55K 22061 suseplugge
0e00000 20 12 1 50 92 50K 3K 54K 22016 kded
3200000 6 41 5 72 84 40K 8K 48K ? EMACS
2200000 54 9 1 30 31 42K 3K 45K ? SUSEWatche
4400000 2 11 1 30 34 34K 2K 36K 16489 kdesu
1a00000 255 7 0 42 11 19K 6K 26K ? KMix
3800000 2 14 1 34 37 21K 2K 24K 22242 knotify
1e00000 10 7 0 42 9 15K 624B 15K ? KPowersave
3600000 106 6 1 30 9 7K 3K 11K 22236 konqueror
2000000 10 5 0 21 34 9K 1K 10K ? klipper
3000000 21 7 0 11 9 7K 888B 8K ? KDE Wallet
Informacje o użytkowniku
Kto co robi: w
Z poleceniem w dowiadujemy się kto jest zalogowany do SO i co każdy użytkownik robi. Np.:
zacker@linux:~> w
16:33:03 up 3:33, 2 users, load average: 0.14, 0.06, 0.02
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
zacker :0 16:33 ?xdm? 9.42s 0.15s /bin/sh /opt/kde3/bin/startk
zacker pts/0 15:59 0.00s 0.19s 0.00s w
Jeśli jacykolwiek użytkownicy innych SO zalogowali się zdalnie, prametr –f pokazuje komputery z których oni uzyskali połączenie.
Czas i data
Pomiar czasu z time
Ustalenie spędzonego czasu przez polecenia z programem użytkowym time. Ten program użytkowy jest dostępny w dwóch wersjach: jako wbudowany w shell i jako program (/usr/bin/time).
zacker@linux:~> time find . > /dev/null
real 0m4.051s
user 0m0.042s
sys 0m0.205s
You can definitely see your skills in the work you write. The world hopes for more passionate writers like you who aren’t afraid to say how they believe. At all times follow your heart.
hello there and thanks in your information ? I’ve certainly picked up anything new from right here. I did alternatively experience some technical issues the usage of this website, since I skilled to reload the website a lot of occasions prior to I could get it to load correctly. I have been considering in case your web hosting is OK? Not that I’m complaining, but sluggish loading circumstances instances will often have an effect on your placement in google and could harm your high quality ranking if ads and marketing with Adwords. Anyway I’m including this RSS to my email and could glance out for much extra of your respective exciting content. Ensure that you update this once more soon..
Thanks! There are some problem with loading my website because there are a lot of heavy graphics. Maybe it should be lighter. However, it is not a problem for me.