---
authors:
  - 
    author: 'John Ferrell'
copyright: '2008 The FreeBSD Documentation Project'
description: 'Этот документ предназначен для быстрого ознакомления с основами FreeBSD пользователей Linux® среднего и продвинутого уровня.'
tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
title: 'Быстрое руководство по FreeBSD для пользователей Linux®'
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---

= Быстрое руководство по FreeBSD для пользователей Linux(R)
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:images-path: articles/linux-users/

ifdef::env-beastie[]
ifdef::backend-html5[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
:imagesdir: ../../../images/{images-path}
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[.abstract-title]
Аннотация

Этот документ предназначен для быстрого ознакомления с основами FreeBSD пользователей Linux(R) среднего и продвинутого уровня.

'''

toc::[]

[[intro]]
== Введение

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

Этот документ предполагает, что FreeBSD уже установлена. Для получения помощи по процессу установки обратитесь к главе extref:{handbook}bsdinstall[Установка FreeBSD, bsdinstall] Руководства FreeBSD.

[[shells]]
== Стандартная оболочка

Пользователи Linux(R) часто удивляются, обнаружив, что Bash не является оболочкой по умолчанию в FreeBSD. На самом деле, Bash не включён в стандартную установку. Вместо этого используется совместимая с Bourne shell оболочка man:sh[1] в качестве оболочки пользователя по умолчанию. Оболочка root — это man:tcsh[1] по умолчанию в FreeBSD 13 и более ранних версиях и man:sh[1] в FreeBSD 14 и позднее. Оболочка man:sh[1] очень похожа на Bash, но имеет гораздо меньший набор возможностей. Как правило, скрипты, написанные для man:sh[1], будут работать в Bash, но обратное не всегда верно.

Однако Bash и другие оболочки доступны для установки через extref:{handbook}ports[Коллекцию портов и пакетов FreeBSD, ports].

После установки другой оболочки используйте man:chsh[1], чтобы изменить оболочку пользователя по умолчанию. Рекомендуется оставить оболочку пользователя `root` без изменений, поскольку оболочки, не входящие в базовую поставку, устанавливаются в [.filename]#/usr/local/bin#. В случае возникновения проблемы файловая система, в которой находится [.filename]#/usr/local/bin#, может быть не смонтирована. В такой ситуации у `root` не будет доступа к своей оболочке по умолчанию, что помешает ему войти в систему и устранить проблему.

[[software]]
== Пакеты и порты: установка программ в FreeBSD

FreeBSD предоставляет два метода установки приложений: бинарные пакеты и скомпилированные порты. Каждый метод имеет свои преимущества:

.Бинарные пакеты
* Быстрая установка по сравнению с компиляцией крупных приложений.
* Не требует понимания того, как компилировать программное обеспечение.
* Нет необходимости устанавливать компилятор.

.Порты
* Возможность настройки параметров установки.
* Могут быть применены пользовательские патчи.

Если установка приложения не требует дополнительной собственной настройки, достаточно установить пакет. Собирайте порт, если приложению требуется изменение параметров, заданных в пакетах по умолчанию. При необходимости собственный пакет можно собрать из портов с помощью `make package`.

Полный список всех доступных портов и пакетов можно найти https://ports.freebsd.org[здесь].

[[packages]]
=== Пакеты

Пакеты — это предварительно скомпилированные приложения, эквиваленты файлов [.filename]#.deb# в системах на основе Debian/Ubuntu и файлов [.filename]#.rpm# в системах на основе Red Hat/Fedora. Пакеты устанавливаются с помощью `pkg`. Например, следующая команда устанавливает Apache 2.4:

[source, shell]
....
# pkg install apache24
....

Для получения дополнительной информации о пакетах обратитесь к разделу 4.4 Руководства FreeBSD: extref:{handbook}ports[Использование pkg для управления бинарными пакетами, pkgng-intro].

[[ports]]
=== Порты

Коллекция портов FreeBSD — это набор [.filename]#Makefile# и патчей, специально адаптированных для установки приложений из исходного кода в FreeBSD. При установке порта система загрузит исходный код, применит необходимые патчи, скомпилирует код и установит приложение вместе с требуемыми зависимостями.

Коллекция портов, иногда называемая деревом портов, может быть установлена в [.filename]#/usr/ports# с помощью link:{handbook}mirrors/#git[Git]. Подробные инструкции по установке Коллекции портов можно найти в extref:{handbook}ports[разделе 4.5.1, ports-using-installation-methods] Руководства FreeBSD.

Для сборки порта перейдите в его каталог и запустите процесс сборки. В следующем примере устанавливается Apache 2.4 из коллекции портов:

[source, shell]
....
# cd /usr/ports/www/apache24
# make install clean
....

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

[source, shell]
....
# cd /usr/ports/www/apache24
# make WITH_LDAP="YES" install clean
....

Обратитесь к разделу extref:{handbook}ports[Использование коллекции портов, ports-using] для получения дополнительной информации.

[[startup]]
== Загрузка системы

Многие дистрибутивы Linux(R) используют систему инициализации SysV, тогда как FreeBSD использует традиционный BSD-стиль man:init[8]. В BSD-стиле man:init[8] нет уровней запуска (run-levels), и файл [.filename]#/etc/inittab# отсутствует. Вместо этого запуск системы управляется сценариями man:rc[8]. При загрузке системы [.filename]#/etc/rc# читает [.filename]#/etc/rc.conf# и [.filename]#/etc/defaults/rc.conf#, чтобы определить, какие службы должны быть запущены. Указанные службы затем запускаются путем выполнения соответствующих сценариев инициализации, расположенных в [.filename]#/etc/rc.d/# и [.filename]#/usr/local/etc/rc.d/#. Эти сценарии аналогичны сценариям, расположенным в [.filename]#/etc/init.d/# в системах Linux(R).

Скрипты, расположенные в [.filename]#/etc/rc.d/#, предназначены для приложений, входящих в "базовую" систему, таких как man:cron[8], man:sshd[8] и man:syslog[3]. Скрипты в [.filename]#/usr/local/etc/rc.d/# предназначены для пользовательских приложений, таких как Apache и Squid.

Поскольку FreeBSD разрабатывается как полноценная операционная система, пользовательские приложения не считаются частью «базовой» системы. Пользовательские приложения обычно устанавливаются с помощью extref:{handbook}ports[Пакетов или Портов, ports-using]. Чтобы отделить их от базовой системы, пользовательские приложения устанавливаются в [.filename]#/usr/local/#. Таким образом, исполняемые файлы пользовательских приложений находятся в [.filename]#/usr/local/bin/#, конфигурационные файлы — в [.filename]#/usr/local/etc/# и так далее.

Сервисы включаются путем добавления соответствующей записи в файл [.filename]#/etc/rc.conf#. Системные параметры по умолчанию находятся в файле [.filename]#/etc/defaults/rc.conf#, а настройки по умолчанию переопределяются параметрами из файла [.filename]#/etc/rc.conf#. Подробнее о доступных параметрах можно узнать в man:rc.conf[5]. При установке дополнительных приложений ознакомьтесь с сообщением установки, чтобы определить, как включить связанные сервисы.

Следующие записи в [.filename]#/etc/rc.conf# включают man:sshd[8], активируют Apache 2.4 и указывают, что Apache должен запускаться с SSL.

[.programlisting]
....
# enable SSHD
sshd_enable="YES"
# enable Apache with SSL
apache24_enable="YES"
apache24_flags="-DSSL"
....

После включения службы в [.filename]#/etc/rc.conf# её можно запустить без перезагрузки системы:

[source, shell]
....
# service sshd start
# service apache24 start
....

Если служба не была включена, её можно запустить из командной строки с помощью `onestart`:

[source, shell]
....
# service sshd onestart
....

[[network]]
== Настройка сети

Вместо общего идентификатора _ethX_, который используется в Linux(R) для обозначения сетевого интерфейса, FreeBSD использует имя драйвера с последующим числом. Следующий вывод из man:ifconfig[8] показывает два сетевых интерфейса Intel(R) Pro 1000 ([.filename]#em0# и [.filename]#em1#):

[source, shell]
....
% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
        ether 00:50:56:a7:70:b2
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
        ether 00:50:56:a7:03:2b
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
....

IP-адрес может быть назначен интерфейсу с помощью man:ifconfig[8]. Чтобы настройки сохранялись после перезагрузки, конфигурация IP должна быть указана в [.filename]#/etc/rc.conf#. Следующие записи в [.filename]#/etc/rc.conf# задают имя хоста, IP-адрес и шлюз по умолчанию:

[.programlisting]
....
hostname="server1.example.com"
ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
defaultrouter="10.10.10.1"
....

Используйте следующие записи для настройки интерфейса через DHCP:

[.programlisting]
....
hostname="server1.example.com"
ifconfig_em0="DHCP"
....

[[firewall]]
== Firewall

FreeBSD не использует Linux(R) IPTABLES для своего межсетевого экрана. Вместо этого FreeBSD предлагает выбор из трёх межсетевых экранов на уровне ядра:

* extref:{handbook}firewalls[PF, firewalls-pf]
* extref:{handbook}firewalls[IPFILTER, firewalls-ipf]
* extref:{handbook}firewalls[IPFW, firewalls-ipfw]

PF разработан проектом OpenBSD и портирован в FreeBSD. PF был создан как замена для IPFILTER, и его синтаксис схож с синтаксисом IPFILTER. PF может использоваться совместно с man:altq[4] для обеспечения функций QoS.

Этот пример записи PF разрешает входящий SSH:

[.programlisting]
....
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
....

IPFILTER — это приложение для межсетевого экрана, разработанное Дарреном Ридом. Оно не является специфичным для FreeBSD и было портировано на несколько операционных систем, включая NetBSD, OpenBSD, SunOS, HP/UX и Solaris.

Синтаксис IPFILTER для разрешения входящего SSH:

[.programlisting]
....
pass in on $ext_if proto tcp from any to any port = 22
....

IPFW — это межсетевой экран, разработанный и поддерживаемый FreeBSD. Он может быть использован совместно с man:dummynet[4] для обеспечения возможностей управления трафиком и имитации различных типов сетевых соединений.

Синтаксис IPFW для разрешения входящего SSH будет следующим:

[.programlisting]
....
ipfw add allow tcp from any to me 22 in via $ext_if
....

[[updates]]
== Обновление FreeBSD

Существует два метода обновления системы FreeBSD: из исходного кода или бинарные обновления.

Обновление из исходного кода — это наиболее сложный метод обновления, но он предоставляет наибольшую гибкость. Процесс включает синхронизацию локальной копии исходного кода FreeBSD с репозиторием FreeBSD Git. После того как локальный исходный код обновлён, можно скомпилировать новую версию ядра и пользовательского пространства.

Двоичные обновления аналогичны использованию `yum` или `apt-get` для обновления системы Linux(R). В FreeBSD, man:freebsd-update[8] может быть использован для получения и установки новых двоичных обновлений. Эти обновления могут быть запланированы с помощью man:cron[8].

[NOTE]
====
При использовании man:cron[8] для планирования обновлений используйте `freebsd-update cron` в man:crontab[1], чтобы снизить вероятность одновременного скачивания обновлений большим количеством машин:

[.programlisting]
....
0 3 * * * root /usr/sbin/freebsd-update cron
....

====

Для получения дополнительной информации об обновлениях исходного кода и бинарных обновлениях обратитесь к extref:{handbook}cutting-edge[главе об обновлениях, updating-upgrading-freebsdupdate] в Руководстве FreeBSD.

[[procfs]]
== procfs: ушёл, но не забыт

В некоторых дистрибутивах Linux(R) можно посмотреть файл [.filename]#/proc/sys/net/ipv4/ip_forward#, чтобы определить, включена ли IP-маршрутизация. В FreeBSD вместо этого используется man:sysctl[8] для просмотра этого и других системных параметров.

Например, используйте следующую команду, чтобы определить, включена ли IP-переадресация в системе FreeBSD:

[source, shell]
....
% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
....

Используйте `-a` для вывода всех системных настроек:

[source, shell]
....
% sysctl -a | more
....

Если приложению требуется procfs, добавьте следующую запись в [.filename]#/etc/fstab#:

[source, shell]
....
proc                /proc           procfs  rw,noauto       0       0
....

Добавление `noauto` предотвратит автоматическое монтирование [.filename]#/proc# при загрузке.

Чтобы подключить файловую систему без перезагрузки:

[source, shell]
....
# mount /proc
....

[[commands]]
== Распространенные команды

Некоторые эквиваленты распространённых команд приведены ниже:

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Команда Linux(R) (Red Hat/Debian)
| Эквивалент FreeBSD
| Назначение

|`yum install _package_` / `apt-get install _package_`
|`pkg install _package_`
|Установить пакет из удалённого репозитория

|`rpm -ivh _package_` / `dpkg -i _package_`
|`pkg add _package_`
|Установить локальный пакет

|`rpm -qa` / `dpkg -l`
|`pkg info`
|Список установленных пакетов

|`lspci`
|`pciconf`
|Перечислить устройства PCI

|`lsmod`
|`kldstat`
|Перечислить загруженные модули ядра

|`modprobe`
|`kldload` / `kldunload`
|Загрузка/выгрузка модулей ядра

|`strace`
|`truss`
|Трассировка системных вызовов
|===

[[conclusion]]
== Заключение

Этот документ предоставил обзор FreeBSD. Для более детального изучения этих тем, а также многих других, не рассмотренных в данном документе, обратитесь к extref:{handbook}[Руководству FreeBSD].
