Linux podstawy (Piotr Stykowski)


Linux - podstawowe zagadnienia

Co to jest Linux???

Linux - ostatnio coraz częściej można to słowo usłyszeć w mediach, lub przeczytać jakiś artykuł o nim w czasopismach komputerowych - co to w zasadzie jest i dlaczego wzbudza aż tyle kontrowersji? Czy przesiadać się na niego ze znanego nam wszystkim systemu jakim jest Windows? Co go wyróżnia od innych systemów?

   Linux jest to 32-bitowy, wielozadaniowy system operacyjny klasy Unix. Przede wszystkim jest darmowy i stabilny. Również większość oprogramowania przeznaczonego dla niego jest darmowa, zdarzają się wyjątki w postaci oprogramowania komercyjnego, shareware lub licencji tylko do użytku domowego, no ale takie jest prawo rynku. Jednak głównym przesłaniem twórców oprogramowania dla tego systemu jest tworzenie i udostępnianie darmowego oprogramowania wraz z kodem źródłowym. Oprogramowanie to często przewyższa swoimi możliwościami konkurencyjne oprogramowanie komercyjne. Każdy kto zna się na programowaniu może dowolnie zmieniać kod programu pod warunkiem dołączenia swoich poprawek w postaci kodu do programu. To wszystko powoduje, że nad oprogramowaniem dla Linuksa pracują tysiące indywidualnych programistów na świecie, również w Polsce, oraz coraz więcej firm. Wsparcie dla Linuksa z dnia na dzień ogłasza coraz więcej firm, między innymi producenci sprzętu tacy jak IBM, Intel, HP czy Lexmark. W tej chwili duża ilość serwerów internetowych postawionych jest na Linuksie, wykorzystywany on jest przez wiele przedsiębiorstw, firm państwowych, militarnych, rządowych, prestiżowych hoteli, przykładem może być Kancelaria Sejmu w Polsce, czy Biuro Bezpieczeństwa Narodowego.

   Istnieje wiele dystrybucji Linuksa, od najprostszych - przeznaczonych raczej dla początkującego użytkownika, są to Corel Linux(w zasadzie był - Corel wycofał się z tworzenia go), WinLinux i według mnie Mandrake, przez dystrybucje poważniejsze, jednak coraz łatwiejsze do opanowania jak Red Hat czy SuSE, po takie, które są wyzwaniem dla zagorzałych zwolenników konsoli i konfiguracji ręcznej - Slackware (jednocześnie jedna z bezpieczniejszych i stabilniejszych dystrybucji) oraz sprawiający dużo kłopotów w konfiguracji Debian. Co powinniśmy wybrać? Najlepiej spróbować kilku dystrybucji i samemu ocenić co nam jest potrzebne i w czym czujemy się najlepiej.

   A jak się to zaczęło? Oto pierwszy post Linusa na grupy usenetu dotyczący stworzonego przez niego projektu:

Autor:Linus Benedict Torvalds (torvalds@klaava.Helsinki.FI)

Temat:Free minix-like kernel sources for 386-AT

Grupy dyskusyjne:comp.os.minix

Data:1991-10-05 08:53:28 PST

Do you pine for the nice days of minix-1.1, when men were men and wrote

their own device drivers? Are you without a nice project and just dying

to cut your teeth on a OS you can try to modify for your needs? Are you

finding it frustrating when everything works on minix? No more all-

nighters to get a nifty program working? Then this post might be just

for you :-)

As I mentioned a month(?) ago, I'm working on a free version of a

minix-lookalike for AT-386 computers. It has finally reached the stage

where it's even usable (though may not be depending on what you want),

and I am willing to put out the sources for wider distribution. It is

just version 0.02 (+1 (very small) patch already), but I've successfully

run bash/gcc/gnu-make/gnu-sed/compress etc under it.

Sources for this pet project of mine can be found at nic.funet.fi

(128.214.6.100) in the directory /pub/OS/Linux. The directory also

contains some README-file and a couple of binaries to work under linux

(bash, update and gcc, what more can you ask for :-). Full kernel

source is provided, as no minix code has been used. Library sources are

only partially free, so that cannot be distributed currently. The

system is able to compile "as-is" and has been known to work. Heh.

Sources to the binaries (bash and gcc) can be found at the same place in

/pub/gnu.

ALERT! WARNING! NOTE! These sources still need minix-386 to be compiled

