---
authors:
  - 
    author: 'John Ferrell'
copyright: '2008 The FreeBSD Documentation Project'
description: 'Este documento destina-se a familiarizar rapidamente os usuários intermediários a avançados do Linux® com os conceitos básicos do FreeBSD.'
tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
title: 'Guia de Início Rápido do FreeBSD para Usuários do Linux®'
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---

= Guia de Início Rápido do FreeBSD para Usuários do Linux(R)
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
: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]
Resumo

Este documento tem como objetivo familiarizar rapidamente os usuários intermediários a avançados do Linux(R) com os conceitos básicos do FreeBSD.

'''

toc::[]

[[intro]]
== Introdução

Este documento destaca algumas das diferenças técnicas entre o FreeBSD e o Linux(R) para que os usuários intermediários a avançados do Linux® possam se familiarizar rapidamente com os conceitos básicos do FreeBSD.

Este documento pressupõe que o FreeBSD já está instalado. Consulte o capítulo extref:{handbook}[Instalando o FreeBSD, bsdinstall] no Handbook para obter ajuda com o processo de instalação.

[[shells]]
== Shell Padrão

Usuários de Linux(R) muitas vezes se surpreendem ao descobrir que o Bash não é a shell padrão no FreeBSD. Na verdade, o Bash não está incluído na instalação padrão. Em vez disso, a shell compatível com o shell Bourne, man:sh[1], é a shell padrão dos usuários. Por padrão a shell do usuário root é a man:tcsh[1] no FreeBSD 13 e nas versões anteriores, já no FreeBSD 14 e versões posteriores é a man:sh[1]. A man:sh[1] é muito semelhante ao Bash, mas com um conjunto de recursos muito menor. Geralmente, os scripts de shell escritos para aman:sh[1] serão executados no Bash, mas o contrário nem sempre é verdadeiro.

No entanto, o Bash e outros shells estão disponíveis para instalação usando a extref:{handbook}[Coleção de Pacotes e Ports do FreeBSD, ports].

Após instalar outro shell, use o man:chsh[1] para mudar o shell padrão do usuário. É recomendado que o shell padrão do usuário `root` permaneça inalterado, já que shells que não estão incluídas na distribuição base são instalados em [.filename]#/usr/local/bin#. Em caso de problema, o sistema de arquivos onde o [.filename]#/usr/local/bin# está localizado pode não estar montado. Nesse caso, o usuário `root` não teria acesso ao seu shell padrão, o que impediria o `root` de fazer login e corrigir o problema.

[[software]]
== Pacotes e Ports: Adicionando Softwares no FreeBSD

O FreeBSD oferece dois métodos para instalar aplicativos: pacotes binários e ports compilados. Cada método tem seus próprios benefícios:

.Pacotes Binários
* Instalação mais rápida em comparação à compilação de aplicativos grandes.
* Não requer compreensão de como compilar o software.
* Não é necessário instalar um compilador.

.Árvore de Ports
* Capacidade de personalizar as opções de instalação.
* Possibilidade de aplicar patches personalizados.

Se a instalação de um aplicativo não requer personalização, a instalação do pacote é suficiente. Compile o port sempre que um aplicativo exigir personalização das opções padrão. Se necessário, um pacote personalizado pode ser compilado a partir do ports usando o comando `make package`.

Uma lista completa de todos os ports e pacotes disponíveis pode ser encontrada https://www.freebsd.org/ports/[aqui].

[[packages]]
=== Pacotes

Pacotes são aplicativos pré-compilados, os equivalentes no FreeBSD dos arquivos [.filename]#.deb# em sistemas baseados em Debian/Ubuntu e [.filename]#.rpm# em sistemas baseados em Red Hat/Fedora. Os pacotes são instalados usando o comando `pkg`. Por exemplo, o seguinte comando instala o Apache 2.4:

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

Para mais informações sobre pacotes, consulte a seção 5.4 do Handbook do FreeBSD: extref:{handbook}[Usando o pkgng para Gerenciamento de Pacotes Binários, pkgng-intro].

[[ports]]
=== Árvore de Ports

A Coleção de Ports do FreeBSD é um conjunto de [.filename]#Makefiles# e patches específicos para instalar aplicativos a partir do código-fonte no FreeBSD. Ao instalar um port, o sistema buscará o código-fonte, aplicará os patches necessários, compilando o código e instalando o aplicativo e quaisquer dependências necessárias.

A Coleção de Ports, às vezes referida como árvore de ports, pode ser instalada em [.filename]#/usr/ports# usando o link:{handbook}mirrors/#git[Git]. Instruções detalhadas para a instalação da Coleção de Ports podem ser encontradas na extref:{handbook}[seção 4.5.1, ports-using-installation-methods] do Handbook do FreeBSD.

Para compilar um port, mude para o diretório do port e inicie o processo de compilação. O seguinte exemplo instala o Apache 2.4 a partir da Coleção de Ports:

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

Um benefício de usar o ports para instalar software é a capacidade de personalizar as opções de instalação. Este exemplo especifica que o módulo mod_ldap também deve ser instalado:

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

Para mais informações, consulte extref:{handbook}[Usando a Coleção de Ports, ports-using] no Handbook do FreeBSD.

[[startup]]
== Inicialização do Sistema

Muitas distribuições Linux(R) usam o sistema SysV init, enquanto o FreeBSD usa o tradicional estilo BSD de man:init[8]. Sob o estilo BSD de man:init[8], não há run-levels e o arquivo [.filename]#/etc/inittab# não existe. Em vez disso, a inicialização é controlada pelos scripts man:rc[8]. No boot do sistema, o arquivo [.filename]#/etc/rc# lê os arquivos [.filename]#/etc/rc.conf# e [.filename]#/etc/defaults/rc.conf# para determinar quais serviços devem ser iniciados. Os serviços especificados são então iniciados executando os scripts de inicialização de serviço correspondentes localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. Esses scripts são semelhantes aos scripts localizados em [.filename]#/etc/init.d/# nos sistemas Linux(R).

Os scripts encontrados em [.filename]#/etc/rc.d/# são relacionados aos aplicativos que fazem parte do sistema "base", como man:cron[8], man:sshd[8] e man:syslog[3]. Os scripts em [.filename]#/usr/local/etc/rc.d/# são relacionados aos aplicativos instalados pelo usuário, como o Apache e o Squid.

Como o FreeBSD é desenvolvido como um sistema operacional completo, os aplicativos instalados pelo usuário não são considerados parte do sistema "base". Os aplicativos instalados pelo usuário geralmente são instalados usando extref:{handbook}[Pacotes ou Ports, ports-using]. Para mantê-los separados do sistema base, os aplicativos instalados pelo usuário são instalados em [.filename]#/usr/local/#. Portanto, os binários instalados pelo usuário residem em [.filename]#/usr/local/bin/#, os arquivos de configuração estão em [.filename]#/usr/local/etc/# e assim por diante.

Os serviços são ativados adicionando uma entrada para o serviço em [.filename]#/etc/rc.conf#. As configurações padrão do sistema são encontradas no [.filename]#/etc/defaults/rc.conf# e essas configurações padrão são substituídas por configurações definidas no [.filename]#/etc/rc.conf#. Consulte man:rc.conf[5] para obter mais informações sobre as entradas disponíveis. Ao instalar aplicativos adicionais, revise a mensagem de instalação do aplicativo para determinar como ativar quaisquer serviços associados.

As seguintes entradas em [.filename]#/etc/rc.conf# habilitam o man:sshd[8], habilitam o Apache 2.4 e especificam que o Apache deve ser iniciado com SSL.

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

Depois que um serviço foi habilitado no [.filename]#/etc/rc.conf#, ele pode ser iniciado sem reiniciar o sistema:

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

Se um serviço não tiver sido habilitado, ele pode ser iniciado a partir da linha de comando usando o comando `onestart`:

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

[[network]]
== Configuração de Rede

Em vez de um identificador genérico _ethX_ que o Linux(R) usa para identificar uma interface de rede, o FreeBSD usa o nome do driver seguido por um número. A saída a seguir do man:ifconfig[8] mostra duas interfaces de rede Intel(R) Pro 1000 ([.filename]#em0# e [.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
....

Um endereço IP pode ser atribuído a uma interface usando o comando man:ifconfig[8]. Para que a configuração de IP permaneça persistente através das reinicializações, ela deve ser incluída no [.filename]#/etc/rc.conf#. As seguintes entradas no [.filename]#/etc/rc.conf# especificam o nome do host, o endereço IP e o gateway padrão:

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

Use as seguintes entradas para configurar uma interface para utilizar DHCP:

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

[[firewall]]
== Firewall

O FreeBSD não usa o IPTABLES do Linux(R) para o seu firewall. Em vez disso, o FreeBSD oferece uma escolha de três firewalls em nível de kernel:

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

O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi criado como um substituto para o IPFILTER e sua sintaxe é semelhante à do IPFILTER. O PF pode ser combinado com o man:altq[4] para fornecer recursos de QoS.

Este exemplo de regra do PF permite as conexões de entrada do SSH:

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

O IPFILTER é o aplicativo de firewall desenvolvido por Darren Reed. Não é específico do FreeBSD e foi portado para vários sistemas operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX e Solaris.

A sintaxe do IPFILTER para permitir o recebimento de conexões no SSH é a seguinte:

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

O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser combinado com o man:dummynet[4] para fornecer recursos de controle de tráfego e simular diferentes tipos de conexões de rede.

A sintaxe do IPFW para permitir a entrada de conexões SSH é a seguinte:

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

[[updates]]
== Atualizando o FreeBSD

Existem dois métodos para atualizar um sistema FreeBSD: a partir do código-fonte ou a partir de atualizações binárias.

Atualizar a partir do código-fonte é o método de atualização mais complexo, mas oferece a maior flexibilidade. O processo envolve sincronizar uma cópia local do código-fonte do FreeBSD com o repositório Git do FreeBSD. Assim que o código-fonte local estiver atualizado, uma nova versão do kernel e do userland pode ser compilada.

As atualizações binárias são semelhantes ao uso do `yum` ou do `apt-get` para atualizar um sistema Linux(R). No FreeBSD, o man:freebsd-update[8] pode ser usado para buscar novas atualizações binárias e instalá-las. Essas atualizações podem ser agendadas usando o man:cron[8].

[NOTE]
====
Ao usar o man:cron[8] para agendar atualizações, use o `freebsd-update cron` no man:crontab[1] para reduzir a possibilidade de que um grande número de máquinas busque atualizações ao mesmo tempo:

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

====

Para obter mais informações sobre as atualizações a partir do código-fonte e a partir de binários, consulte o extref:{handbook}[capítulo sobre atualizações, updating-upgrading-freebsdupdate] do Handbook do FreeBSD.

[[procfs]]
== procfs: desaparecido, mas não esquecido

Em algumas distribuições Linux(R), é possível verificar se o encaminhamento de IP está habilitado verificando o arquivo [.filename]#/proc/sys/net/ipv4/ip_forward#. No FreeBSD, o comando man:sysctl[8] é utilizado para visualizar essa e outras configurações do sistema.

Por exemplo, use o seguinte comando para verificar se o encaminhamento de IP está habilitado em um sistema FreeBSD:

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

Use a opção `-a` para listar todas as configurações do sistema:

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

Se um aplicativo requer o uso do procfs, adicione a seguinte entrada ao arquivo [.filename]#/etc/fstab#:

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

Incluir o parâmetro `noauto` faz com que o diretório [.filename]#/proc# não seja montado automaticamente durante a inicialização do sistema.

Para montar o sistema de arquivos sem reiniciar o sistema:

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

[[commands]]
== Comandos Comuns

Alguns comandos comuns e equivalentes são os seguintes:

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Comando Linux(R) (Red Hat/Debian)
| Equivalente FreeBSD
| Propósito

|`yum install _package_` / `apt-get install _package_`
|`pkg install _package_`
|Instala um pacote a partir de um repositório remoto

|`rpm -ivh _package_` / `dpkg -i _package_`
|`pkg add _package_`
|Instala um pacote local

|`rpm -qa` / `dpkg -l`
|`pkg info`
|Lista os pacotes instalados

|`lspci`
|`pciconf`
|Lista os dispositivos PCI

|`lsmod`
|`kldstat`
|Lista os módulos do kernel carregados

|`modprobe`
|`kldload` / `kldunload`
|Carrega / Descarrega módulos do kernel

|`strace`
|`truss`
|Rastrea as chamadas de sistema
|===

[[conclusion]]
== Conclusão

Este documento forneceu uma visão geral do FreeBSD. Consulte o extref:{handbook}[Handbook do FreeBSD] para obter uma cobertura mais detalhada desses tópicos, bem como de muitos outros tópicos não abordados por este documento.
