Update to last spanish version.

This commit is contained in:
Jesus Rodriguez Cuesta 2002-10-14 19:43:08 +00:00
parent edf555d8d9
commit eedaf90959
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=14637
9 changed files with 15801 additions and 2787 deletions

View file

@ -4,153 +4,581 @@
$FreeBSD$
-->
<chapter id="basics">
<title>Unix b&aacute;sico</title>
<title>Conceptos B&aacute;sicos de Unix</title>
<sect1>
<title>Sin&oacute;psis</title>
<sect1 id="basics-man">
<title>El manual en l&iacute;nea</title>
<para>La documentaci&oacute;n m&aacute;s completa en FreeBSD est&aacute;a
en forma de <emphasis>p&aacute;ginas man</emphasis>. Pr&aacute;cticamente
todos los programas del sistema incluyen un peque&ntilde;o manual de
referencia explicando las operaciones b&aacute;sicas y los diferentes
argumentos del programa. Estos manuales pueden verse con el comando
<command>man</command>. El uso del comando <command>man</command> es
simple:</para>
<para><emphasis>Reescrito por Chris Shumway
<email>cshumway@osd.bsdi.com</email>, 10 Mar 2000.</emphasis></para>
<informalexample>
<screen>&prompt.user; <userinput>man <replaceable>command</replaceable></userinput>
</screen>
</informalexample>
<para>El siguiente cap&iacute;tulo cubre la funcionalidad y
&oacute;rdenes b&aacute;sicas del sistema operativo FreeBSD. Si se es
nuevo en FreeBSD, seguramente querr&aacute; leer este cap&iacute;tulo
antes de buscar ayuda.</para>
<para><replaceable>command</replaceable> es el nombre del comando del que
queremos aprender. Por ejemplo, para saber m&aacute;s sobre el comando
<command>ls</command> teclea:</para>
<informalexample>
<screen>&prompt.user; <userinput>man ls</userinput></screen>
</informalexample>
<para>El manual en l&iacute;nea est&aacute; dividido en secciones
numeradas:</para>
<orderedlist>
<listitem>
<para>Comandos de usuario</para>
</listitem>
<listitem>
<para>Llamadas de sistema y n&uacute;meros de error</para>
</listitem>
<listitem>
<para>Funciones en las librer&iacute;as de C</para>
</listitem>
<listitem>
<para>Drivers de dispositivos</para>
</listitem>
<listitem>
<para>Formatos de fichero</para>
</listitem>
<listitem>
<para>Juegos y otras diversiones</para>
</listitem>
<listitem>
<para>Informaci&oacute;n varia</para>
</listitem>
<listitem>
<para>Mantenimiento del sistema y comandos de sistema</para>
</listitem>
</orderedlist>
<para>En algunos casos, el mismo concepto aparece en m&aacute;s de una
secci&oacute;n del manual en l&iacute;nea. Por ejemplo, hay un comando
de usuario <command>chmod</command> y una llamada de sistema
<function>chmod()</function>. En este caso, puedes espicificar al comando
<command>man</command> cual de ellos quieres ver, especificando la
secci&oacute;n:</para>
<informalexample>
<screen>&prompt.user; <userinput>man 1 chmod</userinput></screen>
</informalexample>
<para>Esto mostrar&aacute; la informaci&oacute;n del comando de usuario
<command>chmod</command>. Las referencias a secciones particulares del
manual en l&iacute;nea tradicionalmente se incluyen entre par&eacute;ntesis
en la documentaci&oacute;n escrita, de manera que <citerefentry>
<refentrytitle>chmod</refentrytitle><manvolnum>1</manvolnum></citerefentry>
se refiere al comando de usuario <command>chmod</command> y <citerefentry>
<refentrytitle>chmod</refentrytitle><manvolnum>2</manvolnum>
</citerefentry> se refiere a la llamada de sistema.</para>
<para>Esto es correcto si sabes el nombre del comando y simplemente
quieres saber como usarlo, pero &iquest;qu&eacute; pasa si no recuerdas
el nombre del comando?. Puedes usar <command>man</command> para buscar
palabras en las <emphasis>descripciones</emphasis> de los comandos usando
el par&aacute;metro <option>-k</option>:</para>
<informalexample>
<screen>&prompt.user; <userinput>man -k mail</userinput></screen>
</informalexample>
<para>Con este comando obtendr&aacute;s una lista de todos los comandos
que contienen en su descripci&oacute;n la palabra &ldquo;mail&rdquo;.
Actualmente, este comando realiza la misma funci&oacute;n que el comando
<command>apropos</command>.</para>
<para>&iquest;Quieres saber que hacen todos los comandos existentes en
<filename>/usr/bin</filename>?. Simplemente haz:
<informalexample>
<screen>&prompt.user; <userinput>cd /usr/bin; man -f *</userinput></screen>
</informalexample>
o
<informalexample>
<screen>&prompt.user; <userinput>cd /usr/bin; whatis *</userinput></screen>
</informalexample>ya que realizan la misma funci&oacute;n .</para>
</sect1>
<sect1 id="basics-info">
<title>Fichero GNU Info</title>
<sect1 id="permissions">
<title>Permisos</title>
<para>FreeBSD incluye muchas aplicaciones y utilidades producidas por la
Free Software Foundation (FSF). Como complemento a las p&aacute;ginas man,
estos programas incluyen unos documentos hipertexto m&aacute;s extensos
llamados ficheros &ldquo;info&rdquo; los cuales pueden visualizarse con el
comando <command>info</command>, o, si tienes instalado
<command>emacs</command>, con el modo info de <command>emacs</command>.
</para>
<para>FreeBSD, cuya raiz hist&oacute;rica es el UNIX BSD, tiene
sus fundamentos basados en varios conceptos clave de UNIX. El primero, y
m&aacute;s remarcado, es que FreeBSD es un sistema operativo
multi-usuario. El sistema puede manejar varios usuarios trabajando
todos simult&aacute;neamente y en tareas que no guardan relaci&oacute;n
entre sí. El sistema es el responsable de compartir y administrar
peticiones de dispositivos de hardware, perif&eacute;ricos, memoria y
tiempo de Unidad Central de Proceso (CPU) de manera equitativa para cada
usuario.</para>
<para>Para usar el comando <citerefentry><refentrytitle>info</refentrytitle><manvolnum>1</manvolnum></citerefentry>, simplemente teclea:</para>
<informalexample>
<screen>&prompt.user; <userinput>info</userinput></screen>
</informalexample>
<para>Debido a que el sistema es capaz de soportar m&uacute;ltiples
usuarios, todo lo que el sistema administra tiene un conjunto de
permisos que gobiernan qui&eacute;n puede leer, escribir y ejecutar el
elemento. Estos permisos se guardan como octetos divididos en tres
partes: una para el propietario del archivo, otra para el grupo al que
el archivo pertenece, y otra para cualquier otro. Esta
representaci&oacute;n num&eacute;rica funciona as&iacute;:</para>
<para>Para una breve descripci&oacute;n, teclea <userinput>h</userinput>.
Para una referencia r&aacute;pida de comandos, teclea
<userinput>?</userinput>.</para>
<informaltable frame="none">
<tgroup cols="3">
<thead>
<row>
<entry>Valor</entry>
<entry>Permiso</entry>
<entry>Listado de Directorio</entry>
</row>
</thead>
<tbody>
<row>
<entry>0</entry>
<entry>No leer, no escribir, no ejecutar</entry>
<entry><literal>---</literal></entry>
</row>
<row>
<entry>1</entry>
<entry>No leer, no escribir, ejecutar</entry>
<entry><literal>--x</literal></entry>
</row>
<row>
<entry>2</entry>
<entry>No leer, escribir, no ejecutar</entry>
<entry><literal>-w-</literal></entry>
</row>
<row>
<entry>3</entry>
<entry>No leer, escribir, ejecutar</entry>
<entry><literal>-wx</literal></entry>
</row>
<row>
<entry>4</entry>
<entry>Leer, no escribir, no ejecutar</entry>
<entry><literal>r--</literal></entry>
</row>
<row>
<entry>5</entry>
<entry>Leer, no escribir, ejecutar</entry>
<entry><literal>r-x</literal></entry>
</row>
<row>
<entry>6</entry>
<entry>Leer, escribir, no ejecutar</entry>
<entry><literal>rw-</literal></entry>
</row>
<row>
<entry>7</entry>
<entry>Leer, escribir, ejecutar</entry>
<entry><literal>rwx</literal></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Si se muestra un listado expandido de directorio mediante
<command>ls -l</command>, se mostrar&aacute;n en una columna los
permisos de fichero para el propietario, grupo y todos los dem&aacute;s.
Veamos como se descompone:</para>
<screen>-rw-r--r--</screen>
<para>El primer car&aacute;cter, de izquierda a derecha, es un
car&aacute;cter especial que indica si se trata de un archivo normal, un
directorio, un dispositivo especial de tipo car&aacute;cter o bloque, un
socket, o cualquier otro dispositivo de pseudo-archivo. Los siguientes
tres caracteres, expresados como <literal>rw-</literal> muestran los
permisos para el propietario del archivo. Los siguientes tres
caracteres, <literal>r--</literal> muestran los permisos para el grupo
al que el archivo pertenece. Los &uacute;ltimos tres caracteres,
<literal>r--</literal>, muestran los permisos para el resto del mundo.
Un gui&oacute;n indica que el permiso est&aacute; desactivado. En el
caso de este archivo, los permisos est&aacute;n asignados de tal manera
que el propietario puede leer y escribir en el archivo, el grupo puede
leer el archivo, y el resto del mundo s&oacute;lo puede leer el archivo.
De acuerdo con la tabla que se muestra m&aacute;s arriba, los permisos
para este archivo ser&iacute;an <literal>644</literal>, donde cada cifra
representa las tres partes de los permisos del archivo.</para>
<para>Todo &eacute;sto est&aacute; muy bien, pero &iquest;c&oacute;mo
controla el sistema los permisos de los dispositivos? FreeBSD en
realidad trata la mayor&iacute;a de los dispositivos hardware como un
archivo que los programas pueden abrir, leer y en los que pueden
escribir datos como si de cualquier otro archivo se tratara. Estos
archivos especiales de dispositivos se encuentran en el directorio
<filename>/dev</filename>.</para>
<para>Los directorios tambi&eacute;n son tratados como archivos. Tienen
permisos de lectura, escritura y ejecuci&oacute;n. El bit de
ejecuci&oacute;n en un directorio tiene un significado
lig&eacute;ramente distinto que para los archivos. Cuando un directorio
est&aacute; marcado como ejecutable significa que se puede mirar dentro,
por ejemplo, se podr&iacute;a hacer un listado de ese directorio.</para>
<para>Hay m&aacute;s permisos, pero se usan principalmente en
circunstancias especiales como los binarios ejecutables de tipo "setuid"
y los los directorios de tipo "sticky". Si desea m&aacute;s
informaci&oacute;n acerca de los permisos de archivos y c&oacute;mo
establecerlos, aseg&uacute;rese de mirar la p&aacute;gina de manual de
&man.chmod.1;.</para>
</sect1>
<sect1 id="dirstructure">
<title>Estructura de directorios</title>
<para>Como FreeBSD utiliza sus sistemas de archivos (file systems) para
determinar muchas operaciones fundamentales en el sistema, la
jerarqu&iacute;a del sistema de archivos es extremadamente importante.
Dado que la p&aacute;gina de manual de &man.hier.7; proporciona una
descripci&oacute;n completa de la estructura de directorios, no la vamos
a repetir aqu&iacute;. Para m&aacute;s informaci&oacute;n, puede
consultar &man.hier.7;.</para>
<para>De una especial importancia es el raiz (root) de todos los
directorios, el directorio /. Este directorio es el primero en ser
montado al arrancar y contiene contiene el sistema b&aacute;sico
necesario a la hora de iniciar. El directorio raiz tambi&eacute;n
contiene puntos de montaje para cualquier otro sistema de archivos que
se desee montar.</para>
<para> Un punto de montaje es un directorio donde se pueden injertar al
sistema de archivos raiz otros sistemas de ficheros adicionales. Los
puntos de montaje convencionales incluyen <filename>/usr</filename>,
<filename>/var</filename>, <filename>/mnt</filename> y
<filename>/cdrom</filename>. Estos directorios directorios se
corresponden habitualmente con entradas en en archivo
<filename>/etc/fstab</filename>. <filename>/etc/fstab</filename> es una
tabla que sirve como referencias al sistema y contiene los diferentes
sistemas de archivos y sus respectivos puntos de montaje. La
mayor&iacute;a de los sistemas de archivos que figuran en
<filename>/etc/fstab</filename> son montados autom&aacute;ticamente al
arrancar por el gui&oacute;n de &oacute;rdenes (script) &man.rc.8; a no
ser que contengan la opci&oacute;n <option>noauto</option>.
Cons&uacute;ltese la p&aacute;gina del manual &man.fstab.5; para
m&aacute;s informaci&oacute;n acerca del formato del archivo
<filename>/etc/fstab</filename> y de las opciones que se pueden
especificar.</para>
</sect1>
<sect1 id="shells">
<title>Int&eacute;rpretes de &oacute;rdenes (Shells)</title>
<para>En FreeBSD, gran parte del trabajo diario se realiza a trav&eacute;s
de un interfaz de la linea de &oacute;rdenes llamado "shell". El
principal trabajo del shell es recoger &oacute;rdenes del canal de
entrada y ejecutarlas. Muchos shells tienen tambi&eacute;n integradas
funciones para ayudarnos en las tareas cotidianas tales como la
manipulaci&oacute;n de archivos, edici&oacute;n de l&iacute;neas de
&oacute;rdenes, macros de &oacute;rdenes, expansi&oacute;n de
expresiones regulares en nombres de archivo y variables del sistema.
FreeBSD viene con un conjunto de shells, como sh, el shell Bourne y csh,
el shell C. Hay disponibles muchos otros shells en la "FreeBSD Ports
Collection" que son mucho m&aacute;s potentes, como bash y tcsh.</para>
<para>&iquest;Qu&eacute; shell usar? Es cuesti&oacute;n de gustos. Si se
es programador de C se puede sentir m&aacute;s c&oacute;modo con tcsh,
un shell con una sintaxis similar al C. Si se proviene del mundo Linux o
se es nuevo en el interfaz de &oacute;rdenes de Unix, se puede probar
con bash. El asunto es que cada shell posee unas propiedades
&uacute;nicas que pueden o no funcionar con el entorno de trabajo
preferido y se ha de efectuar una elecci&oacute;n sobre el shell a
usar.</para>
<para>Una de las propiedades comunes de un shell es que completa los
nombres de archivo. Dada la introducci&oacute;n de las primeras letras
de una orden o del nombre de un archivo, se puede hacer que el shell
complete autom&aacute;ticamente el resto de la orden o el nombre del
archivo pulsando la tecla TAB. Aqu&iacute; va un ejemplo. Supongamos
que se tienen dos archivos llamados <filename>foobar</filename> y
<filename>foo.bar</filename>. Se quiere borrar
<filename>foo.bar</filename>. Lo que habr&iacute;a que teclear es:
<command>rm fo[TAB].[TAB]</command>.</para>
<para>El shell nos mostrar&iacute;a <command>rm
foo[BEEP].bar</command>.</para>
<para>El [BEEP] es el pitido de consola (<emphasis>console
bell</emphasis>): es el shell dici&eacute;ndonos que fue incapaz de
completar totalmente el nombre de archivo porque hay m&aacute;s de una
coincidencia. Tanto <filename>foobar</filename> como
<filename>foo.bar</filename> comienzan por <literal>fo</literal>, pero
solo se pudo completar hasta <literal>foo</literal>. Si se teclea
<literal>.</literal>, y de nuevo TAB, el shell ser&aacute; capaz de
introducir el resto del nombre por nosotros.</para>
<para>Otra funci&oacute;n del shell son las variables de entorno. Las
variables de entorno son parejas de valores clave almacenados en el
espacio de entorno del shell. Este espacio puede ser le&iacute;do por
cualquier programa invocado por el shell y, por tanto, en él se
encuentra bastante informaci&oacute;n relativa a la configuraci&oacute;n
de programas. Lo siguiente es una lista de las variables de entorno
m&aacute;s comunes y su significado:</para>
<informaltable frame="none">
<tgroup cols="2">
<thead>
<row>
<entry>Variable</entry>
<entry>Descripci&oacute;n</entry>
</row>
</thead>
<tbody>
<row>
<entry><envar>USER</envar></entry>
<entry>Nombre de usuario con el que se ha entrado al sistema.</entry>
</row>
<row>
<entry><envar>PATH</envar></entry>
<entry>Lista de directorios, separada por puntos y coma, en los que
se busca ejecutables.</entry>
</row>
<row>
<entry><envar>DISPLAY</envar></entry>
<entry>Nombre en la red de la pantalla de X11 a la que conectarse, si
se encuentra disponible.</entry>
</row>
<row>
<entry><envar>SHELL</envar></entry>
<entry>El shell actual.</entry>
</row>
<row>
<entry><envar>TERM</envar></entry>
<entry>El nombre del terminal del usuario. Se usa para determinar
las posibilidades del terminal de datos.</entry>
</row>
<row>
<entry><envar>TERMCAP</envar></entry>
<entry>Base de datos donde encontrar los c&oacute;digos de
escape necesarios para realizar diferentes funciones en el
terminal.</entry>
</row>
<row>
<entry><envar>OSTYPE</envar></entry>
<entry>Tipo de sistema operativo. Por ejemplo, FreeBSD.</entry>
</row>
<row>
<entry><envar>MACHTYPE</envar></entry>
<entry>Arquitectura de la CPU en la que el sistema se
est&aacute; ejecutando.</entry>
</row>
<row>
<entry><envar>EDITOR</envar></entry>
<entry>El editor de texto preferido por el usuario.</entry>
</row>
<row>
<entry><envar>PAGER</envar></entry>
<entry>El paginador de texto preferido por el usuario.</entry>
</row>
<row>
<entry><envar>MANPATH</envar></entry>
<entry>Lista de directorios en los que se busca p&aacute;ginas de
manual, separados por puntos y coma.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Visualizar o establecer una variable de entorno difiere ligeramente
de shell a shell. Por ejemplo, en los shells al estilo C como tcsh y
csh, se usar&iacute;a <command>setenv</command> para establecer y
visualizar las variables de entorno actuales. Siguiendo el ejemplo, para
establecer o modificar el valor de <envar>EDITOR</envar>, bajo csh o
tcsh una orden como la siguiente establecer&iacute;a el valor de
<envar>EDITOR</envar> a <filename>/usr/local/bin/emacs</filename>:</para>
<screen>&prompt.user; <userinput>setenv EDITOR /usr/local/bin/emacs</userinput></screen>
<para>Bajo los shells tipo Bourne (Bourne Shells):</para>
<screen>&prompt.user; <userinput>export EDITOR="/usr/local/bin/emacs"</userinput></screen>
<para>Tambi&eacute;n se puede hacer que la mayor&iacute;a de los shells
muestren el contenido de una variable de entorno situando el
car&aacute;cter <literal>$</literal> delante del nombre de la variable
desde la l&iacute;nea de &oacute;rdenes. Por ejemplo, <command>echo
$TERM</command> mostrar&aacute; cualquiera que sea el valor que se le
haya establecido a <envar>TERM</envar>, porque el shell expande el valor
de <envar>TERM</envar> y se lo pasa al programa echo.</para>
<para>Los shells manejan muchos caracteres especiales, llamados
meta-caracteres, como representaciones especiales de datos. El mas
com&uacute;n es el car&aacute;cter <literal>*</literal>, que representa
cualquier n&uacute;mero de caracteres en un nombre de archivo. Estos
meta-caracteres especiales se pueden usar para la expansi&oacute;n de
nombres de archivos. Por ejemplo, teclear <command>echo *</command> es
casi lo mismo que introducir <command>ls</command> porque el shell
recoge todos los archivos que coinciden con <command>*</command> y se
los pone en la l&iacute;nea de &oacute;rdenes a echo para que los
vea.</para>
<para>Para evitar que el shell interprete estos caracteres especiales, se
pueden salvar poniendo el car&aacute;cter contrabarra
(<literal>\</literal>) delante de ellos. <command>echo $TERM</command>
muestra cualquiera que sea el valor establecido para el terminal que
estamos usando. <command>echo \$TERM</command> muestra
<envar>$TERM</envar> tal cual.</para>
<sect2 id="changing-shells">
<title>Cambiando de shell</title>
<para>La manera m&aacute;s f&aacute;cil de cambiar de shell es usando la
orden <command>chsh</command>. Al ejecutar <command>chsh</command> se
nos situar&aacute; dentro del editor de texto que figure en la variable
de entorno <envar>EDITOR</envar> o, de no estar configurada, se nos
abrir&aacute; <command>vi</command>. C&aacute;mbiese la l&iacute;nea
<quote>Shell:</quote> adecuadamente.</para>
<para>Tambi&eacute;n se le puede suministrar a <command>chsh</command> la
opci&oacute;n <option>-s</option>; &eacute;sto establecer&aacute; el
shell por nosotros sin necesidad de entrar en el editor de texto. Por
ejemplo, si se desea cambiar el shell a bash, lo siguiente
realizar&aacute; el ajuste:</para>
<screen>&prompt.user; <userinput>chsh -s /usr/local/bin/bash</userinput></screen>
<para>Ejecutar <command>chsh</command> sin par&aacute;metros y cambiar el
shell desde all&iacute; tambien funcionar&iacute;a.</para>
<note>
<para>El shell que se desee usar <emphasis>debe</emphasis> figurar en el
archivo <filename>/etc/shells</filename>. Si se ha instalado un shell
desde la <link linkend="ports">colecci&oacute;n de ports</link>,
entonces esto ya se habr&aacute; realizado. Si se ha instalado
manualmente el shell, se debe realizar el cambio pertinente.</para>
<para>Por ejemplo, si se instal&oacute; manualmente
<command>bash</command> y se situ&oacute; en
<filename>/usr/local/bin</filename>, deber&iacute;a hacer:
<screen>&prompt.root; <userinput>echo &quot;/usr/local/bin/bash&quot; &gt;&gt; /etc/shells</userinput></screen>
<para>Y entonces volver a ejecutar <command>chsh</command>.</para>
</note>
</sect2>
</sect1>
<sect1 id="editors">
<title>Editores de texto</title>
<para>Gran parte de la configuraci&oacute;n de FreeBSD se realiza
modificando archivos de texto. A causa de esto, es una buena idea
familiarizarse con un editor de texto. FreeBSD viene con unos cuantos
como parte del sistema base y muchos m&aacute;s se encuentran
disponibles en la colecci&oacute;n de ports.</para>
<para>El editor de textos m&aacute;s f&aacute;cil y r&aacute;pido de
aprender es uno llamado <application>ee</application>, cuyo nombre
proviene del ingl&eacute;s "easy editor" (editor f&aacute;cil). Para
iniciar <application>ee</application> se deber&iacute;a teclear en la
l&iacute;nea de &oacute;rdenes <command>ee filename</command>, donde
<literal>filename</literal> es el nombre del archivo que deseamos
editar. Por ejemplo, para editar <filename>/etc/rc.conf</filename>,
tecl&eacute;ese <command>ee /etc/rc.conf</command>. Una vez dentro de
ee, todas las posibles &oacute;rdenes para manipular las funciones del
editor se presentan en la parte superior de la pantalla. El
car&aacute;cter acento circunflejo <literal>&#94;</literal> representa a
la tecla de control en el teclado, o sea que &#94;e significa pulsar
simult&aacute;neamente la tecla control y la letra <literal>e</literal>.
Para abandonar <application>ee</application>, se debe pulsar la tecla
escape y elegir abandonar (leave) el editor. El editor preguntar&aacute;
entonces si se desean conservar los cambios si el archivo hubiera sido
modificado.</para>
<para>FreeBSD viene tambi&eacute;n con editores de texto mucho m&aacute;s
potentes. Por ejemplo, <application>vi</application> como componente
del sistema b&aacute;sico y <application>emacs</application> o
<application>vim</application> como parte de la colecci&oacute;n de
ports. Estos editores ofrecen mucha m&aacute;s funcionalidad y potencia
a expensas de un aprendizaje un poco m&aacute;s complicado. De cualquier
manera, si se planea editar muchos textos, aprender un editor m&aacute;s
potente como <application>vim</application> o
<application>emacs</application> le ahorrar&aacute; mucho tiempo a largo
plazo.</para>
</sect1>
<sect1>
<title>Para m&aacute;s informaci&oacute;n</title>
<sect2 id="basics-man">
<title>P&aacute;ginas de manual</title>
<para>La documentaci&oacute;n m&aacute;s exhaustiva de FreeBSD se
encuentra en la forma de p&aacute;ginas de manual. Casi todos los
programas del sistema vienen con un sucinto manual de referencia
explicando el funcionamiento b&aacute;sico y los diferentes argumentos.
Estos manuales pueden ser revisados con el programa man. El uso del
programa man es sencillo:</para>
<screen>&prompt.user; <userinput>man <replaceable>command</replaceable></userinput></screen>
<para><literal>command</literal> es el nombre del programa del que se
quiere saber algo. Por ejemplo, para saber algo acerca del programa
<command>ls</command> tecl&eacute;ese:</para>
<screen>&prompt.user; <userinput>man ls</userinput></screen>
<para>El manual en l&iacute;nea est&aacute; dividido en secciones
numeradas:</para>
<orderedlist>
<listitem>
<para>&Oacute;rdenes/programas de usuario.</para>
</listitem>
<listitem>
<para>LLamadas de sistema y c&oacute;digos num&eacute;ricos de
error.</para> </listitem>
<listitem>
<para>Funciones de las librer&iacute;as de C.</para>
</listitem>
<listitem>
<para>Manejadores de Dispositivos.</para>
</listitem>
<listitem>
<para>Formatos de Archivos.</para>
</listitem>
<listitem>
<para>Juegos y otros divertimentos.</para>
</listitem>
<listitem>
<para>Informaci&oacute;n miscel&aacute;nea.</para>
</listitem>
<listitem>
<para>Programas relativos al mantenimiento y operación del
sistema.</para>
</listitem>
<listitem>
<para>Desarrolladores del Kernel.</para>
</listitem>
</orderedlist>
<para>En algunos casos, el mismo ep&iacute;grafe puede aparecer en
m&aacute;s de una secci&oacute;n del manual en l&iacute;nea. Hay, por
ejemplo, un programa de usuario llamado chmod y una llamada de sistema
<literal>chmod()</literal>. En este caso se le puede especificar a man
cu&aacute;l se desea especificando la secci&oacute;n:</para>
<screen>&prompt.user; <userinput>man 1 chmod</userinput></screen>
<para>Esto nos mostrar&aacute; la p&aacute;gina del manual en l&iacute;nea
del programa de usuario <command>chmod</command>. Las referencias a una
secci&oacute;n concreta del manual en l&iacute;nea se sit&uacute;an
tradicionalmente entre par&eacute;ntesis en la documentaci&oacute;n
impresa, de tal manera que &man.chmod.1; se refiere al programa de
usuario <command>chmod</command> y &man.chmod.2; se refiere a la llamada
de sistema.</para>
<para>Esto est&aacute; muy bien si se conoce el nombre del programa y
simplemente se quiere saber c&oacute;mo usarlo. Pero, &iquest;qu&eacute;
si se recuerda el nombre del programa? Se puede usar man para que
realice una b&uacute;squeda mediante palabras clave en las descripciones
de programas usando el argumento <option>-k</option>:</para>
<screen>&prompt.user; <userinput>man -k mail</userinput></screen>
<para>Con esta orden se nos mostrar&aacute; una lista de programas que
contienen la palabra clave <quote>mail</quote> en sus descripciones.
&Eacute;sto equivale a usar el programa apropos.</para>
<para>Si se est&aacute; mirando todos esos curiosos programas que residen
en <filename>/usr/bin</filename> y no se tiene ni pu&ntilde;etera idea
de que narices hacen realmente, h&aacute;gase un sencillo:</para>
<screen>&prompt.user; <userinput>cd /usr/bin</userinput>
&prompt.user; <userinput>man -f *</userinput></screen>
<para>o</para>
<screen>&prompt.user; <userinput>cd /usr/bin</userinput>
&prompt.user; <userinput>whatis *</userinput></screen>
<para>que hace exactamente lo mismo.</para>
</sect2>
<sect2 id="basics-info">
<title>Archivos de informaci&oacute;n GNU</title>
<para>FreeBSD incluye muchas aplicaciones y utilidades producidas por la
Free Software Foundation (FSF). De manera adicional a las p&aacute;ginas
de manual estos programas vienen con documentos de hipertexto m&aacute;s
detallados, llamados archivos <literal>info</literal>, que pueden ser
revisados con el programa <command>info</command> o, si se ha instalado
<application>emacs</application>, el modo "info" de
<application>emacs</application>.</para>
<para>Para usar el programa &man.info.1; simplemente
tecl&eacute;ese:</para>
<screen>&prompt.user; <userinput>info</userinput></screen>
<para>Para una descripci&oacute;n breve, tecl&eacute;ese
<literal>h</literal>. Para una referencia r&aacute;pida de un programa,
tecl&eacute;ese <literal>?</literal>.</para>
</sect2>
</sect1>
</chapter>
<!--
<!--
Local Variables:
mode: sgml
sgml-declaration: "../chapter.decl"
sgml-indent-data: t
sgml-omittag: nil
sgml-always-quote-attributes: t
sgml-parent-document: ("../handbook.sgml" "part" "chapter")
sgml-parent-document: ("../book.sgml" "part" "chapter")
End:
-->

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -5,150 +5,194 @@
-->
<chapter id="kernelopts">
<title>A&ntilde;adir nuevas opciones de configuraci&oacute;n al kernel</title>
<para><emphasis>Contribuci&acute;n de &a.joerg;</emphasis></para>
<chapterinfo>
<authorgroup>
<author>
<firstname>J&ouml;rg</firstname>
<surname>Wunsch</surname>
<contrib>Contribuido por </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>A&ntilde;adiendo Opciones a la Configuraci&oacute;n de un Nuevo Kernel</title>
<note>
<para>Antes de leer esta secci&oacute;n se debe estar familiarizado con
la secci&oacute;n sobre <link linkend="kernelconfig">configuraci&oacute;n
del kernel</link>.</para>
<para>Es importante que antes de leer este documento, usted este
familiarizado con la secci&oacute;n de <link
linkend="kernelconfig">configuraci&oacute; del kernel</link>.</para>
</note>
<sect1>
<title>Ante todo &iquest;Qu&eacute; es una <emphasis>opci&oacute;n del
kernel</emphasis>?</title>
<title>&iquest;Qu&eacute; son las <emphasis>Opciones del Kernel</emphasis>?</title>
<para>El uso de opciones del kernel se describe b&aacute;sicamente en la secci&oacute;n
<link linkend="kernelconfig-options">configuraci&oacute;n del kernel</link>.
Tambi&eacute;n hay una discusi&oacute;n sobre opciones &ldquo;estilo historico&rdquo; y
&ldquo;estilo moderno&rdquo;. El objetivo final es que en alg&uacute;n momento
todas las opciones soportadas por el kernel se hayan convertido al estilo
moderno, as&iacute; para la gente que hizo un <command>make depend</command> exitoso
en su directorio de compilaci&oacute;n del kernel luego de correr &man.config.8;,
el proceso de build automaticamente seleccionar&aacute; las opciones modificadas y
solo recompilara los archivos donde se usan. El paso de eliminar el viejo
directorio de compilaci&oacute;n cada vez que se corre &man.config.8; como a&uacute;n se
hace podr&aacute; entonces ser eliminado nuevamente.</para>
<para>B&aacute;sicamente el uso de las opciones del kernel se
encuentran descritas en la secci&oacute;n de <link
linkend="kernelconfig-options">configuraci&oacute;n del kernel</link>.
Tambi&eacute;n existe una explicaci&oacute;n de opciones
<quote>hist&oacute;ricas</quote> y de <quote>nuevo-estilo</quote>. La
meta final es que eventualmente todas las opciones soportadas por el
kernel sean del nuevo-estilo, de tal forma que para las personas que
acertadamente ejecutan <command>make depend</command> en el directorio
de compilaci&oacute;n de su kernel, despu&eacute;s de ejecutar
&man.config.8;, el proceso de compilaci&oacute;n detectar&aacute;
autom&aacute;ticamente las opciones modificadas, y s&oacute;lo
recompilar&aacute; los ficheros donde sea necesario. Eliminando el
anterior directorio de compilaci&oacute;n en cada ocasi&oacute;n que
se ejecute &man.config.8; como es llevado a cabo ahora.</para>
<para>B&aacute;sicamente una opci&oacute;n del kernel no es m&aacute;s que la definici&oacute;n de una
macro del preprocesador C para el proceso de compilaci&oacute;n del kernel. Para
hacer la compilaci&oacute;n verdaderamente opcional, la parte correspondiente del
c&oacute;digo fuente del kernel (o archivo <filename>.h</filename> del kernel) debe estar
escrita con el concepto de opci&oacute;n en mente, por ejemplo el default para la opci&oacute;n
debe haber sido hecho modificable. Esto se hace generalmente con algo como:</para>
<para>B&aacute;sicamente, una opci&oacute;n del kernel no es otra cosa
que la definici&oacute;n de un macro del preprocesador C para el
proceso de compilaci&oacute;n del kernel. Para efecto de hacer que la
compilaci&oacute;n sea realmente opcional, la parte que corresponde a
la fuente del kernel (o bien el fichero kernel<filename>.h</filename>),
debe ser escrita teniendo en mente, el uso de
las opciones del kernel, por ejemplo, las opciones por omisi&oacute;n
pueden modificarse con la opci&oacute;n config. Esto normalmente se
lleva a cabo con algo como esto:</para>
<programlisting>
#ifndef THIS_OPTION
#define THIS_OPTION (valor_por_default)
#endif /* THIS_OPTION */</programlisting>
<para>De esta manera, un administrador seleccionando otro valor para la opci&oacute;n
en su archivo de configuraci&oacute;n dejar&aacute; sin efecto el default, y lo reemplazar&aacute;
con su nuevo valor. Como es claro, el nuevo valor ser&aacute; sustituido en el c&oacute;digo
fuente durante la ejecuci&oacute;n del preprocesador, por lo que debe ser una
expresi&oacute;n C v&aacute;lida en el contexto en el que habr&iacute;a sido usado el default.
</para>
<para>Tambi&eacute;n es posible crear opciones sin valor que simplemente activen o
desactiven una parte del c&oacute;digo rodeandola con</para>
<programlisting>
#ifdef THAT_OPTION
<programlisting>#ifndef ESTA_OPCION
#define ESTA_OPCION (algun_valor_por_default)
#endif /* ESTA_OPCION */</programlisting>
[c&oacute;digo fuente espec&iacute;fico]
<para>De esta forma cuando un administrador indica otro valor en su
fichero de configuraci&oacute;n, deja sin efecto el valor que se
tiene originalmente por default, y lo substituye con este nuevo
valor. Claramente el nuevo valor ser&aacute; utilizado como
substituto en el c&oacute;digo fuente, cuando el preprocesador se
ejecute, por lo que debe de tratarse de una expresi&oacute;n
v&aacute;lida para el lenguaje C, sin importar el contexto en el que
se haya estado usando el valor por default.</para>
<para>Tambi&eacute;n es posible crear opciones de menor valor, que
simplemente habilitan o deshabilitan una parte particular del
c&oacute;digo, al encerrarlo en &eacute;l</para>
<programlisting>#ifdef ESTA_OPCION
[su c&oacute;digo aqui]
#endif</programlisting>
<para>Con solo mencionar <literal>THAT_OPTION</literal> en el archivo de
configuraci&oacute;n (con o sin valor) activar&aacute; la parte del c&oacute;digo correspondiente.</para>
<para>Quien est&eacute; familiarizado con el lenguaje C se dar&aacute; cuenta de que todo
podr&iacute;a ser tratado como una &ldquo;opci&oacute;n de configuraci&oacute;n&rdquo; si hay
por lo menos un <literal>#ifdef</literal> referenciandolo...
De todos modos, es poco probable que mucha gente ponga</para>
<programlisting>
options notyet,notdef</programlisting>
<para>en su archivo de configuraci&oacute;n, y luego se pregunten por que la kernel
compilation les da errores. <!-- smiley -->:-)</para>
<para>Como es claro, usar nombres arbitrarios para las opciones hace que sea
muy dif&iacute;cil rastrear su uso por todo el &aacute;rbol de c&oacute;digo fuente. Esa es la
raz&oacute;n que impulsa el esquema de opciones <emphasis>estilo-moderno</emphasis>,
donde cada opci&oacute;n va en un archivo <filename>.h</filename> separado en el
directorio de compilaci&oacute;n del kernel, el cual por convenci&oacute;n se llamar&aacute;
<filename>opt_<replaceable>foo</replaceable>.h</filename>. De esta forma
las dependencias usuales del Makefile pueden aplicarse, y el <command>make
</command> puede determinar que se necesita recompilar cuando una opci&oacute;n fue
cambiada.</para>
<para>El mecanismo de opciones estilo antiguo tiene a&uacute;n una ventaja para
opciones locales o tal vez experimentales que tendr&aacute;n por anticipado poco
tiempo de vida: ya que es facil agregar un nuevo <literal>#ifdef</literal>
al c&oacute;digo fuente del kernel, esto ya lo ha convertido en una opci&oacute;n de
configuraci&oacute;n. En este caso el administrador que use tal opci&oacute;n es responsable
de conocer sus implicaciones ( y tal vez forzar la recompilaci&oacute;n de partes
del kernel a mano). Una vez que la tansici&oacute;n de todas las opciones soportadas
haya sido hecha, &man.config.8; advertir&aacute; cuando aparezca una opci&oacute;n no
soportada en el archivo de configuraci&oacute;n, pero sin embargo la incluir&aacute; en
el Makefile del kernel.</para>
<para>Simplemente al incluir <literal>ESTA_OPCION</literal> en su
fichero de configuraci&oacute;n (con o sin valor alguno), activar&aacute;
la parte del c&oacute;digo que haya ingresado.</para>
<para>Para la gente que este familiarizada con el lenguaje C, inmediatamente
podr&aacute; darse cuenta de que todo pudiera ser tratado como una
<quote>opci&oacute;n de configuraci&oacute;n</quote>, donde cuando menos
se tiene una simple referencia del tipo <literal>#ifdef</literal>...
Por otro lado, es poco probable que alguien especifique</para>
<programlisting>options aunno,nodefinida</programlisting>
<para>en su fichero de configuraci&oacute;n, y que posteriormente
se pregunten por que fallo la compilaci&oacute;n del kernel.</para>
<para>Es claro que, el uso de nombres arbitrarios para las opciones,
hacen muy dif&iacute;cil el poder rastrear su uso en el c&oacute;digo
del kernel. Lo anterior es el razonamiento detr&aacute;s del esquema
de opciones de <emphasis>nuevo-estilo</emphasis>, donde cada opci&oacute;n
se localiza en un fichero <filename>.h</filename> diferente dentro del
directorio de compilaci&oacute;n del kernel, los cuales por
convicci&oacute;n son llamados
<filename>opt_</replaceable>foo</replaceable>.h</filename>. De esta
manera se pueden crear las dependencias dispuestas por Makefile, y el
comando <command>make</command> puede determinar que debe ser
recompilado, cuando una opci&oacute;n ha cambiado.</para>
<para>Aun con esto los mecanismos del estilo-viejo, tienen una ventaja
para las opciones locales o quiz&aacute;s para las opciones de
experimentaci&oacute;n, que cuentan con un periodo de vida corto:
en virtud de que es f&aacute;cil a&ntilde;adir un nuevo
<literal>#ifdef</literal> al c&oacute;digo fuente del kernel, lo cual
ya lo ha hecho una opci&oacute;n de configuraci&oacute;n del kernel. En
este caso, al utilizar esta opci&oacute;n, el administrador, es
responsable por completo, al tener conocimiento de las implicaciones
que tiene usarla (y probablemente el forzar la recompilaci&oacute;n de
ciertas partes del kernel). Una vez que la transici&oacute;n de
todas las opciones soportadas por el kernel ha finalizado, &man.config.8;
advertir&aacute; cuando una opci&oacute;n no soportada aparezca en el
fichero de configuraci&oacute;n, y no proceder&aacute; a incluirlo
en el fichero Makefile del kernel.</para>
</sect1>
<sect1>
<title>Y ahora ¿Qu&eacute; debo hacer para eso?</title>
<title>Ahora, &iquest;Qu&eacute; Debo Hacer?</title>
<para>Primero, edite <filename>sys/conf/options</filename> (o
<filename>sys/i386/conf/options.<replaceable>&lt;arq&gt;</replaceable></filename>,
Ej: <filename>sys/i386/conf/options.i386</filename>), y seleccione un archivo
<filename>opt_<replaceable>foo</replaceable>.h</filename> donde
su nueva opci&oacute;n cabr&iacute;a mejor.</para>
<para>Si ya hay algo que se acerque al proposito de la nueva opci&oacute;n, elijalo.
Por ejemplo, las opciones que modifican la conducta general del subsistema
SCSI pueden ir dentro de <filename>opt_scsi.h</filename>. Por default,
con solo mencionar una opci&oacute;n en el archivo de opciones apropiado,
digamos <literal>FOO</literal>, implica que su valor ir&aacute; dentro del
archivo correspondiente <filename>opt_foo.h</filename>. Esto puede ser
reemplazado en el lado derecho de una regla especificando otro nombre de
archivo.</para>
<para>Si no hay ning&uacute;n
<filename>opt_<replaceable>foo</replaceable>.h</filename> ya
disponible para la nueva opci&oacute;n, invente un nuevo nombre. H&aacute;galo
significativo, y comente la nueva secci&oacute;n en el archivo
<filename>options[<replaceable>.&lt;arq&gt;</replaceable>]</filename>.
&man.config.8; automaticamente tomar&aacute; el cambio, y crear&aacute; el archivo
la pr&oacute;xima vez que se corra. La mayor&iacute;a de las opciones deber&iacute;an ir en
un archivo <filename>.h</filename> individual.</para>
<para>Meter demasiadas opciones en un solo archivo
<filename>opt_<replaceable>foo</replaceable>.h</filename> causar&aacute; que
se tengan que recompilar demasiados archivos del kernel cuando se cambie
una de las opciones en el archivo de configuraci&oacute;n.</para>
<para>Por &uacute;ltimo, averigüe que archivos del kernel dependen de la nueva
opci&oacute;n. A menos que usted haya inventado recientemente su opci&oacute;n, y
a&uacute;n no existe en ning&uacute;n lado <screen>&prompt.user;
<userinput>find /usr/src/sys -name
type f | xargs fgrep NEW_OPTION</userinput></screen> le ser&aacute; de
ayuda para encontrarlos. Edite todos esos archivos y agregue <programlisting>
#include "opt_foo.h"</programlisting> <emphasis>al comienzo</emphasis>,
antes de todos los <literal>#include &lt;xxx.h&gt;</literal>. Este
orden es m&aacute;s importante en tanto las opciones podr&iacute;an reemplazar los
defaults de los archivos <filename>.h</filename> regulares, si los defaults
son de la forma <programlisting> #ifndef NEW_OPTION #define NEW_OPTION (something)
#endif</programlisting> en el <filename>.h</filename> regular.</para>
<para>Agregar una opci&oacute;n que reemplaza algo en un archivo header del sistema
(un archivo ubicado en <filename>/usr/include/sys/</filename>) es
casi siempre un error.
<filename>opt_<replaceable>foo</replaceable>.h</filename> no puede ser
incluido dentro de estos archivos dado que esto da&ntilde;ar&iacute;a al header
muy seriamente, pero si no se incluye entonces otros lugares que lo
incluyen podr&iacute;an tener valores inconsistentes para la opci&oacute;n. S&iacute;, hay
precedentes de esto actualmente, pero eso no los hace m&aacute;s correctos.</para>
<para>Lo primero es, editar el fichero <filename>sys/conf/options</filename>
(o bien <filename>sys/<replaceable>&lt;arch&gt;</replaceable>/conf/options.
<replaceable>&lt;arch&gt;</replaceable></filename>, por ejemplo;
<filename>/sys/i386/conf/options.i386</filename>), y seleccionar un
fichero <filename>opt_<replaceable>foo</replaceable>.h</filename> que
mejor describa la nueva opci&oacute;n, para su inclusi&oacute;n.</para>
<para>Si ya existiese alguno, que se acerce al prop&oacute;sito de la
nueva opci&oacute;n, debe elegir ese. Por ejemplo, opciones que
modifiquen el comportamiento global del subsistema SCSI, pueden
incluirse en <filename>opt_scsi.h</filename>. Por default, con el simple
hecho de mencionar una opci&oacute;n en el fichero apropiado, digamos
<literal>FOO</literal>, implica que el valor correspondiente a esta
opci&oacute;n se localiza en el fichero correspondiente
<filename>opt_foo.h</filename>. Por otro lado, esto puede modificarse
al especificar el nombre de otro fichero.</para>
<para>Si el fichero
<filename>opt_<replaceable>foo</replaceable>.h</filename> para la
nueva opci&oacute;n no existiera, invente un nuevo nombre. Creelo de
manera que sea intuitivo, con significado, y comente la nueva
secci&oacute;n en el fichero
<filename>options[<replaceable>.&lt;arch&gt;</replaceable>]</filename>.
En la ejecuci&oacute;n de &man.config.8;, este autom&aacute;gicamente
reconocer&aacute; los cambios, y crear&aacute; ese fichero, la
pr&oacute;xima vez que se ejecute. La mayor&iacute;a de las opciones
deber&aacute;n incluirse como encabezados por si mismos..</para>
<para>El hecho de incluir muchas opciones, dentro de un solo fichero
<filename>opt_<replaceable>foo</replaceable>.h</filename>,
tendr&aacute; como resultado la creaci&oacute;n de un buen numero de
ficheros del kernel, durante la compilaci&oacute;n, cuando s&oacute;lo
se haya realizado un cambio en alguna de las opciones del fichero de
configuraci&oacute;n del kernel, por esta
raz&oacute;n es conveniente conservar cada opci&oacute;n en su
propio fichero <filename>opt_</filename>.</para>
<para>Finalmente, averigue las dependencias que existen para la
nueva opci&oacute;n. A menos que la nueva opci&oacute;n sea de
nueva creaci&oacute;n, y no exista en ninguna parte, la siguiente
alternativa es su amiga, para efecto de encontrar dependencias:</para>
<screen>&prompt.user;
<userinput>find /usr/src/sys -type f | xargs fgrep NUEVA_OPCION</userinput>
</screen>
<para>El comando anterior dar&aacute; como resultado un listado de
ficheros que tienen dependecia, dirijase a todos esos ficheros y
a&ntilde;ada lo siguiente, en la parte <emphasis>superior</emphasis>
(como encabezado), antes de todo lo que se refiere a
<literal>#include &lt;xxx.h&gt;</literal>.</para>
<programlisting>#include "opt_foo.h"</programlisting>
<para>El seguir este orden es de suma importancia, en virtud de que las
opciones pueden modificar el comportamiento, por omisi&oacute;n, de los
ficheros normales del tipo <quote>#include</quote>
(N de T: librer&iacute;s de encabezado), si
estos son del tipo:</para>
<programlisting> #ifndef NUEVA_OPCION #define NUEVA_OPCION (algo)
#endif</programlisting>
<para>El a&ntilde;adir una opci&oacute;n que substituye alg&uacute;n
encabezado, en ficheros del sistema (por ejemplo; un fichero que se
localiza en <filename>/usr/include/sys/</filename>) da como resultado
casi siempre un error. El fichero <filename>opt_<replaceable>foo
</replaceable>.h</filename> no puede ser incluido en esos ficheros,
en virtud de que generaran un conflicto m&aacute;s serio, con sus
propios encabezados, pero si no son incluidos, al momento de que se
deseen utilizar, se puede obtener un valor inconsistente para esta
opci&oacute;n. Si, existen antecedentes de esto en este momento,
pero eso no lo hace m&aacute;s correcto.</para>
</sect1>
</chapter>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff