Podstawy obsługi systemów z rodziny UNIX
Transkrypt
Podstawy obsługi systemów z rodziny UNIX
Marek Stępień Informatyka II Wydział Elektrotechniki i Automatyki Politechnika Opolska Podstawy obsługi systemów z rodziny UNIX 1. Historia Uniksa. AT&T UNIX, BSD, GNU i Linux. Programiści należących wówczas do AT&T Laboratoriów Bella (wśród nich m. in. Dennis Ritchie) stworzyli pod koniec lat sześćdziesiątych (latem 1969 r.) system operacyjny dla komputerów PDP-7, który nazwali UNIX. Założyli oni, że system powinien być prosty i elegancki, napisany w języku wysokiego poziomu, ma także pozwalać na wielokrotne wykorzystanie tego samego kodu. W tamtych czasach systemy operacyjne były duże objętościowo i napisane w języku assemblera. UNIX miał stosunkowo mało kodu assemblerowego – jądro systemu, pozostałe części zostały napisane w języku B. W latach 1972-1973 przepisano cały kod z języka B do nowo powstałego języka C. W roku 1979 udostępnione zostało Wydanie Siódme (V7) Uniksa, uznawane za “dziadka” współczesnych systemów uniksowych. Twórcy Uniksa od początku współpracowali ze środowiskiem akademickim. W pewnym momencie jednak ich drogi się rozeszły: na Uniwersytecie Kalifornijskim w Berkeley został stworzony nowy wariant Uniksa nazwany Berkeley Software Distribution (BSD), podczas gdy AT&T kontynuowała prace nad własną wersją (tzw. “System V”). Wersje te konkurowały ze sobą w latach osiemdziesiątych. Wydawać się mogło, że ostatecznie zwyciężył System V, gdyż większość jego architektury została uznana za standard. Niemniej jednak, SysV przejął z czasem wiele cech BSD. AT&T udzielało licencji na swojego Uniksa wielu producentom sprzętu, pojawiły się więc takie systemy jak HP-UX Hewletta-Packarda czy Sun Solaris, będące wariantami Systemu V. Wszystkie one stanowiły komercyjne i zamknięte rozwiązania. Proces komercjalizacji i utajniania kodu źródłowego nie podobał się wielu osobom. Jedną z nich był Richard Stallman z Politechniki w Massachusetts (MIT), twórca bardzo popularnego wśród programistów uniksowych edytora tekstu Emacs. W roku 1984 Stallman wpadł na pomysł stworzenia otwartej i dostępnej dla każdego wersji Uniksa, którą nazwał GNU (co jest rekursywnym akronimem od “GNU's Not Unix”). Prace nad GNU miała prowadzić założona przez Stallmana Fundacja na rzecz Swobodnego Oprogramowania (Free Software Foundation). Za “swobodne oprogramowanie” Stallman uważał takie programy, które można bez ograniczeń używać, modyfikować, kopiować i rozpowszechniać. Do początku lat 90. FSF miała już gotowe prawie wszystkie swobodne odpowiedniki zamkniętych narzędzi oryginalnego Uniksa. W skład GNU wchodził wspomniany wcześniej edytor Emacs, kompilator języka C (GCC, GNU C Compiler, obecnie pod nazwą GNU Compiler Collection) oraz podstawowe narzędzia linii poleceń (ulepszona powłoka Bourne'a - “Bourne-Again Shell” czyli bash, fileutils, binutils, textutils i inne). Jedynym brakującym elementem GNU było jądro, którego FSF nie udało się doprowadzić do pełnej funkcjonalności (z powodu przyjęcia zbyt ambitnych założeń projektowych). W roku 1991 student informatyki na Uniwesytecie Helsińskim Linus Torvalds opracował jądro systemu podobnego do Uniksa, które nazwał “Linux”. To przeznaczone dla komputerów PC 386 jądro dobrze współpracowało z elementami stworzonymi przez GNU oraz pochodzącymi z BSD. Torvalds rozpowszechnił swoje dzieło stosując warunki licencyjne projektu GNU – tzw. Ogólną Licencję Publiczną GNU. W ten sposób projekt GNU uzyskał ostatni brakujący element – jądro. Od tej chwili można mówić o systemie GNU z jądrem Linux (GNU/Linux). Często potocznie określa się ten system po prostu mianem “Linux”, choć warto pamiętać, że w typowej instalacji GNU/Linuksa więcej kodu pochodzi od twórców projektu GNU. Popularność GNU/Linuksa od początku lat 90 nieustannie wzrasta. Dystrybucje tego systemu wypierają z rynku komercyjne i drogie wersje Uniksa, od kilku lat GNU/Linux jest także najgroźniejszą konkurencją dla Windows Microsoftu. Warto też wspomnieć, że z systemu BSD równolegle do rozwoju Linuksa wykiełkowały FreeBSD, NetBSD i OpenBSD, będące również darmowymi i swobodnymi odmianami Uniksa. Największą popularność swobodne oprogramowanie przeżywa od kilku lat. Coraz więcej firm zaczyna otwierać źródła swojego software'u i wykorzystywać inne otwarte programy. Firma Apple pod koniec lat dziewięćdziesiątych praktycznie porzuciła rozwijany przez siebie system Mac OS Classic na rzecz zmodyfikowanej wersji FreeBSD z jądrem Mach. W ten sposób powstał Mac OS X – system łączący najlepsze cechy Uniksa z łatwością obsługi Mac OS. Dziesiąta wersja systemu operacyjnego Macintoshy jest więc jak najbardziej pełnoprawnym wariantem Uniksa. Współcześnie do zastosowań domowych z systemów uniksowych używa się głównie GNU/Linuksa i właśnie Mac OS X, choć liczba domowych użytkowników tego rodzaju systemów jest znacznie niższa niż Windows. Na serwerach systemy uniksowe (GNU/Linux, *BSD, Solaris, HP-UX, IRIX, AIX, UnixWare) mają olbrzymią przewagę nad produktami Microsoftu. Wiele elementów systemów uniksowych zostało ustandaryzowane normą IEEE – POSIX (Portable Operating System Interface). Środowisko linii poleceń w pewnym stopniu zgodnym z normą POSIX jest wykorzystywane także w systemach nieuniksowych. Jeśli ktoś posiada umiejętności poruszania się w Uniksie, nie będzie dla niego problemem odnalezienie się np. w dwóch systemach czasu rzeczywistego (QNX i BeOS). Środowisko GNU zostało także sportowane na platformę Windows (Cygwin), tak więc także pod Windows można sobie stworzyć “namiastkę Uniksa”. W dalszej części wykładu omówię środowisko linii poleceń Uniksa na przykładzie GNU/Linuksa. Warto jednak pamiętać, że współczesne uniksowe SO to nie tylko linia poleceń, ale znakomite środowiska graficzne – zwłaszcza Mac OS X a także dwa środowiska graficzne dla XWindow (Linux, BSD, Solaris) – Gnome i KDE. 2. Podstawowe operacje na konsoli Systemy uniksowe zazwyczaj startują domyślnie do konsoli tekstowej, choć w niektórych dystrybucjach GNU/Linuksa przeznaczonych do użytku domowego może od razu uruchamiać się środowisko graficzne. W takim przypadku należy albo przełączyć się na konsolę tekstową wciskając Ctrl-Alt-F1, lub uruchomić aplikację emulatora terminala, np. Gnome Terminal, Konsola KDE, XTerm lub ATerm. Użytkownicy Mac OS X nie mają dostępu do prawdziwej konsoli tekstowej, zmuszeni są więc uruchomić program Terminal. Linux dostarcza standardowo siedem wirtualnych konsoli tekstowych i trzy graficzne. Do przełączania się między nimi używamy kombinacji klawiszy Ctrl-AltF1/F2/F3/... - przy czym konsole 1-6 to konsole tekstowe, 7-9 – graficzne. Liczba konsoli może zostać zmieniona przez administratora. Po zalogowaniu się (podanie nazwy użytkownika i hasła) powinien pojawić się znak zachęty. W przypadku zwyczajnego użytkownika ma on postać symbolu $, w przypadku użytkownika root (administrator) – symbolu #. (Często w GNU/Linuksie bywa poprzedzony nazwą użytkownika i aktualnym katalogiem – nie jest to jednak reguła). Standardowa powłoka bash posiada historię poleceń, można więc przy użyciu klawiszy kursora wybierać spośród poprzednio wprowadzonych rozkazów. Struktura katalogów W uniksach cały system plików widoczny jest w postaci katalogów umieszczonych w wirtualnym katalogu “/”. Znajdziemy tu takie katalogi jak: /bin – zawierejący podstawowe poleceniakonsoli /etc – zawierający pliki konfiguracyjne systemu /dev – zawierający pliki urządzeń /lib – zawierający podstawowe biblioteki systemowe /tmp – zawierający pliki systemowe /usr – zawierający pliki i programy przeznaczone dla użytkowników, w niektórych systemach umieszczane są wewnątrz niego także katalogi domowe użytkowników. /var – zawierający m.in. logi systemowe oraz pliki używane przez tzw. Daemony, czyli aplikacje realizujące usługi systemowe (obsługa poczty, drukarki, /tmp – katalog plików tymczasowych W Linuksie znajdziemy także: /root – katalog domowy administratora /sbin – polecenia przeznaczone do użytku administratora /proc – wirtualny katalog zawierający wirtualne pliki z informacjami o stanie systemu i komputera /boot – zawierający m. in. informacje dla programu uruchamiającego jądro (LILO, Grub) /home – katalog zawierający katalogi domowe użytkowników Katalog /usr zawiera podobną strukturę jak / - znajdziemy w nim katalogi / usr/bin, /usr/lib, /usr/etc itp. Zazwyczaj w podkatalogach / umieszcza się najważniejsze dla funkcjonowania systemu programy i aplikacje, a w podkatalogach /usr – pozostałe. Pomoc systemowa Praktycznie każde polecenie posiada opcję - -help,wyświetlającą informacje o składni i dostępnych opcjach, np.: $ ls --help Dla większości poleceń istnieją tzw. strony podręcznika systemowego. Napisanie: $ man polecenie powinno wyświetlić stronę podręcznika na temat danego polecenia. Należy jednakże zdawać sobie sprawę, że w podręczniku znajdują się także np. opisy poleceń języka C czy opisy funkcji systemowych. Rozróżnia się wtedy polecenia po numerach rozdziału, pisząc: $ man nr_rozdziału polecenie Krótkie informacje o danym poleceniu możemy uzyskać pisząc: $ man polecenie Informacje o poleceniach zawierających w nazwie jakiś ciąg znaków dostaniemy pisząc: $ apropos ciąg_znaków Najbardziej szczegółowe informacje znajdziemy na tzw. stronach info. Wystarczy napisać: $ info polecenie by dowiedzieć się więcej o danym poleceniu. (Bardziej szczegółowo niż man polecenie). Aby opuścić przeglądarkę manuali lub stron info, wystarczy wcisnąć q. Polecenia związane z plikami i katalogami Jeśli przy znaku zachęty nie pojawia się informacja o aktualnym katalogu, możemy jego nazwę wyświetlić pisząc: $ pwd Do zmiany aktualnego katalogu służy polecenie cd o składni: $ cd nazwa_katalogu Uwaga: warto pamiętać, że w powłoce bash wciśnięcie tabulatora dokańcza nazwy plików. Pozwala to na szybsze wydawanie poleceń. Jeśli nie podamy parametru, polecenie cd przeniesie nas do naszego katalogu domowego. (Uwaga: jest to istotna różnica w stosunku do DOS/Windows – tam polecenie cd bez parametrów działało jak pwd). Jeśli chcemy przejść do katalogu nadrzędnego, napiszemy: $ cd .. Jeśli chcemy wydrukować zawartość danego katalogu, piszemy po prostu: $ ls nazwa_katalogu Jeśli pominiemy nazwę, ls wylistuje zawartość katalogu bieżącego. Polecenie to ma wiele parametrów, wśród najważniejszych warto wymienić: -a pokazuje wszystkie pliki, także “ukryte” (tzn. o nazwach rozpoczynających się od kropki) -l drukuje szczegółowe informacje o plikach (właściciel, prawa, daty modyfikacji, rozmiar) Opcje z jednym minusem i jedną literą można łączyć - “ls -a -l” odpowiada “ls -al”. Ciekawą opcją jest --color – jeśli dana wersja ls to obsługuje, różne rodzaje plików są odpowiednio kolorowane (inaczej katalogi, inaczej pliki zwykłe, wykonywalne, multimedialne etc.). Jeśli opcja ta jest domyślnie włączona, a nie chcemy kolorowania (przydatne np. przy pętli for) – ustawiamy ją na none (--color=none). Do usuwania plików służy polecenie rm: $ rm nazwa_pliku Zamiast nazwy pliku można zastosować symbole * i ?, Wówczas warto wymusić potwierdzanie usuwania każdego pliku: $ rm -i abc* Do usuwania pustych katalogów służy polecenie rmdir: $ rmdir nazwa_katalogu Jeśli katalog zawiera pliki lub katalogi – nie zostanie w takiej sytuacji usunięty. Do usuwania katalogów wraz z zawartością, stosujemy odpowiednie opcje polecenia rm: $ rm -rf nazwa_katalogu Jeśli chcemy założyć nowy katalog, korzystamy z polecenia mkdir: $ mkdir nazwa_katalogu Jeśli chcemy utworzyć całe drzewo katalogów, stosujemy opcję -p: $ mkdir -p raz/dwa/trzy/cztery Możemy także podać uprawnienia do tworzonego katalogu: $ mkdir katalog -m 770 Zostanie utworzony katalog z uprawnieniami odczytu, zapisu i wykonywania dla właściciela i grupy oraz bez uprawnień dla pozostałych użytkowników. Jeśli chcemy przenieść plik do innego katalogu, wykorzystujemy polecenie mv: $ mv plik katalog Podobnie postępujemy, gdy zmieniamy nazwę pliku: $ mv stara_nazwa nowa_nazwa Uwaga: jeśli plik nowa_nazwa istnieje – zostanie nadpisany bez ostrzeżenia. Ostrzeżenia można włączyć opcją -i. Innym rozwiązaniem jest tworzenie kopii zapasowej nadpisywanego pliku. Polecenie: $ mv -b jeden dwa spowoduje zmianę nazwy dwóch plików: “dwa” na “dwa~”, a “jeden” na “dwa”. Możemy jednocześnie przenieść plik do katalogu ze zmianą nazwy. Jeśli chcemy przenieść z bieżącego katalogu plik “abc” do katalogu “katalog”, zmieniając mu nazwę na “xyz” napiszemy: $ mv abc katalog/xxx Dodanie opcji “-i” sprawi, że mv będzie się pytać przed nadpisywaniem plików. Aby skopiować plik, używamy polecenia cp: $ cp plik_zrodlowy plik_docelowy Aby skopiować katalog wraz z zawartością: $ cp -R katalog_zrodlowy katalog_docelowy Podobnie jak przy mv, możemy nakazać potwierdzanie przy nadpisywaniu plików – opcja “-i”. Aby wypisać zawartość pliku na ekran, używamy polecenia cat: $ cat plik Do nadawania uprawnień plikom służy polecenie chmod. Istnieją dwa warianty tego polecenia. W pierwszym podajemy uprawnienia jako ciąg cyfr ósemkowych: $ chmod plik 752 Prawa można prosto ustalić dodając odpowiednie liczby: 1 odpowiada prawu x; 2 – w; 4 – r. Drugi sposób to zapis “komu co”, np.: $ chmod u+rwx nazwapliku. Jeśli mamy prawa administratora, możemy zmienić właściciela pliku: $ chown inny_uzytkownik plik Jeśli jesteśmy administratorem lub posiadamy członkostwo w wielu grupach, możemy także zmienić grupę właścicielską: $ chgrp inna_grupa plik Katalogi domowe Jak odwołać się do własnego katalogu domowego, jeśli nie wiemy, gdzie on się znajduje? Istnieją dwa sposoby: 1. katalog domowy bieżącego użytkownika dostępny jest zawsze jako “~”. 2. katalog domowy bieżącego użytkownika zawiera się w zmiennej $HOME. Zatem te polecenia są równoważne: $ cd ~ $ cd $HOME $ cd Jak odwołać się do czyjegoś katalogu domowego? Poprzedzamy nazwę użytkownika symbolem tyldy - “~kasia”. Wówczas nie musimy wiedzieć, czy Kasia ma swój katalog domowy w /home/kasia, /usr/kasia, /Users/Kasia, /usr/users/grupy/grupa1/kasia etc. Dowiązania twarde i symboliczne (“hardlinki” i “symlinki”). Aby utworzyć dowiązanie twarde do danego pliku piszemy: $ ln nazwa_pliku nazwa_dowiązania W tablicy inode'ów zostanie wówczas utworzony drugi wpis wskazujący na dany plik. Aby utworzyć dowiązanie symboliczne, piszemy: $ ln -s nazwa_pliku nazwa_dowiązania W tym wypadku zostanie utworzony plik tekstowy “nazwa_dowiazania” zawierający ścieżkę dostępu do pliku “nazwa_pliku”. Plik ten dostanie dodatkowe uprawnienie “l”, oznaczające, że jest odwołaniem. Dlaczego symlinki są lepsze od hardlinków? Ponieważ listując zawartość katalogu, od razu widzimy, że dany plik jest dowiązaniem: $ ln -s plik symlink $ ln plik hardlink $ ls -l razem 1 -rw-r--r--rw-r--r-lrwxrwxrwx 2 marcoos 2 marcoos 1 marcoos users users users 0 2003-12-17 23:28 hardlink 0 2003-12-17 23:28 plik 4 2003-12-17 23:28 symlink -> plik Archiwizacja danych Do obsługi plików z archiwami służy przede wszystim polecenie tar: Rozpakowanie pliku .tar w bieżącym katalogu: $ tar -xf plik.tar Utworzenie archiwum z zawartością katalogu: $ tar -cf archiwum.tar katalog Należy pamiętać, że nie jest przeprowadzana żadna kompresja, tworzony jest tylko plik zawierający inne pliki i informacje o ich położeniu. Kompresja pliku do formatu gzip (powstaje “plik.gz”): $ gzip plik Dekompresja pliku .gz: $ gunzip plik.gz Analogicznie przebiega kompresja i dekompresja do formatu bzip2 (bzip2, bunzip2). Można także od razu tworzyć skompresowane archiwa tar: $ tar -czf archiwum.tar.gz katalog $ tar -cjf archiwum.tar.bz2 katalog oraz dekompresować i odpakowywać takie archiwa: $ tar -xzf archiwum.tar.gz $ tar -xjf archiwum.tar.bz2 Obsługa dysków W systemach uniksowych należy zawsze domontować dany dysk, dyskietkę lub płytę do katalogu. Czyni się to poleceniem mount: $ mount -t typ_systemu_plików /dev/urządzenie /mnt/katalog Jeśli system jest odpowiednio skonfigurowany, wystarczy: $ mount /mnt/katalog Po skończeniu pracy z danym dyskiem należy go odmontować poprzez: $ umount /mnt/katalog lub $ umount /dev/urz?dzenie Polecenie mount domyślnie próbuje zamontować dany napęd w trybie do odczytu i zapisu. Jeśli chcemy zamontować dany dysk tylko do odczytu, należy do tego polecenia dopisać “ro”. Przykład: Zamontowanie dyskietki w formacie FAT w pierwszej stacji dysków, tylko do odczytu: $ mount -t vfat /dev/fd0 /mnt/floppy ro Odmontowanie: $ umount /dev/fd0 Przykład 2: Zamontowanie płyty CD-ROM: $ mount -t iso9660 /dev/cdrom /mnt/cdrom ro Uwaga: to, czy zwykły użytkownik ma prawo montować dyski, zależy od administratora systemu. Potoki wyjściowe Wysłanie wyników polecenia do pliku z nadpisaniem pliku...: $ polecenie > plik ...ibez nadpisania, z dołączaniem do końca pliku: $ polecenie >> plik Wyslanie wyników polecenia do pliku “wyniki” a błędów do pliku “err”: $ polecenie >> wyniki 2>>err Potoki wejściowe Pobranie z pliku wartości, które zostaną podane na wejście polecenia: $ polecenie < plik Podanie na wejście polecenia2 wyników polecenia1: $ polecenie1 | polecenie2 Przykład: ls -al | less Polecenie less to ulepszona wersja polecenia more, które dzieli wyjście danego polecenia na strony mieszczące się na ekranie. Następna strona to spacja, można używać klawiszy kursora oraz PgUp, PgDn, Home, End. Symbol “<<” Załóżmy, że chcemy na standardowe wejście danego polecenia przekazać jakiś wieloliniowy tekst, który dopiero zamierzamy wprowadzić z klawiatury. Jak to zrobić? Skorzystajmy z symbolu “<<”, umieszczając tuż zanim jakiś znacznik (zwykle pisze się “EOF”): $ cat >plik << EOF > W Paryżu > najlepsze kasztany > są na placu > Pigalle > EOF $ cat plik W Paryżu najlepsze kasztany są na placu Pigalle $ Utworzyliśmy tutaj plik o nazwie “plik” o treści takiej, jaką wprowadziliśmy w kolejnych liniach z klawiatury. Wyszukiwanie w plikach i plików Aby wypisać wszystkie linie pliku plik.txt zawierające dane słowo, piszemy: $ grep slowo plik.txt Natomiast to polecenie wypisze linie nie zawierające tego słowa: $ grep -v slowo plik.txt Jeśli chcemy się dowiedzieć, gdzie znajduje się dane program wykonywalny (dostępny dzięki $PATH), korzystamy z polecenia whereis: $ whereis vi vi: /usr/bin/vi Jeśli chcemy przeszukać system plików wg zadanego kryterium, używamy polecenia find. Ogólna składnia: $ find gdzie_szuka? jakie_kryterium co_zrobi?_po_odnalezieniu Kilka przykładów: find . -name "html" -print szukanie wszystkich plików w bieżącym katalogu o nazwach zawierających słowo “html” find . -name '*.c' -ok less {} \; wyszukuje wszystkie pliki .c, przy każdym odnalezionym proponuje wyświetlenie jego zawartości na ekranie find . -name '*.c' -exec less {} \; podobnie, ale od razu wyświetla pliki, bez potwierdzania find /tmp -atime +3 -and -uid +499 -print -exec rm -rf {} \; Spowoduje skasowanie wszystkich plików, które nie były używane od 3 dni i ich właścicielami są użytkownicy o UID większym niż 499 i znajdującymi się we wszystkich kartotekach od kartoteki /tmp począwszy, informacja o znalezionych plikach zostanie przekazana na monitor. Find /usr/src -type f -exec grep "stdio.h" {} \; -print Wyszuka wszystkie pliki w katalogu /usr/src zawierające w swojej treści “stdio.h”. Nazwa pliku zostanie wypisana po wszystkich liniach z danego pliku zawierających “stdio.h”. Praca z procesami Zazwyczaj praca w bashu jest sekwencyjna – realizujemy polecenie za poleceniem. Ale przecież UNIX jest systemem wielozadaniowym i czasami jednak chcielibyśmy uruchomić jakiś program w tle. W takiej sytuacji korzystamy z symbolu “&”. Przykładowo, chcielibyśmy poleceniem mpg123 odsłuchać plik muzyczny na konsoli, ale jednocześnie mieć dostępną linię poleceń: $ mpg123 piosenka.mp3 >/dev/null 2>/dev/null $ kolejne_polecenia & Co tu zrobiliśmy? Uruchomiliśmy w tle program mpg123 odtwarzający pliki muzyczne mp3, przekierowując do urządzenia /dev/null (“czarnej dziury”) tekstowe wyjścia tego programu (żeby nie zaśmiecał nam ekranu swoimi komunikatami). Dzięki temu muzyka gra w tle podczas, gdy możemy na konsoli wykonywać kolejne polecenia. A co, jeśli uruchomiliśmy jakiś program, którego działanie trwa długo i blokuje nam konsolę? Wciskamy CTRL-Z i program zostaje wstrzymany (nie zamknięty). Jeśli teraz wydamy polecenie: $ bg program zostnie “odmrożony”, ale dalej będzie się wykonywał w tle. Jeśli jednak wpiszemy: $ fg powrócimy do tego programu, konsola ponownie będzie zablokowana. Każdy proces w systemie UNIX ma swój identyfikator (liczbę), tzw. PID (process identifier). Dzięki temu identyfikatorowi zarówno system jak i użytkownik może w pewnym zakresie zarządzać realizowanymi procesami. Aby zobaczyć listę procesów uruchomionych na aktualnej konsoli, napiszemy: $ ps PID 6092 7304 7305 TTY pts/1 pts/1 pts/1 TIME 00:00:00 00:00:00 00:00:00 CMD bash mpg123 ps Widzimy, że bash ma PID 6092, a mpg123 – 7304. Jeśli chcielibyśmy poznać polecenie, jakim uruchomiono dany proces, napisalibyśmy: $ ps x Wszystkie “nasze” procesy wylistujemy poleceniem: $ ps u Polecenie ps ma znacznie więcej opcji. Ich krótką listę dostaniemy pisząc “ps –help”, warto także przejrzeć podręcznik i strony info. Aby natychmiast przerwać proces o danym PIDzie, piszemy: $ kill -9 PID Aby przerwać wszystkie procesy o danej nazwie, piszemy np.: $ killall -9 mpg123 Polecenia te przesyłają różne sygnały do procesu, najczęściej są to sygnały wymuszające zakończenie procesu. Sygnał 9. (KILL) jest najbardziej skuteczny – powoduje natychmiastowe przerwanie procesu. Bardziej eleganckie jest wysłanie sygnału 15. (TERM), ale nie zawsze chcemy to zrobić. Sygnałów tego rodzaju może być wiele, a zachowanie danego procesu na dany sygnał także może być różne (z wyjątkiem 9). Często np. sygnał 1 (HUP) bywa wykorzystywany jako rozkaz ponownego odczytania plików konfiguracyjnych przez dany proces. Spis dostępnych sygnałów otrzymamy pisząc: $ kill -l Proces uruchomiony nie w tle (blokujący konsolę) często można przerwać wciskając po prostu Ctrl-C. Zmienne środowiskowe Znaczenie niektórych zmiennych środowiskowych przedstawiono poniżej. $PATH – zawiera spis katalogów, pośród których szukane są polecenia $SHELL – zawiera nazwę aktualnej powłoki (np. “/bin/bash”, “/bin/csh” itp.) $USERNAME – zawiera nazwę aktualnego użytkownika $HOSTNAME – nazwa hosta $HOME – zawiera nazwę katalogu aktualnego użytkownika $PS1 – główny znak zachęty $PS2 – drugi znak zachęty $CC – zawiera nazwę domyślnego kompilatora C $CXX – zawiera nazwę domyślnego kompilatora C++ $LC_ALL – (w uproszczeniu mówiąc) zawiera ustawienia językowe aktualnego użytkownika. Jeśli LC_ALL ustawimy na “pl_PL”, system będzie się komunikował z nami w języku polskim (o ile są zainstalowane polskie pakiety lokalizacyjne). Aby powrócić do anglojęzycznej konsoli, ustawiamy LC_ALL na “en_US”: Przykład: $ LC_ALL="pl_PL" $ ls nieistniejacyplik ls: nieistniejacyplik: Nie ma takiego pliku ani katalogu $ LC_ALL="en_US" $ ls nieistniejacyplik ls: nieistniejacyplik: No such file or directory Szczegółowy opis wszystkich zmiennych środowiskowych można znaleźć w podręczniku systemowym powłoki bash (man bash). Aliasy Jeśli często korzystamy z jakiegoś polecenia, które jest długie lub ma niewygodną składnię, możemy sobie stworzyć tzw. alias. Oto przykład: $ alias montujfdd=”mount -t vfat /dev/fd0 /mnt/floppy ro” Jeżeli będziemy chcieli usunąć ten alias, piszemy: $ unalias montujfdd Aby powłoka pamiętała aliasy, należy je dopisać do .bashrc lub .bashprofile. Aby zobaczyć listę aliasów, wydajmy polecenie alias bez parametrów. Informacje o użytkownikach who – wyświetla listę zalogowanych użytkowników, nazwy konsoli oraz godzinę od której są zalogowani whoami – wypisuje naszą nazwę użytkownika who am i – wyświetla informacje o nas w sposób taki, jak “who” Ustawienia konta użytkownika Jeśli nie chcemy, by bash był naszą domyślną powłoką, możemy to zmienić: $ chsh -s /bin/jakiś_shell Aby zmienić hasło na nasze konto, korzystamy z polecenia: $ passwd Pliki z kropką w nazwie Dla powłoki bash istotnych jest kilka plików o nazwach rozpoczynających się od kropki. Oto, do czego służą. ~/.bashrc Ten skrypt jest wykonywany przy ręcznym uruchomieniu powłoki. ~/.bash_profile Skrypt uruchamiany przy inicjalizacji powłoki uruchomionej przy logowaniu się,a nie ręcznie) ~/.bash_logout Skrypt uruchamiany przy wychodzeniu z powłoki ~/.bash_history Plik zawiera historię naszych poleceń typu login (tzn.