(and gcc-1.40, possibly 1.37.1, haven't tested), and you need minix to

set it up if you want to run it, so it is not yet a standalone system

for those of you without minix. I'm working on it. You also need to be

something of a hacker to set it up (?), so for those hoping for an

alternative to minix-386, please ignore me. It is currently meant for

hackers interested in operating systems and 386's with access to minix.

The system needs an AT-compatible harddisk (IDE is fine) and EGA/VGA. If

you are still interested, please ftp the README/RELNOTES, and/or mail me

for additional info.

I can (well, almost) hear you asking yourselves "why?". Hurd will be

out in a year (or two, or next month, who knows), and I've already got

minix. This is a program for hackers by a hacker. I've enjouyed doing

it, and somebody might enjoy looking at it and even modifying it for

their own needs. It is still small enough to understand, use and

modify, and I'm looking forward to any comments you might have.

I'm also interested in hearing from anybody who has written any of the

utilities/library functions for minix. If your efforts are freely

distributable (under copyright or even public domain), I'd like to hear

from you, so I can add them to the system. I'm using Earl Chews estdio

right now (thanks for a nice and working system Earl), and similar works

will be very wellcome. Your (C)'s will of course be left intact. Drop me

a line if you are willing to let me use your code.

Linus

PS. to PHIL NELSON! I'm unable to get through to you, and keep getting

"forward error - strawberry unknown domain" or something.

  1. Instalacja programów

Pakiety RPM

Aby zainstalować pakiet RPM wpisujemy polecenie:

rpm -ivh nazwa_pakietu.rpm

użyte opcje:
-i   -polecenie instalacji pakietu
-v - podaje nazwę instalowanego pakietu
-h - pokazuje postęp instalacji za pomocą znacznika #

Aby uaktualnić zainstalowany pakiet należy wydać polecenie:

rpm -Uvh nazwa_pakietu.rpm

Zastosowana tutaj opcja -U usuwa poprzednią wersję programu i instaluje nową.

Odinstalowanie programu możemy wykonać wydając polecenie:

rpm -e nazwa_pakietu.rpm

Żeby zainstalować pakiety źródłowe RPM, mające rozszerzenie *.src.rpm, należy je wcześniej skompilować poleceniem:

rpm --rebuild nazwa_pakietu.src.rpm

Po tej operacji, jeżeli nie wystąpiły jakieś błędy podczas kompilacji, powinniśmy uzyskać ( Red Hat ) w katalogu /usr/src/redhat/RPMS/i386 gotowy do zainstalowania pakiet binarny.

Instalacja programów spakowanych programami tar, gzip i bzip2

Aby rozpakować dany plik musimy wydać odpowiednią komendę:

dla plików z rozszerzeniem *.tgz lub *.tar.gz odpowiednia jest komenda:   tar -xvzf nazwa_pliku.tar.gz

dla plików *.tar.bz2 musimy użyć komendy:  tar -xvjf nazwa_pliku.tar.bz2

Teraz możemy przystąpić do instalacji programu, wykonuje się to zazwyczaj ciągiem poleceń wydanych w katalogu ze źródłami programu:
./configure
make
make install

Przed instalacją warto jest przeczytać pliki README i INSTALL, zazwyczaj znajdujące się w katalogu ze źródłami. Można w nich dowiedzieć się ważnych informacji dotyczących programu i sposobu jego konfiguracji i instalacji.

Inne pliki instalacyjne

Czasami może się zdarzyć, że programy wymagają odmiennego podejścia do ich instalacji. Przykładem może być ostatni hit - StarOffice - udostępniany jako plik instalacyjny zakończony rozszerzeniem *.bin. W tym wypadku należy nadać plikowi możliwość uruchomienia poleceniem chmod. Zdarzają się też inne programy, które posiadają gotowe skrypty lub programy instalacyjne.

  1. Najważniejsze polecenia shella

adduser nazwa_konta - założenie nowego konta
cal - wyświetla kalendarz na bieżący miesiąc
cat nazwa_pliku - wyświetla zawartość pliku
cd - polecenie analogiczne jak w systemie MS-DOS
chmod u/g/o/a +/- r/w/x plik/katalog - polecenie służące do zmiany praw dostępu do plików i katalogów
   - właściciela określia się za pomocą liter: u - właściciel, g - grupa, o - inni użytkownicy, a - wszyscy
   - prawa określa się następująco: r - zezwolenie na odczyt, w - zapis, x - uruchomienie
Innymi sposobem ustawiania praw dostępu to ustawianie ich za pomocą liczb ósemkowych. Cyframi od 0-7 ustawiamy odpowiednio:
   0 to ( --- ) brak praw dostępu
   1 to ( --x ) wykonywanie
   2 to ( -w- ) zapis
   3 to ( -wx ) zapis i wykonywanie
   4 to ( r-- ) odczyt
   5 to ( r-x ) odczyt i wykonywanie
   6 to ( rw- ) odczyt i zapis
   7 to ( rwx ) odczyt, zapis, wykonywanie
wydając polecenie chmod podajemy 3 liczby, które oznaczają w kolejności: prawa dostępu właściciela, grupy i innych.
chown nowy_właściciel  plik/katalog - polecenie zmiany właściciela pliku lub katalogu
chgrp nowa_grupa  plik/katalog - polecenie zmiany grupy pliku lub katalogu
clear - czyszczenie ekranu
cmp plik1 plik2 - porównuje zawartość dwóch plików
cp - kopiuje pliki i katalogi
date - wyświetla bieżącą datę
df - sprawdza wolne miejsce na dysku
diff plik1 plik2 - stwierdza, czy między zawartością dwóch plików występują różnice
du - informuje o wielkości poszczególnych katalogów
echo - wyświetla podany tekst
kill - kończy pracę danego procesu
last nazwa_użytkownika - wyświetla logi użytkownika
ln -s nazwa_katalogu   nazwa_łącza - tworzy łącze symboliczne (tzw. link)
ls - wyświetla zawartość katalogu
mail - wysyła i odbiera pocztę
man - pomoc na wszelkie tematy - np.: man ls - pokaże nam pomoc na temat polecenia ls
mkdir - tworzenie katalogu
mv - zmiana nazwy pliku lub jego przeniesienie
rmdir - usuwanie katalogu
passwd nazwa_konta - ustawienie hasła dla konta
rm - usunięcie pliku
rm -f nazwa_katalogu - usuwanie katalogu wraz z podkatalogami bez potwierdzenia
rpm -q | część_nazwy_pakietu - sprawdza czy jest zainstalowany dany pakiet RPM
shutdown - restartuje komputer
wall - przesyła komunikaty do wszystkich użytkowników
who - lista użytkowników
w - jak wyżej, jednak informacje są dokładniejsze

  1. Partycje FAT16/32 w linuxie

Podczas instalacji Linuksa możemy wskazać miejsce montowania istniejących już partycji Windowsa (fat16/32), jednak partycje te dostępne są w trybie rw (odczyt/zapis) tylko dla root-a, zaś zwykły użytkownik może jedynie używać ich w trybie ro czyli tylko do odczytu. Jeżeli chcesz to zmienić musisz zmodyfikować, lub jeżeli zamierzasz podmontować nową partycję wprowadzić wpis w pliku /etc/fstab.

  Standardowo partycje montuje się w katalogu /mnt, gdzie tworzymy katalog do którego ma być podmontowana, np: "Windows" lub "c". Jeżeli wskazaliśmy punkt montowania podczas instalacji to wpis w pliku /etc/fstab wygląda mniej więcej tak:

/dev/hda1   /mnt/c   vfat   defaults   0 0

Wtedy w miejscu gdzie jest opcja defaults należy wpisać noauto,user,rw. Jeżeli zamierzamy podmontować nową partycję, której nie ma w pliku konfiguracyjnym fstab to musimy stworzyć analogiczną linię.

Wyjaśnienie poszczególnych opcji:

  /dev/hda1 - partycja do podłączenia - w tym przypadku jest to pierwsza partycja na pierwszym dysku. Litery hd oznaczają, że mamy do czynienia z twardym dyskiem, następna litera to może być a, b, c lub d - oznacza to który to dysk w komputerze (a - pierwszy, b - drugi...). Cyfra zaś oznacza numer partycji, która ma być podmontowana (1 - pierwsza, 2 - druga itp...).

  /mnt/c - punkt montowania partycji - w tym przypadku jest to katalog c, znajdujący się w katalogu /mnt.

  vfat - typ partycji - vfat oznacza partycję fat. Inne możliwości to ext2, ext3, swap i inne - możesz poczytać o tym w manualu fstab wpisując polecenie man fstab.

  noauto,user,rw - oznacza, że partycja nie jest montowana automatycznie i prawa do odczytu i zapisu ma użytkownik, który ją zamontował (oraz root oczywiście).

  0 0 - tu nic nie zmieniamy...

Otrzymamy więc taką linię:

/dev/hda1   /mnt/c   vfat   noauto,user,rw   0 0

Jedyne co będzie teraz trzeba robić to montować partycję samodzielnie poleceniem mount /mnt/c - oczywiście jako użytkownik - oraz odmontowywać poleceniem umount /mnt/c.

  1. Kompilacja jądra w Linuxie

Kompilację nowego jądra Linuksa powinniśmy zacząć od skopiowania źródeł kernela, można je ściągnąć z witryny www.kernel.org, lub innych serwisów FTP. Najlepszym wyjściem jest skopiowanie najnowszej wersji stabilnej, poznajemy je po numeracji, czyli druga cyfra numeru wersji powinna być parzysta (np. w chwili pisania najnowszym stabilnym jądrem jest 2.2.17).

   Następnym krokiem jest utworzenie katalogu dla źródeł jądra, w przypadku wersji 2.2.17 wykonujemy to poleceniem:

mkdir /usr/src/linux-2.2.17

Po rozpakowaniu źródeł, musimy utworzyć łącze symboliczne do naszego katalogu:

rm -f linux - polecenie to usuwa istniejący link do źródeł poprzedniego jądra
ln -s /usr/src/linux-2.2.17 /usr/src/linux

Możemy zacząć część najważniejszą - konfigurację kernela, wykonujemy to poleceniem make menuconfig lub jeżeli chcemy konfigurację w środowisku X Window make xconfig. Powinno nam się ukazać miłe dla oka i czytelne menu konfiguracyjne.

0x01 graphic

Opis ważniejszych opcji występujących przy konfiguracji kernela

0x01 graphic

1. Code maturity level options

   [ * ] Prompt for development and/or incomplete code/drivers

Zaznaczenie tej opcji umożliwi nam dołączenie do kodu wynikowego dodatkowych sterowników, które są jeszcze w fazie testowania. Ja przy kompilacji zazwyczaj zaznaczam tą opcję.

0x01 graphic

2. Processor type and features

   (PPro/6x86MX) Processor family

W tej opcji wybieramy typ procesora jaki posiadamy

   (1GB/2GB) Maximum Physical Memory

Największy rozmiar pamięci fizycznej - domyślnie ustawiony na 1GB

   [  ] Math emulation

Włącza emulację koprocesora matematycznego, jeżeli nie posiadamy koprocesora i nie zaznaczymy tej opcji, nic się takiego nie stanie - Linux sam automatycznie będzie emulował jego obecność.

   [ * ] MTRR (Memory type range register)

Włączamy tą opcję przy procesorach Pentium Pro i Pentium wzwyż.

   [  ] Symetric multi-processing support

Włączamy tą opcję jeżeli posiadamy komputer wieloprocesorowy.

0x01 graphic

3. Loadable module support

   [ * ] Enable module support

Opcja pozwalająca na kompilowanie fragmentów kodu kernela jako modułów, które mogą być ładowane w razie potrzeby. Zalecane jest zaznaczenie tej opcji.

   [  ] Set version information on all symbols for modules

Umożliwia korzystanie ze skompilowanych modułów przy instalowaniu nowego jądra. Można zaznaczyć choć niekoniecznie...

   [ * ] Kernel module loader

Automatycznie ładuje moduły w razie potrzeby - zaznaczamy

0x01 graphic

4. General setup

   [ * ] Networking support

Jeżeli nawet nie jesteśmy podłączeni do żadnej sieci to zaznamy tą opcję.

   [ * ] PCI Support

Zaznaczamy tą opcję jeżeli posiadamy szynę PCI.

   [ * ] PCI quirks

Opcja ta ustawia szynę PCI jeśli BIOS komputera jest błędny, jeżeli jesteśmy pewni, że BIOS jest dobry możemy ją wyłączyć, zalecane jest włączenie tej opcji.

   (BIOS/Direct/Any) PCI access mode

Sposób dostępu do szyny PCI - z użyciem BIOS-u, lub bezpośredni. Najlepiej pozostawić ustawienie Any.

   [ * ] System V IPC
   [ * ] Sysctl support

Zalecane włączenie tych opcji.

   [ M ] Kernel support for a.out binaries
   [ * ] Kernel support for ELF binaries
   [ M ] Kernel support for MISC binaries

Wsparcie dla podstawowych formatów plików wykonywalnych, gdzie a.out jest już formatem raczej nieużywanym.

   [ * ] Parallel port support

Powinniśmy zaznaczyć tą opcję jeżeli zamierzamy korzystać z urządzeń podłączonych do portu równoległego.

       [ * ] PC-style hardware

Posiadacze komputerów PC powinni zaznaczyć tą opcję.

   [ * ] Advanced Power Management BIOS support

Wykorzystanie funkcji APM BIOS-u w Linuksie.

0x01 graphic

5. Plug and Play support

   [ * ] Plug and Play support

Jeżeli potrzebujemy możemy zaznaczyć.

0x01 graphic

6. Block devices

   [ M ] Normal PC floppy disk support

Opcja zalecana do kompilacji jako moduł.

   [ * ] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

Wsparcie dla standardu IDE - zalecane włączyć.

   [ * ] Include IDE/ATA-2 DISK support
   [ * ] Include IDE/ATAPI CDROM support

Zaznaczamy.

   [ * ] CMD640 chipset bugfix/support
     [ * ] CMD640 enchanced support
   [ * ] RZ1000 chipset bugfix/support

Włączenie tych opcji ma za zadanie załatanie błędów w układach scalonych.

   [ * ] Generic PCI IDE chipset support
      [ * ] Generic PCI bus-master DMA support
   [ * ] Use DMA by default when available

Zalecane zaznaczenie tych opcji ( chyba, że posiadamy tylko SCSI )

   [  ] Loopback Device Support

Sterownik umożliwiający zamontować plik, który jest obrazem dysku.

   [  ] Multiple devices driver support

Sterownik pozwalający zamontować wiele partycji fizycznych w jedną logiczną.

   [  ] RAM disk dupport

Tworzy dysk wirtualny w pamięci RAM

0x01 graphic

7. Networking options

   [ M ] Packet socket

Opcja wykorzystywana prze aplikacje do komunikacji w sieci

   [  ] Kernel/User netlink socket
   [  ] Network firewalls

Zaznaczmy gdy chcemy ustawić firewalla.

   [ * ] Unix domain socket

Zaznaczamy.

   [ * ] TCP/IP Networking

Potrzebne do obsługi protokołu TCP/IP mającego zastosowanie w internecie i lokalnych sieciach

   [  ] The IPX protocol

Opcja do obsługi protokołu sieciowego IPX w Novellu

0x01 graphic

8. SCSI support

   [  ] SCSI support

Opcja do obsługi urządzeń SCSI

   [  ] SCSI disk support
   [  ] SCSI tape support
   [  ] SCSI CD-ROM support
   [  ] SCSI generic support

Zaznaczamy odpowiednie urządzenia, dla których chcemy włączyć wsparcie.

0x01 graphic

9. Network device support

   [ * ] Network device support

Zaznaczamy tą opcję, jeżeli chcemy używać sieci

   [ M ] Dummy net driver support

Zaznaczamy przy używaniu protokołów PPP lub SLIP

   Ethernet (10 or 100Mbit)

Opcja potrzebna do utworzenia lokalnej sieci z użyciem kart sieciowych, wybieramy model karty.

   [ M ] PLIP (paraller port) support

Potrzebne do połączenia komputerów za pomocą portu równoległego

   [ M ] PPP (point-to-point) support

Potrzebne do korzystania z internetu przez modem.

0x01 graphic

10. Amateur Radio support

Zazwyczaj nie używane.

0x01 graphic

11. IrDA subsystem support

Menu do obsługi połączeń na podczerwień.

0x01 graphic

12. ISDN subsystem

Menu do obsługi urządzeń ISDN oraz ich konfiguracji.

0x01 graphic

13. Old CD-ROM drivers (not SCSI, not IDE)

Obsługa CD-ROMów starego typu.

0x01 graphic

14. Character devices

   [ * ] Virtual terminal

Opcja pozwala nam na przełączanie się między terminalami za pomocą klawiszy ALT+Fx.

   [ * ] Support for console on virtual terminal

Włączamy.

   [ M ] Standard/generic (dumb) serial support

Obsługa urządzeń podłączonych do portu szeregowego

   [ * ] Unix98 PTY support

Wsparcie dla pseudoterminali.

   (256) Maximum number of Unix98 PTY in use (0-2048)

Maksymalna liczba pseudoterminali dla przeciętnych komputerów liczba 256 jest wystarczająca.

   [ * ] Parallel printer support

Zaznaczamy jeżeli mamy podłączoną drukarkę do portu równoległego.

   [ * ] Mouse Support (not serial mice) Mice

Obsługa myszki podłączonej do portu PS/2. Przy zwykłych myszkach nie zaznaczamy.

   [ * ] Enhanced Real Time Clock Support

Włączenie dostępu do zegara czasu rzeczywistego.

   Video For Linux

Potrzebne jeżeli posiadamy kartę TV lub radiową.

   Joystick support

Włączamy do obsługi joysticka, wybieramy model.

0x01 graphic

15. Filesystem

   [  ] Quota support

Włączenie tej opcji pozwoli na ustawienie limitów dyskowych dla użytkowników.

   [  ] Kernel automonter support

Włączenie tej opcji pozwoli nam na zamontowanie odległego systemu plikowego.

   [ * ] DOS FAT fs support

Pozwala na korzystanie z partycji dosowych.

     [ * ] MSDOS fs support

Dostęp do partycji DOS

     [ ] UMSDOS: Unix-like filesystem on top of standard MSDOS filesystem

Pozwala na uruchomienie linuksa bezpośrednio z partycji DOS.

     [ * ] VFAT (Windows-95) fs support

Dostęp do partycji FAT Windowsa.

   [ * ] ISO 9660 CDROM filesystem support

Zaznaczamy jeżeli chcemy korzystać z CD-ROMu.

   [ * ] Microsoft Joliet CDROM extisions

Rozszerzenie standardu ISO 9660, pozwalające na korzystanie z długich nazw w formacie unicode.

   [  ] NTFS filesystem support (read-only)

Opcja pozwala na odczyt z partycji Windows NT.

   [ * ] /proc filesystem support

Utworzenie wirtualnego systemu plików w katalogu /proc, do którego jądro zapisuje informacje o działalności systemu.

   [ * ] /dev/pts filesystem for UNIX98 PTYs

Zaznaczamy tę opcję jeśli zaznaczyliśmy UNIX98 PTY support.

   [ * ] Second extended fs support

Obsługa standardowego systemu plików Linuksa ext-2. Zaznaczamy to koniecznie.

   Network File System

Menu z opcjami do obsługi sieciowych systemów plikowych.

   Native Language Support

Menu do ustawienia obsługi języka i kodowania znaków. Zaznaczamy Codepage 852 i NLS ISO 8859-2.

0x01 graphic

16. Console drivers

   [ * ] VGA text console

Umożliwia korzystanie z Linuksa w trybie tekstowym. Koniecznie zaznaczamy tą opcję.

   [  ] Video mode selection support

Opcję zaznaczamy gdy mamy kartę, która pozwala na ustawienie niestandardowych rozdzielczości ekranu.

0x01 graphic

17. Sound

   [ M ] Sound card support

Zaznaczamy jeżeli mamy kartę dźwiękową, należy wkompilować jako moduł.

   Additional low level sound drivers

W poszczególnych opcjach możemy ustawić rodzaj karty jaką posiadamy i jej konfigurację.

0x01 graphic

18. Kernel hacking

   [  ] Magic SysRq key

Opcja dla ludzi, którzy zajmują się testowaniem jądra.

0x01 graphic

Po wyjściu z konfiguratora i zapisaniu ustawień możemy zacząć kompilację nowego jądra. Wykonujemy to wydając ciąg poleceń:

make dep - wykonuje wszystkie powiązania

make clean - czyszczenie niepotrzebnych śmieci ze źródeł jądra

make bzImage - kompiluje jądro - może to potrwać około kilkunastu minut. Po tej komendzie jeżeli wszystko poszło dobrze w katalogu /usr/src/linux/arch/i386/boot/ powinniśmy znaleźć plik bzImage.

make modules - kompilowanie modułów

make modules_install - instalacja modułów do katalogu z modułami np.: /lib/modules/linux-2.2.17

W przypadku kiedy kompilujemy jądro o tym samym numerze wersji musimy usunąć katalog z poprzednio skompilowanymi modułami.

0x01 graphic

Teraz musimy skopiować nowo utworzone jądro do katalogu /boot/.

Do pliku /etc/lilo.conf dopisujemy następujące linijki:

   root=dev/hda1 <- tu wpisujemy numer partycji gdzie mamy zainstalowanego Linuksa.
   image=/boot/bzImage
   label=nowy_linux
   read-only

Następnie wydajemy komendę umożliwiającą nam bootowanie z nowego jądra:

lilo -D nowy_linux

Następną rzeczą, którą musimy wykonać jest skopiowanie z katalogu ze źródłami jądra pliku System.map do katalogu /boot/ i zmienienie jego nazwy na System.map-numer_wersji, czyli w naszym wypadku na System.map-2.2.17.

Usuwamy link do poprzedniej mapy systemowej poleceniem:

rm /boot/System.map

Tworzymy nowy link:

ln -s /boot/System.map-numer_wersji /boot/System.map

Teraz możemy spokojnie zrestartować system i powinno się uruchomić nasze nowo skompilowane jądro.

0x01 graphic

Aplikowanie patchy do źródeł kernela:

Bardzo często zachodzi konieczność uaktualnienia jądra poprzez nałożenie łatek na jądro, tzw. patchy. Dokonuje się tego przez wydanie odpowiedniego polecenia:

gzip -dc /usr/src/linux/nazwa.patcha.diff.gz | patch -p1

Następnie postępujemy już zgodnie z zasadami kompilacji jądra.

0x01 graphic

Polecenia przydatne do obsługi modułów:

lsmod - polecenie wyświetlające listę załadowanych modułów
depmod - utworzenie bazy danych z modułami, które możemy załadować do jądra
insmod - załadowanie modułu
rmmod - usunięcie modułu z pamięci

0x01 graphic

Uwaga!!! - w najnowszej (w chwili pisania dokumentu) dystrybucji Linuksa - Red Hat 7.0 został umieszczony kompilator gcc w wersji rozwojowej 2.96, czego wynikiem jest niemożność kompilacji jądra. Żeby temu zaradzić powinniśmy w pliku Makefile zmienić gcc na kgcc (starsza wersja gcc).

  1. Prawa i atrybuty

Na temat atrybutów plików i praw dostępu pisałem pobieżnie w dziale podstawy, przy okazji omawiania niektórych przydatnych poleceń w Linuksie. Teraz postaram się nieco rozwinąć ten temat.

0x01 graphic

Ponieważ Linux jest systemem przeznaczonym do pracy w sieci, czyli dla wielu użytkowników, konieczne jest żeby ustalone były jakieś prawa dla poszczególnych osób - wiąże się to z bezpieczeństwem systemu oraz prywatnością poszczególnych użytkowników. Dlatego stworzone zostały odpowiednie atrybuty plików i katalogów. Zrozumienie tych zasad jest niezbędne, aby administrować systemem operacyjnym Linux ( jak i innym sieciowym jak UNIX czy Windows NT). Musimy pamiętać, że te nadawanie atrybutów plikom, jak i katalogom jest odbywa się na tych samych zasadach.

0x01 graphic

Każdy plik w Linuksie ma swojego właściciela do którego jest on przypisany. Właścicielem jest zazwyczaj osoba, która stworzyła lub skopiowała dany plik. Plik ten może zostać usunięty lub zmieniony tylko przez swojego właściciela pliku, albo członka grupy do której jest przypisany, oraz oczywiście przez root'a. Inni użytkownicy mogą modyfikować lub usunąć plik, jeżeli zostanie im nadane do tego prawo.

Prawo do własności pliku może zostać zmienione, za pomocą komendy chown oraz chgrp którą normalnie uruchamia root lub właściciel danego pliku lub katalogu:

chown nazwa_użytkownika nazwa_pliku
chgrp nazwa_grupy nazwa_pliku

Zmiana atrybutów plików jest przydatna, gdy kopiujemy lub przenosimy pliki jako root dla innych użytkowników. Później właściciel danego pliku może sprawić, by ów plik był dostępny w trzech trybach:
read (r) - odczyt
write (w) - zapis
execute (x) - wykonanie

Można te atrybuty przydzielać dla trzech klas użytkowników:
user (u) - właściciel
group (g) - grupa
others (o) - inni użytkownicy

Jeżeli chcemy sprawdzić jakie atrybuty ma dany plik wpisujemy komendę: ls -l nazwa_pliku. Po czym otrzymamy następujący wynik:
  -rwxrwxrwx   nazwa_użytkownika   nazwa_grupy   data_i_godzina_utworzenia_pliku   nazwa_pliku

W tym przypadku okazałoby się, że dany plik jest dostępny do zapisu, odczytu i uruchomienia dla wszystkich osób. Jeżeli dana czynność jest zabroniona zamiast litery pokazany będzie minus (-).

Po pierwszym znaku możemy również dowiedzieć się o tym czy to jest plik czy katalog. Wytłumaczą to poniższe oznaczenia:
"-" - kreska pozioma oznacza plik
d - katalog
l - (mała litera L) link

0x01 graphic

Prawa dostępu do pliku zmieniamy używając komendy chmod. Składnia polecenia jest następująca:
chmod [-opcje] [uprawnienie] plik/katalog

W pozycji opcje możemy wpisać:
-c ,--changes - wyświetla informację o zmodyfikowanych plikach
-f ,--silent, --quiet - wyłącza komunikaty o błędach
-v ,--verbose - pokazuje informacje o modyfikowanych plikach
--reference=PLIK - używa uprawnień innego pliku
-R ,--recursive - zmienia prawa rekursywnie (można tym czasami nieźle namieszać:)
--help - wyświetla pomoc o użyciu polecenia
--version - wyświetla informację o wersji polecenia

Dalej określamy nadanie praw. Robimy to w następujący sposób:

1.Wpisujemy użytkownika:
a - wszyscy (all)
u - użytkownik (user)
g - grupa (group)
o - inni (others)

2.Określamy czynność:
"+" - nadanie praw
"-" - odebranie praw
"=" - nadane prawa będą jedynymi jakie plik bedzie posiadał

3.Określamy prawa
r - prawo odczytu
w - prawo do zapisu
x - prawo do wykonania (lub dostęp w przypadku katalogów)
u - ustawia prawa takie jak ma użytkownik
g - ustawia prawa takie jak ma grupa
o - ustawia prawa takie jak mają inni
s - ustawia identyfikator użytkownika lub grupy
t - "Lepki bit" - oznacza plik tekstowy lub zabezpiecza przed usunięciem katalogu przez innych użytkowników, nie będących jego właścicielami
l - ustawia obowiązujące zabezpieczenie

Wygląda to mniej więcej tak:
chmod a+x plik - oznacza to, że nadaliśmy plikowi o nazwie plik prawo do uruchomienia dla wszystkich użytkowników.

Innym sposobem na ustawianie praw jest tzw. metoda "oktalna". Polega to na tym, że prawa ustawiamy za pomocą liczb:
1 = tylko wykonanie
2 = tylko zapis
3 = zapis i wykonanie
4 = tylko odczyt
5 = odczyt i wykonanie
6 = odczyt i zapis
7 = zapis, odczyt i wykonanie

Prawa dla wszystkich trzech klas (właściciel, grupa, inni) otrzymujemy poprzez zestawienie obok siebie wszystkich trzech cyfr, jedna po drugiej. Przykładowe użycie tej komendy:
chmod 770 plik
daje to właścicielowi i jego grupie pełne prawa, ale żadnych dla innych.

Jak łatwo zauważyć poszczególne liczby są sumą trzech liczb, odzwierciedlających poszczególne prawa:
1 = wykonanie
2 = zapis
4 = odczyt

Sekwencję tych liczb może poprzedzać czwarta cyfra przyporządkowująca sobie następujące prawa:
1 = "Lepki bit"
2 = ustawia identyfikator grupy podczas uruchamiania, lub ustawianie ogólnego zabezpieczenia
4 = ustawia identyfikator użytkownika podczas uruchamiania

  1. Konfiguracja i instalacja GCC

Wiele osób, próbując np. komplilować program ze źródeł, z niewiadomych przyczyn widzi komunikaty o błędach związanych z wersją kompilatora gcc. Ma to najczęściej miejsce w przypadku dystrybucji Red Hat 7.* - gdzie twórcy tej dystrybucji postanowili nieco przerobić ów kompilator. Skutkiem tego może być np. niemożność skompilowania jądra Linuksa lub kłopoty z kompilacją niektórych programów (np. Mplayera). Wyjściem jest skompilowanie i instalacja nowej wersji gcc 3.0.3 (w chwili pisania tego dokumentu) lub starszej wersji 2.95.3, która jest jeszcze standardem. W dokumencie tym opiszę jak zainstalować gcc w najnowszej wersji, chociaż instalacja wersji poprzednich nie odbiega od tego opisu.

0x01 graphic


   Pierwszym krokiem będzie ściągnięcie źródeł programu - nowa wersja: gcc-3.0.3.tar.gz, lub starsza wersja: gcc-2.95.3.tar.gz. Źródła te zawierają wszystkie potrzebne kompnenty potrzebne do poprawnej instalacji pakieu - czyli kompilatory: C, C++, Objective-C, Fortran, Java i CHILL.

   Następnie utworzymy katalog dla źródeł programu np. gcc_zrodla, gdzie rozpakowujemy źródła, potem dla skompilowanych obiektów, np. gcc_obj.
W zasadzie nie trzeba tworzyć osobnego katalogu dla kompilowanych objektów, ale twórcy gcc zalecają umieszczenie ich w osobnym katalogu niż źródła. Kiedy mamy już to zrobione wchodzimy do katalogu dla objektów i wykonujemy konfigurację gcc wydając polecenia:

% cd gcc_obj
% gcc_zrodla/configure [opcje]

Możliwe opcje możemy wyświetlić poleceniem gcc_zrodla/configure --help, najważniejszymi dla nas będą:

--prefix=/usr (standardowa ścieżka)
--enable-shared (dołączone zostaną dodatkowe kompilatory, jak C, C++, Objective-C, Fortran, Java i CHILL)

   Jeżeli zdecydowaliśmy się już jakie opcje chcemy włączyć (raczej dla zaawansowanych użytkowników, dla normalnej instalacji nie musimy nic zmieniać) wydajemy polecenie:

% gcc_zrodla/configure --prefix=/usr --enable-shared

   Po krótkiej chwili program powinien być gotowy do kompilacji, którą wykonamy poleceniem:

% make

   Jeżeli nie wystąpiły żadne błędy poczas kompilacji to po jakimś czasie (zależnym od szybkości procesora:) ) otrzymamy już skompilowany program. Wykonując polecenie: % make -k check, sprawdzamy poprawność otrzymanych pakietów (czynność opcjonalna). Po tych zabiegach możemy już zainstalować nowe gcc:

