Страници за Линукс




Линуксова онтогенеза

BIOS

Първата програма, която се стартира автоматично след включване на компютъра, е BIOS. Тя съдържа различни драйвери, т.е. програми управляващи устройствата на компютъра на "ниско ниво". За запис и четене на информация от секторите на дисковете например, операционната система ДОС използва драйверите на BIOS, но за поддържането на файловете и каталозите по диска се грижи самият ДОС. Навремето конструкторите на IBM, избрали тази организация по две причини. Първо, компютърът не се обвързва с конкретна операционна система, а всеки потребител може да исталира онази операционна система, която най-добре отговаря на потребностите му. Второ, операционната система става по-независима от хардуера -- ако някой компютър има например твърд диск, който се управлява нестандартно, то това засяга само драйверите на BIOS, но не и операционната система, използваща тези драйвери наготово.

Отначало на ограниченият ДОС се гледало като на временна операционна система, която трябвало бъде изместена от по-развита операционна система, от типа на CP/M-86. Това обаче не се осъществило, защото ДОС станал толкова популярен, че програми се писали практически само за него. Опитите на IBM да наложи по-късно при появата на PC/AT и PS/2 новата си операционна система OS/2 по различни причини се оказват неуспешни.

Популярността на операционните системи от типа на ДОС (FreeDos, DR-DOS, PC-DOS, MS-DOS и др.) довежда обаче до това, че BIOS се специализира и престава да отговаря на първоначалния си замисъл -- да бъде средство улесняващо използването на различни операционни системи. Затова днес никоя модерна операционна система не се ползва от услугите на BIOS, въпреки че това води до очевидни трудности за производителите на тези операционни системи.

Що се касае до Линукс, то тук ролята на BIOS се свежда само до средство за стартиране на операционната система. Едно от първите неща, които Линукс прави щом получи управлението, е да изземе управлението от BIOS. За да стане това по-лесно е необходимо да изключим някои услуги, които BIOS може да предлага, като напр. защита против вируси, shadow ram, advanced power management и др. Това става с програмата SETUP на BIOS (обикновено се извиква с натискането на клавиш Del или Ins след включване на компютъра). Повече подробности по този въпрос може да прочетете в инструкциите за инсталация на избраната от Вас дистрибуция на Линукс.

Главен запис за първоначално зареждане

След като инициализира програмите си, BIOS пристъпва към зареждане на операционната система. Обикновено с програмата SETUP на BIOS можем да посочим откъде BIOS ще опитва да зареди операционната система. Това може да бъде твърд диск, дискета или компактдиск. В първия сектор на носителя, избран от BIOS, трябва да се съдържа малка програма за първоначално зареждане на операционната система, която BIOS пуска и която зарежда и стартира самата операционна система.

Когато носителят, от който зареждаме, е твърд диск, в процеса на зареждане се добавя още една стъпка. Както е известно, твърдият диск се разделя на дялове, които могат да принадлежат на различни операционни системи. Всеки от тези дялове си има свой запис за първоначално зареждане, а в първия сектор на твърдия диск се намера така нареченият главен запис за първоначално зареждане (на англ. master boot record, съкратено MBR). Той съдържа таблица на главните (primari) дялове на диска и освен това програма, която зарежда програмата за начално зареждане на дисковия дял на избраната от нас операционна система. Това дава възможност различните дискови дялове да съдържат различни операционни системи с различни програми за начално зареждане.

Най-простият главен запис може би е този, който инсталира ДОС. Един от главните дискови дялове в таблицата на дяловете е отбелязан като активен и главният запис на ДОС просто стартира програмата за начално зареждане на активния дял, който обикновено е дял на самия ДОС, но нищо не пречи активният дял да бъде и дял на Линукс. Ако искаме да стартираме операционна система от неактивен дял, трябва най-напред да стартираме активната операционна система и след това с някоя от нейните команди да сменим активния дял. В ДОС това става с командата FDISK, а в Линукс с командата 'activate диск дял', например 'activate /dev/hda 2'. Ако първият сектор на диска не съдържа главния запис на ДОС, то можем да го инсталираме като заредим ДОС и след това използваме командата 'FDISK /MBR'.

