HPC.ru lite - Все форумы
Форум: КПК и смартфоны на Linux: Zaurus, планшеты Nokia, прочее
Тема: Файловая система Linux
Страницы: [1] 2
[Ответить]
sil [25.12.2003 10:31] Файловая система Linux:
Хотелось бы хоть немного разобраться с файловой системой Linux.
В каких папках чего лежит, для чего эти папки нужны, какие форматы файлов бывают и тд.
мОжет кто кинет ссылочку на файлик на русском? или объяснит чтосам знает?
ВадимП [25.12.2003 14:59] :
Для начала два замечания: "файловой системой" принято называть несколько иную вещь - структура директорий и мифические расширения файлов к ней отношения не имеют.
Во вторых, слово "папка" действует на старых опытных юниксоидов как красная тряпка на быка. Правильный термин "директория" или "каталог".
Традиционно структура дерева директорий Юникс достаточно нелогична и запутана. Каких-то раз и навсегда определенных мест для размещения файлов не существует - не только разные дистрибутивы Линукса хранят одинаковые файлы в разных местах, но даже разные версии одного и того же приложения могут пытаться распихать свои файлы по разным директориям.
Поэтому имеет смысл говорить только об общем принципе, который ("закон - что дышло") может быть применен по разному.
Итак:
/bin - здесь хранятся только исполняемые файлы. При этом теоретически здесь должны располагаться только программы более или менее одинаковые для всех систем с данным дистрибутивом. То есть, предполагается, что пользователь самостоятельно не будет добавлять сюда программы. В то же время утилиты, предназначенные для администрирования системы не должны располагаться в этом каталоге.
/boot - как легко понять из названия, здесь обычно располагается само ядро, файл System.map - карта символов ядра и все остальное, что имеет отношение к процедуре загрузки, кроме модулей (initrd, файлы конфигурации grub, если импользуется этот загрузчик и т.д.). В этой директории во время загрузки могут создаваться некоторые вспомогательные файлы, такие как kernel.h. Раньше образ ядра зачастую хранился в корневой директории, но все основные современные дистрибутивы давно уже перешли на использование /boot.
/dev - директория предназначенная для хранения файлов устройств. Основная метафора Юникс - "все, что угодно, есть файл". На самом деле эта метафора (как всегда) не выдерживается до конца последовательно - существует три типа устройств: символьные, блочные и сетевые. Однако только символьные и блочные устройства имеют соответствующие им файлы. Никакого файла, соответствующего, скажем, eth0 не существует в принципе. Правда могут существовать файлы соответствующие символьным или блочным устройствам обеспечивающим доступ к сетевым ресурсам (то есть после установления, скажем, ppp соединения может появиться новое символьное устройство, которое не было доступно до того).
С точки зрения ядра Юникс имена, которые мы даем устройствам никакого смысла не имеют. Ядро различает устройства не по именам, а по номерам. Каждое устройство имеет два номера: старший и младший. "ls -l /dev" позволяет посмотреть эти номера. mknod позмоляет создать новый файл устройства. Неважно какое у него будет имя - если оно будет иметь тот же тип, что и уже существующее и те же оба номера, ядро окажется не в состоянии отличить обращение к новому файлу устройства от обращения к старому. При этом все просто договорились использовать для размещения этих файлов директорию /dev. С равным успехом их можно создавать в любой другой директории. Правда, существуют псевдо файловые системы, которые обеспечивают автоматическое создание и уничтожение файлов устройств. В Линукс это devfs (устаревшая) и udev. Они традиционно монтируются на /dev.
Смысл старших и младших номеров исходно был предельно ясен и прост: существовала талица драйверов устройств и старший номер выбирал драйвер из этой таблицы. То есть, запросы на все устройства с одинаковым старшим номером направлялись одному и тому же драйверу. Каждый драйвер, в свою очередь поддерживал таблицу устройств и по младшему номеру выбирал конкретноен устройство из этой таблицы. Со временем, по мере усложнения операционной системы эта простота, к сожалению, исчезла...
(Надоело мне это писать, если sil'у будет интересно - потом продолжу, если вопрос был о чем-то другом - нужно уточнить).
maslovsky [25.12.2003 15:13] :
ВадимП - жму руку! Столько писать, я бы так не смог 
sil [25.12.2003 15:33] !!!!!!:
ВадимП, спасибо. Тронут до слез, прада
Информация полезная и не мне одному я думаю нужная , так что смело её в FAQ!.
Это именно то что я просил. Если будут еще силы - дополните.
Вопрос по теме но конкретный.
Я как то случайно нарбрел, убей бог не помню какой это был каталог, но там были конфигураионные фалы системы (Ваша любимая X11
)
я поменял на больший, шрифт в окне настройки яркости, Qpakadger, еще каких то встроенных приложениях (они были в той же папке ) . А теперь не могу найти где. Все обыскал. Снится скоро он мне будет этот каталог...!
Где искать не подскажете? 
ВадимП [25.12.2003 15:46] :
некоторые, наиболее общие файлы настройки обычно находятся в /etc/X11.
Найти другие может быть намного более сложно (это может быть какой-нибудь /usr/X11R6/lib/X11/etc...)
В целом надо смотреть (правда я не совсем понял, что именно) где-то или в /usr/{.|local|share}/X11R6/etc/X11
или в
/usr/{.|local|share}/X11R6/lib
(поскольку сама /usr закрыта на запись, то вместо /usr/X11R6 могла быть использована или /usr/local/X11R6 или /usr/share/X11R6 - не знаю, что сделал sash.
sil [25.12.2003 15:58] :
Оки. Посмотрю,
спасиба спасиба спасИБА!
ВадимП [25.12.2003 16:15] :
/etc - директория "et cetera", которая давным-давно уже потеряла свое исходное предназначение - служить местом для хранения всего, что не вошло ни в одну другую директорию. Сейчас она используется в основном для двух вещей: хранения файлов конфигурации наиболее важных приложений и стартовых сценариев (терминологический вопрос: не пишу "самой системы", потому что непонятно что есть "сама система"? Ближе всего к понятию "файл конфигурации самой системы" файл /etc/inittab, который вполне корректно рассматривать как файл важного системного приложения /sbin/init).
Файлы в самой директории в подавляющем большинстве не исполняемые. Даже сценарии оболочки вроде bashrc или profile. Нет смысла делать их исполняемыми, поскольку они всегда вызываются из текущего интерпретатора (". bashrc") - в противном случае они окажутся не в состоянии выполнить свое предназначение (установить переменные окружения).
Лирическое отступление:
В Unix не существует способа передать переменные окружения от потомка родителю. Поэтому, если потомок (например, mc) меняет директорию, после выхода из него восстанавливается первоначальная директория. Чтобы текущая директория сохранялась после выхода из программы используется примитивный трюк:в каком-то из сценариев выполняемом при запуске начальной оболочки (я предпочитаю, как это сделано в Red Hat, для этой цели создать директорию /etc/profile.d) определяется функция с именем mc. Когда Вы вызываете midnight commander фактически вызывается эта фунция, которая вызывает mc с ключом "-P". При этом mc, завершая работу записывает текущий каталог в файл, указаный после этого ключа. Функция читает этот файл и выполняет cd `cat file`. То есть выполняет переход в ту директорию из которой вышел mc. Поскольку функия выполняется в той же оболочке, после выхода из фунции новая директория сохраняется и для пользователя все выглядит так, как будто он изменил директорию в mc, вышел и остался в новой директории.
Правда, существуют и исключения. Некоторые файлы создаются как исполняемые (например, /etc/bash_completion), но это право доступа для них никогда не является принципиально важным.
Стартовые файлы (которые традиционно находятся во всех дистрибутивах в /etc/rc.d/), напротив, не только являются исполняемыми, но и существенно зависят от этого атрибута. В некоторых случаях, для ускорения начальной загрузки (ненамного) они запускаются не последовательно, а одновременно, что, как легко понять, требует порождения для каждого файла отдельного процесса.
Кроме того, в /etc могут создаваться субдиректории, которые, в большинстве, используюся каким-то единственным приложением или подсистемой. В таких директориях обычно бывают перемешаны сценарии и файлы конфигурации. В очень редких случаях там могут находиться символьные ссылки на исполняемые файлы (/etc/X11/X). Сами исполняемые файлы (программы, не сценарии) я не встречал никогда.
sil [25.12.2003 16:25] :
я опять себячуствую безнодежно тупым.
ЗАчем все так усложнять? Зачем одни и те же файлы совать по разным директориям и почему просто ссылки на них не создавать?
Почему не сделать один каталог куда положить все файлы настроек,
1 каталог для драйверов, короче как то разграничить .... такая ведь каша....
Но енаверное я просто расуждаю как ламер
Все уменые а я баран.....
Понамудрено везде!!!!!
Особенно ответ sash в одном из топиков порадовал: цитирую
"...Дефолтовая ориентация фреймбуффера..." или "Это не заметно при использовании кутопии в vga режиме, но вылазит боком при использовании режима qvga и использовании yuv/rgb оверлея"
Ладно будем разбираться.

ВадимП [25.12.2003 17:00] :
sil, высказывания sash я комментировать не возьмусь. Я вообще не силен в комментировании англицизмов
.
По поводу местонахождения файлов - возьмите архив www.killefiz.de. Там всего-то с тысячу пакетов, но четкой структуры уже нет и по категории найти нужный пакет невозможно - только поиском. Попробуйте увеличить количество пакетов в 50 раз, сделайте сотню независимых друг от друга серверов на каждом из которых дерево директорий будут создавать разные люди, учтите при этом, что редко какой пакет идеально вписывается в одну-единственную категорию и скажите мне: уверены ли Вы, что через 30 лет бездумного накопления этих пакетов достаточно легко будет понять, каким образом сложилась существующая иерархия категорий?
ВадимП [25.12.2003 17:37] :
/home - в всех остальных Линукс-системах за исключением наших Zaurus'ов в этой директории создаются домашние директории пользователей в которых те вольны хранить все, что им угодно. Чтобы воспрепятствовать бесконтрольному разрастанию таких директорий (место на диске все-таки не резиновое) может быть использована система квот, аналогичная квотированию дискового пространства для размещения вложений или почтовых ящиков на интернет-серверах. В нашем случае эта директория во-первых, сразу после hard reset уже содержит абсолютно все файлы, которые Вы вправе изменять и, во-вторых, плюс к этому будет содержать абсолютно все файлы, которые Вы впоследствии добавите (например, устанавливая новые приложения). Для этого в /home существуют директории /home/QtPalmtop и /home/system которым не соответствует ни один пользователь.
Еще одним отличием нашего /home от обычного является тот факт, что домашняя директория суперпользователя, которая во всех остальных случаях называется /root и лежит в корневой директории, в нашем случае (/home/root) также находится в /home.
Лирическое отступление:
Причины побудившие Sharp соорудить такую странную конструкцию достаточно понятны - чтобы защитить флеш-память от модификации неопытным пользователем применена достаточно простая схема: флеш разделен на три части: boot (7MB), initrd (25-50MB) и пользовательская область (все остальное). boot в свою очередь тоже разделен на части: в частности там находится диагностическое меню, две копии ядра и еще одна файловая система с небольшим набором утилит - именно она монтируется как корневая при загрузке по "D"+"B".
boot при нормальной загрузке не монтируется вовсе, чтобы его нельзя было никак повредить (на самом деле сделать с помощью dd это можно с два счета), initrd (доступный как /dev/mtdblock2 он же /dev/root) монтируется как read-only корневая файловая система, а /dev/mtdblock3 монтируется на /home и поэтому все, что можно записать, попадает именно туда.
Однако получившаяся в результате файловая структура не выглядит не только идеальной, но даже хоть сколько-то близкой к такому состоянию. Зачем, скажите на милость, они запихнули в /root все, что они туда запихнули? Насколько легко неопытному пользователю понять, что бессмысленно править /etc/rc.d/rc.sysinit - он существует, но это не тот файл, который фактически используется при загрузке системы?
И т.д. и т.п...
/lib - здесь все просто. В этой директории хранятся общесистемные библиотеки. То есть, полная аналогия с директорией /bin: в /bin находятся "общие" программы, в /usr/bin - порльзовательские. Аналогично с /lib и /usr/lib.
Во всех остальных Линукс-системах возникает естественный вопрос: какие файлы можно отнести к общесистемным, а какие к пользовательским? Но не в нашем случае. Поскольку и /lib и /bin находятся в файловой системе доступной только для чтения, любые модификации можно выполнять только с их компаньонами в /usr.
Только самым важным приложениям, таким как iptables дозволено создавать в /lib субдиректории и хранить там свои библиотеки.
Но /lib имеет еще одну неожиданную функцию - при загрузке модулей ядра они по умолчанию ищутся в директории /lib/modules/`uname -r`.
[Ответить]
[Вперед >]