% make install

   Teraz możemy spokojnie usunąć katalogi gcc_zrodla i gcc_obj oraz sprawdzić wersję, którą zainstalowaliśmy poleceniem:

% gcc -v

  1. Instalacja i konfiguracja proFTPd

Spośród wielu dostępnych serwerów ftp pod Linuksa dwa z nich uzyskują miano najlepszych: Wu-FTPd oraz Pro-FTPd. Ten pierwszy głównie ze względu na łatwość instalacji i konfiguracji, oraz za duże możliwości konfiguracyjne, drugi zaś mimo że więcej z nim problemu przy konfiguracji, to jest uznawany (i słusznie) za najbezpieczniejszy. Postaram się opisać tu sposób instalacji i konfiguracji najnowszej wersji Pro-FTPd 1.2.4 (wyszła 19.10.2001).

0x01 graphic

- Instalacja -

0x01 graphic



   Zacznijmy od początku. Najpierw musimy postarać się o źródła programu, możemy je ściągnąć z serwera proftpd.org:

  ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.4.tar.gz

Kiedy już ściągniemy ten plik, rozpakowujemy go poleceniem:

   tar -xvzf proftpd-1.2.4.tar.gz

Następnie wchodzimy do katalogu ze źródłami programu i wydajemy polecenie:

   ./configure [opcje]

