20 сент. 2000 г.

Азы linux (для детей) урок 18

Ориентация в файловой системе

  Когда вы хотите, чтобы система выполнила команду, вам почти никогда не надо давать полный путь к этой команде. Например, мы знаем, что команда ls находится в каталоге /bin (проверьте командой which -a ls), тем не менее, мы не обязаны вводить команду /bin/ls в компьютер, чтобы получить список содержимого текущей директории.
Дело в том, что об этом заботится переменная окружения PATH. В ней перечисляются те каталоги системы, где могут быть найдены исполняемые файлы, что освобождает пользователя от излишнего ввода символов и запоминания местонахождения команд. Естественно PATH (путь) содержит множество каталогов, обычно содержащих где-то в своих именах bin, что показано ниже. Команда echo используется для отображения содержимого ("$") переменной PATH:
rogier:> echo $PATH
/opt/local/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin/:/bin
В этом примере, каталоги /opt/local/bin, /usr/X11R6/bin, /usr/bin, /usr/sbin и /bin являются местами последовательного поиска нужной программы. Как только она найдена, поиск останавливается, даже если еще не каждый каталог в path проверен. Это может привести к странным ситуациям. В первом примере ниже пользователь знает, что есть программа под названием sendsms для отправления SMS сообщений, и другой пользователь в той же самой системе может ей пользоваться, но не первый пользователь. Разница заключается в конфигурации переменной PATH:
[jenny@blob jenny]$ sendsms
bash: sendsms: command not found
[jenny@blob jenny]$ echo $PATH
/bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/home/jenny/bin
[jenny@blob jenny]$ su - tony
Password:
tony:~>which sendsms
sendsms is /usr/local/bin/sendsms

tony:~>echo $PATH
/home/tony/bin.Linux:/home/tony/bin:/usr/local/bin:/usr/local/sbin:\
/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin
Обратите внимание на использование средства su (переключение пользователей), которое позволяет запускать shell в среде другого пользователя, конечно при условии, что вы знаете пароль этого пользователя.
Обратная косая черта обозначает продолжение данной строки на другую и игнорирует разделение с помощью клавиши Enter.
В следующем примере, пользователь хочет вызвать команду wc (количество слов), чтобы проверить количество строк в файле, но ничего не происходит, и он вынужден прервать ее работу, используя комбинацию Ctrl + C:
jumper:~> wc -l test

(Ctrl-C)
jumper:~> which wc
wc is hashed (/home/jumper/bin/wc)

jumper:~> echo $PATH
/home/jumper/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin
Использование команды which показывает нам, что у этого пользователя есть bin-каталог в его домашней директории, содержащей программу также под названием wc. Поскольку программа в домашнем каталоге находится первой при просмотре путей при вызове wc, выполняется эта «самодельная» программа, которая, вероятно, не понимает ввод, поэтому потребовалось ее завершить. Для решения проблем подобного рода есть несколько способов (вообще в UNIX/Linux всегда есть несколько вариантов решения проблем): одно решение — это переименовать программу wc пользователя, или пользователь может вводить полный путь к требуемой ему команде, который можно определить, используя опцию -a команды which.
Однако, если пользователь чаще использует программы из других каталогов, то может изменить последовательность просмотра каталогов на свой собственный вариант:
jumper:~> export PATH=/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\
/usr/bin:/usr/sbin:/bin:/sbin:/home/jumper/bin
Изменения не постоянны!
Обратите внимание, что при использовании в командной строке команды export, изменения носят временный характер и действуют только в данной сессии (до выхода). Открытие новой сессии (даже если текущая первая по прежнему работает) не приводи к наличию в ней новых путей. Мы увидим в Разделе "Ваше текстовое окружение", как можно сделать такого рода изменения окружения постоянными, путем добавления этих строк в конфигурационные файлы оболочки.

Абсолютные и относительные пути

Путь, по которым вы должны следовать в древовидной структуре, чтобы получить заданный файл, может быть описан, начиная от ствола дерева (/ или корневого каталога). В этом случае путь начинается со слэша и называется абсолютным путем, поскольку не может быть никакого заблуждения: только один файл в системе может подойти под него.
В другом случае, путь не начинается со слэша и возможна путаница по сравнению с предыдущим вариантом между ~/bin/wc (в домашнем каталоге пользователя) и bin/wc в /usr. Пути, которые не начинаются со слэша всегда относительные.
В относительных путях мы также используем . и .., указывающие на текущий и родительский каталоги. Пара практических примеров:
  • Если вы хотите компилировать исходный код, документация к установке часто инструктирует вас выполнить команду ./configure, которая запускает программу configure, расположенную в текущем каталоге (и которая поставляется с новым кодом), а ни где-то в другом месте системы.
  • В файлах HTML, относительных пути часто используются, чтобы сделать ряд страниц, легко переносимыми в другое место:
