Podstawy Linuksa
uzyskiwanie pomocy
- man [nazwa polecenia] - podręcznik elektroniczny, warto również zobaczyć reakcję polecenia na parametr --help
- info [nazwa polecenia] - nowa wersja podręcznika systemowego
- apropos [tekst] - listuje strony podręcznika związane z danym tekstem, apropos -s 1 '' | less pozwala zapoznać się z spisem wszystkich stron w rozdziale pierwszym (o tym co jest w którym rozdziale mozna zobaczyć w man man)
uzyskiwanie informacji o plikach, katalogach, poruszanie się w strukturze drzewa katalogów
- cd [ścieżka] - zmiana bieżącego katalogu
warto zauważyć iż katalog bieżący oznaczamy ., nadrzędny oznaczamy .., ścieżki zaczynające się od ukośnika / oznaczają ścieżki bezwzględne (od korzenia systemu plików), natomiast katalog domowy oznacza się ~ - ls [opcje] [ścieżka] - listowanie zawartości katalogu
do ważniejszych opcja należy zaliczyć -a powodująca wyświetlanie plików ukrytych (zaczynających się od kropki) i -l wyświetlająca pliki w formie listy z szczegółowymi informacjami (uprawnienia, rozmiar, właściciel, grupa, rozmiar) - du [opcje] [katalog] - wyświetla informacje o miejscu zajmowanym przez katalogi/pliki
do ważniejszych opcji należy zaliczyć -k - podaje ilość zajmowanego miejsca w kilobajtach, -s - podaje tylko sumę dla każdego katalogu - pwd - wypisuje ścieżkę bieżącego katalogu
- mount i umount - montuje i odmontowywuje systemy plików
warto zwrócić szczególną uwagę na opcję montowania bind (podawaną po -o lub jako --bind) umożliwiającą montowanie katalogu w innym katalogu oraz na -o remount umożliwiającą zmianę parametrów podmontowanego systemu plików - fdisk, cfdisk, sfdisk - modyfikowanie / oglądanie podziału dysku na partycje
zmiany w strukturze katalogów, kopiowanie przenoszenie usuwanie
- mkdir [ścieżka] - tworzenie katalogów
- rmdir [ścieżka] - usuwanie katalogów
- cp [opcje] [źródło] [ce] - kopiowanie plików
do ważniejszych opcji należy zaliczyć -r kopiuje podkatalogi wraz z plikami, -f pliki w katalogu docelowym posiadające identyczne nazwy będą nadpisywane bez pytania, -i oczekuje potwierdzenia przed nadpisaniem, -v wyświetla nazwę każdego pliku podczas kopiowania - ln [opcje] [źródło] [cel] - służy do tworzenia dowiązań twardych oraz symbolicznych, domyślnie tworzy dowiązanie twarde - drugi równoprawny wpis o pliku (w szczególności plik zostanie skasowany, gdy wszystkie dowiązania twarde do niego i on sam zostaną usunięte)
do ważniejszych opcji należy zaliczyć -s - tworzy dowiązanie symboliczne (plik wskazujący na położenie celu, konieczne przy dowiązaniach do katalogów, a także plików położonych na innych partycjach), -f - pliki w katalogu docelowym posiadające identyczne nazwy będą nadpisywane bez pytania - mv [opcje] [źródło] [ce] - przenoszenie/zmiana nazwy pliku
do ważniejszych opcji należy zaliczyć -f pliki w katalogu docelowym posiadające identyczne nazwy będą nadpisywane bez pytania, -i oczekuje potwierdzenia przed nadpisaniem, -v wyświetla nazwę każdego pliku podczas kopiowania - rm [opcje] [ścieżka] - usuwanie plików lub katalogów, jeżeli brak jest odpowiednich praw do zapisu, wyświetlana jest prośba o potwierdzenie.
do ważniejszych opcji należy zaliczyć -f brak pytań przy każdym usuwanym pliku, -i oczekuje na potwierdzenie, -r podkatalogi i pliki również zostaną usunięte, -v wypisuje nazwę pliku przed usunięciem - rdiff-backup i pdumpfs - różnicowe kopie zapasowe ...
- rsync - różnicowe kopie zapasowe ...
pakowanie i kompresja
- tar i gzip - programy do pakowania/rozpakowywania
- gzip - kompresuje podany plik (nie łączy wielu plików w jedno archiwum)
- bzip2 - kolejny kompresor
- split - dzieli plik na części (łączyć można np. cat'em)
- pax - rozbudowany archiwizer umożliwiający również kopiowanie drzewa katalogów
- cpio i afio - również archiwizery ...
atrybuty i uprawnienia
- touch - zmienia daty modyfikacji, dostępu, ... do pliku, pozwala na łatwe tworzenie pustych plików
- chown [opcje] [właściciel] [ścieżka] - zmiana właściciela pliku
do ważniejszych opcji należy zaliczyć -R powodująca zmienianie również w podkatalogach - chgrp [opcje] [grupa] [ścieżka] - zmiana grupy pliku
do ważniejszych opcji należy zaliczyć -R powodująca zmienianie również w podkatalogach - chmod [opcje] [uprawnienia] [pliki] - zmiana prawa dostępu do pliku(ów)
do ważniejszych opcji należy zaliczyć -R powodująca zmienianie również w podkatalogach
Unixowe uprawnienia do plików składają się z trzech członów: uprawnienia dla właściciela (u), grupy (g) i pozostałych użytkowników (o). W każdym z członów mogą być przyznane uprawnienia do czytania (r), pisania (w) i wykonywania (x); w odniesieniu do plików jest to intuicyjne (uprawnienie do wykonywania jest potrzebne do uruchomienia programów), natomiast w stosunku do katalogów wygląda to następująco: uprawnienia do czytania pozwalają na wylistowanie zawartości, do wykonania pozwalają na dostęp, do zawartości katalogu (wejścia do niego) do pisania na tworzenie nowych obiektów wewnątrz niego i zmienianie nazw istniejących. Warto zaznaczyć iż program w pliku nie mającym praw wykonywlności też moży być wykonany (w przypadku skryptu poprzez uruchomienie interpretatora i podanie tego programu jako odpowiedniego argumentu wywołania, w przypadku typowych binarek poprzez wywołanie /lib/ld-2.3.6.so z tym plikiem i jego opcjami jako paramtrem. - chattr - zmienia atrybuty plików związane z systemem plików
- getfacl, setfacl - odczyt i ustawianie uprawnień związanych z listami kontroli dostępu (więcej szczegów o ACL - ACL – Listy kontroli dostępu)
wyszukiwanie plików i w plikach, porównywanie plików, ...
- find [opcje] - przeszukiwanie systemu plików
do ważniejszych opcji należy zaliczyć -name nazwa-pliku wyszukanie pliku nazwa-pliku, -size +N wyszukanie pliku o rozmiarze większym niż N - locate - wyszukuje pliki po nazwie korzystając z specjalnej bazy danych (wyniki mogą być mniej aktualne niż przy find, za to szybsze)
- grep [opcje] [ścieżka] - wypisywanie linijek zawierających słowa kluczowe (oraz po skorzystaniu z odpowiednich opcji linijek sąsiadujących albo linii nie pasujących), warto tu zwrócić uwagę na możliwość podania kilku wzorców (łączone LUB) lub nawet całego pliku wzorców (można w ten sposób porównywać pliki)
- diff - porównuje pliki, do uzyskania pliku zmodyfikowanego z orginalnego i łaty wygenerowanej przez diff służy program patch
- vbindiff - porównuje wizualnie pliki binarne (interfejs ncurces)
- patch - stosuje na pliku łatę zwracaną przez diff
- sort - sortuje ...
- wc - liczy linie, wyrazy, znaki, ...
- file [plik] - rozpoznaje typ pliku
wyświetlanie i edycja plików
- cat - wypisywanie i łączenie plików
- more - przeglądanie strona tekstu ekran po ekranie
zdecydowanie większe możliwości daje less, który nie musi czytać całego dokumentu (znacznie szybsze przy dużych dokumentach) oraz posiada możliwość przeglądanie dokumentu w tył - head - wypisuje początek pliku
- tail - wypisuje koniec pliku
- tac - wypisuje plik od konca (ostatnia linia jako pierwsza
- ed, vi (vim) - edytory tekstowe
podstawowe komendy VIMa: i - tryb wstawiania, Insert - zmiana trybu wstawiania i zastępowania, Esc - wyjęscie z trybu wstawiania/zastępowania, y - kopiuje, d - kasuje (po y, d mozna podac np 20l lub 20{strzalka w prawo} co oznacza 20 kolejnych znakow, w oznacza slowo, podwojenie y lub d oznacza kopiowanie/kasowanie całej linii), x - kasuje tyle znakow jaka liczba poprzedzony, p - wkleja po, P - wkleja przed, / - szukanie, N - poprzednie znaleznien, n - nastepne, 1,$s#szukany#zamiennik#g - zastępowanie w całym pliku (bez adresu 1,$ - w bierzącej linii), :w - zapis :q - wyjście :q! - wujście bez zapisywania :wq - zapis i wyjście :next - następny plik :previous - poprzedni plik :split - podział okna Ctrl+W - przełączanie między oknami
Ściąga do vi - kilkustronicowa broszurka z najważniejszymi poleceniami, graficzny tutorial do vim'a
Warto także zainteresować się sprawdzaniem pisowni w vim: instalujemy paczkę vim-spellfiles-pl (jest w experimental, instaluje się w /usr/share/vim/vim70/spell/), w ~/.vimrc wpisuje: set spelllang=pl,en, a następnie sprawdzamy przy pomocy :set spell. - emacs, joe - kolejne edytory tekstowe
Ściąga do Emacsa - kilkustronicowa broszurka z najważniejszymi poleceniami - sed - edytor strumieniowy, umożliwia np. podmianę pierwszego wystąpienia napisu w pliku sed -e '0,/zastepowany/ s#zastepowany#zastepujacy#' lub wszystkich wystąpień - sed -e 's#zastepowany#zastepujacy#g', zobacz w Sieci: sed w przykładach - cześć 1, cześć 2, cześć 3
- cut - wybiera z pliku zadany zestaw kolumn
- paste, join - łączenie plików (wg. zadanych kryteriów)
- tr - zamienia jeden zestaw znaków innym (niestety ma problem z znakami dwubajtowymi)
- konwert - oparty na perlu bardziej inteligentny od tr zamienicz znaków posiadający predefiniowane zestawy (np. konwert utf8-ascii usunie znaki narodowe itp z pliku kodowanego w utf-8, natomiast filtr qp-8bit pozwoli zamienić kodowanie quoted printable na normalne 8 bitowe, a rtf-8bit zrobi to z kodowaniem rtf'u)
- str - program wchodzący w skład pakietu konwert służy do zamieniania napisów z jednego zestawu napisami z drugiego (w odróżnieniu od tr nadaje się do znaków kilku bajtowych - utf8, lepiej od sed'a sprawdza się przy zmianie kodowań - patrz przykład w manualu)
- iconv - zmienia kodowanie znaków w pliku
- mewdecode - zmienia kodowanie base64 na 8 bitowe
- hexcat - wypisywanie plików jako liczby szesnastkowe
- hexdump - wypisuje zawartość pliku interpretując go jako plik binarny, np. hexdump -e '1/4 "%08d " 1/2 "%05d " 2/1 "%02x n"' plik każde kolejne 8 bajtów będzie interpretował jako 32 bitowa liczba całkowita (4 bajty), 16 bitowowa liczba całkowita (2 bajty) i dwie liczby jedno bajtowe (wyświetlane szesnastkowo).
- bvi, hexer - edytor binarny o interfejsie przypominającym vi
- hexcurse - edytor binarny o interfejsie opartym o ncurses
planowanie zadań
- crontab - pozwala oglądać i edytować tablice zaplanowanych zadań (dla cron'a)
- at - pozwala jednorazowo zaplanować zadanie
- Warto tu też wspomnieć o programie "anacron" będącym mniej przestrzegającą reguł czasowych odmianą cron'a
procesy, ich parametry i informacje o nich
- nice - uruchamia program z zmodyfikowanymi priorytetem (im wyższy tym program jest bardziej dyskryminowany przy przełączaniu zadań)
- cpulimit - umożliwia ograniczenie wykorzystania procesora przez program
- kill i killall - przesyła sygnał do procesów
- ps i top - wyświetla aktualnie działające procesy i informacje o nich (dla ps polecam opcje -Al ...)
- fuser - informacje o procesach korzystających z plików ...
- lsof - informacje o plikach otwartych przez program (patrz też /proc/PID/fd/)
- vmstat - informacje o obciążeniu systemu
informacje o użytkownikach, systemie, ...
- id i whoami - informacja o aktualnym użytkowniku
- w i who - kto obecnie zalogowany
- finger [nazwa uzytkownika] - informacja o użytkowniku
- last i lastlog - ostatnio logujący się użytkownicy
- uname - informacja o systemie
- printenv i env - zmienne środowiskowe wypisywanie oraz przekazywanie do uruchamianego programu
- setenv i unsetenv - zmienne środowiskowe zdefiniowanie oraz skasowanie
- free - informacja o pamięci
- uptime - informacja o tym jak długo działa system ...
- getent - informacje z baz administracyjnych
- time - czas działania programu
- dumpkey - zwraca kody wciskanych klawiszy ...
- xconsole - pokazuje komunikaty wyrzucane na konsolę w środowisku graficznym (wymaga dostępu do /dev/xconsole, prawa dostępu do tego pliku są ustalane w /etc/init.d/sysklogd
komunikacja z i pomiędzy użytkownikami
- write [nazwa użytkownika] [termina] - wysyła komunikat do danego użytkownika
Warto tutaj wspomnieć o możliwości kierowania komunikatu na wybrany terminal (m.in. /dev/tty* w "przypadku" prawdziwych terminali, /dev/pts/* w przypadku X-serwera, xterminali i sesji ssh, zerowy to najczęściej X-serwer). W przypadku posiadania stosownych uprawnień można też pisać bezpośrednio do tych plików. - wall - wiadomość rozgłoszeniowa (do wszystkich zalogowanych użytkowników)
- talk [nazwa użytkownika] - rozmowa z użytkownikiem
- mesg - pozwala zezwolić bądź zabronić na wysyłanie wiadomości przez write na twój terminal ...
różne użyteczne narzędzia ...
- cal - kalendarz
- date - data i czas, program ten potrafi także przeliczać datę i czas - np. date -d @847103830 '+%Y-%m-%d %H:%M:%S', date -d '1996-11-04 11:37:10' '+%s', date -d '1996-11-04 11:37:10 +3week -2days'
- bc - kalkulator (warto rozważyć utworzenie sobie aliasu alias 'bc'='bc <(echo scale=3)', aby zaraz po starcie mieć 3 miejsca po przecinku)
- calc - (znany także jako apcalc) zaawansowany kalkulator o składni podobnej do C umożliwiający wykonywanie mi.in. operacji logicznych (w tym binarnych)
- numconv - program do konwersji systemów liczbowych oprócz systemów pozycyjnych o różnych podstawach obsługuje także inne systemy liczbowe - np. rzymski
- ipcalc, sipcalc - kalkulatory IP (pozwalające na obliczanie adresów sieci rozgłoszeniowych, zmianę notacji itd)
- seq - wypisuje kolejne liczby (przydane np. w for)
- xargs - pobierz argumenty z stdin
- strings - wypisuje sekwencje znaków drukowanych (określanie zawartości plików nietekstowych)
- clear - czyści terminal
- reset - przywraca ustawienia terminala (np. gdy po wyświetleniu pliku binarnego są dziwne krzaczki)
- script - tworzy zapis sesji (stdin, stdout, ...)
- which [tekst] - zwraca wykonywaną ścieżkę / polecenie przy wykonywaniu podanego tekstu
- echo - druk na standardowe wyjście
- whois - informacje o domenie
- host - informacje DNS'owe
- mkfifo - tworzy łącze nazwa (specjalny plik który może być wykorzystywany do komunikacji między procesami na zasadzie podobnej do |)
- gnuplot - rysowanie wykresów; więcej o gnuplocie: Quick Reference Card for gnuplot - kilkustronicowa broszurka z najważniejszymi poleceniami, Wstęp do gnuplota, Gnuplot Manual - oficjalny podręcznik [en], GnuPlot
- xinit - uruchamia program w srodowisku graficznym (wraz z startem srodowiska), np. xinit -e __WYBRANY_PROGRAM__ -- :1 uruchomi X'y na ekranie 1 (zazwyczaj Alt+Ctrl+F8) a w nich wskazany program
- chvt - komenda do przełączania aktywnego terminala wirtualnego (w tym terminali na których pracuje Xserwer),komenda jest odpowiednikiem kombinacji ALT+CTRL+F*
- openvt - wykonanie komendy na zadanym terminalu wirtualnym (nie mylić z emulatorem terminala - np. xterm)
narzędzia diagnostyczne i administracyjne
- su - przełącza użytkownika (podobnie działa stworzony dkla kde kdesu, w przypadku su aby przełączony używtkownik miał dostęp do "naszego" x serwera wcześniej wydajemy xhost LOCAL:nazwa_uzytkownika_na_ktorego_przelaczamy)
- stty - konfiguruje terminal (np. port szeregowy /dev/tyyS* , później możemy korzystać z niego np. za pomocą cat, echo, ... i przekierowań potoków - np. cat /dev/ttyS0 > ~/serial.log będzie logowało informacje z portu do wskazanego pliku)
- xset - konfigurowanie ekranu x-serwera, np. sleep 1; xset dpms force off spowoduje wyłączenie (uśpienie) monitora
- adduser - dodawanie użytkownika
- addgroup - dodawanie grupy
- deluser - usuwanie użytkownika
- delgroup - usuwanie grupy
- shutdown - wyłączanie i restartowanie systemu (komputera), podobnie do operowania na poziomach init
- wiele innych programów (zobacz w innych artykułach na temat linuxa na stronie) oraz informacje zawarte w systemie /proc
uwagi o hasłach
Do zmiany hasła korzystamy z polecenia passwd (podając następnie stare hasło i dwukrotnie nowe), zmiana ta nie dotyczy jednak zazwyczaj haseł do innych usług (np.: MySQL'a - hasło to zmieniamy poleceniem mysqladmin -unazwa-użytkownika -pstare-hasło password nowe-hasło, uwaga nazwę użytkownika poprzedza u (bez spacji), a stare hasło p (również bez spacji))
Przydatne skróty
Na koniec napiszę jeszcze o kilku przydatnych skrótach klawiszowych [Ctrl]+[r] - przeszukiwanie historii linii poleceń w bashu (to samo do ponownego wyszukania), [lewy Alt]+[Ctrl]+[numeryczny +] - kolejna skonfigurowana rozdzielczość w X'ach, [lewy Alt]+[Ctrl]+[numeryczny -] - poprzednia skonfigurowana rozdzielczość w X'ach, [lewy Alt]+[Ctrl]+[Esc] - zabujczy kursor w X'ach, [lewy Alt]+[Ctrl]+[Backspace] - zabicie X'ów, [Scroll Lock] - zatrzymanie/wznowienie przewijania konsoli (podobnie [Ctrl]+[s]/[Ctrl]+[q]).
Podstawy "życia" w Debianie
RAID i LVM - bezpieczniejsze, większe i bardziej elastyczne partycje dyskowe
Linux oferuje dwie przydatne technologie dotyczące zarządzania pamięciami masowymi - jest to programowy RAID oraz woluminy logiczne LVM. RAID umożliwia realizację różnych form mirroringu mających na celu zabezpieczenie przed utratą danych, a także uzyskiwanie większych przestrzeni złożonych z kilku dysków. LVM służy umożliwieniu bardziej elastycznego podziału dysku oraz uzyskania logicznych partycji złożonych z wielu różnych fragmentów dysków fizycznych. Również główny system plików (/) może korzystać z tych dobrodziejstw, należy tylko pamiętać aby gdy korzystamy z LVM bądź RAID'a innego niż RAID1 zostawić zwykłą partycję na /boot (pliki bootloadera i obrazy jądra).
# tworzymy RAID1 dla partycji /
mdadm -C -v /dev/md0 --level=1 -n 2 /dev/sda1 /dev/sdb1
# tworzymy zdegradowany RAID1 dla dwóch partycji na których będzie /home
mdadm -C -v /dev/md1 --level=1 -n 2 /dev/sda3 missing
mdadm -C -v /dev/md2 --level=1 -n 2 /dev/sdb3 missing
# tworzymy volumeny fizyczne na urządzeniach RAID dla potrzeb LVM
pvcreate /dev/md1
pvcreate /dev/md2
# tworzymy grupę voluminów dla LVM
vgcreate lvm0 /dev/md1
# dodajemy volumen fizyczny do grupy
vgextend lvm0 /dev/md2
# można też usunąć przy pomocy:
# vgreduce lvm0 /dev/md2
# tworzenie volumenu logicznego o zadanej wielkości i nazwie w ramch podanej grupy
# będzie z nim związane urządzenie /dev/lvm0/home
lvcreate -L 25G -n home lvm0
# powiększamy volumen logiczny
lvextend -L +1GB /dev/sys/homes
# powiększamy system plików, np.
# xfs_growfs /home
Zobacz w Sieci: RAID programowy, Instalacja Linuksa Na Raid1, Migracja Serwera Na RAID1, LVM.
Tworzenie mirroru zainstalowanego systemu oraz instalacje przez debootstrap ...
W celu wykonania kopii systemu na innym dysku/partycji (przeniesienia działającego systemu) należy najpierw utworzyć system plików na tym urządzeniu z wykorzystaniem stosownych narzędzi - fdisk, mkfs, tune2fs, następnie podmontować gdzieś ten system plików i przy pomocy cp -a skopiować pliki z starego na nowy dysk (warto tutaj skorzystać z symboli wieloznacznych basha np. /[a-o]* tak aby wyspecyfikować wszystkie katalogi za wyjątkiem /proc /sys oraz katalogu w którym podmontowaliśmy nowy system). Po skopiowaniu systemu należy odpowiednio zmodyfikować /etc/fstab na nowym systemie oraz konfigurację bootloadera.
Debian umożliwia także instalację systemu z działającego systemu (bez instalatora) - służy do tego celu program debootstrap (aby go zainstalować wydajemy polecenie apt-get install debootstrap), który instaluje w wskazanym katalogu (może to być katalog w którym podmontowany jest system plików z innego dysku) podstawowe pakiety dystrybucji (debootstrap wersja_dystrybucji katalog_instalacji). Po wykonaniu tego procesu należy wykonać chroot katalog_instalacji (spowoduje to zmianę katalogu głównego dla wszystkich procesów potomnych na wskazany oraz odpalenie /bin/sh pochodzącego z nowego drzewa katalogowego) oraz (już w chrootowanym środowisku) mount proc /proc -t proc. Następnie (w przypadku instalacji sieciowej) powinniśmy skonfigurować sieć wraz z DNS (jak to zrobić napisałem powyżej) i przystąpić do instalacji potrzebnych nam pakietów (w szczególności jądra i bootloadera). Po instalacji zalecam także wykonanie dpkg-reconfigure locales celem przebudowania informacji o lokalizacji systemu.
Zobacz w Sieci: Instalacja Debiana GNU/Linux przy użyciu Knoppiksa i debootstrapa, Budowanie bootowalnego ISO na debiana, Własna minidystrybucja, Fully Automatic Installation.
Instalacja oprogramowania
Polecam zakończenie działania programu dokonującego podstawowej konfiguracji systemu (automatycznie uruchamianego przy pierwszym starcie po ewentualnym wybraniu dodatkowych źródeł apta - w przypadku dobrego łącza do Internetu warto wybrać źródła HTTP lub FTP). System ten posiada na tyle wygodny system zarządzania pakietami (chyba najlepszy z jakim się spotkałem), że późniejsze dodanie potrzebnego oprogramowania nie będzie problemem. Poniżej omówię kilka poleceń i programów związanych z zarządzaniem pakietami w Debianie.
aptitude - najbardziej wysokopoziomowy i "user-friendly" (z standardowych) program do zarządzania pakietami, pracujący w tzw. "trybie pełnoekranowym". Do najważniejszych jego poleceń zaliczyć należy {podane w postaci: "znak wywołujący akcje w trybie pełnoekranowym" - "opis" ("komenda trybu linii poleceń")}:
+ - instaluje wybrany pakiet (install)
- - odinstalowywuje wybrany pakiet (remove)
_ - wykasowywuje (w raz z plikami konfiguracyjnymi) wybrany pakiet (purge)
L - reinstaluje wybrany pakiet
R - rekonfiguruje wybrany pakiet {odpowiada wywołaniu: dpkg-reconfigure nazwa_pakietu}
= - wstrzymuje aktualizację wybranego pakietu (hold)
I - instaluje "pojedyńczo" (bez spełniania zależności) wybrany pakiet
M - dodaje znacznik automatycznej instalacji (markauto)
m - usuwa znacznik automatycznej instalacji (unmarkauto)
/ - wyszukiwanie pakietu (standardowo według nazwy, aby szukać w opisie ~d szukany_tekst, aby znaleźć niedokasowane ~c lub nieoficjalne !~Odebian)
d - wyświetla zależności danego pakietu
r - wyświetla zależności od pakietu
i - wyświetla informacje o pakiecie
g - wykonuje zaplanowane akcje
q - wychodzi z aktualnego okna bądź z programu
? - pomoc
więcej: menu Pomoc w programie i man 8 aptitude
apt-get - program do pobierania i instalowania pakietów ....
apt-build - program ułatwiający kompilowanie Debiana ze źródeł, celem optymalizacji
dpkg - potężne niskopoziomowe narządzie do zarządzania pakietami. Do najważniejszych opcji zaliczyć należy:
-i nazwa_pakietu [...] - instaluje pakiet(y)
-L nazwa_pakietu [...] - lista plików zawartych w pakietach
-S sciezka_do_pliku - lista pakietów zawierających plik
--get-selections - lista zainstalowanych pakietów wraz z statusem - aktualnie zainstalowany (install) lub usunięty (deinstall)
warto zwrócić uwagę na możliwość zapisania listy zainstalowanych pakietów do pliku - dpkg --get-selections > pakiety.txt oraz zaznaczenia do instalacji pakietów zapisanych w tak wygenerowanej liście - dpkg --set-selections < pakiety.txt
więcej - tradycyjnie: man 8 dpkg, dpkg --help | less
Zachęcam do zapoznania się także z pozostałymi programami z rodziny apt-* (niektóre z nich to osobne paczki, wymagające doinstalowania) - umożliwiają one m.in. budowę systemu Debian ze źródeł (jak Gentoo ...) oraz programem aptsh (shell do zarządzania pakietami, podobnie jak jest w PLD).
Struktura katalogów i pliki konfiguracyjne
Na wstępie warto napisać jeszcze parę słów o strukturze katalogowej w Debianie (a poniekąd też i innych "Unixach") oraz kilka ogólnych uwag o plikach konfiguracyjnych i ich edycji. Katalog główny (korzeń, root) oznaczany jest przez / w nim znajdują się m.in. podkatalogi: /bin (pliki wykonywalne podstawowych programów), /sbin (pliki wykonywalne podstawowych programów administracyjnych), /lib (podstawowe biblioteki), /etc (pliki konfiguracyjne), /var (dane trwałe stacji - np. kolejka wydruków czy też pocztowa, logi systemowe - podkatalog /var/log), /tmp (pliki tymczasowe, usuwane przy starcie), /usr/bin (pliki wykonywalne pozostałych programów), /usr/sbin (pliki wykonywalne pozostałych programów administracyjnych), /usr/lib (pozostałe biblioteki), /usr/include (pliki nagłówkowe C/C++), /usr/share (pliki dodatkowe - danych ... zainstalowanych programów), /usr/src (źródła), /usr/local (podobnie jak /usr wykorzystywane głównie dla programów dokompilowywanych). Zobacz w sieci: O linuksowej strukturze katalogów słów parędziesiąt, Filesystem Hierarchy Standard .
Warto tutaj także wspomnieć iż właśnie w (pozornie może niezbyt interesującym) katalogu /var przechowywana jest konfiguracja dotycząca zainstalowanych paczek *.deb. Warto od czasu do czasu zadbać o jej zarchiwizowanie np. przy pomocy tar -czf /etc/pakiety-stan.tgz /var/lib/dpkg/status /var/lib/dpkg/statoverride /var/lib/dpkg/diversions /var/lib/dpkg/alternatives /var/lib/dpkg/info /var/lib/apt/extended_states /var/lib/aptitude/pkgstates.
Jak już wspomniałem pliki konfiguracyjne systemu znajdują się w katalogu /etc i jego podkatalogach (pliki konfiguracyjne użytkowników to ukryte (zaczynające się od kropki) pliki i katalogi w jego katalogu domowym). Zasadniczo każda aplikacja ma własny format plików konfiguracyjnych, dlatego też trudno podać jakieś ogólne informacje o nich i ich edycji ... informacji tych należy szukać w dokumentacji danego programu, także stronach mauala opisujących dane pliki (rozdział 5), bardzo przydatne gdy chcemy cos zrobić, a za bardzo nie wiemy jak jest Google ... . Można jednak powiedzieć że generalnie są to pliki tekstowe, niekiedy z podziałem na sekcje, najczęściej oparte o zasadzie że w kolejnych liniach są podawane ciągi: klucz wartosc, komentarzami na ogół są całe linie zaczynające się od #.
Start systemu - initrd, init i pliki startowe
Start systemu rozpoczyna się od startu jądra z zadanymi przez program rozruchowy (np. GRUB, LILO) parametrami. Następnie zależnie od podanych parametrów ładowany jest obraz rozruchowy do RAM-dysku (initrd=sciezka_do_obrazu_ram_dysku) lub od razu program rozruchowy (najczęściej init=/sbin/init). W przypadku korzystania z RAM-dysku wykonywane są jego skrypty (skryptem uruchamianym pierwotnie jest /sbin/init z RAM-dysku) a następnie kontrola przekazywana jest do programu określonego przez parametr init= bądź do /sbin/init.
Obrazy RAM-dysku możemy montować poleceniem mount z opcją -o loop (mount -o loop sciezka_pliku_obrazu katalog_montowania). Do ich tworzenia służy program "mkinitrd" (mkinitrd -o /boot/nazwa_naszego_obrazu_initrd /lib/modules/katalog_modolow_jadra_dla_ktorego_robimy_initrd), program ten korzysta z skryptów umieszczonych w /usr/share/initrd-tools/ kopiując je do obrazu. Z wiadomych już względów najbardziej interesującym jest skrypt "init". Jego modyfikacje umożliwiają m.in. stworzenie obrazu startowego obsługującego dodatkowy parametr wpływających na dalszy proces ładowania (np. poprzez zapisanie go do pliku który sprawdzamy w dalszych skryptach botującyh, przykład). Zaznaczyć tu należy iż man bootparam stwierdza iż parametry postaci nazwa=wartosc nie rozpoznane jako parametry jądra są przekazywane jako zmienne środowiskowe, jednak w trakcie procesu startu gdzieś giną (są dostępne w initrd z czego korzystamy, ale na uruchomionym systemie już nie - można je wydobyć z /proc/cmdline)
Następnie uruchamiany jest standardowy init (polecam zapoznanie się z plikiem konfiguracyjnym - /etc/initab), oferuje on 7 poziomów działania (0 - wyłączenie, 1 - pojedynczy użytkownik (single), 2...5 - standardowe (najczęściej używany 2), 6 - restart). Program ten podczas zmiany poziomu rozruchu przetwarza skrypty startowe z odpowiedniego katalogu /etc/rcX.d (X- poziom rozruchu na który przechodzi init), w katalogach tych znajdują się najczęściej dowiązania symboliczne do skryptów umieszczonych w /etc/init.d. Pliki w katalogach /etc/rcX.d mają zawsze nazwy postaci YZZxxxx, gdzie Y to S gdy dany skrypt wykonywany ma być z parametrem "start" albo K gdy z parametrem "stop", ZZ to dwucyfrowy numer decydujący o kolejności wykonania, xxxx - nazwa skryptu. Przy starcie systemu najpierw wykonywane są skrypty z /etc/rcS.d a następnie zadanego poziomu (zazwyczaj /etc/rc2.d, rzadziej z /etc/rc1.d - tu na ogół i tak są same "stop", a jeszcze rzadziej z innych).
Standardowo skrypty te (będące na ogół zwykłymi skryptami powłoki) mają dość złożoną strukturę - zależność działania od argumentu (start, stop, restart, ...), kontrola prawa wykonywalności uruchamianego programu; nic jednak nie stoi na przeszkodzie aby umieścić tam dowolne inne (dużo prostsze ;-) ) skrypty, jak choćby omawiane poniżej skrypty podziału łącza. Jest też programik do zarządzania rozruchem systemu - update-rc.d.
Moduły - ładowanie, konfiguracja, ...
Jądro linuxa od dłuższego już czasu ma zmodularyzowana budowę i wiele sterowników (urządzeń, protokołów, ...) oraz innych funkcji zawartych jest w osobnych modułach. Moduły te mogą być ładowane podczas startu systemu (/etc/init.d/modutils dla 2.4 albo /etc/init.d/module-init-tools dla 2.6) bądź być ładowane dynamicznie lub ręcznie podczas działania systemu. Plikiem określającym jakie moduły i z jakimi parametrami będą ładowane podczas startu jest /etc/modules , gdzie w każdej linii nie zaczętej od # pierwszy wyraz to nazwa modułu a wszystko następne to parametry. Moduły podczas startu ładowane są przez dwa skrypty odpowiedzialne za detekcję sprzętu - /etc/init.d/discover i /etc/init.d/hotplug, jednak po zapoznaniu się z tym jakie moduły są ładowane przez te skrypty można je dodać do /etc/modules i wyłączyć automatyczne uruchamianie tych skryptów (warto je jednak wykonać po zmianach w konfiguracji sprzętowej ...).
Za konfigurację modułów (oprócz wspomnianego pliku z listą ładowanych modułów) odpowiadają również pliki w katalogach /etc/modutils dla 2.4 (po edycji warto wykonać update-modules) albo /etc/modprobe.d dla 2.6. W skrypcie startowym modułów znajduje się polecenie budujące drzewo zależności (depmod), jeżeli zależy nam na przyspieszeniu startu komputera możemy je wyłączyć i uruchamiać ręcznie po zmianie, dodaniu, ... jakiś modułów, bądź modyfikacji ich parametrów w wspomnianych wyżej ktalogach.
Trzeba także zaznaczyć że w nowszych jądrach gdzie wykorzystywany jest udev, większość modułów (domyślnie) ładowana będzie automatycznie - dlatego ważniejsza jest konfiguracja /etc/modprobe* niż /etc/modules. Trzeba także zwrócić uwagę na konfigurację /etc/udev/*.
udev
udev jest mechcanizmem służącym do dynamicznego zarządzania zawartością katalogu /dev, jego konfiguracja znajduje się w katalogu /etc/udev (osobiście polecam swoje wpisy umieszczać na początku pliku udev.rules, kolejność wykonywania reguł określana jest przez porządek linków w /etc/udev/rules.d i jest ona istotna) i umożliwia m.in. (oczywiście to tylko parę przykładów zastosowań konfiguracji udev):
- Określenie numeracji kart sieciowych na podstawie adresów sprzętowych: KERNEL=="eth*", SYSFS{address}=="mac:adres:wybranej:karty:sieciowej:", NAME="eth0" (jeżeli komputer posiada dwie karty sieciowe a w konfiguracji udev nie określimy ich kolejności numeracja ich może się zmienić po restarcie - nawet jeżeli używają różnych modułów jako sterowników).
- Określanie własnych nazw urządzeń: np. BUS=="scsi", SYSFS{model}=="USB Storage-CFC ", NAME{all_partitions}="flash/cf" określa że wszystkie partycje (tak na zapas) karty CF która może być umieszczona w czytniku USB Mass Device Storage (widzianym jako urządzenie magistrali scsi) o nazwie modelu "USB Storage-CFC " mają mieć nazwy /dev/flash/cfX, gdzie X jest numerem partycji.
- Konfigurację dowiązań symbolicznych do urządzeń znajdujących się w katalogu /dev: np. KERNEL=="radio0", SYMLINK+="radio" nakazuje utworzenie dowiązania symbolicznego /dev/radio do /dev/radio0.
- Oba powyższe w jednym - np. BUS=="serio", KERNEL=="mouse*", DRIVER=="psmouse", SYMLINK="input/mouse0", NAME="input/psmouse" nakazuje myszkę PS/2 podłączyć do /dev/input/psmouse oraz utworzyć do niej dowiązanie /dev/input/mouse0
- Konfigurować uprawnienia dostępu do urządzeń - poprzez dodanie do wpisu tworzącego urządzenie OWNER="wlasciciel", GROUP="grupa", MODE="prawa_numerycznie" lub interesującego nas fragmentu tego wyrażenia.
Zazwyczj całkiem dobrym miejscem na umieszczanie swoich wpisów jest /etc/udev/udev.rules. Na koniec wspomnę że udev'owi nie zawsze udaje się ładować wszystko autmagicznie i np. aby mieć /dev/lp0 należy załadować (np. przez /etc/modules) moduł lp. Podobnie warto tam dopisać ipv6.
Zobacz też: Udev - zarządzanie plikami urządzeń, Automontowanie systemów plików (automount, autofs).
Modyfikowanie / przebudowanie pakietu:
Aby zbudować jakis pakiet ("pakiet_do_poprawki") należy pobrać jego wersję źródłową (apt-get source pam), nanieść poprawki (albo na kod źródłowy albo tylko na opcje budowania umieszczone w "rules") a następnie zbudować pakiet binarny (dpkg-buildpackage -rfakeroot) i zainstalować go lub wypakować z niego potrzebne pliki. W przypadku pakietów budowanych na nasze potrzeby pomocny może być też program "debchange", umożliwiający automatyzację zmian w changelog - np. debchange -v "1.0."`date +"%Y%m%dT%H%M%S"` "OPIS" && dpkg-buildpackage -rfakeroot
Budowanie modułów dla swojego jądra
Często nie ma paczek z zbudowanymi modułami dla używanej przez nas wersji jądra, niekiedy takich modułów nie ma w ogóle. Należy wtedy zainstalować pakiet XXXX-source (np. shfs-source, o którym poniżej), w katalogu /usr/src/ pojawi się plik z spakowanymi źródłami danego modułu. Należy po przejściu do wspomnianego katalogu (cd /usr/src/) rozpakować źródła (najczęściej: tar -xjf xxxx.tar.bz2 lub tar -xzf xxxx.tar.gz). Następnie przejść do katalogu z nagłówkami odpowiedniego jądra (musi być zainstalowany odpowiedni pakiet kernel-hearders) i tam wykonać: make-kpkg --rootcmd=fakeroot --append-to-version=ZZZZ modules-image, gdzie ZZZZ to określenie wersji pakietu jądra (np: -1-686-smp). Po wykonaniu tego polecenia wracamy do /usr/src/ i tam czekają na nas gotowe do zainstalowania (np. przez dpkg -i) pakiety Debiana (*.deb)
Budowanie (zmodyfikowanego) jądra
Niekiedy zachodzi potrzeba zbudowania zmodyfikowanego (pod względem konfigu lub z nałożonymi łatami) jądra. Poniżej przedstawię drogę do zbudowania jądra 2.6.24.4 z nałożonymi łatami IMQ oraz wybranymi z łat patch-o-matic. Jądro będzie budowane metodą Debiana, a poniższy opis należy traktować jako przykład który należy dostosować do własnych potrzeb.
TEST
#################### ### POBIERANIE ### ####################
export KERNEL_DIR="$PWD/2.6.24"
export IPTABLES_DIR="$PWD/iptables-1.4.0"
wget http://www.linuximq.net/patchs/iptables-1.4.0-imq.diff
mv iptables-1.4.0-imq.diff iptables-imq.diff
wget http://www.linuximq.net/patchs/linux-2.6.24-imq.diff
mv linux-2.6.24-imq.diff linux-imq.diff
wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20080405.tar.bz2
tar -xjf patch-o-matic-ng-20080405.tar.bz2
mv patch-o-matic-ng-20080405 patch-o-matic-ng
apt-get source iptables
wget ftp://ftp.icm.edu.pl/pub/Linux/kernel/v2.6/linux-2.6.24.4.tar.gz
tar -xzf linux-2.6.24.4.tar.gz
mv linux-2.6.24.4 2.6.24
cp /boot/config-2.6.24-1-686 $KERNEL_DIR/.config
############# ### IMQ ### #############
patch -p0 < linux-imq.diff
patch -p0 < iptables-imq.diff
####################### ### patch-o-matic ### #######################
pushd patch-o-matic-ng;
./runme pending
## base ##
# dopasowywanie u32; od 2.6.23 w jajku
# ./runme u32
# grupy adresów obsługiwane programem ipset
./runme set
## extra ##
# ustawianie trasy routibgu z poziomu iptables
./runme ROUTE
## external ##
./runme --download
# masowe markowanie
./runme IPMARK
# reguły filtrowania true/false sterowanego przec /proc
./runme condition
# limity połączeń; od 2.6.23 w jajku
#./runme connlimit
# filtrowanie po czasie
./runme time popd
############################ ### budowanie iptables ### ############################
pushd $IPTABLES_DIR
chmod +x $IPTABLES_DIR/extensions/.IMQ-test*
debchange -l "imq" "IMQ"
dpkg-buildpackage -rfakeroot popd
######################### ### budowanie jądra ### #########################
pushd $KERNEL_DIR
make oldconfig;
vi .config
make-kpkg oldconfig
make-kpkg clean fakeroot
make-kpkg --revision imq1 --initrd kernel_image
Copyright (c) 1999-2008, Robert Paciorek (http://www.opcode.eu.org/), BSD-type license
Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania odyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o rawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki żytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.
This program is free software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.