По-развитите главни записи дават възможност потребителят диалогово да избере коя операционна система да се стартира. Някои от тях предлагат дори менюта които се показват на екрана на компютъра в графичен режим върху фон показващ предпочитана от вас картина. Интересно е, че програмата за първоначално зареждане на Линукс (LILO) може да се използва освен по предназначение, още и като главен запис, като също позволява диалогово да се избира коя операционна система да бъде стартирана. Основното й предназначение обаче е друго и затова възможностите й да прави красиви менюта не са толкова впечатляващи.

Програма за начално зареждане (LILO)

Описание

Програмата на главният запис стартира програмата за първоначално зареждане на избраната от нас операционна система. Най-разпространена програма за първоначално зареждане на Линукс е LILO (LInux LOader). След като получи управлението от главния запис или директно от BIOS в случай че самата тя е главен запис или зареждаме от дискета или компактдиск, LILO извежда на екрана надписа LILO. Ако се покаже само част от този надпис, значи някой от компонентите, от които зависи LILO, се е повредил или изменил и ще трябва да преконфигурираме LILO.

По-нататъшното поведение на LILO зависи много от конфигурацията му. Обикновено LILO ще изчака няколко секунди и след това ще пристъпи автоматично към зареждане на Линукс. Ако преди изтичането на тези няколко секунди натиснем някой от клавишите Shift, Control или Alt или пък ако CapsLock или ScrollLock е бил включен то LILO показва надписа 'boot:' и очаква команда от оператора. С натискане на клавиша Tab ще получим списък от допустимите команди. Допустимите команди се определят при конфигурирането на LILO, като на всяка от тях съответства някоя операционна система или вариант на Линукс.

Трябва да отбележим, че Линукс е програма, която макар да поема изцяло управлението на компютъра, също като останалите обикновени програми, може при извикването си да приема от LILO различни параметри. Някои от тях LILO е конфигуриран да предава автоматично, а други можем ние изрично да зададем. От параметрите си например Линукс може да определи в кой текстов режим искаме той да работи или кой дисков дял желаем да бъде основен. Затова е напълно възможно Линукс да бъде зареден не от дисковия дял, който впоследствие ще стане основен, а от съвсем друг дял или дори от дискета. Следват няколко примера:

boot: dos
boot: linux
boot: linux root=/dev/hda10
В последната от тези команди посочваме, че основен дисков дял трябва да бъде /dev/hda10. Едно възможно приложение на тази команда е следното. Да допуснем, че в конфигурацията на LILO е посочено, че основен дял за linux е /dev/hda9. В даден момент обаче решаваме, че е целесъобразно да разделим /dev/hda6 на два дяла /dev/hda6 и /dev/hda7. По такъв начин старият дял /dev/hda9 вече става /dev/hda10, а LILO не знае това и ще каже на Линукс че основен дял трябва да бъде /dev/hda9, който всъщност е бившият /dev/hda8. С посочената команда получаваме възможност да стартираме Линукс, след което да преконфигурираме LILO и /etc/fstab.
boot: linux debug
Параметърът debug казва на Линукс да извежда по-подробни съобщения при стартиране.
boot: linux rw init=/bin/sh
Тук казваме на Линукс, че първата програма, която той ще стартира трябва да бъде /bin/sh. Това може да бъде от полза ако сме объркали при редактирането на файла /etc/inittab и затова прoграмата init (която обикновено е първа) не може да работи нормално. Така пръв процес ще стане обвивката sh, която ще ни даде възможност да поправим повредения файл. Параметърът rw казва на Линукс, че основният дял трябва да е достъпен не само за четене, но и за писане.

