Wprowadzenie

Za początek Linuksa można przyjąć datę 17 września 1991 r., kiedy to została opublikowana pierwsza wersja jądra tego systemu. Zresztą nazwa Linux oznacza tak naprawdę właśnie tylko jądro systemu, natomiast dołączone oprogramowanie pochodzi z tzw. projektu GNU utworzonego przez Richarda Stallmana 27 września 1983. O Linuksie mówi się, że jest darmowy i udostępniany na zasadach open source. Co to znaczy? To, że coś jest za darmo raczej nie wymaga wyjaśnienia. Natomiast termin open source oznacza, że mamy dostęp do kodów źródłowych systemu, co, podkreślam, z darmowością nie ma nic wspólnego (np. biblioteki do .NET-u firmy Devexpress bynajmniej nie są za darmo, chociaż można dokupić również kody źródłowe).

Pierwotnie, aby zainstalować Linuksa trzeba było kompilować go ze źródeł. Ponieważ ta tajemna wiedza była dostępna tylko dla grupy magików, nie sprzyjało to popularności tego systemu. Z czasem oprogramowanie zostało skompilowane i zaczęto je udostępniać w postaci tzw. pakietów (inaczej mówiąc „instalek”), natomiast jądro wraz z oprogramowaniem zostało zebrane razem, opatrzone instalatorem i tym samym powstały tzw. dystrybucje — „instalki” systemu. Obecnie dostępnych jest ogromna liczba dystrybucji, warte (moim zdaniem) uwagi są następujące:

  • Red Hat — pierwsza dystrybucja, obecnie dostępna tylko wersja komercyjna; najlepsza pod Oracle'a,
  • Fedora — darmowa „wersja” Red Hata,
  • SUSE Linux Enterprise Linux — bardzo dobra komercyjna wersja systemu wyposażona w (prawie) rewelacyjne narzędzie do zarządzania systemem YaST; wspiera instalację Oracle'a,
  • openSUSE — darmowa wersja SUSE,
  • CentOS — darmowa dystrybucja klasy „enterprise” w pełni zgodna z Red Hatem (wg twórców); łatwo na niej zainstalować Oracle'a,
  • Debian — bardzo stabilna i szybka dystrybucja wymagająca trochę więcej wprawy od użytkownika; nieoceniona jako podstawa routera w sieci,
  • Ubuntu — dystrybucja oparta na debianie, jednak w odróżnieniu od pierwowzoru zdecydowanie bardziej przyjazna; dostępna w wersji Desktop i Server,
  • Slackware — lekka i stabilna dystrybucja wymagająca spoooro wiedzy od użytkownika,
  • Gentoo — jedna z niewielu (jedyna?) dystrybucja wymagająca spooooooro wiedzy od użytkownika, w której instalacja polega na kompilacji ze źródeł; umożliwia optymalizację pod konkretne rozwiązanie sprzętowe, dzięki czemu bardzo szybka.

Osobiście polecam:

  • Debiana, jeśli chcemy w pełni panować nad tym co jest zainstalowane i nad konfiguracjami; jak pisałem wyżej — jedyna dystrybucja jeśli chcemy uruchomić router sieciowy z kolejkowaniem pakietów i bardziej zaawansowanym filtrowaniem pakietów
  • openSUSE, jeśli ktoś chce systemu na biurko lub serwer, który ma być szybko skonfigurowany,
  • CentOSa, jeśli chcemy zainstalować Oracle'a; kiedyś instalowałem Oracle'a na tej dystrybucji i wszystko szło lekko i przyjemnie (no, prawie).

Dlaczego Linux?

