<!--
     The FreeBSD Russian Documentation Project

     $FreeBSD$
     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/basics/chapter.sgml,v 1.5 2000/12/17 11:12:42 danfe Exp $
     Original revision: 1.17
-->

<chapter id="basics">
  <title>Основы Unix</title>

  <sect1>
    <title>Краткий обзор</title>

    <para><emphasis>Переписал Chris Shumway
      <email>cshumway@cdrom.com</email>, 10 марта 2000.</emphasis></para>

    <para>В этой главе мы попытаемcя раскрыть основные принципы и команды
      операционной системы FreeBSD.  Если Вы новичок, то обязательно
      прочтите это главу, прежде чем задавать какие-либо вопросы.</para>
  </sect1>

  <sect1 id="permissions">
    <title>Права доступа</title>

    <para>FreeBSD исторически развивалась из BSD UNIX, и основывается на
      некоторых ключевых концепциях UNIX.  В первую очередь это, конечно,
      тот факт, что FreeBSD &ndash; многопользовательская операционная система.
      Это означает, что несколько пользователей могут работать одновременно,
      решая различные задачи и совершенно не мешая друг другу.  На системе
      лежит ответственность за правильное разделение и управление такими
      ресурсами как память, процессорное время, периферийные устройства и
      прочее.</para>

    <para>Многопользовательность предполагает наличие механизма
      регулирования прав доступа к любому ресурсу в системе.  Существует три
      типа прав доступа: на чтение, запись и исполнение.  Права
      сгруппированы три по три, соответственно чтение/запись/выполнение для
      владельца/группы/всех остальных.  Численное представление:</para>

    <informaltable frame="none">
      <tgroup cols="3">
	<thead>
	  <row>
	    <entry>Значение</entry>
	    <entry>Права доступа</entry>
	    <entry>Список файлов каталога</entry>
	  </row>
	</thead>

	<tbody>
	  <row>
	    <entry>0</entry>
	    <entry>Ничего не разрешено</entry>
	    <entry><literal>---</literal></entry>
	  </row>

	  <row>
	    <entry>1</entry>
	    <entry>Нельзя читать и писать, разрешено исполнять</entry>
	    <entry><literal>--x</literal></entry>
	  </row>

	  <row>
	    <entry>2</entry>
	    <entry>Нельзя читать и исполнять, разрешено писать</entry>
	    <entry><literal>-w-</literal></entry>
	  </row>

	  <row>
	    <entry>3</entry>
	    <entry>Нельзя читать, разрешено писать и исполнять</entry>
	    <entry><literal>-wx</literal></entry>
	  </row>

	  <row>
	    <entry>4</entry>
	    <entry>Разрешено читать, нельзя писать и исполнять</entry>
	    <entry><literal>r--</literal></entry>
	  </row>

	  <row>
	    <entry>5</entry>
	    <entry>Разрешено читать и исполнять, нельзя писать</entry>
	    <entry><literal>r-x</literal></entry>
	  </row>

	  <row>
	    <entry>6</entry>
	    <entry>Разрешено читать и писать, нельзя исполнять</entry>
	    <entry><literal>rw-</literal></entry>
	  </row>

	  <row>
	    <entry>7</entry>
	    <entry>Разрешено все</entry>
	    <entry><literal>rwx</literal></entry>
	  </row>
	</tbody>
      </tgroup>
    </informaltable>

    <para>Чтобы увидеть права доступа, можно воспользоваться командой
      <command>ls -l</command>.  Формат вывода этой команды
      следующий:</para>

    <screen>-rw-r--r--</screen>

    <para>Первый символ показывает тип файла: обычный файл, директория,
      символьное или блочное устройство, ссылка или другой объект.
      Следующие три символа (в данном случае это <literal>rw-</literal>)
      задают права доступа владельца файла.  Затем идут права группы,
      которой принадлежит файл (<literal>r--</literal>).  Последняя тройка
      (<literal>r--</literal>) определяет права для всех остальных.  Минус
      означает отсутствие каких-либо прав (т.е. нельзя ни читать, ни писать, ни
      выполнять).  В данном случае права установлены таким образом, что
      владелец может читать и писать в в файл, а группа и другие может только
      читать.  Таким образом, численное представление прав будет
      <literal>644</literal>.</para>

    <para>Права на устройства контролируются аналогичным образом.  Во
      FreeBSD все устройства представлены в виде файлов, которые можно
      открывать, читать и писать в них.  Эти специальные файлы содержаться в
      директории <filename>/dev</filename>.</para>

    <para>Директории также являются специальными файлами, и к ним применимы
      те же права на чтение, запись и выполнение.  Правда, в данном случае
      &ldquo;выполнение&rdquo; имеет несколько другой смысл.  Когда
      директория помечена как &ldquo;исполнимая&rdquo;, это означает, что
      можно получить список файлов в ней, &ldquo;зайти&rdquo; в нее.</para>

    <para>На самом деле, про права доступа можно рассказать еще много
      интересного, например, про setuid-бит на выполняемые файлы и так
      называемый sticky-бит на директории.  За дополнительными сведениями по
      этому вопросу обращайтесь к страницам системного справочника man
      (&man.chmod.1;).</para>
  </sect1>

  <sect1 id="dirstructure">
    <title>Структура каталогов</title>

    <para>Так как файловая система FreeBSD используется при выполнении
      многих важных системных операций, иерархическая структура очень важна.
      Структура каталогов достаточно полно отражена в &man.hier.7; странице
      системного справочника man, и поэтому нет нужды приводить ее
      здесь.</para>

    <para>Самым важным из всех каталогов является, несомненно, корневой
      каталог, обозначаемым символом <literal>/</literal>.  Корневой каталог
      монтируется самым первым на этапе загрузки и содержит все
      необходимое, чтобы поднять систему и примонтировать остальные файловые
      системы.</para>

    <para>Точкой монтирования называется директория, которая будет
      соответствовать корню примонтированной файловой системой.  Среди
      стандартных точки монтирования &ndash; <filename>/usr</filename>,
      <filename>/var</filename>, <filename>/mnt</filename> и
      <filename>/cdrom</filename>.  Эти директории обычно перечислены в
      файле <filename>/etc/fstab</filename>, в котором указаны файловые
      системы и их точки монтирования.  Большинство файловых систем,
      описанных в <filename>/etc/fstab</filename> монтируются автоматически
      из скрипта &man.rc.8;, если только они не перечислены с опцией
      <option>noauto</option>.  Обратитесь к странице системного справочника
      &man.fstab.5; за дополнительной информацией о файле
      <filename>/etc/fstab</filename> и различных опциях
      монтирования.</para>
  </sect1>

  <sect1 id="shells">
    <title>Интерпретатор команд</title>

    <para>При работе с FreeBSD, в большинстве случаях для выполнения
      повседневных задач используется командный интерфейс (так называемый
      &ldquo;шелл&rdquo;), который принимает команды, которые ему подаются,
      и выполняет их.  Многие командные интерпретаторы имеют встроенные
      средства выполнения наиболее часто используемых команд, например,
      операции над файлами и каталогами, редактирование командной строки,
      командные макросы и переменные окружения.  Вместе с FreeBSD
      поставляется несколько командных интерпретаторов, например, sh, или
      Bourne Shell, и csh, иначе C-shell.  Многие другие, более мощные,
      например, tcsh или bash, доступны в коллекции портов.</para>

    <para>Какой из командных интерпретаторов использовать?  Это дело вкуса. 
      Если Вы программируете на C, то Вам, возможно, понравится tcsh, а если
      Вы работали с Linux, то Вас скорее устроит bash, нежели что-либо
      другое.  Каждый из названных интерпретаторов имеет свои особенные
      свойства, которые отличат его от других и, возможно, повлияют на Ваш
      выбор.</para>

    <para>Одна из наиболее часто используемых функций командного
      интерпретатора &ndash; дополнение частичного имени файла до полного.  Вы
      можете набрать только первые несколько символов имени файла, нажать
      клавишу табуляции (TAB), и командный интерпретатор автоматически
      Например, у нас есть два фала, названные <filename>foobar</filename> и
      <filename>foo.bar</filename>.  Допустим, мы хотим удалить файл
      <filename>foo.bar</filename>.  Для этого, наберем на клавиатуре
      <command>rm fo[TAB].[TAB]</command>.</para>

    <para>Вы увидите следующее: <command>rm foo[BEEP].bar</command>.</para>

    <para>Здесь [BEEP] &ndash; это так называемый консольный звонок,
      сигнализирующий о том, что интерпретатор не в состоянии закончить имя
      файла, так как по введенным Вами символам невозможно однозначно
      идентифицировать файл.  Например, имена файлов
      <filename>foobar</filename> и <filename>foo.bar</filename> оба
      начинаются с <literal>fo</literal>, но после нажатия TAB можно
      однозначно дополнить только до <literal>foo</literal>.  Если же теперь
      ввести точку (<literal>.</literal>) и вновь нажать TAB, интерпретатор
      достроит имя файла целиком.</para>

    <para>При работе с любым командным интерпретатором, Вы столкнетесь с
      переменными окружения.  Под переменной окружения понимается некоторая
      строка символов, идентифицируемая некоторым именем.  Значение
      переменных окружения может быть прочитано любо программой, запущенной
      из командного интерпретатора, и часто содержит конфигурационные
      настройки для многих приложений и утилит.  Ниже приведены некоторые
      наиболее часто встречающиеся переменные окружения с объяснением их
      значения:</para>

    <informaltable frame="none">
      <tgroup cols="2">
	<thead>
	  <row>
	    <entry>Переменная</entry>
	    <entry>Описание</entry>
	  </row>
	</thead>

	<tbody>
	  <row>
	    <entry><envar>USER</envar></entry>
	    <entry>Имя текущего пользователя.</entry>
	  </row>

	  <row>
	    <entry><envar>PATH</envar></entry>
	    <entry>Каталоги, разделенные двоеточием, в которых производить
	      поиск исполняемых файлов.</entry>
	  </row>

	  <row>
	    <entry><envar>DISPLAY</envar></entry>
	    <entry>Сетевое имя виртуального дисплея X11, если доступен для
	      подключения.</entry>
	  </row>

	  <row>
	    <entry><envar>SHELL</envar></entry>
	    <entry>Текущий командный интерпретатор.</entry>
	  </row>

	  <row>
	    <entry><envar>TERM</envar></entry>
	    <entry>Название (тип) терминала.  Используется, чтобы узнать
	      возможности терминала.</entry>
	  </row>

	  <row>
	    <entry><envar>TERMCAP</envar></entry>
	    <entry>Список escape-последовательностей для управления
	      различными функциями терминала.</entry>
	  </row>

	  <row>
	    <entry><envar>OSTYPE</envar></entry>
	    <entry>Название (тип) операционной системы.  Например,
	      FreeBSD.</entry>
	  </row>

	  <row>
	    <entry><envar>MACHTYPE</envar></entry>
	    <entry>Архитектура машины (процессора).</entry>
	  </row>

	  <row>
	    <entry><envar>EDITOR</envar></entry>
	    <entry>Предпочитаемый пользователем текстовый редактор.</entry>
	  </row>

	  <row>
	    <entry><envar>PAGER</envar></entry>
	    <entry>Предпочитаемая пользователем утилита просмотра
	      файлов.</entry>
	  </row>

	  <row>
	    <entry><envar>MANPATH</envar></entry>
	    <entry>Каталоги, разделенные двоеточием, в которых производить
	      поиск файлов системного справочника.</entry>
	  </row>
	</tbody>
      </tgroup>
    </informaltable>

    <para>В зависимости от используемого командного интерпретатора, для
      просмотра и установки значений переменных окружения служат различные
      команды.  Например, в интерпретаторах csh и tcsh это
      <command>setenv</command>.  В sh и bash это <command>set</command> и
      <command>export</command>.  В частности, чтобы установить или изменить
      значение переменной <envar>EDITOR</envar> (в csh или tcsh) равное
      <filename>/usr/local/bin/emacs</filename>, выполните команду:</para>

    <para><command>setenv EDITOR /usr/local/bin/emacs</command></para>

    <para>Если Вы используете bash:</para>

    <para><command>export EDITOR="/usr/local/bin/emacs"</command></para>

    <para>Чтобы получить значение переменной, например, в командной строке,
      поместите символ доллара (<literal>$</literal>) перед именем
      переменной.  Например, команда <command>echo $TERM</command> выведет
      значение переменной <envar>$TERM</envar>.</para>

    <para>Командный интерпретатор воспринимает некоторые символы, называемые
      метасимволами, в качестве управляющих, несущих специальные функции.
      Одни из наиболее часто используемых &ndash; символ <literal>*</literal>,
      который заменяет любое количество символов в имени файла, и
      <literal>?</literal>, заменяющий один символ.  Эти метасимволы
      используются для поиска файлов по маске, например, команда
      <command>echo *</command> выполняет практически тоже самое, что и
      команда <command>ls</command>, так как под маску <literal>*</literal>
      попадают все файлы из текущего каталога (на самом деле, это всегда так
      и зависит от командного интерпретатора, например, в bash под маску
      <literal>*</literal> не попадут файлы, начинающиеся с точки
      <literal>.</literal> &ndash; скрытые файлы).</para>

    <para>В некоторых ситуациях требуется, чтобы интерпретатор воспринимал
      метасимволы как обычные, не несущие специальной смысловой нагрузки.
      Этого можно достичь, поставив перед символом обратную косую черту
      (<literal>\</literal>).  Например, команда <command>echo
      $TERM</command> выведет тип Вашего терминала, в то же время команда
      <command>echo \$TERM</command> выведет именно слово
      <literal>$TERM</literal>, а не значение переменной
      <envar>$TERM</envar>.</para>

    <sect2 id="changing-shells">
      <title>Как изменить командый интерпретатор по умолчанию</title>

      <para>Самым простым, пожалуй, будет воспользоваться командой
	<command>chsh</command>.  Если переменная <envar>EDITOR</envar>
	определена, то будет загружен текстовый редактор
	<envar>$EDITOR</envar>, иначе vi.  Вам нужно будет изменить значение
	поля &ldquo;Shell:&rdquo; и выйти из редактора с сохранением
	результатов.</para>

      <para>Можно также воспользоваться опцией <option>-s</option> команды
	<command>chsh</command>.  Например:</para>

      <screen>&prompt.user; <userinput>chsh -s /usr/local/bin/bash</userinput></screen>

      <note>
	<para>Помните, чтобы использовать некоторую программу в качестве
	  командного интерпретатора, она должна быть
	  <emphasis>обязательно</emphasis> упомянута в файле
	  <filename>/etc/shells</filename>.  Обычно, при установке
	  интерпретаторов из дерева портов, это делается автоматически.
	  Если же это не так, Вам нужно будет самим добавить соответствующую
	  строчку в этот файл.</para>

	<para>Например, допустим, что Вы установили <command>bash</command>
	  вручную, без использования соответствующего порта, и поместили его в
	  каталог <filename>/usr/local/bin</filename>.  В таком случае,
	  можно набрать:</para>

	<screen>&prompt.root; <userinput>echo &quot;/usr/local/bin/bash&quot; &gt;&gt; /etc/shells</userinput></screen>

	<para>Теперь можно смело использовать команду
	  <command>chsh</command>.</para>
      </note>
    </sect2>
  </sect1>

  <sect1 id="editors">
    <title>Текстовые редакторы</title>

    <para>Многие конфигурационные файлы во FreeBSD имеют текстовый формат,
      и, соответственно, для их редактирования Вам нужно будет освоиться с
      каким-либо текстовым редактором.  Вместе с FreeBSD поставляется лишь
      некоторые из них; в коллекции портов можно найти многие другие.</para>

    <para>Самым простым в изучении и использовании, по-видимому, можно
      назвать <application>ee</application>, что расшифровывается как
      &ldquo;easy editor&rdquo;, т.е. &ldquo;простой редактор&rdquo;.  Чтобы
      начать редактировать какой-либо файл, наберите в командной строке
      <command>ee filename</command>, где <literal>filename</literal> имя
      редактируемого файла.  Например, для редактирования файла
      <filename>/etc/rc.conf</filename>, наберите <command>ee
      /etc/rc.conf</command>.  В верхней части экрана Вы увидите список
      основных команд редактора.  символ каретки (<literal>^</literal>)
      означает клавишу Ctrl, таким образом, ^e означает нажатие клавиши Ctrl
      и затем <literal>e</literal>.  Чтобы выйти из редактора, нажмите
      клавишу Esc, затем Enter.  Если остались какие-либо несохраненные
      данные, Вам потребуется подтвердить выход, либо сохранив результат
      работы, либо нет.</para>

    <para>FreeBSD также поставляется с мощным текстовым редактором
      <application>vi</application>, как часть системы, и редакторами
      <application>emacs</application> и <application>vim</application>,
      которые можно найти в коллекции портов.  Эти редакторы сложнее
      изучить, но их возможности порой превосходят всякие ожидания!  Если в
      будущем Вам потребуется часто редактировать большие объемы текстов, Вы
      убедитесь, что время, потраченное на изучение этих редакторов,
      окупится с лихвой.</para>
  </sect1>

  <sect1>
    <title>За дополнительной информацией...</title>

    <sect2 id="basics-man">
      <title>Системный справочник (man)</title>

      <para>Пожалуй, самым полным руководством по FreeBSD является
	системный справочник (man).  Практически каждое приложение или
	утилита имеют соответствующую страницу (часто не одну), описывающую
	тот или иной аспект работы программы, всевозможные опции и
	настройки.  Для просмотра этих страниц существует команда
	<command>man</command>:</para>

      <para><command>&prompt.user; man command</command></para>

      <para>Здесь<literal>command</literal> &ndash; это команда, про которую Вы
	хотите получить информацию.  Например, для команды
	<command>ls</command> наберите:</para>

      <para><command>&prompt.user; man ls</command></para>

      <para>Содержимое системного справочника для удобства разделено на
	несколько секций:</para>

      <orderedlist>
	<listitem>
	  <para>Пользовательские команды.</para>
	</listitem>

	<listitem>
	  <para>Системные вызовы и коды ошибок.</para>
	</listitem>

	<listitem>
	  <para>Функции стандартных библиотек.</para>
	</listitem>

	<listitem>
	  <para>Драйверы устройств.</para>
	</listitem>

	<listitem>
	  <para>Форматы файлов.</para>
	</listitem>

	<listitem>
	  <para>Развлечения и игры.</para>
	</listitem>

	<listitem>
	  <para>Дополнительная информация.</para>
	</listitem>

	<listitem>
	  <para>Команды системного администрирования.</para>
	</listitem>

	<listitem>
	  <para>Для разработчиков ядра.</para>
	</listitem>
      </orderedlist>

      <para>В некоторых случаях (не так уж редко), страницы, относящиеся к
	одной и той же команде, находятся в различных секциях справочника.
	Например, есть команда <command>cdmod</command> и системный вызов
	<literal>chmod()</literal>.  В этом случае, необходимо явно указать
	секцию, в которой искать соответствующую страницу:</para>

      <para><command>&prompt.user; man 1 chmod</command></para>

      <para>Эта команда выведет справку об утилите <command>chmod</command>.
	По традиции, конкретная секция справочника указывается в скобках
	после команды, например, &man.chmod.1; относится к утилите
	<command>chmod</command>, а &man.chmod.2; &ndash; к соответствующему
	системному вызову.</para>

      <para>Часто бывает так, что Вы не знаете название команды, но имеете
	представление о том, что она должна делать.  В этом случае можно
	попытаться найти нужную команду по ключевым словам, встречающимся в
	ее описании, используя опцию <option>-k</option> программы
	<command>man</command>:</para>

      <para><command>&prompt.user; man -k mail</command></para>

      <para>Вы получите список команд, имеющих слово &ldquo;mail&rdquo; в
	своих описаниях.  Это эквивалентно использованию команды
	<command>apropos</command>.</para>

      <para>Или например, Вы видите список файлов в каталоге
	<filename>/usr/bin</filename>, при этом не имея ни малейшего
	представления о том, какие функции выполняет каждый их них?  Просто
	наберите <command>&prompt.user; cd /usr/bin; man -f *</command> или
	<command>&prompt.user; cd /usr/bin; whatis *</command>, что
	фактически одно и то же.</para>

    </sect2>

    <sect2 id="basics-info">
      <title>GNU Info Files</title>

      <para>FreeBSD поставляется с многочисленными приложениями и утилитами от
	Фонда Свободного Программного Обеспечения, Free Software Foundation
	(FSF).  В дополнение к этим программам посталяется обширная
	гипертекстовая документация в виде так называемых
	<literal>info</literal> файлов, которые могут быть просмотрены с
	помощью команды <command>info</command>, или, в качестве
	альтернативы, если Вы имеете установленый
	<application>emacs</application>, в соответствующем (info) режиме
	этого редактора.</para>

      <para>Чтобы воспользоваться командой &man.info.1;, просто наберите в
	командной строке:</para>

      <para><command>&prompt.user; info</command></para>

      <para>Чтобы вызвать на экран краткое введение, наберите
	<literal>h</literal>.  Для ознакомления с возможными командами,
	наберите <literal>?</literal>.</para>
    </sect2>
  </sect1>
</chapter>
<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