Параметрите от вида 'променлива=стойност', които не се разпознават от Линукс, той записва в обкръжението на първия стартиран процес. Онези пък, които нямат посочения вид, той предава като параметри. Примери:

boot: linux single
Тук Линукс ще предаде на първия процес init параметър single, което ще доведо до влизането в така наречения еднопотребителски режим, при което се пропускат повечето от процедурите за системна инициализация и директно се стартира обвивката на root.
boot: linux rw emergency SUSHELL=/sbin/sash
Параметърът rw вече разгледахме. Подобно на предния пример тук emergency е параметър, който Линукс "не разбира" и затова го предава на първия стартиран процес. За init това означава да влезе в така наречения режим emergency. Последният параметър Линукс записва в обкръжението на init. Тази команда е полезна ако искаме да заменим системни библиотеки с по-нови, но не желаем цялостна преинсталация.
boot: linux 3
Параметърът 3 казва на init да влезе при стартиране в режим 3, а не в режима по подразбиране, който обикновено е 2. За режимите може да прочетете по-нататък.

Конфигуриране

Конфигурирането на LILO е двустъпково -- записване на конфигурацията във файла /etc/lilo.conf и пускане на програмата /sbin/lilo. Причината, поради която се налага това двустъпково конфигуриране, е че за четене от диска LILO може да се ползва само от услугите на драйверите на BIOS, които работят не с файлове, а с номера на сектори. Това значи, че ако в конфигурацията за LILO се споменават някакви файлове, то LILO ще има достъп до тях само ако знае предварително в кои сектори са тези файлове. Това трябва да имаме предвид, ако решим да дефрагментираме дисков дял, който съдържа файлове, от които LILO се нуждае, или просто да променим с нещо някой от тези файлове. Инсталирането на MS-DOS или Windows пък разваля главния запис за първоначално зареждане, където също може да се намира LILO. Затова ако нещо се случи, то тук именно идва ползата от резервната стартираща дискета, която инсталационната програма на избраната от Вас дистрибуция на Линукс може би Ви е предложила да си направите. Заредете Линукс от нея и после пуснете командата /sbin/lilo за да оправите LILO.

Стандартната конфигурация, на LILO, която някои дистрибуции на Линукс използват при инсталацията не е направена така, че да позволява алтернативно стартиране на две или повече операционни системи. Ето една примерна конфигурация на LILO, която позволява алтернативен избор между Линукс и друга операционна система, наречена условно dos:

# файл /etc/lilo.conf

# На кой диск ще инсталираме LILO. По подразбиране това е дискът
# в който е основния дял на работещия в момента Линукс
boot = /dev/hda4

# Колко време да се изчака преди да се стартира по подразбиране
# някой от вариантите (в децисекунди)
delay = 50

# Вариантът, който се стартира по подразбиране
default = linux # разбира се!

compact

# Следва описанието на различните варианти

# Първи вариант. Друга операционна система (не Линукс)
other = /dev/hda1 # в кой дисков дял е
label = dos       # име, което даваме на този вариант
table = /dev/hda

# Втори вариант. Линукс
image = /vmlinuz # това е файлът с обектния код на Линукс
label = linux    # име на варианта
root = /dev/hda4 # основния дял на Линукс при този вариант
vga = normal     # в кой текстов режим ще работи Линукс.
read-only

# край на файла /etc/lilo.conf

Имената след командите label са имената на командите, които може да задавате след надписа 'boot:'. ВНИМАНИЕ: стойностите на командите boot, other, table, image и root по-горе са само примерни, а при Вас те трябва да са съобразени с Вашата конкретна инсталация. От стойността на командата boot зависи къде ще бъде инсталитан LILO. В случая е посочено LILO да стане запис за първоначално зареждане на операционната система в дял /dev/hda4. Ако искаме LILO да стане главен запис за първоначално зареждане, то вместо /dev/hda4 трябва да посочим /dev/hda. С командата table се задава устройството, което съдържа таблицата на дяловете, която да се предаде на другата операционна система. Тази команда не е нужна ако другата операционна система е ДОС. Възможните стойности на командата vga са normal, extended, ask и номер на видеорежим. Повече информация за видеорежимите може да прочетете от файла /usr/src/linux/Documentation/svga.txt от програмния код на Линукс.