Kilka powodów, dla których warto nauczyć się obsługi Linuksa, a może nawet zacząć go używać:

  • Przede wszystkim system i sporo oprogramowania jest za darmo. Sporo, ponieważ nie wszystko co jest związane z linuksem jest darmowe, np. DBMS Oracle, dostępny dla Red Hat-a i SuSE, zdecydowanie nie jest ani darmowy, ani open source.
  • Po drugie, Linux jest dostępny jako system open source. Oczywiście, dla przeciętnego nie ma to żadnego znaczenia (kto w końcu zrozumie ten zawiły i ogromny kod języka C), jednak ma to zaletę innego rodzaju. Otóż, chociaż większość użytkowników tego kodu nie rozumie, jest garstka pasjonatów, którzy siedzą całymi dniami i nocami podłączeni do kroplówki z kawą i czipsami, i węszą w kodzie źródłowym różnych aplikacji. I jeśli tylko znajdą coś niepokojącego (błąd, złośliwy kod, itp.) ogłaszają to niezwłocznie całemu światu.
  • Dostępne jest kompletne środowisko sieciowe. Na Linuksie zainstalujemy i uruchomimy praktycznie każdą usługę sieciową: DNS, DHCP, FTP, HTTP, SMTP, SMB, LDAP, itd.
  • Linux dobrze współpracuje z innymi systemami. Istnieje oprogramownie pozwalające się integrować z Windows, MacOS, Novell, itd. Oczywiście, wymiana plików pomiędzy np. Windows i Linux będzie trochę wolniejsza niż Windows a Windows, jednak niewiele wolniejsza, a co ważniejsza, w ogóle możliwa.
  • Bardzo dobrze zrobiona dokumentacja. Nieocenione są tutaj artykuły HOWTO, które opisują w sposób precyzyjny i szczegółowy prawie każde zagadnienie.
  • I końcu Linux charakteryzuje się ogromną stabilnością systemu. Co to znaczy? Znaczy to tyle, że jak już coś nam zadziała, to będzie działać po wsze czasy.
Moim zdaniem, główne zastosowania Linuksa to:
  • Serwer usług sieciowych takich jak poczta, WWW, ftp, firewall, itp. Linux jest tutaj nieoceniony, bardzo elastyczny i niezwykle stabilny. Z serwerów, które instalowałem lata temu jako routery sieciowe, prawie wszystkie działaja bezawaryjnie do dzisiaj („prawie” wynika z tego, że było kilka awarii sprzętu).
  • Serwer bazy danych. Oracle, MySQL czy PostgreSQL działają na Linuksie bez zarzutu.
  • Serwer aplikacji. Jest mnóstwo serwerów aplikacji opartych na środowisku Javy, ale również mamy oprogramowanie pozwalające publikować aplikacji napisane w językach Ruby, Python, czy PHP.
Niestety, Linux (na razie przynajmniej) nie nadaje się na system na tzw. „biurko” w firmie.
  • Nie można na nim zainstalować Microsoft Office. Oczywiście, zaraz usłyszymy, że jest przeciez OpenOffice. No jest, tylko co z tego? Podstawą istnienia firmy jest współpraca z innymi firmami. A to oznacza wymianę dokumentów. Czy się to komuś podoba, czy nie, obecnie standardem wymiany dokumentów jest format MS Word. I jeśli chcemy w tej wymianie sprawnie uczestniczyć, MS Word musi być. Czy się to komuś podoba, czy nie.
  • Większość oprogramowania biznesowego jest pisana tylko pod Windows, np. oprogramowanie firmy Insert czy część oprogramowania firmy Teta. Oczywiście, można prowadzić ewidencję sprzedaży w OpenOffice.org Calc, ale na dłuższą metę takie rozwiązanie prowadzi do chaosu, a duża firma nie może z takiego rozwiązania korzystać. Pewną szansą jest to, że niektóre aplikacje biznesowe są pisane jako aplikacje WWW, co uniezależnia użytkownika od systemu operacyjnego (istotna jest tylko przeglądarka). Na razie jednak rzeczywistość jest dla Linuksa dyskwalifikująca. (Od razu też uprzedzam: słyszałem o LeftHand, ale nie sądzę, żeby ktoś wybierał LefHand tylko dlatego, żeby mieć Linuksa.)
  • Środowisko graficzne jest w Windows lepiej dopracowane. W KDE czy GNOME regularnie coś się wywala, działa to zdecydowanie wolniej i wymaga więcej zasobów systemowych (wbrew obiegowym opiniom). Oczywiście, są to moje odczucia subiektywne, ale to w końcu one decydują, na czym będę pracował.

