---
authors:
  - 
    author: 'John Ferrell'
copyright: '2008 The FreeBSD Documentation Project'
description: 'Este documento está pensado para que usuarios intermedios o avanzados de Linux(R) se familiaricen rápido con el funcionamiento básico de FreeBSD.'
tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
title: 'Guía Rápida de FreeBSD para Usuarios de Linux(R)'
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---

= Guía Rápida de FreeBSD para Usuarios de 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]
Resumen

Este documento está pensado para que usuarios intermedios y avanzados de Linux(R) se familiaricen rápidamente con el funcionamiento de FreeBSD.

'''

toc::[]

[[intro]]
== Introducción

Este documento resalta algunas de las diferencias técnicas entre FreeBSD y Linux(R) de forma que los usuarios intermedios y avanzados de Linux(R) se puedan familiarizar con el funcionamiento básico de FreeBSD.

Este documento asume que FreeBSD ya está instalado. Consulta el capítulo extref:{handbook}[Instalar FreeBSD, bsdinstall] del FreeBSD Handbook para obtener ayuda con el proceso de instalación.

[[shells]]
== Shell por Defecto

Los usuarios de Linux(R) normalmente se sorprenden al ver que Bash no es el shell por defecto en FreeBSD. De hecho, Bash no se incluye en la instalación por defecto. En su lugar, se usa por defecto el shell compatible con Bourne man:sh[1] para los usuarios. El shell por defecto para root es man:tcsh[1] en FreeBSD 13 y anteriores y man:sh[1] en FreeBSD 14 y posteriores man:sh[1] es muy similar a Bash pero con muchas menos funcionalidades. Normalmente los shell scripts escritos para man:sh[1] se podrán ejecutar en Bash, pero a la inversa no es siempre cierto.

Sin embargo, Bash y otros shells están disponibles para su instalación utilizando los extref:{handbook}[Paquetes y la Colección de Ports, ports] de FreeBSD.

Después de instalar otro shell, utiliza man:chsh[1] para cambiar el shell por defecto del usuario. Se recomienda que no se cambie el shell por defecto del usuario root ya que los shells que no se incluyen en la distribución base se instalan en [.filename]#/usr/local/bin#. En caso de que haya un problema, el sistema de ficheros donde se encuentra [.filename]#/usr/local/bin# podría no ser montado. En ese caso, `root` podría no tener acceso a su shell por defecto, evitando que pueda iniciar sesión y arreglar el problema.

[[software]]
== Paquetes y Ports: Instalar Software en FreeBSD

FreeBSD proporciona dos métodos para instalar aplicaciones: paquetes binarios y ports compilados. Cada método tiene sus propias ventajas:

.Paquetes Binarios
* Instalación más rápida comparado con la compilación de aplicaciones de gran tamaño.
* No es necesario saber cómo compilar software.
* No es necesario instalar un compilador.

.Ports
* Posibilidad de personalizar las opciones de instalación.
* Se pueden aplicar parches personalizados.

Si la instalación de una aplicación no necesita ninguna personalización, instalar el paquete es suficiente. En cambio, compila el port cuando una aplicación requiera personalización de las opciones por defecto. Si es necesario, se puede compilar un paquete personalizado a partir de ports utilizando `make package`.

https://www.freebsd.org/ports/[Aquí] se puede encontrar una lista completa de todos los ports y paquetes disponibles.

[[packages]]
=== Paquetes

Los paquetes son aplicaciones precompiladas, los equivalentes en FreeBSD de los ficheros [.filename]#.deb# de sistemas basados en Debian/Ubuntu y los ficheros [.filename]#.rpm# files en los sistemas basados en Red Hat/Fedora. Los paquetes se instalan utilizando `pkg`. Por ejemplo, el siguiente comando instala Apache 2.4:

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

Para más información acerca de paquetes consulta la sección 5.4 del FreeBSD Handbook: extref:{handbook}[Usar pkgng para la Gestión de Paquetes Binarios, pkgng-intro].

[[ports]]
=== Ports

La Colección de Ports de FreeBSD es un framework de [.filename]#Makefiles# y parches específicamente personalizados para instalar aplicaciones con su código fuente en FreeBSD. Al instalar un port, el sistema buscará el código fuente, aplicará los parches necesarios, compilará el código e instalará la aplicación y las dependencias necesarias.

La Colección de Ports, a veces llamada árbol de ports (ports tree), se puede instalar en [.filename]#/usr/ports# utilizando link:{handbook}mirrors/#git[Git]. Se pueden encontrar instrucciones detalladas para instalar la Colección de Ports en la extref:{handbook}[sección 4.5.1, ports-using-installation-methods] del FreeBSD Handbook.

Para compilar un port, cambia al directorio del port e inicia el proceso de construcción. El siguiente ejemplo instala Apache 2.4 desde la Colección de Ports:

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

Un beneficio de usar ports para instalar software es la posibilidad de personalizar las opciones de instalación. Este ejemplo especifica que el módulo mod_ldap debería instalarse también:

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

Consulta extref:{handbook}[Usar la Colección de Ports, ports-using] para más información.

[[startup]]
== Inicio del Sistema

Muchas distribuciones Linux(R) utilizan el sistema de arranque de SysV, mientras que FreeBSD utiliza el man:init[8] tradicional de BSD. Bajo el man:init[8] tradicional de BSD, no hay niveles de ejecución (run-levels) y no existe [.filename]#/etc/inittab#. En su lugar, el arranque se controla con scripts man:rc[8]. Cuando el sistema arranca, [.filename]#/etc/rc# lee [.filename]#/etc/rc.conf# y [.filename]#/etc/defaults/rc.conf# para determinar qué servicios se tienen que arrancar. Los servicios especificados se arrancan ejecutando el script de inicialización correspondiente situado en [.filename]#/etc/rc.d/# y [.filename]#/usr/local/etc/rc.d/#. Estos scripts son parecidos a los que se encuentran en [.filename]#/etc/init.d/# en los sistemas Linux(R).

Los scripts que se encuentran en [.filename]#/etc/rc.d/# son para aplicaciones que forman parte del sistema "base", como man:cron[8], man:sshd[8], y man:syslog[3]. Los scripts en [.filename]#/usr/local/etc/rc.d/# son para aplicaciones instaladas por el usuario como Apache y Squid.

Puesto que FreeBSD se desarrolla como un sistema operativo completo, las aplicaciones instaladas por el usuario no se consideran parte del sistema "base". Las aplicaciones instaladas por el usuario normalmente se instalan mediante extref:{handbook}[Paquetes o Ports, ports-using]. Para mantenerlos separados del sistema base, estas aplicaciones se instalan en [.filename]#/usr/local/#. Por lo tanto, los binarios instalados por el usuario se encuentran en [.filename]#/usr/local/bin/#, los ficheros de configuración en [.filename]#/usr/local/etc/#, y así sucesivamente.

Los servicios se habilitan añadiendo una entrada para el servicio en [.filename]#/etc/rc.conf#. Los predeterminados del sistema se encuentran en [.filename]#/etc/defaults/rc.conf# a los que se anteponen los servicios en [.filename]#/etc/rc.conf#. Consulta man:rc.conf[5] para más información acerca de las entradas disponibles. Cuando instales aplicaciones adicionales, revisa los mensajes de instalación de la aplicación para determinar cómo activar cualquier servicio que tenga asociado.

Las siguientes entradas en [.filename]#/etc/rc.conf# activan man:sshd[8], activan Apache 2.4, y especifican que Apache debería arrancar con SSL.

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

Una vez que un servicio ha sido activado en [.filename]#/etc/rc.conf#, puede iniciarse sin reiniciar el sistema:

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

Si un servicio no se ha habilitado, se puede arrancar desde la línea de comando utilizando `onestart`:

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

[[network]]
== Configuración de la Red

En lugar de un identificador genérico _ethX_ que Linux(R) utiliza para identificar un interfaz de red, FreeBSD utiliza el nombre del controlador seguido de un número. Lo siguiente salida del comando man:ifconfig[8] muestra dos interfaces de red Intel(R) Pro 1000 ([.filename]#em0# y [.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
....

Se puede asignar una dirección IP a un interfaz utilizando man:ifconfig[8]. Para que permanezca de forma persistente entre arranques, la configuración IP se debe incluir en [.filename]#/etc/rc.conf#. Las siguientes entradas en [.filename]#/etc/rc.conf# especifican el nombre del host, dirección IP, y la pasarela por defecto:

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

Utiliza las siguientes entradas si en su lugar quieres configurar un interfaz con DHCP:

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

[[firewall]]
== Firewall

FreeBSD no utiliza como firewall el IPTABLES de Linux(R). En su lugar, FreeBSD ofrece tres posibles firewalls a nivel de kernel:

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

PF es desarrollado por el proyecto OpenBSD y ha sido portado a FreeBSD. PF se creó como reemplazo de IPFILTER y su sintaxis es muy similar a la que tenía este último. PF se puede usar junto con man:altq[4] para proporcionar características QoS.

Este ejemplo de entrada de PF permite conexiones entrantes SSH:

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

IPFILTER es el firewall desarrollado por Darren Reed. No es específico de FreeBSD y se ha portado a varios sistemas operativos, incluidos NetBSD, OpenBSD, SunOS, HP/UX y Solaris.

La sintaxis de IPFILTER utilizada para permitir conexiones entrantes de SSH es:

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

IPFW es el firewall desarrollado y mantenido por FreeBSD. Se puede utilizar junto con man:dummynet[4] para proporcionar capacidades de perfilado de tráfico y simular distintos tipos de conexiones de red.

La sintaxis de IPFW para permitir conexiones entrantes de SSH sería:

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

[[updates]]
== Actualizando FreeBSD

Hay dos métodos para actualizar un sistema FreeBSD: a partir del código fuente o mediante la actualización de los binarios.

Actualizar desde código fuente es el método más complejo pero el que ofrece mayor flexibilidad. El proceso implica la sincronización de una copia local del código fuente de FreeBSD con los repositorios Git de FreeBSD. Una vez actualizado el código fuente, se pueden compilar nuevas versiones de las utilidades y el kernel.

Las actualizaciones binarias son similares a utilizar `yum` o `apt-get` para actualizar un sistema Linux(R). En FreeBSD, se puede utilizar man:freebsd-update[8] para obtener e instalar actualizaciones binarias. Estas actualizaciones se pueden programar utilizando man:cron[8].

[NOTE]
====
Cuando se use man:cron[8] para planificar actualizaciones, utiliza `freebsd-update cron` en man:crontab[1] para reducir la posibilidad de un gran número de máquinas obteniendo las actualizaciones todas al mismo tiempo:

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

====

Para más información sobre las actualizaciones binarias, consulta extref:{handbook}[el capítulo sobre actualizaciones, updating-upgrading-freebsdupdate] en el FreeBSD Handbook.

[[procfs]]
== procfs: Desaparecido Pero No Olvidado

En algunas distribuciones Linux(R), uno puede mirar en [.filename]#/proc/sys/net/ipv4/ip_forward# para determinar si IP forwarding está activado. En FreeBSD, se usa man:sysctl[8] para ver esta y otras configuraciones del sistema.

Por ejemplo, utiliza lo siguiente para determinar si IP forwarding está activado en un sistema FreeBSD:

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

Usa `-a` para listar toda la configuración del sistema:

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

Si una aplicación necesita procfs, añade la siguiente línea a [.filename]#/etc/fstab#:

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

Incluir `noauto` impedirá que [.filename]#/proc# se monte de forma automática al arrancar.

Para montar el sistema de archivos sin reiniciar:

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

[[commands]]
== Comandos Comunes

Algunos equivalentes de los comandos comunes son los siguientes:

[.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_`
|Instalar un paquete de un repositorio remoto

|`rpm -ivh _package_` / `dpkg -i _package_`
|`pkg add _package_`
|Instalar un paquete local

|`rpm -qa` / `dpkg -l`
|`pkg info`
|Listar paquetes instalados

|`lspci`
|`pciconf`
|Listar dispositivos PCI

|`lsmod`
|`kldstat`
|Listar módulos del kernel cargados

|`modprobe`
|`kldload` / `kldunload`
|Cargar/Descargar módulos del kernel

|`strace`
|`truss`
|Trazar llamadas al sistema
|===

[[conclusion]]
== Conclusión

Este documento ha proporcionado un resumen de FreeBSD. Consulta el extref:{handbook}[FreeBSD Handbook] para una cobertura más en profundidad sobre estos temas así como de muchos de los temas no cubiertos en este documento.