Najważniejsze opcje:


  Jeżeli ustalimy już jakie moduły chcemy skompilować razem z Pro-FTPd wydajemy polecenie (oczywiście nie musi ono tak wyglądać, to zależy co chcemy uzyskać):

   ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-shadow
   --with-modules=mod_pam:mod_readme:mod_ratio:mod_ldap:mod_s
ql

Następnie już tylko:

make
make install

0x01 graphic

- Uruchamianie serwera -

0x01 graphic



   Teraz kiedy już mamy zainstalowany serwer Pro-FTPd, możemy przejść teraz do konfiguracji naszego serwera. Jeżeli kompilowaliśmy moduł "mod_pam" musimy skopiować plik ./contrib/ftpd.pamd na /etc/pam.d/ftp.

 Serwer może być uruchamiany na dwa sposoby:


 Jeżeli chcemy aby serwer uruchamiał jako "standalone" na końcu pliku /etc/rc.d/rc.local musimy umieścić linię /usr/sbin/proftpd, która automatycznie uruchomi serwer FTP zaraz po załadowaniu się systemu. Jeżeli serwer ma być uruchamiany przez "inetd" to w pliku /etc/inetd.conf szukamy następującej linii:

   ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd

Zamieniamy ją następującą:

   ftp stream tcp nowait root /usr/sbin/proftpd proftpd

 Uwaga! Jeżeli serwer ma być "standalone" pamiętajmy o wstawieniu znaczka # przed tą linią.

 Jeżeli w naszym systemie mamy zainstalowany "xinetd" to poddajemy edycji plik /etc/xinetd.conf wpisując poniższe linijki, lub tworzymy plik /etc/xinetd.d/proftpd z tą treścią.

 service ftp
   {
     flags = REUSE
     socket_type = stream
     instances = 50
     wait = no
     user = root
     server = /usr/sbin/proftpd
     bind =
     log_on_success = HOST PID
     log_on_failure = HOST RECORD
   }

0x01 graphic

- Konfiguracja -

0x01 graphic



   Teraz czeka nas najlepsza część - konfiguracja naszego serwera. Robimy to poprzez edycję pliku /etc/proftpd. Sporo by zajęło miejsca opisanie wszystkich opcji dostępnych w konfiguracji serwera, najlepiej samemu sięgnąć do lektury i odwiedzić stronę www.proftpd.org, gdzie w dziale DOCS możemy dokładnie przeczytać wszystkie możliwe dyrektywy wraz z ich wyjaśnieniami i krótkimi przykładami. Może w celu krótkiego wprowadzenia przeanalizujemy przykładowy plik proftpd.conf.


# Ustawienia globalne

ServerName "Mój serwer FTP" - nazwa serwera
ServerAdmin mój_email@skrzynka.com - e-mail administratora serwera
ServerType standalone - to chyba jasne (druga opcja to inetd)
DeferWelcome on - wyświetlanie informacji o serwerze dopiero po pomyślnym zalogowaniu się
DefaultServer on
DefaultRoot ~ - ograniczenie pola działania do własnego katalogu
Port 21 - nr portu
Umask 002 - maska dla tworzonych nowych katalogów i plików

User nobody - użytkownik na jakiego uruchomiony jest serwer
Group nobody - grupa do ktorej należy ten użytkownik

TimeoutIdle 300 - różne czasy rozłączenia serwera z użytkownikiem w zależności od przyczyn
TimeoutStalled 300
TimeoutLogin 60
TimeoutNoTransfer 300

ExtendedLog /var/log/proftp.log - miejsce zapisywania logów
ExtendedLog /dev/tty9 - numer konsoli na której wyświetlane będą logi

DisplayLogin .welcome.msg - wiadomość pojawiająca się na powitanie
MaxInstances 20 - maksymalna ilość uruchomionych serwerów
MaxLoginAttempts 2

MaxClients 200 "Za dużo połączonych użtkowników" - Maksymalna liczba osób mogących się zalogować (w cudzysłowiu wiadomość)
MaxClientsPerHost 40 "Za dużo połączeń z jednego IP"

<Limit LOGIN>
Order deny,allow
Deny from .microsoft.com - ograniczenia hostów z których można się zalogować
AllowAll - reszta może się logować
</Limit>

<Directory />
AllowOverwrite on - opcja pozwalająca nadpisywać pliki
</Directory>

# Ustawienia użytkownika anonymous

<Anonymous ~ftp> - zaczynamy ustawienia użytkownika ftp - anonymous
User ftp -użytkownik
Group ftp - grupa
AnonRequirePassword off - umożliwia logowanie się bez hasła
UserAlias anonymous ftp - aliasy tego użytkownika

DisplayLogin .welcome.msg
DisplayFirstChdir .message
GroupOwner ftp - właściciel grupy
Umask 002

# HideUser root
# HideGroup root
HideNoAccess on

MaxClients 20 "Za dużo połączonych użtkowników"
MaxClientsPerHost 5 "Za dużo połączeń z jednego IP"

<Limit WRITE>
DenyAll - ograniczenia praw do uploadu
</Limit>
<Limit READ DIRS>
IgnoreHidden on
</Limit>
</Anonymous>

# Ustawienia dla wybranego użytkownika

<Anonymous ~nazwa_użytkownika>

User nazwa_użytkownika
Group ftpusers
AnonRequirePassword on
DisplayLogin .welcome.msg
DisplayFirstChdir .message
GroupOwner nazwa_grupy_użytkownika
Umask 002
# HideUser root
# HideGroup root
HideNoAccess on
MaxClients 10 "Za dużo połączonych użtkowników"
MaxClientsPerHost 5 "Za dużo połączeń z jednego IP"

<Limit LOGIN>
Order allow,deny - tym razem najpierw podamy IP lub hosty, z których może się dany użytkownik zalogować
Allow from 127.0.0.1
Allow from 192.168.1.
Allow from 212.160.79.
Allow from 195.76.218.116
Allow from 195.86.86.135
DenyAll - z reszty IP nie można się logować
</Limit>