Krótkie porównanie do systemu Windows

  • Dostęp użytkownika do systemu i zdalna praca. Do zarządzania systemem w Windows mamy przede wszystkim możliwość zdalnego podłączenia konsoli MMC, w stacjach roboczych jest tzw. zdalny pulpit, a w Windows Server mamy do dyspozycji usługi terminalowe. Jakkolwiek zdalny pulpit nie wymaga licencji (wadą jest możliwość uruchomienie tylko jednej zdalnej sesji), tak usługi terminalowe kosztują dosyć sporo (ok. 400 zł za 1 licencję). W systemie Linux sytuacja wygląda podobnie, chociaż mniej kosztownie i jest bardziej elastycznie. Przede wszystkim zarządzać systemem możemy poprzez uruchomienie zdalnej konsoli tekstowej, co ma tą zdecydowaną zaletę, że do jej obsługi wystarczy niewielkie pasmo internetowe (wadą jest tryb tekstowy, który czasami może nie wystarczać). Oczywiście „usługi terminalowe” pod Linuksem są jak najbardziej dostępne, no i nie wymagają dodatkowych opłat. Pewną przewagą jest rozwiązanie polegające na tym, że zamiast uruchamiać cały pulpit zdalnego komputera można w Linuksie uruchomić pojedyncze aplikacje (ta funkcjonalność jest dostępna w Windows Server dopiero od wersji 2008).
  • System graficzny i jądro systemu. W Windows system graficzny jest niejako „zintegrowany” z jądrem systemu, natomiast w Linuksie jest przeciwne rozwiązanie — jądro systemu nie potrzebuje systemu graficznego, który jest jakby osobnym programem. Zaleta tego rozwiązania jest taka, że w przypadku zdestabilizowania pracy systemu graficznego w Linuksie można go uruchomić ponownie nie naruszając działania pozostałych usług, a w Windows jest wtedy wymagany restart całego systemu.
  • Rejestr systemu i pliki tekstowe. Konfiguracja systemu Windows jest pamiętana w tzw. „rejestrze systemu”, natomiast konfiguracja Linuksa jest przechowywana w zwykłych plikach tekstowych. Rejestr niewątpliwie ma swoje wady (w Internecie jest sporo artykułów na ten temat), niemniej jednak jego zaletą jest standard zapisu konfiguracji, co dla twórców oprogramowania ma niebanalne znaczenie. Pliki tekstowe pełniące rolę konfiguracyjnych w Linuksie są oczywiście łatwo edytowalne, łatwo dostępne (wystarczy dowolny edytor tekstu), można je filtrować, wyszukiwać, itp., jednak wadą tego rozwiązania jest brak standardowego formatu tych plików. Są co prawda pewne konwencje, ale ogólnie standardu nie ma i dla twórców oprogramowania stanowi to czasami pewien problem.
  • Domeny. W obu systemach domeny można utworzyć w oparciu o protokół LDAP. W Windows mamy ładnie nazwane Active Directory, natomiast w Linuksie jest po prostu LDAP, a implementacją może być np. openLDAP.

Polecenia, opcje i parametry

Bardzo ważna jest umiejętność korzystania z konsoli tekstowej, czyli w szczególności wykorzystywania ogromnej liczby dostępnych w Linuksie poleceń. Okazuje się, że są pewne konwencje (zasady) dotyczące składni wydawanych poleceń. Każde polecenie składa się z nazwy, opcji i parametrów, przy czym opcje i parametry mogą być opcjonalne. Jak zatem wygląda struktura polecenia?

  • Napierw jest polecenie, np. tar.
  • Potem zwykle jakieś opcje. Jak są zapisywane?
    Wersja krótka. W wersji krótkiej opcją jest pojedyncza litera alfabetu poprzedzona znakiem minusa. Ze względu na wygodę minusy można pomijać łącząć litery w jeden ciąg. Kolejność opcji nie ma znaczenia. Należy również zaznaczyć, że opcje także mogą mieć parametry (np. opcja -f polecenia tar określająca plik archiwum — oczywistym jest, że parametr opcji jest tutaj niezbędny). Przykłady:
    • -a -v -s == -avs == -a -vs
    • -cf plik == -c -f plik == -f plik -c != -fc plik
    Wersja długa. W wersji długiej opcja to po prostu słowo ją opisujące poprzedzone dwoma znakami minusa. Przykłady:
    • --create --file=plik
  • Na końcu są parametry, np. ścieżki do plików.

Zauważamy również, że w przypadku opcji w wersji krótkiej, pomiędzy opcją a jej potencjalnym parametrem jest znak spacji, natomiast w przypadku opcji długiej separatorem jest znak równości (=).

Przykłady poleceń z opcjami i parametrami:

  • tar -cf plik.tar plik1.txt plik2.txt
  • tar -c --file=plik.tar plik1.txt plik2.txt
  • ls -la
  • cp -r plik1 plik2
Żeby być w pełni zgodnym z prawdą trzeba dodać, że powyższa kolejność w większości przypadków nie jest obligatoryjna — często kolejność opcji i parametrów nie ma znaczenia, co oznacza, że moglibyśmy napisać:
cp plik1 plik2 -r