<img alt="Garden with trees" src="../images/garden.jpg">
  • Обратите внимание на различие еще раз:
theo:~> ls /mp3
ls: /mp3: No such file or directory
theo:~> ls mp3/
oriental/  pop/  sixties/

Наиболее важные файлы и каталоги

Ядро

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

Оболочка (Shell)

Что такое shell?

Когда я смотрела соответствующее разъяснение по концепции оболочки, это дало мне больше хлопот, чем я ожидала. Все доступные определения, от простого сравнения, что "оболочка - это руль автомобиля", к расплывчатому определению в руководстве Bash, где говорится, что "bash является sh-совместимым интерпретатором командного языка", до еще более неясного выражения "оболочка управляет взаимодействием между системой и ее пользователями". Shell гораздо больше, чем все это.
Самым лучшим сравнением для оболочки может быть представление о способе общения с компьютером, сравнение оболочки с языком. Большинство пользователей знают другой «язык», это язык «укажи-и-щелкни» графического рабочего стола. Но на этом языке компьютер задает беседу, а пользователю отведена пассивная роль выбора задач их тех, что представлены. Для программиста очень трудно включить в GUI-формат все опции и способы применения команд. Поэтому графические интерфейсы почти всегда менее способные, чем команды, стоящие за ним.
Оболочка, с другой стороны, это расширенный способ общения с системой, поскольку она позволяет вести двустороннюю беседу и проявлять инициативу. Оба партнера в сообщении равны, так что могут быть проверены новые идеи. Оболочка позволяет пользователю очень гибко управлять системой. Дополнительным преимуществом является то, что оболочка позволяет автоматизировать задачи.

Типы оболочек

Так же как люди знают различных языки и диалекты, компьютеру известны различные типы оболочек:
  • sh или Bourne Shell: первая оболочка, которая до сих пор используются в системах UNIX. Это базовая оболочка, представляющая собой небольшую программу с незначительным числом функций. В POSIX-совместимом режиме bash будет эмулировать эту оболочку.
  • bash или Bourne Again Shell: стандартная оболочка GNU, интуитивно понятная и гибкая. Наиболее предпочтительная для начинающих пользователей, и в то же время являющаяся мощным инструментом для опытных и профессиональных пользователей. На Linux bash – это стандартная оболочка обычных пользователей. Эта оболочка является так называемой расширенной Bourne shell, с множеством дополнений и плагинов. Это означает, что Bourne Again SHell совместима с Bourne shell: команды, которые работают в sh, также работают в bash. Однако, обратное не всегда соответствует действительности. Все примеры и упражнения в этой книге приведены с использованием bash.
  • csh или C Shell: синтаксис этой оболочки напоминает синтаксис языка программирования Си. Иногда используется программистами.
  • tcsh или Turbo C Shell: расширенный вариант обычной C Shell, обеспечивает большее удобство и скорость.
  • ksh или оболочка Корна: иногда ценится людьми с опытом работы в UNIX. Расширение оболочки Борна; в стандартной конфигурации – кошмар для начинающих пользователей.
Файл /etc/shells дает обзор известных системе Linux оболочек:
mia:~> cat /etc/shells
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh
Хитрость оболочки Борна.
Обратите внимание, что /bin/sh, как правило, ссылка на Bash, которая будет при вызове по этому пути выполнять в оболочке Борна совместимый режим.
Ваша оболочка, которая используется по умолчанию, описывается в файле /etc/passwd, подобно этой строке для пользователя mia:
mia:L2NOfqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash
Чтобы перейти из одной оболочки в другую, просто введите название новой оболочки в активном терминале. Система находит каталог, где встречается это имя с помощью установок PATH, и поскольку оболочка является исполняемым файлом (программой), текущая оболочка активирует ее, после чего она запустится. Обычно это отражает новое приглашение, т.к. у каждой оболочки оно имеет типичный внешний вид:
mia:~> tcsh
[mia@post21 ~]$

Какую оболочку я использую?

Если вы не знаете, какую оболочку используете, либо проверьте строку для вашей учетной записи в /etc/passwd, либо введите команду
echo $SHELL

