от Курс за ССОК
Лекцията цели да запознае читателя с организацията на файловата система в Линукс, както и някои основни понятия. Усвояването на тези знания е ключово за разбирането на много от механизмите заложени в операционната система, който са описани в другите лекции.
Основни принципи
Един от основните принципи в Юникс и Линукс гласи:
"Всичко е файл!"
Файловете с данни, директориите, информация за хардуерните устройсва в системата, информация за процесите или важни конфигурационни параметри на системата са представени като файлове. До тях имаме достъп чрез използването на стандартни инструменти за работа с файлове, но може да съществуват и допълнителни програми. Най-старата схема на защита в ОС също е разработена въз основа на файловете.
Съществуват следните видове файлове:
- Обикновен файл - това са файловете с данни, програмите, конфигурационни файлове и т.н.
- Директория - файл, който е списък (директория) на други файлове
- Връзка - специален файл, който сочи към друг файл
- Символно у-во - файл представляващ хардуерно у-во. Операциите запис/четене се изпълняват байт по байт. Пр. у-во свързано към серийния порт на компютъра
- Блоково у-во - хардуерно у-во до което запис/четене се осъществява чрез фиксирани блокове памет. Пр. твърд диск
- Socket - гнездо за комуникация. Специален файл използван за комуникация между различни процеси
- Pipe - подобно на socket. Използва се за комуникация между различни програми
На структурата на файловата система често е удобно да се гледа като на обърнато дърво. Кореновата директория (/) се намира на върха на йерархията. Нейните поддиректории образуват клоните на дървото, а файловете листата, т.к. те са най-накрая.
Разлики с MS Windows
Съществуват няколко разлики, които ще объркат обикновения потребител запознат само с операционна система MS Windows или DOS. Те не са следствие от това, че Линукс е направен погрешно, а точно обратното. Юникс като предшественик на Линукс съществува много преди Windows и е положил основите на много стандарти в съвременните ОС. Microsoft са хората, които решават да не спазват стандартите и да исмислят нови такива.
- В Линукс съществува една единствена директорийна структура, която започва от кореновата директория. Линукс монтира различните дялове и твърди дискове в определени директории като осигурява еднороден достъп до файловете. При DOS/Windows различните дялове и дискове получават буквена номерация при стартирането на ОС. Всеки дял/диск представлява отделна директорийна структура и няма как те да бъдат съединени в едно цяло. Може да гледаме на този подход като на гора от дървета
- В Линукс кореновата директория се обозначава с "/" - наклонена черта, наклонена на дясно (slash). В Windows най-близкото до "/" е "C:"
- Линукс използва дясно наклонена черта за разделител между директориите, а Widnows ляво наклонена "\" (back slash)
- Имената на файловете в Линукс са чувствителни към регистъра (малки/големи букви). В DOS/Windows не са. Т.е. "My Documents", "my documents", "my Documents" и т.н. са различни
Структура на директориите
Списъка на директориите в стандартна инсталация на Федора 10 изглежда така:
$ ls -p /
bin/ boot/ dev/ etc/ home/ lib/ lost+found/ media/ mnt/ opt/ proc/ root/ sbin/ selinux/ srv/ sys/ tmp/ usr/ var/
| Директория
| Описание
|
| /
| Коренова директория. Начало на йерархията на директориите.
|
| /bin/
| Основни команди и инструменти на ОС. Достъпни са от всички потребители.
|
| /boot/
| Файлове за първоначално зареждане на системата. Много често са на отделен дял.
|
| /dev/
| Файлове на хардуерни или софтуерни у-ва, като твърди дискове, памет, сериен порт т.н. В новите ОС съдържанието на тази директория се генерира при стартиране на системата, в зависимост от наличните у-ва на компютъра. При старите, тя е статична.
|
| /etc/
| Конфигурационни файлове за цялата система. Почти всички програми свързани с работата на системата съхраняват конфигурацията си в тази директория. Най-често това са обикновени текстови файлове, по рядко XML или с по сложна структура.
Името идва от "et cetera", т.к. в миналото там са се поставяли файлове, за който не е намерено подходящо място.
|
- /etc/opt/
| Конфигурационни файлове за /opt/.
|
- /etc/X11/
| Конфигурационни файлове за графичната система X, версия 11.
|
- /etc/sgml/
| Конфигурационни файлове за SGML.
|
- /etc/xml/
| Конфигурационни файлове за XML.
|
| /home/
| Съдържа домашните папки на потребителите, въпреки че може да са на друго място. Линукс е многопотребителска система и всеки потребител има своя домашна директория. Там може да съхранява личните си файлове и персонални настройки за програмите с който работи. Обикновено неможе да записва файлове в други директории.
|
| /lib/
| Програмни библиотеки за програмите в /bin/ and /sbin/. Това са основните програмни библиотеки в системата. При 64 битови машини може да имаме и /lib64/.
|
| /lost+found/
| Всеки дял на диска съдържа директория с това име. Файлове, който са запазени при повреда на диска или друга аномалия в системата (като спиране на тока) се намират тук. При стартиране на машината ОС ще се опита да ги възстанови.
|
| /media/
| Точки за монтиране на преносими носители на данни като CD-ROM или USB. Много от графичните среди за работа монтират временно у-ва в тази директория.
|
| /mnt/
| Друга директория за монтиране на дялове/дискове. Обикновено това се прави ръчно.
|
| /opt/
| Допълнителни приложения, извън стандартните за ОС.
|
| /proc/
| Виртуална файлова система. Информацията тук се генерира динамично при поискване (четене/запис) и преставлява специални файлове, описващи параметри на ОС, процесите или машината.
|
| /root/
| Домашна директория на супер потребителя (root).
|
| /sbin/
| Системни програми и инструменти. Обикновено се използват само от администратора на системата.
|
| /selinux/
| Специална директория за SELinux.
|
| /srv/
| Специфични данни само за тази система.
|
| /sys/
| Виртуална файлова система, подобна на /proc/. /sys/ е по-нова реализация на /proc/.
|
| /tmp/
| Временни файлове на потребители и/или програми. Често не се запазват след рестартиране. Повечето ОС периодично изтриват остарелите файлове в /tmp/, за да не се запълни свободното пространство на диска.
|
| /usr/
| Програмни библиотеки и изпълними файлове на програмите използвани от потребителите.
|
- /usr/bin/
| Програми, които не са необходими в работно ниво 1.
|
- /usr/include/
| Стандартно място за програмни файлове с дефиниции на функции.
|
- /usr/lib/
| Програмни библиотеки за програмите в /usr/bin/ и /usr/sbin/.
|
- /usr/sbin/
| Системни програми, който не са толкова важни, програми за мрежови услуги и т.н.
|
- /usr/share/
| Платформено независими данни. Често това са документация, икони, файлове с текстови данни и т.н.
|
- /usr/src/
| Изходен код на програми.
|
- /usr/local/
| Според стандарта тук трябва да се съдържат данни, които са само за определената машина, докато /usr/ може да бъде монтирана по мрежата от много машини. На практика /usr/local/ и поддиректориите като bin/, lib/, share/ се използват за инсталиране на софтуер, който не е част от дистрибуцията, пр. инсталиране на програми от изходен код.
|
| /var/
| Променливи данни като жърнални файлове, ел. поща и т.н.
|
- /var/lib/
| Информация за състоянието на системата. Данните се променят от различни програми докато те работят, пр. обновява се информацията за инсталираните пакети.
|
- /var/lock/
| Заключващи файлове. Спират използването на определени ресурси, пр. повторно пускане на дадена програма.
|
- /var/log/
| Журнални файлове от работата на системата и различни програми.
|
- /var/mail/
| Пощенски кутии на потребителите на системата.
|
- /var/run/
| Информация за системата от последното рестартиране, пр. текущи потребители и работещи процеси.
|
- /var/spool/
| Информация за задачи чакащи изпълнение, пр. опашка от документи за принтера, необработена поща и т.н.
|
- /var/spool/mail/
| Остаряло местоположение на пощенските кутии на потребителите.
|
- /var/tmp/
| Временни файлове, които се запозват след рестартиране.
|
Структурата на директориите в Линукс е дефинирана със стандарт, който може да бъде намерен на http://www.pathname.com/fhs/.
Подробно описание на структурата на вашата ОС може да видите чрез командата man hier
Файловата система от вътре
С термина файлова система се обозначава начинът на организация на данните върху носителите на информация като твърдите дискове например. Файловата система представлява служебна таблица разположена върху носителя на информация. Тази таблица съдържа данни за файловете записани на носителя, които се използват от ОС, за да получи достъп до файловете. Записите в таблицата се наричат inode и грубо могат да се определят като сериен номер на файла.
Информация за файловата система може да бъде получена (и променена) чрез програмата tune2fs.
$ tune2fs -l /dev/sda1
tune2fs 1.41.3 (12-Oct-2008)
Filesystem volume name: /boot
Last mounted on: <not available>
Filesystem UUID: acf46d65-8672-4e18-ac6f-be93ad949343
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 26104
Block count: 104388
Reserved block count: 5219
Free blocks: 80603
Free inodes: 26066
First block: 1
Block size: 1024
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2008
Inode blocks per group: 251
Filesystem created: Thu Jul 3 13:57:26 2008
Last mount time: Sun Dec 7 14:05:28 2008
Last write time: Sun Dec 7 14:05:28 2008
Mount count: 219
Maximum mount count: -1
Last checked: Thu Jul 3 13:57:26 2008
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: tea
Directory Hash Seed: 1d45199d-46bb-472e-b3b1-6fdc8172f89c
Journal backup: inode blocks
В горния пример виждаме големина на блока на файловата система 1024. Т.е. за всеки файл ще бъдат отделени file size/block size броя inode структури (закръглено нагоре).
При създаването на файл в inode се записват слените данни:
- Потребител и група собственици на файла
- Вид на файла (обикновен, директория, т.н.)
- Позволения за достъп до файла
- Дата и час на създаване, последен достъп (четене) и последна модификация
- Дата и час на промяната на информацията в inode
- Брой връзки към файла
- Големина на файла
- Адрес, който определя физическото местоположение на диска
Името и директорията на файла не се записват в inode.
Директории и връзки към файлове
Директорията в Линукс представлява специален вид файл. Той съдържа списък от имена на файловете в директорията и номерата на inode за тези файлове. Името на текущата директория и нейният inode номер са записани в директорийния файл на предишното ниво на йерархията. Във всяка директория съществуват две специални директории:
- . - представлява текущата директория, т.е. себе си
- .. - представлява родителската директория, тази на по-горното ниво от йерархията
Друг вид специални файлове са връзките. Те биват два вида:
- Твърди връзки (hard links)
- Символични връзки (symbolic links), още наричани меки връзки (soft links)
Твърдата връзка представлява запис в директорийния файл, който съдържа име на файл и сочи към inode номера на файла към който сочи връзката. След създаването на твърда връзка се увеличава броя на връзките към файла, записан в inode (при символичните не се увеличава). Данните на диска не се изтриват преди да бъдат изтрити всички твърди връзки към файла. След създаване на твърда връзка неможе да се разбере кой е оригиналния файл (първичния), т.к. това понятие не съществува. И двата файла сочат към едни и същи данни на диска, т.е. и двата са оригинални. Данните на диска ще бъдат изтрити само когато са изтрити всички твърди връзки.
Задача: Каква е големината на твърдата връзка?
Помощ: Използвайте ls -l(-h), за големината, -i за номера на inode.
Символичните връзки са файлове, чието съдържание е име към друг файл. Името може да бъде абсолютно (спрямо кореновата директория) или относително (спрямо директорията, съдържаща връзката). Големината на символичната връзка е равна на броя символи, с които е описано името на файла към който сочи връзката. Символичната връзка е отделен файл. При изтриване на символичната връзка оригиналният файл не се изтрива. При изтриване на оригиналният файл, символичната връзка става невалидна, т.е. сочи към несъществуващ файл.