Niemniej jednak wygodnym i bezpieczniejszym (taka dowolna kolejność nie zawsze działa) jest przyjąć kolejność: polecenie, opcje, a na końcu parametry polecenia. Jest to szczególnie istotne dla osób rozpoczynających przygodę z Linuksem.

Bardzo podstawowe polecenia

Poniżej zamieszczam także listę najnajbardziej podstawowych poleceń konsoli w Linuksie:

  • ls — drukuje zawartość bieżącego katalogu
  • ls -l — drukuje zawartość bieżącego katalogu w formacie pełnym
  • pwd — drukuje bieżącą ścieżkę
  • cp plik1 plik2 — kopiuje pliki
  • mv plik1 plik2 — przenosi pliki
  • rm plik — usuwa plik
  • rm -rf katalog — usuwa drzewo katalogów
  • mkdir katalog — tworzy katalog
  • rmdir — usuwa pusty katalog
  • cat, less, more — wyświetlają zawartość plików

Korzystanie z systemu pomocy

Zanim przejdziemy do źródeł pomocy przyjrzyjmy się składni poleceń, która będzie tam podana. Składnia podawana jest na wiele sposobów, sporo z nich wymaga domyślania się i pewnej intuicji, jednak są pewne ogólne zasady, które warto poznać, bo z pewnością ich znajomość czytanie składni ułatwi. Ogólnie, wprowadzanie polecenia polega na przepisaniu składni polecenia przy zastosowaniu pewnych reguł. Reguły te są następujące:

  • To co w nawiasach [ ] jest opcjonalne, czyli możemy to przepisać, ale też możemy to pominąć i przepisywać dalej.
  • To co w nawiasach { } musi się pojawić, czyli zawartość po prostu przepisujemy.
  • Znak | oznacza alternatywę, czyli przepisujemy jedno lub drugie, ale nie oba naraz, np. [ lewo | prawo ], czyli w tym przypadku możemy nie przepisać nic (nawiasy kwadratowe), przepisać lewo lub przepisać prawo. (Czasami znak , też oznacza alternatywę.)
  • Jeśli coś nie jest w żadnych nawiasach, po prostu przepisujemy (w szczególności nazwę polecenia).

Przykłady

Mamy następującą składnię:
ls [-lahr] [plik1 ... plikN]
Przykładowe użycia:
ls
ls -a -hr
ls -l /usr/bin/bc /usr/bin/vim
ls -lh /usr/bin/bc /usr/bin/vim
A teraz mamy składnię:
tar [-z|--gzip|--ungzip] -c [-f, --file=nazwapliku] plik1 [plik2 ... plikN]
Przykłady użycia polecenia:
tar -cf plik.tar plik.txt
tar -cz --file=plik.tar plik1.txt plik2.txt
tar --gzip -c --file=plik.tar plik1.txt

Źródeł pomocy dla Linuksa jest bardzo wiele. Ze swojej strony chciałbym zwrócić uwagę na 3 sposoby uzyskania informacji.

Podręcznik (manual)

to podstawowe źródło informacji instalowane wraz z systemem. Jest to zestaw dokumentów, z których każdy dotyczy osobnego programu, będącego zwykle jest pojedynczym poleceniem. Dokumenty podzielone są na sekcje:
  1. Programy i polecenia powłoki.
  2. Odwołania systemowe (funkcje jądra)
  3. Funkcje biblioteczne języka C
  4. Urządzenia i sterowniki
  5. Formaty plików, np. pliku /etc/passwd
  6. Gry
  7. Różne (w tym niektóre pakiety)
  8. Polecenia administracyjne (zwykle dla root-a)
Struktura każdego z dokumentów jest także raczej określona, chociaż w szczególnych przypadkach może nieco różnić od struktury większości:
  • NAME — nazwa i krótki opis strony,
  • SYNOPSIS — spis wszystkich dostępnych opcji z linii poleceń,
  • DESCRIPTION — dokładny opis hasła,
  • OPTIONS — dokładny opis opcji z linii poleceń,
  • FILES — opis plików używanych przez opisywane polecenie lub system,
  • SEE ALSO — odnośniki do innych stron podręcznika powiązanych tematycznie z opisywanym hasłem,
  • BUGS — wykryte błędy w opisywanym poleceniu lub systemie,
  • AUTHOR — informacje o autorze lub autorach.
