Структура файловой системы Linux Slackware
Linux это многопользовательская система.
🕛 22.06.2009, 15:35
Мы с вами уже обсуждали структуру каталогов в Linux Slackware. Вы умеете искать файлы и каталоги, которые вам нужны. Но файловая система это нечто большее, чем структура каталогов.Linux это многопользовательская система. Все элементы системы многопользовательские, даже файловая система. Система хранит информацию о том, кому принадлежит файл и кто может читать его. А так же позволяет использовать ссылки и подключение NFS. В этом разделе наряду с перечисленными аспектами разъясняются аспекты многопользовательской структуры файловой системы.
Права собственности
Файловая система хранит информацию о правах собственности для каждого фала и каталога. Включая информацию о пользователе и группе, которым принадлежит файл.Самый простой способ просмотреть эту информацию - воспользоваться ls:
$ ls -l /usr/bin/wc
-rwxr-xr-x 1 root bin 7368 Jul 30 1999 /usr/bin/wc
Нас интересуют третий и четвёртый столбцы. Они содержат информацию о именах пользователя и группы, которым принадлежит файл. В приведённом примере файл принадлежит пользователю root и группе bin.
Владельца файла можно изменить при помощи chown(1) (что значит ''change owner'' - изменить владельца), а группу при помощи chgrp (''change group'' - изменить группу). Чтобы изменить владельца фала на ''daemon'', мы выполним команду:
# chown daemon /usr/bin/wc
А чтобы изменить группу на ''root'':
# chgrp root /usr/bin/wc
chown так же может быть использована для задания и пользователя и группы, которым принадлежит файл:
# chown daemon.root /usr/bin/wc
Принадлежность фалов - это очень важная часть использования Linux системы, даже если вы единственный пользователь. Иногда вам придётся исправлять права владения файлами и узлами (nodes) устройств.
Права доступа
Права доступа - это ещё одно проявление многопользовательских основ файловой системы. С их помощью вы можете указать, кто может читать, изменять и выполнять фалы.
Права доступа хранятся в виде четырёх восьмеричных чисел, каждое из которых устанавливает права для отдельного блока. Блоки представляют права владельца, права группы и права всего остального мира. Четвёртое восьмеричное число используется для хранения специальной информации, такой как ID владельца, ID группы и ''sticky''бит. Значения этих чисел соответствуют правам доступа (им так же сопоставляются буквы, которые выводятся такими программами, как ls и могут быть использованы программой chmod:
Table 5.1: Соответствие восьми-битовых чисел правам
Тип Восьми-битовое Буква значение
''sticky'' bit 1 t
set user ID (ID пользователя) 4 s
set group ID (ID группы) 2 s
read (чтение) 4 r
write (запись) 2 w
execute (выполнение) 1 x
Для каждой из групп права складываются. Например, если вы хотите, чтобы права группы были ''read'' и ''write'', вы воспользуетесь ''6'' в части соответствующей группе прав доступа.
Права по умолчанию для bash:
$ ls -l /bin/bash
-rwxr-xr-x 1 root bin 477692 Mar 21 19:57 /bin/bash
Первый дефис для каталогов принимает значение, равное ''d''. Три группы прав (владелец, группа и весь мир) отображаются следующими. Из примера мы видим, что владелец имеет права для чтения, записи и выполнения (rwx). Группа имеет только право на чтение и выполнения файла (r-x). И все остальные имеют только права на чтение и выполнение фала (r-x).
Как же нам присваивать права файлам? Вначале давайте создадим файл для примеров:
$ touch /tmp/example
$ ls -l /tmp/example
-rw-rw-r- 1 david users 0 Apr 19 11:21 /tmp/example
Мы воспользуемся chmod(1) (что означает ''change mode'' - изменить режим), для того чтобы установить права доступа для файла примера. Сложите восьмизначные числа, для прав, которые вы хотите. Для того, чтобы владелец имел права чтения, записи и выполнения, получится 7. Чтение и выполнение соответствует числу 5. Установим права:
$ chmod 755 /tmp/example
$ ls -l /tmp/example
-rwxr-xr-x 1 david users 0 Apr 19 11:21 /tmp/example
Для задания специальных прав, сложите числа вместе, и расположите их в первом столбце:
$ chmod 6755 /tmp/example
$ ls -l /tmp/example
-rwsr-sr-x 1 david users 0 Apr 19 11:21 /tmp/example
Если вас смущают восьми-битовые числа, вы можете пользоваться буквами. Группы прав представляются, как:
Владелец u
Группа g
Мир o
Все вышеперечисленные a
Чтобы проделать то же, что и выше, нам понадобится выполнить команду несколько раз:
$ chmod a+rx /tmp/example
$ chmod u+w /tmp/example
$ chmod ug+s /tmp/example
Некоторые предпочитают работать с буквами. Но в любом случае, результат - это тот же самый набор прав доступа.
Мы несколько раз упоминали упоминали права ''set user ID'' (установить ID пользователя) и ''set group ID'' (установить ID группы). Возможно, вы мучаетесь в догадках, что же это такое. Обычно, когда вы выполняете программу, она имеет все те же самые права, что и вы имеете, как пользователь. То же справедливо и для группы. Когда вы запускаете программу, она выполняется с правами вашей текущей группы. При помощи ''set user ID'' вы можете заставить программу всегда выполнятся с правами её владельца (например ''root''). ''Set group ID'' работает так же, но для группы.
Будьте осторожны здесь, так как set user ID и set group ID могут открыть ''дыры '' в безопасности вашей системы. Если вы установите эти права на файл, принадлежащий root-у, вы позволяете всем запускать эту программу, и выполнять её, как root. Так как у пользователя root нет ограничений в системе, это ставит под вопрос целостность основной безопасности системы. Короче, пользоваться этими командами не плохо, но здравый смысл должен присутствовать.
Ссылки
Ссылки это указатели на файлы. При помощи ссылок вы можете создавать файлы, существующие в нескольких местах, и доступные под многими именами. Есть два типа ссылок: жёсткие и символические.
Жёсткие ссылки это просто разные имена для одного и того же файла. Они могут существовать только в одном и том же каталоге и удаляются тогда, когда исходный файл удаляется. В некоторых случаях они бывают полезны, но большинство пользователей находит символьные ссылки более удобными.
Символьные ссылки (или так же мягкие) могут указывать на файл, находящийся вне текущего каталога. Фактически, это маленький файл, содержащий необходимую информацию. Вы можете добавлять и удалять символьные ссылки не влияя на исходный файл.
У ссылок нет их собственных прав доступа и принадлежности. Вместо этого они отражают права файла, на который они указывают. Slackware, в основном использует символьные ссылки. Вот обычный пример:
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Apr 6 12:34 /bin/sh -> bash
Оболочка sh в Slackware, на самом деле, bash. Ссылки удаляются при помощи rm. А для их создания используется команда ln. Эти команды будут обсуждены более подробно в разделе 5.3.
Монтирование (подключение) устройств
Как обсуждалось ранее в разделе ''Структура файловой системы'', все диски и устройства в вашем компьютере являются одной большой файловой системой. Различные разделы жёсткого диска, CD-ROMы, и дисководы, все расположены в одном и том же дереве каталогов. Для подключения всех этих устройств к файловой системе, вам надо использовать mount и umount команды.
Некоторые устройства автоматически подключаются при загрузке компьютера. Они перечислены в файле /etc/fstab. Всё, что вы хотите подключать автоматически, должно иметь строчку в этом файле. Для других устройств, вам придётся указывать команду каждый раз, когда вы хотите воспользоваться ими.
fstab
Давайте рассмотрим пример файла /etc/fstab:
/dev/sda1 / ext2 defaults 1 1
/dev/sda2 /usr/local ext2 defaults 1 1
/dev/sda4 /home ext2 defaults 1 1
/dev/sdb1 swap swap defaults 0 0
/dev/sdb3 /export ext2 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
/dev/fd0 /mnt ext2 defaults 0 0
/dev/cdrom /cdrom iso9660 ro 0 0
В первом столбце указанно имя устройства. В этом случае устройства, это пять разделов, разбросанных по двум SCSI жёстким дискам, два специальных файловых системы, которым не нужны файловые системы, флоппи дисковод и CD-ROM дисковод. Второй столбец указывает куда подключать устройство. Это должен быть существующий каталог, за исключением раздела подкачки. Третий столбец указывает тип файловой системы для устройства. Для обычного Linux раздела это будет ext2 (''second extended filesystem'' - вторая расширенная файловая система). Для CD-ROM это будет iso9660, а для Windows разделов это может быть, как msdos, так и vfat.
Четвёртый столбец перечисляет опции, которые используются при монтировании устройств. Почти всегда ''defaults'' вполне достаточно24. Тем не менее, устройствам, доступным только для чтения рекомендуется указывать параметр ro. Существует огромное количество различных опций. Смотрите man страницу fstab(5) для получения дополнительной информации. Последние два столбца используются программой fsck и другими командами для манипулирования дисками. Так же обращайтесь к man странице для получения разъяснений.
При установке Slackware Linux, программа установки генерирует минимальный fstab файл. Вам понадобится изменить этот файл только если вы хотите добавить диски, или захотите, чтобы устройства автоматически монтировались при загрузке.
mount и umount
В Linux очень просто подключать устройства. Всё что вам надо сделать, это запустить mount команду, указывай ей несколько опций. Использование этой команды может быть значительно упрощено, если монтируемое устройство описано в /etc/fstab файле. Предположим, я хочу подключить CD-ROM и fstab выглядит так, как в примере предыдущего раздела. Я могу сделать это, выполнив команду:
# mount /cdrom
Так как в fstab есть строчка для этого устройства, mount возьмёт все опции оттуда. Если бы для этого устройства не было описания в fstab, то пришлось бы задавать все опции вручную:
# mount -t iso9660 -o ro /dev/cdrom /cdrom
Эта строка включает ту же самую информацию, что и строка в вышеприведённом fstab, но в другом формате. Давайте разберёмся. -t iso9660 указывает тип файловой системы на устройстве. В этом случае это iso9660 система, которая используется на большинстве CD-ROM. -o ro указывает, что устройство подключается только для чтения. /dev/cdrom это имя устройства, которое мы хотим подключить и /cdrom это каталог, куда мы хотим подключить устройство.
До того, как извлекать флоппи, CD-ROM, или другое извлекаемое устройство, которое в данный момент подмонтированно, вам надо размонтировать его. Для того, чтобы сделать это, нужно воспользоваться командой umount. Не спрашивайте, почему она называется не unmount, так как мы не сможем вам ответить. Вы можете использовать либо имя устройства, либо точку монтирования в качестве аргумента для команды. Например, если вы хотите размонтировать CD-ROM, подключённый в предыдущем примере, любая из нижеприведённых команд позволит вам сделать это:
# umount /dev/cdrom
# umount /cdrom
Монтирование NFS
NFS, как мы уже упоминали, это сокращение для Network Filesystem (Сетевая файловая система. На самом деле она не является частью реальной файловой системы, но может быть использована для подключения устройств через сеть.
Зачастую в больших Unix сетях возникает необходимость разделять многие программы, домашние каталоги, и почтовые очереди. Проблема предоставления идентичных копий файлов различным компьютерам разрешается при помощи NFS. Можно использовать NFS для разделения одного набора домашних каталогов между всеми рабочими станциями. В таком случае, рабочие станции монтируют этот разделяемый каталог и используют его, как если бы он был размещён локально.
Смотрите раздел 4.2.6 и man страницы для exports(5), nfsd(5) и mountd для дополнительной информации.
Итог
В этом разделе вы должны были приобрести знания о правах владения и доступа. Вы должны понимать, для чего это нужно, и как их устанавливать. Так же вы должны иметь представление о ссылках и уметь монтировать устройства. Это основные необходимые знания по файловой системе.