Ваш домашний каталог

Ваш каталог является вашим местонахождением по умолчанию при подключении к системе. В большинстве случаев это подкаталог /home, хотя это можно изменить. Ваш домашний каталог может находиться на жестком диске удаленного файлового сервера, в этом случае домашнюю директорию можно найти в /nethome/your_user_name. В другом случае системный администратор может сделать выбор в пользу менее понятной схемы и ваша домашняя директория может оказаться на /disk6/HU/07/jgillard.
Каким бы ни был путь к вашей домашней директории, вы не должны слишком беспокоиться об этом. Правильный путь к вашей домашней директории хранится в переменной окружения HOME на случай, если какой-нибудь программе это потребуется. С помощью команды echo вы можете вывести на экран содержимое этой переменной:
orlando:~> echo $HOME
/nethome/orlando
В вашем домашнем каталоге вы можете делать все, что вам нравится. Вы можете поместить любое количество файлов в такое количество каталогов, как вам захочется, хотя, естественно, общий объем данных и файлов ограничивается размерами разделов и иногда тем, что системный администратор применил квоты для системы. Ограничение использования дискового пространства было обычной практикой, когда память на жестком диске оставалась дорогой. В наши дни такие ограничения встречаются почти исключительно в больших средах. Вы можете выяснить для себя, устанавливается ли ограничение с помощью команды quota:
pierre@lamaison:/> quota -v
Diskquotas for user pierre (uid 501): none
В случае, если квоты были установлены, вы получите список разделов, на которые распространяются ограничения, и размер последних. Превышение пределов может быть допущено во время льготного периода с меньшими ограничениями или их отсутствием. Детальную информацию можно получить с помощью команд info quota или man quota.
Нет Quota?
Если ваша система не может найти quota, то никаких ограничений в отношении использования файловой системы не применяется.
Ваш домашний каталог обозначается символом тильды (~), это сокращение для /path_to_home/user_name (домашнего каталога пользователя). Этот же путь хранится в переменной HOME, так что вам не нужно набирать лишнее для перехода в домашний каталог. Простое применение: переход из /var/music/albums/arno/2001 в images в вашем домашнем каталоге с помощью одной элегантной команды:
rom:/var/music/albums/arno/2001> cd ~/images

rom:~/images> pwd
/home/rom/images
Далее в этой главе мы поговорим о командах для управления файлами и каталогами, все это поможет сохранить порядок в вашем домашнем каталоге.

Наиболее важные конфигурационные файлы

Как мы уже отмечали ранее, подавляющее большинство конфигурационных файлов хранятся в директории /etc. Содержание файлов может быть просмотрено с помощью команды cat, которая отправляет текст файлов на стандартный вывод (обычно ваш монитор). Синтаксис прямо вперед вами:
cat file1 file2 ... fileN
В этом разделе мы постараемся дать обзор наиболее распространенных конфигурационных файлов. Это, конечно, не полный список. Добавление дополнительных пакетов может также привести к добавлению дополнительных файлов конфигурации в /etc. При чтении конфигурационных файлов, вы увидите, что они, как правило, очень хорошо прокомментированы и не требуют пояснений. У некоторых файлов также имеются man-страницы, которые содержат дополнительную документацию, например man group.
Таблица 3.3. Большинство распространенных конфигурационных файлов
Файл Информация/служба
aliases Файл почтовых псевдонимов для использования с почтовыми серверами Sendmail и Postfix. Запуск почтового сервера на каждой системе давно стал обычным делом в мире UNIX, и почти каждый дистрибутив Linux по-прежнему поставляется с пакетом Sendmail. В этом файле локальные имена пользователей сопоставляются с реальными именами, которые имеют место в E-mail адресах или других локальных адресах.
apache Config-файлы для веб-сервера Apache.
bashrc Общесистемный конфигурационный файл для Bourne Again Shell. Определяет возможности и псевдонимы для всех пользователей. У других оболочек могут быть свои собственные общесистемные конфигурационные файлы, к примеру cshrc.
Каталоги crontab и cron.* Настройка задач, которые должны периодически выполняться - резервное копирование, обновления баз данных системы, очистка системы, изменяющиеся журналы и т.д
default Параметры по умолчанию для некоторых команд, таких как useradd.
filesystems Известные файловые системы: ext3, vfat, iso9660 и т.д.
fstab Список разделов и их точек монтирования.
ftp* Настройка FTP-сервера: кто может подключаться, какие части системы доступны и т.д.
group Файл конфигурации для пользовательских групп. Используйте теневые утилиты groupadd, groupmod и groupdel для редактирования этого файла. Редактируйте вручную, только если точно знаете, что делаете.
hosts Список машин, с которыми можно связаться по сети, но без использования службы доменных имен. Это не имеет ничего общего с сетевой конфигурацией системы, которая настраивается в /etc/sysconfig.
inittab Информация для загрузки: режим, количество текстовых консолей и т.д.
issue Информация о дистрибутиве (версия и/или информация о ядре).
ld.so.conf Места файлов библиотек.
lilo.conf, silo.conf, aboot.conf и т.д. Загрузочная информации для LInux LOader, системы для загрузки, которую в настоящее время постепенно вытесняет GRUB.
logrotate.* Ротация журналов, система предотвращения накопления огромного количества лог-файлов.
mail Каталог, содержащий инструкции для деятельности почтового сервера.
modules.conf Конфигурация модулей, которые включают специальные функции (драйвера).
motd Сообщение дня. Показывается каждому, кто подключается к системе (в текстовом режиме), может быть использована системным администратором для объявления о техническом обслуживании системы и т.д.
mtab Смонтированные в данный момент файловые системы. Рекомендуется никогда не редактировать этот файл.
nsswitch.conf Order in which to contact the name resolvers when a process demands resolving of a host name.
pam.d Конфигурация модулей аутентификации.
passwd Список локальных пользователей. Используйте теневые утилиты useradd, usermod и userdel для редактирования этого файла. Правьте вручную только, когда действительно знаете что делаете.
printcap Устаревший, но по-прежнему часто используемый файл конфигурации принтера. Не изменяйте его вручную, если точно не знаете, что делаете.
profile Система расширенной конфигурации среды shell: переменные, свойства по умолчанию новых файлов, ограничение ресурсов и т.д.
rc* Каталоги, определяющие активные службы для каждой запущенной ступени.
resolv.conf Последовательность, в которой связываются с DNS-серверами (только серверы доменных имен).
sendmail.cf Главный конфигурационный файл сервера Sendmail.
services Соединения, принятые на этой машине (открытые порты).
sndconfig или sound Настройка звуковой карты и звуковых событий.
ssh Каталог, содержащий конфигурационные файлы для защиты оболочки клиента или сервера.
sysconfig Каталог, содержащий системные конфигурационные файлы: мышь, клавиатура, сеть, рабочий стол, системные часы, управление питанием т.д. (характерно для RedHat).
X11 Параметры графического сервера, X. RedHat использует XFree, что находит отражение в имени основного конфигурационного файла, XFree86Config. Также содержит общие каталоги оконных менеджеров, имеющихся в системе, например, gdm, fvwm, twm и т.д
xinetd.* или inetd.conf Конфигурационные файлы для Интернет-сервисов, that are run from the system's (extended) Internet services daemon (servers that don't run an independent daemon).
В данном руководстве мы узнаем больше об этих файлах и изучим в деталях некоторые из них.

Наиболее распространенные устройства

Устройства, под которыми обычно понимается все, что принадлежит периферии ПК, что не является самим процессором, представлены в системе как запись в каталоге /dev. Одним из преимуществ этого UNIX-способа управления устройствами является то, что ни пользователю, ни системе не нужно беспокоиться о спецификации устройств.
Пользователи, которые не знакомы с Linux или UNIX в целом, часто перегруженные количеством новых имен и понятий, должны учиться. Поэтому приведем список обычных устройств, описанных в этом введении.
Таблица 3.4. Основные устройства
Имя Устройство
cdrom CD привод
console Специальный вход для используемой в настоящее время консоли.
cua* Последовательные порты
dsp* Устройства для оцифровки и записи
fd* Записи для большинства видов гибких дисков, по умолчанию это /dev/fd0, дисковод для дискет по 1,44 Мбайт.
hd[a-t][1-16] Стандартная поддержка дисков IDE с максимальным количеством разделов для каждого.
ir* Инфракрасные устройства
isdn* Управление соединением ISDN
js* Джойстики
lp* Принтеры
mem Память
midi* MIDI-плеер
mixer* и music Идеализированная модель миксера (смешивает или добавляет сигналы)
modem Модем
mouse (также msmouse, logimouse, psmouse, input/mice, psaux) Все виды мышей
null Бездонный ящик для мусора
par* Записи для поддержки параллельных портов
pty* Псевдотерминалы
radio* Для радиолюбителей (HAM).
ram* Загрузочное устройство
sd* SCSI диски с их разделами
sequencer Для аудио приложений, использующих особенности синтезатора звуковой карты (контроллер MIDI-устройства).
tty* Виртуальные консоли моделирования терминалов vt100.
usb* USB карта и сканер.
video* Для использования с графической картой, поддерживающей видео.