Jak korzystać ze stron podręcznika? Generalnie mamy do tego polecenie man. Poniżej najczęściej spotykane użycia tego polecenia:
  • man słowo — wyświetlenie konkretnej strony podręcznika
  • man numer_sekcji słowo — wyświetlenie konkretnej strony podręcznika z określonej sekcji
  • man -f słowo (to samo co: whatis słowo) — przeszukiwanie stron podręcznika pod kątem nazwy polecenia
  • man -k słowo (to samo co: apropos słowo) — przeszukiwanie pod kątem nazwy polecenia i krótkiego opisu
Warto zwrócić jeszcze uwagę następujące kwestie.
  • Wyszukiwanie. Po wyświetleniu konkretnej strony podręcznika, przeglądanie domyślnie odbywa się w programie less. Warto wiedzieć, że można w tym programie przeszukiwać tekst na określone frazy. Szukany tekst wprowadzamy wpisując /tekst<enter>, a następnie klawiszami n i N znajdujemy kolejne następne/poprzednie (odpowiednio) wystąpienia szukanej frazy.
  • Przeglądarka pliku manuala. Do określenia programu, który będzie wyświetlał pliki podręcznika służy zmienna PAGER. Żeby zobaczyć, jakie ma to znaczenie proponuję następującego przykładu.

    Przykład

    Polecenie
    $ man cp
    
    wyświetli nam pomoc do polecenia cp. Zwracamy uwagę, że tekst możemy przewijać (działają strzałki) i przeszukiwać (działa wspomniana komenda /tekst, np. /-i). Teraz wpisujemy polecenie
    $ echo $PAGER
    
    Domyślna wartość to less i taki napis powinien się pojawić. No to czas coś zmienić. Wpisujemy polecenie:
    $ PAGER=cat
    
    Zwracamy uwagę, że jak teraz wprowadzimy polecenie
    $ man cp
    
    tekst pomocy się po prostu przewinał i o żadnej interakcyjności mowy nie ma. Po prostu do wyświetlenia pomocy zostało wykonane polecenie cat. Na koniec przywracamy pierwotne ustawienie wpisując
    $ PAGER=less
    
    ewentualnie, jeśli pierwotnie zamiast less był inny program, zamiast powyższego wpisujemy
    $ PAGER=innyprogram
    

Dokumenty HOWTO

Jest to zbiór artykułów na bardzo różne tematy dotyczące Linuksa. Opisuję praktycznie każde zagadnienie. Stopień zaawansowania tych artykułów również jest bardzo zróżnicowany — od zupełnie podstawowych „tutoriali” do dokumentów bardzo szczegółowo opisujących technikalia wybranego zagadnienia. Istotniejsze linki związane z dokumentami HOWTO:

Opcja --help

Zdecydowana większość poleceń ma dostępną opcję --help, która pozwala na wyświetlenie informacji o poleceniu w wersji skrótowej. Zwykle taka podręczna pomoc wystarcza, a jest dostępna dużo szybciej niż inne formy pomocy. Przykładowy wydruk dla polecenia useradd
$ useradd --help
Składnia: useradd ...
useradd - utworzenie nowego użytkownika

  -c komentarz   Ustawienie pola GECOS dla nowego konta
 --show-defaults Wypisanie wartości domyślnych
 --save-defaults Zapisanie zmodyfikowanych wartości domyślnych
  -D binddn      Użycie dn "binddn" do podłączenia do katalogu LDAP
  -d kat_domowy  Katalog domowy dla nowego użytkownika
  -e data_ważn   Data po której nowe konto zostanie wyłączone
  -f nieaktywn   Dni od wygaśnięcia hasła do wyłączenia konta
  -G grupa,...   Lista dodatkowych grup
  -g gid         Nazwa/numer głównej grupy użytkownika
  -k kat_skel    Podanie alternatywnego katalogu skel
  -m             Utworzenie katalogu domowego dla nowego użytkownika
  -o             Zezwolenie na powtórzone (nieunikalne) UID-y
  -P ścieżka     Szukanie plików passwd, shadow i group w "ścieżce"
  -p hasło       Zaszyfrowane hasło w postaci zwróconej przez crypt(3)
  -u uid         Wymuszenie nadania uid jako identyfikatora nowego użytkownika
  -r, --system   Utworzenie konta systemowego
  -s powłoka     Nazwa powłoki logowania użytkownika
 --usługa usł    Dodanie konta do usługi nazw 'usł'
      --help     Wyświetlenie tego opisu
      --usage    Wyświetlenie krótkiej informacji o składni
  -v, --version  Wypisanie wersji programu
Poprawne usługi dla --services to: files, ldap