Лекция 3
Описание на директориите и тяхната функция. Типове файлове. Битове за права на файловете, типове права. Задаване и отнемане на права.
Всяка една операционна система има определена структура на директориите и всяка директория има определена функция. В Линукс има два типа директории: системни и потребителски. Системни са тези директории, които се създават при инсталирането на операционната система. Такива например са директориите /dev, /bin, /lib и т.н. Потребителски са директориите, които се създават от потребителите на операционната система с цел да пазят собствена информация в тях. Такива са директориите /home/student и всички поддиректории вътре в нея. Основните системни директории са:
/bin – съдържа основните програми на операционната система, без които тя не би функционирала правилно. Повечето програми от тази директория може да се изпълняват от всички потребители. Тя е присъства и в пътя по подразбиране на всички потребители.
/boot – съдържа ядрото на операционната система, както и други файлове, необходими за правилното функциониране на ядрото.
/dev – съдържа файловете отговарящи за хардуерните устройства на компютъра. Файловете в тази директория са достъпни само за четене от потребителите.
/etc – съдържа глобалните конфигурационни файлове на операционната система и нейните програми. Някои от програмите може да пазят конфигурационни файлове и на други места.
/home – съдържа домашните директории на потребителите. Тук за всеки потребител се създава отделна директория в която може да се съхраняват конфигурационни файлове или документи от различен тип. Специфичното в тези директории е начина на разграничаването на конфигурационните файлове и поддиректории от обикновените, а именно чрез добавяне на точка в началото им. Повечето файлови мениджъри скриват файл или директория, който започва с точка.
/lib – директорията съдържа най-важните споделени библиотеки на операционната система – glibc-solibs. Тези библиотеки се наричат споделени (shared object), защото повечето програми ги използват при изпълнението си.
/lib/modules – също много важна директория. Тук се съхраняват модулите на ядрото, т.е. драйверите на операционната система. Туй като всяка Линукс система може да има повече от едно ядро, то в тази директория се създават поддиректории с номера на всяко едно инсталирано ядро.
/mnt – незадължителна системна директория. Тя се създава автоматично и нейната цел е обединяването на всички монтирани устройства на едно място. Линукс обаче не ви ограничава да монтирате устройства в други директории.
/opt – тук повечето дистрибуции инсталират графичните среди като KDE и GNOME.
/proc – това е специална директория в която няма реални файлове. Посредством тази директория вие имате достъп до различни параметри на ядрото, както и до различна информация пряко предоставяна от ядрото на операционната система.
/root – домашната директория на свръхпотребителя. За обикновения потребител тази директория е заключена и той няма никакъв достъп до файловете в нея.
/sbin – важна системна директория с множество програми за управление на операционната и файловата система. Тази директория не е включена в пътя по подразбиране на обикновения потребител. Всички програми в тази директория искат root привилегии, за да работят.
/tmp – директория в която програмите записват временните си файлове. Тя има неограничен достъп за всички потребители. В нея обаче може да има поддиректории създадени от програми, които да са недостъпни за обикновените потребители.
/usr – директория с множество поддиректории. Тук се пазят повечето инсталирани програми, помощната информация и др.
/usr/X11R6, /usr/X11 – в тази директория се пазят файловете на графичния сървър, шрифтовете му и неговите библиотеки.
/usr/bin – съдържа бинарните файлове на инсталираните програми, които не са важни за нормалното функциониране на операционната система.
/usr/doc – част от документацията на програмите. Тук се съхранява Linux-HOWTO.
/usr/include – тази директория е необходима само ако ще се инсталират програми от изходен код. Тук се пазят заглавните C файлове на инсталираните библиотеки и програми, които са необходими за инсталиране на други програми.
/usr/info – част от документацията на Линукс. Достъпа до нея се осъществява чрез специална програма – info.
/usr/local – директория в която по подразбиране се инсталират програмите компилирани от изходен код. Тази директория копира структурата на /usr.
/usr/man – най-мащабната част от Линукс документацията. Тук се съхранява ръководство (manual page) за почти всички инсталирани програми. Достъпа до тази информация се осъществява с програмата man.
/usr/lib – важна директория, в която се съхраняват повечето инсталирани библиотеки. Тези библиотеки не са необходими за работата на операционната система, а за работата на допълнително инсталирания софтуер.
/usr/share – също важна директория. Тук програмите инсталират файловете, необходими за тяхната правилна работа.
/usr/src – в тази директория се пази изходният код на Линукс ядрото. Той е необходим само когато ядрото ще се прекомпилира. И тук подобно на /lib/modules може да има код на повече от едно ядро. Те се съхраняват в директории, различаващи се с номера на версията. В директорията /usr/src присъства и линк linux, който сочи към една от директориите съдържащи изходен код.
/var – системна директория съдържаща предимно логове на програмите и система, както и опашка с отложените или предстоящи задачи за автоматично изпълнение. Директория съдържа и друга информация, като пристигнали писма, файлове заключващи дадени процеси и сокети на работещи в момента програми.
В повечето директории обикновения потребител има права за четене, но не и за запис. Някои директории (като директорията /root и някои от директориите с логове) обикновения потребител няма никакви права. Обикновения потребител има пълни права единствено над файловете в собствената му директория и над собствените права в /tmp директорията. Тази организация затруднява значително инсталирането на зловредни програми (например вируси), тъй като те ще имат достъп единствено до файловете на потребителя, който ги изпълнява.
Досега многократно се спомена понятието права на потребителя и сега ще изясним какво е това право на потребителя на извърши определено действие, видовете права и това как се задават. Във всяка Линукс система има няколко вида потребители организирани в групи. Всеки файл може да задава три вида права за потребителя, три за групата и три за всички останали. Тези права са:
право за четене (r)
право за запис (w)
и право за изпълнение (х)
Ето казаното в таблична форма:
Собственик |
Група |
Всички останали |
||||||
---|---|---|---|---|---|---|---|---|
r |
w |
x |
r |
w |
x |
r |
w |
x |
Правата на всеки файл може да се видят с командата ls -l. Ето пример на нейният изход:
#ls -l
drwx------ 40 dino users 1024 Sep 8 14:51 .
drwxr-xr-x 7 root root 1024 Aug 18 19:23 ..
-rw-r--r-- 1 dino users 30 Sep 8 18:17 sample.txt
drwxr-xr-x 2 dino users 1024 Sep 8 18:19 sample
Тук файловете, които започват с d всъщност са директории, а sample.txt е единствения истински файл. В този пример файла sample.txt има следните права:
собственика на файла е dino и той може както да чете, така и да записва в него. Тук трябва да се отбележи, че групата към която принадлежи един файл може да не съвпада с групата на собственика на файла.
групата на файла е users и всички в тази група могат да четат от файла.
всички останали могат да четат файла.
Ако разгледаме директориите, ще видим че те имат флаг за изпълнение (execution). Тук обаче този флаг има друго значение, а именно – право за търсене (search). Ако един потребител няма това право, то той не може да отваря директорията, но все още има достъп до файловете в нея. За да може да прочете един файл в този случай обаче, е необходимо потребителя да знае името на файла и пълният път до него.
Освен тези права файла може да има още един флаг – SUID и GUID. Файл с такива флагове се изпълнява с привилегиите на потребителя или с привилегиите на групата, която изпълнява файла. Тези флагове се считат за много опасни и тяхното използване трябва да се ограничава.
Командите, които променят собственика и/или групата на файла и неговите права са съответно chown и chmod. Ако трябва да се променят правата на sample.txt, така че да бъде изпълним от всички, то трябва да се напише следното:
#chmod +x ./sample.txt
Синтаксиса на командата е много прост: + включва, а – изключва даден флаг. Чрез r, w и x се уточнява кой флаг трябва да се промени.
По този начин се променя даденото право глобално. А ако трябва да се промени само за собственика или групата например? В този случай пред знака + или – се постява опция чии права трябва да се променят, като опциите са следните:
u – собственика (user)
g – групата (group)
о – всички останали (others)
а – всички (all), като това е опцията по подразбиране.
Ето и пример за премахване на правото за изпълнение от файла за всички останали потребители:
#chmod o-x ./sample.txt
Командата позволява свободно комбиниране на опциите, например:
#chmod u+rwx ./sample.txt
Нека отново разгледаме правата на един файл, като където флага е включен ще поставим еденица, а там където е изключен – 0.
#ls -l ./sample.txt
-rwxr-xr-- 1 dino users 30 Sep 8 18:45 sample.txt
Собственик |
Група |
Всички останали |
||||||
---|---|---|---|---|---|---|---|---|
r |
w |
x |
r |
w |
x |
r |
w |
X |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
Сега нека разгледаме тази последователност от нули и еденици като три двоични числа – 111, 101 и 100:
Собственик |
Група |
Всички останали |
||||||
---|---|---|---|---|---|---|---|---|
r |
w |
x |
r |
w |
x |
r |
w |
X |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
111 |
101 |
100 |
Двоичната аритметика показва, че това са числата 7, 5 и 4. Причината за всичко това е, че оригиналния синтаксис на командата chmod e (от UNIX):
#chmod 744 ./sample.txt
Това ще установи на файла правата в таблицата в долната таблица:
Собственик |
Група |
Всички останали |
||||||
---|---|---|---|---|---|---|---|---|
r |
w |
x |
r |
w |
x |
r |
w |
X |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
111 |
100 |
100 |
||||||
7 |
4 |
4 |
Този синтаксис е по-сложен, но и много по-гъвкъв от типичния Линукс стил. Чрез този метод е възможна промяната на всички права едновременно, нещо което не може да се постигне по първият начин. Начина на образуване на правата е следния:
4 – четене
2 – запис
1 – изпълнение/търсене
След това е достатъчно да се съберат числата отговарящи за съответните права. Например право за четене и запис се дава като се съберат 4+2 =6.
Освен промяна на правата, понякога се налага да се променят и собственика или групата на файла. Това става с командата chown.
#chown gosho ./sample.txt
#ls -l ./sample.txt
-rwxr-xr-- 1 gosho users 30 Sep 8 18:55 sample.txt
След тази промяна потребителя dino вече не притежава файла и съответно не може да си върне неговата собственост. Това може да направи или gosho или root.
Промяната на групата става чрез командата chgrp:
#chgrp root ./sample.txt
#ls -l ./sample.txt
-rwxr-xr-- 1 gosho root 30 Sep 8 19:02 sample.txt
Освен с chgrp и промяната на групата може да стане и чрез chown. В този случай собственика и групата се променят едновременно:
#chown dino:users ./sample.txt
#ls -l ./sample.txt
-rwxr-xr-- 1 dino users 30 Sep 8 19:02 sample.txt