Имайте предвид, че освен файловете, споменати изрично в lilo.conf, LILO може да използва още и други файлове от каталога /boot. След промяната на lilo.conf съобразно Вашите желания и потребности, задайте командата /sbin/lilo и ако няма допуснати грешки може да рестартирате компютъра за да проверите новата конфигурация. Не е зле да имате под ръка резервната стартираща дискета в случай, че нещо сте объркали при конфигурацията.

В случай, че често работите с повече от една операционна система и вместо специализиран главен запис за първоначално зареждане използвате LILO, то може да направите следната конфигурация на LILO:

# файл /etc/lilo.conf

boot = /dev/hda
delay = 50
default = L
compact

timeout = 50
prompt
single-key
message = /boot/message

# Първи вариант. Не Линукс
other = /dev/hda2
label = D
table = /dev/hda

# Втори вариант. Линукс
image = /vmlinuz
label = L
root = /dev/hda4
vga = normal
read-only

# край на файла /etc/lilo.conf

При този вариант на екрана се появява съдържанието на файла /boot/message, без изчакване ще се появи надписът boot: и при натискане на клавиша 'L' ще се зареди Линукс, а при натискане на клавиша 'D' ще се зареди операционната система в /dev/hda2. Това е по-удобно, но губите възможността да предавате параметри на Линукс.

Линукс

Линукс всъщност е само ядрото на операционната система, включваща още много други системни и приложни програми. То има възможност да поддържа едновременното изпълнение на много процеси и едновременната работа на много потребители. Линукс разпределя ресурсите на компютъра, сред които най-важни са оперативната памет и процесорното време, между едновременно изпълняващите се процеси. Освен това Линукс поддържа файловите системи по дисковете, като следи никой потребител да не може да използва непозволено файловете на друг потребител.

Файлови системи

Файловата система е начинът, който Линукс използва за организация на данните във външната памет на комютъра. Той се състои в това, че всички данни се разпределят във файлове. Файловете биват пет типа:

