--- 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: :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] 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 mtu 1500 options=b inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255 ether 00:50:56:a7:70:b2 media: Ethernet autoselect (1000baseTX ) status: active em1: flags=8843 mtu 1500 options=b inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255 ether 00:50:56:a7:03:2b media: Ethernet autoselect (1000baseTX ) 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.