diff options
Diffstat (limited to 'documentation/content/ru/books/handbook/basics/_index.adoc')
-rw-r--r-- | documentation/content/ru/books/handbook/basics/_index.adoc | 1622 |
1 files changed, 928 insertions, 694 deletions
diff --git a/documentation/content/ru/books/handbook/basics/_index.adoc b/documentation/content/ru/books/handbook/basics/_index.adoc index df487b3c91..aae7ea47cb 100644 --- a/documentation/content/ru/books/handbook/basics/_index.adoc +++ b/documentation/content/ru/books/handbook/basics/_index.adoc @@ -1,22 +1,25 @@ --- -title: Глава 4. Основы UNIX -part: Часть I. В начале +title: Глава 3. Основы FreeBSD +part: Часть I. Начало работы prev: books/handbook/bsdinstall next: books/handbook/ports +description: Основные команды и функциональность операционной системы FreeBSD +tags: ["основы", "виртуальные консоли", "пользователи", "управление", "полномочия", "структура каталогов", "организация диска", "монтирование", "процессы", "даемоны", "оболочка", "редактор", "страницы справочника", "устройства"] showBookMenu: true -weight: 6 -path: "/books/handbook/" +weight: 5 +params: + path: "/books/handbook/basics/" --- [[basics]] -= Основы UNIX += Основы FreeBSD :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 -:sectnumoffset: 4 +:sectnumoffset: 3 :partnums: :source-highlighter: rouge :experimental: @@ -46,177 +49,166 @@ toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] +// +// The FreeBSD Russian Documentation Project +// +// Original EN revision (23.09.2024): c6f45f005306d23f396e1ec9ddff165312aad867 +// + [[basics-synopsis]] == Краткий обзор -В этой главе мы попытаемcя раскрыть основные принципы и команды операционной системы FreeBSD. Большая часть нижеизложенного материала в более или менее равной степени применима к любой UNIX(R)-подобной операционной системе. Если вы уверены, что не найдете здесь ничего нового для себя, можете смело пропустить эту главу. Если же вы новичок, мы настоятельно рекомендуем внимательно прочесть это главу. +Эта глава посвящена основным командам и функциональности операционной системы FreeBSD. +Большая часть нижеизложенного материала применима к любой UNIX(R)-подобной операционной системе. +Новые пользователи FreeBSD призываются к внимательному чтению всей главы. -Прочитав эту главу, вы узнаете: +Прочитав эту главу, вы будете знать: -* Как использовать "виртуальные консоли" FreeBSD. -* Как работают права доступа на файлы в UNIX(R) и как следует интерпретировать флаги файлов в ОС FreeBSD. -* Иерархия каталогов FreeBSD. -* Организация дисков FreeBSD. +* Как использовать и настраивать виртуальные консоли. +* Как создавать пользователей и группы пользователей во FreeBSD и управлять ими. +* Как работают права доступа на файлы в UNIX(R) и файловые флаги во FreeBSD. +* Иерархию каталогов FreeBSD. +* Организацию дисков FreeBSD. * Как монтировать и размонтировать файловые системы. * Что такое процессы, даемоны и сигналы. -* Что такое командная оболочка (или интерпретатор команд) и как настроить личное рабочее окружение. +* Что такое командный процессор и как изменить используемые по умолчанию параметры рабочего окружения. * Как пользоваться стандартными текстовыми редакторами. * Что такое устройства и файлы устройств. -* Какие бинарные форматы используются в FreeBSD. * Как пользоваться справочным руководством для получения дополнительной информации. [[consoles]] == Виртуальные консоли и терминалы -FreeBSD можно использовать разными способами. Один из них - набор команд в текстовом терминале. Используйте этот способ, и вся гибкость и мощь систем UNIX(R) будет в ваших руках. Этот раздел рассказывает о "терминалах", "консолях" и их использовании в FreeBSD. - -[[consoles-intro]] -=== Консоль - -Если во время установки вы не настроили FreeBSD для автоматического запуска графической среды при загрузке, система запросит ввод логина сразу после завершения стартовых скриптов. Вы увидите примерно следующее: - -[source,shell] -.... -Additional ABI support:. -Local package initialization:. -Additional TCP options:. - -Fri Sep 20 13:01:06 EEST 2002 - -FreeBSD/i386 (pc3.example.org) (ttyv0) - -login: -.... - -В вашей системе сообщение может быть другим, но очень похожим на это. В данный момент нас интересуют последние две строки. Вторая с конца строка: - -[.programlisting] -.... -FreeBSD/i386 (pc3.example.org) (ttyv0) -.... - -В этой строке содержится немного информации о только что загруженной системе. Это консоль "FreeBSD", работающей на Intel или совместимом процессоре x86 архитектуры. Имя этого компьютера (у каждого компьютера UNIX(R) есть имя) `pc3.example.org`, и в данный момент вы видите системную консоль - терминал [.filename]#ttyv0#. - -Наконец, последняя строка всегда: +Если только FreeBSD не была настроена на автоматический запуск графической среды при загрузке, система будет запускаться в режиме запроса ввода имени учётной записи в командной строке, как в этом примере: [.programlisting] .... login: .... -Здесь вам предлагается ввести "имя пользователя", чтобы войти в FreeBSD. Следующий раздел описывает способ, которым вы можете сделать это. +Первая строка содержит определённую информацию о системе. +`amd64` указывает на то, что FreeBSD работает в 64-разрядной системе x86. +`pc3.example.org` является именем хоста, а `ttyv0` указывает на то, что это "системная консоль". +Вторая строка является приглашением к входу в систему. -[[consoles-login]] -=== Вход в FreeBSD +Поскольку FreeBSD является многопользовательской системой, она должна каким-то образом отличать различных пользователей. +Это достигается за счёт того, что каждый пользователь перед получением доступа к программам системы должен в эту систему войти. +Каждый пользователь имеет уникальное "имя пользователя" и персональный "пароль". -FreeBSD это многопользовательская, многопроцессорная система. Это формальное описание системы, которая может быть использована множеством разных людей, одновременно запускающих большое количество программ на одном компьютере. +Для входа в системную консоль наберите имя пользователя, которое было настроено во время установки системы, описанной в разделе <<bsdinstall-addusers>>, и нажмите kbd:[Enter]. +Затем введите пароль, соответствующий этому имени пользователя и нажмите kbd:[Enter]. +Пароль _не отображается_ по соображениям безопасности. -Любой многопользовательской системе нужен способ отличать каждого "пользователя" от остальных. В FreeBSD (и всех UNIX(R)-подобных операционных системах), эта задача решается путем "входа" пользователя в систему перед запуском каких-либо программ. У каждого пользователя есть уникальное имя ("имя пользователя") и персональный, секретный ключ ("пароль"). Перед тем, как разрешить пользователю выполнять какие-либо программы, FreeBSD запрашивает их оба. - -Сразу после загрузки FreeBSD и завершения работы стартовых скриптов, система предложит вам ввести имя пользователя: - -[source,shell] -.... -login: -.... - -В этом примере, предположим что ваше имя пользователя `john`. Введите `john` в этом приглашении и нажмите kbd:[Enter]. Далее должно появиться приглашение ввести "пароль": - -[source,shell] -.... -login: john -Password: -.... - -Введите соответствующий имени `john` пароль и нажмите kbd:[Enter]. Пароль _не виден_! Не беспокойтесь об этом. Это сделано по соображениям безопасности. - -Если вы ввели пароль правильно, то сразу же войдете в FreeBSD и можете начать выполнять команды. - -Вы увидите сообщение дня (MOTD, или message of the day) за которым последует командная строка (с символом `#`, `$`, или `%`). Это означает, что вы успешно вошли в FreeBSD. +После ввода корректного пароля будет выдано сообщение дня (MOTD, Message Of The Day), за которым последует приглашение командной строки. +В зависимости от командного процессора, который был выбран при создании пользователя, таким приглашением будет символ `+#+`, `$` или `%`. +Это приглашение указывает на то, что теперь пользователь вошёл в системную консоль FreeBSD и может попытаться использовать имеющиеся команды. [[consoles-virtual]] -=== Множественные консоли +=== Виртуальные консоли -Запуск команд UNIX(R) из консоли - это конечно хорошо, но FreeBSD может выполнять множество программ одновременно, поэтому наличие одной консоли может быть недостатком. В таком случае очень полезны "виртуальные консоли". +Хотя системная консоль может использоваться для взаимодействия с системой, пользователь, работающий в режиме командной строки за клавиатурой системы FreeBSD, как правило, будет входить в систему через виртуальную консоль. +Это так, потому что по умолчанию выдача системных сообщений настроена на их отображение на системной консоли. +Эти сообщения будут выдаваться поверх команд или файлов, с коорым работает пользователь, что мешает сосредоточиться на текущей работе. -FreeBSD может быть настроена для работы с несколькими виртуальными консолями. Вы можете переключаться с одной виртуальной консоли на другую, нажимая соответствующие сочетания клавиш на клавиатуре. У каждой консоли есть свой канал вывода и FreeBSD заботится о том, чтобы правильно перенаправить ввод с клавиатуры и вывод на монитор, как только вы переключитесь с одной консоли на другую. +По умолчанию FreeBSD настроена так, что она предоставляет несколько виртуальных консолей для ввода команд. +Каждая виртуальная консоль обладает собственным приглашением к входу в систему и командным процессором, а переключение между виртуальными консолями выполняется легко. +В итоге это равнозначно предоставлению нескольких одновременно открытых окон в графической среде, но в режиме командной строки. -Для переключения между консолями зарезервированы специальные комбинации клавиш. Вы можете использовать сочетания kbd:[Alt+F1], kbd:[Alt+F2], до kbd:[Alt+F8] чтобы переключаться между различными виртуальными консолями в FreeBSD. +Для переключения между виртуальными консолями во FreeBSD зарезервированы комбинации клавиш от kbd:[Alt+F1] до kbd:[Alt+F8]. +Используйте kbd:[Alt+F1] для переключения на системную консоль (`ttyv0`), kbd:[Alt+F2] для доступа к первой виртуальной консоли (`ttyv1`), kbd:[Alt+F3] для доступа ко второй виртуальной консоли (`ttyv2`) и так далее. +При использовании Xorg в качестве графической консоли для переключения на текстовую виртуальную консоль используется комбинация kbd:[Ctrl+Alt+F1]. -При переключении от одной консоли к другой, FreeBSD заботится о сохранении и восстановлении вывода на экран. Результатом является "иллюзия" наличия множества "виртуальных" экранов и клавиатур, которые могут быть использованы для ввода и запуска команд FreeBSD. Программы, которые вы запускаете на одной виртуальной консоли, не прекращают выполнение, когда консоль становится невидимой. Они продолжают выполняться, когда вы переключаетесь на другую виртуальную консоль. +При переключении от одной консоли к другой FreeBSD берёт на себя управление изображением на экране. +В результате создаётся видимость наличия множества виртуальных экранов и клавиатур, которые могут быть использованы при наборе команд для их запуска во FreeBSD. +Программы, запущенные на одной из виртуальных консолей, не прекращают своей работы, когда пользователь переключается на другую виртуальную консоль. -[[consoles-ttys]] -=== Файл [.filename]#/etc/ttys# +Обратитесь к man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4] и man:vt[4] для получения дополнительных технических описаний консоли FreeBSD и драйверов её клавиатуры. -В конфигурации по умолчанию FreeBSD запускает восемь виртуальных консолей. Тем не менее, это не ограничение оборудования, и вы можете легко настроить систему для загрузки большего или меньшего числа виртуальных консолей. Число и параметры виртуальных консолей задаются в файле [.filename]#/etc/ttys#. - -Вы можете использовать это файл для настройки виртуальных консолей FreeBSD. Любая не закомментированная строка в этом файле (строка, не начинающаяся с символа `#`), содержит настройки для одного терминала или виртуальной консоли. Версия этого файла по умолчанию, поставляемая с FreeBSD, содержит настройки для девяти виртуальных консолей и включает восемь терминалов. Это строки, начинающиеся с `ttyv`: +Во FreeBSD количество доступных виртуальных консолей настраивается в следующем разделе файла `/etc/ttys`. [.programlisting] .... -# name getty type status comments +# name getty type status comments # -ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" xterm on secure +ttyv2 "/usr/libexec/getty Pc" xterm on secure +ttyv3 "/usr/libexec/getty Pc" xterm on secure +ttyv4 "/usr/libexec/getty Pc" xterm on secure +ttyv5 "/usr/libexec/getty Pc" xterm on secure +ttyv6 "/usr/libexec/getty Pc" xterm on secure +ttyv7 "/usr/libexec/getty Pc" xterm on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure .... -За детальным описанием каждой колонки этого файла и всех опций, которые можно указать для настройки виртуальных консолей, обращайтесь к man:ttys[5]. +Для отключения какой-либо виртуальной консоли поместите символ комментария (`+#+`) в начале строки, соответствующей этой виртуальной консоли. +К примеру, для уменьшения количества доступных виртуальных консолей с восьми до четырёх поместите `+#+` в начале последних четырёх строк, представляющих виртуальные консоли с `ttyv5` по `ttyv8`. +_Не комментируйте_ строку системной консоли `ttyv0`. +Заметьте, что последняя виртуальная консоль (`ttyv8`) используется для доступа к графическому окружению, если был установлен пакет Xorg, как это описано в главе crossref:x11[x11,X Window System]. ++ +За детальным описанием каждой колонки этого файла и доступных параметров виртуальных консолей обратитесь к man:ttys[5]. [[consoles-singleuser]] -=== Консоль в однопользовательском режиме - -Детальное описание "однопользовательского режима" можно найти в crossref:boot[boot-singleuser,Однопользовательский режим]. Стоит отметить, что при работе FreeBSD в однопользовательском режиме есть только одна консоль. Виртуальных консолей нет. Установки консоли в однопользовательском режиме можно найти в файле [.filename]#/etc/ttys#. Обратите внимание на строку, начинающуюся с `console`: +=== Однопользовательский режим + +В загрузочном меню FreeBSD имеется пункт, который называется "Boot Single User". +При его выборе система загрузится в специальном режиме, который называется "однопользовательским". +Этот режим обычно используется для восстановления работоспособности системы, которая не загружается, или для сброса пароля пользователя `root`, когда он неизвестен. +В однопользовательском режиме недоступны сетевые функции и дополнительные виртуальные консоли. +При всём при этом имеется полный доступ к системе с полномочиями пользователя `root`, и по умолчанию пароль пользователя `root` не требуется. +По этим причинам для загрузки в таком режиме требуется физический доступ к клавиатуре, а решение о том, кто имеет физический доступ к клавиатуре, стоит рассматривать в контексте обеспечения безопасности системы FreeBSD. ++ +Настройки, управляющие однопользовательским режимом, находятся в следующем разделе файла `/etc/ttys`: [.programlisting] .... -# name getty type status comments +# name getty type status comments # -# If console is marked "insecure", then init will ask for the root password -# when going to single-user mode. -console none unknown off secure +# Если консоль помечена как "insecure", то init будет запрашивать пароль +# пользователя root при переходе в однопользовательский режим +console none unknown off secure .... +По умолчанию столбец status установлен в значение `secure`. +Это предполагает, что физический доступ к клавиатуре либо не важен, либо контролируется политикой физической безопасности. +Если изменить этот параметр на `insecure`, то это будет означать, что само по себе окружение не является безопасным, так как любой может получить доступ к клавиатуре. +Когда в этой строке значение меняется на `insecure`, то FreeBSD будет запрашивать пароль пользователя `root` в случае, когда пользователь выберет загрузку в однопользовательском режиме. + [NOTE] ==== -Как сказано в комментариях выше строки `console`, можно отредактировать эту строку и изменить `secure` на `insecure`. Если вы сделаете это, FreeBSD даже при загрузке в однопользовательском режиме будет запрашивать пароль `root`. - -__Будьте осторожны при изменении этого значения на ``insecure``__. Если вы забудете пароль `root`, загрузка в однопользовательский режим сильно усложнится. Это все еще возможно, но несколько более сложно для тех, кто еще не очень освоился с процессом загрузки FreeBSD и вызова программ. +_Будьте осторожны при изменении этого параметра на `insecure`!_ +Если пароль пользователя `root` забыт, то загрузка в однопользовательском режиме всё ещё будет возможна, но может быть затруднена для тех, кто незнаком с процессом загрузки FreeBSD. ==== [[consoles-vidcontrol]] === Изменение видеорежимов консоли -Установленный по умолчанию размер изображения для консоли FreeBSD может быть изменен до значения 1024x768, 1280x1024, или любого другого, который поддерживается вашим монитором и видеокартой. Для того, чтобы задействовать иной видеорежим, вам прежде всего необходимо будет пересобрать ядро вашей системы, добавив в файл конфигурации две дополнительные опции: +Установленный по умолчанию режим видео для консоли FreeBSD может быть изменён до значения 1024x768, 1280x1024 или любого другого, который поддерживается вашим монитором и видеокартой. +Для использования другого видеорежима загрузите модуль `VESA`: -[.programlisting] +[source,shell] .... -options VESA -options SC_PIXEL_MODE +# kldload vesa .... -После пересборки и установки ядра воспользуйтесь утилитой man:vidcontrol[1] для определения видеорежимов, поддерживаемых вашим оборудованием. Чтобы получить перечень видеорежимов, выполните следующую команду: +Для определения того, какие видеорежимы поддерживаются вашим оборудованием, воспользуйтесь man:vidcontrol[1]. +Чтобы получить список поддерживаемых видеорежимов, выполните следующую команду: [source,shell] .... # vidcontrol -i mode .... -Команда отобразит список поддерживаемых видеорежимов. Теперь вы можете выбрать один из них и установить его на консоли при помощи man:vidcontrol[1]: +Выдача этой команды отобразит список видеорежимов, поддерживаемых оборудованием. +Для выбора нового видеорежима укажите его при помощи man:vidcontrol[1], работая как пользователь `root`. [source,shell] .... # vidcontrol MODE_279 .... -Если новый видеорежим вас устраивает, то его можно определить устанавливаемым автоматически во время старта системы, для чего добавьте в [.filename]#/etc/rc.conf# следующую строку: +Если новый видеорежим приемлем, то его можно определить постоянно устанавливаемым при загрузке, добавив его в `/etc/rc.conf`: [.programlisting] .... @@ -224,88 +216,118 @@ allscreens_flags="MODE_279" .... [[users-synopsis]] -== Пользователи и основы управления учетными записями +== Пользователи и основы управления учётными записями -FreeBSD допускает одновременную работу множества пользователей на одном компьютере. В то время, как только один пользователь может сидеть за клавиатурой и перед экраном в один момент времени, любое количество пользователей может войти в систему через сеть. Для использования системы у каждого пользователя должна быть учетная запись. +FreeBSD позволяет одновременное использование компьютера множеством пользователей. +В то время, как в одно и то же время только один пользователь может сидеть перед экраном и использовать клавиатуру, войти в систему по сети может любое количество пользователей. +Для того, чтобы использовать систему, каждый пользователь должен иметь собственную учётную запись. -В этом разделе описаны: +В этом разделе описывается вот что: -* Разные типы учетных записей в системе FreeBSD. -* Как добавлять, удалять и изменять учетные записи пользователей. -* Как устанавливать ограничения на использование ресурсов для учетных записей или групп учетных записей. -* Как использовать группы для упрощения управлением учетными записями. +* Различные виды пользовательских учётных записей в системе FreeBSD. +* Как добавлять, удалять и изменять учётные записи пользователей. +* Как устанавливать ограничения для управления ресурсами, к которым имеют доступ пользователи и группы пользователей. +* Как создавать группы и добавлять пользователей в качестве их членов. [[users-introduction]] -=== Разновидности учетных записей +=== Виды учётных записей -Так как доступ к системе FreeBSD осуществляется через учетные записи, и все процессы запускаются пользователями, то управление пользователями и учетными записями является важным аспектом администрирования. +Так как все доступы к системе FreeBSD осуществляются через учётные записи, и все процессы запускаются пользователями, то управление пользователями и учётными записями является важным вопросом. -Существует три разновидности учетных записей: системные учетные записи, учетные записи пользователей и суперпользователь. +Существуют три основных вида учётных записей: системные учётные записи, пользовательские учётные записи и учётная запись суперпользователя. [[users-system]] -==== Системные учетные записи +==== Системные учётные записи -Системные учетные записи предназначены для запуска сервисов, таких как DNS, почта, веб серверы. Это необходимо по соображениям безопасности; если бы все сервисы работали от суперпользователя, они могли бы действовать без ограничений. +Системные учётные записи используются для запуска таких сервисов, как DNS, электронная почта и веб-серверы. +Причиной этого является безопасность; если бы все сервисы работали с полномочиями суперпользователя, то они могли бы действовать без ограничений. -Примеры системных учетных записей: `daemon`, `operator`, `bind`, `news` и `www`. +Примерами системных учётных записей являются `daemon`, `operator`, `bind`, `news` и `www`. -`nobody` это общепринятая непривилегированная системная учетная запись. Однако, чем больше сервисов используют `nobody`, тем больше файлов и процессов связано с этим пользователем, и следовательно тем больше привилегий появляется у этого пользователя. +`nobody` является обобщённой непривилегированной системной учётной записью. +Несмотря на это, чем больше сервисов используют `nobody`, тем больше файлов и процессов становятся связанными с этим пользователем, и, соответственно, тем болеепривилегированным становится этот пользователь. [[users-user]] -==== Учетные записи пользователей +==== Учётные записи пользователей -Учетные записи пользователей служат для предоставления доступа к системе обычным людям. Каждый человек, имеющий доступ к системе, должен иметь уникальную учетную запись пользователя. Это позволяет администратору выяснять кто что делает и предотвращает сбивание одним пользователем настроек других пользователей. +Учётные записи пользователей назначаются реальным людям и используются для входа в систему и её использования. +Каждый человек, имеющий доступ к системе, должен иметь уникальную пользовательскую учётную запись. +Это позволяет администратору понимать, кто и что делает, а также предотвращать затирание настроек одних пользователей другими пользователями. -Каждый пользователь посредством выбора оболочки, редактора, привязок клавиш и настроек языка может настраивать свою собственную рабочую среду для приспособления системы под свои нужды. +Каждый пользователь может настроить свою собственную рабочую среду, приспособленную к использованию системы, при помощи выбора оболочки, используемой по умолчанию, редактора, привязок комбинаций клавиш и настроек языкового окружения. -С каждой учетной записью в системе FreeBSD связана определенная идентификационная информация: +С каждой пользовательской учётной записью в системе FreeBSD связана определенная информация: Имя пользователя:: -Имя пользователя вводится в приглашение `login:`. Имена пользователей должны быть уникальны. Существует множество правил для создания допустимых имен пользователей, документированных в man:passwd[5]. Рекомендуется составлять имена пользователей из восьми или меньшего количества символов в нижнем регистре, чтобы поддерживать обратную совместимость с приложениями. +Имя пользователя вводится в строке приглашения `login:`. +У каждого пользователя обязательно должно быть уникальное имя пользователя. +Существует определённый набор правил для создания допустимых имен пользователей, документированных в man:passwd[5]. +Для того, чтобы поддерживать обратную совместимость с приложениями, рекомендуется использовать имена пользователей, состоящие из восьми или меньшего количества символов в нижнем регистре. Пароль:: -С каждой учетной записью связан пароль. +У каждой учётной записи имеется связанный с ней пароль. -ID пользователя (User ID, UID):: -Идентификатор пользователя (UID) - это номер, используемый для однозначной идентификации пользователя в системе FreeBSD. Любая команда, принимающая в качестве аргумента имя пользователя, первым делом преобразует его к UID. Рекомендуется выбирать значения UID, не превышающие 65535, так как большие значения могут вызывать проблемы совместимости для некоторых пользовательских программ. +Идентификатор пользователя (UID):: +Идентификатор пользователя (UID) является числом, используемым для однозначной идентификации этого пользователя в системе FreeBSD. +Команды, позволяющие указывать имя пользователя, сначала будут преобразовывать его в UID. +Рекомендуется использовать UID меньше 65535, так как более высокие значения могут вызвать проблемы совместимости с некоторым программным обеспечением. -Идентификатор группы (Group ID, GID):: -Идентификатор группы (GID) - это номер, используемый для однозначной идентификации главной группы, к которой принадлежит пользователь. Группы это механизм для контроля доступа к ресурсам на основе GID пользователя вместо его UID. Это может значительно уменьшить размер некоторых файлов настройки. Кроме того, пользователь может быть включен более чем в одну группу. Рекомендуется использовать значения GID, не превышающие 65535, так как большие значения могут стать проблемой для некоторых программ. +Идентификатор группы (GID):: +Идентификатор группы (GID) является числом, используемым для однозначной идентификации основной группы, которой принадлежит пользователь. +Группы являются механизмом контроля доступа к ресурсам на основе GID пользователя, а не его UID. +Это может значительно уменьшить размер некоторых конфигурационных файлов, а также позволяет пользователям быть членами более чем одной группы. +Рекомендуется использовать значения GID, не превышающие 65535, так как превышение может вызвать сбои некоторого программного обеспечения. Класс доступа (login class):: -Классы доступа это расширение к механизму групп, позволяющее более гибко приспосабливать систему для различных пользователей. Классы доступа описаны в <<users-limiting>>. +Классы доступа являются расширением механизма групп, дающим дополнительную гибкость при адаптации системы к различным пользователям. +Классы доступа описываются в разделе crossref:security[users-limiting,Настройка классов доступа]. -Срок действия пароля:: -По умолчанию пароли не устаревают. Однако, есть возможность ограничить срок действия текущего пароля пользователя, и тем самым обязать его обновить пароль. +Периодичность смены пароля:: +По умолчанию пароли не устаревают. +Однако устаревание пароля может быть включено по отдельности у каждого пользователя, принуждая всех или некоторых пользователей менять свои пароли по истечении определённого периода времени. -Срок действия учетной записи:: -По умолчанию во FreeBSD время действия учетных записей не ограничено. При создании учетных записей ограниченного срока действия, например для студентов в учебном заведении, при помощи man:pw[8] укажите дату истечения действия учетной записи. После наступления указанной даты учетная запись становится непригодной для входа в систему, хотя каталоги и файлы этой учетной записи останутся нетронутыми. +Время действия учётной записи:: +По умолчанию во FreeBSD время действия учётных записей не ограничено. +При создании учётных записей с ограниченным сроком действия, например, учётных записей студентов учебного заведения, укажите дату истечения действия учетной записи при помощи man:pw[8]. +После наступления указанной даты учётная запись не может быть использована для входа в систему, хотя каталоги и файлы, соответствующие этой учётной записи, не исчезнут. Полное имя пользователя:: -Имя пользователя является уникальным идентификатором учетной записи в FreeBSD, однако оно не обязано соответствовать реальному имени пользователя. Это поле может содержать реальное имя пользователя. Здесь допустимы пробелы, символы подчеркивания, строка не ограничена до 8 символов. +Имя пользователя является уникальным идентификатором учётной записи для FreeBSD, однако оно не обязательно соответствует реальному имени пользователя. +Подобно комментариям, эта информация может содержать пробелы, заглавные буквы и иметь длину более 8 символов. Домашний каталог:: -Домашний каталог определяется полным путем в системе. С него пользователь начнет работу после входа в систему. По общепринятому соглашению все домашние каталоги пользователей помещаются в [.filename]#/home/username# или [.filename]#/usr/home/username#. Пользователи хранят личные файлы и подкаталоги в своих домашних каталогах. +Домашний каталог является полным путём к некоторому каталогу в системе. +Это начальный каталог пользователя после его входа в систему. +По общепринятому соглашению все домашние каталоги пользователей размещаются в `/home/username` или `/usr/home/username`. +Пользователи хранят свои личные файлы и подкаталоги в своих домашних каталогах. Оболочка пользователя:: -Оболочка необходима пользователям как средство взаимодействия с системой. Существует множество различных видов оболочек, опытные пользователи работают с собственными настройками, которые могут быть отражены в установках их учетных записей. +Оболочка обеспечивает стандартное пользовательское окружение для взаимодействия с системой. +Существует множество различных видов оболочек, и у опытных пользователей будут свои предпочтения, которые могут быть отражены в настройках их учётных записей. [[users-superuser]] -==== Учетная запись суперпользователя +==== Учётная запись суперпользователя -Учетная запись суперпользователя, обычно называемая `root`, используется для управления системой без ограничения привилегий. Поэтому она не должна использоваться для повседневных задач, таких как получение и отправка почты, общее исследование системы или программирование. +Учётная запись суперпользователя, обычно называемая `root`, используется для управления системой без ограничения полномочий. +По этой причине она не должна использоваться для таких повседневных задач, как отправка и получение почты, общий анализ системы или программирование. -Суперпользователь, в отличие от обычных пользователей, может работать без ограничений и поэтому неправильное использование учетной записи суперпользователя может привести к полному уничтожению системы. Учетные записи пользователей не способны уничтожить систему вследствие ошибки, поэтому если нет необходимости в привилегиях суперпользователя, то лучше использовать учетные записи обычных пользователей везде, где это возможно. +В отличие от других пользовательских учётных записей, может работать без ограничений, и некорректное использование учётной записи суперпользователя может привести к грандиозным авариям. +Учётные записи пользователей не способны уничтожить систему по ошибке, поэтому рекомендуется входить в систему как пользователь, и переключаться в режим суперпользователя только в случае, когда запускаемой команде требуются дополнительные полномочия. -Всегда перепроверяйте и переперепроверяйте команды, выполняемые под учетной записью суперпользователя, поскольку даже один лишний пробел или отсутствующий символ может привести к безвозвратной потере данных. +Всегда проверяйте и перепроверяйте любые команды, запускаемые учётной записью суперпользователя, поскольку любой дополнительный пробел или отсутствующий символ может привести к безвозвратной потере данных. -Есть несколько способов получения привилегий суперпользователя. Наименее удобный способ - войти в систему под учетной записью `root`. +Имеется несколько способов получения полномочий суперпользователя. +Хотя можно входить как пользователь `root`, это крайне не рекомендуется. -Вместо этого можно воспользоваться man:su[1]. Если при запуске этой команды указывается ключ `-`, пользователь получит настройки окружения учетной записи `root`. Пользователь, запускающий эту команду, обязан входить в группу `wheel`, в противном случае команда не выполнится. Пользователь также должен знать пароль учетной записи `root`. +Для того, чтобы стать суперпользователем, вместо этого используйте man:su[1]. +Если при запуске этой команды указывается параметр `-`, то пользователь также получит настройки окружения учётной записи `root`. +Пользователь, запускающий эту команду, должен входить в группу `wheel`, в противном случае команда не будет выполнена. +Пользователь также должен знать пароль для учётной записи пользователя `root`. -В следующем примере пользователь повышает привилегии для запуска команды `make install`, так как этот шаг требует прав суперпользователя. По завершении работы команды пользователь набирает `exit`, тем самым выходя из учетной записи суперпользователя и возвращая привилегии собственной учетной записи. +В этом примере пользователь становится суперпользователем только для запуска команды `make install`, так как этот шаг требует полномочий суперпользователя. +После завершения работы команды пользователь набирает `exit` для того, чтобы выйтих из учётной записи суперпользователя и возвратиться к полномочиям собственной пользовательской учётной записи. -.Установка программы с привилегиями суперпользователя +.Установка программы с полномочиями суперпользователя [example] ==== @@ -322,15 +344,20 @@ Password: ==== -Утилита man:su[1] прекрасно подходит для одиночных систем или небольших сетей с единственным системным администратором. В качестве альтернативы ей следует упомянуть порт или пакет package:security/sudo[]. Эта утилита предоставляет журналирование активности, а также позволяет администратору указывать перечень утилит, доступных пользователю для запуска с правами суперпользователя. +Стандартный механизм man:su[1] хорошо работает для отдельных инсталляций или небольших сетей с единственным системным администратором. +Альтернативой является установка пакета или порта package:security/sudo[]. +Данное программное обеспечение обеспечивает протоколирование активностей и позволяет администратору настраивать, какие команды и какими пользователями могут запускаться с полномочиями суперпользователя. [[users-modifying]] -=== Изменение учетных записей +=== Управление учётными записями + +FreeBSD предоставляет набор различных команд для управления учётными записями пользователей. +Наиболее часто используемые команды перечислены в разделе crossref:basics[users-modifying-utilities,Инструменты для управления учётными записями], атем даны некоторые примеры их использования. +Обратитесь к страницам Справочника каждой утилиты для получения дополнительной информации и примеров использования. -FreeBSD располагает набором различных команд для работы с учетными записями пользователей. <<users-modifying-utilities>> перечисляет наиболее часто используемые команды, ниже находятся примеры их использования. За исчерпывающей информацией по каждой утилите следует обратиться к соответствующим страницам справочников. [[users-modifying-utilities]] -.Утилиты для управления учетными записями -[cols="1,1", frame="none", options="header"] +.Инструменты для управления учётными записями +[cols="25h,~"] |=== | Команда | Краткое описание @@ -348,24 +375,39 @@ FreeBSD располагает набором различных команд д |Инструмент командной строки для изменения паролей пользователей. |man:pw[8] -|Мощный и гибкий инструмент для изменения любой информации, связанной с учетными записями пользователей. +|Мощный и гибкий инструмент для изменения всех параметров пользовательских учётных записей. + +|man:bsdconfig[8] +|Инструмент настройки системы с поддержкой управления учётными записями. |=== [[users-adduser]] -==== `adduser` +==== Добавление пользователя -Для добавления новых пользователей рекомендуется использовать man:adduser[8]. При добавлении нового пользователя программа автоматически обновляет [.filename]#/etc/passwd# и [.filename]#/etc/group#. Она также создает домашний каталог для нового пользователя, копируя файлы настройки по умолчанию из [.filename]#/usr/shared/skel#, и может отправлять новому пользователю приветственное сообщение электронной почтой. Эту утилиту необходимо запускать с правами суперпользователя. +Рекомендуемой программой для добавления новых пользователей является man:adduser[8]. +При добавлении нового пользователя эта программа автоматически обновляет `/etc/passwd` и `/etc/group`. +Она также создаёт домашний каталог для этого пользователя, копирует стандартные конфигурационные файлы из `/usr/share/skel` и опционально может отправить новому пользователю по электронной почте приветственное сообщение. +Эта утилита должна запускаться с полномочиями суперпользователя. -Утилита man:adduser[8] является интерактивной. Для создания новой учетной записи потребуется ответить на несколько вопросов. Как показано в <<users-modifying-adduser>>, ответом считается либо ввод необходимой информации, либо нажатие клавиши kbd:[Return] для принятия значения по умолчанию, которое показано в квадратных скобках. В этом примере пользователь включен в группу `wheel`, что дает возможность ему повышать привилегии до суперпользователя при помощи man:su[1]. На последнем шаге утилита предложит создать еще одну учетную запись или завершить работу. +Утилита man:adduser[8] является интерактивной и следует шагам создания новой учётной записи пользователя. +Как показано в разделе crossref:basics[users-modifying-adduser, Добавление пользователя во FreeBSD], вводите запрашиваемую информацию либо нажимайте kbd:[Return] для принятия значения по умолчанию, отображаемого в квадратных скобках. +В этом примере пользователь был приглашён в группу `wheel`, позволяющей работать с полномочиями суперпользователя при помощи man:su[1]. +По окончании утилита выдаст запрос на создание ещё одного пользователя или завершение работы. [[users-modifying-adduser]] -.Добавление пользователя в FreeBSD +.Добавление пользователя во FreeBSD [example] ==== [source,shell] .... # adduser +.... + +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... Username: jru Full name: J. Random User Uid (Leave empty for default): @@ -394,75 +436,92 @@ OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! -# .... ==== [NOTE] ==== -При наборе пароля текст не отображается, поэтому постарайтесь не допускать опечаток в пароле при создании учетной записи. +Так как при наборе пароля он не отображается, будьте внимательны к опечаткам при его вводе при создании пользовательской учётной записи. ==== [[users-rmuser]] -==== `rmuser` +==== Удаление пользователя -Для полного удаления пользователя из системы запустите man:rmuser[8] с правами суперпользователя. Эта программа выполняет следующие действия: +Для полного удаления пользователя из системы запустите man:rmuser[8] с полномочиями суперпользователя. +Эта команда выполняет следующие шаги: [.procedure] ==== -. Если в man:crontab[1] существуют записи пользователя, то они удаляются. -. Удаляются принадлежащие пользователю задачи man:at[1]. -. Уничтожаются все процессы, принадлежащие пользователю. -. Удаляется запись пользователя из локального файла паролей. -. Если домашний каталог принадлежит пользователю, то каталог удаляется. -. Удаляется принадлежащая пользователю входящая почта из [.filename]#/var/mail#. -. Удаляются все файлы, принадлежащие пользователю, из каталогов с временными файлами, например из [.filename]#/tmp#. -. Наконец, в [.filename]#/etc/group# из всех групп удаляется имя пользователя. Если после этого удаления группа остается пустой и имя группы совпадает с именем пользователя, она удаляется. Это необходимо для удаления пользовательских уникальных групп, создаваемых man:adduser[8]. +. Удаляет пользовательскую информацию в man:crontab[1], если она имеется. +. Удаляет все задания man:at[1], принадлежащие этому пользователю. +. Отправляет сигнал SIGKILL всем процессам, владельцем которых является данный пользователь. +. Удаляет пользователя из локального файла паролей системы. +. Удаляет домашний каталог пользователя (если владельцем этого каталога является данный пользователь), включая обработку символических ссылок в маршруте к реальному домашнему каталогу. +. Удаляет файлы входящей почты, принадлежащие этому пользователю, из `/var/mail`. +. Удаляет все файлы, владельцем которых является этот пользователь, из /tmp`, `/var/tmp` и `/var/tmp/vi.recover`. +. Удаляет имя пользователя из всех групп, в которых он состоит, в `/etc/group`. Если какая-то группа становится пустой, а её название совпадает с именем пользователя, то эта группа удаляется; эта группа соответствует уникальной пользовательской группе, создаваемой man:adduser[8]. +. Удаляет все очереди сообщений, сегменты совместно используемой памяти и семафоры, владельцем которых является данный пользователь. ==== -man:rmuser[8] не может использоваться для удаления учетной записи суперпользователя, поскольку это почти всегда означает разрушение системы. +man:rmuser[8] не может использоваться для удаления учётной записи суперпользователя, поскольку это практически гарантированно означает массовые сбои системы. -По умолчанию используется интерактивный режим, это показано в следующем примере. +По умолчанию используется интерактивный режим, как показано в следующем примере. -.Интерактивное удаление учетной записи с помощью `rmuser` +.Интерактивное удаление учётной записи с помощью `rmuser` [example] ==== [source,shell] .... # rmuser jru +.... + +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Removing user (jru): mailspool home passwd. -# .... ==== [[users-chpass]] -==== `chpass` +==== Изменение информации о пользователе -При помощи man:chpass[1] любой пользователь может изменять информацию, связанную с его учетной записью. И только суперпользователю разрешено менять информацию других пользователей. +Любой пользователь может воспользоваться man:chpass[1] для изменения своего используемого по умолчанию командного процессора и персональной информации, связанной с его пользовательской учётной записью. +Суперпользователь может использовать данную утилиту для изменения дополнительной информации об учётной записи любого пользователя. -При запуске без параметров (кроме необязательного имени пользователя), man:chpass[1] вызывает редактор, содержащий информацию о пользователе. Когда пользователь выходит из редактора, база данных пользователей обновляется новой информацией. +При запуске без указания параметров, за исключением необязательного имени пользователя, man:chpass[1] отображает редактор, содержащий информацию пользователя. +Когда пользователь завершает работу с редактором, база данных пользователей обновляется новой информацией. [NOTE] ==== -Если утилита не была запущена с правами суперпользователя, то после выхода из редактора будет запрошен пароль пользователя. +Если утилита запущена не с полномочиями суперпользователя, то после выхода из редактора она запросит пароль пользователя. ==== -В <<users-modifying-chpass-su>> суперпользователь, выполнив команду `chpass jru`, просматривает доступные для изменения поля. Если `jru` запустит эту команду, то лишь последние шесть строк будут доступны ему для редактирования. Это показано в <<users-modifying-chpass-ru>>. +В разделе crossref:basics[users-modifying-chpass-su,Использование `chpass` с полномочиями суперпользователя] суперпользователь набрал `chpass jru` и просматривал поля, которые могут быть изменены для данного пользователя. +Если вместо этого эта команда будет запущена пользователем `jru`, то будут отображены и доступны для редактирования только шесть последних полей. +Это показано в разделе crossref:basics[users-modifying-chpass-ru,Использование `chpass` с полномочиями обычного пользователя]. [[users-modifying-chpass-su]] -.Работа с `chpass` с правами суперпользователя +.Использование `chpass` с полномочиями суперпользователя [example] ==== [source,shell] .... +# chpass +.... + +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... #Changing user database information for jru. Login: jru Password: * @@ -479,14 +538,12 @@ Office Phone: Home Phone: Other information: .... - ==== [[users-modifying-chpass-ru]] -.Работа с `chpass` с правами обычного пользователя +.Использование `chpass` с полномочиями обычного пользователя [example] ==== - [source,shell] .... #Changing user database information for jru. @@ -497,26 +554,33 @@ Office Phone: Home Phone: Other information: .... - ==== [NOTE] ==== -man:chfn[1] и man:chsh[1] это ссылки на man:chpass[1], как и man:ypchpass[1], man:ypchfn[1] и man:ypchsh[1]. Так как NIS поддерживается автоматически, указание `yp` перед командой не обязательно. Настройка NIS будет рассмотрена в crossref:network-servers[network-servers, Сетевые серверы]. +Команды man:chfn[1] и man:chsh[1] являются ссылками на man:chpass[1], так же, как и man:ypchpass[1], man:ypchfn[1] и man:ypchsh[1]. +Так как NIS поддерживается автоматически, указание `yp` перед командой не обязательно. +Настройка NIS рассматривается в <<network-servers>>. ==== [[users-passwd]] -==== `passwd` +==== Изменение пароля пользователя -Любой пользователь может изменить собственный пароль при помощи man:passwd[1]. Для предотвращения случайного или несанкционированного изменения, команда запрашивает текущий пароль пользователя перед установкой нового: +Любой пользователь может легко сменить собственный пароль при помощи man:passwd[1]. +Для предотвращения случайных или неавторизованных изменений перед установкой нового пароля эта команду будут запрашивать первоначальный пароль пользователя: -.Изменение пароля +.Изменение собственного пароля [example] ==== - [source,shell] .... % passwd +.... + +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... Changing local password for jru. Old password: New password: @@ -527,180 +591,167 @@ passwd: done ==== -Суперпользователь может изменить пароль любого пользователя, указав его имя при запуске man:passwd[1]. Утилита, запущенная с правами суперпользователя, не запрашивает текущий пароль пользователя. Благодаря этому возможно устанавливать новые пароли забывчивым пользователям. +Суперпользователь может сменить пароль любого пользователя, указав имя пользователя при запуске man:passwd[1]. +В тех случаях, когда эта утилита работает с полномочиями суперпользователя, она не будет запрашивать текущий пароль пользователя. +Это позвляет менять пароль в случае, когда пользователь не может вспомнить первоначальный пароль. .Изменение пароля другого пользователя суперпользователем [example] ==== - [source,shell] .... # passwd jru +.... + +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done .... - ==== [NOTE] ==== -Как и в случае с man:chpass[1], man:yppasswd[1] это всего лишь ссылка на man:passwd[1], так что NIS работает с обеими командами. +Как и в случае с man:chpass[1], man:yppasswd[1] является ссылкой на man:passwd[1], так что NIS работает с любой из команд. ==== [[users-pw]] -==== `pw` - -man:pw[8] это утилита командной строки для создания, удаления, модифицирования и отображения пользователей и групп. Она функционирует как внешний интерфейс к системным файлам пользователей и групп. У man:pw[8] очень мощный набор параметров командной строки, что делает это программу подходящей для использования в shell скриптах, но новым пользователям она может показаться более сложной, чем другие представленные здесь команды. +==== Создание, удаление, изменение и просмотр пользователей и групп в системе -[[users-limiting]] -=== Ограничение пользователей +Утилита man:pw[8] может создавать, удалять, изменять и отображать пользователей и группы. +Она функционирует как пользовательский интерфейс к системным файлам пользователей и групп. +man:pw[8] обладает очень мощным набором параметров командной строки, что делает её подходящей для использования в скриптах командного процессора, однако новым пользователям она может показаться более сложной, чем другие команды, представленные в этом разделе. -FreeBSD предоставляет администратору несколько способов ограничения количества занимаемых пользователями системных ресурсов. Дисковые квоты, как один из видов ограничения ресурсов, обсуждаются в отдельном разделе, остальные ограничения перечислены далее в тексте. - -Дисковые квоты ограничивают объем дискового пространства, занимаемого пользователями, а также предоставляют способ быстрой проверки занимаемого объема без пересчета его каждый раз. Квоты обсуждаются в crossref:disks[quotas,Квотирование файловых систем]. - -Другие ограничения ресурсов включают способы ограничения использования CPU, памяти и других ресурсов, которые могут потребляться пользователем. Ограничения накладываются с помощью классов учетных записей и обсуждаются в этом разделе. - -Классы учетных записей определяются в [.filename]#/etc/login.conf#, они детально описаны на странице справочника man:login.conf[5]. Каждой учетной записи присвоен класс (`default` по умолчанию), и каждому классу присвоен набор характеристик. Характеристика определяется в виде пары `имя=значение`, где _имя_ это определенный идентификатор, а _значение_ это произвольная строка, обрабатываемая в зависимости от _имени_. Настройка классов и характеристик довольно проста, и также описана в man:login.conf[5]. - -[NOTE] -==== -FreeBSD, как правило, не читает настройки в [.filename]#/etc/login.conf# непосредственно, вместо этого она обращается к файлу базы данных [.filename]#/etc/login.conf.db# для ускорения доступа к данным. Всякий раз после редактирования [.filename]#/etc/login.conf# необходимо обновить [.filename]#/etc/login.conf.db# при помощи следующей команды: - -[source,shell] -.... -# cap_mkdb /etc/login.conf -.... - -==== +[[users-groups]] +=== Управление группами -Ограничения на ресурсы отличаются от обычных характеристик: во-первых, для каждого ограничения существует "мягкое" (текущее) и "жесткое" ограничение. Мягкое ограничение может настраиваться пользователем или приложением, но не может превышать жесткое ограничение. Последнее может быть уменьшено пользователем, а увеличено - лишь суперпользователем. Во-вторых, большинство ограничений ресурсов накладываются на каждый процесс определенного пользователя, а не к пользователю вообще. Эти различия диктуются особенностями обработки ограничений, а не реализацией структуры характеристик учетных записей. +Группа представляет собой список пользователей. +Группа идентифицируется по её имени и GID. +Во FreeBSD для определения того, что имеет право делать процесс, ядро использует UID процесса и список групп, которым он принадлежит. +В большинстве случаев GID пользователя или процесса соотносится с первой группой из списка. -Ниже приведен список наиболее часто используемых ограничений на ресурсы. Остальные, вместе с другими характеристиками, можно найти в man:login.conf[5]. +Соответствия имени группы и GID перечислены в `/etc/group`. +Это обычный текстовый файл с четырьмя полями, разделёнными двоеточиями. +Первое поле соответствует имени группы, второе является зашифрованным паролем, третье содержит GID, а четвёртое является списком членов группы, разделённых запятыми. +За полным описанием синтаксиса обратитесь к man:group[5]. -`coredumpsize`:: -Ограничение на размер файла дампа памяти , генерируемого программой, подчиняющееся другим ограничениям на используемое дисковое пространство, таким как `filesize`, или дисковым квотам. Это ограничение часто используется как менее строгий метод контролирования потребления дискового пространства. Поскольку пользователь не создает файлы дампов памяти самостоятельно, и зачастую не удаляет их, установка этого параметра может предохранить пользователя от выхода за пределы ограничений на дисковое пространство, в случае если большая программа создаст файл аварийного дампа памяти. +Суперпользователь может изменять `/etc/group` при помощи какого-либо текстового редактора, однако предпочтительным способом является редактирование файла с группами при помощи утилиты man:vigr[8], так как она может отловить некоторые распространённые ошибки. -`cputime`:: -Это максимальное количество времени ЦПУ, потребляемого пользователем. Превысившие это время процессы будут уничтожены ядром. -+ +В качестве альтернативы для добавления и редактирования групп можно использовать man:pw[8]. +Например, для добавления группы с именем `teamtwo` и последующей проверки её существования: -[NOTE] +[WARNING] ==== -Это ограничение потребляемого _времени_ ЦПУ, а не процентов использования ЦПУ, которые отображаются в некоторых полях man:top[1] и man:ps[1]. +При использовании группы operator следует соблюдать осторожность, так как при этом могут быть ненамеренно даны полномочия этой группы, близкие к полномочиям суперпользователя, включая, но не ограничиваясь, правами на завершение работы системы и её перезапуск, а также на доступ ко всем объектам в `/dev`. ==== -`filesize`:: -Это максимальный размер файла , которым может владеть пользователь. В отличие от crossref:disks[quotas,дисковых квот], это ограничение применяется к отдельным файлам, а не ко всему набору принадлежащих пользователю файлов. - -`maxproc`:: -Это максимальное число процессов , которые могут быть запущены пользователем. В это число включаются и консольные, и фоновые процессы. Это ограничение не может превышать системный лимит, указываемый через переменную man:sysctl[8] `kern.maxproc`. Установка слишком жестких ограничений может стать помехой работе пользователя: зачастую ему удобно входить в систему с нескольких консолей или использовать каналы. Некоторые задачи, такие как компиляция большой программы, порождают множество процессов. - -`memorylocked`:: -Это максимальный объем памяти , блокировка которого может быть запрошена процессом при помощи man:mlock[2]. Некоторые критически важные для системы программы, такие как man:amd[8], блокируют отведенную процессу память так, что в случае "пробуксовывания" системы (system thrashing) они не усугубляют проблему. - -`memoryuse`:: -Это максимальный объем памяти , которая может быть занята процессом в любой момент времени. Сюда входит основная память и использование подкачки. Это ограничение не снимает все вопросы, связанные с использованием памяти, но для начала это подходящее ограничение. - -`openfiles`:: -Это максимальное количество файлов, которые могут быть открыты процессом. В FreeBSD файлы также используются для представления сокетов и каналов IPC, поэтому не устанавливайте слишком маленькое значение. Ограничение этого параметра, устанавливаемое для всей системы, определяется переменной man:sysctl[8] `kern.maxfiles`. - -`sbsize`:: -Это ограничение на объем сетевой памяти, т.е. mbufs , которую может занять пользователь. В общем, это ограничение может быть использовано для ограничения сетевых взаимодействий. - -`stacksize`:: -Это максимальный размер сегмента стека процесса. Сам по себе этот параметр не может ограничить размер используемой программой памяти, следовательно, его необходимо использовать вместе с другими ограничениями. - -Существуют несколько других аспектов, которые необходимо учитывать при установке ограничений ресурсов. Ниже приведены некоторые общие подсказки, советы и различные комментарии. - -* Процессам, загружаемым при старте системы скриптами [.filename]#/etc/rc# присваивается класс `daemon`. -* Хотя поставляемый с системой [.filename]#/etc/login.conf# - это хороший источник корректных значений для большинства ограничений, сами ограничения могут не подходить для конкретной системы. Установка слишком слабых ограничений может повлечь злоупотребления системой, а установка слишком сильных ограничений может стать помехой производительности. -* Пользователи Xorg возможно должны получить больше ресурсов, чем другие пользователи. Xorg сама по себе потребляет много ресурсов, а также провоцирует пользователей на одновременный запуск большего количества программ. -* Многие ограничения применяются к отдельным процессам, а не к пользователю вообще. Например, установка `openfiles` в 50 означает, что каждый процесс, запущенный пользователем, может открывать до 50 файлов. Общее количество файлов, которые могут быть открыты пользователем, вычисляется как `openfiles`, умноженное на `maxproc`. Это также применимо к потребляемой памяти. - -За дальнейшей информацией по ограничениям на ресурсы, классам учетных записей и характеристикам, обращайтесь к man:cap.mkdb[1], man:getrlimit[2], и man:login.conf[5]. - -[[users-groups]] -=== Группы - -Группа это список пользователей. Группа идентифицируется по имени и GID (Group ID). В FreeBSD для определения прав процесса ядро использует UID процесса, а также список групп, которым он принадлежит. В большинстве случаев, GID пользователя означает первую группу из списка. - -Имена групп связываются с GID в файле [.filename]#/etc/group#. Это текстовый файл с четырьмя разделенными двоеточием полями. Первое поле это имя группы, второе это зашифрованный пароль, третье это GID, а четвертое это разделенный запятыми список членов группы. За более полным описанием синтаксиса обратитесь к man:group[5]. - -Суперпользователь может редактировать [.filename]#/etc/group# при помощи текстового редактора. Как вариант, можно задействовать man:pw[8] для добавления и редактирования групп. Например, для добавления группы, называемой `teamtwo`, и проверки ее существования вы можете использовать: - .Добавление группы с использованием man:pw[8] [example] ==== - [source,shell] .... # pw groupadd teamtwo # pw groupshow teamtwo -teamtwo:*:1100: .... +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... +teamtwo:*:1100: +.... ==== -В этом примере число `1100` это GID группы `teamtwo`. На данный момент в `teamtwo` нет членов. Следующая команда добавит `jru` в группу `teamtwo`. +В этом примере `1100` является GID группы `teamtwo`. +На данный момент в `teamtwo` нет участников. +Эта команда добавит `jru` в группу `teamtwo` в качестве участника. -.Добавление пользователей в новую группу при помощи man:pw[8] +.Добавление учётных записей пользователей в новую группу при помощи man:pw[8] [example] ==== - [source,shell] .... # pw groupmod teamtwo -M jru # pw groupshow teamtwo -teamtwo:*:1100:jru .... +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... +teamtwo:*:1100:jru +.... ==== -Аргумент к параметру `-M` это разделенный запятыми список пользователей, которые добавляются в новую (пустую) группу или заменяют существующих членов группы. Что касается пользователя - это членство в группе отличается от первичной группы пользователя, указанного в файле паролей. Это значит, что пользователь не будет показан как член группы при использовании man:pw[8] `groupshow`, но будет отображен при использовании man:id[1] или похожего инструмента. Когда программа man:pw[8] задействована для добавления пользователя в группу, то она работает только с файлом [.filename]#/etc/group# и не ищет дополнительную информацию в файле [.filename]#/etc/passwd#. +Аргументом к параметру `-M` является разделённый запятыми список пользователей, которых нужно добавить в новую (пустую) группу или заменить участников существующей группы. +С точки зрения пользователя такое членство в группе отличается от основной группы, указанной в файле паролей (и является дополнительным к ней). +Это значит, что пользователь не будет отображаться как участник группы при использовании параметра `groupshow` с man:pw[8], но будет отображаться при запросе информации с помощью man:id[1] или аналогичного инструмента. +При использовании man:pw[8] для добавления пользователя в группу она работает только с `/etc/group` и не пытается считывать дополнительные сведения из `/etc/passwd`. -.Добавление нового члена группы с использованием man:pw[8] +.Добавление нового участника в группу с помощью man:pw[8] [example] ==== - [source,shell] .... # pw groupmod teamtwo -m db # pw groupshow teamtwo -teamtwo:*:1100:jru,db .... +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... +teamtwo:*:1100:jru,db +.... ==== -В этом примере аргументом к опции `-m` является разделенный запятыми список пользователей, добавляемых в группу. В отличие от предыдущего примера, пользователи добавляются в группу, а не замещают имеющийся список пользователей группы. +В этом примере аргументом к параметру `-m` является разделённый запятыми список пользователей, которые должны быть добавлены в группу. +В отличие от предыдущего примера, эти пользователи присоединяются к группе, а не замещают существующих в группе пользователей. -.Использование man:id[1] для определения принадлежности к группам +.Использование man:id[1] для определения принадлежности к группе [example] ==== - [source,shell] .... % id jru -uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) .... +Выводимый текст должен быть похож на следующее: + +[.programlisting] +.... +uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) +.... ==== В этом примере `jru` является членом групп `jru` и `teamtwo`. -За дальнейшей информацией об этой команде и о формате файла [.filename]#/etc/group# обратитесь к man:pw[8] и man:group[5]. +За дополнительной информацией об этой команде и о формате `/etc/group` обратитесь к man:pw[8] и man:group[5]. [[permissions]] == Права доступа -FreeBSD является прямым потомком BSD UNIX(R) и основывается на некоторых ключевых концепциях UNIX(R). В первую очередь это, конечно, тот факт, что FreeBSD - многопользовательская операционная система. Это означает, что несколько пользователей могут работать одновременно, решая различные задачи и совершенно не мешая друг другу. На системе лежит ответственность за правильное разделение и управление такими ресурсами как память, процессорное время, периферийные устройства и прочее. +Во FreeBSD с каждым файлом и каталогом связан набор прав доступа, для просмотра и изменения которых доступны несколько утилит. +Понимание того, как работают эти права доступа, необходимо для обеспечения того, чтобы пользователи могли получать доступ к файлам, которые им нужны, и не могли некорректно обращаться к файлам, используемым операционной системой или владельцами которых является другие пользователи. -Многопользовательская среда предполагает наличие механизма регулирования прав доступа к любому ресурсу в системе. Существует три типа прав доступа: на чтение, запись и исполнение. Права сгруппированы три по три, соответственно чтение/запись/выполнение для владельца/группы/всех остальных. Численное представление: +В этом разделе описываются традиционные полномочия UNIX(R), используемые во FreeBSD. +Для более тонкого управления доступом в файловой системе обратитесь к разделу crossref:fs-acl[fs-acl,Списки управления доступом]. -[.informaltable] +В UNIX(R) базовые права доступа назначаются с использованием трёх типов доступа: чтение, запись и исполнение. +Эти типы доступа используются для определения доступа к файлу для владельца файла, для группы и для прочих пользователей (всех остальных). +Полномочия на чтение, запись и исполнение могут быть представлены в виде букв `r`, `w` и `x`. +Также они могут быть представлены в виде двоичных чисел, так как каждое полномочие либо включено, либо выключено (`0`). +При представлении в виде числа порядок прочтения всегда имеет вид `rwx`, где `r` имеет значение `4`, `w` имеет значение `2` и `x` равно `1`. + +В Таблице 4.1 сведены возможные цифровые и символьные комбинации. +В столбце "Список файлов каталога" символ `-` используется для отражения отсутствующего права доступа. + +.Права доступа UNIX(R) [cols="1,1,1", frame="none", options="header"] |=== | Значение @@ -740,38 +791,53 @@ FreeBSD является прямым потомком BSD UNIX(R) и основ |`rwx` |=== -Вы можете использовать опцию `-l` команды man:ls[1] для получения подробного листинга каталога, включающего колонку с информацией о правах на файл для владельца, группы и всех остальных. Например, команда `ls -l` в произвольном каталоге может вывести следующее: +Используйте параметр `-l` с командой man:ls[1] для получения подробного списка содержимого каталога, включающего столбец с информацией о полномочиях на файл для владельца, группы и всех остальных. +Например, `ls -l` в произвольно выбранном каталоге может выдать следующее: [source,shell] .... % ls -l -total 530 --rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile --rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile --rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt -... .... -Вот как выглядит первая колонка вывода `ls -l`: +Выводимый текст должен быть похож на следующее: -[source,shell] +[.programlisting] .... --rw-r--r-- +total 530 +-rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile +-rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile +-rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt .... -Первый (считая слева) символ говорит обычный ли это файл, каталог, символьное устройство, сокет или любое другое псевдо-файловое устройство. В нашем случае `-` указывает на обычный файл. Следующие три символа (в данном случае это `rw-`) задают права доступа владельца файла. Затем идут права группы, которой принадлежит файл (`r--`). Последняя тройка (`r--`) определяет права для всех остальных. Минус означает отсутствие каких-либо прав (т.е. нельзя ни читать, ни писать, ни выполнять). В данном случае права установлены таким образом, что владелец может читать и писать в файл, а группа и другие могут только читать. Таким образом, численное представление прав `644`, где каждая цифра представляет три части прав на файл. +В строке, соответствующей `myfile`, первый (самый левый) символ в первом столбце указывает на то, обычный ли это файл, каталог, специальное символьное устройство, сокет или какое-то другое специальное псевдофайловое устройство. +В данном примере `-` указывает на то, что это обычный файл. +Следующие три символа (в данном примере это `rw-`) определяют полномочия владельца файла. +Последующие три символа, `r--`, определяют полномочия группы, которой принадлежит файл. +Последние три символа, `r--`, определяют полномочия для всего остального мира. +Дефис означает, что полномочия отсутствуют. +В этом примере полномочия установлены таким образом, что владелец может выполнять операции чтения и записи в файл, группа может читать файл, а весь остальной мир может только читать файл. +В соответствии с таблицей выше, полномочия для этого файлы могли бы быть представлены как `644`, где каждая цифра представляет три части полномочий на файл. -Права на устройства контролируются аналогичным образом. В FreeBSD все устройства представлены в виде файлов, которые можно открывать, читать и писать в них. Эти специальные файлы содержатся в каталоге [.filename]#/dev#. +Как система управляет полномочиями на устройства? +Во FreeBSD большинство устройств представлено в виде файлов, которые программы могут открывать, читать и записывать в них данные. +Эти специальные файлы устройств размещаются в каталоге `/dev`. -Каталоги также являются файлами. К ним применимы те же права на чтение, запись и выполнение. Правда, в данном случае "выполнение" имеет несколько другой смысл. Когда каталог помечен как "исполнимый", это означает, что можно "зайти" в него (с помощью команды `cd`, change directory). Это также означает, что в данном каталоге можно получить доступ к файлам, имена которых известны (конечно, если собственные права на файл разрешают такой доступ). +Каталоги обрабатываются так же, как и файлы. +У них также имеются полномочия на чтение, запись и выполнение. +Бит исполнимости для каталога имеет несколько другой, отличающийся от файлов, смысл. +Когда каталог помечен как исполняемый, это означает, что в него можно перейти с помощью команды man:cd[1]. +Это также означает, что можно получить доступ к файлам в данном каталоге с учётом полномочий, установленных для этих файлов. -Если же требуется получить список файлов в некотором каталоге, права доступа на него должные включать доступ на чтение. Для того, чтобы удалить из каталога какой-либо файл, имя которого известно, на этот каталог должны быть даны права на запись _и_ на исполнение. +Для того, чтобы получить список файлов в каталоге, на него должны быть установлены полномочия на чтение. +Для того, чтобы удалить из каталога какой-либо файл, имя которого известно, необходимо иметь полномочия на запись _и_ исполнение каталога, содержащего соответствующий файл. -Существуют и другие права доступа, но они как правило используются в особых случаях, например, setuid-бит на выполняемые файлы и sticky-бит на каталоги. За дополнительными сведениями по этому вопросу обращайтесь к man:chmod[1]. +Существуют и другие права доступа, но они как правило используются в особых случаях, например, setuid-бит на выполняемые файлы и sticky-бит на каталоги. +За дополнительной информацией о файловых полномочиях и о том, как их устанавливать, обратитесь к man:chmod[1]. -=== Символические обозначения прав +=== Символическое обозначение полномочий -Символические обозначения, иногда называемые символическими выражениями, используют буквы вместо восьмеричных значений для назначения прав на файлы и каталоги. Символические выражения используют синтаксис (кто) (действие) (права), где существуют следующие значения: +Символическое обозначение полномочий использует буквы вместо восьмеричных значений для назначения прав на файлы или каталоги. +Символическое обозначение использует формат (кто) (действие) (полномочия), при этом доступны следующие значения: [.informaltable] [cols="1,1,1", frame="none", options="header"] @@ -829,14 +895,16 @@ total 530 |SUID или SGID |=== -Эти значения используются командой man:chmod[1] так же как и раньше, но с буквами. Например, вы можете использовать следующую команду для запрета доступа других пользователей к _FILE_: +Эти значения используются с командой man:chmod[1], но с буквами вместо цифр. +Например, следующая команда блокирует доступ к _FILE_ как для членов группы, соответствующей _FILE_, так и для всех прочих пользователей: [source,shell] .... % chmod go= FILE .... -Для изменения более чем одного набора прав можно применить список, разделенный запятыми. Например, следующая команда удалит права группы и "всех остальных" на запись в _FILE_, а затем добавит права на выполнение для всех: +Для изменения более чем одного набора прав можно применить список значений, разделённых запятыми. +Например, следующая команда удаляет права группы и "всех остальных" на запись в _FILE_ и добавляет права на выполнение любым пользователям: [source,shell] .... @@ -845,70 +913,87 @@ total 530 === Флаги файлов в FreeBSD -Кроме уже описанных прав доступа к файлам, FreeBSD поддерживает использование "флагов файлов". Эти флаги обеспечивают дополнительный уровень защиты и контроля над файлами, но не могут применяться к каталогам. - -Эти флаги добавляют дополнительные возможности контроля над файлами, обеспечивая (при определенных условиях) невозможность их удаления или изменения даже пользователю `root`. +Кроме прав доступа к файлам, FreeBSD поддерживает использование "файловых флагов". +Эти флаги привносят дополнительный уровень защиты и контроля над файлами, но не каталогами. +При помощи этих флагов даже пользователь `root` может быть ограничен в удалении или изменении файлов. -Файловые флаги изменяются при помощи утилиты man:chflags[1] посредством простого интерфейса. К примеру, чтобы установить системный признак неудаляемости на файл [.filename]#file1#, выполните следующую команду: +Файловые флаги изменяются при помощи man:chflags[1]. +К примеру, для установки системного флага неудаляемости на файл `file1`, выполните следующую команду: [source,shell] .... # chflags sunlink file1 .... -Чтобы отключить флаг неудаляемости, просто выполните предыдущую команду с ключом "no" перед параметром `sunlink`. Вот так: +Чтобы отключить системный флаг неудаляемости, укажите "no" перед `sunlink`: [source,shell] .... # chflags nosunlink file1 .... -Чтобы просмотреть флаги этого файла, воспользуйтесь командой man:ls[1] с параметрами `-lo`: +Чтобы просмотреть флаги какого-либо файла, используйте команду man:ls[1] с параметрами `-lo`: [source,shell] .... # ls -lo file1 .... -Результат выполнения команды должен выглядеть примерно так: - [.programlisting] .... -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 .... -Некоторые флаги могут быть установлены или сняты с файлов только пользователем `root`. В остальных случаях эти флаги может установить владелец файла. Для получения дополнительной информации мы рекомендуем изучить содержимое справки по командам man:chflags[1] и man:chflags[2]. +Некоторые файловые флаги могут быть установлены или сняты только пользователем `root`. +В остальных случаях флаги файла может устанавливать его владелец. +Обратитесь к man:chflags[1] и man:chflags[2] для получения дополнительной информации. -=== setuid, setgid и sticky-биты в правах доступа +=== Права доступа setuid, setgid и sticky -В дополнение к рассмотренным выше правам доступа и флагам файлов необходимо также упомянуть еще три бита прав доступа, о которых должны знать все системные администраторы. Это такие биты, как `setuid`, `setgid` и `sticky`. +В дополнение к рассмотренным выше правам доступа и флагам файлов необходимо также упомянуть еще три вида прав доступа, о которых должны знать все системные администраторы. +Это полномочия `setuid`, `setgid` и `sticky`. -Эти биты играют важную роль в определённых моментах работы UNIX(R), так как они предоставляют функциональность, расширяющую права обычного пользователя. Чтобы понять как они работают, необходимо определить различие между реальным идентификатором пользователя (UID) и действующим идентификатором пользователя (effective UID, EUID). +Эти биты играют важную роль в определённых моментах работы UNIX(R), так как они предоставляют функциональность, расширяющую права обычного пользователя. +Чтобы понять, как они работают, необходимо отметить различия между реальным идентификатором пользователя (UID) и действующим идентификатором пользователя (effective UID, EUID). -Реальный UID - это идентификатор пользователя, запустившего процесс на выполнение. Действующий UID (EUID) - это идентификатор пользователя, с которым на самом деле выполняется процесс. Например, утилита man:passwd[1] во время смены пароля пользователем запускается с реальным ID пользователя; однако, чтобы внести изменения в базу данных пользователей, ей необходимо работать с действующим ID пользователя `root`. Это тот механизм, который позволяет обычным пользователям изменять свои пароли и при этом не наблюдать ошибку `Permission Denied`. +Реальный UID - это идентификатор пользователя, запустившего процесс на выполнение. Действующий UID (EUID) - это идентификатор пользователя, с которым на самом деле выполняется процесс. +Например, утилита man:passwd[1] во время смены пароля пользователем запускается с реальным ID пользователя. +Однако для того, чтобы актуализировать базу данных паролей, команда работает с действующим ID пользователя `root`. +Это позволяет пользователям изменять их пароли и не наблюдать ошибку `Permission Denied`. -[NOTE] -==== -Опция `nosuid`, указанная при монтировании файловой системы, отменяет действие битов `setuid` и `setgid`. То есть, утилиты, использующие эти биты прав, откажутся выполняться, даже не выдав пользователю никакого предостережения. К тому же, (с точки зрения обеспечения безопасности) эта опция монтирования не является абсолютно надежной, так как, согласно странице справочника man:mount[8], накладываемые ею ограничения могут быть обойдены при помощи "обертки" `nosuid` (`nosuid` wrapper). -==== +Полномочие setuid может быть задано в символьном виде добавлением права доступа `s` для пользователя, как в следующем примере: -Бит setuid устанавливается добавлением цифры четыре (4) перед численным представлением прав доступа, например: +[source,shell] +.... +# chmod u+s suidexample.sh +.... + +Полномочие setuid также можно задать, добавив число четыре (4) перед численным представлением набора полномочий, как показано в следующем примере: [source,shell] .... # chmod 4755 suidexample.sh .... -Теперь права доступа на файл [.filename]#suidexample.sh# выглядят подобно следующему: +Теперь права доступа на `suidexample.sh` выглядят подобно следующему: [.programlisting] .... -rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh .... -В вышеприведенной строке приметно то, что в перечне прав доступа для владельца файла присутствует символ `s`, который заменил собой бит выполнения. +Заметьте, что `s` теперь является частью набора полномочий, относящихся к владельцу файла, и заменяет бит выполнимости. +Это позволяет работать утилитам, которым требуется повышенный уровень полномочий, таким как man:passwd[1]. -Чтобы посмотреть `setuid` в действии, откройте два терминала. На одном из них запустите команду `passwd` с правами обычного пользователя. Пока утилита ждет ввода нового пароля, просмотрите таблицу процессов и найдите в ней запись о процессе `passwd`. +[NOTE] +==== +Указание параметра `nosuid` при запуске команды man:mount[8] приводит к тому, что такие программы перестают работать без выдачи предупреждений пользователям. +Указанная возможность не является абсолютно надёжно работающей, так как обработчик `nosuid` может её обойти. +==== + +Чтобы увидеть, как это работает, откройте два терминала. +В одном из них наберите `passwd`, работая как обычный пользователь. +Пока утилита ждёт ввода нового пароля, просмотрите таблицу процессов и обратите внимание на информацию о пользователе процесса man.passwd[1]. В терминале А: @@ -931,18 +1016,26 @@ trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd .... -Как уже было сказано, утилита `passwd` запущена с правами обычного пользователя, но ее действующий UID - `root`. +Хотя man.passwd[1] запущена от обычного пользователя, она использует действующий UID пользователя `root`. -Действие бита `setgid` подобно действию `setuid`; отличие заключается в том, что изменяются настройки прав для группы. Когда выполняется приложение (или утилита) с установленным битом `setgid`, то ему (ей) будут обеспечены права в соответствии с группой владельца файла, а не с группой пользователя, запустившего процесс. +Полномочие `setgid` выполняет ту же функцию, что и `setuid`; отличие заключается в том, что изменяются настройки прав для группы. +Когда выполняются приложение или утилита с этой настройкой, то им назначаются полномочия на основании группы, владеющей файлом, а не пользователя, запустившего процесс. -Чтобы установить на файл бит `setgid`, выполните команду `chmod`, добавив цифру два (2) перед численным представлением прав доступа, например: +Чтобы установить на какой-либо файл полномочие `setgid` в символическом виде, добавьте право доступа для группы при помощи man:chmod[1]: + +[source,shell] +.... +# chmod g+s sgidexample.sh +.... + +Альтернативным способом является выполнение команды man:chmod[1] с добавленным в начале числом два (2): [source,shell] .... # chmod 2755 sgidexample.sh .... -Новый бит отображается подобно предыдущему случаю: обратите внимание на наличие `s` в перечне прав доступа для группы: +В следующей выдаче обратите внимание на наличие `s` в перечне прав доступа для группы: [source,shell] .... @@ -954,16 +1047,26 @@ root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd В этих примерах, несмотря на то, что сценарий оболочки является исполняемым файлом, он не будет выполняться с другим действующим идентификатором пользователя (EUID). Так происходит потому, что сценариям командного интерпретатора недоступен системный вызов man:setuid[2]. ==== -Позволяя расширять права пользователя, оба бита прав доступа (`setuid` и `setgid`) могут привести к снижению безопасности системы. Третий обсуждаемый здесь бит - `sticky` - способствует повышению безопасности системы. +Позволяя повышать права доступа, биты полномочий `setuid` и `setgid` могут снижать безопасность системы. +Третье специальное полномочие, `sticky bit`, может усиливать безопасность системы. + +`Sticky bit`, будучи установленным на каталог, позволяет производить удаление файла только его владельцем. +Это полезно для предотвращения удаления файлов в общедоступных каталогах, таких как `/tmp`, пользователями, которые не являются владельцами файлов. +Чтобы использовать это полномочие, добавьте файлу режим `t`: + +[source,shell] +.... +# chmod +t /tmp +.... -Бит `sticky`, будучи установленным на каталог, позволяет производить удаление файла только владельцу файла. Этот бит применяется для предотвращения удаления файлов в публичных каталогах, таких как [.filename]#/tmp#, пользователями, не владеющими файлом. Чтобы задействовать этот бит, добавьте единицу (1) перед численным представлением прав доступа. Например: +Альтернативным способов является добавление единицы (1) перед набором прав доступа: [source,shell] .... # chmod 1777 /tmp .... -Проверить результат можно при помощи команды `ls`: +Полномочие `sticky bit` будет отображаться как `t` в самом конце набора прав доступа: [source,shell] .... @@ -975,258 +1078,304 @@ root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp .... -Отличительной особенностью бита `sticky` является наличие символа `t` в самом конце перечня прав. - [[dirstructure]] == Структура каталогов -Файловая система FreeBSD является ключевым моментом в понимании устройства всей системы. Самым важным понятием является, несомненно, корневой каталог, обозначаемый символом "/". Корневой каталог монтируется самым первым на этапе загрузки и содержит все необходимое, чтобы подготовить систему к загрузке в многопользовательский режим. Корневой каталог также содержит точки монтирования для остальных файловых систем, которые монтируются во время перехода в многопользовательский режим. +Структура каталогов FreeBSD является фундаментальным вопросом в достижении общего понимания устройства всей системы. +Самым важным понятием является, несомненно, корневой каталог, или "/". +Этот каталог является самым первым, монтируемым на этапе загрузки и содержащим базовую систему, необходимую для подготовки операционной системы к работе в многопользовательском режиме. +Корневой каталог также содержит точки монтирования для других файловых систем, которые монтируются во время перехода к функционированию в многопользовательском режиме. -Точкой монтирования называется каталог, находящийся в родительской (обычно - корневой) файловой системе, к которому может быть подсоединена другая файловая система. Более детально это описывается в <<disk-organization>>. Стандартные точки монтирования включают [.filename]#/usr#, [.filename]#/var#, [.filename]#/tmp#, [.filename]#/mnt# и [.filename]#/cdrom#. Эти каталоги обычно перечислены в файле [.filename]#/etc/fstab#, в котором указаны файловые системы и их точки монтирования. Большинство файловых систем, описанных в [.filename]#/etc/fstab# монтируются автоматически из скрипта man:rc[8], если только для них не указана опция `noauto`. Более детальная информация находится в <<disks-fstab>>. +Точкой монтирования называется каталог, находящийся в родительской (обычно - корневой) файловой системе, к которому может быть подсоединена другая файловая система. +Более глубоко это описывается в разделе crossref:basics[disk-organization,Организация дисков]. +К стандартным точкам монтирования относятся `/usr/`, `/var/`, `/tmp/`, `/mnt/` и `/cdrom/`. +Эти каталоги обычно перечислены как отдельные записи в файле `/etc/fstab`. +Этот файл является таблицей с различными файловыми системами и точками монтирования, которая считывается системой. +Большинство файловых систем в `/etc/fstab` монтируются во время загрузки автоматически из скрипта man:rc[8], если только в соответствующей записи для них не указано `noauto`. +Более подробную информацию можно найти в разделе crossref:basics[disks-fstab,Файл fstab]. -Полное описание иерархии файловой системы есть в man:hier[7]. Здесь же мы упомянем лишь наиболее важные каталоги. +Полное описание иерархии файловой системы есть в man:hier[7]. +Таблица ниже содержит краткое описание наиболее часто упоминаемых каталогов. -[.informaltable] -[cols="1,1", frame="none", options="header"] +[cols="25h,~"] |=== | Каталог | Описание -|[.filename]#/# +|`/` |Корневой каталог файловой системы. -|[.filename]#/bin/# +|`/bin/` |Основные утилиты, необходимые для работы как в однопользовательском, так и в многопользовательском режимах. -|[.filename]#/boot/# +|`/boot/` |Программы и конфигурационные файлы, необходимые для нормальной загрузки операционной системы. -|[.filename]#/boot/defaults/# -|Конфигурационные файлы с настройками по умолчанию, используемые в процессе загрузки операционной системы (см. man:loader.conf[5]). +|`/boot/defaults/` +|Конфигурационные файлы, используемые в процессе загрузки операционной системы, со стандарными настройками. Обратитесь к man:loader.conf[5] для получения более подробной информации. -|[.filename]#/dev/# -|Файлы устройств (см. man:intro[4]). +|`/dev/` +|Специальные файлы устройств, управляемые при помощи man:devfs[5] -|[.filename]#/etc/# +|`/etc/` |Основные конфигурационные файлы системы и скрипты. -|[.filename]#/etc/defaults/# -|Основные конфигурационные файлы системы с настройками по умолчанию (см. man:rc[8]). +|`/etc/defaults/` +|Конфигурационные файлы системы со стандартными настройками. Обратитесь к man:rc[8] для получения более подробной информации. -|[.filename]#/etc/mail/# -|Конфигурационные файлы для систем обработки почты (например, man:sendmail[8]). +|`/etc/periodic/` +|Файлы сценариев, выполняемые ежедневно, еженедельно и ежемесячно при помощи man:cron[8]. Обратитесь к man:periodic[8] для получения более подробной информации. -|[.filename]#/etc/namedb/# -|Конфигурационные файлы для утилиты `named` (см. man:named[8]). +|`/lib/` +|Критически важные системные библиотеки, необходимые для выполнимых файлов в `/bin` и `/sbin` -|[.filename]#/etc/periodic/# -|Файлы сценариев, выполняемые ежедневно, еженедельно и ежемесячно (см. man:cron[8] и man:periodic[8]). +|`/libexec/` +|Критически важные системные файлы -|[.filename]#/etc/ppp/# -|Конфигурационные файлы для утилиты `ppp` (см. man:ppp[8]). +|`/media/` +|Содержит подкаталоги для использования в качестве точек монтирования для сменных носителей, таких как CD, накопители USB и гибкие диски -|[.filename]#/mnt/# +|`/mnt/` |Пустой каталог, часто используемый системными администраторами как временная точка монтирования. -|[.filename]#/proc/# -|Виртуальная файловая система, отображающая текущие процессы (см. man:procfs[5], man:mount_procfs[8]). +|`/net/` +|Автоматически монтируемые совместно используемые ресурсы NFS; обратитесь к man:auto_master[5] + +|`/proc/` +|Файловая система процессов. Обратитесь к man:procfs[5] и man:mount_procfs[8] для получения более подробной информации. -|[.filename]#/rescue/# -|Статически собранные программы для восстановления после сбоев. Обратитесь к man:rescue[8]. +|`/rescue/` +|Статически скомпилированные программы для восстановления после сбоев, как описано в man:rescue[8]. -|[.filename]#/root/# +|`/root/` |Домашний каталог пользователя `root`. -|[.filename]#/sbin/# +|`/sbin/` |Системные утилиты и утилиты администрирования, необходимые для работы как в однопользовательском, так и в многопользовательском режимах. -|[.filename]#/tmp/# -|Временные файлы. Содержимое [.filename]#/tmp# обычно теряется во время перезагрузки системы. Файловая система в памяти часто монтируется в [.filename]#/tmp#. Это может быть автоматизированно с помощью переменных относительно tmpmfs из man:rc.conf[5] (или же с помощью записи в [.filename]#/etc/fstab#; обращайтесь к man:mdmfs[8]). +|`/tmp/` +|Временные файлы, которые обычно _не_ сохраняются при перезапуске системы. Размещаемая в оперативной памяти файловая система часто монтируется в `/tmp`. Это может быть автоматизировано с помощью переменных, относящихся к tmpmfs, в man:rc.conf[5] или с помощью записи в `/etc/fstab`; обратитесь к man:mdmfs[8] для получения более подробной информации. -|[.filename]#/usr/# -|Большинство пользовательских утилит и приложений. +|`/usr/` +|Основной набор пользовательских утилит и приложений. -|[.filename]#/usr/bin/# +|`/usr/bin/` |Пользовательские утилиты и приложения общего назначения. -|[.filename]#/usr/include/# +|`/usr/include/` |Стандартные заголовочные файлы для языка C. -|[.filename]#/usr/lib/# -|Файлы стандартных библиотек. +|`/usr/lib/` +|Архивные библиотеки. -|[.filename]#/usr/libdata/# +|`/usr/libdata/` |Файлы данных для различных утилит. -|[.filename]#/usr/libexec/# -|Системные даемоны и утилиты (выполняемые другими программами). +|`/usr/libexec/` +|Системные даемоны и системные утилиты, вызываемые другими программами. -|[.filename]#/usr/local/# -|Локальные пользовательские приложения, библиотеки, и т.д. Также используется по умолчанию коллекцией портов. Внутри [.filename]#/usr/local# иерархия каталогов должна следовать man:hier[7] для [.filename]#/usr#. Исключение составляют каталог [.filename]#man#, который расположен непосредственно в [.filename]#/usr/local#, а не в [.filename]#/usr/local/share#, и документация портов, которая расположена в [.filename]#share/doc/port#. +|`/usr/local/` +|Локальные исполнимые файлы и библиотеки. Также используется в качестве стандартного целевого каталога в рамках инструментария портов FreeBSD. Внутри `/usr/local` общая структура каталогов должна следовать принципам, отражённым в man:hier[7] для `/usr`. Исключениями являются каталоги man, который расположен непосредственно в `/usr/local`, а не в `/usr/local/share`, и документация портов, которая располагается в `share/doc/port`. -|[.filename]#/usr/obj/# -|Архитектурно-зависимые файлы и каталоги, образующиеся в процессе сборки системы из исходных текстов в [.filename]#/usr/src#. - -|[.filename]#/usr/ports/# +|`/usr/ports/` |Коллекция портов FreeBSD (опционально). -|[.filename]#/usr/sbin/# -|Системные утилиты и утилиты администрирования (исполняемые пользователем). - -|[.filename]#/usr/shared/# -|Архитектурно-независимые файлы. +|`/usr/sbin/` +|Системные даемоны и системные утилиты, запускаемые пользователями. -|[.filename]#/usr/src/# -|Исходные тексты BSD и/или программ. +|`/usr/share/` +|Файлы, не зависящие от архитектуры. -|[.filename]#/usr/X11R6/# -|Утилиты, приложения и библиотеки X11R6 (X Window System; необязательно). +|`/usr/src/` +|Исходные тексты BSD и/или локальных программ. -|[.filename]#/var/# -|Файлы журналов общего назначения, временные, перемещаемые файлы и файлы очередей. Файловая система в памяти иногда монтируется в [.filename]#/var#. Это может быть автоматизированно с помощью переменных относительно varmfs из man:rc.conf[5] (или же с помощью записи в [.filename]#/etc/fstab#; обращайтесь к man:mdmfs[8]). +|`/var/` +|Файлы журналов общего назначения, временные, перемещаемые файлы и файлы очередей печати. -|[.filename]#/var/log/# -|Различные файлы системных журналов. +|`/var/log/` +|Файлы различных системных журналов. -|[.filename]#/var/mail/# -|Почтовые ящики пользователей. - -|[.filename]#/var/spool/# -|Файлы очередей печати, почты, и пр. - -|[.filename]#/var/tmp/# -|Временные файлы, которые обычно сохраняются во время перезагрузки системы, если только [.filename]#/var# не является файловой системой в памяти. - -|[.filename]#/var/yp/# -|Карты (maps) NIS. +|`/var/tmp/` +|Временные файлы, которые обычно сохраняются после перезапуска системы. |=== [[disk-organization]] == Организация дисков -Наименьшая единица, которую FreeBSD использует для обращения к файлам, это имя файла. Имена файлов чувствительны к регистру, поэтому [.filename]#readme.txt# и [.filename]#README.TXT# - два разных файла. FreeBSD не использует расширение файла ([.filename]#.txt#) для определения программа это, документ или другой тип данных. - -Файлы хранятся в каталогах. Каталоги могут не содержать файлов, или могут содержать много сотен файлов. Каталоги также могут содержать другие каталоги, что позволяет создавать иерархию каталогов один в другом. Это упрощает организацию данных. +Наименьшей единицей, которую FreeBSD использует для поиска файлов, является имя файла. +Имена файлов чувствительны к регистру, поэтому `readme.txt` и `README.TXT` являются двумя отдельными файлами. +FreeBSD не использует расширение файла для определения того, является ли файл программой, документом или какой-то иной формой данных. -Обращение к файлам происходит путем задания имени файла или каталога, дополняемого прямым слэшем `/`, за которым может следовать имя другого каталога. Если есть каталог [.filename]#foo#, содержащий каталог [.filename]#bar#, который содержит файл [.filename]#readme.txt#, полное имя, или _путь_ к файлу будет [.filename]#foo/bar/readme.txt#. +Файлы хранятся в каталогах. +Каталоги могут не содержать файлов, либо могут содержать многие сотни файлов. +Каталог также может содержать другие каталоги, что позволяет иметь иерархию вложенных друг в друга каталогов для организации данных. -Каталоги и файлы хранятся в файловой системе. Каждая файловая система содержит один каталог на верхнем уровне, называемый _корневым каталогом_ этой файловой системы. Этот корневой каталог может содержать другие каталоги. +Обращение к файлам и каталогам осуществляется указанием имени файла или каталога, дополняемого прямым слэшем `/`, за которым при необходимости могут следовать имена других каталогов. +К примеру, если каталог `foo` содержит каталог `bar`, который содержит файл `readme.txt`, то полным именем, или _путём_ файла является `foo/bar/readme.txt`. +Заметьте, что это отличается от Windows(R), в которой для отделения имён файлов и каталогов используется `\`. +FreeBSD не использует символьных или каких-либо других именований устройств в пути. +К примеру, набирать `c:\foo\bar\readme.txt` во FreeBSD не имеет смысла. -Внешне это может быть похоже на те операционные системы, которые вы возможно использовали. Есть несколько отличий: например, MS-DOS(R) использует `\` для разделения имен файлов и каталогов, а Mac OS(R) использует `:`. +[[disks-file-systems]] +=== Файловые системы -FreeBSD не использует букв дисков, или других имен дисков в пути. Вам не нужно писать [.filename]#c:/foo/bar/readme.txt# в FreeBSD. +Каталоги и файлы хранятся в файловой системе. +Каждая файловая система на самом верхнем уровне содержит ровно один каталог, называемый _корневым каталогом_ этой файловой системы. +Этот корневой каталог может содержать другие каталоги. +Одна из файловых систем назначается _корневой файловой системой_, или `/`. +Любая другая файловая система _монтируется_ в корневой файловой системе. +Вне зависимости от того, сколько дисков присутствует в системе FreeBSD, каждый каталог выглядит как часть одного диска. -Вместо этого, одна файловая система назначается _корневой файловой системой_. Обращение к корневому каталогу корневой файловой системы происходит через `/`. Любая другая файловая система _монтируется_ к корневой файловой системе. Неважно как много дисков есть в вашей системе FreeBSD, каждый каталог будет выглядеть как расположенный на том же диске. +Рассмотрим три файловых системы, называющиеся `A`, `B`, и `C`. +Каждая файловая система имеет один корневой каталог, в котором содержатся два других каталоги с именами `A1`, `A2` (и, соответственно, `B1`, `B2` и `C1`, `C2`). -Предположим, у вас есть три файловых системы: `A`, `B`, и `C`. Каждая файловая система имеет один корневой каталог, в котором содержатся другие каталоги, называемые `A1`, `A2` (и аналогично `B1`, `B2` и `C1`, `C2`). +Назовём `A` корневой файловой системой. +Если для просмотра содержимого этого каталога использовать команду man:ls[1], то она покажет два подкаталога, `A1` и `A2`. +Дерево каталогов выглядит вот так: -Назовем `A` корневой файловой системой. Если вы используете команду `ls` для просмотра содержимого каталога, вы увидите два подкаталога, `A1` и `A2`. Дерево каталогов выглядит так: +image::example-dir1.png[Дерево каталогов с корневым каталогом и двумя подкаталогами, A1 и A2] -image::example-dir1.png[] +Файловая система должна быть смонтирована в каталог другой файловой системы. +При монтировании файловой системы `B` в каталог `A1`, корневой каталог `B` заменяет `A1`, а каталоги в `B` отображаются в соответствии с этим: -Файловая система должна быть подмонтирована к каталогу другой файловой системы. Предположим, что вы монтируете файловую систему `B` на каталог `A1`. Корневой каталог `B` замещается `A1`, а каталоги в `B` отображаются соответственно: +image::example-dir2.png[Дерево каталогов с корневым каталогом и двумя подкаталогами, A1 и A2. А также дополнительные подкаталоги, B1 и B2, подвешенные к A1] -image::example-dir2.png[] +При необходимости к любым файлам, находящимся в каталогах `B1` или `B2`, можно обратиться по маршруту `/A1/B1` или `/A1/B2`. +Все файлы, находившиеся в `/A1`, временно скрыты. +Они появятся снова, если `B` будет _размонтирована_ с `A`. -Если потребуется, любые файлы из каталогов `B1` или `B2` могут быть получены через путь [.filename]#/A1/B1# или [.filename]#/A1/B2#. Все файлы, бывшие в [.filename]#/A1#, временно скрыты. Они появятся, если `B` будет _размонтирована_ с A. +Если `B` была смонтирована в `A2`, диаграмма будет выглядеть так: -Если `B` была смонтирована на `A2,` диаграмма будет выглядеть так: +image::example-dir3.png[Дерево каталогов с корневым каталогом и двумя подкаталогами, A1 и A2. А также дополнительные подкаталоги, B1 и B2, подвешенные к A2] -image::example-dir3.png[] - -а пути будут [.filename]#/A2/B1# и [.filename]#/A2/B2# соответственно. +а пути будут `/A2/B1` и `/A2/B2`, соответственно. Файловые системы могут быть смонтированы одна на другую. Продолжая предыдущий пример, файловая система `C` может быть смонтирована на каталог `B1` файловой системы `B` в таком порядке: -image::example-dir4.png[] +image::example-dir4.png[Сложное дерево каталогов. Различные каталоги подвешены к корню.] Или `C` может быть смонтирована прямо на файловую систему `A`, на каталог `A1`: -image::example-dir5.png[] - -Если вы знакомы с MS-DOS(R), это похоже, хотя и не идентично, команде `join`. +image::example-dir5.png[Сложное дерево каталогов. Различные каталоги подвешены к корню.] -Как правило, это не должно вас интересовать. Обычно вы создаете файловые системы во время установки FreeBSD, решаете куда их монтировать, и ничего не меняете, пока не понадобится добавить новый диск. - -Можно создать одну большую корневую файловую систему и не создавать других. У такого подхода есть несколько недостатков и одно преимущество. +Вполне возможно иметь одну большую корневую файловую систему и не иметь потребности в создании других. +У такого подхода есть несколько недостатков и одно преимущество. .Преимущества нескольких файловых систем -* Различные файловые системы могут иметь различные _опции монтирования_. Например, в целях безопасности корневая файловая система может быть смонтирована только для чтения, что делает невозможным случайное удаление или редактирование критически важного файла. Отделение файловых систем, используемых пользователями для записи, таких как [.filename]#/home#, от других файловых систем позволяет также монтировать их с параметром _nosuid_; этот параметр отменяет действие битов _suid_/ _guid_ на исполняемых файлах, в этой файловой системе, что потенциально повышает безопасность. +* Различные файловые системы могут иметь различные _параметры монтирования_. Например, корневая файловая система может быть смонтирована в режиме доступности только для чтения, что делает невозможным случайное удаление или редактирование какого-то критически важного файла. Отделение файловых систем, доступных пользователям для записи, таких как `/home`, от других файловых систем позволяет монтировать их с параметром _nosuid_. Этот параметр отменяет действие битов _suid_/ _guid_ на исполняемых файлах в этой файловой системе, что потенциально повышает безопасность. * FreeBSD автоматически оптимизирует расположение файлов на файловой системе в зависимости от того, как файловая система используется. Файловая система, содержащая множество мелких часто записываемых файлов, будет иметь оптимизацию, отличную от таковой для файловой системы, содержащей несколько больших файлов. На одной большой файловой системе эта оптимизация не работает. -* Файловые системы FreeBSD очень устойчивы к внезапному отключению. Тем не менее, потеря питания в критический момент все же может повредить структуру файловой системы. Разделение данных на несколько файловых систем повышает шансы, что система все-таки будет работать и делает более легким восстановление с резервной копии. +* Файловые системы FreeBSD устойчивы к отключению электропитания. Тем не менее, потеря питания в критический момент все же может повредить структуру файловой системы. Разделение данных на несколько файловых систем повышает шансы, что система все-таки будет работать и делает более легким восстановление с резервной копии. .Преимущество одной файловой системы * Размер файловых систем фиксирован. Если вы создаете файловую систему при установке FreeBSD и задаете определенный размер, позднее вы можете обнаружить что нужен раздел большего размера. Это не так легко сделать без резервного копирования, создания файловых систем нового размера и последующего восстановления сохраненных данных. + [IMPORTANT] ==== -В FreeBSD представлена команда man:growfs[8], которая позволяет увеличивать размер файловой системы на лету, устраняя это ограничение. +Во FreeBSD имеется команда man:growfs[8], которая позволяет увеличивать размер файловой системы на лету, устраняя это ограничение. +Файловая системы может быть расширена только на свободное пространство раздела, в котором она находится. +Если имеется пространство за границей раздела, то раздел может быть увеличен при помощи man:gpart[8]. +Если раздел является последним на виртуальном диске, и диск был увеличен, то и раздел может быть увеличен. ==== -Файловые системы содержатся в разделах. Этот термин не имеет того же смысла, что и при более раннем его использовании в этой главе, из-за наследия UNIX(R) в FreeBSD. Каждый раздел обозначается буквой от `a` до `h`. Каждый раздел может содержать только одну файловую систему, это значит что файловая система может быть описана ее точкой монтирования в файловой иерархии, или буквой раздела, в котором она содержится. +[[disks-partitions]] +=== Дисковые разделы -FreeBSD также использует дисковое пространство под _раздел подкачки (swap space)_. Подкачка позволяет FreeBSD работать с _виртуальной памятью_. Ваш компьютер может работать так, как если бы у него было больше памяти, чем есть на самом деле. Когда у FreeBSD кончается память, она перемещает часть данных, не используемых в данный момент, в раздел подкачки и возвращает их обратно (перемещая в подкачку что-то другое), когда они нужны. +Файловые системы размещаются в _разделах_. +Диски разбиваются на разделы в соответствии с одной из схем разбиения на разделы; обратитесь к разделу crossref:basics[bsdinstall-part-manual, Разметка в неавтоматизированном режиме]. +Более новой схемой является GPT; более старые компьютеры, применяющие BIOS, используют MBR. +GPT поддерживает разбиение диска на разделы, имеющие определённый размер, смещение и тип. +Она поддерживает большое количество разделов и типов разделов, и рекомендуется к использованию во всех случаях, где это возможно. +Разделы GPT используют имя диска с суффиксом, при этом суффикс `p1` обозначает первый раздел, `p2` второй раздел и так далее. +Однако MBR поддерживает лишь небольшое количество разделов. +Разделы MBR во FreeBSD называют `слайсами`. +Слайсы могут быть использованы для разных операционных систем. +Слайсы FreeBSD, в свою очередь, разбиваются на разделы при помощи меток BSD (обратитесь к man:bsdlabel[8]). -По некоторым разделам есть определенные соглашения. +Номера слайсов начинаются с 1, следуют за именем устройства и предваряются `s`. +Таким образом, "da0__s1__" является первым слайсом первого накопителя SCSI. +На диске может быть только четыре физических слайса, но внутри физических слайсов подходящего типа могут размещаться логические слайсы. +Эти расширенные слайсы нумеруются начиная с 5, так что "ada0__s5__" является первым расширенным слайсом на первом диске SATA. +Эти устройства используются файловыми системами, занимающими весь слайс. -[.informaltable] -[cols="1,1", frame="none", options="header"] +Каждый раздел GPT или BSD может содержать только одну файловую систему, и это значит, что файловые системы описываются либо при помощи их типичных точек монтирования в иерархии файловой системы, либо по имени раздела, в котором они размещены. + +FreeBSD также использует дисковое пространство для _раздела подкачки_, обеспечивающего работу _виртуальной памяти_. Это позволяет вашему компьютеру работать так, как если бы у него было больше памяти, чем есть на самом деле. Когда у FreeBSD кончается память, она перемещает часть данных, не используемых в данный момент, в раздел подкачки и возвращает их обратно (перемещая в подкачку что-то другое), когда они нужны. +Это явление называется _подкачкой_. + +Для некоторых разделов BSD существуют определённые связанные с ними соглашения. + +[cols="25h,~"] |=== | Раздел | Соглашение |`a` -|Как правило, содержит корневую файловую систему +|Как правило, содержит корневую файловую систему. |`b` -|Как правило, содержит раздел подкачки +|Как правило, содержит пространство подкачки. |`c` -|Как правило, такого же размера, что и весь слайс (slice). Это позволяет утилитам, которым нужно работать над всем слайсом (например, сканер плохих блоков), работать с разделом `c`. В обычной ситуации не нужно создавать файловую систему на этом разделе. +|В обычном случае имеет такой же размер, что и окружающий слайс. Это позволяет утилитам, которым нужно обрабатывать весь слайс, таким, как сканер плохих блоков, использовать раздел `c`. В обычном случае создавать файловую систему в этом разделе не требуется. |`d` |Раздел `d` создавался для специальных целей, хотя сейчас они не актуальны и `d` может быть задействован как обычный раздел. |=== -Каждый раздел-содержащий-файловую-систему хранится на том, что во FreeBSD называется _слайс (slice)_. Слайс - это термин FreeBSD, то, что обычно называют разделом, и опять же это из-за UNIX(R) основы FreeBSD. Слайсы нумеруются с 1 по 4. +Слайсы и "опасно размеченные" физические устройства содержат разделы BSD, обозначаемые буквами от `a` до `h`. +Эта буква добавляется к имени устройства, и, таким образом, "da0__a__" является разделом `a` на первом устройстве `da`, являющемся "эксклюзивно выделенным". +"ada1s3__e__" является пятым разделом третьего слайса второго диска SATA. -Номера слайсов следуют за именем устройства, предваряемые строчной `s`, начиная с 1. Так "da0__s1__" это первый слайс первого SCSI устройства. Может быть только четыре физических слайса на диске, но могут быть логические слайсы нужного типа внутри физических слайсов. Эти дополнительные слайсы нумеруются начиная с 5, так что "ad0__s5__" это первый дополнительный слайс на первом IDE диске. Эти устройства используются файловыми системами, занимающими весь слайс. +Наконец, каждый диск идентифицирован. Имя диска начинается с кода, обозначающего тип диска, затем идет номер диска. +В отличие от разделов и слайсов, нумерация дисков начинается с 0. +Часто встречающиеся коды перечислены в разделе crossref:basics[disks-naming,Имена дисковых устройств]. -Слайсы, "эксклюзивно выделенные (dangerously dedicated)" физические устройства и другие устройства содержат _разделы_, представляемые буквами от `a` до `h`. Эти буквы добавляются к имени устройства. "da0__a__" это раздел a на первом устройстве da, который "эксклюзивно выделен". "ad1s3__e__" это пятый раздел в третьем слайсе второго IDE диска. - -Наконец, каждый диск идентифицирован. Имя диска начинается с кода, обозначающего тип диска, затем идет номер диска. В отличие от слайсов, нумерация дисков начинается с 0. Основные коды, которые вам могут встретиться, есть в <<basics-dev-codes>>. - -В то время, как ссылка на раздел FreeBSD требует также указания слайса и диска, содержащего раздел, ссылка на слайс требует также указания имени диска. Другими словами, ссылаясь на раздел, указывайте имя диска, `s`, номер слайса, и затем букву раздела. Примеры показаны в <<basics-disk-slice-part>>. +Для ссылки на раздел внутри слайса указывайте имя диска, `s`, номер слайса, а затем букву раздела. +Примеры показаны в crossref:basics[basics-disk-slice-part,Примеры именований диска, слайса и раздела]. +В обозначение разделов GPT включается имя диска, `p`, а затем номер раздела. +crossref:basics[basics-concept-disk-model,Концептуальная модель диска] отражает концептуальную модель рабиения диска с использованием слайсов MBR. <<basics-concept-disk-model>> показывает концептуальную модель диска, которая должна помочь прояснить ситуацию. -Для установки FreeBSD вы должны сначала настроить слайсы дисков, затем создать разделы внутри слайсов, которые будут использованы для FreeBSD, а затем создать файловую систему (или подкачку) в каждом разделе и решить, куда файловая система будет смонтирована. +При установке FreeBSD с использованием MBR настройте дисковые слайсы и создайте разделы внутри слайса для использования во FreeBSD. +При использовании GPT, настройте разделы для каждой файловой системы. +В любом случае создайте файловую систему или раздел подкачки в каждом разделе, а также решите, где будет монтироваться каждая из файловых систем. +Обратитесь к man:gpart[8] для получения информации о работе с разделами. -[[basics-dev-codes]] -.Коды дисковых устройств +[[disks-naming]] +.Имена дисковых устройств [cols="1,1", frame="none", options="header"] |=== -| Код -| Значение +| Тип дискового устройства +| Имя дискового устройства + +|Приводы жёстких дисков SATA и IDE +|`ada` + +|Приводы жёстких дисков SCSI и устройства хранения USB +|`da` -|[.filename]#ad# -|ATAPI (IDE) диск +|Устройства хранения с интерфейсом NVMe +|`nvd` или `nda` -|[.filename]#da# -|SCSI direct access диск +|Приводы CD-ROM с интерфейсом SATA и IDE +|`cd` -|[.filename]#acd# -|ATAPI (IDE) CDROM +|Приводы CD-ROM с интерфейсом SCSI +|`cd` -|[.filename]#cd# -|SCSI CDROM +|Приводы гибких дисков +|`fd` -|[.filename]#fd# -|Floppy disk +|Ленточные накопители с интерфейсом SCSI +|`sa` + +|Устройства хранения RAID +|Например, `aacd` для Adaptec AdvancedRAID, `mlxd` и `mlyd` для Mylex, `amrd` для AMI MegaRAID, `idad` для Compaq Smart RAID и `twed` для 3ware RAID. |=== [[basics-disk-slice-part]] -.Пример имен диска, слайса, и раздела +.Примеры именований диска, слайса и раздела [example] ==== [.informaltable] @@ -1235,8 +1384,8 @@ FreeBSD также использует дисковое пространств | Имя | Значение -|`ad0s1a` -|Первый раздел (`a`) на первом слайсе (`s1`) первого IDE диска (`ad0`). +|`ada0s1a` +|Первый раздел (`a`) на первом слайсе (`s1`) первого диска SATA (`ada0`). |`da1s2e` |Пятый раздел (`e`) на втором слайсе (`s2`) второго SCSI диска (`da1`). @@ -1247,92 +1396,96 @@ FreeBSD также использует дисковое пространств .Концептуальная модель диска [example] ==== -Эта диаграмма показывает первый подключенный к системе IDE диск с точки зрения FreeBSD. Предположим, что размер диска 4 GB, и он содержит два 2 GB слайса (MS-DOS(R) разделы). Первый слайс содержит MS-DOS(R) диск, [.filename]#C:#, а второй слайс содержит установленную FreeBSD. В этом примере у установленной FreeBSD есть три раздела с данными и раздел подкачки. - -В каждом из трех разделов есть файловая система. Раздел `a` используется для корневой файловой системы, `e` для иерархии каталогов [.filename]#/var#, а `f` для иерархии каталогов [.filename]#/usr#. +Эта диаграмма изображает первый подключенный к системе диск SATA с точки зрения FreeBSD. +Предположим, что объём диска составляет 250 ГБ, и он содержит слайс размером 80 ГБ и слайс размером 170 ГБ (разделы MS-DOS(R)). +Первый слайс содержит файловую систему Windows(R) NTFS, `C:`, а второй слайс содержит установленную FreeBSD. +В этом примере установленная FreeBSD имеет четыре раздела с данными и раздел подкачки. -image::disk-layout.png[] +Каждый из четырёх разделов содержит файловую систему. +Раздел `a` будет используется для корневой файловой системы, `d` для `/var/`, `e` для `/tmp/` и `f` для `/usr/`. +Раздел, обозначенный буквой `c`, соответствует всему слайсу и поэтому не используется как обычный раздел. +image::disk-layout.png[Разметка диска, разделённого между Windows и FreeBSD] ==== [[mount-unmount]] == Монтирование и размонтирование файловых систем -Файловая система лучше всего представима в виде дерева, с корнем в [.filename]#/#. Каталоги, [.filename]#/dev#, [.filename]#/usr# и прочие - это ветви дерева, которые, в свою очередь, являются корнями для поддеревьев, также имеющих ветви ([.filename]#/usr/local#), и т.д. +Файловая система лучше всего представима в виде дерева, которое, если можно так выразиться, растёт из `/`. +Каталоги `/dev`, `/usr` и прочие, находящиеся в корневом каталоге, являются ветвями и, в свою очередь, могут иметь собственные ветви, такие как `/usr/local`, и так далее. -Хорошей практикой является разнесение некоторых особо важных каталогов на разные файловые системы. Например, [.filename]#/var#, содержит [.filename]#log/#, [.filename]#spool/#, а также всевозможные временные файлы и нередко может занять все свободное место на диске. Поэтому лучше смонтировать [.filename]#/var# отдельно, чтобы избежать переполнения [.filename]#/#. +Имеются разные основания для того, чтобы размещать некоторые из этих каталогов в отдельных файловых системах. +`/var` содержит каталоги `log/`, `spool/` и разные виды временных файлов и, таким образом, может полностью заполнить свободное дисковое пространство. +Заполнение корневой файловой системы нежелательно, поэтому часто предпочитают отделить `/var` от `/`. -Часто бывает так, что некоторые разделы файловой системы расположены на разных физических носителях (дисках, CDROM), виртуальных или сетевых (например, crossref:network-servers[network-nfs,"сетевая файловая система (Network File System, NFS)"]). В этом случае узлы файловой иерархии будут расположены на разных файловых системах. +Другой частой причиной для размещения определённых веток каталогов в отдельных файловых системах является их расположение на отдельных физических дисках, отдельных виртуальных дисках, например, в Network File System, описанной в отдельном crossref:network-servers[network-nfs,разделе], или на CDROM. [[disks-fstab]] -=== Файл [.filename]#fstab# +=== Файл fstab -Файловые системы, перечисленные в [.filename]#/etc/fstab#, монтируются автоматически в crossref:boot[boot,процессе загрузки] (если, конечно, для них не указана опция `noauto`). - -Формат файла [.filename]#/etc/fstab# следующий (файловые системы перечисляются построчно): +В процессе загрузки (crossref:boot[boot,Процесс загрузки FreeBSD]) файловые системы, перечисленные в `/etc/fstab`, монтируются автоматически, за исключением тех, для которых указан параметр `noauto`. +Этот файл содержит записи в следующем формате: [.programlisting] .... - - устройство /точка-монтирования тип файловой системы опции частота дампов порядок проверки +устройство /точка-монтирования тип файловой системы опции частота дампов passno .... `устройство`:: -Имя устройства (которое должно присутствовать), как описано в crossref:disks[disks-naming,Имена устройств]. +Имя существующего устройства, соответствующее описанному в разделе crossref:basics[disks-naming,Имена дисковых устройств]. `точка монтирования`:: -Каталог (существующий), куда следует смонтировать файловую систему. +Существующий каталог, предназначенный для монтирования файловой системы. `тип файловой системы`:: Тип файловой системы, который передается программе man:mount[8]. По умолчанию FreeBSD использует `ufs`. `опции`:: -Например, `rw`, для монтирования файловой системы в режиме "чтение-запись", или `ro`, для режима "только чтение", за которыми могут следовать и другие опции. Довольно часто используется опция `noauto`, чтобы не монтировать автоматически файловые системы в процессе загрузки. Об остальных опциях можно прочитать в man:mount[8]. +Либо `rw` для монтирования файловой системы в режиме чтения и записи, либо `ro` для файловых систем, доступных только в режиме чтения, за которыми могут следовать и другие нужные параметры. Довольно часто используется опция `noauto`, чтобы не монтировать автоматически файловые системы в процессе загрузки. Остальные параметры перечислены в man:mount[8]. `частота дампов`:: -Используется утилитой man:dump[8] для определения файловых систем, с которых необходимо периодически снимать специальные архивные копии. При отсутствии этого параметра принимается равным нулю. +Используется утилитой man:dump[8] для указания файловых систем, с которых требуется снимать копии. При отсутствии этого параметра он принимает нулевое значение. -`порядок проверки`:: -Определяет порядок, в котором следует проверять файловые системы (чаще всего, в случае некорректного размонтирования или внезапной перезагрузки системы). Если файловую системы не нужно проверять, этот параметр должен быть установлен в ноль. Для корневой файловой системы (которая должна быть проверена в первую очередь) установите его в 1. Для всех остальных - 2 или больше. Если две или более файловые системы имеют одинаковое значение `passno`, man:fsck[8] попытается проверять их параллельно (если, конечно, это возможно физически). +`passno`:: +Определяет порядок, в котором файловые системы формата UFS должны проверяться при помощи man:fsck[8] после перезагрузки. +Для файловых систем, которые должны быть пропущены при проверке, параметр `passno` должен быть установлен в нулевое значение. Корневая файловая система должна проверяться в первую очередь и иметь значение `passno`, установленное равным единице. Для других файловых систем значение этого параметра должно превышать единицу. Если две и более файловые системы имеют одинаковое значение `passno`, то man:fsck[8] будет пытаться проверять файловые системы параллельно, если это возможно. -Обратитесь к man:fstab[5] за дополнительной информацией о формате файла [.filename]#/etc/fstab# и различных опциях монтирования. +Обратитесь к man:fstab[5] для получения дополнительной информацией о формате файла `/etc/fstab` и его параметрах. [[disks-mount]] -=== Команда `mount` +=== Использование man:mount[8] -Команда man:mount[8] используется, как следует из ее имени, для монтирования файловых систем. - -Пример использования (простейший случай): +Файловые системы монтируются при помощи man:mount[8]. +Самый простой формат имеет следующий вид: [example] ==== - [source,shell] .... -# mount устройство точка-монтирования +# mount __device__ __mountpoint__ .... - ==== -Перечислим основные опции, которые может принимать команда man:mount[8] (полный список смотрите на странице справочника): +Файловая система, включённая в `/etc/fstab`, также может быть смонтирована с указанием только лишь точки монтирования. + +Эта команда имеет много параметров, описанных в man:mount[8]. +Самые часто используемые параметры таковы: -.Опции монтирования +.Параметры монтирования `-a`:: -Смонтировать все файловые системы, перечисленные в файле [.filename]#/etc/fstab#. Исключение составляют помеченные как "noauto", перечисленные после опции `-t` и уже смонтированные. +Смонтировать все файловые системы, перечисленные в файле `/etc/fstab`, за исключением тех, что помечены как "noauto", исключены параметром `-t` или уже смонтированы. `-d`:: Сделать все, кроме самого системного вызова mount. Эта опция полезна вместе с флагом `-v` для определения того, что на самом деле пытается сделать man:mount[8]. `-f`:: -Монтировать поврежденный раздел (опасно!), или форсировать отмену всех запросов на запись при изменении режима монтирования с "чтение-запись" на "только чтение". +Принудительное монтирование непроверенного раздела (опасно) или аннулирование полномочий на операции записи данных при понижении статуса монтирования файловой системы с доступной на чтение-запись на доступной только для операций чтения. `-r`:: -Монтировать файловую систему в режиме "только для чтения". То же самое, что и указание аргумента `ro` для опции `-o`. +Монтировать файловую систему в режиме только для чтения. Идентично использованию параметра `-o ro`. `-t` _fstype_:: -Монтировать файловую систему как систему указанного типа, или, в случае опции `-a`, только файловые системы данного типа. -+ -По умолчанию, тип файловой системы - "ufs". +Смонтировать указанный тип файловой системы или, в случае указания `-a`, монтировать файловые системы только данного типа. По умолчанию применяется тип файловой системы "ufs". `-u`:: Обновить опции монтирования для файловой системы. @@ -1343,168 +1496,206 @@ image::disk-layout.png[] `-w`:: Монтировать файловую систему в режиме "чтение-запись". -Опция `-o` принимает разделенные запятыми аргументы, включая нижеперечисленные: - -noexec:: -Запрет на исполнение бинарных файлов на файловой системе (тоже полезная опция для повышения безопасности системы). +Следующие значения могут быть переданы в качестве аргументов `-o` в виде списка значений, разделённых запятыми: nosuid:: Игнорировать setuid и setgid биты на файловой системе (еще одна полезная опция для повышения безопасности системы). [[disks-umount]] -=== Команда `umount` +=== Использование man:umount[8] -Команда man:umount[8] принимает в качестве параметра точку монтирования какой-либо файловой системы, имя устройства, опцию `-a` или `-A`. +Для размонтирования файловой системы используйте man:umount[8]. +Эта команда принимает один параметр, который может соответствовать точке монтирования, имени устройства либо принимать значение `-a` или `-A`. -Кроме того, вы можете дополнительно указать опцию `-f` для форсированного размонтирования файловой системы, и `-v` для получения более подробной информации. Имейте ввиду, что это в общем случае опасно и потому не рекомендуется, так как тем самым вы можете нарушить работу компьютера или повредить данные на файловой системе. +Во всех вариантах принимается параметр `-f` для принудительного размонтирования и `-v` для выдачи подробной информации. +Имейте в виду, что применение `-f` в целом не рекомендутся, так как может привести к аварийному завершению работы компьютера или повредить данные в файловой системе. -Опции `-a` и `-A` используются для размонтирования всех файловых систем (разве что вы укажете опцию `-t`). Разница состоит в том, что `-A` не пытается размонтировать корневую файловую систему. +Для размонтирования всех смонтированных файловых систем или только тех типов файловых систем, что перечислены после параметра `-t`, воспользуйтесь параметрами `-a` и `-A`. +Заметьте, что при использовании `-A` попытка размонтирования корневой файловой системы не предпринимается. [[basics-processes]] -== Процессы +== Процессы и даемоны -FreeBSD является многозадачной операционной системой. Это означает, что одновременно может быть запущена более чем одна программа. Каждая программа, работающая в некоторый момент времени, называется _процессом_. Каждая команда, которую вы запускаете, порождает хотя бы один процесс. Есть несколько системных процессов, запущенных все время и поддерживающих функциональность системы. +FreeBSD является многозадачной операционной системой. +Каждая программа, выполняющаяся в некоторый выбранный момент времени, называется _процессом_. +Каждая запускаемая команда порождает хотя бы один новый процесс, и имеется определённое количество системных процессов, которые запускает FreeBSD. -У каждого процесса есть уникальный номер, называемый _process ID_, или _PID_, и, как и у файлов, у каждого процесса есть владелец и группа. Информация о владельце и группе процесса используется для определения того, какие файлы и устройства могут быть открыты процессом с учетом прав на файлы, о которых говорилось ранее. Также у большинства процессов есть родительский процесс. Например, при запуске команд из оболочки, оболочка является процессом и любая запущенная команда также является процессом. Для каждого запущенного таким путем процесса оболочка будет являться родительским процессом. Исключением из этого правила является специальный процесс, называемый man:init[8]. `init` всегда первый процесс, его PID всегда 1. `init` запускается автоматически ядром во время загрузки FreeBSD. +Каждый процесс идентифицируется уникальным номером, называемым _идентификатором процесса_ (_process ID_) или _PID_. +Подобно файлам, у каждого процесса имеется один владелец и группа, при этом полномочия владельца и группы используются для определения того, какие файлы и устройства могут быть открыты процессом. +У большинства процессов также есть родительский процесс, которых их запустил. +Например, командная оболочка является процессом, и любая команда, запущенная из командной оболочки, является процессом, для которого командная оболочка является родительским процессом. +Исключением из этого правила является специальный процесс, который называется man:init[8], который всегда является первым процессом, запускаемым во время загрузки, и который всегда имеет PID, равный `1`. -Две команды очень полезны для просмотра работающих в системе процессов, это man:ps[1] и man:top[1]. Команда `ps` используется для получения списка запущенных процессов и может показать их PID, сколько памяти они используют, команду, которой они были запущены и т.д. Команда `top` показывает запущенные процессы и обновляет экран каждые несколько секунд, что позволяет наблюдать за работой компьютера в реальном времени. +Некоторые программы спроектированы не для того, чтобы работать в режиме ввода команд пользователя, и отключаются от терминала при первой возможности. +К примеру, веб-сервер отвечает на веб-запросы, а не на команды пользователя. +Другим примером такого типа приложений являются почтовые серверы. +Программы такого типа известны под названием _даемоны_. +Понятие даемона пришло из греческой мифологии и обозначает сущность, которая не является ни хорошей, ни плохой, и которая невидимо выполняет полезные дела. +Это объясняет тот факт, что талисманом BSD является дружелюбно выглядящий даемон в кедах и с вилами. -По умолчанию, `ps` показывает только принадлежащие вам процессы. Например: +Имеется соглашение, по которому программы, обычно работающие в режиме даемона, именуются с "d" в конце названия. +К примеру, BIND означает Berkeley Internet Name Domain, но на самом деле исполняемой программой является `named`. +Программой веб-сервера Apache является `httpd`, а даемоном очереди принтера является `lpd`. +Это всего лишь соглашение об именовании. +К примеру, основной почтовый даемон для приложения Sendmail называется `sendmail`, а не `maild`. -[source,shell] -.... -% ps - PID TT STAT TIME COMMAND - 298 p0 Ss 0:01.10 tcsh - 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) -37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) -48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi -48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) -72210 p0 R+ 0:00.00 ps - 390 p1 Is 0:01.14 tcsh - 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y - 6688 p3 IWs 0:00.00 tcsh -10735 p4 IWs 0:00.00 tcsh -20256 p5 IWs 0:00.00 tcsh - 262 v0 IWs 0:00.00 -tcsh (tcsh) - 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 - 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 - 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc - 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish -.... - -Как вы можете видеть в данном примере, вывод man:ps[1] организован в несколько колонок. Идентификатор процесса `PID` обсуждался ранее. PID назначаются с 1 до 99999 и опять с начала, если последнее число будет превышено (однажды выданный и используемый PID не может быть назначен повторно). Колонка `TT` показывает терминал (tty), на котором запущена программа (можете пока забыть про это). `STAT` показывает состояние программы и опять же может быть пока проигнорирован. `TIME` это количество времени центрального процессора, использованное программой - это обычно не время, прошедшее с запуска программы, поскольку большинство программы проводят много времени в ожидании некоторого события перед тем, как занять время процессора. Наконец, `COMMAND` это команда, которой программа была запущена. - -У man:ps[1] есть множество различных опций, влияющих на выводимую информацию. Один из наиболее полезных наборов опций это `auxww`. `a` позволяет показать информацию о всех запущенных процессах, а не только тех, которыми вы владеете. `u` показывает имя пользователя, владеющего процессом, и информацию об используемой памяти. `x` показывает информацию о процессах-даемонах и `ww` указывает man:ps[1] показать всю командную строку для каждого процесса, вместо обрезания ее, когда она станет слишком длинной, чтобы уместиться на экран. - -Вывод man:top[1] похож на только что описанный. Обычно он выглядит так: +=== Просмотр процессов + +Для просмотра процессов, работающих в системе, воспользуйтесь man:ps[1] или man:top[1]. +Для выдачи статичного списка выполняемых в данный момент процессов, их PID, объёма используемой ими памяти и команды, которой они были запущены, используйте man:ps[1]. +Для отображения всех выполняющихся процессов и обновления этого списка каждые несколько секунд в целях интерактивного наблюдения за тем, что делает компьютер, используйте man:top[1]. + +По умолчанию man:ps[1] показывает пользователю только те команды, которые запущены пользователем и владельцем которых он является. +К примеру: [source,shell] .... -% top -last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 -47 processes: 1 running, 46 sleeping -CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle -Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free -Swap: 256M Total, 38M Used, 217M Free, 15% Inuse - - PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND -72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top - 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 - 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA - 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm -48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu - 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd - 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt -... +% ps .... -Вывод разбит на два раздела. Заголовок (первые пять строк) показывает PID последнего запущенного процесса, среднее значение загрузки системы (которое показывает насколько система занята), время работы системы с последней перезагрузки и текущее время. Другие цифры заголовка относятся к количеству запущенных процессов (в данном примере 47), количеству занятой памяти и подкачки и время, занимаемое различными состояниями процессора. - -Ниже идут несколько колонок, содержащих похожую на вывод man:ps[1] информацию. Как и раньше, это PID, время процессора, командная строка. man:top[1] показывает также величину занятой процессом памяти. Это значение разбито на две колонки, одна для общего объема, а другая для резидентного - общий объем показывает сколько всего памяти нужно приложению, а резидентный показывает количество памяти, используемой в данный момент. Из этого примера видно, что man:getenv[3] требует почти 30 MB памяти, но в данный момент использует только 9 MB. - -man:top[1] автоматически обновляет экран каждые две секунды; это значение можно изменить опцией `s`. - -[[basics-daemons]] -== Даемоны, сигналы, уничтожение процессов +Выводимый текст должен быть похож на следующее: -Если вы запускаете редактор, им можно легко управлять, открывать в нем файлы и т.д. Вы можете делать это, поскольку редактор предоставляет такие возможности и потому, что редактор присоединен к _терминалу_. Некоторые программы разработаны без поддержки интерфейса пользователя, поэтому они отсоединяются от терминала при первой возможности. Например, веб-сервер целый день отвечает на запросы из сети, и ему как правило не требуется ваше вмешательство. Программы, передающие почту от сервера к серверу - другой пример приложений этого класса. +[.programlisting] +.... + PID TT STAT TIME COMMAND +8203 0 Ss 0:00.59 /bin/csh +8895 0 R+ 0:00.00 ps +.... -Мы называем эти программы _даемонами_. Даемоны это персонажи греческой мифологии: хорошие или плохие, они были спутниками человека и, вообще говоря, выполняли полезную работу для людей, почти как веб- и почтовые серверы выполняют полезную работу сегодня. Это причина, по которой талисманом BSD долгое время является веселый даемон в кедах и с вилами. +Выдача команды man:ps[1] организована в несколько столбцов. +Столбец `PID` отображает идентификатор процесса. +PID назначаются начиная с 1 и увеличиваются до 99999, а затем отсчёт начинается с начала. +Однако PID не назначается повторно, если он уже используется. +Столбец `TT` показывает терминал (tty), на котором выполняется программа, а `STAT` показывает состояние программы. +`TIME` соответствует количеству времени, которое программа выполняется на центральном процессоре. +Обычно это не то же самое время, что прошло с момента запуска программы, поскольку большинство программ проводят много времени в ожидании некоторого события, прежде чем занять время процессора. +Наконец, `COMMAND` содержит команду, которая использовалась для запуска программы. -Есть соглашение, по которому имя программы, которая обычно запускается как даемон, заканчивается на "d". BIND это Berkeley Internet Name Domain, а выполняемая программа называется `named`; программа веб сервера Apache называется `httpd`; даемон очереди печати это `lpd` и так далее. Это соглашение, а не жесткое правило; например, главный почтовый даемон для Sendmail называется `sendmail`, а не `maild`, как вы могли бы предположить. +Имеется множество различных опций для изменения выводимой информации. +Один из наиболее полезных наборов опций это `auxww`, при этом `a` отображает информацию о всех запущенных процессах всех пользователей, `u` показывает имя и объём используемой памяти пользователя, владеющего процессом, `x` отображает информацию о процессах-даемонах, а `ww` указывает man:ps[1] на отображение всей командной строки для каждого процесса, вместо её обрезания в случае, если она слишком длинная, чтобы уместиться на экран. -Иногда может потребоваться взаимодействие с процессом даемона. Один из способов взаимодействия с процессом даемона (или с любым другим запущенным процессом) - это посылка ему так называемого _сигнала_. Есть множество различных сигналов - некоторые из них имеют специальное значение, другие обрабатываются приложением, реакция которого на эти сигналы должна быть описана в документации. Вы можете посылать сигналы только тем процессам, владельцем которых являетесь. Если вы отправите сигнал какому-то другому процессу с помощью man:kill[1] или man:kill[2], доступ будет запрещен. Исключением из правил является пользователь `root`, который может отправлять сигналы любому процессу. +Вывод man:top[1] выглядит похожим образом: -В некоторых случаях FreeBSD тоже посылает сигналы приложениям. Если приложение плохо написано и пробует обратиться к области памяти, к которой оно не должно обращаться, FreeBSD посылает процессу сигнал _нарушение сегментации_ (`SIGSEGV`). Если приложение использует системный вызов man:alarm[3], чтобы получить уведомление по истечении определенного периода времени, будет отправлен сигнал Alarm (`SIGALRM`) и т.д. +[source,shell] +.... +% top +.... -Два сигнала могут быть использованы для завершения процесса, `SIGTERM` и `SIGKILL`. `SIGTERM` это корректный способ завершить процесс; процесс может _поймать_ сигнал, определить, что его хотят завершить, закрыть любые файлы, которые он мог открыть, и закончить то, что он делал в момент перед закрытием. В некоторых случаях процесс может даже игнорировать `SIGTERM`, если выполняет задачу, которая не может быть прервана. +Выводимый текст должен быть похож на следующее: -`SIGKILL` не может быть проигнорирован процессом. Этот сигнал говорит "Меня не волнует что ты делаешь - остановись немедленно". Если вы посылаете процессу `SIGKILL`, FreeBSD сразу же остановит этот процесс. +[.programlisting] +.... +last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46 +107 processes: 2 running, 104 sleeping, 1 zombie +CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle +Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free +ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other +Swap: 2048M Total, 2048M Free + + PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND + 557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg + 8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4 + 8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox + 431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused + 9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top + 2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4 + 8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4 + 8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin + 2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd + 2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin + 1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4 +.... + +Вывод разбит на два раздела. +Заголовок (первые пять или шесть строк) показывает PID последнего запущенного процесса, среднее значение загрузки системы (которое показывает насколько система занята), время работы системы с последней перезагрузки и текущее время. +Остальные числа в заголовке относятся к количеству работающих процессов, объёму использования оперативной памяти и пространства подкачки, а также количеству времени, проводимого системой в различных состояниях центрального процессора. +Если был загружен модуль файловой системы ZFS, то строка `ARC` содержит информацию о том, какой объём данных был считан из кэша оперативной памяти, а не с диска. + +Под заголовком размещены несколько столбцов, содержащих информацию, похожую на результат работы man:ps[1], такую как PID, имя пользователя, объём времени ЦПУ и команда, которая запустила процесс. +По умолчанию man:top[1] показывает также объём памяти, занятой процессом. +Эта информация разделена на два столбца: один для суммарного объёма и один для занимаемого. +Суммарный объём соответствует тому, что требовался приложению, а занимаемый соответствует объёму, фактически используемому сейчас. + +man:top[1] автоматически обновляет экран каждые две секунды. +Другое значение этого временного интервала может быть задано при помощи параметра `-s`. -Другие сигналы, которые возможно вам понадобятся, `SIGHUP`, `SIGUSR1`, и `SIGUSR2`. Это сигналы общего назначения, различные приложения могут по-разному реагировать на них. +[[basics-daemons]] +=== Прекращение процессов -Предположим, что вы изменили файл конфигурации веб сервера - теперь нужно указать ему перечитать конфигурацию. Можно остановить и запустить `httpd`, но это приведет к кратковременной остановке сервера, которая может быть нежелательна. Большинство даемонов написаны так, чтобы при получении сигнала `SIGHUP` перечитывать файлы конфигурации. Поэтому вместо уничтожения и запуска `httpd` можно послать сигнал `SIGHUP`. Поскольку нет стандартного способа реагирования на этот сигнал, различные даемоны будут вести себя по разному; прочитайте документацию на даемон по этому вопросу. +Одним из способов взаимодействия с любым работающим процессом или даемоном является отправка ему _сигнала_ при помощи команды man:kill[1]. +Имеется множество различных сигналов; некоторые из них имеют специальное значение, тогда как другие описаны в документации приложения. +Пользователь может посылать какой-либо сигнал только тем процессам, владельцем которых он является, а отправка сигнала процессу какого-то другого пользователя приведёт к ошибке запрета доступа. +Исключением является пользователь `root`, который может отправлять сигналы чьим угодно процессам. -Сигналы посылаются с помощью команды man:kill[1], как показано в этом примере. +Операционная система также может отправлять сигнал процессу. +Если приложение написано некорректно и пытается обратиться к области памяти, к которой оно не должно обращаться, FreeBSD посылает процессу сигнал "Segmentation Violation" (`SIGSEGV`). +Если приложение было написано с учётом использования системного вызова man:alarm[3] для получения уведомления по истечении определённого периода времени, то ему будет отправлен сигнал "Alarm" (`SIGALRM`). -[.procedure] -==== -*Procedure: Отправка сигнала процессу* +Для остановки процесса могут использоваться два сигнала: `SIGTERM` и `SIGKILL`. +`SIGTERM` является вежливым способом завершить процесс, так как процесс может считать сигнал, закрыть какие-либо протоколирующие файлы, которые он мог открыть, и завершить то, что он делал до завершения работы. +В некоторых случаях процесс может даже игнорировать `SIGTERM`, если выполняет задачу, которая не может быть прервана. -Этот пример показывает как послать сигнал man:inetd[8]. Файл конфигурации `inetd`[.filename]#/etc/inetd.conf#, `inetd` перечитает этот файл, если ему отправить сигнал `SIGHUP`. +`SIGKILL` не может быть проигнорирован процессом. +Отправка процессу `SIGKILL` обычно остановит этот процесс тотчас же. -. Нужно определить PID процесса, которому вы хотите отправить сигнал. Сделайте это с помощью man:ps[1] и man:grep[1]. Команда man:grep[1] используется для поиска по заданной строке в выходном потоке. Эта команда запускается под обычным пользователем, а man:inetd[8] под `root`, поэтому man:ps[1] должна быть запущена с параметром `ax`. -+ -[source,shell] -.... -% ps -ax | grep inetd - 198 ?? IWs 0:00.00 inetd -wW -.... -+ -Итак, PID man:inetd[8] 198. В некоторых случаях в выводе команды может также появиться `grep inetd`. Это из-за способа, которым man:ps[1] получает список запущенных процессов. -. Используйте man:kill[1] для отправки сигнала. Поскольку man:inetd[8] запускается из под `root`, нужно сначала использовать man:su[1] для получения прав `root`. -+ -[source,shell] -.... -% su -Password: -# /bin/kill -s HUP 198 -.... -+ -Как и большинство команд UNIX(R), man:kill[1] ничего не выведет, если отработает нормально. Если вы посылаете сигнал процессу, которым не владеете, на экране появится `kill: _PID_: Operation not permitted`. При неправильно набранном PID вы или отправите сигнал другому процессу, что может привести к неприятностям, или, если повезет, сигнал будет отправлен на PID, который в данный момент не используется - на экране появится `kill: _PID_: No such process`. -+ [NOTE] -.Зачем использовать `/bin/kill`? -====== -Во многих оболочках команда `kill` встроена; таким образом, оболочка вместо вызова [.filename]#/bin/kill# сама посылает сигнал. Это может быть очень полезно, но в разных оболочках имя сигнала указывается по-разному. Чем пытаться выучить их все, гораздо проще использовать `/bin/kill _..._` непосредственно. -====== +==== +Существует несколько задач, которые не могут быть прерваны. +К примеру, если процесс пытается выполнить чтение файла, находящегося на другом компьютере в сети, а другой компьютер недоступен, то такой процесс называют "непрерываемым". +В конце концов время процесса истечёт, обычно после двух минут ожидания. +Как только такой таймаут случится, процесс будет прекращён. ==== -Отправка других сигналов очень похожа, просто замените `TERM` или `KILL` в командной строке на имя другого сигнала. +Другими часто используемыми сигналами являются `SIGHUP`, `SIGUSR1` и `SIGUSR2`. +Так как эти сигналы являются сигналами общего назначения, различные приложения будут реагировать на них по-разному. + +Например, после внесения изменений в конфигурационный файл веб-сервера ему нужно указать на повторное считывание настроек. +Перезапуск `httpd` привёл бы к краткосрочной недоступности веб-сервера. +Вместо этого отправьте даемону сигнал `SIGHUP`. +Имейте в виду, что разные даемоны будут вести себя по-разному, поэтому обратитесь к документации по даемону для определения того, достигнет ли `SIGHUP` желаемых результатов. [IMPORTANT] ==== -Уничтожение процессов наугад может быть плохой идеей. В частности, man:init[8], чей PID 1, имеет особое значение. Выполнение `/bin/kill -s KILL 1` - быстрый способ перегрузить систему. _Всегда_ дважды проверяйте параметры запуска man:kill[1] _перед_ тем, как нажать kbd:[Enter]. +Прекращение случайного процесса в системе является плохой затеей. +В частности, man:init[8], чей PID равен 1, является особенным процессом. +Выполнение `/bin/kill -s KILL 1` является быстрым и нерекомендуемым способом завершить работу системы. +_Всегда_ дважды проверяйте параметры запуска man:kill[1] _перед_ тем, как нажать на kbd:[Return]. ==== [[shells]] -== Интерпретатор команд - -При работе с FreeBSD, в большинстве случаев для выполнения повседневных задач используется командный интерфейс (так называемая "оболочка", "shell"). Основная задача интерпретатора - принимать вводимые команды и выполнять их. Многие командные интерпретаторы имеют встроенные средства для выполнения повседневной работы, например, операции над файлами и каталогами, редактирование командной строки, командные макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных интерпретаторов, например, `sh`, или Bourne Shell, и `tcsh`, расширенная версия C-shell. Многие другие интерпретаторы доступны из коллекции портов FreeBSD, например `zsh` и `bash`. - -Какой из командных интерпретаторов использовать? Это дело вкуса. Если вы программируете на C, то вам, возможно, понравится `tcsh`. Если вы работали с Linux, или только начинаете работать с интерфейсом командной строки UNIX(R), попробуйте `bash`. Каждый из названных интерпретаторов имеет свои особенности, которые отличат его от других, и, возможно, повлияют на ваш выбор. - -Одна из наиболее часто используемых функций командного интерпретатора - дополнение частичного имени файла до полного. Вы можете набрать только первые несколько символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор автоматически завершит имя. Например, у нас есть два файла, названные [.filename]#foobar# и [.filename]#foo.bar#. Допустим, мы хотим удалить файл [.filename]#foo.bar#. Для этого, наберем на клавиатуре `rm fo[Tab].[Tab]`. - -Вы увидите следующее: `rm foo[BEEP].bar`. - -Здесь [BEEP] - это так называемый консольный сигнал, оповещающий о том, что интерпретатор не в состоянии закончить имя файла, так как по введенным вами символам невозможно однозначно идентифицировать файл. Например, имена файлов [.filename]#foobar# и [.filename]#foo.bar# оба начинаются с `fo`, но после нажатия TAB можно однозначно дополнить только до `foo`. Если же теперь ввести точку (`.`) и вновь нажать TAB, интерпретатор достроит имя файла целиком. - -Дополнительные возможности при работе с интерпретатором дает использование переменных окружения. Переменные окружения это пары переменная/значение, хранящиеся в памяти интерпретатора. Значение переменных окружения может быть прочитано любой программой, запущенной из командного интерпретатора, и часто содержит настройки для многих приложений и утилит. Ниже приведены некоторые наиболее часто встречающиеся переменные окружения и их значения: - -[.informaltable] -[cols="1,1", frame="none", options="header"] +== Командные процессоры + +_Командный процессор_ (или оболочка) предоставляет интерфейс командной строки для взаимодействия с операционной системой. +Командный процессор получает команды из канала ввода и исполняет их. +Многие командные интерпретаторы имеют встроенные функции, помогающие выполнять такие повседневной задачи, как управление файлами, включая их массовую обработку, редактирование командной строки, работа с макрокомандами и переменными окружения. +FreeBSD поставляется вместе с несколькими командными процессорами, среди которых Bourne Shell (man:sh[1]) и расширенная версия C-shell (man:tcsh[1]), +Другие командные процессоры, такие как `zsh` и `bash`, доступны в Коллекции портов FreeBSD. + +Выбор используемого интерпретатора командной строки на самом деле является делом вкуса. +Программист на языке C может чувствовать себя более комфортно с C-подобной оболочкой типа man:tcsh[1]. +Пользователь Linux(R) может предпочесть `bash`. +Каждый командный процессор имеет свои уникальные особенности, которые могут работать, а могут и не работать в рабочем окружении, которое предпочитает пользователь, и именно поэтому имеются варианты выбора используемой оболочки. + +Одной из распространённых функций оболочки командной строки является дополнение частичного имени файла до полного. +После того, как пользователь набирает несколько первых символов команды или имени файла и нажимает клавишу kbd:[Tab], командный процессор дополняет имя команды или файла до полного наименования. +Рассмотрим случай с двумя файлами, которые называются `foobar` и `football`. +Для удаления `foobar` пользователь может набрать `rm foo` и нажать kbd:[Tab] для формирования полного имени файла. + +Однако оболочка только лишь отобразит `rm foo`. +Сформировать полное имя файла невозможно, так как и `foobar`, и `football` начинаются с `foo`. +Некоторые командные процессоры издадут звуковой сигнал или отобразят все варианты, если имеются совпадения более чем у одного имени. +Тогда пользователь должен набрать дополнительные символы для идентификации желаемого имени файла. +Набор `t` и повторное нажатие kbd:[Tab] достаточно для того, чтобы командный процессор определил желаемый файл и дополнил остаток его имени. + +Дополнительные возможности при работе с интерпретатором дает использование переменных окружения. +Переменные окружения представляют собой пары переменная/значение, сохраняемые в рабочем окружении интерпретатора. +Это рабочее окружение может быть прочитано любой программой, запущенной из командного интерпретатора, и, таким образом, содержит много информации для настройки приложения. +crossref:basics[shell-env-vars,Часто используемые переменные окружения] содержит список часто используемых переменных окружения и их значений. +Заметьте, что имена переменных окружения всегда пишутся заглавными буквами. + +[[shell-env-vars]] +.Часто используемые переменные окружения +[cols="25h,~"] |=== | Переменная | Описание @@ -1516,7 +1707,7 @@ Password: |Каталоги, разделенные двоеточием, для поиска исполняемых файлов. |`DISPLAY` -|Сетевое имя виртуального дисплея X11, доступного для подключения. +|Сетевое имя дисплея Xorg для подключения при его доступности. |`SHELL` |Текущий командный интерпретатор. @@ -1528,149 +1719,187 @@ Password: |Список escape-последовательностей для управления различными функциями терминала. |`OSTYPE` -|Название (тип) операционной системы. Например, FreeBSD. +|Вид операционной системы. |`MACHTYPE` -|Архитектура машины (процессора). +|Процессорная архитектура системы. |`EDITOR` |Выбранный пользователем текстовый редактор. |`PAGER` -|Выбранная пользователем утилита просмотра файлов. +|Предпочитаемая пользователем утилита для постраничного просмотра текста. |`MANPATH` |Каталоги, разделенные двоеточием, для поиска файлов системного справочника. |=== -Установка значений переменных окружения различна для разных оболочек. Например, в интерпретаторах C-стиля, таких как `tcsh` и `csh`, это `setenv`. В интерпретаторах Bourne, таких как `sh` и `bash`, это `export`. Например, чтобы установить или изменить значение переменной `EDITOR` к значению [.filename]#/usr/local/bin/emacs# в `csh` или `tcsh`, выполните команду: +Порядок установки значения переменной окружения различна для разных оболочек. +В командных процессорах man:tcsh[1] и man:csh[1] для задания переменных окружения используется `setenv`. +В интерпретаторах man:sh[1] и `bash` для задания актуального значения переменных окружения используется `export`. +В этом примере для man:tcsh[1] значение по умолчанию для переменной `EDITOR` устанавливается равным `/usr/local/bin/emacs`: [source,shell] .... % setenv EDITOR /usr/local/bin/emacs .... -В оболочках Bourne: +Аналогичная команда для `bash` была бы следующей: [source,shell] .... % export EDITOR="/usr/local/bin/emacs" .... -Чтобы получить значение переменной, например, в командной строке, поместите символ `$` перед именем переменной. Например, команда `echo $TERM` выведет значение переменной `$TERM`. +Чтобы раскрыть значение переменной окружения для того, чтобы посмотреть её текущее значение, в командной строке наберите символ `$` перед именем переменной. +Например, `echo $TERM` выведет актуальное значение для `$TERM`. -Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих. Один из наиболее часто используемых - символ `\*`, который заменяет любое количество символов в имени файла. Метасимволы используются для поиска файлов по маске, например, команда `echo *` делает практически тоже самое, что и команда `ls`, поскольку интерпретатор вызывает команду `echo`, передавая ей имена всех файлов, попадающих под маску `*`. +Командные процессоры обрабатывают специальные символы, называемые метасимволами, как особое обозначение данных. +Самым общеупотребительным метасимволом является `\*`, который обозначает любое количество символов в имени файла. +Метасимволы могут использоваться для выполнения массовых операций с именами файлов. +Например, команда `echo *` равнозначна команде `ls`, поскольку оболочка выбирает все файлы, соответствующие `*`, а `echo` выдаёт их список в командной строке. -В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив перед символом обратную косую черту (`\`). Например, команда `echo $TERM` выведет тип вашего терминала, в то же время команда `echo \$TERM` выведет именно слово `$TERM`, а не значение переменной `$TERM`. +Чтобы предотвратить обработку специального символа командным процессором, экранируйте его, предварив наклонной чертой влево `\` (обратным слэшем). +Например, `echo $TERM` выведет значение настройки терминала, тогда как `echo \$TERM` выведет в буквальном смысле строку `$TERM`. [[changing-shells]] -=== Как изменить командный интерпретатор по умолчанию +=== Смена командного процессора -Самым простым способом, пожалуй, будет воспользоваться командой `chsh`. Если переменная `EDITOR` определена, то будет загружен соответствующий текстовый редактор, иначе vi. Вам нужно будет изменить значение поля "Shell:" и выйти из редактора с сохранением результатов. +Самым простым способом замены командного процессора, используемого по умолчанию, на постоянной основе является использование команды `chsh`. +При запуске этой команды открывается редактор, настроенный в переменной окружения `EDITOR`, значение которой по умолчанию равно man:vi[1]. +Измените строку `Shell:`, указав полный путь для нового командного процессора. -Можно также воспользоваться опцией `-s` команды `chsh`. Например, если вы хотите изменить интерпретатор на `bash`, выполните: +Альтернативным способом является использование команды `chsh -s`, которая настроит указанную оболочку без открытия редактора. +Например, для замены командного процессора на `bash`: [source,shell] .... % chsh -s /usr/local/bin/bash .... +Введите ваш пароль в строке приглашения и нажмите kbd:[Return] для смены вашего командного процессора. +Для того, чтобы начать использовать новую оболочку, выйдите из системы и войдите в неё снова. + [NOTE] ==== -Интерпретатор, который вы будете использовать, _обязательно_ должен быть в файле [.filename]#/etc/shells#. Обычно, при установке интерпретаторов из crossref:ports[ports,коллекции портов], это делается автоматически. Если же это не так, вам нужно будет самостоятельно добавить соответствующую строчку в этот файл. - -Например, если вы установили `bash` вручную и поместили его в каталог [.filename]#/usr/local/bin#, нужно набрать: +Новая оболочка _обязательно_ должна присутствовать в файле `/etc/shells`. +Если командный процессор был установлен из Коллекции портов FreeBSD, как это описано в главе <<ports>>, то он должен быть добавлен в этот файл автоматически. +Если его там нет, добавьте его при помощи следующей команды, заменив путь на маршрут соответствующей оболочки: [source,shell] .... -# echo "/usr/local/bin/bash" >> /etc/shells +# echo /usr/local/bin/bash >> /etc/shells .... -Теперь можно смело использовать команду `chsh`. +После этого запустите man:chsh[1] повторно. ==== -[[editors]] -== Текстовые редакторы - -Большинство настроек в FreeBSD производится путем редактирования текстовых файлов. Соответственно, вам нужно будет освоиться с каким-либо текстовым редактором. Вместе с FreeBSD поставляются лишь некоторые из них, гораздо больше редакторов доступно из Коллекции портов. +=== Расширенные функции оболочки -Самым простым в изучении и использовании, по-видимому, можно назвать ee, что расшифровывается как "easy editor", т.е. "простой редактор". Чтобы начать редактировать какой-либо файл, наберите в командной строке `ee _filename_`, где _filename_ имя редактируемого файла. Например, для редактирования файла [.filename]#/etc/rc.conf#, наберите `ee /etc/rc.conf`. В верхней части экрана вы увидите список основных команд редактора. Символ каретки (`^`) означает клавишу kbd:[Ctrl], таким образом, `^e` означает комбинацию клавиш kbd:[Ctrl+e]. Чтобы выйти из редактора, нажмите клавишу kbd:[Esc], затем kbd:[Enter]. Если остались какие-либо не сохраненные данные, вам потребуется подтвердить выход, сохранив результат работы или оставив файл без изменения. +Оболочка UNIX(R) является не только лишь интерпретатором команд, она также выступает в роли мощного инструмента, позволяющего пользователям выполнять команды, перенаправлять их результирующий и входной потоки, а также выстраивать последовательность команд для улучшения выдачи финализирующей команды. +Когда такая функциональность объединяется со встроенными командами, пользователь получает окружение, которое может дать максимальный эффект. -В FreeBSD присутствует также более мощный текстовый редактор vi, а редакторы emacs и vim можно найти в коллекции портов (package:editors/emacs[] и package:editors/vim[]). Эти редакторы обладают еще большей функциональностью и мощью, но они также и более сложны в изучении. Однако, если в будущем вам потребуется часто редактировать большие объемы текстов, то время, потраченное на изучение более мощного редактора, такого как vim или Emacs, окупится с лихвой. +Перенаправление на уровне оболочки представляет собой действие по отправке результата работы или входного потока какой-либо команды в другую команду или в файл. +Для записи результата работы команды man:ls[1], например, в файл, перенаправьте выходной поток: -Многие приложения, модифицирующие файлы или требующие текстового ввода, автоматически открывают текстовый редактор. Чтобы сменить используемый по умолчанию редактор, установите переменную окружения `EDITOR`. За деталями обратитесь к разделу <<shells,интерпретатор команд>>. - -[[basics-devices]] -== Устройства и файлы устройств +[source,shell] +.... +% ls > directory_listing.txt +.... -Термин "устройство" используется в основном по отношению к аппаратному обеспечению системы, такому как диски, принтеры, графические адаптеры, устройства ввода текста. При загрузке FreeBSD главным образом выводит на экран информацию об обнаруженных устройствах. Вы можете найти эти сообщения в файле [.filename]#/var/run/dmesg.boot#. +Список содержимого каталога теперь будет находиться в `directory_listing.txt`. +Некоторые команды, подобные man:sort[1], могут использоваться для чтения входного потока. +Для сортировки этого списка перенаправьте входной поток: -Например, [.filename]#acd0# это первый диск IDE CDROM, а [.filename]#kbd0# - клавиатура. +[source,shell] +.... +% sort < directory_listing.txt +.... -В UNIX(R) доступ к большинству этих устройств можно получить через специальные файлы устройств, расположенные в каталоге [.filename]#/dev#. +Входной поток будет отсортирован и размещён на экране. +Для перенаправления этого ввода в другой файл можно перенаправить выходной поток man:sort[1], объединив направление: -=== Создание файлов устройств +[source,shell] +.... +% sort < directory_listing.txt > sorted.txt +.... -При добавлении в систему нового устройства, или добавлении поддержки дополнительных устройств, потребуется создать один или несколько файлов устройств для нового оборудования. +Во всех примерах выше команды выполняют перенаправление при помощи файловых дескрипторов. +В каждой системе UNIX(R) имеются файловые дескрипторы, среди которых имеются стандартный ввод (stdin), стандартный вывод (stdout) и стандартная диагностика (stderr). +У каждого из них имеется своё назначение, и здесь вводом может быть клавиатура или мышь, что-то, формирующее входной поток. +Выводом может быть экран или бумага в принтере. +А диагностикой может быть что угодно, используемое для диагностических сообщений или сообщений об ошибках. +Все три рассматриваются как файловые дескрипторы ввода-вывода и иногда рассматриваются как потоки. -==== `DEVFS` (DEVice File System) +Посредством использования этих дескрипторов командный процессор обеспечивает прохождение ввода и вывода через различные команды и их перенаправление в файл или из файла. +Ещё одним методом перенаправления является оператор конвейера. -Device filesystem, или `DEVFS`, предоставляет доступ к пространству устройств ядра через общую файловую систему. Вместо создания и модификации файлов устройств, `DEVFS` создает специальную файловую систему. +Оператор конвейера UNIX(R), "|", позволяет прямую передачу или перенаправление вывода одной команды в другую программу. +Проще говоря, конвейер позволяет передавать стандартный вывод какой-либо команды в качестве стандартного ввода другой команде, к примеру: -Обращайтесь к man:devfs[5] за дополнительной информацией. +[source,shell] +.... +% cat directory_listing.txt | sort | less +.... -[[binary-formats]] -== Бинарные форматы +В этом примере содержимое `directory_listing.txt` будет отсортировано, а вывод передан в man:less[1]. +Это позволяет пользователю просматривать результат в собственном темпе и не позволяет выходить за рамки экрана. -Для понимания того, почему FreeBSD использует формат man:elf[5], вам потребуется сначала немного узнать о трех "доминирующих" исполняемых форматах для UNIX(R): +[[editors]] +== Текстовые редакторы -* man:a.out[5] -+ -Старейший и "классический" объектный формат UNIX(R). Он использует короткий и компактный заголовок с магическим числом в начале, которое часто используется для описания формата (смотрите man:a.out[5] с более подробной информацией). Он содержит три загружаемых сегмента: .text, .data и .bss плюс таблицу символов и таблицу строк. -* COFF -+ -Объектный формат SVR3. Заголовок включает таблицу разделов, так что могут быть сегменты кроме .text, .data и .bss. -* man:elf[5] -+ -Наследник формата COFF, поддерживающий множественные сегменты и 32-битные или 64-битные значения. Одно важное замечание: ELF был разработан в предположении что есть только по одному ABI на одну архитектуру. Это предположение совершенно неверно, и не только в мире коммерческих SYSV (в котором есть как минимум три ABI: SVR4, Solaris, SCO). -+ -FreeBSD пытается обойти эту проблему, в частности предоставляя утилиту для _оглавления_ известного исполняемого файла ELF информацией об ABI с которым он совместим. Обратитесь к странице справочника man:brandelf[1] за более подробной информацией. +Большинство настроек FreeBSD осуществляется редактированием текстовых файлов. +В силу этого обстоятельства хорошей идеей является освоение текстового редактора. +Несколько редакторов поставляются с FreeBSD в составе базового комплекта системы, и гораздо больше доступно в Коллекции портов. -FreeBSD имеет произошла из "классического" лагеря и использовала формат man:a.out[5], технологию опробованную и проверенную на многих поколениях релизов BSD, до начала ветки 3.X. Хотя собирать и запускать родные бинарные файлы ELF (и ядро) в системе FreeBSD можно было несколько раньше, FreeBSD вначале сопротивлялась "проталкиванию"ELF как формата по умолчанию. Почему? Когда лагерь Linux производил болезненный переход к ELF, у него не было большого преимущества перед исполняемым форматом [.filename]#a.out#, из-за негибкого, основанного на таблице переходов механизма разделяемых библиотек, что делало создание разделяемых библиотек очень трудным для поставщиков и разработчиков. Когда доступные инструменты ELF предоставили решение проблемы разделяемых библиотек, и появилась некоторая перспектива, цена перехода была признана допустимой и он был сделан. Механизм разделяемых библиотек FreeBSD близок по стилю к механизму разделяемых библиотек SunOS(TM) от Sun, и поэтому очень прост в использовании. +Простым в освоении редактором является man:ee[1], что означает "easy editor" ("лёгкий редактор"). +Чтобы запустить его, наберите `ee _filename_`, где _filename_ является именем редактируемого файла. +Внутри редактора все команды для управления его функциями перечислены вверху экрана. +Карет (`^`) обозначает клавишу kbd:[Ctrl], таким образом, `^e` означает комбинацию клавиш kbd:[Ctrl+e]. +Чтобы выйти из man:ee[1], нажмите клавишу kbd:[Esc], затем выберите пункт "leave editor" в главном меню. +Редактор запросит сохранение изменений, если файл был изменён. -Итак, почему так много разных форматов? +Во FreeBSD также имеются более мощные текстовые редакторы типа man:vi[1], поставляемого как часть базового системного комплекта. +Другие редакторы, подобные package:editors/emacs[] и package:editors/vim[], являются частью Коллекции портов FreeBSD. +Эти редакторы обладают большей функциональностью, но также они более сложны в изучении. +Изучение более мощных редакторов типа vim или Emacs может сэкономить вам больше времени в долгосрочной перспективе. -Давно, в темном далеком прошлом, оборудование было простым. Это простое оборудование поддерживало простые, маленькие системы. [.filename]#a.out# был совершенно адекватен задаче представления бинарных файлов на таких простых системах (PDP-11). Люди, портировавшие UNIX(R) с этих простых систем, оставили [.filename]#a.out# формат потому, что он был достаточен для ранних портов UNIX(R) на архитектуры, подобные Motorola 68k, VAXen, etc. +Многие приложения, модифицирующие файлы или требующие текстового ввода, автоматически открывают текстовый редактор. +Чтобы сменить редактор, заданный по умолчанию, определите значение переменной окружения `EDITOR`, как это описано в разделе crossref:basics[shells, Командные процессоры]. -Затем какой-то смышленый инженер по оборудованию решил, что если он сможет заставить программы исполнять некоторые трюки, то сможет несколько упростить дизайн и заставить ядро CPU работать быстрее. Хотя это было сделано с новым типом оборудования (известного сейчас как RISC), формат [.filename]#a.out# не подходил для него, и было разработано множество форматов, чтобы получить лучшую производительность на таком оборудовании по сравнению с той, которую мог предоставить простой формат [.filename]#a.out#. Были изобретены форматы COFF, ECOFF и некоторые другие малоизвестные форматы, и их ограничения были учтены, когда все похоже остановились на ELF. +[[basics-devices]] +== Устройства и файлы устройств -Кроме того, размеры программ стали огромны, а диски (и оперативная память) остались относительно малы, поэтому появилась концепция разделяемых библиотек. Система VM также стала более сложной. Хотя все эти усовершенствования были выполнены с форматом [.filename]#a.out#, его полезность все больше и больше уменьшалась с каждым нововведением. К тому же потребовалась динамическая загрузка во время выполнения, или выгрузка частей программы после выполнения стартового кода для экономии памяти или места на диске. Языки усложнялись, и потребовался автоматический вызов кода перед главной программой. Множество изменений было внесено в формат [.filename]#a.out#, чтобы все это появилось, и в основном работало некоторое время. Настал момент, когда [.filename]#a.out# не смог решить все эти проблемы без чрезмерного увеличения размера и сложности. В то время, как ELF решил многие из этих проблем, перевод этого формата с системы на систему болезнен. Поэтому формату ELF пришлось подождать, пока не стало более болезненным оставаться с [.filename]#a.out#, чем перейти на ELF. +Термин "устройство" используется в основном по отношению к аппаратному обеспечению системы, такому как диски, принтеры, графические адаптеры и клавиатуры. +При загрузке FreeBSD основной объём выдаваемых сообщений относится к обнаруживаемым устройствам. +Копии сообщений, выдаваемых при загрузке, сохраняются в `/var/run/dmesg.boot`. -Тем временем, инструменты разработки, от которых произошли инструменты разработки FreeBSD (особенно ассемблер и загрузчик), развивались в двух параллельных направлениях. Направление FreeBSD добавило разделяемые библиотеки и устранило некоторые ошибки. Люди из GNU, написавшие эти программы, переписали их и добавили простую поддержку сборки кросс-компиляторов, подключения различных форматов в будущем и так далее. Многим требовалось собрать кросс-компиляторы для FreeBSD, и это не удалось, поскольку устаревшие исходные тексты FreeBSD для as и ld не подходили для этой задачи. Новый набор инструментов GNU (binutils) поддерживает кросс-компилирование, ELF, разделяемые библиотеки, C++, расширения и т.д. В дополнение, многие поставщики выпустили программы в формате ELF и они хорошо подходят для запуска в FreeBSD. +Каждое устройство имеет имя и номер. +Например, `ada0` соответствует первому приводу жёстких дисков с интерфейсом SATA, а `kbd0` представляет собой клавиатуру. -ELF более выразителен, чем [.filename]#a.out#, позволяет базовой системе быть более гибкой. ELF лучше поддерживается, и предоставляет поддержку кросс-компиляторов, что важно для многих людей. ELF может быть немного медленнее, чем [.filename]#a.out#, но замерить это сложно. Есть также множество деталей, отличающихся для этих двух форматов, в том как они отображают страницы, обрабатывают начальный код, и т.д. В этом нет ничего очень важного, но они различаются. В настоящее время поддержка [.filename]#a.out# убрана из ядра [.filename]#GENERIC#, и со временем будет убрана из ядра, как только потребность в запуске старых программ [.filename]#a.out# останется в прошлом. +Во FreeBSD доступ к большинству устройств обязательно должен осуществляться через специальные файлы, называемые узлами устройств, которые размещаются в `/dev`. [[basics-more-information]] -== Дополнительная информация ++== Страницы Справочника -[[basics-man]] -=== Системный справочник (man) - -Пожалуй, самым полным руководством по FreeBSD является системный справочник (man). Практически каждое приложение или утилита имеют соответствующую страницу (часто не одну), описывающую тот или иной аспект работы программы, всевозможные опции и настройки. Для просмотра этих страниц существует команда `man`: +Пожалуй, самая полная документация по FreeBSD имеет форму страниц справочной системы. Практически каждое приложение или утилита имеют соответствующую страницу (часто не одну), описывающую основы работы и различные параметры. +Эти справочники можно просматривать при помощи `man`: [source,shell] .... % man command .... -Здесь `command` - это команда, о которой вы хотите получить информацию. Например, чтобы узнать побольше о команде `ls`, наберите: +Здесь _command_ является названием команды, информацию о которой нужно получить. +Например, чтобы узнать больше о команде man:ls[1], наберите: [source,shell] .... % man ls .... -Содержимое системного справочника для удобства разделено на несколько разделов: +Страницы Справочника разделены на разделы, соответствующие различному типу содержимого. +Во FreeBSD имеются следующие разделы: . Пользовательские команды. . Системные вызовы и коды ошибок. @@ -1680,54 +1909,59 @@ ELF более выразителен, чем [.filename]#a.out#, позволя . Развлечения и игры. . Дополнительная информация. . Команды системного администрирования. -. Для разработчиков ядра. +. Интерфейсы ядра системы. -В некоторых случаях (не так уж редко), страницы, относящиеся к одной и той же команде, находятся в различных разделах справочника. Например, есть команда `chmod` и системный вызов `chmod()`. В этом случае, необходимо явно указать раздел `man`, в котором нужно искать соответствующую страницу: +В некоторых случаях одна и та же тема может появиться в различных разделах справочника. +Например, существуют пользовательская команда `chmod` и системный вызов `chmod()`. +Для указания команде man:man[1] искомого раздела задайте его номер: [source,shell] .... % man 1 chmod .... -Эта команда выведет справку об утилите `chmod`. По традиции, конкретный раздел справочника указывается в скобках после команды, например, man:chmod[1] относится к утилите `chmod`, а man:chmod[2] - к соответствующему системному вызову. +При этом будет выведена справка о пользовательской команде man:chmod[1]. +По традиции документирования ссылки на конкретный раздел онлайного справочника указываются в скобках, так что man:chmod[1] относится к пользовательской команде, man:chmod[2] указывает на соответствующий системный вызов. -Часто бывает так, что вы не знаете название команды, но имеете представление о том, что она должна делать. В этом случае можно попытаться найти нужную команду по ключевым словам, встречающимся в ее описании, используя опцию `-k` программы `man`: +Если название страницы Справочника неизвестно, воспользуйтесь `man -k` для поиска по ключевым словам, встречающимся в описаниях страниц Справочника: [source,shell] .... % man -k mail .... -Вы получите список команд, имеющих слово "mail" в своих описаниях. Это эквивалентно использованию команды `apropos`. +Эта команда выдаёт список команд, имеющих ключевое слово "mail" в своих описаниях. +Это равнозначно использованию команды man:apropos[1]. -Или например, вы видите список файлов в каталоге [.filename]#/usr/bin#, при этом не имея ни малейшего представления о том, какие функции выполняет каждый их них? Просто наберите: +Чтобы прочитать описания всех команд из `/usr/sbin`, наберите: [source,shell] .... -% cd /usr/bin -% man -f * +% cd /usr/sbin +% man -f * | more .... или [source,shell] .... -% cd /usr/bin -% whatis * +% cd /usr/sbin +% whatis * |more .... -что фактически одно и то же. - [[basics-info]] === Файлы GNU Info -FreeBSD поставляется с многочисленными приложениями и утилитами от Фонда Свободного Программного Обеспечения, Free Software Foundation (FSF). В дополнение к страницам справочника, с этими программами поставляется обширная гипертекстовая документация в виде так называемых `info` файлов, которые могут быть просмотрены с помощью команды `info`, или, если установлен emacs, в info режиме этого редактора. +FreeBSD поставляется с некоторым количеством приложений и утилит, выпущенных Free Software Foundation (FSF). +В дополнение к страницам справочника, с этими программами могут поставляться гипертекстовые документы в виде так называемых файлов `info`. +Они могут быть просмотрены с помощью команды man:info[1] или, если установлен пакет package:editors/emacs[], в режиме info редактора emacs. -Чтобы воспользоваться командой man:info[1], просто наберите в командной строке: +Чтобы использовать man:info[1], наберите: [source,shell] .... % info .... -Вызвать на экран краткое введение можно набрав `h`. Краткий список команд можно получить набрав `?`. +Вызвать на экран краткое введение можно набрав `h`. +Краткий список команд можно получить, набрав `?`. |