Файловая система Linux
5.1. Различные файловые системы
Linux поддерживает много различных файловых систем. Начинающий пользователь просто теряется, когда видит такое многообразие выбора, — ведь в качестве корневой файловой системы доступны: ext2, ext3, ext4, XFS, ReiserFS, JFS.
«Родной» файловой системой Linux являются журналируемая файловая система ext4 (ext3) или ее обычная, не журналируемая, версия — ext2. По умолчанию практически все дистрибутивы используют файловую систему ext3, но многие уже поддерживают ext4 (Ubuntu — не исключение, здесь файловая система ext4 используется по умолчанию).
Все перечисленные файловые системы (кроме ext2) ведут журналы своей работы, что позволяет восстановить данные в случае сбоя. Осуществляется это следующим образом — перед тем как выполнить операцию, журналируемая файловая система записывает эту операцию в журнал, а после выполнения операции удаляет запись из журнала. Представим, что после занесения операции в журнал произошел сбой (например, выключили свет). Позже, когда сбой будет устранен, файловая система по журналу выполнит все действия, которые в него занесены. Конечно, и это не всегда позволяет уберечься от последствий сбоя — стопроцентной гарантии никто не дает, но все же такая схема работы лучше, чем вообще ничего.
Файловые системы ext2 и ext3 совместимы. По сути, ext3 — та же ext2, только с журналом. Раздел ext3 могут читать программы (например, Total Commander и Ext2Fsd в Windows), рассчитанные на ext2. В современных дистрибутивах по умолчанию задана файловая система ext3 или ext4. При необходимости можно выбрать другие файловые системы. Давайте кратко рассмотрим их особенности, чтобы понять, нужно ли их использовать или же остановить свой выбор на стандартной ext3/ext4.
□ Файловая система XFS была разработана компанией Silicon Graphics в 2001 году. Основная особенность данной системы — высокая производительность (до 7 Гбайт/с). XFS может работать с блоками размером от 512 байтов до 64 Кбайт. Ясно, что если у вас много маленьких файлов, то в целях экономии места можно установить самый маленький размер блока. А если вы работаете с файлами большого размера (например, мультимедиа), то нужно выбрать самый большой размер блока — так файловая система обеспечит максимальную производительность (конечно, если «железо» позволяет). Учитывая высокую производительность этой файловой системы, ее нет смысла устанавливать на домашнем компьютере, поскольку все ее преимущества будут сведены на нет. А вот если вы будете работать с файлами очень большого размера, XFS проявит себя с лучшей стороны.
□ Файловая система ReiserFS считается самой экономной, поскольку позволяет хранить несколько файлов в одном блоке (другие файловые системы могут хранить в одном блоке только один файл или одну его часть). Например, если размер блока равен 4 Кбайт, а файл занимает всего 512 байтов (а таких файлов очень много в разных каталогах), то 3,5 Кбайт просто не будут использоваться. А вот ReiserFS позволяет задействовать буквально каждый байт вашего жесткого диска!
Но у этой файловой системы есть два больших недостатка: она неустойчива к сбоям и ее производительность сильно снижается при фрагментации. Поэтому, если вы выбираете данную файловую систему, покупайте UPS (источник бесперебойного питания) и почаще дефрагментируйте жесткий диск.
□ Файловая система JFS (разработка IBM) сначала появилась в операционной системе AIX, а потом была модифицирована под Linux. Основные достоинства этой файловой системы — надежность и высокая производительность (выше, чем у XFS). Но у нее маленький размер блока (от 512 байтов до 4 Кбайт). Следовательно, она хороша на сервере баз данных, но не при работе с данными мультимедиа, поскольку блока в 4 Кбайт для работы, например, с видео в реальном времени, будет маловато.
Как видите, оптимальным выбором для домашнего или офисного компьютера является все-таки ext4 или же, в крайнем случае, ReiserFS. Остальные файловые системы довольно специфические: XFS больше подходит для мультимедиастанции, а JFS — для сервера.
5.2. Имена файлов в Linux
По сравнению с Windows в Linux несколько другие правила построения имен файлов, вам придется с этим смириться. Начнем с того, что в Linux нет такого понятия, как расширение имени файла. В Windows, например, для файла Document1.doc именем файла является фрагмент Document 1, а doc — это расширение. В Linux Document1.doc — это имя файла, никакого расширения нет.
Максимальная длина имени файла — 254 символа. Имя может содержать любые символы (в том числе и кириллицу), кроме / \? <> * " |. Но кириллицу в именах файлов я бы не рекомендовал вообще. Впрочем, если вы уверены, что не будете эти файлы передавать Windows-пользователям (на флешке, по электронной почте) — используйте на здоровье. А при обмене файлами по электронной почте (кодировка-то у всех разная, поэтому вместо русскоязычного имени пользователь может увидеть абракадабру) имя файла лучше писать латиницей.
Также вам придется привыкнуть к тому, что Linux чувствительна к регистру в имени файла: FILE.txt и FiLe.Txt — это два разных файла.
Разделение элементов пути осуществляется символом / (прямой слэш), а не \ (обратный слэш), как в Windows.
5.3. Файлы и устройства
А сейчас Windows-пользователи будут вообще удивлены — в Linux есть файлы устройств, позволяющие обращаться с устройством, как с обычным файлом. Файлы устройств находятся в каталоге /dev (сокращение от devices).
Вот самые распространенные примеры файлов устройств:
□ /dev/sdx — файл устройства жесткого диска (SATA/SCSI/ATA), x — это порядок подключения диска к шине;
□ /dev/sdxN — файл устройства раздела жесткого диска, N — это номер раздела;
□ /dev/scdN или /dev/srN — привод CD/DVD;
□ /dev/mouse — файл устройства мыши;
□ /dev/modem — файл устройства модема;
□ /dev/ttySn — файл последовательного порта, n — номер порта (ttyS0 соответствует COM1, ttyS 1 — COM2 и т. д.).
В свою очередь, файлы устройств бывают двух типов: блочные и символьные. Обмен информации с блочными устройствами, например с жестким диском, осуществляется блоками информации, а с символьными — отдельными символами. Пример символьного устройства — последовательный порт.
С жесткими дисками сложнее всего, поскольку одно и то же устройство может в разных версиях одного и того же дистрибутива называться по-разному.
Так, раньше накопители, подключающиеся к интерфейсу IDE (PATA), назывались /dev/hdx, а SCSI/SATA-накопители — /dev/sdx (где в обоих случаях x — буква). Теперь же все дисковые устройства вне зависимости от интерфейса подключения (PATA, SATA, SCSI) называются /dev/sdx, где x — буква. Например, в старой версии дистрибутива мой IDE-диск, подключенный как первичный мастер, назывался /dev/hda, а сейчас — /dev/sda. Это связано с принятием udev[2] и глобального уникального идентификатора устройств (Universally Unique Identifier, UUID).
Все современные дистрибутивы (и Ubuntu— не исключение) поддерживают udev и UUID. Так что не удивляйтесь, если вдруг ваш старенький IDE-винчестер будет назван /dev/sda. С одной стороны, это вносит некоторую путаницу. С другой — все современные компьютеры оснащены именно SATA-дисками (так как PATA-диски уже устарели, а SCSI — дорогие), а на современных материнских платах только один контроллер IDE (PATA), потому многие пользователи даже ничего не заметят.
5.4. Стандартные каталоги Linux
Файловая система Ubuntu содержит следующие каталоги (рис. 5.1):
□ / — корневой каталог;
□ /bin — содержит стандартные программы Linux (cat, cp, ls, login и т. д.);
□ /boot — каталог загрузчика, содержит образы ядра и Initrd, может содержать конфигурационные и вспомогательные файлы загрузчика;
□ /cdrom — судя по названию, можно предположить, что к этому каталогу монтируется файловая система CD-ROM, но это не так. CD/DVD монтируется к каталогу /media/
□ /dev — содержит файлы устройств;
□ /etc — содержит конфигурационные файлы системы;
□ /home — содержит домашние каталоги пользователей;
□ /lib — библиотеки и модули;
□ /lost+found — восстановленные после некорректного размонтирования файловой системы файлы и каталоги;
□ /media — содержит точки монтирования автоматически смонтированных сменных носителей данных;
□ /mnt — обычно содержит точки монтирования;
□ /opt — оставлен из соображений совместимости, в Debian в этот каталог устанавливалось дополнительное (опциональное), то есть не входящее в состав дистрибутива, программное обеспечение;
□ /proc — каталог псевдофайловой системы proofs, предоставляющей информацию о процессах;
□ /root — каталог суперпользователя root;
□ /sbin — каталог системных утилит, выполнять которые имеет право пользователь root;
□ /selinux — служебный каталог системы SELinux;
□ /srv — содержит служебные каталоги различных сетевых служб, например, FTP- и WWW — серверов;
□ /sys — каталог псевдофайловой системы sysfs, предоставляющей информацию о системе;
□ /tmp — каталог для временных файлов;
□ /usr — содержит пользовательские программы, документацию, исходные коды программ и ядра;
□ /var — постоянно изменяющиеся данные системы, например, спулы системы печати, почтовые ящики, протоколы, замки и т. д.
5.5. Команды для работы с файлами
Основные команды Linux, предназначенные для работы с файлами, приведены в табл. 5.1. Указанные команды нужно вводить в терминале (Приложения | Стандартные | Терминал).
Рассмотрим небольшую серию команд, приведенную в листинге 5.1 (рис. 5.2).
touch file.txt
echo "some text" > file.txt
cat file.txt
cp file.txt file-copy.txt
cat file-copy.txt
rm file.txt cat file.txt
mv file-copy.txt file.txt
cat file.txt
Команда touch создает в текущем каталоге файл file.txt. Вторая команда (echo) записывает строку same text в этот же файл. Обратите внимание, > — это символ перенаправления ввода/вывода, о котором мы поговорим чуть позже.
Третья команда (cat) выводит содержимое файла (в файле — записанная нами строка same text). Команда cp копирует файл file.txt в файл с именем file-copy.txt. После этого мы опять используем команду cat, чтобы вывести содержимое файла file-copy.txt, — надо же убедиться, что файл действительно скопировался.
Команда rm удаляет файл file.txt. При удалении система спрашивает, хотите ли вы удалить файл? Если да, то нужно нажать клавишу
Восьмая команда (mv) переименовывает файл file-copy.txt в файл file.txt. Последняя команда выводит исходный файл file.txt. Думаю, особых проблем с этими командами у вас не возникло, тем более, что их принцип действия вам должен быть знаком по командам DOS, которые, как квалифицированный пользователь Windows, вы должны знать наизусть.
Вместо полного имени файла иногда очень удобно указать маску имени. Например, у нас есть много временных файлов, которые заканчиваются фрагментом tmp — для их удаления нужно воспользоваться командой:
rm *tmp
Если же нужно удалить все файлы в текущем каталоге, можно просто указать «звездочку»:
rm *
Аналогично, можно применить символ ? который в отличие от звездочки, заменяющей последовательность символов произвольной длины, заменяет всего один символ. Например, нам нужно удалить все файлы, имена которых состоят из трех символов и начинаются на d:
rm d??
Будут удалены файлы d11, dbm, d78 и т. д., но не будут тронуты файлы, имена которых состоят из более чем трех букв и которые не начинаются на d.
Маски имен допустимы также при работе с каталогами.
5.6. Команды для работы с каталогами
Основные команды для работы с каталогами приведены в табл. 5.2.
При указании имени каталога можно указать следующие символы:
□. — означает текущий каталог. Если вы введете команду cat./file, то она выведет файл file, который находится в текущем каталоге;
□ .. — родительский каталог, например, команда cd.. переведет нас на один уровень вверх по дереву файловой системы;
□ ~ домашний каталог пользователя.
Теперь рассмотрим команды для работы с файлами на практике. Выполните следующие команды (листинг 5.2).
mkdir directory
cd directory
touch file1.txt
touch file2.txt
ls
cd..
ls directory
rm directory
rmdir directory
rm — r directory
Первая команда (mkdir) создает каталог directory в текущем каталоге. Вторая команда (cd) переходит (изменяет каталог) в только что созданный каталог. Следующие две команды touch создают в новом каталоге два файла: file1.txt и file2.txt.
Команда ls без указания каталога выводит содержимое текущего каталога. Команда cd.. переходит в родительский каталог (как уже упоминалось, в Linux родительский каталог обозначается .. , а текущий — . ). Таким образом, находясь в каталоге directory, мы можем обращаться к файлам file1.txt и file2.txt без указания каталога или же как./file1.txt и./file2.txt.
В Linux для разделения элементов пути служит прямой слэш (/), а не обратный (\), как в Windows. Запомните это!
В Linux часто употребляется обозначение ~ — это домашний каталог. Предположим, что наш домашний каталог назван /home/den. В нем мы создали подкаталог dir и поместили в него файл file 1.txt. Полный путь к файлу можно записать так:
/home/den/dir/file1.txt
или так:
~/dir/file1.txt
Как видите, тильда (~) заменяет часть пути. Удобно? Конечно!
Поскольку мы находимся в родительском для каталога directory каталоге, для того чтобы вывести содержимое только что созданного каталога, в команде lsнам нужно четко указать его имя:
ls directory
Команда rm предназначена для удаления каталога. Но что мы видим — система отказывается удалять каталог! Пробуем удалить его командой rmdir, но и тут отказ. Система сообщает нам, что каталог не пустой, т. е. содержит файлы. Для удаления каталога нужно сначала удалить все файлы. Конечно, делать это не сильно хочется, поэтому проще указать опцию — r команды rm для рекурсивного удаления каталога. В этом случае сначала будут удалены все подкаталоги (и все файлы в этих подкаталогах), а затем будет удален сам каталог (рис. 5.3).
Команды cp и mv работают аналогично — для копирования (перемещения/переименования) сначала указывается каталог-источник, а потом каталог-назначение. Для каталогов желательно указывать параметр — r, чтобы копирование (перемещение) выполнялось рекурсивно.
5.7. Ссылки
В Linux допускается, чтобы один и тот же файл существовал в системе под разными именами. Для этого используются ссылки двух типов: жесткие и символические. Первые жестко привязываются к файлу — вы не можете удалить файл, пока на него указывает хотя бы одна жесткая ссылка. А вот если на файл указывают символические ссылки, его удалению ничто не помешает.
Жесткие ссылки не могут указывать на файл, который находится за пределами файловой системы. Предположим, у вас два Linux-раздела: один корневой, а второй содержит домашние файлы пользователей и монтируется к каталогу /home корневой файловой системы. Так вот, вы не можете создать в корневой файловой системе ссылку, которая ссылается на файл в файловой системе, подмонтированной к каталогу /home. Это очень важная особенность жестких ссылок. Если вам потребуется создать ссылку на файл, который находится за пределами файловой системы, то вам придется прибегнуть к символическим ссылкам.
Ссылки создаются командой ln:
ln file.txt linkl
ln — s file.txt link2
Первая команда создает жесткую ссылку linkl, ссылающуюся на текстовый файл file.txt. Вторая — символическую ссылку link2, которая ссылается на текстовый файл file.txt.
Модифицируя ссылку (все равно какую — linkl или link2), вы автоматически модифицируете исходный файл file.txt.
Особого внимания заслуживает операция удаления. По идее, если вы удаляете ссылку link2, файл file.txt также должен быть удален, но не тут-то было. Вы не можете его удалить до тех пор, пока на него указывает хоть одна жесткая ссылка. При удалении ссылки link2 просто будет удалена эта символическая ссылка, но жесткая ссылка и сам файл останутся. Если же вы удалите ссылку linkl, будет удален и файл file.txt, поскольку на него больше не ссылается ни одна жесткая ссылка.
5.8. Права доступа и атрибуты файла. Команды chown, chmod и chattr
5.8.1. Права доступа к файлам и каталогам
Для каждого каталога и файла вы можете задать права доступа. Точнее права доступа автоматически задаются при создании каталога (файла), а вы, при необходимости, можете их изменить. Какая может быть необходимость?
Например, вам нужно, чтобы к вашему файлу-отчету смогли получить доступ пользователи — члены вашей группы. Или вы создали обычный текстовый файл, содержащий инструкции командного интерпретатора. Чтобы этот файл стал сценарием, вам нужно установить право на выполнение для этого файла.
Существует три права доступа: чтение (r), запись (w), выполнение (x). Для каталога право на выполнение означает право на просмотр содержимого каталога.
Вы можете установить разные права доступа для владельца (то есть для себя), для группы владельца (то есть для всех пользователей, входящих в одну с владельцем группу) и для прочих пользователей. Пользователь root может получить доступ к любому файлу (каталогу) вне зависимости от прав, которые вы установили.
Чтобы просмотреть текущие права доступа, введите команду:
ls — l <имя файла/каталога>
Например:
ls — l video.txt
В ответ компьютер покажет вам следующую строку:
— r-r--- 1 ppt group 300 Apr 11 11:11 video.txt
В этой записи последовательность символов — r-r---обозначает права доступа. Первый дефис означает, что перед нами обычный файл. В случае каталога на его месте стояла бы буква d. Следующие три символа (r-) определяют права доступа владельца. Первый символ — это чтение, второй — запись, третий — выполнение. Как видно, владельцу разрешено только чтение этого файла, запись и выполнение запрещены, поскольку в правах доступа режимы w и x не определены.
Следующие три символа (r-) задают права доступа для членов группы владельца. Права такие же, как и у владельца — можно читать файл, но его нельзя изменять или запускать.
Последние три символа (--) задают права доступа для прочих пользователей. Прочие пользователи не имеют права ни читать, ни изменять, ни выполнять файл. При попытке получить доступ к файлу, они увидят сообщение Access denied.
Права доступа задаются командой chmod. Существуют два способа указания прав доступа: символьный (когда указываются символы, задающие права доступа — r, w, x) и абсолютный.
Так уже заведено, что в мире UNIX чаще пользуются абсолютным методом. Разберемся, в чем он заключается. Рассмотрим следующий набор прав доступа:
rw-r---
Он предоставляет владельцу право чтения и модификации файла (rw-), запускать файл владелец не может. Члены группы владельца могут только просматривать файл (r-), а все остальные пользователи не имеют вообще никакого доступа к файлу.
Возьмем отдельный набор прав, например, для владельца:
rw-
Чтение разрешено, значит, мысленно записываем 1, запись разрешена, значит, запоминаем еще 1, а вот выполнение запрещено, поэтому запоминаем 0. Получается число 110. Если из двоичной системы число 110 перевести в восьмеричную, получится число 6. Для перевода можно воспользоваться табл. 5.3.
Аналогично произведем разбор прав для членов группы владельца. Получится 100, т. е. 4 в восьмеричной системе. С третьим набором (--) все вообще просто — это 000, т. е. 0.
Записываем полученные числа в восьмеричной системе в порядке владелец — группа — остальные. Получится число 640, — это и есть права доступа. Для того чтобы установить эти права, выполните команду:
chmod 640 <имя_файла>
Наиболее популярные права доступа:
□ 644 — владельцу можно читать и изменять файл, остальным пользователям — только читать;
□ 666 — читать и изменять файл можно всем пользователям;
□ 777 — всем можно читать, изменять и выполнять файл. Напомню, что для каталога право выполнения — это право просмотра его оглавления.
Иногда символьный метод проще. Например, у нас есть файл script, который нужно сделать исполнимым, для этого имеется команда:
chmod +x script
Для того чтобы снять право выполнения, указывается параметр — x:
chmod — x script
Подробнее о символьном методе вы сможете прочитать в руководстве по команде chmod (выполнив команду man chmod).
5.8.2. Смена владельца файла
Если вы хотите «подарить» кому-то файл, т. е. сделать какого-то пользователя владельцем файла, то вам нужно использовать команду chown:
chown <пользователь><файл>
Возможно, что после изменения владельца файла вы сами не сможете получить к нему доступ, ведь владельцем будете уже не вы.
5.9. Файловая система ext4
Файловая система ext4 заслуживает отдельного разговора. Все, что было сказано ранее, справедливо и для ext4, но у новой файловой системы есть ряд особенностей, о которых мы сейчас и поговорим.
Поддержка ext4 как стабильной файловой системы появилась в ядре Linux версии 2.6.28. Если сравнивать эту файловую систему с ext3, то производительность и надежность новой файловой системы существенно увеличена, а максимальный размер раздела теперь равен 1024 петабайт (1 эксби-байт). Максимальный размер файла — более 2 Тбайт. Ресурс Phoronix (www.phoronix.com) произвел тестирование новой файловой системы на SSD-накопителе (такие накопители устанавливаются на современные нетбуки). Результат, как говорится, налицо — ext4 почти в два раза превзошла файловые системы ext3, XFS, JFS и ReiserFS.
Впрочем, когда я установил Ubuntu@ext4 на рабочую станцию, прироста производительности при работе с файлами мне почувствовать не удалось. Однако производительность — это не основной конек ext4. Но обо всем по порядку.
5.9.1. Сравнение ext3 и ext4
Преимущества файловой системы ext4 и ее новые особенности приведены в табл. 5.4.
5.9.2. Совместимость с ext3
Файловая система ext4 является прямо и обратно совместимой с ext3, однако все же имеются и некоторые ограничения. Предположим, что у нас на диске есть файловая система ext4. Ее можно смонтировать и как ext3, и как ext4 (это и есть прямая совместимость) — тут ограничений никаких нет. А вот с обратной совместимостью сложнее — если файловую систему ext4 смонтировать как ext3, то она будет работать без экстентов, что снизит ее производительность.
5.9.3. Переход на ext4
Если вы при установке системы выбрали файловую систему ext3, то перейти на ext4 можно без потери данных и в любой удобный для вас момент. Откройте терминал и введите команду:
sudo tune2fs — O extents,uninit_bg,dir_index /dev/имя устройства
На момент ввода этой команды устройство должно быть размонтировано.
Если в ext4 вы собираетесь преобразовать корневую файловую систему, то данную команду нужно вводить с LiveCD (а LiveCD этот должен поддерживать ext4).
Теперь проверим файловую систему:
sudo fsck — pf / dev/:имя устройства
Затем смонтируем файловую систему так:
mount — t ext4 /dev/:имя устройства /точка_монтирования
mount — t ext4 /dev/disk/by-uuid/UUID-устройства /точка_монтирования
Если раздел автоматически монтируется через /etc/fstab, не забудьте исправить файловую систему на ext4:
Если вы изменили тип файловой системы корневого раздела, то необходимо отредактировать файл /boot/grub/menu.lst и добавить опцию rootfstype=ext4 в список параметров ядра, например:
title Linux
root (hd0,1)
kernel /boot/vmlinuz-2.6.30.1 root=UUID=879f797c-944d-4c28-a720-249730705714 ro quiet splash rootfstype=ext4
initrd /boot/initrd.img-2.6.30.1
quiet
Интересующимся рекомендую прочитать статью Тима Джонса «Анатомия ext4»: http://www.ibm.com/developerworks/ru/library/l-anatomy-ext4/index.html.
5.10. Использование графического файлового менеджера
Использовать файловый менеджер очень просто — если вы умеете работать с проводником Windows, тогда и с обозревателем файлов Linux тоже справитесь. Все операции с файлами и каталогами в обозревателе файлов (рис. 5.4), так же как и в проводнике Windows, производятся по принципу «выделил, скопировал (вырезал), вставил». Обратите внимание — в списке команд есть команды для создания архива и для шифрования файла. В Windows для этого нужно было устанавливать дополнительные программы, а в Linux такие команды есть, как говорится, «из коробки».
Если щелкнуть на файле или каталоге правой кнопкой мыши, а потом выбрать команду Свойства и перейти на вкладку Права, то вы сможете легко устанавливать права доступа к файлу или каталогу, не прибегая к использованию команды chmod (рис. 5.5).
5.11. Монтирование файловых систем
5.11.1. Команда mount
Чтобы работать с какой-либо файловой системой, необходимо примонтировать ее к корневой файловой системе. Например, подключив флешку, нужно подмонтировать файловую систему флешки к корневой файловой системе — только так мы сможем получить доступ к файлам и каталогам, которые записаны на этой флешке. Аналогичная ситуация с жесткими, оптическими дисками и другими носителями данных.
Если вы хотите заменить сменный носитель данных (флешку, дискету, компакт-диск), вам нужно сначала размонтировать файловую систему, затем извлечь носитель данных, установить новый и заново смонтировать файловую систему. В случае с флешкой о размонтировании должны помнить вы сами, поскольку при этом выполняется синхронизация буферов ввода/вывода и файловой системы, т. е. данные физически записываются на носитель, если это еще не было сделано. А компакт-диск система не разрешит вам извлечь, если он не размонтирован. В свою очередь, размонтировать файловую систему можно только, когда ни один процесс ее не использует.
При завершении работы системы (перезагрузке, выключении компьютера) размонтирование всех файловых систем выполняется автоматически.
Команда монтирования выглядит так:
# mount [опции] <устройство><точка монтирования>
Точка монтирования — это каталог, через который будет осуществляться доступ к монтируемой файловой системе. Например, если вы подмонтирова-ли компакт-диск к каталогу /mnt/cdrom, то получить доступ к файлам и каталогам, записанным на компакт-диске, можно будет через точку монтирования (каталог /mnt/cdrom). Точкой монтирования может быть любой каталог корневой файловой системы, хоть /aaa-111. Главное, чтобы этот каталог существовал на момент монтирования файловой системы.
Учитывая, что система монтирует сменные носители автоматически, вам не придется заниматься монтированием вручную, так что весь приведенный здесь материал, посвященный команде mount, нужен вам только для общего развития. Можно было бы даже даже не включать его в книгу, но кому была бы нужна тогда такая поверхностная книга по Linux? Ведь использовать графический файловый менеджер Nautilus может даже ребенок, а вы тем более разберетесь с ним без всяких осложнений. Зато теперь вы узнаете, как осуществляется монтирование носителей в Linux. А эти знания пригодятся вам при работе с любым дистрибутивом Linux, а не только с Ubuntu.
5.11.2. Файлы устройств
Отдельного разговора заслуживают файлы устройств. Для Linux нет разницы между устройством и файлом. Все устройства системы представлены в корневой файловой системе в виде обычных файлов. Как уже упоминалось, файлы устройств хранятся в каталоге /dev. Например, /dev/fd0 — это ваш дисковод для гибких дисков, /dev/sr0 — привод CD/DVD, /dev/sda — жесткий диск, /dev/sdb — второй жесткий диск или флешка.
Сначала разберемся с жесткими дисками. Как уже было отмечено, в современных версиях дистрибутивов все жесткие диски (ATA/SATA/SCSI) называются /dev/sdx, где x — буква, определяющая порядок подключения диска к контроллеру.
Жесткий диск часто разбивают на несколько логических дисков, или разделов. Каждый раздел — это отдельная файловая система. И каждый из разделов может быть отформатирован под свою собственную файловую систему (FAT, NTFS, ext4 и др.). Разделы именуются так: сначала идет название диска (например, /dev/sda), а затем следует номер раздела, например, /dev/sda1.
Узнать номер раздела очень просто — достаточно запустить терминал и ввести команду sudo fdisk -1. Просмотреть список смонтированных файловых систем можно на вкладке Файловые системы приложения Системный монитор (Система | Администрирование | Системный монитор). На рис. 5.6 изображены вкладка Файловые системы и вывод команды sudo fdisk -1.
Более подробную информацию о смонтированных файловых системах можно получить, просмотрев файл /etc/mtab, куда эти сведения и заносятся. Разница огромна, ведь в mtab содержатся сведения также и о виртуальных псевдофайловых системах (например, о /proc и /sys).
Обычному пользователю файловые системы proc и /sys нужны редко, поэтому они и не отображаются на вкладке Файловые системы. В данной книге файловая система /proc рассматриваться не будет.
Если вы хотите больше узнать о файловой системе Linux, настоятельно рекомендую прочитать мою книгу «Linux. От новичка к профессионалу» (http://bhv.ru/books/book.php?id=186944).
Файл устройства для чтения CD- или DVD-дисков называется /dev/srN (или /dev/scdN), где N — номер устройства. Если компьютер оборудован всего одним оптическим устройством, то оно будет называться /dev/sr0 (или /dev/scd0). Когда система видит, что устройство является приводом CD-ROM, то автоматически создается ссылка /dev/cdrom. А если ваш привод умеет читать и DVD-диски, то появится еще одна ссылка — /dev/dvd. Монтирование привода для чтения оптических дисков осуществляется вводом одной из трех команд:
sudo mount /dev/sr0 /mnt/cdrom
sudo mount /dev/cdrom /mnt/cdrom
sudo mount /dev/dvd /mnt/cdrom
После этого обратиться к файлам, записанным на диске, можно будет через каталог /mnt/cdrom. Напомню, что этот каталог должен существовать.
Приведенные здесь команды монтирования оптических приводов — более теория, нежели практика, поскольку сменные носители (CD/DVD- и USB-диски) в Ubuntu монтируются автоматически.
Обратите внимание — чуть ранее (см. разд. 5.4) было сказано, что есть некий каталог /cdrom, который не используется, а оптические диски монтируются к каталогу /media/
Здесь же я показываю монтирование дисков к каталогу /mnt/cdrom. Достаточно, чтобы окончательно запутаться, не правда ли? Но все это я сделал намеренно. Linux — система многогранная, и полиморфизм (решение одной и той же задачи различными способами) для нее норма. Проще, конечно, было бы вовсе не упоминать про каталог /cdrom, а работать только с каталогом /media, однако это вызвало бы еще большую путаницу. Теперь пришло время разложить все по полочкам:
□ каталог /cdrom и вправду не используется, зачем он создан, я не знаю, может, перекочевал из Debian, где он в свое время использовался, может, остался по соображениям безопасности;
□ когда система автоматически монтирует диск, то он, действительно, монтируется к каталогу /media/
□ а вот когда вы монтируете диск вручную, то можете подмонтировать его к любому каталогу: хоть к /mnt/cdrom, хоть к /cdrom, хоть к /abcd — лишь бы этот каталог существовал.
Аналогичная ситуация и с дискетами. В системе может быть установлено два дисковода для дискет: первый (/dev/fd0) и второй (/dev/fd1). Для их монтирования можно задать команды:
sudo mount /dev/fd0 /mnt/floppy
sudo mount /dev/fd1 /mnt/floppy
Напомню, что в Windows-терминологии устройство /dev/fd0 — это диск A:, а устройство /dev/fd1 — диск B:.
Флешки и USB-диски в системе отображаются как обычные жесткие диски, имена у них такие же (/dev/sdx). Например, если у вас всего один жесткий диск (его имя /dev/sda) и вы подключили к компьютеру флешку, то ее имя будет /dev/sdb. Подмонтировать флешку (вот только зачем? — не забываем об автоматическом монтировании) можно так:
sudo mount /dev/sdb /mnt/usb
Перед физическим извлечением флешки и USB-винчестера (особенно винчестера, учитывая его физическое устройство) необходимо щелкнуть на значке флешки на рабочем столе и выбрать команду Безопасно отключить носитель (рис. 5.7).
5.11.3. Примеры использования команды mount
Теперь, когда мы знаем номер раздела, можно его подмонтировать. В общем случае сначала командой mkdir создается точка монтирования (каталог, куда будет монтироваться раздел):
sudo mkdir <точка монтирования>
Затем к этой точке командой mount монтируется раздел:
sudo mount <раздел><точка монтирования>
Например:
sudo mkdir /mnt/win_d
sudo mount /dev/sda5 /mnt/win_d
У команды mount довольно много опций, но на практике наиболее часто применяются только некоторые из них: — t, — r, -w, -a.
□ Опция — t позволяет явно задать тип файловой системы. Обычно программа mount сама определяет файловую систему, но иногда это у нее не получается. Тогда мы должны ей помочь. Формат этой опции следующий:
mount — t <файловая система><устройство><точка монтирования>
Например,
mount — t iso9660 /dev/hdc /mnt/cdrom
Вот наиболее популярные файловые системы:
• ext2, ext3 или ext4 — файловая система Linux;
• iso9660 — указывается при монтировании CD-ROM;
• vfat — FAT, FAT32 (поддерживается Windows 9x, ME, XP);
• ntfs — NT File System (поддерживается Windows NT, XP), используется для монтирования NTFS-разделов в режиме «только чтение»;
• ntfs-3g — будет использован модуль ntfs-3g, входящий в большинство современных дистрибутивов. Данный модуль позволяет производить запись информации на NTFS-разделы;
□ Опция — r монтирует указанную файловую систему в режиме «только чтение»;
□ Опция — w монтирует файловую систему в режиме «чтение/запись». Опция установлена по умолчанию для файловых систем, поддерживающих запись (например, NTFS по умолчанию запись не поддерживает, как и файловые системы CD/DVD);
□ Последняя опция — a служит для монтирования всех файловых систем, указанных в файле /etc/fstab (кроме тех, для которых указано noauto — такие файловые системы нужно монтировать вручную). При загрузке системы вызывается программа mount с опцией — a.
5.11.4. Монтирование файловых систем при загрузке Linux
Если вы не хотите при каждой загрузке вручную монтировать постоянные файловые системы (например, разделы Windows), вам следует прописать их в файле /etc/fstab. Обратите внимание — в этом файле не нужно прописывать файловые системы сменных носителей (дисковода, привода CD/DVD, флеш-диска) — сменные носители монтируются автоматически.
Замечу, что программы установки некоторых дистрибутивов, в том числе Ubuntu, читают таблицу разделов и автоматически заполняют файл /etc/fstab. В результате все разделы Windows становятся доступными сразу после установки системы. Поэтому весь приведенный в этом разделе далее материал нужно воспринимать «для общего развития», и не более. Можно было ограничиться рассмотрением использования графического файлового менеджера, но тогда не вижу смысла в этой книге — должны же вы знать, что происходит в вашей системе!
Формат файла /etc/fstab следующий:
<устройство><точка_монтирования><тип_ФС><опции><флаг_РК><флаг__проверки>
Здесь тип_ФС — это тип файловой системы, а флаг_РК — флаг резервного копирования. Если он установлен (1), то программа dump заархивирует данную файловую систему при создании резервной копии. Если не установлен (0), то резервная копия этой файловой системы создаваться не будет.
Флаг_проверки устанавливает, будет ли данная файловая система проверяться на наличие ошибок программой fsck. Проверка выполняется в двух случаях:
□ если файловая система размонтирована некорректно;
□ если достигнуто максимальное число операций монтирования для этой файловой системы.
Поле опций содержит важные параметры файловой системы, некоторые из них приведены в табл. 5.5.
Рассмотрим небольшой пример:
/dev/sr0 /mnt/cdrom auto umask=0,user,utf8,noauto,ro,exec 0 0
/dev/sda1 /mnt/c vfat umask=0,utf8 0 0
Первая строка — это строка монтирования файловой системы компакт-диска, а вторая — строка монтирования диска C:.
□ Начнем с первой строки. /dev/sr0 — это имя устройства CD-ROM. Точка монтирования — /mnt/cdrom. Понятно, что этот каталог должен существовать. Обратите внимание — в качестве файловой системы не указывается жестко iso9660, поскольку компакт-диск может быть записан в другой файловой системе, поэтому в качестве типа файловой системы задано auto, т. е. автоматическое определение. Теперь идет довольно длинный набор опций. Ясно, что umask установлен в ноль, поскольку файловая система компакт-диска не поддерживает права доступа Linux. Параметр user говорит о том, что данную файловую систему можно монтировать обычному пользователю. Параметр utf8 мы рассмотрим чуть далее. Параметр noauto запрещает автоматическое монтирование этой файловой системы, и это правильно, ведь на момент монтирования в приводе может и не быть компакт-диска. Опция ro разрешает монтирование в режиме «только чтение», а exec разрешает запускать исполнимые файлы. Понятно, что компакт-диск не нуждается ни в проверке, ни в создании резервной копии, поэтому два последних флага равны нулю.
□ Вторая строка проще. Первые два поля — это устройство и точка монтирования. Третье — тип файловой системы. Файловая система постоянна, поэтому можно явно указать тип файловой системы (vfat), а не auto. Опция umask, как и в предыдущем случае, равна нулю.
Вернемся к параметру utf8. Если подмонтировать Windows-раздел без этой опции, то вместо русских букв в названиях файлов и каталогов мы увидим вопросительные знаки. Указание опции utf8 позволяет корректно отображать русскоязычные имена файлов и каталогов. Эти опции мы также указываем и для CD-ROM, подразумевая, что он был записан в Windows.
5.11.5. Монтирование NTFS-разделов в режиме записи
Как уже было отмечено ранее, Linux умеет только читать информацию с NTFS-разделов, но не умеет записывать информацию на такие разделы. Если при перекомпиляции ядра включить опцию записи информации на NTFS-разделы, то поддержка записи обеспечится, но очень ограниченная.
Существуют средства, позволяющие добавить поддержку записи NTFS-разделов. Самым оптимальным подобным средством является модуль ntfs-3g. Модуль входит в состав Ubuntu.
Смонтировать NTFS-раздел с использованием ntfs-3g нужно так:
# mount — t ntfs-3g <раздел><точка_монтирования>
Понятно, что вам придется указать ваш раздел и вашу точку монтирования. Если требуется обеспечить автоматическое монтирование NTFS-раздела, то в /etc/fstab следует добавить запись, подобную этой:
<раздел><точка_монтирования> ntfs-3g defaults,nls=utf8,umask=007,gid=46
У модуля ntfs-3g все равно есть ограничения — например, вы не можете изменять сжатые файлы (хотя можете их читать), а также читать зашифрованные файлы.
Если вам не удается смонтировать NTFS-раздел с помощью модуля ntfs-3g, то, вероятнее всего, этот раздел был неправильно размонтирован (например, работа Windows не была завершена корректно). Тогда для монтирования раздела нужно использовать опцию — o force, например:
sudo mount — t ntfs-3g /dev/sdb1 /media/usb — o force
5.12. Обмен файлами с мобильным телефоном по Bluetooth
Для полноценной работы с Bluetooth-устройствами в Ubuntu настоятельно рекомендую установить пакет blueman — это графический менеджер Bluetooth-устройств. Установите соединение с Интернетом и введите команду:
sudo apt-get install blueman
Активируйте Bluetooth-адаптер (обычно на корпусе ноутбука имеется кнопка включения Bluetooth) и запустите программу командой Система | Параметры | Менеджер устройств Bluetooth. Откроется окно Устройства Bluetooth (рис. 5.8). Активируйте Bluetooth на вашем телефоне и нажмите кнопку Найти.
Программа обнаружит ваш телефон (рис. 5.9).
Сейчас попробуем самое простое — передать файл на телефон. Нажмите кнопку Отпр. файл и выберите файл (рис. 5.10).
Начнется отправка файла (рис. 5.11). На телефоне появится запрос на прием файла, подтвердите его. Как видите, отправить файл очень просто.
Теперь попробуем создать сопряжение с мобильным телефоном. После сопряжения вы сможете легко просмотреть карту памяти телефона. Нажмите кнопку Создать сопряжение с устройством (см. на рис. 5.9 — кнопка с изображением ключей). В открывшемся окне (рис. 5.12) введите придуманный вами PIN-код.
Такой же PIN-код нужно будет ввести в телефоне, когда он выведет запрос на соединение. Когда сопряжение будет завершено, кнопка с изображением папки возле кнопки Отпр. файл станет активной (рис. 5.13).
Нажмите кнопку с изображением папки, откроется окно с файловой системой телефона. Для отключения телефона (когда вы скопируете с телефона все необходимые файлы) щелкните правой кнопкой мыши на значке телефона на рабочем столе и выберите команду Отключить (рис. 5.14).