обикновени файлове
Това са файлове, които представляват просто последователност от байтове. Какъв смисъл ще се вложи в тази последователност от байтове зависи изцяло от използващата ги програма, а не от операционната система. Един обикновен файл може да съдържа например текст, обектен код на програма, счетоводна база данни или чертеж на ядрен реактор.
каталози
Kаталозите са последователност от имена на файлове, организирана така, че по името на даден файл да можем да достигнем до самия файл. Това, че каталозите съдържат само имена на файловете, а не цалата информация за тях, дава възможност един и същ файл да участва под различни имена в два различни каталога. За каталози обаче не се разрешава да се срещат под две или повече различни имана за да не се усложнява структурата на файловата система. Ново име на вече съществуващ файл може да се направи с командата ln, която се използва по същия начин както и командата cp за копиране на файлове, само че при ln не се получава нов файл, а просто ново име на стария. Тъй като някои от файловете в каталога могат на свой ред да бъдат каталози, то виждаме, че файловата система придобива дървовидна структура. Обикновено Линукс разполага във всеки от дяловете на дисковете по една файлова система и събира дървовидните структури на всяка от тях в общо дърво. Файловата система, която съдържа корена на това дърво, се нарича основна.
символни препратки
Символната препратка е файл, който съдържа името на друг файл. Обикновените обръщения към символна препратка Линукс обработва по такъв начин, че все едно те са направени директно към файла, чието име съдържа символната препратка. Поради това символната препратка има свойствата на друго име на файла, към който сочи. Символни препратки се създават отново с командата ln, но с опция -s. Между символна препратка към файл и друго име на същия файл има разлика. Ако a е даден файл, а b е символна препратка към него, то може да изтриете файла a и да създадете нов файл със същото име. Тогава b ще продължава да сочи към файлa с името на a. Ако обаче b беше не символна препратка, а друго име на файла a, то изтриването на a щеше да изтрие само името a, а стария файл ще продължи да съществува макар вече само с името b. Един файл се изтрива истински чак когато бъдат изтрити всички негови имена и никой процес не продължава да го използва. Освен каталозите, символните препратки също не могат да имат повече от едно име, но това едва ли е съществено ограничение.
потоци
Потоци се създават с командата mkfifo. Това са файлове, които могат да служат като буфер за обмен на поток от данни между два процеса, единият от които добавя данни в потока, а другият чете постъпващите данни. Ако някой от процесите записва или чете данните по-бързо от другия, операционната система го кара временно да изчака. Ето един пример за използване на потоци. Да допуснем. че пред Вас стои задачата да архивирате съдържанието на каталога /home, но архивиращото устройство се намира на отдалечен компютър, с който може да се свързвате само по протола ftp. Необходимо е каталога /home да се запише в архивиращото устройство в компресиран вид. Тогава може да постъпите по следния начин:
mkfifo /tmp/home.tar.gz
tar zcf - /home >/tmp/home.tar.gz
След това отивате на отдалечения компютър задавате следните команди:
mkfifo /tmp/home.tar.gz
команда_за_архивиране_на_файла /tmp/home.tar.gz &
cd /tmp
ftp до_Вашия_компютър
       cd /tmp
       bin
       get home.tar.gz
специални файлове
Традиционно специалните файлове се поставят в каталога /dev, но всъщност с командата mknod те могат да се създадат навсякъде. Зад всеки един от тези специални файлове всъщност се крие някой драйвер на Линукс. Писането в специален файл може да се сведе например до отпечатване на принтера или пък до изсвирване от звуковата карта на компютъра. Въобще във Вашия компютър няма устройство, с което операционната система може да работи и за което да няма специален файл.

Начина за реализация на файловата система се нарича тип на файловата система. Линукс може да работи с много различни типове файлови системи, като някои от тях са следните:

second extended (ext2fs)
естественият тип файлова система на Линукс върху твърдите дискове. Притежава много забележителни характеристики.
minix
използва се основно на дискети, защото при малки файлови системи е по-икономичен на дисково пространство от second extended.
nfs
файловите системи от този тип не се намират на дисковете, а се ползват по мрежата. Това дава възможност дисковете на даден компютър да се използват и от други компютри в локалната мрежа.
sbm
аналогично на nfs, но за мрежа от Windows-базирани системи.
msdos и vfat
типовете файлови системи на ДОС и Windows. Недостатъците им са добре известни, един от които е силната им тенденция да се фрагментират, което налага средно веднъж седмично да се извършва дефрагментация.

Процеси

Процесът е нещо, което Вашият компютър изпълнява. Линукс е в състояние да поддържа много паралелно изпълняващи се процеси. Стартирането на дадена програма води до създаването на нов процес. Изпълнението на програмата може да доведе до създаването на нови процеси, затова не е правилно да се счита, че процесът е изпълнявана програма. Информация за изпълняваните в даден момент процеси може да получите посредством командата ps. Следват няколко примера за извикване на командата ps.

ps
Извежда всички Ваши процеси, стартирани от терминал.
ps x
Извежда всички Ваши процеси, включително тези, които не са стартирани от терминал. Тази команда е полезна ако работите в графичната среда X Window System.
ps a
Извежда процесите и на другите потребители, но само стартираните от терминал.
ps ax
Извежда процесите и на другите потребители, включително тези, които не са стартирани от терминал. Това означава, че с тази команда може да видите ВСИЧКИ процеси.
ps uax
Действа като предната команда, но извежда и имената на потребителите, владеещи всеки от процесите.
ps fax

