Linux համակարգը բաղկացած է մի քանի հստակ մասերից, որոնք աշխատում են միասին։ Երբ հասկանում եք այդ մասերը, համակարգն այլևս կախարդանք չի թվում։ Դուք կհասկանաք, թե որտեղ են պահվում ձեր ֆայլերը, ով կարող է դրանք փոփոխել և համակարգի որ մասն է կատարում տվյալ աշխատանքը։
Այս դասը ձեզ կտա Linux-ի մտավոր քարտեզը։ Դասընթացի ընթացքում բազմիցս կվերադառնաք այս քարտեզին։ Այն կօգնի հասկանալ, թե ինչու են հրամանները աշխատում հենց այդպես։
Ինչ կսովորեք
Linux համակարգի երեք հիմնական շերտերը՝ միջուկ (kernel), հրամանային միջավայր (shell) և օգտատիրոջ տարածք (user space)։
Ինչպես են user mode-ը և kernel mode-ը ապահովում համակարգի անվտանգությունը։
Linux-ի ֆայլային համակարգի կառուցվածքը և հիմնական թղթապանակների նշանակությունը։
«Ամեն ինչ ֆայլ է» գաղափարը և Linux-ում առկա ֆայլերի տեսակները։
Սովորական user-ի և root user-ի տարբերությունը, ինչպես նաև user ID-ի նշանակությունը։
Երեք շերտերը՝ kernel, shell, user space
Linux համակարգն ունի երեք հիմնական շերտ։ Պատկերացրեք դրանք որպես իրար մեջ տեղադրված շրջաններ։
Kernel-ը (միջուկը) գտնվում է կենտրոնում։ Այն անմիջապես հաղորդակցվում է սարքավորումների հետ։ Կառավարում է հիշողությունը, պրոցեսորը, սկավառակը և սարքերը։ Սովորաբար դուք երբեք անմիջապես չեք աշխատում միջուկի հետ։
Shell-ը (հրամանային միջավայրը) այն շերտն է, որտեղ դուք մուտքագրում եք հրամանները։ Shell-ը ծրագիր է, որը կարդում է ձեր հրամանները և դիմում է միջուկին՝ դրանք կատարելու համար։ Այս դասընթացի գրեթե յուրաքանչյուր դասում դուք կօգտվեք shell-ից։
User space-ը (օգտատիրոջ տարածքը) ներառում է մնացած ամեն ինչ՝ ձեր ծրագրերը, խմբագրիչները, վեբ բրաուզերները և ֆայլերը։ Այս ծրագրերը դիմում են shell-ին կամ միջուկին՝ ցածր մակարդակի գործողություններ կատարելու համար։
Ահա աշխատանքի պարզ ընթացքը․ դուք մուտքագրում եք հրաման shell-ում։ Shell-ը փոխանցում է հարցումը միջուկին։ Միջուկը կառավարում է սարքավորումները և վերադարձնում արդյունքը։ Արդյունքը ցուցադրվում է ձեզ։
User mode vs kernel mode
Այս շերտավորված կառուցվածքն ունի ավելի խորքային պատճառ՝ անվտանգությունը։
User mode-ում ծրագիրը սահմանափակված է և չի կարող անմիջապես աշխատել սարքավորումների հետ։
Kernel mode-ում կոդն ունի ամբողջական վերահսկողություն համակարգի նկատմամբ։
Ձեր ծրագրերը և shell-ը աշխատում են user mode-ում։ Միայն միջուկն է աշխատում kernel mode-ում։ Երբ user mode-ում աշխատող ծրագիրը պետք է օգտագործի ինչ-որ սարքավորում, այն կատարում է system call, այսինքն՝ հարցում, որը փոխանցվում է միջուկին։ Միջուկը ստուգում է հարցումը, կատարում աշխատանքը և վերադարձնում արդյունքը։
Այս սահմանն է, որ Linux համակարգը պահում է կայուն։ Եթե սովորական ծրագիրը սխալ ունի, այն կարող է խափանվել, բայց սովորաբար չի կարող վնասել ամբողջ համակարգը, քանի որ երբեք չի ունեցել սարքավորման անմիջական վերահսկողություն։ Միջուկը գտնվում է մեջտեղում և վերահսկում է յուրաքանչյուր գործողություն։
Ֆայլային համակարգի կառուցվածքը
Linux-ում բոլոր ֆայլերն ու թղթապանակները գտնվում են մեկ միասնական ծառի կառուցվածքում։ Այդ ծառի գագաթը կոչվում է root directory (արմատային թղթապանակ)։ Directory-ն նույնն է, ինչ թղթապանակը (folder)։ Արմատային թղթապանակը նշվում է մեկ թեք գծով /.
Linux-ում չկա Windows-ի նման «C drive» հասկացողություն։ Ամեն ինչ սկսվում է /-ից։
Արմատային թղթապանակի տակ կան մի շարք ստանդարտ թղթապանակներ, որոնցից յուրաքանչյուրն ունի հստակ նպատակ։ Այս կառուցվածքը հետևում է Filesystem Hierarchy Standard ստանդարտին, ուստի Linux-ի համակարգերի մեծ մասում այն գրեթե նույն տեսքն ունի։
Ամենակարևոր թղթապանակներն են.
/
/bin
/etc
/home
/var
/usr
/tmp
/dev
/rootԵկեք դիտարկենք դրանցից յուրաքանչյուրը.
/արմատային թղթապանակն է։ Ամբողջ ծառի գագաթն է։ Մնացած բոլոր թղթապանակները գտնվում են դրա ներսում։/binպահում է հիմնական ծրագրերը (binaries)։ Այստեղ կամ նմանատիպ թղթապանակներում են գտնվում հիմնական հրամանները։/etcպահում է կոնֆիգուրացիոն ֆայլերը։ Սրանք տեքստային ֆայլեր են, որոնք սահմանում են համակարգի և ծրագրերի վարքագիծը։/homeպահում է սովորական օգտատերերի անձնական թղթապանակները։ Օրինակ՝annaօգտատիրոջ անձնական թղթապանակը կլինի/home/anna։/varպահում է հաճախ փոփոխվող ֆայլերը, օրինակ՝ լոգերը (logs)։ Լոգը ֆայլ է, որտեղ համակարգը գրանցում է տեղի ունեցած իրադարձությունները։/usrպահում է տեղադրված հավելվածների մեծ մասը և դրանց ֆայլերը։/tmpպահում է ժամանակավոր ֆայլեր։ Համակարգը կարող է ջնջել դրանք, օրինակ՝ վերագործարկումից հետո։/devպահում է սարքային ֆայլերը (device files)։ Միացված սարքավորումները, օրինակ՝ սկավառակը, այստեղ ներկայացվում են որպես ֆայլ։ Այսպես է Linux-ը հետևում «ամեն ինչ ֆայլ է» գաղափարին։/rootroot օգտատիրոջ անձնական թղթապանակն է։ Կարևոր է չշփոթել այն/արմատային թղթապանակի հետ։
Ժամանակի ընթացքում կհանդիպեք նաև այլ ստանդարտ թղթապանակների.
/sbinպահում է համակարգային ծրագրերը, որոնք սովորաբար պահանջում են root իրավունքներ։/libպահում է համօգտագործվող գրադարանները (shared libraries), որոնք օգտագործվում են բազմաթիվ ծրագրերի կողմից։/optպահում է լրացուցիչ ծրագրային ապահովում, որը չի մտնում հիմնական համակարգի կազմի մեջ։/bootպահում է համակարգչի մեկնարկման համար անհրաժեշտ ֆայլերը, ներառյալ միջուկը։/procհատուկ թղթապանակ է, որը սկավառակի վրա իրական ֆայլեր չի պարունակում։ Միջուկն այն ստեղծում է հիշողության մեջ՝ համակարգի և գործընթացների մասին կենդանի տեղեկություն ցուցադրելու համար։
Այս կառուցվածքը գոյություն ունի կարևոր պատճառով։ Քանի որ Linux համակարգերի մեծ մասը հետևում է նույն ստանդարտին, դուք կարող եք նստել գրեթե ցանկացած Linux համակարգչի առջև և իմանալ, թե որտեղ փնտրել անհրաժեշտը։ Կոնֆիգուրացիան գտնվում է /etc-ում, լոգերը՝ /var/log-ում, իսկ ձեր ֆայլերը՝ /home-ում։ Ընդհանուր քարտեզը խնայում է ժամանակ և թույլ է տալիս, որ ուղեցույցները կիրառելի լինեն բազմաթիվ համակարգերի համար։
Պարտադիր չէ հիմա անգիր հիշել բոլոր թղթապանակները։ Պարզապես հիշեք, որ ամեն ինչ գտնվում է /-ի տակ, և որ յուրաքանչյուր հիմնական թղթապանակ ունի իր գործառույթը։
Linux-ի ֆայլային կառուցվածքը
Ամեն ինչ ֆայլ է
Linux-ը հետևում է պարզ գաղափարի․ գրեթե ամեն ինչ դիտարկվում է որպես ֆայլ։ Սա Linux-ի ամենակարևոր գաղափարներից մեկն է։
Սա նշանակում է, որ շատ տարբեր օբյեկտներ օգտագործում են նույն ֆայլային ինտերֆեյսը.
Սովորական փաստաթուղթը ֆայլ է։
Թղթապանակը ֆայլի հատուկ տեսակ է։
Միացված սարքը, օրինակ՝ սկավառակը, ներկայացվում է որպես ֆայլ
/devթղթապանակի ներսում։
Այս գաղափարի շնորհիվ կարող եք օգտագործել նույն հրամանները բազմաթիվ տարբեր օբյեկտների հետ աշխատելու համար։ Հետագայում, երբ ուսումնասիրեք ֆայլերի ընթերցումն ու վերահասցեավորումը (redirection), կհասկանաք, թե որքան օգտակար է սա։
Linux-ում կան մի քանի հիմնական ֆայլերի տեսակներ.
Սովորական ֆայլ (regular file), որը պահում է տվյալներ, օրինակ՝ տեքստ, նկար կամ ծրագիր։
Թղթապանակ (directory), որը հատուկ ֆայլ է և պահում է այլ ֆայլերի ցանկ։
Սարքային ֆայլ (device file), որը գտնվում է
/dev-ում և ներկայացնում է սարքավորում։Հղում (link), որը հղում է դեպի մեկ այլ ֆայլ՝ ինչպես shortcut-ը։
Այս մոտեցումը ունի շատ առավելություններ։ Քանի որ սարքը նույնպես ֆայլի տեսք ունի, կարող եք կարդալ կամ գրել դրա մեջ նույն գործիքներով, որոնք օգտագործում եք սովորական փաստաթղթերի համար։ Սա է պատճառը, որ Linux-ի փոքր հրամանային գործիքները շատ լավ համադրվում են միմյանց հետ։ Գործիքը սովորում եք մեկ անգամ և այն կարողանում է աշխատել բազմաթիվ տարբեր օբյեկտների հետ։
Օգտատերերը և root օգտատերը
Linux-ը բազմաօգտատերային (multi-user) համակարգ է։ Սա նշանակում է, որ նույն համակարգի վրա կարող են ունենալ հաշիվ մի քանի մարդիկ։ Յուրաքանչյուր հաշիվ օգտատեր է։
Կան օգտատերերի երկու հիմնական տեսակներ.
Սովորական օգտատերը կարող է աշխատել իր անձնական ֆայլերի հետ՝ իր home թղթապանակում։ Նա չի կարող փոփոխել կարևոր համակարգային ֆայլերը։ Սա անվտանգության մեխանիզմ է։
Root օգտատերը, որը նաև կոչվում է superuser, կարող է անել համակարգում ցանկացած բան։ Root-ը կարող է փոփոխել ցանկացած ֆայլ և կառավարել ցանկացած ծրագիր։
Ներքին մակարդակում համակարգը օգտատերերին չի տարբերակում անուններով։ Յուրաքանչյուր օգտատեր ունի թիվ, որը կոչվում է User ID (UID)։ Root օգտատիրոջ UID-ն միշտ 0 է, և համակարգը UID 0-ին տրամադրում է ամբողջական իրավունքներ։
Օգտատերերի ցանկը պահվում է /etc/passwd ֆայլում, որը կարող եք կարդալ սովորական տեքստային ֆայլի նման։ Սա նույնպես համապատասխանում է «ամեն ինչ ֆայլ է» գաղափարին. նույնիսկ օգտատերերի ցանկը պարզապես ֆայլ է։
Root օգտատերը շատ հզոր է, հետևաբար նաև վտանգավոր։ Root իրավունքներով կատարված սխալ հրամանը կարող է վնասել համակարգը, քանի որ root-ը կարող է փոփոխել կամ ջնջել ամեն ինչ։
Այդ պատճառով սովորաբար մուտք եք գործում որպես սովորական օգտատեր։ Երբ մեկ հրամանի համար լրացուցիչ իրավունքներ են անհրաժեշտ, օգտագործում եք sudo գործիքը։
sudo բառը նշանակում է՝ «գործարկիր այս մեկ հրամանը superuser-ի իրավունքներով»։
sudo-ի մասին մանրամասն կսովորեք հաջորդ դասերից մեկում։
Գործնական վարժություն
Այս առաջադրանքները կարող եք կատարել, երբ արդեն ունենաք Linux միջավայր։ Եթե դեռ չունեք, պարզապես կարդացեք դրանք և փորձեք ավելի ուշ։
Թղթի վրա նկարեք երեք շերտերը՝ կենտրոնում kernel-ը, դրա շուրջ shell-ը, իսկ դրսում user space-ը։
Գրեք, թե ինչ նպատակ ունեն հետևյալ թղթապանակները՝
/etc,/home,/var։Մեկ նախադասությամբ բացատրեք, թե ինչ է նշանակում «ամեն ինչ ֆայլ է» գաղափարը։
Գրեք մեկ պատճառ, թե ինչու չպետք է մշտապես աշխատեք root օգտատիրոջ հաշվից։
Հիմնական մտքեր
Linux համակարգն ունի երեք շերտ՝ kernel, shell և user space։
Kernel-ը կառավարում է սարքավորումները։ Shell-ը կատարում է ձեր հրամանները։ User space-ը պարունակում է ձեր ծրագրերն ու ֆայլերը։
Ծրագրերը աշխատում են user mode-ում և system call-ների միջոցով դիմում են kernel-ին՝ սարքավորումների հետ աշխատելու համար։ Միայն kernel-ն է աշխատում kernel mode-ում։ Այս սահմանը պահպանում է համակարգի անվտանգությունը։
Բոլոր ֆայլերը գտնվում են մեկ ծառի կառուցվածքում, որը սկսվում է
/արմատային թղթապանակից։Յուրաքանչյուր հիմնական թղթապանակ, օրինակ՝
/etc,/homeև/var, ունի հստակ նշանակություն և հետևում է ընդհանուր ստանդարտին։Linux-ը գրեթե ամեն ինչ դիտարկում է որպես ֆայլ՝ սովորական ֆայլեր, թղթապանակներ, սարքային ֆայլեր և հղումներ։
Սովորական օգտատերը սահմանափակ և անվտանգ է, իսկ root օգտատերը (UID 0) կարող է անել ամեն ինչ և պետք է օգտագործվի զգուշությամբ։
Հիշեք
Տերմին | Նշանակություն |
|---|---|
Kernel | Կենտրոնական շերտ, որը կառավարում է սարքավորումները |
Shell | Շերտ, որը կարդում և կատարում է ձեր հրամանները |
User space | Ձեր ծրագրերն ու ֆայլերը |
User mode / Kernel mode | Սահմանափակ ծրագրային ռեժիմ / ամբողջական իրավունքներով միջուկի ռեժիմ |
System call | Ծրագրի հարցումը միջուկին՝ սարքավորումների հետ աշխատելու համար |
| Արմատային թղթապանակ, ֆայլային ծառի գագաթը |
| Կոնֆիգուրացիոն ֆայլեր |
| Սովորական օգտատերերի անձնական թղթապանակներ |
| Հաճախ փոփոխվող ֆայլեր, օրինակ՝ լոգեր |
| Միացված սարքավորումների սարքային ֆայլեր |
| Root օգտատիրոջ home թղթապանակը |
Root / Superuser | Ադմինիստրատորի հաշիվ, որը կարող է անել ամեն ինչ |
| Մեկ հրամանի գործարկում superuser-ի իրավունքներով |