Podstawy Linuxa
Podstawowe polecenia Unix'a
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 ... (Używanie rsync poprzez SSH
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 (i innych shellach opartych na readline), 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] - zabójczy kursor w X'ach,
- [lewy Alt]+[Ctrl]+[Backspace] - zabicie X'ów,
- [lewy Alt]+[lewy przycisk myszy] - przesuwanie okna w X'ach,
- [lewy Alt]+[prawy przycisk myszy] - zmiana rozmiaru okna w X'ach,
- [lewy Alt]+[środkowy przycisk myszy] - okno na wierzch/pod spód w X'ach,
- [lewy Alt]+[F2] - okienko uruchom w KDE (pozwala także na "uruchomienie" URL czy też działań matematycznych),
- [lewy Alt]+[F*] - przełączanie pulpitów w KDE,
- [lewy Alt]+[Ctrl]+[F*] - przełączanie terminali wirtualnych,
- [Scroll Lock] - zatrzymanie/wznowienie przewijania konsoli (podobnie [Ctrl]+[s]/[Ctrl]+[q])
Z innych wygodnych "skrótów" warto wspomnie o środkowym i prawym przycisku myszy na ikonie maksymalizacji okna w KDE - powodują maksymalizację odpowiednio w pionie i poziomie 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
# ogladamy to co żesmy stworzyli
pvdisplay
vgdisplay
lvdisplay
# powiększamy volumen logiczny
lvextend -L +1GB /dev/sys/homes
# powiększamy system plików, np.
# xfs_growfs /home
# resize2fs /dev/lvm0/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 chcemy załadować 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.
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/*.
Moduły są ładowane na etapie initrd (wtedy aby jakiekolwiek zmiany konfiguracyjne mogły odnieść skutek należy przebudować initrd) lub na etapie normalnego init'a - poprzez udev (/etc/rcS.d/S03udev) lub na podstawie wspomnianego /etc/modules (/etc/rcS.d/S20module-init-tools). Oczywiście inne skrypty startowe mogą ładować swoje moduły, jeżeli robią to np. przez insmod (a nie modprobe) to wszelkie opcje z konfiguracji udev i modprobe (/etc/modprobe.d/* - wszystkie pliki w tym katalogu są równoważne) są ignorowane.
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. Podobną rolę jak wpisy udev mogą pełnić w niektórych przypadkach parametry modułów określające z jakim numerem ma występować urządzenie (tak jest np. w modułach v4l) - możemy je podać w konfiguracji modprobe. Z kolei nieskuteczną drogą jest określanie numerów urządzeń poprzez wpisy alias w konfiguracji modprobe.
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 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 linux-headers-YYYYZZZZ, gdzie YYYY wersja jadra, a ZZZZ to określenie wersji pakietu jądra - np: -1-686-smp) - /usr/src/linux-headers-YYYYZZZZ.
I tam wykonać: make-kpkg --rootcmd=fakeroot --append-to-version=ZZZZ modules-image. 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.
####################
### 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
Wycinki z Debian Reference
Jest to subiektywny wybór linków do kilku fragmentów Debian Reference.
Podstawy Unix'a:
Warto wiedzieć:
- Harmonogram działań (cron, at)
- Łączenie plików PDF lub PS
- Jak wyłączyć wygaszacz ekranu
- Ustawienie właściwego typu konsoli
- Zmiana konsoli przy pomocy screena. Od razu w tym miejscu nadmienie, iż bardzo przydatną funkcją screena jest możliwośc odpalenia programu w tle i podglądania jego wyjścia, sesje taką tworzymy
screen -m -d komenda (przez -S możemy określić jej nazwę), następnie możemy się do niej podłączyć screen -r [pid] (aby się odłączyć wciskamy Ctrl+a a potem d), aby ustalic pid możemy wylistować działające sesje screen -ls. Plik konfiguracyjny screen'a (~/.screenrc) pozwala na dodanie do niego np. paska informacyjnego z zegarem itp. bajerami - przykład: backtick 2 0 1 /bin/date +%s
# podstaw pod %2` wynik podanej komendy, odsiwerzany co 1 sek. i wyswietlany nieskonczona ilosc cykli (0)
caption always "%{+b}$USER@%H %{Gk}%{gw} (load: %l | tytul okna (opcja -t): %t | wynik komendy: %2`) %{.k} %-21=%{yk}%Y-%m-%d %0c %D"
# %{} sluza modyfikacji koloru i efektu, %-21 kaze wypisac 21 znakow przed koncem linii
Dla admina:
Linki
Zobacz także: man nazwa-polecenia i/albo info nazwa-polecenia i/albo nazwa-polecenia --help.
Zachęcam też do zapoznania się z artykułemi o konfiguracji sieci IP, podstawowych usługach w sieciach komputerowych, bazą przydatnych programów, obróbce multimediów oraz o bashu.
Zobacz w Sieci: Elementarz un*x'owy, Pierwsze kroki w systemie GNU/Linux, Programy @ jakilinux.org, Komendy i podstawy Linuksa, Tam, gdzie wzrok nie sięga, Jak igła w stogu siana, Debian GNU/Linux Reference Card, Identyfikacja i testowanie sprzętu PC pod Linuksem
|