Всеки от процесите в системата има възможност да стартира нов процес. Новия процес се нарича породен или дъщерен, а стария -- родителски. С тази команда имате възможност да видите 'родословното дърво' на процесите в системата.

ps rax
Обикновено през по-голямата част от своето съществуване процесите не работят нищо, а само чакат да възникнат различни събития. Например редакторът, който използвам в момента за да пиша този текст, почти през цялото време очаква да възникне събитието 'натискане на клавиш'. Процесорно време отнемат само процесите, които не чакат възникването на никакво събитие -- работещите процеси. С тази команда може да видите кои са работещите процеси в системата в момента.

Всеки от процесите получава от Линукс уникален номер, който остава непроменим докато процесът съществува. В горните примери номера на процеса се съдържа в колонката PID. Този номер се използва за еднозначно идентифициране на процесите. Например с командата 'kill номер' ще изпратим съобщение до процеса с посочения номер, че искаме той да завърши изпълнението си. Командата 'kill -KILL номер' ще доведе до незабавно прекратяване на процеса, без да му се даде възможност да се приготви.

Първият процес, който Линукс стартира, е /sbin/init. Този процес получава номер 1 и се намира донякъде в привилегировано положение в сравнение с останалите процеси. Този процес не може да бъде спрян и освен това 'осиновява' процесите, чиито родителски процеси са завършили изпълнението си. Всички процеси, които вече споменатата команда 'ps fax' показва без родителски процес, всъщност имат за родителски процес процесът с номер 1.

Потребители и права за достъп

Освен, че организира данните във файлове и поддържа едновременното изпълнение на много процеси, Линукс позволява операционната система да се използва от много потребители по такъв начин, че те да не си пречат взаимно, нито пък да могат да повредят с нещо системата. Доброто използване на свойствата на съвременните микропроцесори позволява процесите да разполагат със собствено виртуално адресно пространство и да не могат директно да четат или пишат в адресното пространство на другите процеси. Ако процесът опита да извърши нещо непозволено, Линукс просто ще го прекрати. Освен това за всеки от файловете Линукс поддържа права за достъп, въз основа на които определя процесите на кои потребители ще бъдат допуснати да четат от файла, да пишат в него или да го изпълнят като програма.

При определяне правата за достъп на процесите Линукс взема предвид не само кой потребител е собственик на процеса, но и на кои групи от потребители е член собственика. Всеки потребител е член на една или повече потребителски групи. Всеки файл в системата си има собственик, който определя коя от групите, на които е член, ще е групата на файла, както и правата за достъп до файла за себе си, за членовете на групата и за всички останали потребители. Това означава, че по отношение правата за достъп до файла потребителите са разпределени в три категории -- собственикът на файла еднолично образува едната категория, членовете на групата, определена от собственика, образуват друга категория и всички останали потребители влизат в третата категория. В привилегировано положение е потребителят root, който има право да чете и пише във всички файлове на системата.

init

Първият процес, който Линукс стартира, е /sbin/init. Като такъв, init се явява родоначалник на останалите процеси. В зависимост от това какви процеси са стартирани операционната система може да се намира в един от седем режима или нива (runlevels), които са номерирани с числата от 0 до 6. В конфигурационния файл на init (това е /etc/inittab) е посочено кои процеси да се пуснат веднага след стартирането на системата и в кой режим да се влезе по подразбиране, както и какво да се предприема при преминаване от един режим в друг.

Режим 1 е така нареченият еднопотребителски режим, при който повечето процеси в системата са спрени и само потребителят root може да включи в системата. Този режим може да използвате административни задачи, които водят до съществени промени във файловите системи, като например преместване на каталог от една файлова система в друга (напр. пренасочване на /tmp към /var/tmp). Режими 2, 3, 4 и 5 са така наречените многопотребителски режими. Обикновено между тях няма съществени различия, но ако желаете може да въведете разлики между режимите, напр. режим с и без xdm.

