Сколько корневых папок в linux. Управление файлами и директориями. Монтирование и демонтирование файловой системы

Сколько корневых папок в linux. Управление файлами и директориями. Монтирование и демонтирование файловой системы

26.03.2019

4.3. Назначение основных системных каталогов

Если вы работали, например, с Windows 95, то вы знаете, что, хотя пользователь имеет полную свободу в организации структуры каталогов, некоторые "обычаи" все же сохраняются. Так системные файлы располагаются обычно в подкаталоге C:\Windows, вновь устанавливаемые программы по умолчанию размещаются в каталоге C:\Program Files и т. д.. В Linux типовая структура каталогов выдерживается, пожалуй, даже более строго. Более того, существует даже стандарт на структуру каталогов для UNIX-подобных ОС, так называемый Filesystem Hierarchy Standart (FHS), полный текст которого можно найти по адресу http://www.pathname.com/fhs/ (Примеч.10). Дистрибутив Red Hat в основном придерживается стандарта FHS.

В табл. 4.1 дан краткий перечень основных стандартно создаваемых каталогов той файловой структуры, которая создается при установке дистрибутива Red Hat (и его последователей).

В левом столбце перечислены подкаталоги корневого каталога, во втором столбце — некоторые основные (далеко не все!) подкаталоги второго уровня, а в третьем столбце даны краткие пояснения о назначении всех этих каталогов. Пояснения по необходимости очень краткие, более подробно с основными каталогами вы можете познакомиться по тексту стандарта FHS (http://www.pathname.com/fhs/ ).

Таблица 4.1. Структура каталогов Red Hat Linux

Каталог

Подкаталоги

Назначение

/bin

Этот каталог содержит в основном готовые к исполнению программы, большинство из которых необходимы во время старта системы (или в однопользовательском системном режиме, используемом для отладки). Здесь хранится значительное количество общеупотребительных команд Linux

/boot

Содержит основные постоянные файлы для загрузки системы, в частности загружаемое ядро. Файлы из этого каталога нужны только во время загрузки системы

/dev

Каталог специальных файлов или файлов устройств. О них мы поговорим чуть подробнее в одном из следующих подразделов. Можете также заглянуть в man mknod(1)

/etc

Этот каталог и его подкаталоги содержат большинство данных, необходимых для начальной загрузки системы и основные конфигурационные файлы. В /etc находятся, например, файл inittab, определяющий загружаемую конфигурацию, и файл паролей пользователей passwd. Часть конфигурационных файлов может находится и в /usr/etc . Каталог /etc не должен содержать двоичных файлов (их следует перенести в /bin или /sbin). Ниже приводится назначение основных (но далеко не всех!) подкаталогов каталога /etc

/etc/rc.d

Этот подкаталог содержит файлы, которые используются в процессе начальной загрузки системы. Подробнее о них и вообще о процессе загрузки будет рассказано в разд. 8.2

/etc/skel

Когда создается новый пользователь и account для него, то файлы из этого каталога копируются во вновь созданный домашний каталог пользователя

/etc/sysconfig

Каталог, содержащий некоторые (но не все) конфигурационные файлы системы

/etc/X11

/home

Обычно в этом каталоге находятся домашние каталоги пользователей

/lib

Этот каталог содержит разделяемые библиотеки функций, необходимых компилятору языка C и модули (драйверы устройств). Даже если в системе не установлен компилятор языка C, разделяемые библиотеки необходимы, поскольку они используются многими прикладными программами. Они загружаются в память по мере необходимости выполнения каких-то функций, что позволяет уменьшить объем кода программ — в противном случае один и тот же код многократно повторялся бы в различных программах

/lost+found

Этот каталог используется при восстановлении файловой системы командой fsck . Если fsck обнаруживает файл, родительский каталог которого определить невозможно, она помещает такой файл в каталог /lost+found. Поскольку родительский каталог потерян, то таким файлам присваиваются имена, совпадающие с номерами их индексных дескрипторов

/mnt

Это точка монтирования для временно монтируемых файловых систем. Если на компьютере запускается поочередно Linux и MS DOS, то этот каталог обычно используется, чтобы монтировать файловую систему MS DOS. Если вы имеете привычку монтировать несколько дополнительных носителей, например, дискеты, CD-ROM, дополнительный жесткий диск и т. д., то можно создать в нем соответственно дополнительные подкаталоги для каждого носителя

/proc

Это точка монтирования для файловой системы proc, которая обеспечивает информацию о выполняющихся процессах, ядре, оборудовании вычислительной установки и т. д. Это псевдо-файловая система, подробности о которой можно узнать по команде man 5 proc . Специальные файлы из этого каталога используются для получения и передачи данных ядру

/root

Это домашний каталог суперпользователя. Обратите внимание на то, что он расположен не там, где располагаются личные каталоги остальных пользователей (в /home)

/sbin

Подобно каталогу /bin содержит в основном исполняемые файлы — программы и утилиты ОС, используемые в процессе загрузки и запускаемые системным администратором. В стандарте FHS говорится, что в этот каталог надо помещать те исполняемые файлы, которые используются после успешного подключения файловой системы /usr. Минимальное содержимое этого каталога включает программы clock, getty, init, update, mkswap, swapon, swapoff, halt, reboot, shutdown, fdisk, fsck.*, mkfs.*, lilo, arp, ifconfig, route

/tmp

Каталог для временных файлов. В любой момент суперпользователь может удалить файлы из этого каталога без большого ущерба для остальных пользователей. Однако, не стоит удалять файлы из этого каталога, если вам не стало ясно, что конкретный файл или группа файлов мешают продолжению продуктивной работе на машине. Система сама периодически очищает этот каталог, поэтому не следует хранить тут файлы, которые вам могут понадобиться в дальнейшем

/usr

Этот каталог огромен и его структура в основном повторяет структуру корневого каталога. В его подкаталогах находятся все основные приложения. В соответствии со стандартом FHS рекомендуется выделять для этого каталога отдельный раздел диска или вообще располагать его на сетевом диске, общем для всех компьютеров в сети. Такой раздел или диск монтируют только для чтения и располагают в нем общие конфигурационные и исполняемые файлы, документацию, системные утилиты и библиотеки, а также включаемые файлы (файлы типа include)

/usr/bin

Готовые к исполнению программы — утилиты и приложения, которые часто вызывают обычные пользователи.

/usr/bin/X11 — Обычное место для расположения готовых к исполнению программ из X-Window в Linux. Часто это символическая ссылка на /usr/X11R6/bin

/usr/dict

Этот каталог содержит файлы со словарным запасом для программ проверки корректности написания слов.

/usr/etc

Здесь содержатся конфигурационные файлы для группы машин. Однако, команды и программы должны смотреть в каталог /etc , в котором должны быть линки к файлам в каталоге /usr/etc

/usr/include

Этот каталог содержит исходный код стандартных библиотек языка C, подставляемый в программы директивой препроцессора include. Поэтому пользователю надо иметь, по крайней мере, право на чтение из этого каталога. Ни в коем случае не следует модифицировать файлы в этом каталоге, потому что они тщательно отлажены разработчиком системы (разве что вы знаете систему лучше разработчика)

/usr/lib

В данном каталоге содержится объектные библиотеки подпрограмм, динамические библиотеки, некоторые готовые к исполнению программы, которые не вызываются непосредственно. Сложные программные системы могут иметь свои подкаталоги в этом каталоге.

    /usr/lib/X11 — Обычное место для помещения файлов связанных с X-Window, а также конфигурационных файлов самой системы X-Window. В Linux это обычно символическая ссылка на каталог /usr/X11R6/lib/X11 .

    /usr/lib/gcc-lib — Содержит готовые к исполнению программы и файлы типа include для компилятора GNU C (gcc).

    /usr/lib/groff — Файлы для системы форматирования текстов groff.

    /usr/lib/uucp — Файлы для UUCP.

    usr/lib/zoneinfo — Файлы для определения временной зоны. Смотрите также страницы руководств named-xfer (8) , tzfile (5) , tzselect (8) , zdump (8) , zic (8)

/usr/local

Обычно здесь помещают программы и подкаталоги, которые являются локальными (уникальными) для данной машины.

    /usr/local/bin — Обычно здесь помещают готовые к исполнению программы, которые являются локальными (уникальными) для данной машины.

    /usr/local/doc — Здесь располагается документация ко всем установленным на Вашем компьютере пакетам прикладного ПО.

    /usr/local/etc — Конфигурационные файлы для локально установленных программ.

    /usr/local/lib — Библиотеки и файлы для локально установленных программ и систем.

    /usr/local/info — Страницы описаний, которые просматриваются посредством программы info, для локально установленных программ.

    /usr/local/man — Страницы описаний, которые просматриваются посредством программы man, для локально установленных программ.

    /usr/local/sbin — Локальные программы системного администратора.

    /usr/local/src — Исходные тексты программ, установленных на данной машине

/usr/man

Страницы интерактивного руководства man в исходном формате (не подготовленные для просмотра).

/usr/man//man — Эти каталоги содержат страницы руководств на различных языках (в зависимости от значения locale). Системы, которые используют один язык и один кодовый набор, могут не использовать подстроку

/usr/sbin

Этот каталог содержит готовые к исполнению программы для системного администрирования, которые не используются во время загрузки

/usr/src

Исходные тексты для различных частей Linux.
/usr/src/linux — исходные тексты для ядра Linux

/usr/tmp

Еще одно место для хранения временных файлов. Обычно это символическая ссылка на каталог /var/tmp

/usr/X11R6

Файлы относящиеся к системе X-Window (версии 11, релиз6).

    /usr/X11R6/bin — Готовые к исполнению программы системы X-Window.

    /usr/X11R6/lib — Файлы и библиотеки, связанные с системой X-Window

/var

Этот каталог содержит файлы, в которых сохраняются различные переменные данные, определяющие конфигурацию некоторых программ при следующем запуске или временно сохраняемую информацию, которая будет использоваться позже в ходе текущего сеанса. Объем данных в этом каталоге может сильно изменяться, поскольку он содержит, например, файлы протоколов (логи), файлы спулинга и блокировки (locking), временные файлы и т. д.

/var/adm

Содержит учетную и диагностическую информацию, необходимую системному администратору

/var/backups

/var/catman/cat

Этот каталог используется, чтобы хранить уже сформированные страницы руководств в соответствии с номером главы

/var/lock

Здесь содержатся управляющие файлы системы, которые используются для резервирования использования тех или иных ресурсов системы

/var/log

Различные файлы протоколов (логи)

/var/run

Переменные файлы времени выполнения различных программ. Они содержат идентификаторы процессов (PIDs) и записывают текущую информацию (utmp). Файлы в этом каталоге обычно очищаются во время загрузки системы

/var/spool

Файлы различных программ, поставленные в очередь на обслуживание.

    /var/spool/at — Файлы заданий, запущенных посредством команды at .

    /var/spool/cron — Файлы системы cron.

    /var/spool/lpd — Файлы, ожидающие вывода на печать.

    /var/spool/mail — Пользовательские почтовые ящики.

    /var/spool/news — Файлы системы news.

    /var/spool/uucp — Файлы системы uucp

/var/tmp

Временные файлы

В. Костромин (kos at rus-linux dot net) - 4.3. Назначение основных системных каталогов

Изучаем Linux, 101

Управление файлами и директориями

Изучение основ работы с файлами и директориями Linux

Серия контента:

Краткий обзор

Из этой статьи вы узнаете об основных командах Linux для управления файлами и директориями. Вы научитесь:

  • Просматривать содержимое директорий.
  • Копировать, перемещать и удалять файлы и директории.
  • Рекурсивно управлять несколькими файлами и директориями.
  • Использовать метасимволы для управления файлами.
  • Использовать команду find для поиска и выполнения действий с файлами на основе их типа, размера или метки времени.
  • Сжимать и распаковывать файлы при помощи команд gzip и bzip2 .
  • Архивировать файлы при помощи команд tar , cpio и dd .
Об этой серии

Эта серия статей поможет вам освоить задачи администрирования операционной системы Linux. Вы также можете использовать материал этих статей для подготовки к .

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему . Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит самые последние (по состоянию на апрель 2009 года) цели экзаменов сертификации LPIC-1. Если какая-либо статья отсутствует в перечне, можно найти ее более раннюю версию, соответствующую предыдущим целям LPIC-1 (до апреля 2009 года), обратившись к нашим .

Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 103.3 темы 103. Цель имеет вес 4.

Необходимые условия

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать базовыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Иногда различные версии программ выводят результаты по-разному, поэтому содержимое листингов и рисунков может отличаться от того, что вы увидите на вашем компьютере.

Просмотр директорий

Как связаться с Яном

Ян – один из наших наиболее популярных и плодовитых авторов. Ознакомьтесь со (EN), опубликованными на сайте developerWorks. Вы можете найти контактные данные в и связаться с ним, а также с другими авторами и участниками ресурса My developerWorks.

В Linux и UNIX® все файлы хранятся в виде дерева файловой системы с корневой директорией /. К этому дереву можно добавлять или удалять дополнительные ветви, монтируя или демонтируя их соответственно. Эти операции рассматривается в другой статье этой серии – "Монтирование и демонтаж файловых систем " (см. ).

Просмотр содержимого директории

При изучении команд в этой статье мы будем использовать файлы, которые были созданы в предыдущей статье этой серии " ". Если вы выполняли все упражнения данной статьи, то в вашей домашней директории должна присутствовать директория lpi103-2. Если такой директории у вас нет, то можете использовать любую другую директорию.

Имена файлов и директорий могут быть либо абсолютными (это означает, что они начинаются с /), либо относительными (не начинаются с /) по отношению к текущей рабочей директории . Абсолютный путь к файлу или директории состоит из символа /, за которым (необязательно) следуют одно или несколько имен директорий, разделенных дополнительными символами /, и, наконец, имя конечной директории.

Если вы знаете имя файла или директории относительно текущей рабочей директории, то вы можете просто объединить абсолютное имя рабочей директории, символ / и относительное имя. Например, директория lpi103-2 из предыдущей статьи была создана в моей домашней директории, /home/ian, поэтому ее полный, или абсолютный путь – это /home/ian/lpi103-2.

Имя текущей рабочей директории можно узнать при помощи команды pwd . Также это имя обычно содержится в переменной окружения PWD. В листинге 1 приведен пример использования команды pwd , а также показаны три различных способа использования команды ls для вывода списка файлов этой директории.

Листинг 1. Просмотр содержимого директории
$ pwd /home/ian/lpi103-2 $ echo "$PWD" /home/ian/lpi103-2 $ ls sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab $ ls "$PWD" sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab $ ls /home/ian/lpi103-2 sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab

Как вы видите, для просмотра содержимого директории команде ls можно передать как ее относительное, так и абсолютное имя.

Вывод детальной информации

Файлы и директории располагаются на устройстве хранения в виде набора блоков . Информация о файле (такая, как владелец файла, время последнего обращения к файлу, размер файла, права на чтение или запись, является ли элемент файлом или директорией) хранится в индексном дескрипторе inode . Номер inode, известный также как порядковый номер файла , является уникальным в пределах отдельной файловой системы. Для вывода некоторых сведений, хранящихся в inode, можно использовать опцию -l (или --format=long).

По умолчанию команда ls не отображает специальные файлы, имена которых начинаются с точки (.). Каждая директория, за исключением корневой, имеет, как минимум, две специальных записи: сама директория (.) и родительская директория (..). Корневая директория не имеет родительской директории.

В листинге 2 приведен пример использования опций -l и -a для подробного вывода содержимого директории (включая элементы. и..).

Листинг 2. Подробный просмотр содержимого директории
$ ls -al total 52 drwxrwxr-x. 2 ian ian 4096 2009-08-11 21:21 . drwx------. 35 ian ian 4096 2009-08-12 10:55 .. -rw-rw-r--. 1 ian ian 8 2009-08-11 21:17 sedtab -rw-rw-r--. 1 ian ian 24 2009-08-11 14:02 text1 -rw-rw-r--. 1 ian ian 25 2009-08-11 14:27 text2 -rw-rw-r--. 1 ian ian 63 2009-08-11 15:41 text3 -rw-rw-r--. 1 ian ian 26 2009-08-11 15:42 text4 -rw-rw-r--. 1 ian ian 24 2009-08-11 18:47 text5 -rw-rw-r--. 1 ian ian 98 2009-08-11 21:21 text6 -rw-rw-r--. 1 ian ian 15 2009-08-11 14:41 xaa -rw-rw-r--. 1 ian ian 9 2009-08-11 14:41 xab -rw-rw-r--. 1 ian ian 17 2009-08-11 14:41 yaa -rw-rw-r--. 1 ian ian 8 2009-08-11 14:41 yab

В первой строке листинга 2 мы видим общее количество дисковых блоков (52), занимаемых выведенными на экран файлами. Остальные строки содержат информацию о содержимом директории.

  • Первое поле (в нашем случае, drwxrwxr-x или -rw-rw-r--) говорит нам о том, является ли запись директорией (d) или обычным файлом (-). Также вы можете встретить символические ссылки (|) или другие обозначения некоторых специальных файлов (например, файлы в файловой системе /dev). Более подробно о символических ссылках рассказывается в другой статье этой серии "" (см. ). После поля с типом следует три набора разрешений (таких как rwx или r--): для владельца файла, для членов группы владельца и для всех остальных пользователей. Три значения определяют, имеет ли владелец, группа или все пользователи, соответственно, разрешения на чтение (r), запись (w) или выполнение (x). Другие атрибуты, такие как setuid, будут рассмотрены в другой статье этой серии "Управление разрешениями и правами владения файлов " (см. ).
  • Следующее поле содержит номер, который говорит нам о количестве жестких ссылок на файл. Как уже говорилось, индексный дескриптор inode содержит информацию о файле. Запись о хранящемся в директории файле содержит жесткую ссылку (или указатель) на inode этого файла, следовательно, каждая запись должна иметь, по крайней мере, одну жесткую ссылку. Записи директорий имеют одну дополнительную ссылку для записи., и по одной ссылке для каждой поддиректории. Таким образом, из листинга 2 видно, что моя домашняя директория, обозначенная как.., имеет несколько поддиректорий, поскольку содержит 35 жестких ссылок.
  • Следующие два поля содержат имя владельца файла и имя основной группы, в которую он входит. В некоторых дистрибутивах Linux (например, Red Hat или Fedora) по умолчанию для каждого пользователя создается отдельная группа. В других системах все пользователи могут входить в одну или несколько групп.
  • Следующее поле содержит размер файла в байтах.
  • Предпоследнее поле содержит время модификации файла.
  • И, наконец, последнее поле содержит имя файла или директории.

Опция -i команды ls отобразит номера индексных дескрипторов inode. Мы вернемся к рассмотрению индексных дескрипторов далее в этой статье, а также в статье "Работа с жесткими и символическими ссылками " (см. ).

Информация о нескольких файлах

Вы можете передать команде ls несколько параметров, каждый из которых будет являться либо именем файла, либо именем директории. Если параметр является именем директории, то вместо информации об этой директории команда ls покажет ее содержимое. В нашем случае предположим, что мы хотим получить информацию о самой директории lpi103-2. Команда ls -l ../lpi103-2 выдаст нам ту же информацию, что и в предыдущем примере. В листинге 3 показано, как использовать опцию -d для вывода информации о записи директории, а не ее содержимого; также показано, как вывести записи для нескольких файлов или директорий.

Листинг 3. Использование ls –d
$ ls -ld ../lpi103-2 sedtab xaa drwxrwxr-x. 2 ian ian 4096 2009-08-12 15:31 ../lpi103-2 -rw-rw-r--. 1 ian ian 8 2009-08-11 21:17 sedtab -rw-rw-r--. 1 ian ian 15 2009-08-11 14:41 xaa

Заметьте, что время модификации директории lpi103-2 отличается от времени, которое мы видим в предыдущем листинге. Кроме того, так же, как и в предыдущем листинге, это время отличается от времени модификации любого файла в этой директории. Дело в том, что во время работы над этой статьей я создал несколько дополнительных примеров, после чего удалил их; именно об этом и говорят временные метки директории. Подробнее о временных метках файлов мы поговорим чуть позже в разделе .

Сортировка вывода

По умолчанию команда ls выводит имена файлов в алфавитном порядке. Для сортировки вывода существует ряд опций. Например, команда ls -t отсортирует файлы по времени их модификации (от самых новых до самых старых), а команда ls -lS сформирует подробный список файлов, отсортированных по размеру (от самых больших до самых маленьких). Если добавить опцию -r , то сортировка будет выполнена в обратном порядке. Например, используйте команду ls -lrt для вывода подробного списка файлов, отсортированных по дате модификации в обратном порядке. Об остальных возможностях сортировки файлов и директорий вы можете узнать из man-страницы.

Копирование, перемещение и удаление файлов

Итак, мы уже знаем, как создавать файлы, но что делать, если мы хотим скопировать или переименовать их, переместить их в другое место файловой системы или даже удалить. Для этого предназначены три короткие команды:

cp используется для копирования одного или нескольких файлов или директорий. Вы должны указать одно или несколько имен источников и одно конечное имя. Имя источника или конечное имя может включать в себя путь. Если конечным именем является имя существующей директории, то все источники будут скопированы в нее. Если директория с конечным именем не существует, то (единственный) источник должен также являться директорией; источник и его содержимое будет скопировано во вновь созданную директорию с указанным именем. Если конечным именем является имя файла, то (единственный) источник должен также являться файлом; копия источника будет создана в виде файла с указанным конечным именем, и если файл с таким именем уже существует в системе, то он будет замещен новым файлом. Обратите внимание на то, что, в отличие от операционных систем DOS и Windows, в Linux текущая директория не является по умолчанию конечной директорией. mv используется для перемещения или переименования одного или нескольких файлов или директорий. В общем случае правила использования имен совпадают с правилами для команды cp ; вы можете переименовать отдельный файл или переместить несколько файлов в новую директорию. Поскольку имена – это всего лишь записи в директориях, указывающие на дескриптор inode, то вас не должен удивлять тот факт, что номер inode не меняется до тех пор , пока файл не перемещается в другую файловую систему (в этом случае операция перемещения больше похожа на операцию копирования с последующим удалением исходного файла). rm используется для удаления одного или нескольких файлов. О том, как удалять директории, я расскажу чуть позже.
Куда подевалась команда?

Если вы работали в операционной системе DOS или Windows®, то вам может показаться странным, что для переименования файла используется команда mv . В Linux есть команда rename , но ее синтаксис отличается от синтаксиса одноименной команды в DOS или Windows. Для получения дополнительной информации об этой команде обратитесь к man-странице.

В листинге 4 приведены примеры использования команд cp и mv для создания нескольких резервных копий наших текстовых файлов. Также мы использовали команду ls -i , чтобы показать номера индексных дескрипторов некоторых файлов.

  1. Сначала мы создали копию нашего файла text1 и назвали ее text1.bkp.
  2. Затем мы решили создать с помощь команды mkdir поддиректорию backup для хранения резервных копий.
  3. Мы создали вторую резервную копию файла text1 (на этот раз в поддиректории backup) и показали, что все три файла имеют различные дескрипторы inode.
  4. Мы переместили наш файл text1.bkp в поддиректорию backup и переименовали его в соответствии с именем второй резервной копии. Хотя это можно было сделать с помощью одной команды, для наглядности мы использовали две.
  5. Мы снова проверяем дескрипторы inode и убеждаемся в том, что файл text1.bkp c inode 934193 больше не находится в нашей директории lpi103-2, а данный номер inode теперь принадлежит файлу text1.bkp.1 в директории backup.
Листинг 4. Копирование и перемещение файлов
$ cp text1 text1.bkp $ mkdir backup $ cp text1 backup/text1.bkp.2 $ ls -i text1 text1.bkp backup 933892 text1 934193 text1.bkp backup: 934195 text1.bkp.2 $ mv text1.bkp backup $ mv backup/text1.bkp backup/text1.bkp.1 $ ls -i text1 text1.bkp backup ls: cannot access text1.bkp: No such file or directory 933892 text1 backup: 934193 text1.bkp.1 934195 text1.bkp.2

Обычно команда cp перезаписывает конечный файл, если он существует и может быть перезаписан. С другой стороны, команда mv не перемещает и не переименовывает файл, если существует другой файл с таким же именем. Имеется несколько полезных опций для управления поведением команд cp и mv .

-f или --force указывает команде cp попытаться удалить существующий файл назначения, даже если он не доступен для перезаписи. -i или --interactive запрашивает подтверждение при попытке заместить существующий файл. -b или --backup создает резервные копии всех замещаемых файлов.

Как обычно, полную информацию об этих и других опциях копирования и перемещения вы можете найти на соответствующих man-страницах.

В листинге 6 приведен пример создания резервных копий с последующим удалением исходных файлов.

Листинг 5. Создание резервных копий и удаление файлов
$ cp text2 backup $ cp --backup=t text2 backup $ ls backup text1.bkp.1 text1.bkp.2 text2 text2.~1~ $ rm backup/text2 backup/text2.~1~ $ ls backup text1.bkp.1 text1.bkp.2

Заметьте, что команда rm позволяет использовать опции -i (interactive – интерактивный) и -f (force – принудительный). Если файл удален с помощью rm , файловая система больше не имеет к нему доступа. В некоторых системах для пользователя root по умолчанию определен псевдоним alias rm="rm -i" , позволяющий предотвратить случайное удаление файлов. Эту возможность могут использовать и обычные пользователи, которые боятся случайно удалить что-нибудь.

Перед тем, как закончить рассмотрение этой темы, следует заметить, что для новых файлов команда cp по умолчанию создает новую метку времени. Владельцем (и группой) нового файла становится пользователь (и его группа), который осуществляет копирование. Для сохранения выбранных атрибутов можно использовать опцию -p . Заметьте, что пользователь root может оказаться единственным пользователем, который может сохранять права владения. Дополнительную информацию вы можете найти на man-странице.

Создание и удаление директорий

Вы уже знаете, как создавать директории с помощью команды mkdir . Теперь пойдем дальше и рассмотрим аналог mkdir для удаления директорий – программу rmdir .

Команда mkdir

Предположим, что мы находимся в нашей директории lpi103-2 и хотим создать поддиректории dir1 и dir2. Так же, как и уже рассмотренные команды, команда mkdir может обрабатывать запросы на создание сразу нескольких директорий, как показано в листинге 6.

Листинг 6. Создание нескольких директорий
$ mkdir dir1 dir2

Обратите внимание на отсутствие какого-либо вывода в случае успешного выполнения команды. Чтобы убедиться в том, что код завершения действительно равен 0, вы можете использовать команду echo $? .

Если вы хотите создать вложенную поддиректорию, например, d1/d2/d3, то выполнение команды завершится с ошибкой, поскольку директорий d1 и d2 не существует. К счастью, у команды mkdir есть опция -p , позволяющая создавать любое количество родительских директорий, как показано в листинге 7.

Листинг 7. Создание родительских директорий
$ mkdir d1/d2/d3 mkdir: cannot create directory `d1/d2/d3": No such file or directory $ echo $? 1 $ mkdir -p d1/d2/d3 $ echo $? 0

Команда rmdir

Команда rmdir предназначена для удаления директорий. Если указана опция -p , то удаляются также все родительские директории. Поскольку опции для принудительного удаления не существует, то с помощью rmdir можно удалять только пустые директории. Мы рассмотрим другой способ удаления директорий в разделе . Когда вы познакомитесь с этим способом, возможно, уже не будете часто использовать команду rmdir в командной строке, однако, знать о ней не помешает.

Чтобы продемонстрировать удаление директории, мы скопировали наш файл text1 в директорию d1/d2, которая теперь не пуста. Затем мы выполнили команду rmdir для удаления всех директорий, которые только что были созданы с помощью mkdir . Как вы видите, директории d1 и d2 не были удалены, поскольку директория d2 содержит файлы. Все остальные директории были удалены. Как только мы удалим копию файла text1 из директории d2, мы сможем удалить директории d1и d2 с помощью единственной команды rmdir -p .

Листинг 8. Удаление директорий
$ cp text1 d1/d2 $ rmdir -p d1/d2/d3 dir1 dir2 rmdir: failed to remove directory `d1/d2": Directory not empty $ ls . d1/d2 .: backup sedtab text2 text4 text6 xab yab d1 text1 text3 text5 xaa yaa d1/d2: text1 $ rm d1/d2/text1 $ rmdir -p d1/d2

Обработка нескольких файлов и директорий

До сих пор все используемые нами команды выполняли действия над отдельными файлами или, возможно, над несколькими перечисленными вручную файлами. В оставшейся части этой статьи мы рассмотрим выполнение различных операций над множеством файлов, рекурсивные действия с частью дерева каталогов, а также сохранение и восстановление множества файлов и директорий.

Рекурсивные действия

Рекурсивный вывод содержимого директорий

У команды ls имеется опция -R (обратите внимание на верхний регистр "R") для вывода содержимого директории и всех ее поддиректорий. Рекурсивная опция применяется только к именам директорий; она не найдет в дереве каталогов, например, все файлы с именем "text1". Вы можете использовать и другие известные вам опции совместно с опцией -R . В листинге 9 показан рекурсивный вывод содержимого нашей директории lpi103-2, включая номера дескрипторов inode.

Листинг 9. Рекурсивный вывод содержимого директории
$ ls -iR .: 934194 backup 933892 text1 933898 text3 933900 text5 933894 xaa 933896 yaa 933901 sedtab 933893 text2 933899 text4 933902 text6 933895 xab 933897 yab ./backup: 934193 text1.bkp.1 934195 text1.bkp.2

Рекурсивное копирование

Вы можете использовать опцию -r (или -R или --recursive) команды cp для просмотра исходных директорий и рекурсивного копирования их содержимого. Для предотвращения бесконечной рекурсии сама исходная директория не может быть скопирована. В листинге 10 показано, как полностью скопировать содержимое нашей директории lpi103-2 в поддиректорию copy1. Для просмотра результирующего дерева каталогов мы используем команду ls -R .

Листинг 10. Рекурсивное копирование
$ cp -pR . copy1 cp: cannot copy a directory, `.", into itself, `copy1" $ ls -R .: backup copy1 sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab ./backup: text1.bkp.1 text1.bkp.2 ./copy1: text2 text3 text5 xaa yaa yab

Рекурсивное удаление

Ранее мы упоминали, что команда rmdir удаляет только пустые директории. Мы можем использовать опцию -r (или -R или --recursive) команды rm для удаления и файлов и директорий, как показано в листинге 11. В листинге 11 мы удаляем только что созданную директорию copy1 вместе с ее содержимым, включая поддиректорию backup и все файлы в ней.

Листинг 11. Рекурсивное удаление
$ rm -r copy1 $ ls -R .: backup sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab ./backup: text1.bkp.1 text1.bkp.2

Если имеются файлы, не доступные вам для записи, то может потребоваться опция -f для принудительного удаления. Это часто используется пользователем root во время очистки системы, однако имейте в виду, что при неосторожном использовании этой опции вы можете потерять важные данные.

Метасимволы и подстановка имен файлов

Часто возникает необходимость выполнить простую операцию над множеством объектов файловой системы, не оперируя целым деревом каталогов, как мы только что делали при выполнении рекурсивных действий. Например, вам может потребоваться узнать время модификации всех текстовых файлов, которые были созданы в директории lpi103-2, не выводя список отдельных файлов. Хотя это достаточно просто сделать для нашей небольшой директории, для больших файловых систем все оказывается намного сложнее.

Для решения этой проблемы используйте поддержку метасимволов, встроенную в интерпретатор bash. Эта поддержка также называется подстановкой имен ("globbing" – название, произошедшее от имени программы /etc/glob) и позволяет вам определять множество файлов с помощью шаблонов подстановки.

? соответствует любому одиночному символу. * соответствует любой строке, включая пустую строку. [ представляет класс символов . Класс символов – это непустая строка, оканчивающаяся символом "]". Соответствие означает совпадение с любым отдельным символом, заключенным в квадратные скобки. Существует несколько специальных соглашений:
  • Символы "*" и "?" означают сами себя. Если вы используете их в именах файлов, необходимо уделять внимание правильному использованию кавычек и escape-последовательностей.
  • Поскольку строка не должна быть пустой и оканчивается символом "]", вы должны помещать символ "]" первым в строке, если хотите найти для него соответствие.
  • Символ "-", помещенный между двумя другими символами, означает диапазон, включающий в себя эти два символа, а также все символы между ними в соответствии со схемой упорядочения. Например, конструкция соответствует любой шестнадцатеричной цифре в нижнем или верхнем регистре. Если вы хотите найти соответствие для символа "-", помещайте его либо первым, либо последним в диапазоне.
  • Символ "!", помещенный в первой позиции диапазона, означает, что диапазону будут соответствовать любые символы, за исключением указанных в нем. Например, конструкция [!0-9] соответствует любому символу за исключением цифр от 0 до 9. Символ "!", помещенный в любой другой позиции диапазона, соответствует самому себе. Помните, что символ "!" также используется в истории командного интерпретатора, поэтому будьте внимательны и аккуратно используйте его.

Примечание. Шаблоны подстановки и регулярные выражения имеют определенные сходства, однако это не одно и то же. Обратите на это особое внимание!

Подстановка применяется отдельно к каждому компоненту имени пути. Вы не можете задать соответствие символу "/" или включить его в диапазон. Вы можете использовать его в любом месте для указания нескольких файлов или имен директорий, например, в командах ls , cp , mv или rm . В листинге 12 мы сначала создаем несколько файлов со странными именами, а затем используем команды ls и rm совместно с шаблонами подстановки.

Листинг 12. Примеры шаблонов подстановки
$ echo odd1>"text[*?!1]" $ echo odd2>"text" $ ls backup text1 text2 text3 text5 xaa yaa sedtab text[*?!1] text text4 text6 xab yab $ ls text text2 text3 text4 $ ls text[!2-4] text1 text5 text6 $ ls text** text2 text text3 text4 $ ls text*[!2-4]* # Surprise! text1 text[*?!1] text text5 text6 $ ls text*[!2-4] # Another surprise! text1 text[*?!1] text text5 text6 $ echo text*>text10 $ ls *\!* text[*?!1] text $ ls ** text1 text[*?!1] text10 text2 text text3 text4 text5 text6 xaa xab $ ls ** text[*?!1] text yaa yab $ ls tex?[* text[*?!1] text $ rm tex?[* $ ls *b* sedtab xab yab backup: text1.bkp.1 text1.bkp.2 $ ls backup/*2 backup/text1.bkp.2 $ ls -d .* . ..

Примечания:

  1. Образование дополнения совместно с символом "*" может привести к некоторым сюрпризам. Шаблон "*[!2-4]" соответствует самой длинной части имени, после которой не следуют цифры 2, 3 или 4, что соответствует как имени text[*?!1], так и имени text.
  2. Так же, как и в предыдущих примерах команды ls , если удовлетворяющее шаблону имя является именем директории, и опция -d не указана, то будет выведен список содержимого этой директории (как в случае с шаблоном "*b*" из нашего примера).
  3. Если имя файла начинается с точки (.), то этот символ должен быть указан явно. Заметьте, что только последняя команда ls отобразила две специальных записи (. и..).

Помните, что любой групповой символ обрабатывается командным интерпретатором, что может привести к непредсказуемым результатам. Более того, если вы зададите шаблон подстановки, которому не соответствует ни один объект файловой системы, то в соответствии со стандартом POSIX требуется, чтобы команде была передана исходная строка шаблона. Некоторые более ранние версии передавали команде пустой список, поэтому вам могут встретиться старые сценарии, которые ведут себя необычно. Проиллюстрируем сказанное в листинге 13.

Листинг 13. Сюрпризы при использовании шаблонов подстановки
$ echo text* text1 text10 text2 text3 text4 text5 text6 $ echo "text*" text* $ echo text[[\!?]z?? text[[!?]z??

Для получения дополнительной информации о подстановке имен обратитесь к man-странице man 7 glob . Необходимо указать номер раздела, поскольку информация о подстановке содержится также в разделе 3. Лучший способ научиться работать с шаблонами подстановки – это практика, поэтому пробуйте использовать метасимволы каждый раз, когда вам представится эта возможность. Чтобы избежать непоправимых действий, не забывайте проверять ваши шаблоны подстановки с помощью ls , а уже потом применять к ним такие команды, как cp , mv или, тем более, rm .

Использование touch

В этом разделе мы рассмотрим команду touch , которая может обновлять время доступа к файлу или время его модификации, а также создавать пустые файлы. Вы увидите, как использовать эту информацию для поиска файлов и директорий. В наших примерах мы продолжим использовать директорию lpi103-2. Также мы рассмотрим различные способы задания временных меток.

Команда touch

Команда touch , запущенная без каких-либо опций, принимает в качестве параметров один или несколько имен файлов и обновляет время их модификации – значение, которое обычно отображается при подробном выводе содержимого директорий. В листинге 14 мы используем хорошо знакомую нам команду echo для создания небольшого файла с именем f1, а затем выводим содержимое директории в подробном виде для отображения времени модификации (или mtime ). В данном случае временем модификации будет являться время создания файла. Затем мы используем команду sleep , чтобы подождать 60 секунд, и запускаем команду ls снова. Заметьте, что временная метка файла изменилась на одну минуту.

Листинг 14. Обновление времени последнего изменения при помощи touch
$ echo xxx>f1; ls -l f1; sleep 60; touch f1; ls -l f1 -rw-rw-r--. 1 ian ian 4 2009-08-14 18:24 f1 -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1

Если вы укажете имя несуществующего файла, то команда touch создаст пустой файл с этим именем (если не используется опция -c или --no-create). В листинге 15 приведены примеры обеих команд. Обратите внимание на то, что был создан только файл f2.

Листинг 15. Создание пустых файлов при помощи touch
$ touch f2; touch -c f3; ls -l f* -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 f2

С помощью опции -d или -t команды touch можно также устанавливать дату и время модификации файлов (также известное как mtime ) соответственно. Опция -d понимает много различных форматов даты и времени, тогда как опция -t требует, чтобы время было указано в формате MMDDhhmm (год и секунды являются необязательными параметрами). В листинге 16 приведено несколько примеров.

Листинг 16. Установка mtime при помощи touch
$ touch -t 200908121510.59 f3 $ touch -d 11am f4 $ touch -d "last fortnight" f5 $ touch -d "yesterday 6am" f6 $ touch -d "2 days ago 12:00" f7 $ touch -d "tomorrow 02:00" f8 $ touch -d "5 Nov" f9 $ ls -lrt f* -rw-rw-r--. 1 ian ian 0 2009-07-31 18:31 f5 -rw-rw-r--. 1 ian ian 0 2009-08-12 12:00 f7 -rw-rw-r--. 1 ian ian 0 2009-08-12 15:10 f3 -rw-rw-r--. 1 ian ian 0 2009-08-13 06:00 f6 -rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 f4 -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 f2 -rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 f8 -rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 f9

Если вы затрудняетесь составить выражение для нужной даты, то вы можете определиться с помощью команды date . Эта команда также имеет опцию -d и может понимать те же самые форматы даты, что и команда touch .

Вы можете использовать опцию -r (или --reference) совместно с именем ссылочного файла , чтобы указать программе touch (или date) на то, что она должна установить дату в соответствии с временной меткой существующего файла. В листинге 17 приведено несколько примеров.

Листинг 17. Временные метки ссылочных файлов
$ date Fri Aug 14 18:33:48 EDT 2009 $ date -r f1 Fri Aug 14 18:25:50 EDT 2009 $ touch -r f1 f1a $ ls -l f1* -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a

Система Linux записывает как время модификации файла, так и время доступа к файлу (mtime и atime соответственно). Обе временные метки имеют одинаковое значение в момент создания файла и вместе сбрасываются при его изменении. Если было выполнено обращение к файлу, то обновляется время доступа, даже если файл не был модифицирован. В нашем последнем примере работы с командой touch мы рассмотрим время доступа . Опция -a (или --time=atime , --time=access или --time=use) указывает на то, что время доступа необходимо обновить. В листинге 18 мы используем команду cat для обращения к файлу f1 и вывода его содержимого. Затем мы используем команды ls -l и ls -lu для вывода времени модификации и времени доступа, соответственно, для файлов f1 и f1a, который мы создали, используя файл f1 в качестве ссылочного файла. В заключение, с помощью touch -a мы меняем время доступа файла f1 на время доступа файла f1a и проверяем результат.

Листинг 18. Время доступа и время модификации
$ ls -lu f1* -rw-rw-r--. 1 ian ian 4 2009-08-14 18:39 f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a $ ls -l f1* -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a $ touch -a -r f1a f1 $ ls -lu f1* -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a

Более полную информацию о различных спецификациях времени и даты вы можете получить на man- или info-страницах команд touch и date .

Поиск файлов

Теперь, когда наша тема о файлах и директориях была исчерпана молотом рекурсии и подстановок, давайте рассмотрим команду find , которая больше похожа на хирургический скальпель. Команда find используется для поиска файлов в дереве каталогов на основе их имени, даты или размера. В этот раз мы снова будем использовать нашу директорию lpi103-2.

Команда find

Команда find выполняет поиск файлов или директорий, используя полное имя или его часть; поиск может выполняться и по другим критериям, таким как размер, тип, владелец, дата создания или последнего обращения. Наиболее распространенным является поиск по имени или по его части. В листинге 19 приведено несколько примеров поиска файлов: сначала мы ищем в директории lpi103-2 все файлы, в названии которых содержится символ "1" или "k", а затем выполняем поиск путей, о котором подробно поясняется в примечаниях.

Листинг 19. Поиск файлов по имени
$ find . -name "**" ./f1a ./f1 ./text10 ./backup ./backup/text1.bkp.1 ./backup/text1.bkp.2 ./text1 $ find . -ipath "*ACK*1" ./backup/text1.bkp.1 $ find . -ipath "*ACK*/*1" [

Примечания:

В первом примере листинга 19 мы нашли как файлы, так и директорию (./backup). Чтобы ограничить поиск, используйте параметр -type совместно с указанием типа (значение, состоящее из одного символа): "f" – обычные файлы, "d" – директории, "l" – символические ссылки. О других типах вы можете узнать на man-странице команды find . В листинге 20 представлены результаты поиска директорий (параметр -type d) с указанием имени (*, что в данном случае означает все директории).

Листинг 20. Поиск файлов по типу
$ find . -type d . ./backup $ find . -type d -name "*" . ./backup

Обратите внимание на то, что параметр -type d без указания имени выводит директории, имена которых начинаются с точки (в нашем случае только текущая директория); этот же результат достигается при использовании группового символа "*".

Можно также выполнять поиск файлов по их размеру; можно искать файлы определенного размера (n), а также файлы, размер которых больше (+n) или меньше (-n) заданного значения. Задавая начальные и конечные значения, можно искать файлы, размер которых попадает в заданный диапазон. По умолчанию опция -size команды find использует единицу измерения "b" – блоки, размером в 512 байтов. Другими единицами измерения могут быть "c" (байты) или "k" (килобайты). В листинге 21 мы сначала находим все файлы с нулевым размером, а затем все файлы, размером в 24 или 25 байтов. Обратите внимание на то, что если указать вместо опции -size 0 опцию -empty , то также будут найдены все файлы с нулевым размером.

Листинг 21. Поиск файлов по размеру
$ find . -size 0 ./f1a ./f6 ./f8 ./f2 ./f3 ./f7 ./f4 ./f9 ./f5 $ find . -size -26c -size +23c -print ./text2 ./text5 ./backup/text1.bkp.1 ./backup/text1.bkp.2 ./text1

Во втором примере листинга 21 мы используем опцию -print , являющуюся примером действия , которое может быть выполнено над результатами поиска. В интерпретаторе bash это действие выполняется по умолчанию, если не указаны другие действия. В некоторых системах и командных интерпретаторах действие должно быть обязательно указано, в противном случае вы не увидите никаких результатов на экране.

Другими действиями являются -ls (вывод информации о файле, аналогичный выводу команды ls -lids) и -exec (выполнение команды для каждого файла). Действие -exec должно оканчиваться точкой с запятой, чтобы интерпретатор не воспринимал его как обычный набор команд. Также поставьте {} в любом месте команды, в котором должен использоваться возвращаемый файл. Не забывайте, что командный интерпретатор обрабатывает фигурные скобки, поэтому их необходимо указывать в виде escape-последовательностей (или заключать в кавычки). В листинге 22 показан пример использования опций -ls и -exec для вывода информации о файлах. Обратите внимание на то, что во втором примере не выводится информация об индексных дескрипторах inode.

Листинг 22. Поиск и выполнение действий над файлами
$ find . -size -26c -size +23c -ls 933893 4 -rw-rw-r-- 1 ian ian 25 Aug 11 14:27 ./text2 933900 4 -rw-rw-r-- 1 ian ian 24 Aug 11 18:47 ./text5 934193 4 -rw-rw-r-- 1 ian ian 24 Aug 12 15:36 ./backup/text1.bkp.1 934195 4 -rw-rw-r-- 1 ian ian 24 Aug 12 15:36 ./backup/text1.bkp.2 933892 4 -rw-rw-r-- 1 ian ian 24 Aug 11 14:02 ./text1 $ find . -size -26c -size +23c -exec ls -l "{}" \; -rw-rw-r--. 1 ian ian 25 2009-08-11 14:27 ./text2 -rw-rw-r--. 1 ian ian 24 2009-08-11 18:47 ./text5 -rw-rw-r--. 1 ian ian 24 2009-08-12 15:36 ./backup/text1.bkp.1 -rw-rw-r--. 1 ian ian 24 2009-08-12 15:36 ./backup/text1.bkp.2 -rw-rw-r--. 1 ian ian 24 2009-08-11 14:02 ./text1

Опцию -exec можно использовать для различных задач, и ее возможности ограничены лишь вашим воображением. Например, команда

Find . -empty -exec rm "{}" \;

Удаляет из дерева каталогов все пустые файлы, а команда

Find . -name "*.htm" -exec mv "{}" "{}l" \;

Переименовывает все файлы с расширением.htm на файлы с расширением.html.

В нашем последнем примере команды find мы выполняем поиск файлов на основе определенных временных меток (с которыми работает команда touch). Листинг 23 содержит три примера.

  1. При использовании опции -mtime -2 команда find ищет все файлы, которые были изменены за последние два дня. В данном случае день – это 24 часа начиная с текущего момента. Заметьте, что если бы вам требовалось найти файлы на основе времени доступа, а не времени модификации, то можно использовать для этого опцию -atime .
  2. Добавление опции -daystart означает, что мы хотим выполнять отсчет в календарных днях, начиная с полуночи. Таким образом, в этом примере отсутствует файл f3.
  3. В последнем примере мы демонстрируем использование временного диапазона, заданного в минутах, а не в днях, для поиска файлов, которые были изменены от часа (60 минут) до десяти часов (600 минут) назад.
Листинг 23. Поиск файлов по временным меткам
$ date Sat Aug 15 00:27:36 EDT 2009 $ find . -mtime -2 -type f -exec ls -l "{}" \; -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 ./f1a -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 ./f1 -rw-rw-r--. 1 ian ian 0 2009-08-13 06:00 ./f6 -rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 ./f8 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 ./f2 -rw-rw-r--. 1 ian ian 58 2009-08-14 17:30 ./text10 -rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 ./f4 -rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 ./f9 $ find . -daystart -mtime -2 -type f -exec ls -l "{}" \; -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 ./f1a -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 ./f1 -rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 ./f8 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 ./f2 -rw-rw-r--. 1 ian ian 58 2009-08-14 17:30 ./text10 -rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 ./f4 -rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 ./f9 $ find . -mmin -600 -mmin +60 -type f -exec ls -l "{}" \; -rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 ./f1a -rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 ./f1 -rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 ./f2 -rw-rw-r--. 1 ian ian 58 2009-08-14 17:30 ./text10

В нашем кратком руководстве мы не может познакомить вас со всеми многочисленными опциями команды find . Если вы хотите узнать больше об этой команде, то обратитесь к соответствующим man-страницам.

Определение типа файла

Часто файлы имеют расширения (такие как gif, jpeg или html), которые позволяют понять, что может находиться внутри файла. В Linux такие расширения не являются обязательными и, как правило, не используются для определения типов файлов. Если вы знаете тип файла, вы можете выбрать подходящую программу для работы с ним. Команда file позволяет получить некоторую информацию о типе данных, хранящихся в одном или нескольких файлах. В листинге 24 приведено несколько примеров использования команды file .

Листинг 24. Определение содержимого файла
$ file backup text1 f2 ../p-ishields.jpg /bin/echo backup: directory text1: ASCII text f2: empty ../p-ishields.jpg: JPEG image data, JFIF standard 1.02 /bin/echo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

Команда file пытается проанализировать каждый файл с помощью трех различных проверок. Проверки файловой системы используют результаты команды stat для определения того, чем является файл, например, он может являться пустым файлом или директорией. Так называемые magic проверки выполняют поиск в файлах определенного содержимого, позволяющего идентифицировать их. Эти идентификационные сигнатуры также известны как magic numbers . И наконец, языковые проверки проверяют содержимое текстовых файлов и пытаются определить их тип (XML-файл, исходный код на C или C++, файл troff или любой другой файл с исходным кодом какого-либо языкового процессора). Если не указана опция -k или --keep-going , то выводится информация о первом найденном типе файла, а дальнейшие проверки прекращаются.

Команда file имеет много опций, о которых вы можете узнать из man-страниц. В листинге 25 показано, как использовать опцию -i (или --mime) для вывода типа файла в виде MIME строки.

Листинг 25. Определение содержимого файла в виде MIME
$ file -i backup text1 f2 ../p-ishields.jpg /bin/echo backup: application/x-directory; charset=binary text1: text/plain; charset=us-ascii f2: application/x-empty; charset=binary ../p-ishields.jpg: image/jpeg; charset=binary /bin/echo: application/x-executable; charset=binary

Команда file также работает и с файлами, содержащими сигнатуры magic number. Дополнительную информацию вы можете найти на man-страницах.

Примечание. Команда identify из состава пакета ImageMagick является дополнительным инструментом, позволяющим получить более подробную информацию о графических файлах.

Сжатие файлов

При создании резервных копий файлов, а также при их архивировании или передаче обычно применяется сжатие. Две популярных программы для сжатия файлов в Linux – это gzip и bzip2 . Команда gzip использует алгоритм Лемпеля-Зива, а команда bzip2 – блочно-сортирующий алгоритм Барроуза-Уилера.

Программы gzip и gunzip

Обычно наибольшая степень сжатия достигается при обработке текстовых файлов. Многие графические форматы уже являются сжатыми, поэтому для них (а, возможно, и для других двоичных файлов) сжатие может оказаться малоэффективным. Чтобы продемонстрировать результаты сжатия достаточно объемного текстового файла, давайте скопируем файл /etc/services в нашу директорию и сожмем его с помощью gzip, как показано в листинге 26. Мы используем опцию -p команды cp для сохранения метки времени файла /etc/services. Обратите внимание на то, что сжатый файл имеет расширение.gz и ту же самую метку времени.

Листинг 26. Сжатие с помощью gzip
$ cp -p /etc/services . $ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services $ gzip services $ ls -l serv* -rw-r--r--. 1 ian ian 124460 2009-04-10 04:42 services.gz

Файлы, сжатые с помощью gzip, распаковываются той же самой программой, запущенной с опцией -d , или командой gunzip (второй способ более распространен). В листинге 27 продемонстрирован первый способ. Обратите внимание на то, что имя и временная метка распакованного файла совпадают с исходным файлом.

Листинг 27. Распаковка с помощью gzip
$ gzip -d services.gz $ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services

Команды bzip2 и bunzip2

Как видно из листинга 28, работа команды bzip2 аналогична работе команды gzip .

Листинг 28. Сжатие с помощью bzip2
$ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services $ bzip2 services $ ls -l serv* -rw-r--r--. 1 ian ian 113444 2009-04-10 04:42 services.bz2 $ bunzip2 services.bz2 $ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services

Различия между gzip и bzip2

Хотя программы bzip2 и gzip имеют много одинаковых опций, они не идентичны. Вы могли заметить, что в обоих примерах распакованный файл имел те же имя и метку времени, что и исходный файл. Тем не менее, в результате переименования файла или выполнения над ним команды touch это поведение может измениться. У команды gzip имеется опция -N или --name , которая позволяет сохранять имя и временную метку, однако такой опции нет у команды bzip2 . Также у команды gzip имеется опция -l для вывода информации о сжатом файле, включая имя, которое он получит после распаковки. В листинге 29 показаны некоторые различия между этими командами.

Листинг 29. Некоторые различия между gzip и bzip2
$ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services $ gzip -N services $ touch services.gz $ mv services.gz services-x.gz $ ls -l serv* -rw-r--r--. 1 ian ian 124460 2009-09-23 14:08 services-x.gz $ gzip -l services-x.gz compressed uncompressed ratio uncompressed_name 124460 630983 80.3% services-x $ gzip -lN services-x.gz compressed uncompressed ratio uncompressed_name 124460 630983 80.3% services $ gunzip -N services-x.gz $ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services $ $ bzip2 services $ mv services.bz2 services-x.bz2 $ touch services-x.bz2 $ ls -l serv* -rw-r--r--. 1 ian ian 113444 2009-09-23 14:10 services-x.bz2 $ bunzip2 services-x.bz2 $ ls -l serv* -rw-rw-r--. 1 ian ian 630983 2009-09-23 14:10 services-x $ rm services-x # Don"t need this any more

И gzip , и bzip2 получают входные данные с устройства stdin. У обеих команд имеется опция -c для направления вывода на устройство stdout.

С командой bzip2 связаны две другие команды.

  1. Команда bzcat распаковывает файлы на устройство stdout и эквивалентна команде bzip2 -dc .
  2. Команда bzip2recover пытается восстановить данные из поврежденных файлов bzip2.

Дополнительную информацию о командах gzip и bzip2 вы можете найти на соответствующих man-страницах.

Другие инструменты для сжатия

В системах Linux и UNIX все еще часто встречаются две более старых программы – compress и uncompress .

Кроме того, для операционной системы Linux в рамках проекта Info-ZIP разработаны утилиты zip и unzip . В этих программах используются кроссплатформенные функции сжатия, работающие на различном оборудовании под управлением различных операционных систем. Имейте в виду, что в различных операционных системах могут использоваться различные файловые атрибуты и возможности файловых систем. Если вы загрузите сжатый установочный zip-файл, распакуете его в операционной системе Windows, а затем запишете на компакт- или DVD-диск для последующей установки в Linux, то при установке с этого диска могут возникнуть проблемы; например, в ОС Windows отсутствует поддержка символических ссылок, которые могут оказаться частью несжатого исходного набора файлов.

Для получения дополнительной информации об этих и других программах, предназначенных для сжатия и распаковки, обратитесь к соответствующим man-страницам.

Архивирование файлов

Для создания резервных копий групп файлов или даже целых разделов, а также для архивирования и передачи файлов на другой компьютер или другому пользователю широко применяются команды tar , cpio и dd . Вопросы резервного копирования подробно рассматриваются в экзамене LPI 201 на администратора среднего уровня (LPIC-2).

Существует три основных подхода к резервному копированию.

  1. Дифференциальное или кумулятивное архивирование – резервирование всех данных, которые изменились с момента создания последнего полного архива. Для восстановления данных необходимо иметь последний полный архив и самый последний дифференциальный архив.
  2. Инкрементное архивирование – резервирование только тех изменений, которые наступили с момента создания последнего инкрементного архива. Для восстановления данных необходимо иметь последний полный архив и все инкрементные архивы (по порядку), созданные после создания полного архива.
  3. Полное архивирование – резервирование всех данных целиком (обычно это файловая система, директория или группа файлов). Поскольку в этом случае время создания архива оказывается максимальным, то этот подход используется совместно с двумя другими.

Эти команды, а также другие команды, о которых вам уже известно из этой статьи, позволяют создавать резервные копии любым из трех вышеперечисленных способов.

Команда tar

Команда tar (исходное название Tape ARchive ) создает архивный файл (другое его название tarfile или tarball ) из нескольких файлов или директорий, а также извлекает файлы из созданных архивов. Если вы передали на вход команде tar имя директории, то в архив автоматически будут включены все находящиеся в ней файлы и поддиректории; благодаря этому tar очень удобно использовать для архивирования целых веток дерева каталогов.

Вывод может быть направлен в файл, на устройство архивирования (например, ленточный накопитель или другой сменный накопитель) или на стандартное устройство вывода stdout. Конечное местоположение указывается с помощью опции -f . Другими наиболее часто используемыми опциями являются -c (создать архив), -x (распаковать архив), -v (вывод подробного списка, содержащего имена обрабатываемых файлов), -z (использовать сжатие gzip) и -j (использовать сжатие bzip2). Большинство опций команды tar можно указывать кратко, используя одиночный дефис, и подробно, используя двойной дефис. Краткая форма показана в нашем примере. Информацию о дополнительных опциях и о подробной форме их записи вы можете найти на man-страницах.

В листинге 30 показано, как создать резервную копию нашей директории lpi103-2 с помощью tar .

Листинг 30. Создание резервной копии директории lpi103-2 с помощью tar
$ tar -cvf ../lpitar1.tar . ./ ./text3 ./yab ... ./f5

Обычно архивные файлы сжимаются для экономии дискового пространства или времени передачи архива. GNU-версия программы tar позволяет одновременно выполнять обе операции при помощи опции -z (сжатие с помощью gzip) или -b (сжатие с помощью bzip2). В листинге 31 приведен пример использования опции -z , а также показаны различия в размерах двух архивных файлов.

Листинг 31. Сжатие tar архива с помощью gzip
$ tar -zcvf ../lpitar2.tar ~/lpi103-2/ tar: Removing leading `/" from member names /home/ian/lpi103-2/ /home/ian/lpi103-2/text3 /home/ian/lpi103-2/yab ... /home/ian/lpi103-2/f5 $ ls -l ../lpitar* -rw-rw-r--. 1 ian ian 30720 2009-09-24 15:38 ../lpitar1.tar -rw-rw-r--. 1 ian ian 881 2009-09-24 15:39 ../lpitar2.tar

В листинге 31 используется еще одна важная функция tar . Мы указали абсолютный путь для нашей директории и видим, что в первой строке вывода tar сообщает о том, что из имен файлов удаляется вводный символ косой черты (/). Это позволяет восстанавливать файлы в любые другие местоположения для их проверки и играет особо важную роль при восстановлении системных файлов. Если же вам все-таки необходимо сохранить абсолютные пути, используйте для этого опцию -p . Избегайте совместного использования абсолютных и относительных путей при создании архива, поскольку при восстановлении из архива все пути станут относительными.

Команда tar может добавлять файлы к существующему архиву; для этого используется опция -r или --append . В результате в архив могут быть добавлены несколько копий одного и того же файла. В этом случае при извлечении из архива будет восстановлен тот файл, который был добавлен последним . Чтобы восстановить определенную копию файла, используйте опцию --occurrence . Если архив хранится не на ленте, а в обычной файловой системе, то можно использовать опцию -u или --update для его обновления. В этом случае операция обновления похожа на операцию добавления файлов за исключением того, что временные метки файлов в архиве сравниваются с временными метками добавляемых файлов, и добавляются только те файлы, которые были изменены с момента создания архива. Как уже упоминалось, это не работает при использовании архивов на ленте.

Команда tar может сравнивать архивы с текущей файловой системой и извлекать файлы из архивов. Для сравнения используется опция -d , --compare или --diff . В результате сравнения будут показаны все файлы с отличающимся содержимым, а также все файлы с отличающимися временными метками. По умолчанию выводятся только различающиеся файлы (если они есть). Для подробного вывода используйте рассмотренную ранее опцию -v . Опция -C или --directory указывает команде tar выполнять операцию, начиная с указанной директории, а не с текущей.

В листинге 32 приведено несколько примеров. С помощью команды touch мы изменили временную метку файла f1, а затем выполнили сравнение, прежде чем извлечь файл f1 из одного из наших архивов. Чтобы продемонстрировать возможности tar , мы использовали различные опции.

Листинг 32. Сравнение и восстановление с помощью tar
$ touch f1 $ tar --diff --file ../lpitar1.tar . ./f1: Mod time differs $ tar -df ../lpitar2.tar -C / home/ian/lpi103-2/f1: Mod time differs $ tar -xvf ../lpitar1.tar ./f1 # See below ./f1 $ tar --compare -f ../lpitar2.tar --directory /

Имена извлекаемых из архива файлов или директорий должны соответствовать их именам в архиве. В нашем примере попытка восстановить файл f1 вместо./f1 окончится неудачей. Вы можете использовать подстановку имен, однако будьте внимательны, иначе в результате может быть извлечено не совсем то, что вам было нужно. Если вы хотите посмотреть, что хранится в архиве, используйте опцию --list или -t для получения списка его содержимого. В листинге 33 приведен пример использования групповых символов, в результате чего из архива извлекается не только файл./f1.

Листинг 33. Просмотр содержимого архива с помощью tar
$ tar -tf ../lpitar1.tar "*f1*" ./f1a ./f1

Вы можете выбирать файлы, которые необходимо поместить в архив, с помощью команды find , а затем передавать по конвейеру результаты поиска на вход команде tar. Мы рассмотрим этот способ при изучении команды cpio , но он также работает и с командой tar .

Как и в случае с другими командами, которые встречаются в наших учебных руководствах, мы не можем рассмотреть все опции команды tar . Для получения дополнительной информации обращайтесь к man- или info-страницам.

Команда cpio

Команда cpio работает в трех режимах: copy-out для создания архива, copy-in для извлечения из архива и copy-pass для копирования набора файлов из одного местоположения в другое. Для режима copy-out используется опция -o или --create , для режима copy-in – опция -i или --extract и, наконец, для режима copy-pass – опция -p или --pass-through . Список входных файлов команда получает со стандартного устройства ввода stdin. Вывод направляется либо на стандартное устройство вывода stdout, либо на устройство или в файл, указанный с помощью опции -f или --file .

В листинге 34 показано, как сгенерировать список файлов с помощью команды find и передать их команде cpio . Обратите внимание на использование опции -print0 команды find для генерации имен файлов в виде строк с завершающим нулем, а также на соответствующую опцию --null команды cpio , позволяющую считывать данные в этом формате. Использование этих опций позволяет обрабатывать имена файлов, содержащих символы пробела или новой строки. Опция -depth указывает команде find вывести записи директории перед именем директории. В нашем примере мы создаем два архива нашей директории lpi103-2: один архив с относительными путями, второй – с абсолютными. Мы не используем различные возможности команды find для ограничения списка файлов (например, поиск только тех файлов, которые были изменены на этой неделе).

Листинг 34. Создание резервной копии директории с помощью cpio
$ find . -depth -print0 | cpio --null -o > ../lpicpio.1 3 blocks $ find ~/lpi103-2/ -depth -print0 | cpio --null -o > ../lpicpio.2 4 blocks

Если вы хотите, чтобы на экране отображались имена архивируемых файлов, то используйте опцию -v команды cpio .

Команда cpio в режиме copy-in (опция -i или --extract) может выводить содержимое архива или извлекать выбранные файлы. При выводе содержимого архива некоторые старые версии cpio убирают начальный символ / из каждого имени (если оно содержит его) и выводят соответствующее сообщение. Чтобы избавиться от этих посторонних сообщений при просмотре содержимого архива, вы можете указать опцию --absolute-filenames . Эта опция незаметно игнорируется во многих текущих реализациях. В листинге 35 показан выборочный вывод содержимого наших двух предыдущих архивов.

Листинг 35. Просмотр и извлечение выбранных файлов с помощью cpio
$ cpio -i --list "*backup*" < ../lpicpio.1 backup backup/text1.bkp.1 backup/text1.bkp.2 3 blocks $ cpio -i --list absolute-filenames "*text1*" < ../lpicpio.2 /home/ian/lpi103-2/text10 /home/ian/lpi103-2/backup/text1.bkp.1 /home/ian/lpi103-2/backup/text1.bkp.2 /home/ian/lpi103-2/text1 4 blocks

В листинге 36 показано, как извлечь все файлы, содержащие в имени "text1", вместе с их путями во временную директорию. Некоторые из этих файлов расположены в поддиректориях. В отличие от tar , вам необходимо явно указать опцию -d или --make-directories в том случае, если дерево директорий не существует. Кроме того, команда cpio не замещает существующие файлы с более поздней датой, если не указана опция -u или --unconditional .

Листинг 36. Извлечение выбранных фалов с помощью cpio
$ mkdir temp $ cd temp $ cpio -idv "*f1*" "*.bkp.1" < ../../lpicpio.1 f1a f1 backup/text1.bkp.1 3 blocks $ cpio -idv "*.bkp.1" < ../../lpicpio.1 cpio: backup/text1.bkp.1 not created: newer or same age version exists backup/text1.bkp.1 3 blocks $ cpio -id --no-absolute-filenames "*text1*" < ../../lpicpio.2 cpio: Removing leading `/" from member names 4 blocks ./home/ian/lpi103-2/backup/text1.bkp.1 ./home/ian/lpi103-2/backup/text1.bkp.2 ./home/ian/lpi103-2/text1 ./backup/text1.bkp.1 $ cd .. $ rm -rf temp # You may remove these after you have finished

Для получения дополнительной информации о различных опциях обратитесь к man-странице.

Команда dd

В простейшем случае команда dd копирует исходный файл в новый файл. Так как вы уже знакомы с командой cp , вы можете поинтересоваться, для чего нужна еще одна команда, копирующая файлы? Дело в том, что команда dd может выполнять ряд действий, которые не может выполнять обычная команда cp . В частности, она может выполнять преобразования над файлами, такие как перевод из нижнего регистра в верхний или перевод из кодировки ASCII в кодировку EBCDIC. Также она может работать с блоками файлов, что может оказаться полезным при переносе файла на ленточное устройство. Эта команда может пропускать или использовать только выбранные блоки файла. И, наконец, она может читать и записывать на raw-устройства, такие как /dev/sda, что позволяет создавать или восстанавливать файл, являющийся образом целого раздела. Как правило, для записи на устройства необходимо обладать привилегиями пользователя root.

Мы начнем с простого примера, в котором выполняется перевод текстового файла в верхний регистр с помощью опции conv , как показано в листинге 37. С помощью опции if мы указываем, что входные данные должны браться из файла, а не со стандартного устройства ввода. Существует аналогичная опция of , которая переопределяет стандартное устройство вывода, используемое по умолчанию. Для демонстрации возможностей программы мы указываем различные размеры входных и выходных блоков с помощью опций ibs и obs . В случае работы с большими файлами может оказаться удобным использовать блоки большего размера для ускорения операций по передаче данных с диска на диск. В остальных случаях размеры блоков в основном используются для работы с магнитными лентами. Обратите внимание на три строки статуса в конце листинга, которые показывают, сколько целых и частичных блоков было прочитано и записано, а также итоговый размер переданных данных.

Листинг 37. Перевод текста в верхний регистр с помощью dd
$ cat text6 1 apple 2 pear 3 banana 9 plum 3 banana 10 apple 1 apple 2 pear 3 banana 9 plum 3 banana 10 apple $ dd if=text6 conv=ucase ibs=20 obs=30 1 APPLE 2 PEAR 3 BANANA 9 PLUM 3 BANANA 10 APPLE 1 APPLE 2 PEAR 3 BANANA 9 PLUM 3 BANANA 10 APPLE 4+1 records in 3+1 records out 98 bytes (98 B) copied, 0.00210768 s, 46.5 kB/s

Любой из файлов может являться raw-устройством. Обычно так происходит в случае с магнитной лентой, однако в файл или на ленту может быть помещена резервная копия всего дискового раздела, например /dev/hda1 или /dev/sda2. В идеальном случае файловая система устройства должна быть демонтирована или, по крайней мере, смонтирована в режиме только для чтения – это позволит гарантировать, что данные не изменятся за время создания их архивной копии. В примере листинга 38 входной файл является raw-устройством dev/sda2, а результирующий файл – обычным файлом backup-1, расположенным в домашней директории пользователя root. Чтобы создать дамп файла на ленте или другом сменном носителе, необходимо использовать опции наподобие of=/dev/fd0 или of=/dev/st0 .

Листинг 38. Создание резервной копии раздела с помощью dd
# dd if=/dev/sda2 of=backup-1 1558305+0 records in 1558305+0 records out 797852160 bytes (798 MB) copied, 24.471 s, 32.6 MB/s

Заметьте, что было скопировано 797,852,160 байтов данных, и результирующий файл действительно имеет такой размер, хотя дисковое пространство этого раздела используется всего на 3%. Если вы не используете аппаратное сжатие при копировании на ленту, возможно вам потребуется сжать данные. В листинге 39 показано, как сделать это; команды ls и df позволяют оценить размеры файлов и процент использования файловой системы на устройстве/dev/sda2.

Листинг 39. Создание резервной копии с использованием сжатия с помощью dd
# dd if=/dev/sda2 |gzip >backup-2 1558305+0 records in 1558305+0 records out 797852160 bytes (798 MB) copied, 23.4617 s, 34.0 MB/s # ls -l backup- -rw-r--r--. 1 root root 797852160 2009-09-25 17:13 backup-1 -rw-r--r--. 1 root root 995223 2009-09-25 17:14 backup-2 # df -h /dev/sda2 Filesystem Size Used Avail Use% Mounted on /dev/sda2 755M 18M 700M 3% /grubfile

Сжатие с помощью gzip уменьшает размер файла примерно на 20%. Тем не менее, неиспользуемые блоки могут содержать произвольные данные, поэтому даже сжатый архив может иметь больший размер, чем общий размер данных в разделе.

Если вы разделите общее количество скопированных байтов на количество обработанных записей, то вы увидите, что dd записывает данные в виде блоков по 512 байтов. Если копирование осуществляется на raw-устройство, такое как лента, то скорость копирования может существенно снизиться. Как упоминалось ранее, для изменения размера выходного блока можно использовать опцию obs , а для изменения размера входного блока – опцию ibs . С помощью опции bs можно задать общий размер как для входного, так и для входного блока. Если вы используете ленточный накопитель, то не забудьте использовать при чтении с ленты те же размеры блоков, что и для записи на ленту.

Если для хранения архивов необходимо использовать несколько ленточных кассет или других сменных носителей, то может потребоваться разбить архив на несколько более мелких частей с помощью такой утилиты как split . Если вам необходимо пропустить такие блоки, как метки диска или ленты, то вы можете сделать это с помощью dd . Примеры вы можете найти на man-страницах.

Команда dd не ориентирована на работу с файловой системой, поэтому если вы хотите узнать, какие данные содержатся в разделе, необходимо восстановить его дамп. В листинге 40 показано, как восстановить раздел из дампа, созданного в листинге 39, в раздел /dev/sdc7, который был специально создан для нашего примера на сменном USB-накопителе.

Листинг 40. Восстановление раздела с помощью dd
# gunzip backup-2 -c | dd of=/dev/sdc7 1558305+0 records in 1558305+0 records out 797852160 bytes (798 MB) copied, 30.624 s, 26.1 MB/s

Вам может быть интересно узнать, что некоторые программы для записи компакт- и DVD-дисков скрыто используют команду dd для непосредственной записи данных на устройство. Если ваша программа записывает все выполняемые действия в журнал, то теперь, когда вы немного знаете о dd , вам будет полезно просмотреть его. Если вы записываете ISO-образ на компакт- или DVD-диск, то один из способов убедиться, что в процессе записи не возникло никаких ошибок – это прочитать данные с диска при помощи dd и передать результаты на вход команде cmp . В листинге 41 показан общий подход, в котором вместо ISO-образа используется наш файл архива, созданный ранее. Обратите внимание на то, что мы подсчитываем количество блоков, которые должны быть прочитаны, на основании размера образа.

Листинг 41. Сравнение образа с файловой системой
# ls -l backup-1 -rw-r--r--. 1 root root 797852160 2009-09-25 17:13 backup-1 # echo $((797852160 / 512)) # calculate number of 512 byte blocks 1558305 # dd if=/dev/sdc7 bs=512 count=1558305 | cmp - backup-1 1558305+0 records in 1558305+0 records out 797852160 bytes (798 MB) copied, 26.7942 s, 29.8 MB/s

Оригинал: Linux Fundamentals
Автор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 12 декабря 2014 г.

Глава 9. Дерево директорий Linux

В рамках данной главы производится обзор наиболее часто используемых директорий из дерева директорий файловой системы Linux . Также данная глава может служить доказательством утверждения о том, что в Unix-системе все является файлом.

Стандарт иерархии файловой системы

Многие дистрибутивы Linux частично следуют Стандарту иерархии файловой системы (Filesystem Hierarchy Standard). Данный стандарт может оказаться полезным для будущего процесса стандартизации деревьев директорий файловых систем Unix/Linux. Стандарт FHS доступен в сети по адресу http://www.pathname.com/fhs/ , причем на данном ресурсе мы можем прочитать: "Стандарт иерархии файловой системы был создан с целью его использования разработчиками дистрибутивов Unix, разработчиками пакетов для распространения программного обеспечения и разработчиками операционных систем. Однако, данный стандарт является в большей степени справочным материалом, нежели руководством по работе с файловой системой Unix или с иерархиями директорий."

Страница руководства man hier

Существуют некоторые различия в иерархиях файловых систем различных дистрибутивов Linux . Для того, чтобы ознакомиться с информацией об иерархии файловой системы вашей машины, используйте команду man hier . На данной странице руководства будут приведены пояснения относительно структуры дерева директорий системы, установленной на вашем компьютере.

Корневая директория /

Структуры директорий всех систем Linux начинаются с корневой директории. Корневая директория обозначается с помощью символа прямого слэша, а именно, /. Все файлы, которые существуют в вашей системе Linux, находится ниже данной корневой директории в дереве директорий. Давайте рассмотрим содержимое этой корневой директории. $ ls / bin dev home media mnt proc sbin srv tftpboot usr boot etc lib misc opt root selinux sys tmp var

Директории для хранения бинарных файлов

Бинарные файлы являются файлами, содержащими скомпилированный исходный код (или машинный код). Бинарные файлы могут исполняться на компьютере. Иногда бинарные файлы также называются исполняемыми файлами.

Директория /bin

Директория /bin содержит бинарные файлы, которые могут использоваться всеми пользователями. В соответствии со спецификацией FHS, директория /bin должна содержать исполняемые файлы /bin/cat и /bin/date (помимо других исполняемых файлов).

В примере ниже вы можете увидеть список исполняемых файлов, являющихся реализациями таких команд, как cat, cp, cpio, date, dd, echo, grep и.т.д. Многие из упомянутых команд будут рассмотрены в рамках данной книги. paul@laika:~$ ls /bin archdetect egrep mt setupcon autopartition false mt-gnu sh bash fgconsole mv sh.distrib bunzip2 fgrep nano sleep bzcat fuser nc stralign bzcmp fusermount nc.traditional stty bzdiff get_mountoptions netcat su bzegrep grep netstat sync bzexe gunzip ntfs-3g sysfs bzfgrep gzexe ntfs-3g.probe tailf bzgrep gzip parted_devices tar bzip2 hostname parted_server tempfile bzip2recover hw-detect partman touch bzless ip partman-commit true bzmore kbd_mode perform_recipe ulockmgr cat kill pidof umount ...

Другие директории /bin

Вы можете обнаружить поддиректорию /bin во многих других директориях. Например, пользователь с именем serena может разместить свои собственные приложения в поддиректории /home/serena/bin .

Файлы некоторых приложений, обычно в случае установки путем непосредственной сборки из исходного кода, устанавливаются в директорию /opt . К примеру, при установке сервера samba для хранения бинарных файлов может быть использована поддиректория /opt/samba/bin .

Директория /sbin

Директория /sbin содержит бинарные файлы, предназначенные для настройки операционной системы. Многие из бинарных файлов для настройки системы требуют наличия привилегий пользователя root для выполнения определенных задач.

В примере ниже приведен список бинарных файлов для настройки системы, предназначенных для изменения IP-адреса, работы с разделами жестких дисков и создания файловой системы ext4. paul@ubu1010:~$ ls -l /sbin/ifconfig /sbin/fdisk /sbin/mkfs.ext4 -rwxr-xr-x 1 root root 97172 2011-02-02 09:56 /sbin/fdisk -rwxr-xr-x 1 root root 65708 2010-07-02 09:27 /sbin/ifconfig -rwxr-xr-x 5 root root 55140 2010-08-18 18:01 /sbin/mkfs.ext4

Директория /lib

Бинарные файлы из директорий /bin и /sbin обычно используют разделяемые библиотеки, расположенные в директории /lib . В примере ниже приведен список некоторых файлов из директории /lib . paul@laika:~$ ls /lib/libc* /lib/libc-2.5.so /lib/libcfont.so.0.0.0 /lib/libcom_err.so.2.1 /lib/libcap.so.1 /lib/libcidn-2.5.so /lib/libconsole.so.0 /lib/libcap.so.1.10 /lib/libcidn.so.1 /lib/libconsole.so.0.0.0 /lib/libcfont.so.0 /lib/libcom_err.so.2 /lib/libcrypt-2.5.so

Поддиректория /lib/modules

Обычно ядро Linux загружает модули из директории /lib/modules/$версия-ядра/ . Содержимое этой директории будет подробно описано в главе, посвященной ядру Linux.

Директории /lib32 и /lib64

На данный момент осуществляется медленная миграция с 32-битных на 64-битные системы. По этой причине вы можете обнаружить в своей системе директории с именами /lib32 и /lib64 , которые указывают на размеры регистров, использованные в процессе компиляции расположенных в этих директориях разделяемых библиотек. 64-битный компьютер может содержать некоторые 32-битные бинарные файлы и библиотеки, используемые для достижения совместимости с устаревшими приложениями. В примере ниже утилита file используется для демонстрации описанных различий между разделяемыми библиотеками. paul@laika:~$ file /lib32/libc-2.5.so /lib32/libc-2.5.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.0, stripped paul@laika:~$ file /lib64/libcap.so.1.10 /lib64/libcap.so.1.10: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), stripped

Формат ELF (формат исполняемых и компонуемых файлов - Executable and Linkable Format) используется практически во всех Unix-подобных операционных системах с момента выпуска System V .

Директория /opt

Директория /opt предназначена для хранения вспомогательного программного обеспечения. В большинстве случаев данное программное обеспечение устанавливается не из репозитория дистрибутива. В многих системах директория /opt пуста.

При установке пакета программного обеспечения большого объема файлы из него могут копироваться в поддиректории /bin , /lib , /etc директории /opt/$имя-пакета/ . Например, в том случае, если пакет программного обеспечения носит имя wp , файлы из него будут устанавливаться в директорию /opt/wp , при этом бинарные файлы будут устанавливаться в поддиректорию /opt/wp/bin , а файлы страниц руководств - в поддиректорию /opt/wp/man .

Директории для хранения файлов конфигурации

Директория /boot

Директория /boot содержит все файлы, необходимые для загрузки компьютера. Эти файлы не изменяются очень часто. В системах Linux в данной директории обычно можно обнаружить поддиректорию /boot/grub . Директория /boot/grub содержит файл /boot/grub/grub.cfg (на более старых системах также может использоваться файл /boot/grub/grub.conf), в рамках которого описывается меню загрузки, отображаемое перед загрузкой ядра ОС.

Директория /etc

Все специфичные для машины конфигурационные файлы должны быть расположены в директории /etc . Изначально имя директории /etc была образовано от слова etcetera (и так далее), но сегодня люди часто расшифровывают его как Editable Text Configuration (директория с редактируемыми текстовыми файлами конфигурации).

Во многих случаях имена конфигурационных файлов совпадают с именами приложений или протоколов, а в качестве расширений этих файлов используется строка.conf . paul@laika:~$ ls /etc/*.conf /etc/adduser.conf /etc/ld.so.conf /etc/scrollkeeper.conf /etc/brltty.conf /etc/lftp.conf /etc/sysctl.conf /etc/ccertificates.conf /etc/libao.conf /etc/syslog.conf /etc/cvs-cron.conf /etc/logrotate.conf /etc/ucf.conf /etc/ddclient.conf /etc/ltrace.conf /etc/uniconf.conf /etc/debconf.conf /etc/mke2fs.conf /etc/updatedb.conf /etc/deluser.conf /etc/netscsid.conf /etc/usplash.conf /etc/fdmount.conf /etc/nsswitch.conf /etc/uswsusp.conf /etc/hdparm.conf /etc/pam.conf /etc/vnc.conf /etc/host.conf /etc/pnm2ppa.conf /etc/wodim.conf /etc/inetd.conf /etc/povray.conf /etc/wvdial.conf /etc/kernel-img.conf /etc/resolv.conf paul@laika:~$

В директории /etc также можно обнаружить большое количество других важных файлов.

Поддиректория /etc/init.d/

Во многих дистрибутивах Unix/Linux имеется директория /etc/init.d , которая содержит сценарии для запуска и остановки демонов. Эта поддиректория может исчезнуть в процессе перехода дистрибутивов Linux на системы инициализации, которые заменят старую систему инициализации init , используемую для запуска всех демонов.

Поддиректория /etc/X11/

Управление системой вывода графики осуществляется средствами программного обеспечения от организации X.org Foundation (а именно, сервера оконной системы X Window System или просто X). Файл конфигурации для вашего сервера оконной системы носит имя /etc/X11/xorg.conf .

Поддиректория /etc/skel/

Содержимое директории каркаса /etc/skel копируется в домашнюю директорию при создании учетной записи пользователя. Она обычно содержит такие скрытые файлы, как сценарий.bashrc .

Поддиректория /etc/sysconfig/

Данная директория, не упомянутая в спецификации FHS, содержит большое количество файлов конфигурации компонентов дистрибутива Red Hat Enterprise Linux . Впоследствии мы будем более подробно рассматривать некоторые из этих файлов. В примере ниже приведен список файлов директории /etc/sysconfig дистрибутива RHELv4u4 в случае установки всех связанных с данной директорией программных компонентов. paul@RHELv4u4:~$ ls /etc/sysconfig/ apmd firstboot irda network saslauthd apm-scripts grub irqbalance networking selinux authconfig hidd keyboard ntpd spamassassin autofs httpd kudzu openib.conf squid bluetooth hwconf lm_sensors pand syslog clock i18n mouse pcmcia sys-config-sec console init mouse.B pgsql sys-config-users crond installinfo named prelink sys-logviewer desktop ipmi netdump rawdevices tux diskdump iptables netdump_id_dsa rhn vncservers dund iptables-cfg netdump_id_dsa.p samba xinetd paul@RHELv4u4:~$

Файл /etc/sysconfig/firstboot сообщает агенту настройки дистрибутива Red Hat о том, что он не должен запускаться после загрузки системы. В том случае, если вы желаете использовать агент настройки дистрибутива Red Hat после следующей перезагрузки, вам следует просто удалить данный файл и выполнить команду chkconfig --level 5 firstboot on . Агент настройки дистрибутива Red Hat позволяет устанавливать последние обновления системы, создавать учетные записи пользователей, пользоваться функциями портала Red Hat Network, а также выполнять другие действия. После запуска он снова создаст файл /etc/sysconfig/firstboot. paul@RHELv4u4:~$ cat /etc/sysconfig/firstboot RUN_FIRSTBOOT=NO

Файл /etc/sysconfig/harddisks содержит дополнительные параметры настройки жестких дисков. Формат файла описан в самом файле.

Вы можете ознакомиться с описанием программного обеспечения, обнаруженного утилитой kudzu , которое сохраняется в файле /etc/sysconfig/hwconf . Kudzu является приложением от компании Red Hat, предназначенным для автоматического обнаружения и настройки аппаратного обеспечения.

Тип клавиатуры и таблица соответствия символов устанавливаются в файле /etc/sysconfig/keyboard . Для получения дополнительной информации о настройках клавиатуры в консоли следует обратиться к следующим страницам руководств keymaps(5) , dumpkeys(1) , loadkeys(1) , а также к содержимому директории /lib/kbd/keymaps/ . root@RHELv4u4:/etc/sysconfig# cat keyboard KEYBOARDTYPE="pc" KEYTABLE="us"

Файлы для настройки сетевых устройств из данной директории будут обсуждаться в главе, посвященной настройке сети.

Директории для хранения данных

Директория /home

Пользователи могут хранить персональные данные и данные проектов в директории /home . Обычно (но не всегда в соответствии со спецификацией FHS) имя домашней директории пользователя устанавливается в соответствии с полным именем пользователя в формате /home/$имя_пользователя. Например: paul@ubu606:~$ ls /home geert annik sandra paul tom

Помимо выделения каждому пользователю (или каждому проекту или группе) места для хранения персональных данных в рамках домашней директории, в рамках этой же директории выделяется место для хранения данных профиля пользователя. Типичный профиль пользователя Unix содержит множество скрытых файлов (файлов, имена которых начинаются с точки). Скрытые файлы пользовательского профиля Unix содержат параметры, установленные для данного пользователя. paul@ubu606:~$ ls -d /home/paul/.* /home/paul/. /home/paul/.bash_profile /home/paul/.ssh /home/paul/.. /home/paul/.bashrc /home/paul/.viminfo /home/paul/.bash_history /home/paul/.lesshst

Директория /root

Во многих системах директория /root является стандартной директорией для хранения персональных данных и данных профиля пользователя root . В том случае, если ее не существует по умолчанию, администраторы могут создать ее самостоятельно.

Директория /srv

Вы можете использовать директорию /srv для хранения данных, которые обрабатываются вашей системой. Спецификация FHS позволяет хранить в этой директории данные cvs, rsync, ftp и www. Кроме того, спецификация FHS подтверждает возможность использования таких административных имен для поддиректорий, как /srv/project55/ftp и /srv/sales/www.

В системах Sun Solaris (или Oracle Solaris) для этой цели используется директория /export .

Директория /media

Директория /media служит точкой монтирования для таких устройств для работы со съемными носителями, как приводы CD-ROM, цифровые камеры, а также различные устройства, подключаемые по шине USB. Так как директория /media является достаточно новой в мире систем Unix, вы с высокой вероятностью можете встретить системы, не использующие данную директорию. К примеру, несмотря на то, что система Solaris 9 не имеет рассматриваемой директории, эта директория присутствует в системе Solaris 10. Большинство дистрибутивов Linux на сегодняшний день монтирует все съемные носители в директорию /media . paul@debian5:~$ ls /media/ cdrom cdrom0 usbdisk

Директория /mnt

Директория /mnt должна быть пустой и использоваться исключительно для создания временных точек монтирования файловых систем (в соответствии со спецификацией FHS).

Администраторы систем Unix и Linux обычно создают в данной директории множество поддиректорий, таких, как /mnt/something/. Вы, скорее всего, столкнетесь с системами с более чем одной директорией, созданной и/или смонтированной в рамках директории /mnt для работы с различными локальными и удаленными файловыми системами.

Директория /tmp

Приложения и пользователи должны использовать директорию /tmp для хранения временных данных при необходимости. Данные, хранимые в директории /tmp , могут в реальности храниться как на диске, так и в оперативной памяти. В обоих случаях обслуживание хранилища временных данных осуществляется средствами операционной системы. Никогда не используйте директорию /tmp для хранения данных, которые являются важными или которые вы желаете архивировать.

Директории в оперативной памяти

Директория /dev

Файлы устройств из директории /dev выглядят как обычные файлы, но на самом деле не являются обычными файлами, размещенными на жестком диске. Директория /dev заполняется файлами в процессе определения устройств средствами ядра операционной системы.

Стандартные физические устройства

Стандартные устройства, такие, как жесткие диски, представлены файлами устройств в директории /dev . В примере ниже приведен список файлов устройств SATA ноутбука, а также устройств IDE настольного компьютера. (Подробное описание назначения этих файлов устройств будет приведено ниже.) # # Устройства SATA или SCSI или USB # paul@laika:~$ ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb /dev/sdb1 /dev/sdb2 # # Устройства IDE или ATAPI # paul@barry:~$ ls /dev/hd* /dev/hda /dev/hda1 /dev/hda2 /dev/hdb /dev/hdb1 /dev/hdb2 /dev/hdc

Помимо представления физических устройств, некоторые файлы устройств выполняют специальные функции. Эти специальные файлы устройств могут оказаться очень полезными.

Файлы устройств /dev/tty и /dev/pts

К примеру, файл устройства /dev/tty1 представляет терминал или консоль, соединенную с системой. (Не стоит ломать голову над точными значениями терминов "терминал" или "консоль", так как в данном случае имеется в виду интерфейс командной строки системы.) При вводе команд в эмуляторе терминала, поставляемом в составе такого графического окружения рабочего стола, как Gnome или KDE, ваш терминал будет представлен файлом устройства /dev/pts/1 (вместо числа 1 может использоваться другое число).

Файл устройства /dev/null

В Linux вы можете обнаружить и другие файлы специальных устройств, такие, как файл устройства /dev/null , которое может рассматриваться как черная дыра; хотя соответствующее устройство и имеет неограниченную емкость, после записи из него не могут быть прочитаны никакие данные. Говоря техническим языком, любые записанные на представленное файлом /dev/null устройство данные будут просто отброшены. Представленное файлом /dev/null устройство может быть использовано для отбрасывания ненужного вывода различных команд. Помните о том, что представленное файлом /dev/null устройство не является удачным местом для хранения ваших резервных копий данных;-) .

Директория /proc и взаимодействие с ядром ОС

Директория /proc является другой специальной директорией, которая содержит файлы, кажущиеся на первый взгляд обычными файлами, но не занимающие места на диске. На самом деле содержимое данной директории является представлением ядра ОС, а точнее, используемых ядром ОС структур данных и предназначено для непосредственного взаимодействия с ядром ОС. В директорию /proc монтируется специальная файловая система procfs. paul@RHELv4u4:~$ mount -t proc none on /proc type proc (rw)

При выводе содержимого директории /proc можно обнаружить множество директорий с именами, представленными числовыми значениями (в любой системе Unix), а также некоторые интересные файлы (в Linux). mul@laika:~$ ls /proc 1 2339 4724 5418 6587 7201 cmdline mounts 10175 2523 4729 5421 6596 7204 cpuinfo mtrr 10211 2783 4741 5658 6599 7206 crypto net 10239 2975 4873 5661 6638 7214 devices pagetypeinfo 141 29775 4874 5665 6652 7216 diskstats partitions 15045 29792 4878 5927 6719 7218 dma sched_debug 1519 2997 4879 6 6736 7223 driver scsi 1548 3 4881 6032 6737 7224 execdomains self 1551 30228 4882 6033 6755 7227 fb slabinfo 1554 3069 5 6145 6762 7260 filesystems stat 1557 31422 5073 6298 6774 7267 fs swaps 1606 3149 5147 6414 6816 7275 ide sys 180 31507 5203 6418 6991 7282 interrupts sysrq-trigger 181 3189 5206 6419 6993 7298 iomem sysvipc 182 3193 5228 6420 6996 7319 ioports timer_list 18898 3246 5272 6421 7157 7330 irq timer_stats 19799 3248 5291 6422 7163 7345 kallsyms tty 19803 3253 5294 6423 7164 7513 kcore uptime 19804 3372 5356 6424 7171 7525 key-users version 1987 4 5370 6425 7175 7529 kmsg version_signature 1989 42 5379 6426 7188 9964 loadavg vmcore 2 45 5380 6430 7189 acpi locks vmnet 20845 4542 5412 6450 7191 asound meminfo vmstat 221 46 5414 6551 7192 buddyinfo misc zoneinfo 2338 4704 5416 6568 7199 bus modules

Давайте обратим внимание на свойства файлов из директории /proc . При рассмотрении даты и времени изменения данных файлов можно отметить, что эти параметры соответствуют текущим значениями даты и времени, из чего можно сделать вывод, что содержимое данных файлов постоянно обновляется (для предоставления доступа к актуальному содержимому используемых ядром ОС структур данных). paul@RHELv4u4:~$ date Пн янв 29 18:06:32 EST 2007 paul@RHELv4u4:~$ ls -al /proc/cpuinfo -r--r--r-- 1 root root 0 ноя 29 18:06 /proc/cpuinfo paul@RHELv4u4:~$ paul@RHELv4u4:~$ ...через некоторое время... paul@RHELv4u4:~$ paul@RHELv4u4:~$ date Пн янв 29 18:10:00 EST 2007 paul@RHELv4u4:~$ ls -al /proc/cpuinfo -r--r--r-- 1 root root 0 ноя 29 18:10 /proc/cpuinfo

Размер большинства файлов из директории /proc равен 0 байт, но при этом файлы из данной директории содержат данные, а иногда большие объемы данных. Вы можете ознакомиться с этими данными, использовав команду cat по отношению к таким файлам, как файл /proc/cpuinfo , который содержит информацию о центральном процессоре. paul@RHELv4u4:~$ file /proc/cpuinfo /proc/cpuinfo: empty paul@RHELv4u4:~$ cat /proc/cpuinfo processor: 0 vendor_id: AuthenticAMD cpu family: 15 model: 43 model name: AMD Athlon(tm) 64 X2 Dual Core Processor 4600+ stepping: 1 cpu MHz: 2398.628 cache size: 512 KB fdiv_bug: no hlt_bug: no f00f_bug: no coma_bug: no fpu: yes fpu_exception: yes cpuid level: 1 wp: yes flags: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge... bogomips: 4803.54

Для сравнения ниже приведено содержимое файла /proc/cpuinfo системы Sun Sunblade 1000... paul@pasha:~$ cat /proc/cpuinfo cpu: TI UltraSparc III (Cheetah) fpu: UltraSparc III integrated FPU promlib: Version 3 Revision 2 prom: 4.2.2 type: sun4u ncpus probed: 2 ncpus active: 2 Cpu0Bogo: 498.68 Cpu0ClkTck: 000000002cb41780 Cpu1Bogo: 498.68 Cpu1ClkTck: 000000002cb41780 MMU Type: Cheetah State: CPU0: online CPU1: online

Большая часть файлов из директории /proc предназначена исключительно для чтения, причем для чтения некоторых из них требуются привилегии пользователя root; в некоторые файлы могут записываться данные, причем в директории /proc/sys таких файлов большинство. Давайте поговорим о некоторых файлах из директории /proc.

Файл /proc/interrupts

В системе архитектуры x86 в файле /proc/interrupts содержится информация о запросах прерываний. paul@RHELv4u4:~$ cat /proc/interrupts CPU0 0: 13876877 IO-APIC-edge timer 1: 15 IO-APIC-edge i8042 8: 1 IO-APIC-edge rtc 9: 0 IO-APIC-level acpi 12: 67 IO-APIC-edge i8042 14: 128 IO-APIC-edge ide0 15: 124320 IO-APIC-edge ide1 169: 111993 IO-APIC-level ioc0 177: 2428 IO-APIC-level eth0 NMI: 0 LOC: 13878037 ERR: 0 MIS: 0

При использовании машины с двумя центральными процессорами данный файл выглядит следующим образом. paul@laika:~$ cat /proc/interrupts CPU0 CPU1 0: 860013 0 IO-APIC-edge timer 1: 4533 0 IO-APIC-edge i8042 7: 0 0 IO-APIC-edge parport0 8: 6588227 0 IO-APIC-edge rtc 10: 2314 0 IO-APIC-fasteoi acpi 12: 133 0 IO-APIC-edge i8042 14: 0 0 IO-APIC-edge libata 15: 72269 0 IO-APIC-edge libata 18: 1 0 IO-APIC-fasteoi yenta 19: 115036 0 IO-APIC-fasteoi eth0 20: 126871 0 IO-APIC-fasteoi libata, ohci1394 21: 30204 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2 22: 1334 0 IO-APIC-fasteoi saa7133, saa7133 24: 234739 0 IO-APIC-fasteoi nvidia NMI: 72 42 LOC: 860000 859994 ERR: 0

Файл /proc/kcore

Физическая память представлена файлом /proc/kcore . Не пытайтесь использовать команду cat по отношению к этому файлу; вместо этого при необходимости исследования содержимого оперативной памяти используйте отладчик. Размер файла /proc/kcore совпадает с объемом вашей оперативной памяти плюс четыре байта. paul@laika:~$ ls -lh /proc/kcore -r-------- 1 root root 2.0G 2007-01-30 08:57 /proc/kcore paul@laika:~$

Директория /sys для работы с системой горячего подключения устройств ядра Linux 2.6

Директория /sys была создана в процессе разработки версии 2.6 ядра Linux. С момента выпуска версии 2.6 ядро Linux использует файловую систему sysfs для реализации механизма горячего подключения устройств, использующих шины usb и IEEE 1394 (FireWire). Обратитесь к страницам руководств udev(8) (данная подсистема пришла на смену подсистеме devfs) и hotplug(8) для получения дополнительной информации (или посетите ресурс http://linux-hotplug.sourceforge.net/).

По существу, директория /sys содержит файлы с информацией об используемом аппаратном обеспечении.

Директория системных ресурсов Unix /usr

Несмотря на то, что имя директории /usr напоминает слово user (пользователь), не следует забывать о том, что на самом деле оно расшифровывается как Unix System Resources (директория системных ресурсов Unix). Иерархия поддиректорий директории /usr должна содержать разделяемые данные приложений, доступные только для чтения. Некоторые системные администраторы осуществляют монтирование файловой системы /usr в режиме только для чтения. В этом случае данная директория должна быть расположена на отдельном разделе жесткого диска или на разделяемом ресурсе NFS.

Директория /usr/bin

Директория /usr/bin содержит множество реализаций команд. paul@deb508:~$ ls /usr/bin | wc -l 1395

(В системе Solaris директория /bin является символьной ссылкой на директорию /usr/bin .)

Директория /usr/include

Директория /usr/include содержит общедоступные заголовочные файлы для языка программирования C. paul@ubu1010:~$ ls /usr/include/ aalib.h expat_config.h math.h search.h af_vfs.h expat_external.h mcheck.h semaphore.h aio.h expat.h memory.h setjmp.h AL fcntl.h menu.h sgtty.h aliases.h features.h mntent.h shadow.h ...

Директория /usr/lib

Директория /usr/lib содержит разделяемые библиотеки, которые не используются непосредственно пользователями или сценариями. paul@deb508:~$ ls /usr/lib | head -7 4Suite ao apt arj aspell avahi bonobo

Директория /usr/local

Директория /usr/local может использоваться системным администратором для локальной установки программного обеспечения. paul@deb508:~$ ls /usr/local/ bin etc games include lib man sbin share src paul@deb508:~$ du -sh /usr/local/ 128K /usr/local/

Директория /usr/share

Директория /usr/share содержит независимые от архитектуры данные. Как вы можете заметить, данная директория имеет значительный размер. paul@deb508:~$ ls /usr/share/ | wc -l 263 paul@deb508:~$ du -sh /usr/share/ 1.3G /usr/share/

Обычно данная директория содержит поддиректорию /usr/share/man , предназначенную для хранения файлов страниц руководств. paul@deb508:~$ ls /usr/share/man cs fr hu it.UTF-8 man2 man6 pl.ISO8859-2 sv de fr.ISO8859-1 id ja man3 man7 pl.UTF-8 tr es fr.UTF-8 it ko man4 man8 pt_BR zh_CN fi gl it.ISO8859-1 man1 man5 pl ru zh_TW

Также данная директория содержит поддиректорию /usr/share/games , предназначенную для хранения всех статических данных игр (таким образом, в данной директории не могут находиться файлы со списками рекордов или журналами игрового процесса). paul@ubu1010:~$ ls /usr/share/games/ openttd wesnoth

Директория /usr/src

Директория /usr/src является рекомендуемой директорией для хранения файлов исходного кода ядра ОС. paul@deb508:~$ ls -l /usr/src/ итого 12 drwxr-xr-x 4 root root 4096 2011-02-01 14:43 linux-headers-2.6.26-2-686 drwxr-xr-x 18 root root 4096 2011-02-01 14:43 linux-headers-2.6.26-2-common drwxr-xr-x 3 root root 4096 2009-10-28 16:01 linux-kbuild-2.6.26

Директория для изменяемых данных /var

Файлы заранее неизвестного размера, такие, как файлы журналов, файлы кэша и файлы очереди печати должны сохраняться в директории /var .

Директория /var/log

Директория /var/log выполняет функции центрального хранилища всех файлов журналов. $ ls /var/log acpid cron.2 maillog.2 quagga secure.4 amanda cron.3 maillog.3 radius spooler anaconda.log cron.4 maillog.4 rpmpkgs spooler.1 anaconda.syslog cups mailman rpmpkgs.1 spooler.2 anaconda.xlog dmesg messages rpmpkgs.2 spooler.3 audit exim messages.1 rpmpkgs.3 spooler.4 boot.log gdm messages.2 rpmpkgs.4 squid boot.log.1 httpd messages.3 sa uucp boot.log.2 iiim messages.4 samba vbox boot.log.3 iptraf mysqld.log scrollkeeper.log vmware-tools-guestd boot.log.4 lastlog news secure wtmp canna mail pgsql secure.1 wtmp.1 cron maillog ppp secure.2 Xorg.0.log cron.1 maillog.1 prelink.log secure.3 Xorg.0.log.old

Файл /var/log/messages

Стандартным файлом, к которому следует обратиться в первую очередь при диагностике дистрибутива от компании Red Hat (и производных дистрибутивов), является файл /var/log/messages . По умолчанию данный файл должен содержать информацию о событиях, которые происходят в рамках системы. Файл, выполняющий аналогичные функции в дистрибутивах Debian и Ubuntu, носит имя /var/log/syslog . # tail /var/log/messages Jul 30 05:13:56 anacron: anacron startup succeeded Jul 30 05:13:56 atd: atd startup succeeded Jul 30 05:13:57 messagebus: messagebus startup succeeded Jul 30 05:13:57 cups-config-daemon: cups-config-daemon startup succeeded Jul 30 05:13:58 haldaemon: haldaemon startup succeeded Jul 30 05:14:00 fstab-sync: removed all generated mount points Jul 30 05:14:01 fstab-sync: added mount point /media/cdrom for... Jul 30 05:14:01 fstab-sync: added mount point /media/floppy for... Jul 30 05:16:46 sshd(pam_unix): session opened for user paul by... Jul 30 06:06:37 su(pam_unix): session opened for user root by paul

Директория /var/cache

Директория /var/cache может содержать кэшированные данные некоторых приложений. paul@ubu1010:~$ ls /var/cache/ apt dictionaries-common gdm man software-center binfmts flashplugin-installer hald pm-utils cups fontconfig jockey pppconfig debconf fonts ldconfig samba

Директория /var/spool

Директория /var/spool обычно содержит поддиректории для хранения файлов с сообщениями электронной почты и данными задач cron , причем она также может быть родительской директорией для других файлов очередей (например, файлов очередей печати).

Директория /var/lib

Директория /var/lib содержит файлы с данными состояния приложений.

Дистрибутив Red Hat Enterprise Linux, к примеру, хранит файлы, относящиеся к менеджеру пакетов rpm , в поддиректории /var/lib/rpm/ .

Другие директории /var/...

Директория /var также содержит файлы с идентификаторами процессов в поддиректории /var/run (которая в недалеком будущем будет заменена на директорию /run), временные файлы, которые не должны удаляться при перезагрузке, в поддиректории /var/tmp , а также файлы блокировок в поддиректории /var/lock . Далее в данной книге будут приведены дополнительные примеры использования директории /var для хранения данных.

Практическое задание: дерево директорий Linux

Корректная процедура выполнения практического задания: дерево директорий Linux

1. Существует ли файл /bin/cat ? Как насчет файлов /bin/dd и /bin/echo . Какого типа данные файлы?

Ls /bin/cat ; file /bin/cat ls /bin/dd ; file /bin/dd ls /bin/echo ; file /bin/echo

2. Каков общий объем файлов ядра Linux (vmlinu*) в директории /boot?

Ls -lh /boot/vm*

3. Создайте директорию ~/test. После этого выполните следующие команды: cd ~/test dd if=/dev/zero of=zeroes.txt count=1 bs=100 od zeroes.txt

Утилита dd осуществит копирование одного блока (count=1) размером в 100 байт (bs=100) из специального файла /dev/zero в файл ~/test/zeroes.txt. Какие пояснения вы можете дать относительно возможностей специального файла /dev/zero ?

Файл /dev/zero является специальным файлом устройства Linux. Он может рассматриваться как источник нулевых байт. Вы не можете записать какие-либо данные в файл /dev/zero , но вы можете читать нулевые байты из него.

4. А теперь выполните следующую команду: dd if=/dev/random of=random.txt count=1 bs=100 ; od random.txt

Утилита dd осуществит копирование одного блока (count=1) размером в 100 байт (bs=100) из специального файла /dev/random в файл ~/test/random.txt. Какие пояснения вы можете дать относительно возможностей специального файла /dev/random ?

Файл /dev/random выступает в качестве генератора случайных чисел вашей машины, работающей под управлением Linux.

5. Выполните две следующие команды и обратите внимание на первый символ вывода каждой из команд. ls -l /dev/sd* /dev/hd* ls -l /dev/tty* /dev/input/mou*

С помощью первой команды будет выведен список файлов блочных устройств, с помощью второй - список файлов символьных устройств. Что вы можете сказать по поводу различий между символьными и блочными устройствами.

Данные всегда записываются на блочные устройства (или читаются с них) блоками. В случае жестких дисков размер блоков обычно равен 512 байтам. Символьные устройства работают как источники или приемники потоков символов (или байт). Мышь и клавиатура являются типичными символьными устройствами.

6. Используйте команду cat для вывода содержимого файлов /etc/hosts и /etc/resolv.conf . Что вы думаете по поводу предназначения данных файлов?

Файл /etc/hosts содержит имена узлов с соответствующими им IP-адресами Файл /etc/resolv.conf должен содержать IP-адреса серверов имен DNS.

7. Хранятся ли какие-нибудь файлы в директории /etc/skel/ ? Не забудьте проверить наличие скрытых файлов.

Выполните команду "ls -al /etc/skel/". Да, в данной директории должны храниться скрытые файлы.

8. Выведите содержимое файла /proc/cpuinfo . Машину какой архитектуры вы используете для работы с Linux?

Данный файл должен содержать как минимум одну строку с названием модели центрального процессора производства компании Intel или какой-либо другой компании.

9. Выведите содержимое файла /proc/interrupts . Каков размер этого файла? Где хранится данный файл?

Размер файла равен нулю байт, но при этом файл содержит данные. Он не хранится где-либо на диске, так как в директорию /proc монтируется виртуальная файловая система, которая позволяет взаимодействовать с ядром ОС. (Ответ "файл хранится в оперативной памяти" также является верным...)

10. Можете ли вы перейти в директорию /root ? Есть ли в этой директории файлы (в том числе скрытые)?

Попытайтесь выполнить команду "cd /root". Директория /root не доступна для чтения обычными пользователями в большинстве современных дистрибутивов Linux.

11. Существуют ли бинарные файлы ifconfig, fdisk, parted, shutdown и grup-install в директории /sbin ? По какой причине эти бинарные файлы размещены в директории /sbin , а не в директории /bin ?

Да. Так как данные бинарные файлы должны использоваться исключительно системными администраторами.

12. Является ли /var/bin файлом или директорией? Как насчет /var/spool ?

По обоим путям расположены директории.

13. Откройте два эмулятора терминала (с помощью сочетания клавиш Ctrl+Shift+T в gnome-terminal) или терминала (с помощью сочетания клавиш Ctrl+Alt+F1, Ctrl+Alt+F2, ...) и выполните команду who am i в обоих. После этого попытайтесь передать слово из одного терминала в другой.

Терминал: tty-terminal: echo Hello > /dev/tty1 Эмулятор терминала: pts-terminal: echo Hello > /dev/pts/1

14. Прочитайте страницу руководства random и попытайтесь на основе полученной информации объяснить разницу между специальными файлами /dev/random и /dev/urandom .

Одним из самых сложных пунктов выбора, с которым вы столкнетесь при установке Linux и делении жесткого диска на разделы, таков: разместите ли вы директорию /home на отдельном разделе? Именно в ней проживают файлы пользователя – то есть личные документы и настройки учетной записи пользователя, а не файлы ОС, которые сидят в отдельных директориях. Некоторые дистрибутивы Linux рекомендуют учредить отдельный раздел, а некоторые по умолчанию все размещают в том же разделе. Как же поступить вам? Ответ зависит от того, как вы будете применять свой компьютер. Если вы планируете пробовать много разных дистрибутивов и часто устанавливаете новые поверх старых, тогда имеет смысл создать отдельный раздел /home .

Благодаря этому вы сможете делать с ОС все, что заблагорассудится – обновлять, понижать до более ранней версии или стереть и поставить случайно выбранный экзотический новый дистрибутив с Фарерских островов. Каким бы дистрибутивом Linux вы ни пользовались, ваши личные файлы всегда будут там, в целости и сохранности, на отдельной части диска. При известной осторожности можно даже иметь несколько дистрибутивов Linux на одном компьютере, и все они будут обращаться к одному и тому же разделу /home после загрузки. Но почему мы говорим об осторожности? Вспомните о настройках и файлах конфигурации. Скомандовав, например, ls -a в своей домашней директории, вы увидите огромное количество скрытых файлов и директорий, имена которых начинаются с точек – там содержатся настройки программ. Если вы попытаетесь использовать одинаковые настройки в разных версиях программы, программа может запутаться. Допустим, у вас на компьютере есть Дистрибутив A и Дистрибутив Б. Вы загружаете Дистрибутив А и запускаете FooProgram 2.0 в первый раз, и она создает папку с настройками.fooprogram/ в вашей домашней директории.Затем вы загружаете Дистрибутив Б при той же самой домашней директории и запускаете FooProgram – но на сей раз это будет версия 1.0. Она запутается из-за разницы в файлах настройки, что может привести к полной утрате или повреждению данных.

Потенциальные проблемы /home в Linux

Другая потенциальная проблема с отдельной директорией /home – ограничение по размеру. Если вы поместите все в один раздел, то и ОС, и домашние директории будут иметь доступ к свободному месту. Если вы поместите /home на отдельный раздел и места не будет хватать, вы не сможете просто взять место из раздела ОС (но если вы используете LVM, Logical Volume Manager , как это предлагается на стадии установки во многих дистрибутивах, вы преодолеете эту проблему, поскольку он поддерживает изменение размера разделов).

Однако у подхода, поддерживающего отдельный раздел, есть и плюсы, особенно сейчас, когда все популярнее и доступнее становятся диски SSD (твердотельные накопители). Поскольку они невероятно быстры по сравнению с вращающимися жесткими дисками, вы можете поместить файлы ОС на SSD, чтобы обеспечить быструю работу системы и время запуска приложений, а /home – на традиционный жесткий диск (в конце концов, вас не слишком заботит, долго ли будут грузиться документы LibreOffice или фотографии). Но для систем на обычных жестких дисках, если вы не собираетесь что ни день осваивать новый дистрибутив, мы рекомендуем подход «Размести все на одном разделе».

В "ОС" Linux вся файловая система имеет организованную, конкретную структуру. Начинающие пользователи, только пересевшие с Windows на , как правило, испытывают определенные трудности, в связи с отсутствием четкого представления о принадлежности каждой директории. Весь изложенный ниже материал, должен восполнить этот пробел.

Cтруктура каталогов Linux .

(Чтобы из таблицы переместиться к описанию директории, нужно кликнуть по названию директории. Чтобы вернуть страницу на верх, нужно кликнуть, в правом нижнем углу экрана, по квадратику со стрелочкой.)

Краткое описание.

/ корневой раздел

Корневой раздел.

В данной директории находится основной состав команд "ОС", к ним относятся команды оболочки и файловой системы: ls, cp и пр...

Это, хранилище образов ядер, а также, загрузчиков: Grub или Lilo и пр...

Здесь обитают файлы, относящиеся к определенным устройствам, подключенных к "ОС". Дело в том, что в операционной системе Linux , любое устройство ассоциируется с конкретным файлом, т.е. будь-то принтер, сканер, жесткий диск и пр., все должно иметь свой собственный файл, что бы получить необходимый доступ к тому или иному устройству.

Это, место хранения файлов конфигурации "ОС", например: параметры сети, пользователи, группы и такие приложения, как Apache, Samba и тд. и тп.

В этом каталоге может и даже более того, обязана находиться вся личная "инфа" пользователей. Вообще вы, как хозяин конкретной машины, имеете право держать свою "инфу" где хотите, но ради безопасности системы, лучше держать именно здесь, а саму директорию, желательно сформировать в независимый раздел жесткого диска.

/home/ username

Это тоже, домашняя папка, но только пользователя "username". Здесь сохраняются конфигурационные файлы настроек приложений и личная "инфа". Если пользователей много, то каждый имеет свой личный каталог для таких файлов. Есть еще папка суперпользователя "root", находящаяся в корне файловой системы. Такое разграничение директорий, от системных файлов, в разы увеличивает надежность и значительно облегчает процесс резервирования данных.

Сюда сбрасываются файлы, не имеющие ссылок из всех других директорий, не смотря на то, что их "inod" не имел метки "незадействованного". К примеру, вы удаляете файл, как в этот момент происходит обрыв электропитания. В следствие этого, в системе образуется потерявшийся "inod", который имеет пути к файлу, но файл-то отсутствует. Далее, в ext2 (нежурналируемая), "fsck" находит "inod", создает ссылку в lost+found, после чего, можно взглянуть на файл и все нормализовать. В ext3 (журналируемая), "fsck" анализирует журнал и определяет незавершенность операции, производя после этого "откат". Таким образом в журналируемых "ФС" затерявшихся inod(ов) имеется намного меньше.

В этом пространстве сосредоточены системные библиотеки, обеспечивающие работоспособность приложений, находящихся в /bin, /sbin и "ОС" глобально.

Предназначена для авто-монтирования устройств: USB, CD-ROM и т.д. При задействовании любого устройства, оно автоматом подключается в соответствующий каталог данной директории.

Эта директория фактически тоже, что и предыдущая /media, с той лишь разницей, что используетcя ручной тип подключения, а именно, когда выполняется команда "mount".

В этой площадке приживаются установленные приложения с большим размером или дополнительными пакетами, к примеру: /opt/libreoffice.org

Сюда примонтирована "procfs", виртуальная "ФС", с наличием множественной информации, которую можно получить. Допустим, нужно узнать какие модули ядра загружены, это будет файл - /proc/modules или же, получить сведения о процессоре - /proc/cpuinfo

Это домашний супер-пользовательский каталог. Данная директория идентична директории просто пользователя и находится в корне файловой системы. Если вдруг возникли проблемы с доступом к /home, то залогинившись с правами суперпользователя,
всегда можно решить данную проблему.

В системе имеются специальные программы для различных настроек и администрирования, им ведь тоже, где-то надо "жить".

Специфические параметры системы, в большинстве случаев пустует.

Эта директория получила применение начиная с ядра v_2.6 и в нее примонтируется "sysfs", с информацией о ядре, устройствах и драйверах.

Здесь находятся директории блочных устр-ств, которые имеются в системе в реальное время.

Перечень шин ядра: eisa, pci и тд. и тп.

Перечень группированных устр-ств по классификации: printer, scsi-devices и тд. и тп.

Это собрат папки "Temp" в Windows, для хранения временных файлов. Чтение и запись, доступны всем пользователям.

Место установленных пакетов программ, документации, кода ядра, X Window. Полностью доступна для "root", остальным запрещено, кроме чтения. К директории можно применить сетевое монтирование и статус общей для ряда компьютеров.

/usr/bin bin2

Местоположение дополнительных приложений для всех учетных записей.

Место обитания "развлекалок", одним словом, игры.

Заголовочные файлы С++.

/usr/lib lib2

Системные библиотеки для приложений в /usr.

В идеале /usr должен иметь статус "общий" и быть смонтирован по сети - /usr/local должен вмещать в себя пакеты приложений на локальном аппарате. Например: /usr - семейный бюджет, /usr/local - личные доходы.

В пакетной Ubuntu, как правило в /usr располагаются "родственные" пакеты, свои, а в /usr/local собранные из исходников, не имеющие отношения к какому-либо дистрибутиву конкретно.

Системные приложения дополнительного плана.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows