355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Брайан Уорд » Внутреннее устройство Linux » Текст книги (страница 4)
Внутреннее устройство Linux
  • Текст добавлен: 12 октября 2016, 01:40

Текст книги "Внутреннее устройство Linux"


Автор книги: Брайан Уорд



сообщить о нарушении

Текущая страница: 4 (всего у книги 30 страниц) [доступный отрывок для чтения: 11 страниц]

Наконец, вы можете указать набор прав доступа по умолчанию с помощью команды оболочки umask, которая применяет заранее определенный набор прав доступа к любому создаваемому новому файлу. В общем, применяйте команду umask 022, если вы желаете, чтобы каждый мог видеть все создаваемые вами файлы и каталоги, или команду umask 077 в противном случае. Вам необходимо поместить команду umask с указанием желаемого режима в один из файлов запуска системы, чтобы новые права доступа по умолчанию применялись в следующих сеансах работы (см. главу 13).

2.17.2. Символические ссылки

Символическая ссылка – это файл, который указывает на другой файл или каталог, создавая, по сути, псевдоним (подобно ярлыку в Windows). Символические ссылки обеспечивают быстрый доступ к малопонятным путям каталогов.

В длинном списке каталогов символические ссылки будут выглядеть примерно так (обратите внимание на символ l, указанный в режиме файла в качестве типа файла):

lrwxrwxrwx 1 ruser users 11 Feb 27 13:52 somedir -> /home/origdir

Если вы попытаетесь получить доступ к каталогу somedir в данном каталоге, система выдаст вам вместо этого каталог /home/origdir. Символические ссылки являются лишь именами, указывающими на другие имена. Их названия, а также пути, на которые они указывают, не обязаны что-либо значить. Так, например, каталог /home/origdir может и вовсе отсутствовать.

В действительности, если каталог /home/origdir не существует, любая команда, которая обратится к каталогу somedir, сообщит о том, что его нет (кроме команды ls somedir, которая проинформирует вас лишь о том, что каталог somedir является каталогом somedir). Это может сбивать с толку, поскольку вы прямо перед собой видите нечто с именем somedir.

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

2.17.3. Создание символических ссылок

Чтобы создать символическую ссылку от цели target к имени ссылки linkname, воспользуйтесь командой ln -s:

$ ln -s target linkname

Аргумент linkname является именем символической ссылки, аргумент target задает путь к файлу или каталогу, к которому ведет ссылка, а флаг -s определяет символическую ссылку (см. следующее за этим предупреждение).

При создании символической ссылки перепроверьте команду перед ее запуском. Например, если вы поменяете аргументы местами (ln –s linkname target), то возникнет забавная ситуация, если каталог linkname уже существует. Когда такое происходит (а это случается часто), команда ln создает ссылку с именем target внутри каталога linkname, и эта ссылка указывает на себя, если только linkname не является полным путем. Когда вы создаете символическую ссылку на каталог, проверьте его на наличие ошибочных символических ссылок и удалите их.

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

внимание

Не забывайте о параметре -s при создании символической ссылки. Без него команда ln создает жесткую ссылку, присваивая дополнительное реальное имя тому же файлу. У нового имени файла тот же статус, что и у старого: оно непосредственно связывает с данными, а не указывает на другое имя файла, как это делает символическая ссылка. Жесткие ссылки могут запутать сильнее, чем символические. Пока вы не усвоите материал раздела 4.5, избегайте применять их.

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

2.18. Архивирование и сжатие файлов

После того как вы узнали о файлах, правах доступа и возможных ошибках, вам необходимо освоить команды gzip и tar.

2.18.1. Команда gzip

Команда gzip (GNU Zip) – одна из стандартных команд сжатия файлов в системе Unix. Файл, имя которого оканчивается на .gz, является архивом в формате GNU Zip. Используйте команду gunzip file.gz для декомпрессии файла <file>.gz и удаления суффикса из названия; для сжатия применяйте команду gzip file.

2.18.2. Команда tar

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

$ tar cvf archive.tar file1 file2 ...

Архивы, созданные с помощью команды tar, обычно снабжены суффиксом .tar (по договоренности; он не является необходимым). В приведенном выше примере команды параметры file1, file2 и т. д. являются именами файлов и каталогов, которые вы желаете упаковать в архив <archive>.tar. Флаг c активизирует режим создания. У флагов v и f более специфичные роли.

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

Флаг f обозначает файл-параметр. Следующий после этого флага аргумент в командной строке должен быть именем файла-архива, который создаст команда tar (в приведенном выше примере это файл <archive>.tar). Вы всегда должны использовать этот параметр, указывая за ним имя файла (исключая вариант работы с накопителями на магнитной ленте). Для применения стандартных ввода и вывода введите дефис (-) вместо имени файла.

Распаковка файлов tar

Чтобы распаковать файл .tar с помощью команды tar, используйте флаг x:

$ tar xvf archive.tar

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

примечание

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

Режим содержания

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

При проверке архива в режиме t убедитесь в том, что все расположено внутри разумной структуры каталогов, то есть все пути файлов в архиве должны начинаться с одного названия каталога. Если вы не уверены в этом, создайте временный каталог, перейдите в него, а затем выполните распаковку. Вы всегда сможете использовать команду mv * .., если архив не распаковался в виде хаоса.

При распаковке подумайте о возможности применить параметр p, чтобы сохранить права доступа. Используйте его в режиме распаковки, чтобы переопределить параметры команды umask и получить в точности те же права доступа, которые указаны в архиве. Параметр p применяется по умолчанию при работе в учетной записи superuser. Если у вас в качестве superuser-пользователя возникают сложности с правами доступа и владения при распаковке архива, дождитесь завершения работы команды и появления приглашения оболочки. Хотя вам может понадобиться извлечь лишь малую часть архива, команда tar должна обработать его полностью. Вам не следует прерывать этот процесс, поскольку команда выполняет назначение прав доступа только после проверки всего архива.

Выучите все параметры и режимы команды tar, которые упомянуты в этом разделе. Если для вас это сложно, выпишите их на карточки-подсказки – при работе с данной командой очень важно не допускать ошибок по небрежности.

2.18.3. Сжатые архивы (.tar.gz)

Начинающих пользователей часто смущает факт, что архивы обычно являются сжатыми, а их имена заканчиваются на .tar.gz. Чтобы распаковать сжатый архив, действуйте справа налево: сначала избавьтесь от суффикса .gz, а затем займитесь суффиксом .tar. Например, приведенные ниже команды производят декомпрессию и распаковку архива <file>.tar.gz:

$ gunzip file.tar.gz

$ tar xvf file.tar

Поначалу вы можете выполнять эту процедуру пошагово, запуская сначала команду gunzip для декомпрессии, а затем – команду tar для проверки и распаковки архива. Чтобы создать сжатый архив, выполните действия в обратном порядке: сначала запустите команду tar, а затем – gzip. Делайте это достаточно часто, и вскоре вы запомните, как работают процедуры архивации и сжатия.

2.18.4. Команда zcat

Описанный выше метод не является самым быстрым или наиболее эффективным при вызове команды tar для работы со сжатым архивом. Он расходует дисковое пространство и время ядра, затрачиваемое на ввод/вывод. Лучший способ заключается в комбинации функций архивирования и компрессии в виде конвейера. Например, данная команда-конвейер распаковывает файл <file>.tar.gz:

$ zcat file.tar.gz | tar xvf —

Команда zcat равносильна команде gunzip -dc. Параметр -d отвечает за декомпрессию, а параметр -c отправляет результат на стандартный вывод (в данном случае команде tar).

Поскольку использование команды zcat стало общепринятым, у версии команды tar, входящей в систему Linux, есть ярлык-сокращение. Можно применять в качестве параметра z, чтобы автоматически задействовать команду gzip. Это срабатывает как при извлечении архива (как в режимах x или t у команды tar), так и при создании (с параметром c). Используйте, например, следующую команду, чтобы проверить сжатый архив:

$ tar ztvf file.tar.gz

Вам следует хорошо освоить длинный вариант команды, прежде чем применять сокращение.

примечание

Файл .tgz – это то же самое, что и файл .tar.gz. Суффикс приспособлен для использования в файловых системах FAT (на основе MS-DOS).

2.18.5. Другие утилиты сжатия

Еще одной командой для компрессии в системе Unix является bzip2, которая создает файлы, оканчивающиеся на .bz2. Работая чуть медленнее по сравнению с gzip, команда bzip2 зачастую сжимает текстовые файлы немного лучше и поэтому чрезвычайно популярна при распространении исходного программного кода. Для декомпрессии следует использовать команду bunzip2, а параметры для обоих компонентов довольно похожи на параметры команды gzip, так что вам не придется учить ничего нового. Для команды tar параметром компрессии/декомпрессии в режиме bzip2 является символ j.

Новая команда для сжатия под названием xz также приобретает популярность. Соответствующая ей команда декомпрессии называется unxz, а ее аргументы сходны с параметрами команды gzip.

В большинстве дистрибутивов системы Linux присутствуют команды zip и unzip, которые совместимы с ZIP-архивами Windows. Они работают как с обычными файлами .zip, так и с самораспаковывающимися архивами, файлы которых оканчиваются на .exe. Однако если вам встретится файл, который оканчивается на .Z, то вы обнаружили реликт, который был создан командой, бывшей когда-то стандартом для системы Unix. Команда gunzip способна распаковать такие файлы, однако создать их с помощью gzip невозможно.

2.19. Основные сведения об иерархии каталогов Linux

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

На рис. 2.2 представлен упрощенный вариант иерархии каталогов, в котором показано несколько каталогов внутри /, /usr и /var. Обратите внимание на то, что внутри каталога /usr есть такие же названия, как и в каталоге /.

Рис. 2.2. Иерархия каталогов Linux

Наиболее важные подкаталоги в корневом каталоге таковы.

• /bin. Содержит готовые к запуску команды (известные также как исполняемые файлы), включая большинство основных команд системы Unix, таких как ls и cp. Большинство команд в каталоге /bin представлено в двоичном формате, поскольку они созданы компилятором языка C, однако в современных системах некоторые команды являются сценариями оболочки.

• /dev. Содержит файлы устройств (о них подробнее – в главе 3).

• /etc. Этот центральный каталог системной конфигурации содержит пароль пользователя, файлы загрузки, файлы устройств, сетевые настройки и другие параметры. Многие элементы каталога /etc зависят от аппаратного обеспечения. Например, каталог /etc/X11 содержит конфигурацию видеокарты и «оконного» интерфейса.

• /home. Содержит личные каталоги обычных пользователей. В большинстве версий системы Unix соблюдается этот стандарт.

• /lib. Название является сокращением слова library («библиотека»). Этот каталог содержит файлы библиотек, хранящие программный код, который может быть применен исполняемыми файлами. Существуют два типа библиотек: статические и используемые совместно. Каталог /lib должен содержать только библиотеки для совместного пользования. Другие каталоги библиотек, например /usr/lib, содержат оба типа, а также другие вспомогательные файлы (более подробно мы рассмотрим совместно используемые библиотеки в главе 15).

• /proc. Этот каталог представляет системную статистику в виде интерфейса «каталог-файл». Основная часть структуры подкаталога /proc является уникальной для Linux, однако во многих других вариантах системы Unix присутствуют подобные функции. Каталог /proc содержит информацию о запущенных в данный момент процессах, а также о некоторых параметрах ядра.

• /sys. Данный каталог подобен каталогу /proc тем, что он предоставляет интерфейс устройствам и системе (подробнее о каталоге /sys вы узнаете из главы 3).

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

• /tmp. Хранилище для небольших временных файлов, о которых вам не стоит особо беспокоиться. Любой пользователь может выполнять чтение и запись в этом каталоге, однако доступ к файлам другого пользователя может быть запрещен. Многие команды применяют данный каталог в качестве рабочего пространства. Не помещайте что-либо важное в каталог /tmp, поскольку в большинстве систем происходит его очистка при запуске системы, а некоторые системы даже периодически удаляют из него старые файлы. Не позволяйте также наполнять каталог /tmp всяким хламом, поскольку выделенное на него место обычно совместно используется еще каким-либо важным компонентом (например, остальными частями корневого каталога).

• /usr. Хотя название этого каталога произносится как user («пользователь»), он не хранит никаких пользовательских файлов. Вместо этого содержит обширную иерархию каталогов, включающую основную часть системы Linux. Многие имена каталогов здесь такие же, как и в корневом каталоге (типа /usr/bin и /usr/lib), и содержат те же типы файлов. Причина, по которой корневой каталог не содержит систему полностью, главным образом историческая – в прошлом это было необходимо, чтобы корневой каталог не занимал много дискового пространства.

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

2.19.1. Другие корневые подкаталоги

В корневом каталоге есть несколько интересных подкаталогов.

• /boot. Содержит файлы загрузчика ядра. Эти файлы имеют отношение только к самой первой стадии запуска системы Linux. В этом каталоге вы не найдете сведений о том, как система Linux запускает свои службы (загляните в главу 5 за подробностями).

• /media. Основная точка подключения для таких съемных устройств, как флеш-накопители. Присутствует во многих версиях системы.

• /opt. Здесь может находиться дополнительное ПО сторонних разработчиков. Многие версии системы не используют каталог /opt.

