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.
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.
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
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.
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.
Opis ważniejszych opcji występujących przy konfiguracji kernela
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ę.
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.
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
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.
5. Plug and Play support
[ * ] Plug and Play support
Jeżeli potrzebujemy możemy zaznaczyć.
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
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
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.
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.
10. Amateur Radio support
Zazwyczaj nie używane.
11. IrDA subsystem support
Menu do obsługi połączeń na podczerwień.
12. ISDN subsystem
Menu do obsługi urządzeń ISDN oraz ich konfiguracji.
13. Old CD-ROM drivers (not SCSI, not IDE)
Obsługa CD-ROMów starego typu.
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.
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.
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.
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ę.
18. Kernel hacking
[ ] Magic SysRq key
Opcja dla ludzi, którzy zajmują się testowaniem jądra.
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.
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.
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.
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
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).
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.
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.
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
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
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.
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
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).
- Instalacja -
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:
--prefix=/ścieżka - standardowo program instaluje się do katalogu /usr/local/sbin, jednak możemy podać inną ścieżkę (ja zazwyczaj podaję /usr)
--with-modules=mod_moduł1:mod_moduł2:mod_... - dodajemy moduły do programu, które mają za zadanie odpowiednio:
- mod_pam - obsługa PAM - czyli jeżeli chcemy aby z serwera korzystali również normalni użytkownicy, a nie tylko anonymous
- mod_ratio - jeżeli chcemy włączyć ratio
- mod_readme - pozwala na obsługę plków README itp.
- mod_ldap - obsługa LDAP
- mod_sql - obsługa Sql
--sysconfdir=/ścieżka - możemy zmienić położenie pliku konfiguracyjnego proftpd.conf - standardowo jest w /usr/local/etc (ja zmieniam na /etc)
--localstatedir=/ścieżka - opcja pozwala zmienić położenie plików *.log - standardowo /usr/local/var (ja zmieniam na /var)
--enable-shadow - umożliwia korzystanie z pliku shadow zawierającego hasła użytkowników
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_sql
Następnie już tylko:
make
make install
- Uruchamianie serwera -
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:
- jako "standalone" - czyli uruchamiany podczas startu systemu
- oraz uruchamiany przez demona "inetd" lub jego nowszą wersję "xinetd"
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
}
- Konfiguracja -
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ń
SKRYPT - WYŚWIETLANIE ARGUMENTÓW Z WIERSZA POLECEŃ
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
$# - 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.
SKRYPT - WYŚWIETLA NUMER IDENTYFIKACYJNY UŻYTKOWNIKA
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ę
$< - 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