В /etc/inittab обикновено e посочен като режим по подразбиране при стартиране на операционната система режим 2. За преминаване от един режим в друг може да използвате командата init. Например с командата 'init 3' може да се премине в режим 3. Освен това, както вече бе показано, може да използвате програмата за първоначално зареждане на Линукс (LILO) за да се влезе направо в режим различен от режима по подразбиране.

По-нататък

След като бъде стартиран, процесът init изчита конфигурационния си файл /etc/inittab и предриема действия, довеждащи в крайна сметка до стартирането на всички останали небходими процеси. Така Вашият компютър ще засияе достойно под управлението на една истинска многопотребителска операционна система, която мъдро използва ресурсите му, и едновременно с решаването на типичните задачи за един съвременен офис, ще се грижи за поддържането на електронната Ви поща, за Вашата страница в Интернет, дори ще Ви даде незаменимата възможност да използвате програмите Си седейки пред съвсем друг комютър и Ви избавя от необходимостта да носите всичко с Вашия лаптоп.

Краят

Стабилността на Линукс е забележителна. Редките блокирания на системата най-често сa причинени от хардуерни дефекти. Но всяко земно нещо има край. Дори компютърът Ви да е с UPS и да работи постоянно, пак ще трябва да го спирате понякога за да го обновите с нов процесор, памет или ново устройство.

Режими 0 и 6 са със специално предназначение. При влизане в режим 0 се предприемат действия, довеждащи в крайна сметка до спиране на операционната система. При влизане в режим 6 операционната система също се спира, но след това компютърът се рестартира. Вместо с командите init 0, init 6 и init 1, за спиране, рестартиране на системата и преминаване в еднопотребителски режим е по-добре да използвате командата shutdown по следния начин:

за спиране shutdown -h време
за рестартиране shutdown -r време
за еднопотребителски режим shutdown време

Тази команда ще изпрати предупреждения до включените потребители, като по такъв начин ще им даде възможност да се приготвят преди да бъдат принудително изключени. Един от възможните формати на параметъра време е +m, където m са минутите, които ще се дадат на потребителите за да завършат работата си. Забележка: В операционната система са включени и команди halt и reboot, които при новите дистрибуции на Линукс работят, както би могло да се очаква от тях. Помнете обаче, че при по-старите дистрибуции, както и при някои други операционни системи, те никога не трябва да се използват директно.


Последната версия на тази статия може да се намери на адрес http://lml.bas.bg/~anton/original/

Авторски права: (c) Антон Кирилов Зиновиев, 1999г. (anton@lml.bas.bg)
С настоящото авторът разрешава тази публикация или част от нея да бъде възпроизвеждана и разпространявана неограничено при условие, че тя се съпровожда от текста на тази лицензия. Разпространяването на изменен вариант на публикацията е позволено при условие, че: 1. Отстъпено е безплатно правото всяка трета страна да използва преработения вариант съгласно условията на тази лицензия. 2. В него ясно е посочено, че той е преработка. 3. Посочено е лицето, извършило измененията, както и датата на тези изменения. 4. Признава се кой е оригиналният автор и оригиналната публикация съгласно нормалната академична практика при цитиране. 5. Не се твърди или намеква, че оригиналният автор е автор или съавтор и на изменения вариант без негово разрешение. ТАЗИ ПУБЛИКАЦИЯ СЕ ПРЕДЛАГА БЕЗ ГАРАНЦИИ ОТ КАКЪВ ДА Е РОД, ВКЛЮЧИТЕЛНО БЕЗ ГАРАНЦИИ, ЧЕ Е ПРИГОДНА ЗА НЯКАКВА ЦЕЛ ИЛИ НЯМА ДА ДОВЕДЕ ДО ЩЕТИ.