<Directory uploads/*> - konfiguracja uploadu
<Limit READ>
DenyAll - brak pozwolenia odczytu plików z uploadu
</Limit>
<Limit STOR>
AllowAll - pozwolenie na upload plików
</Limit>
<Limit MKD>
AllowAll - pozwolenie na tworzenie katalogów
</Limit>
</Directory>
</Anonymous>

   Na tym możemy zakończyć prostą konfigurację naszego serwera. Jeżeli chcemy się zalogować na zwykłego użytkownika i chcemy mieć dostęp do całego drzewa katalogów to nie tworzymy dla niego podsekcji - Pro-FTPd sam sprawdzi czy istnieje taki użytkownik w systemie i jakie ma hasło, po czym otworzy się jego katalog domowy. Możliwości konfiguracji tego serwera są olbrzymie i najlepiej samemu poeksperymentować z różnymi ustawieniami.
   Mam nadzieję, podany tu sposób instalacji i konfiguracji Pro-FTPd jest w miarę zrozumiały i pomoże w pierwszych krokach z tym programem.

Trochę inaczej napisane:

1. OGÓLNE POLECENIA

man costam - info o danym poleceniu
cd nazwa_katalogu - wejście do katalogu
cd .. - wyjście z katalogu
mkdir nazwa_katalogu - tworzy katalog
rmdir nazwa_katalogu - usuwa katalog
rm nazwa_pliku - usuwa plik
rm * - usuwa wszystkie pliki z danego katalogu
rm * -i - usuwa wszystkie pliki z danego katalogu z potwierdzeniem
rm * -f - usuwa wszystkie pliki z danego katalogu i wyłącza potwierdzenia (nawet zabezpieczone przed usunięciem)
rm -f - usunięcie plików zabezpieczonych przed kopiowaniem
rm -r - usunięcie plików również w podkatalogach
rm -rf - usuwa cały system plików
chmod u+r jeden.doc - mogę czytać dany plik
   w - mogę zapisywać i edytować dany plik
   x - mogę wykonywać dany plik
ls -a - pokazuje ukryte pliki
ls -l - pokazuje więcej info o pliku:

W WYNIKACH POWYŻSZEJ KOMENDY NA POCZĄTKU SĄ:
  "-" - oznacza zwykły plik
  "d" - oznacza katalog
  Potem pierwsze 3 znaki oznaczają dostępność do pliku właściciela, następne 3 znaki dla grupy, a następne 3 dla innych użytkowników

ls > wynik - wysłanie spisu zawartości katalogu do pliku wynik jeżeli taki plik istnieje to skasuje się jego poprzednia zawartość
ls >> wynik - dopisanie zawartości katalogu do zawartości pliku wynik
mount /mnt/floppy - montuje flopa
umount /mnt/floppy - rozmontowuje flopa
cat jeden.doc > wszystkie.doc - nadpisanie zawartości w pliku wszystkie.doc zawartościami innych plików
cat jeden.doc dwa.doc >> wszystkie.doc - dopisanie do pliku wszystkie.doc zawartości innych plików
cat nazwa_pliku - czytanie zawartości pliku
cat *.doc - znajdzie np.: dwa.doc sratytaty.doc
cat jeden.doc dwa.doc > wszystkie.doc - wrzuca zawartość plików do jednego
cat < jeden.doc > dwa.doc - wypisze zawartość jeden.doc na ekran (standartowe wyjście) i nadpisze zawartość pliku jeden.doc do pliku dwa.doc
cat parowka.doc | more - wyjście programu cat (parowka.doc) jest przekazywane na wyjście programu more
head -42 nazwa_pliku - wyświetla 42 pierwszych wierszy zawartych w pliku
tail -42 nazwa_pliku - wyświetla 42 końcowych wierszy zawartych w pliku (przydaje się w obserwowaniu świeżo dopisanych logów do pliku)
cp plik_zrodlowy plik_docelowy - kopiuje zawartość z pliku do pliku
cp plik(i)_zrodlowy katalog(i)_docelowy - kopiuje pliki do katalogu
mv stara_nazwa nowa_nazwa - zmiana nazwy pliku
mv nazwa_pliku nazwa_katalogu - przenoszenie pliku do katalogu
lp nazwa_pliku - drukowanie pliku
lpr nazwa_pliku - wstawienie pliku do koleiki drukowania
pwd - pokazuje w jakim jesteś katalogu
. - oznacza katalog bieżący
.. - oznacza katalog nadrzędny
touch nazwa_pliku - tworzy pusty plik
stty -a - wypisanie skrótów do np. zatrzymania procesu
mail - otwiera plik z poczta
printenv albo export (powłoka C) - zobaczenie zawartości zmiennych środowiska
nazwa=zawartość - pierwsze przypisze zmiennej powłoki odpowiednia zawartość
export nazwa drugie utworzy zmienna o tej samej nazwie i zawartości co zmienna powłoki
MOJA_ZMIENNA="jakas_wartosc" - tworzy zmienna środowiska z wartością "jakas_wartosc"
echo $MOJA_ZMIENNA wypisuje zawartość MOJA_ZMIENNA (znakiem dolara poprzedzamy nazwy zmiennych środ. które to nazwy powłoka ma zastąpić zawartością odpowiedniej zmiennej
find ścieżka/nazwa_pliku lub kryterium - wyszukiwanie plików
grep - służy do wyszukiwania plików według zadanego wzorca

2. KRYTERIA SZUKANIA OKREŚLONYCH STRINGÓW

* - zastępuje wiele znaków np.: ls *.doc
*.* - oznacza pliki z kropka w nazwie
*xyz - oznacza pliki w rodzaju xyz albo fghxyz
? - zastępuje jeden znak
[abc] - oznacza a lub b lub c
[a-z] - oznacza od a do z
doc[0-9] - oznacza doc0 do doc 9
*[Aa]dd* - oznacza useradd lub User-Add itd
*[Aa] [Dd] [Dd]* - oznacza userADD lub xxxAdd itd
- R - wszystkie podkatalogi

3. UŻYTKOWNICY, PRAWA DOSTĘPU ITD

newgrp grupa - zmiana grupy
chmod g+r jeden.doc - dodanie użytkownikom grupy do której należy plik jeden.doc
    prawa do jego czytania (dołączanie praw):
   u - użytkownik
   o - pozostali użytkownicy systemu
   - - odebranie danego uprawnienia
chmod u=rw jeden.doc - nadanie tobie wyłącznie czytanie i pisania do pliku jeden.doc (zastępowanie praw)
chmod u=rw /katalog - masz prawo do przeszukiwania katalogu jeżeli nie miałbyś tych praw możesz znaleźć tylko plik którego znasz nazwę (zastępowanie praw)
chmod 777 nazwa_pliku - następny sposób zastępowania praw, numeryczny 777 oznacza akurat przyznanie wszystkich praw wszystkim użytkownikom do danego pliku a 666 prawo do odczytu i zapisu pliku dla wszystkich użytkownikow

PRAWA DOSTĘPU I ICH ODPOWIEDNIKI NUMERYCZNE:

---   0
--x   1
-w-   2
-wx   3
r--   4
r-x   5
rw-   6
rwx   7

umask - w momencie tworzenia nowego pliku otrzymuje on domyślne prawa dostępu określone za pomocą parametru umask
4 2 1 - wartości liczbowe odpowiadające określonym uprawnieniom
r w x    każda liczba odpowiada koleino użytkownikowi -> grupie -> "światu" (reszcie użytkowników)
umask 421 - oznacza: właściciel może plik czytać grupa może do pliku pisać, a pozostali użytkownicy mogą plik wykonywać
umask 700 - oznacza pełne prawa dla właściciela i żadnych praw dla grupy i reszty użytkowników
umask 077 - wyłączy prawa do czytania pisania i wykonywania dla grupy i całego "świata" (reszty użytkowników)

PO WPISANIU UMASK I WARTOŚCI OD TEJ PORY KAŻDY UTWORZONY PLIK BĘDZIE MIAŁ TAKIE PRAWA DOSTĘPU

chown nowy_wlasciciel nazwa_pliku - daje prawa do pliku innemu użytkownikowi
chown -r nowy_wlasciciel nazwa_pliku - daje prawa do wszystkich plików w katalogu innemu użytkownikowi
chgrp nowa_grupa nazwa_pliku - daje prawa do pliku określonej grupie
who - info o wszystkich zalogowanych do systemu, obejmuje nazwę użytkownika
finger - to samo co who tylko jeszcze jest imię terminal, i czas zarejestrowania się w systemie
who am i - info tylko o tobie

4. KOMUNIKACJA MIĘDZY UŻYTKOWNIKAMI

write nazwa_uzytkownika - wysyłanie wiadomości do określonego użytkownika, tekst pojawia się od razu po wpisaniu, teksty obu użytkowników mogą się mieszać
mesg n - zablokowanie przychodzących wiadomości write
mesg y - odblokowanie przychodzących wiadomości write
talk nazwa_uzytkowika - następny program tutaj ekran dzieli się na dwie części a rozmowa się nawiązuje jeśli drugi rozmówca odpowie "talk twoja_nazwa_uzytkownika"
conrol-c - zakańcza program talk

5. MAIL

mail - otwiera twoja skrzynkę odbiorcza
mail nazwa_uzytkownika1 nazwa_uzytkownika2 - wysłanie maila do danego(ych) użytkownika np.: mail user@wp.pl, mail grzes
control-d lub ("." sama w wierszu) - zakończenie listu i wysłanie
control-c - opuszczenie programu bez wysyłki listu
/usr/spool/mail nazwa_uzytkownika lub /usr/mail/ nazwa_uzytkownika - tu znajduje się plik w którym są zapisywane nadchodzące listy (nazwa pliku jest tez napisana w zmiennej środowiskowej MAIL można się tam dostać wpisując export i znaleźć MAIL=...)
d2 - wrzuca 2 list do "kosza"
q - usuwa listy z "kosza" i zamyka program
x - opuszczenie programu bez usuwania listów
- - poprzedni list
+ - następny list
p - powtórne wyświetlenie bieżącego listu
w 1 /home/zachowana_tresc - zachowanie treści listu nr 1 w pliku zachowany_list w katalogu home
s 1 /home/zachowany_list - zachowanie listu (nagłówka i treści) nr 1

6. SIEĆ

rlogin nazwa_kompa - rejestracja w inny systemie Unix
telnet nazwa_kompa - rejestracja w innych systemach np.: winNT
rcp nazwa_kompa:plik_zrodlowy plik_docelowy - program do przesyłania plików pomiędzy systemami Unix
ftp plik_zrodlowy nazwa_kompa:plik_docelowy - program do przesyłania plików pomiędzy dowolnymi systemami

KOMENDY FTP:


get plik - pobranie pliku z innego kompa
mget plik(i) - pobranie wielu plików
put plik - wysłanie pliku do innego kompa
mput plik(i) - wysłanie wielu plików
bye - zamkniecie połączenia z innym kompem
ls - spis plików na drugim kompie
cd - zmiana katalogu na drugim kompie
binary - tryb przesłania plików binarnych
ascii - tekstowy tryb przesłania (z tłumaczeniem znaków końca wiersz)

control-] - nie przerywając pracy na zdalnym kompie powrót do swojego systemu lokalnego (W PRZYPADKU SESJI TELNET)
return~control-z - to co wyżej ale dla RCP (działa jeśli twoja powłoka ma wbudowany mechanizm wielozadaniowości zwany "job-control"

7. PROCESY

ps - wypisuje stan procesów
ps -l - dokładniejsze wypisanie stanów procesów
ps -aux | more - wypisanie włącznie z procesami nie należącymi do ciebie (| more - udogodnienie)

OPIS WYPISANYCH KOLUMN:

PID - identyfikator procesu
TTY - terminal do którego jest podłączony proces
STAT - stan procesu (W=czekający, R=wykonywany lub gotowy do wykonania S=uśpiony, Z=zabity ale wciąż przebywający w systemie)
TIME - czas jego wykonywania
COMMAND lub CMD - nazwa programu który wykonuje proces
UID - nazwa użytkownika który jest właściciele procesu
PPID - proces nadrzędny który utworzył dany proces
C lub CP - wykorzystanie procesora - używane do szeregowania procesów
PRI - priorytet
NI - wartość używana do obliczania priorytetu
ADDR - adres procesu
SZ - rozmiar procesu w blokach
WCHAN - zdarzenie na które oczekuje proces

nice o_ile_nizszy polecenie

- zmiana priorytetu procesu i mniejsza liczba tym wyższy priorytet (automatycznie niższy priorytet otrzymują procesy intensywnie wykorzystujące CPU) (tylko administrator może podawać liczby ujemne)

cat *.doc > wszystkie.doc &

- znaczek & na końcu polecenia oznacza ze powłoka utworzy dany proces i uruchomi program ale nie będzie czekała na jego zakończenie

kill identyfikator_procesu

- zakończenie procesu

kill -9 identyfikator_procesu

- zakończenie procesów które ignorują zwykłą komendę kill

kill -v nazwa_procesu

- zabija proces po podaniu jego nazwy

at czas "polecenie" control-d

- wykonanie procesu o określonej godzinie np.: "cat 0900a "cat *.doc > razem.doc" control-d" co oznacza ze proces się uruchomi o godzinie 9:00 rano (a=a.m., p=p.m.)


8. EDYTOR VI

vi nazwa_pliku - otwiera edytor z plikiem do edycji
vi - uruchamia edytor potem:
: - wierszowy tryb pracy (wiersz staje się poleceniem po naciśnięciu return)
i - drugi tryb pracy gdzie znaki są wstawiane do bufora aż do naciśnięcia klawisza esc
10x - usunie 10 znaków pod kursorem
10X - usunie 10 znaków na lewo od kursora
:w - zachowanie pliku na dysku
:q - opuszczenie programu
:wq lub ZZ - zapisuje plik i opuszcza program
:q! - wyjście bez zapisania pliku
10dd - wycina do schowka 10 wierszy od kursora w dół
10yy - kopiuje do schowka 10 wierszy od kursora w dół
p - wklejenie zawartości schowka na lewo od kursora
P - wklejenie zawartości schowka na prawo od kursora
/klocek - znajduje string klocek
/ - następne wyszukanie tego samego stringu
:s/klocek/badylek - zamiana klocek na badylek w bieżącym wierszu
:1,$s/klocek/badylek/g - zamiana klocek na badylek w całym pliku
:r nazwa_pliku - wczytanie do bufora innego pliku
:set number - numerowanie wierszy
:set no number - nie ponumerowane wiersze
u - cofnięcie skutków ostatniego polecenia

9. EDYTOR EMACS

control-h - wypisanie pomocy emacs
na przykład: control-h a file - wypisanie info o funkcji w której występuje słowo file
control-h o - przełączanie miedzy oknami
control-h 0 - usunięcie okna pomocy gdy kursor się w nim znajduje
control-h 1 - usunięcie okna pomocy gdy kursor znajduje w oknie z redagowanym tekstem
control-x b (i podać nazwę pliku) - wyświetlenie określonego redagowanego pliku
emacs nazwa_pliku (w wierszu poleceń) - otwarcie pliku w edytorze emacs
control-x control-s - zapisanie pliku
control-x control-c - opuszczenie emacsa
nazwa_pliku~ - nazwa kopii zapasowej pliku
esc x overwrite-mode - tryb zastępowania tekstu
control-k - wycięcie do schowka tekstu od kursora do końca wiersza
control-@ - zaznaczenie początku przenoszonego bloku tekstu
control-w - zaznaczenie końca bloku przenoszonego tekstu
control-y - wklejenie zawartości schowka
control-s - wyszukiwanie stringa

10. INNE INFORMACJE

1) gdzie co jest "standardowo":
- / - katalog główny
- /root - katalog administratora (root-a)
- /home - katalogi użytkowników
- /usr/bin - programy dla użytkowników, pliki wykonywalne (standartowe programy instalowane na początku z systemem)
- /usr/local/bin - programy dodane przez administratora dla konkretnego hosta lub lokalnej sieci
- /usr/local - oddziela pliki dostarczone przez "sprzedawcę" i późniejsze rozszerzenia od programów pochodzących z systemu
- /usr/lib - pliki pomocnicze dla standartowych programów linuksowych
- /usr/man - pliki podręcznika systemowego man
- /usr/src - kody źródłowe programów
- /var/log - pliki dziennika
- /var/spool - katalogi koleiek dla drukarek, poczty itd.
- /bin lub /sbin - standartowe programy będące częścią systemu, niezbędne do zapewnienia minimalnej funkcjonalności systemu
- /tmp - pliki tymczasowe (usuwane przy starcie systemu)
- /var/tmp - pliki tymczasowe (nie usuwane przy starcie systemu)
- /etc - programy konfiguracyjne, nazwy pozostałych użytkowników (w pliku passwd)
- /dev - jądro systemu, pliki odpowiadające urzadzeniom
2) wykonywany program można zakończyć klawiszami: control-c lub zastopować klawiszami control-\ wtedy zostaje stworzony plik core w którym jest zapisany stan programu w momencie stopu (plik core może być duży)
3) wypisywanie danych na ekran można zatrzymać: control-s i wznowić: control-q
4) skrypt inicjujący: .profile
5) przy tworzeniu plików z dziwnymi znaczkami w nazwie trzeba je poprzedzać \ lub umieścić nazwę w "" wtedy znaczki stracą swoje specjalne znaczenia ale wtedy trzeba uważać przy kasowaniu żeby np.: nie wpisać rm * tylko rm"*" bo można skasować wszystkie pliki z katalogu
6) wyrejestrowanie się: control-d - powłoki bourne i korn, logout - powłoka c
7) odświeżanie ekranu: control-l
8) każdy plik ma dwóch właścicieli użytkownika i grupę
   - użytkownik może być członkiem więcej niż jednej grupy
   - nowo utworzony plik należy do tej grupy, do której należy katalog, w którym jest tworzony plik
   - gdy chcesz cos robić z plikiem system najpierw bada czy jesteś właścicielem pliku, jeśli tak to są sprawdzane prawa dostępu użytkownika, w przeciwnym wypadku jest porównywana grupa do której należy plik gdy odp. jest pozytywna system sprawdza grupowe prawa dostępu gdy nie, prawa dostępu pozostałych użytkowników
9) po zmontowaniu np.: cdromu jest "tworzony" punkt zamontowania który nie musi mieć nic wspólnego z fizycznymi nośnikami, podrzędny system plików jest "doczepiany" do systemu głównego w punkcie zamontowania
10) Kod źródłowy systemu Linux znajduje się w katalogu /usr/src/linux-2.4 w tym katalogu jest tez katalog "kernel" gdzie jest plik "sched.c" dotyczy on zarządzania procesami
11) Domyślna lokalizacja pakietów na płycie z instalka linuksa jest: /mnt/RedHat/RPMS
12) Programem lpq możemy opróżnić bufor drukarki

shutdown -r now lub reboot - ponowne uruchomienie kompa
shutdown -h now lub halt - zatrzymuje prace systemu
gnomecc - control-panel dla gnome
uname -a - informacje m.in. o wersji jądra którą mamy
df - ilość wolnego miejsca na dysku
du - wielkość katalogów i ich podkatalogów w kilobajtach
file ścieżka - podaje rodzaj pliku

11. MONTOWANIE CD-ROM, FLOPPY I PARTYCJI Z WINDOWS

PAMIĘTAJ ŻE ŚCIEŻKA: /mnt/jakis_katalog MUSI ISTNIEĆ PRZED ZMONTOWANIEM CZYLI MUSISZ NAJPIERW STWORZYĆ KATALOG W /mnt DO KTÓREGO BĘDZIE PODMONTOWYWANY JAKIŚ SYSTEM PLIKÓW

mount /dev/cdrom/ mnt/cdrom - zamontowanie cdrom-u
umount /dev/cdrom albo umount /mnt/cdrom - odmontowanie cdromu
mount /dev/fd0 /mnt/floppy - zamontowanie flopa
umount /dev/fd0 albo umount /mnt/floppy - odmontowanie flopa
mount /dev/hda1 /mnt/windows - montowanie dysku z windowsem (jeśli masz 2 dyski na pierwszym jest win a na drugim linux jeśli masz inaczej np.: win jest na tym samym dysku co linux może ścieżka wyglądać inaczej)
umount /dev/hda1 /mnt/windows - odmontowywanie partycji z windowsem

MOŻESZ SKONFIGUROWAĆ LINUKSA TAK ABY MONTOWAŁ NP: PARTYCJĘ WINDOWSOWĄ ZARAZ NA STARCIE - MUSISZ ZNALEŹĆ TYLKO PLIK /etc/fstab OTWORZYC GO NP: PROGRAMEM gedit I NA SAMEJ GÓRZE WPISAĆ PO KOLEI:
/dev/hda1 /mnt/windows fat auto 0 0
OCZYWIŚCIE SCIEŻKA /dev/hda1 MOŻE BYĆ INNA W TWOIM KOMPIE

12. AUTOMATYKA, SKRYPTY W LINUKSIE

at - można tym poleceniem zlecić systemowi wykonywanie jakiegoś polecenia o określonej godzinie ( jeśli ma być wykonywane cyklicznie można je dodać do pliku cron danego użytkownika)

(CHCEMY ABY O 16:05 BYŁ WYSYŁANY LIST NA OKREŚLONY ADRES) PO kolei:
at teatime + 5 minutes - zaznaczmy o której ma to nastąpić (teatime oznacza 16:00) czas można tez określić np. tak: at 2:14pm Jan9, at now + 5 minutes (hour, week, day, year), at teatime next day
mail -s "temat wiadomości" dzony@poczta.onet.pl - piszemy co ma być wykonywane i wciskamy enter
"co tam słychać" - wpisujemy treść listu i wciskamy enter
naciskamy control-d - i tym samym kończymy

mail dzony@poczta.onet.pl <~/nazwa_pliku - wysyła na podany adres zawartość pliku
atq - wyświetla wszystkie polecenia oczekujące na wykonanie
atrm numer - usuwa polecenie o określonym numerze
cron - automatyczne uruchamianie poleceń w określonych odstępach czasu (np.: przypomnienie co tydzień o zrobieniu kopii zapasowej)
/var/spool/cron - pliki cron wszystkich użytkowników. Pliki cron można stworzyć w linux configuratorze

history n > nazwa_skryptu - "tworzy" skrypt z ostatnich n komend
chmod u+x nazwa_skryptu - PAMIĘTAJ ŻEBY NADAWAĆ SKRYPTOM MOŻLIWOŚĆ WYKONYWANIA

TWORZENIE SKRYPTÓW POWŁOKI (PRZYKŁADOWE SPOSOBY):


1) SPOSÓB - Gnotepad
Uruchom jakikolwiek edytor np. gnotepad
Na samej górze wpisz (musi zawierać pełną ścieżkę do "programu" w którym będzie wykonywany):
#!/bin/bash
potem np.:
echo -e "dzwonek! \a"
następnie zapisz plik np.: pod nazwą: skrypt aby uruchomić skrypt np.: wejdź do katalogu gdzie jest i wpisz:
bash skrypt

2) SPOSÓB - vi
Wpisz w linii komend:
vi nazwa_skryptu (np.: skrypt) naciśnij:
i
wciśnij:
control-c wpisz:
:wq i aby uruchomić skrypt wpisz:
bash skrypt (ale jeśli jesteś w tym samym katalogu co skrypt)

licznik = 0 - deklaracja zmiennej
nazwa = "Stefan Telefan" - również deklaracja w tekście wystąpiła spacja wiec jest otoczony cudzysłowem
licznik = $mojazmienna - przypisanie jednej zmiennej wartości drugiej (mojazmienna przejęła wartość)
$1, $2 itd. - dzięki tym argumentom ich wartości można przekazywać po uruchomieniu skryptu z wiersza poleceń

0x01 graphic

SKRYPT - WYŚWIETLANIE ARGUMENTÓW Z WIERSZA POLECEŃ

0x01 graphic

if [$# -eq 0]

then

echo "Podaj identyfikator użytkownika"

else

echo "Witaj" $1

fi


$# - oznacza wszystkie argumenty które można podać z wiersza poleceń
$# -eq 0 - porównanie (jeśli $# jest równe 0 )
fi - zakończenie instrukcji warunkowej if

0x01 graphic


$# - oznacza wszystkie argumenty które można podać z wiersza poleceń
$0 - nazwa programu powłoki
$* - pojedynczy tekst utworzony ze wszystkich argumentów przekazanych w wierszu poleceń
= - równe (łańcuchy znaków)
!= - nierówne (łańcuch znaków)
-eq - równe (liczby)
-ge - większe lub równe (liczby)
-le - mniejsze lub równe (liczby)
-ne - rożne (liczby)
-gt - większe niż (liczby)
-lt - mniejsze niż (liczby)
for...do...done
while...do...done
until...do...done
select...element...in...lista_elementów...do...done
if...elif...else...fi
case

JĘZYK AWK


Poniższy skrypcik jest pisany w linii komend i ma wypisać ilość liter w każdym wierszu pliku z tekstem (język Awk najlepszy jest właśnie do przetwarzania tekstu)
cat nazwa_pliku | gawk '{print NF ": " $0}'

JĘZYK PERL


Perl może być uruchamiany na prawie każdym systemie operacyjnym, służy m.in. do obsługi stron WWW za pomocą mechanizmów CGI lub np.: automatyzacji zadań administracyjnych.

0x01 graphic

SKRYPT - WYŚWIETLA NUMER IDENTYFIKACYJNY UŻYTKOWNIKA

0x01 graphic


Wszystko podobnie jak w tworzeniu skryptów powłoki tylko że tu wpisujemy po kolei w pliku:

#! /usr/bin/perl

print"Twój numer identyfikacyjny to $< \n"

print "-------------------------------------- \n"


Uruchom powyższy skrypt wpisując po prostu jego nazwę

0x01 graphic

$< - zmienna która zawiera numer identyfikacyjny użytkownika

JĘZYKI PYTHON I TCL


Python obsługuje klasy wyjątki i dynamiczne typy danych może pracować interaktywnie lub interpretując kod zapisany w modułach. Programy w tym języku mogą korzystać ze środowiska graficznego np.: Gnome.

TCL jest prostym językiem skryptowym przeznaczonym głownie do osadzania w innych językach, ma za zadanie spajać biblioteki i języki programowania o większych możliwościach.

JĘZYK C


PONIŻEJ OPISUJĘ CO TRZEBA ZROBIĆ ŻEBY STWORZYĆ PROGRAM W POJEDYNCZYM PLIKU (oczywiście są na to inne sposoby):
wpisujemy: vi progs.c - otwiera nowy plik "progs.c" w edytorze vi
naciskamy i - wchodzimy w tryb wpisywania programu
wpisujemy np. taki program:

#include

int main()

{

printf("Pararara \n");

exit(0);

}

po wpisaniu programu naciskamy ctr-c - dzięki temu wejdziemy w tryb wpisywania na terminalu
wpisujemy: :wq - czyli zapisz i zamknij edytor
wpisujemy: touch program - tworzymy pusty plik
wpisujemy: gcc progs.c -o program - dzięki temu nasz program z pliku progs.c zostaje skompilowany do pliku wynikowego program
wpisujemy: ./program - uruchamia nasz program

13. INSTALACJA PAKIETÓW - GnoRPM

Wejdź do Main Menu / System / GnoRPM
naciśnij przycisk Install
naciśnij przycisk Add
teraz (jeśli chcesz cos zainstalować z cdromu) wejdź do (nie koniecznie musisz mieć taka sama ścieżkę) /mnt/cdrom/... i znajdź pliki z rozszerzeniem .rpm, który chcesz zainstalować, jak już cos wybierzesz naciśnij Add i zamknij to okno
na tym oknie co pozostało powinieneś widzieć ikonkę paczki i nazwę wybranego przez siebie pakietu teraz już po prostu naciśnij Install
Jeśli chcesz uzyskać dokładniejsze info o pakiecie naciśnij na niego prawym klawiszem i wybierz Query, jeśli chcesz sprawdzić czy nie ma błędów naciśnij Verify. Możesz tez instalować pakiety z internetu - do tego służy przycisk Web Find.

Pamiętaj

Programy w formatach *.rpm instalujemy poleceniem rpm -ivh nazwa_pakietu.rpm , pliki *.src.rpm musimy najpierw skompilować poleceniem rpm --rebuild nazwa_pakietu.src.rpm , następnie w katalogu /usr/src/redhat/RPMS/i386 znajdziemy gotowy do zainstalowania plik binarny *.rpm ( instalacja -> patrz poprzedni ), lub w /usr/src/redhat/SOURCES plik z rozszerzeniem *.tar.gz, a w /usr/src/redhat/RPMS/BUILD podkatalog z plikami źródłowymi programu, które zazwyczaj instalujemy ciągiem poleceń: ./configure ; make ; make install. W tym przypadku warto przeczytać plik INSTALL i README przed instalacją i kompilacją, gdzie znajdziemy dodatkowe informacje na temat opcji kompilacji lub wymagań programu.

  Pliki w formacie *.tar.gz musimy najpierw rozpakować poleceniem: tar -xvzf nazwa_pliku.tar.gz, zaś pliki *.tar.bz2 poleceniem: tar -xvjf nazwa_pliku.tar.bz2. Następnie w utworzonych katalogach wydajemy znane już polecenia: ./configure ; make ; make install. Pamiętajmy, że aby zabrać się za instalację musimy się zalogować jako root.

Linux dla początkujących - materiały do nauki

Piotr Stykowski

31



Wyszukiwarka

Podobne podstrony:
Komendy DOS, Win98, Linux, Podstawowe polecenia systemau DOS, Podstawowe polecenia systemu DOS
linux podstawy
polecenia linuxa, Linux, Linux - podstawy
Instalacja serwera na linux - instrukcja, Linux, Linux - podstawy
Linux Dla Każdego, Linux, podstawy
linux podstawy JO2K455FRRRG2WQTZUB3PF4UX2W4PQ5TCPG6KCQ
cwiczenia z systemu linux podstawy obslugi systemu
Linuks, Linux, podstawy
Linux, Podstawy
linux podstawy RM5VKLA2O64PLLDUL3Z5NXOEQFNIYPBVM3CCQRA
cwiczenia z systemu linux podstawy obslugi systemu
SO Linux Podstawowe Polecenia i Filtry
Linux Podstawowe Komendy
Red Hat Linux podstawy, instalacja
Podstawowe komendy i polecenia w Linux
LINUX, SZKOLNE PLIKI-mega zbiory (od podstawówki do magisterki), Systemy operacyjne
Podstawy Automatyki Lab 10 CW1 Układy przełączające oparte na elementach stykowych

więcej podobnych podstron