Наиболее распространенные временные файлы

В каталоге /var мы находим множество каталогов, предназначенных для хранения особых непостоянных данных (в отличие от конфигурационных файлов системы, которые меняют сравнительно редко или никогда вообще). Все файлы, которые часто изменяются, например, лог-файлы, почтовые ящики, заблокированные файлы, очередь печати и т.д., хранятся в подкаталоге /var.
В качестве меры безопасности эти файлы обычно хранят отдельно от основных системных файлов, поэтому мы можем закрыть на них глаза, а где нужно устанавливать более строгие разрешения. Многие из этих файлов также требуют больше прав, чем обычно, как /var/tmp, который должен быть доступен для записи для всех. Основную массу пользовательской активности можно обнаружить именно здесь, которая даже может генерироваться анонимными интернет-пользователями, подключенными к вашей системе. Это одна из причин, почему каталог /var, включая все его подкаталоги, обычно делают на отдельном разделе. Таким образом, например, пытаются избежать риска, ведь может случиться почтовая бомба, заполняющая свободную часть файловой системы, содержащей более важные данные, такие как ваши программы и файлы конфигурации.
/var/tmp и /tmp
Файлы в /tmp могут быть удалены без уведомления в процессе выполнения очередных задач системы или в результате перезагрузки. В некоторых (индивидуально настроенных) системах /var/tmp может вести себя непредсказуемо. Тем не менее, поскольку это не так по умолчанию, мы рекомендуем использовать директорию /var/tmp для сохранения временных файлов. Если есть сомнения, обратитесь к системному администратору. Если вы управляете вашей системой сами, то можете быть уверены в безопасности этого места, если целенаправленно не изменяли настройки для /var/tmp (с правами администратора, обычный пользователь этого сделать не может).
Что бы вы не делали, старайтесь придерживаться привилегий, предоставленных обычному пользователю - не сохраняйте файлы непосредственно в корневой каталог (/) файловой системы, не помещайте их в каталог /usr или или его подкаталог или в другое непредназначенное место. Это в значительной степени ограничивает ваш доступ к безопасной файловых систем.
Одной из основных систем безопасности в UNIX, и конечно в каждом дистрибутиве Linux, является журнал учета объектов, который записывает все действия пользователя, процессы, системные события и т.д. Файл конфигурации так называемого syslogdaemon определяет, какая и как долго вошедшая информация будет храниться. По умолчанию все журналы находятся в каталоге /var/log, содержащем различные файлы журналов доступа, серверов, системных сообщений и т.д.
В /var мы обычно находим серверные данные, которые сохраняются здесь с целью отделить их от критически важных данных, таких как сама программа-сервер и ее конфигурационные файлы. Типичным примером в системах Linux является /var/www, который содержит настоящие страницы HTML, скрипты и изображения, которые передал веб-сервер. FTP-дерево сервера FTP (данные, которые могут быть загружены удаленным клиентом) также лучше хранить в одном из подкаталогов /var. Эти данные общедоступны и часто изменяемы анонимными пользователями, поэтому безопаснее их держать здесь, подальше от разделов или каталогов с конфиденциальными данными.
На большинстве установленных рабочих станций /var/spool как минимум будет содержать at и каталог cron, содержащий запланированные задания. В офисных окружениях этот каталог также обычно содержит lpd, который хранит очередь(и) печати и далее файлы конфигурации принтера, а также log-файлы принтера.
На серверных системах мы будем обычно находить /var/spool/mail, содержащий входящую почту для локальных пользователей, отсортированную в один файл для каждого пользователя, "почтовый ящик пользователя". Связанный каталог mqueue, диспетчер очереди для неотправленных почтовых сообщений. Эти компоненты системы могут быть сильно задействованы на почтовых серверах с большим количеством пользователей. Новости серверов также используют пространство /var/spool из-за огромного количества сообщений, которые они должны обработать.
Каталог /var/lib/rpm специфичен для базирующихся на RPM (RedHat Package Manager) дистрибутивов; это те, в которых информация сохраняется в RPM-пакетах. Другие менеджеры пакетов обычно также сохраняют их данные где-то в /var.