2.19.2. Каталог /usr

На первый взгляд каталог /usr может показаться довольно простым, однако быстрый просмотр подкаталогов /usr/bin и /usr/lib выявляет множество подробностей.

Каталог /usr предназначен для хранения большей части команд и данных пространства пользователя. Помимо подкаталогов /usr/bin, /usr/sbin и /usr/lib, каталог /usr содержит следующее.

• /include. Хранит заголовочные файлы, используемые компилятором C.

• /info. Содержит руководства GNU в формате info (см. раздел 2.13).

• /local. Здесь администраторы могут устанавливать собственное программное обеспечение. Структура этого каталога должна выглядеть подобно структуре каталогов / и /usr.

• /man. Содержит страницы руководства.

• /share. Содержит файлы, которые должны работать в других типах систем Unix без потери функциональности. В прошлом объединенные в сеть машины могли совместно использовать данный каталог, однако полноценный каталог /share становится редким, поскольку современные диски не содержат ошибок при распределении пространства. Поддержание каталога /share зачастую только добавляет проблем. В любом случае каталоги /man, /info и некоторые другие подкаталоги часто присутствуют здесь.

2.19.3. Местоположение ядра

В системе Linux ядро обычно размещается в каталогах /vmlinuz или /boot/vmlinuz. Загрузчик системы загружает этот файл в память и приводит его в действие при запуске системы (подробности о загрузчике вы найдете в главе 5).

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

2.20. Запуск команд с правами пользователя superuser

Прежде чем продвигаться дальше, вам следует узнать о том, как запускать команды в качестве пользователя superuser. Вероятно, вы уже знаете о том, что можно запустить команду su и указать пароль для входа в корневую оболочку. Такой вариант сработает, но у него есть некоторые неудобства:

• вы не отслеживаете команды, которые изменяют систему;

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

• у вас нет доступа к обычной среде оболочки;

• вы должны вводить пароль.

2.20.1. Команда sudo

В большинстве дистрибутивов применяется пакет sudo, который позволяет администраторам запускать команды в корневом режиме, зайдя в систему со своей учетной записью. Например, из главы 7 вы узнаете об использовании команды vipw для редактирования файла /etc/passwd. Это можно выполнить так:

$ sudo vipw

При таком запуске команда sudo отмечает данное действие с помощью сервиса syslog в устройстве local2. Подробности о системных журналах изложены в главе 7.

2.20.2. Файл /etc/sudoers

Система не позволит любому пользователю запускать команды в качестве пользователя superuser. Вы должны настроить права таких привилегированных пользователей в файле /etc/sudoers. Пакет sudo обладает множеством параметров (которые, вероятно, вы никогда не станете применять), вследствие чего синтаксис файла /etc/sudoers довольно сложен. Так, приведенный ниже фрагмент позволяет пользователям user1 и user2 запускать любую команду в качестве корневого пользователя, не вводя при этом пароль:

User_Alias ADMINS = user1, user2

ADMINS  ALL = NOPASSWD: ALL

root    ALL=(ALL) ALL

В первой строке для двух пользователей определен псевдоним ADMINS, а во второй строке им предоставляются права доступа. Фрагмент ALL = NOPASSWD: ALL означает, что пользователи с псевдонимом ADMINS могут использовать пакет sudo для выполнения команд в корневом режиме. Второе слово ALL значит «любая команда». Первое слово ALL обозначает «любой хост».

ПРИМЕЧАНИЕ

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

Фрагмент root ALL=(ALL) ALL означает, что пользователь superuser может также использовать пакет sudo для запуска любой команды на любом хосте. Дополнительный параметр (ALL) означает, что пользователь superuser может также запускать команды как и любой другой пользователь. Можно распространить это право на пользователей ADMINS, добавив параметр (ALL) в строку файла /etc/sudoers, как отмечено ниже символом :

ADMINS ALL = (ALL) NOPASSWD: ALL

примечание

Воспользуйтесь командой visudo для редактирования файла /etc/sudoers. Эта команда проверяет отсутствие синтаксических ошибок после сохранения файла.

Если вам необходимо использовать более продвинутые функции команды sudo, обратитесь к страницам sudoers(5) и sudo(8). Подробности механизма переключения между пользователями рассмотрены в главе 7.

2.21. Заглядывая вперед

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

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

1 В оригинале игра слов, основанная на сходстве произношения фамилии Bourne и слова born («рожденный»). – Примеч. пер.


    Ваша оценка произведения:

Популярные книги за неделю